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) ?
|
No comments:
Post a Comment