Monday, November 5, 2007

Functional and Non-functional Requirements

  • Functional requirements:-

Functional requirements define the internal workings of the software: that is, the calculations, technical details, data manipulation and processing, and other specific functionality that show how the use cases are to be satisfied. They are supported by non-functional requirements, which impose constraints on the design or implementation (such as performance requirements, security, quality standards, or design constraints).

As defined in requirements engineering, functional requirements specify specific behaviors of a system. This should be contrasted with non-functional requirements which specify overall characteristics such as cost and reliability. (An alternative view is that functional requirements specify specific behavior while nonfunctionals provide adjectives which may be used to describe these behaviors.)

Typically, a requirements analyst generates functional requirements after building use cases. However this may have exceptions since software development is an iterative process and sometimes certain requirements are conceived prior to the definition of the use cases. Both artifacts (use cases documents and requirements documents) complement each other in a bidirectional process.

A typical functional requirement will contain a unique name and number, a brief summary, and a rationale. This information is used to help the reader understand why the requirement is needed, and to track the requirement through the development of the system.

The core of the requirement is the description of the required behavior, which must be a clear and readable description of the required behavior. This behavior may come from organizational or business rules, or it may be discovered through elicitation sessions with users, stakeholders, and other experts within the organization. Many requirements will be uncovered during the use case development. When this happens, the requirements analyst should create a placeholder requirement with a name and summary, and research the details later, to be filled in when they are better known.

Software requirements must be clear, correct, unambiguous, specific, and verifiable.


  • Non-functional requirements:-

In systems engineering and requirements engineering, non-functional requirements are requirements which specify criteria that can be used to judge the operation of a system, rather than specific behaviors. This should be contrasted with functional requirements that specify specific behavior or functions. Typical non-functional requirements are reliability, scalability, and cost. Non-functional requirements are often called the ilities of a system. Other terms for non-functional requirements are "quality attributes" and "quality of service requirements".

Examples

A system may be required to present the user with a real-time display of the number of records in a database. This is a functional requirement. In order to fulfill this requirement, the system architects must ensure that the database is capable of updating its record count within a predetermined response time - this is a non-functional requirement.

Sufficient network bandwidth may also be a non-functional requirement of a system.

Other examples:

  • Availability
  • Certification
  • Dependency on other parties
  • Documentation
  • Efficiency (resource consumption for given load)
  • Legal and licensing issues
  • Maintainability
  • Performance / Response time
  • Platform compatibility
  • Price
  • Resource constraints (processor speed, memory, disk space, network bandwidth etc. )
  • Safety
  • Scalability
  • Security
  • Software, tools, standards etc. Compatibility
  • Support issues
  • Usability by target user community

No comments: