Search code examples
requirementssystem-requirements

What is the difference between functional and non-functional requirements?


What is the difference between functional and non-functional requirements in the context of designing a software system?

Give examples for each case.


Solution

  • A functional requirement describes what a software system should do, while non-functional requirements place constraints on how the system will do so.

    Let me elaborate.

    An example of a functional requirement would be:

    • A system must send an email whenever a certain condition is met (e.g. an order is placed, a customer signs up, etc).

    A related non-functional requirement for the system may be:

    • Emails should be sent with a latency of no greater than 12 hours from such an activity.

    The functional requirement is describing the behavior of the system as it relates to the system's functionality. The non-functional requirement elaborates a performance characteristic of the system.

    Typically non-functional requirements fall into areas such as:

    • Accessibility
    • Capacity, current and forecast
    • Compliance
    • Documentation
    • Disaster recovery
    • Efficiency
    • Effectiveness
    • Extensibility
    • Fault tolerance
    • Interoperability
    • Maintainability
    • Privacy
    • Portability
    • Quality
    • Reliability
    • Resilience
    • Response time
    • Robustness
    • Scalability
    • Security
    • Stability
    • Supportability
    • Testability

    A more complete list is available at Wikipedia's entry for non-functional requirements.

    Non-functional requirements are sometimes defined in terms of metrics (i.e. something that can be measured about the system) to make them more tangible. Non-functional requirements may also describe aspects of the system that don't relate to its execution, but rather to its evolution over time (e.g. maintainability, extensibility, documentation, etc.).