WebsiteSpark

Tuesday 23 April 2013

Non-Functional requirements NFRs

Non-Functional requirements NFRs

NFRs are vital to an application similar to the functional requirements. Most of the projects undertaken stresses mostly on the functional requirements while ignoring or devoting very less time to NFRs. But off late the software industry has accepted NFRs to be at par with functional requirements and is now being considered upfront during the pre-development (RFP) stages.
A/c ISO 9126, NFRs are classified into 6 main categories namely
1)      Functionality
2)      Reliability
3)      Usability
4)      Efficiency
5)      Maintainability and
6)      Portability

Functionality
Functionality NFR deals with the way the system delivers the functionality or the functional requirements. This is further classified into categories as described below.
A.      Suitability
B.      Accuracy
C.      Interoperability
D.      Compliance
E.       Security

Reliability
Reliability NFR deals with the reliability and recoverability of the system as classified below.
A.      Maturity
B.      Recoverability
C.      Fault Tolerance

Usability
Usability NFR deals with the way user adapts to the system under consideration, classified as below.
A.      Learnability
B.      Understandability
C.      Operability
     Efficiency
This NFR deals with how efficiently the system utilizes the resources, classified as below.
A.      Time Behavior
B.      Resource utilization

Maintainability
This NFR deals with system maintenance and enhancement aspects, classified as below.
A.      Stability
B.      Analyzability
C.      Changeability
D.      Testability

Portability

This NFR comes into place where the system needs to operate in multiple distributed environments, further classified as below.
A.      Install ability
B.      Replace ability
C.      Adaptability
Following are a set of check lists for each of the NFRs categories. This by no means is an exhaustive list. This was developed based on experience and readings.


Functionality

Does the system meets all the functional requirement of the business users ?

How well can this system adapt to unanticipated business changes ?
Security

How critical is this system ?

What is the expected impact of security failure ?

How r security failures identified ?

Was there any security failures in the past ? What was then impact ?

Are there known vulnerabilities ?

How are users trained in security issues ?

Are there any response team to handle security breach ?

Authentication and authorization process ?

Secure communications between the system ?

Intended users for this application ?
Inerrability

Does the system interacts / communicates with other applications ?

Are the technologies used to communicate with other systems based on standards ?

Are the component design consistent and understandable ?

Versioning policy & processes ?

Special prototype requirements ( IPv6) ?
Conceptual integrity

Do people understand the architecture very well ?

What are the architectural styles used / followed in the application ?

Design patterns followed during the design & development of the application ?

Were contradictory decisions made about the architecture ?

Do new requirements fits easily in the architecture or do they need modifications in architecture ?
Build ability

Are enough time , money and resources available to build an architecture baseline for projects ?

Is the architecture too complex ?

Is the architecture sufficiently modular to promote parallel development ?

Are there too many technical risks ?
Reusability

Is this system start of new product line ?

Will /does other system be buli / in place , that matches the characteristics of current system under development ?

Will the components of this system be used in other systems ?

Are there any reusable components already in place , which can be used in this system ?

Are there any existing framework or code assets, which can be reused in this application ?

is there existing technical infrastructure that this application will use ?

will this technical infrastructure build by this application be reused by other application ?

What are the associated cost , risk and benefits of building reusable component ?

What are the policy processes and standards defined for developing any reusable components ?

Reliability (General)

What is the impact of failure of this system on business?

How is bad performance impacted on business?

What is the impact of unreliable system on business?

Can the integrity of data be compromises?
Availability

What is the impact of failure of this system?

What are the different failures classified as?

How r hardware & software failures identified?

How quick must the system be operational after a failure?

How are failures identified?

Are there any redundant system that can cover in case of failure ?

How do we know that all the critical functions are replicated ?

Are the system backup done ?

What are the different kinds of backup ?

How long does it take to backup and restore the system ?

What are the expected operational hours ?

What is the expected up time (month / Year) any specific season ?

How is the availability of current system ?

Is the availability of current system within the accepted range ?


Usability

Is the user interface understandable (self-explanatory) ?

Is the UI adaptable to support people with disability ?

Does the developer find the tools used in developing this application usable & understandable ?

Do we need special development skills for this application ?


Performance (Efficiency)

What are the expected response time for each use case ?

What are the average / Min and Max expected response time ?

What resources are being used (CPU,RAM,HD) ?

What is the resource consumption ?

What is the resource arbitration policy ?

What is the expected number of concurrent session (Users) ?

Any long computation in the application ?

Any long wait period under any use case / state ?

Are the server processes single or multithreaded ?

Is there sufficient network bandwidth for all the participating node on the network ?

Are there multiple threads accessing any shared resource ? How ?

Will bad performance effect usability ?

is the response time synchronous or asynchronous ?

What is the expected batch processing time ?

performance variation based on time of day / month/year/ events ?

What is the expected growth of system load ?

Maintainability
Changeability

How often changes requested for this system ?

What are the anticipated new functionalities ?

How are new releases handled for current platform ?

Global components and variables ?

Does the application use any indirect mechanism ( async calls) like publish subscribe ?

how are changes in message formats handled ?

Were design compromised for performance / security / others ?

Does the change in functionality result in changes in interfaces (framework) ? If yes then how often ?

Does the software involve any configuration ?

is the UI independent of business logic ( can UI change without business logic changes or business requirement change without change in UI) ?

Impact of changes in data model ?

Is the system prepared for multi-processor environment ?

Is the system prepared for multi user (sharing on single server ) environment ?

How long does it take to implement business requirement changes ?

Who does the changes ?
Testability

Are there tools, techniques, processes in place to test the code, classes, components and services of this application ?

Are there hooks in framework to perform Unit Tests ?

Can the tests be automated or are there automated test scripts ?

Can the system run in a debug mode ?

Is there any mechanism to capture debug information (logs etc) ?
Subset ability

Is the system modular ?

Are there many dependencies between the modules ?

Does a change in one module propagate changes in other modules ?

Portability

Do the benefit of proprietary platform outweigh the drawbacks ?

Can the expense of creating a separation layer be justified ?

At what level should the system portability be provided (UI/BL/DAO/DB) ?