top of page

Requirements Analysis

Type of Requirements
Business Requirements

They are high-level requirements that are taken from the business case from the projects.

For example, a mobile banking service system provides banking services to Southeast Asia. The business requirement that is decided for India is account summary and fund transfer while for China account summary and bill payment is decided as a business requirement 

Functional and Non-Functional Requirements

Software requirement is a

need that has to be implemented into the system. Software requirement is usually expressed as a statement.

For example, in context to banking application, the functional requirement will be when the customer selects "View Balance" they must be able to look at their latest account balance. 

 

Software requirement can also be a non-functional, it can be a performance requirement. For example, a non-functional requirement is where every page of the system should be visible to the users within 5 seconds.

Architectural and Design Requirements

These requirements are more detailed than business requirements. It determines the overall design required to implement the business requirement.

 

For example in a Banking use case: Bill Payment Requirement:  

This use case describes how a customer can log in into net banking and use the Bill Payment Facility. The customer will see a dashboard of outstanding bills of registered billers. He can add, modify, and delete a biller detail. The customer can configure SMS, email alerts for different billing actions. He can see a history of past paid bills. The actors starting this use case are bank customers or support personnel. 

System and Integration Requirements

At the lowest level, we have system and integration requirements. It is a detailed description of each and every requirement. It can be in the form of user stories which is really describing everyday business language. The requirements are in abundant details so that developers can begin coding.

 

Here is an example of a Bill Payment module where requirement will be mentioned for adding a Biller

Bill Payment: Add Billers Requirements:

  • Utility Provider Name

  • Relationship/Customer Number 

  • Auto Payments – Yes/No

  • Pay Entire Bill – Yes/No

  • Auto Payment Limit – Do not pay if Bill is over a specified amount

Others

Sometimes for some project, you might not receive any requirements or documents to work with. But still, there are other sources of requirements that you can consider for the requirement or information so that you can base your software or test design on these requirements. So the other sources for the requirement you can rely on are:

  • Knowledge transfer from colleagues or employees already working on that project

  • Talk about project to business analyst, product manager, project lead and developers 

  • Analyze previous system version that is already implemented into the system

  • Analyze the older requirement document of the project

  • Look into the past Bug reports, some of the bug reports are turned into enhancement request which may be implemented into the current version

  • Look into installation guide if it is available to see what is the installation required

  • Analyze the domain or industry knowledge that the team is trying to implement

 

Whatever source of requirement you get to make sure to document them in some form, get them reviewed from other experienced and knowledgeable team members. 

How to Analyze Requirements

The requirements must maintain a standard quality of its requirement, different types of requirement quality include:

Atomic

So each and every requirement you have should be atomic, which means it should be at a very low level of details it should not be possible to separate out into components. Here we will see the two examples for requirements, at Atomic and uniquely identified requirements levels. 

So let us continue with the example of system build for the education domain. Here, the bad requirement is "Students will be able to enroll in undergraduate and postgraduate courses". This is a bad requirement because it is not atomic because it talks about two different entities undergraduates and post-graduates courses.

 

So obviously it is not a good requirement but bad requirement, so correspondence good requirement would be to separate it out into two requirements. So one talks about the enrolment to undergraduate courses while the other talks about the enrolment to the post-graduate courses.

Uniquely Identified 

Similarly, the next requirement quality is to check for uniquely identified, here we have two separate requirements but they both have the same ID#1. So, if we are referring our requirement with reference to ID#, but it is not clear which exact requirement we are referring to document or other parts of the system as both have the same ID#1. So separating out with unique id's, so good requirement will be re-return as section 1- course enrolments, and it has two requirements 1.1 id is enrolment to undergraduate courses while 1.2 id is enrolment to postgraduate courses.

Complete

Also, each and every requirement should be complete. For example, here the bad requirement says a "professor user will log into the system by providing his username, password, and other relevant information". Here the other relevant information is not clear, so the other relevant information should be spelled out in good requirement to make the requirement complete.

Consistent and Unambiguous 

Next, each and every requirement should be consistent and unambiguous, so here, for instance, we have requirements "A student will have either undergraduate courses or post-graduate courses but not both" this is one requirement there is some other requirement that says "Some courses will be open to both under-graduate and post-graduate students".

The problem in this requirement is that from the first requirement it seems that the courses are divided into two categories undergraduate courses and postgraduate courses and student can opt either of two but not both. But when you read another requirement it conflicts with the first requirement and it tells that some courses will open to both post-graduate and under-graduate. 

 

So it is obvious to convert this bad requirement into good requirement which is "A student will have either under-graduate courses or post-graduate courses but not both". Which means that every course will be marked either being an under-graduate course or post-graduate course.

Traceable

Each and every requirement should be traceable because there are already different levels of requirement, we already saw that at the top we had business requirements, and then we have an architectural and design requirements followed by system integration requirements.

Now when we convert business requirement into architectural and design requirements or we convert architectural and design requirements to system integration requirements there has to be traceability. Which means that we should be able to take each and every business requirements and map it to the corresponding one or more software architectural and design requirement. So here is an example of a bad requirement that says "Maintain student information – mapped to BRD req ID?" the requirement id is not given over here.

 

So, converting it to a good requirement it says the same thing but it is mapped with the requirement id 4.1. So mapping should be there for each and every requirement. The same way we have a high level and low-level mapping requirement, the mapping is also there between system and integration requirement to the code that implements that requirement and also there is a mapping between the system and integration requirement to the test case which test that particular requirement. 

So this traceability is all across the entire project.

Priortized

Then each and every requirement must be prioritized, so the team has guideline so which requirement that able to implement first and which can be done later on. Here you can see the bad priority has register student, maintain user information and each and every requirement has given priority-1. Everything cannot be at the same priority, so requirement can be prioritized. So the example of good requirement over here is the registered student and enroll courses are given the highest priority 1 while maintaining user information comes below at priority 2 and then we have view report card at priority-3.

Testable

Each and every requirement should be testable, here the bad requirement is "each page of the system will load in an acceptable time frame". Now there are two problems with this requirement first is that each page meaning that there can be many pages, which going to blow up the testing efforts. The other problem is that it says the page is going to load in an acceptable time frame, now what is the acceptable time frame? Acceptable to whom. So we have to convert the non-testable argument into a testable argument, which specifically tells about which page we are talking about "register student and enrolls courses pages" and the acceptable time frame is also given which is 5 seconds. 

Conclusion
 

So this is how we have to look at each and every requirement at an appropriate level. For example, if we are going to build software with regards to system and integration requirements. We have to look in system and integration requirements given in the software requirement specifications or user stories and apply to each and every requirement quality. Then check whether each and every requirement is atomic, uniquely identified, and complete and so on.

bottom of page