Think with Enlab

Diving deep into the ocean of technology

Stay Connected. No spam!
  • Home
  • Development
  • Software Engineering Effective Techniques - How to Analyze Software Requirements

Software Engineering Effective Techniques - How to Analyze Software Requirements

 

As a software developer, every task you do begins with requirement analysis because it affects all phases of your work. If it's not well-done, you will likely make mistakes in later phases. In this article, I’m going to share with you some techniques that can help you be more efficient in analyzing requirements.

 

Requirement Analysis Procedure

Step 1: Define Software Requirements

You may encounter vague business requirements for software development from time to time. In that case, the first step is to clarify and define them. I'd like to list out several useful techniques to elicit and define requirements as follows:

Document analysis

User manuals and process documents about the current system can become helpful in defining software requirements. Below is a few steps that you can consider for your analysis:

  • Collecting relevant documents
  • Evaluating these documents if they are appropriate to be studied
  • Analyzing them to identify relevant requirements
  • Reviewing and confirming identified details

Interview

This technique is very helpful in revealing true software needs. For example, you can make use of questions like who uses the system in what timeframe for what purposes, and how their works.

Observation

Observing can provide further information about processes, inputs, and outputs of the existing system. Sometimes, when you interview stakeholders, they cannot explain enough about their process so consider using this technique to bring out the missing information.

Workshop

Another good method to use is to organize a workshop with a group of users or stakeholders. During the workshop, you can talk with participants to discover, define, scope, and prioritize their needs in a new software system. This technique is very efficient in specifying requirements since it promotes mutual understanding from direct communication between stakeholders and the project team.

Brainstorming

Another practical approach to determine requirements. Users can come up with very innovative ideas that they have seen or experienced somewhere else. Then, you need to collect all their ideas then review and keep relevant ones to include in the new system.

Prototyping

The prototyping technique is often used to present screen mock-ups to users to get their feedback. This helps them visualize how the system will be so that they can provide very useful comments to help recognize requirements that truly meet their needs.

At the end of this step, you may have a clear understanding of the system and how it should work. You should put in a Word document features and functionalities of the system, as well as any business logic like data validation or calculation. This kind of document is known as the Software Requirements Specification (SRS).

Step 2: Analyze Requirements

Once you have software requirements defined, move on to breaking them down into smaller categories by features and functionalities. The result of this break down looks something like this:

  • Module 1 / Screen 1
    • Feature 1.1
      • Function 1.1
      • Function 1.2
    • Feature 1.2
      • Function 2.1
      • Function 2.2
  • Module 2 / Screen 2
    • Feature 2.1
      • Function 1.1
      • Function 1.2
    • Feature 2.2
      • Function 2.1
      • Function 2.2

The software requirements are now divided into chunks that can be documented as user stories. You should use a project management tool like Jira or Trello to document these user stories.

Step 3: Break Down Tasks

To this step, you already have the requirement breakdown structure tree which provides a complete understanding of what requirements to meet. It is time to turn them into actionable tasks that are fine-grained enough to get done. Remember that the coding and verifying tasks are like leaf nodes of the above tree. The final result could be something like this:

step 3 break down tasks - add a discount bill

 

Software Requirement Breakdown in Practice

Let's analyze an example of which requirement applies to the above procedure.

Define Requirements

Collect and Understand Requirements

The Agent Portal document is provided by the client over email. While screening it, there are words/terms I’m unsure of: Payment schedule, payoff, reschedule a payment. I will then research to learn about them. In case I’m still unable to figure them out, I will ask my client who is the domain expert.

Define Requirements

Once I collect all requirements (including answers for my questions), I will analyze and codify my understanding and define how the application should work: An agent signs in and the system shows a list of loans. He/she can search by loan number, click to view loan detail info. From the loan detail screen, he/she can schedule a payment, skip a payment, reschedule a payment, schedule a payoff, etc.

Analyze Requirements

What I would do in this step is to read the requirement documents from top to bottom looking for actions that the user would like to take or the system should do (look for verbs or phrases that are associated with the user or system: should be, should show, etc...Any indicator that can help me list out actionable requirement items). The result would be like this:

  • Authentication
    • Admin to login to manage agents only, not to manage loan payments
    • Agent to login to the portal
    • Agent to logout
  • Agent management
    • Admin to create a new agent
    • Admin to update an existing agent
    • Admin to delete an agent
    • Agent to not be able to access and manage other agents
  • Loan management
    • Agent to search loans by loan number
    • Agent to schedule a payment for an existing loan
    • Agent to skip a payment for a given loan
    • Agent to reschedule a payment
    • Agent to schedule a payoff
    • System to send an email to the customer when a payment is scheduled

Break Down Tasks

Upon the requirement items identified in step 2, what I would do in this step is to define tasks that need to be done to complete each requirement item. There may be some tasks that are shared among the requirement items so we organize them in separate groups. The result would be like this:

  • Create Login UI with email/password fields
  • Implement a logging mechanism to log all exceptions
  • Authentication
    • Admin to login to manage agents only, not to manage loan payments
      • Implement Agents list screen showing all agents with add/edit/update buttons
      • Implement Admin role for Login API
        • Error "Access denied" returned if the account is not registered/invalid
        • Access token returned along with role ID if the account is valid and found
        • Access denied error shows when navigating to Agent's home screen directly from the browser address bar
    • Agent to login to the portal
      • Update Login API to support Agent role
      • Show agent's home page instead of admin's page upon successful login
        • Access denied error shows when navigating to Admin's home screen directly from the browser address bar
  • Agent management
    • Admin to create a new agent
      • UI for adding a new agent
      • Implement Add new agent API
        • The error shows if agent email is duplicated
        • Notification (success for failure) shows for 3 seconds
        • Agents list updated upon successful addition
        • Resending activation email should be active if the user doesn’t receive the activation email or forget activation
    • Admin to update an existing agent
      • Modify Add new agent screen for updating an agent
      • Implement Update agent API
        • The error shows if the email is duplicated with another agent's email
        • Notification (success for failure) shows for 3 seconds
    • Admin to delete an agent
      • UI for the confirmation message
      • Implement Delete agent API
        • The error shows and no deletion if that agent has associated data (loans, payments already processed)
        • Notification should be in red color
        • Agents list updated upon successful deletion
  • Loan management
    • Agent to search loans by loan number
      • UI for agent's home page (list of loans)
      • API for searching for loans by number
        • Loan number must not be null
        • Access denied if an invalid access token is passed in.
    • Front-end code to call API and show loans
  • Agent to schedule a payment for an existing loan
    • UI for scheduling a payment
    • API scheduling a payment
      • Payment schedule must not be created for loans that already have a schedule.
      • Error from ABC must be returned to the client without exposing sensitive info, and log
    • Front-end code to consume API
      • Payment schedule info refreshed when successfully scheduled
  • Agent to skip a payment for a given loan
    • UI to confirm skipping a payment that is due
    • API to skip a payment
      • The amount of the next payment must be accumulated for this skipped one
    • Front-end code to consume API

From there on, we can break down task items and unit test cases the same way.

  • Agent to reschedule a payment
  • Agent to schedule a payoff
  • System to send an email to the customer when a payment is scheduled
  • Agent to logout

 

Appendix

Below is an example of a requirement document ready for analysis:

Our client is a leasing agency that is using a loan management system called X which exposes API for developers to use to interact with their system from third-party software. The demand is to create a web application that would enable an agent to schedule a payment, change payment method or schedule a payoff for a customer at a date in the future using the API that the X loan system exposed.

Functional Requirements

  • Admin to manage agents (add, remove)
  • Agent to log into our web application to do work
  • Agent to search for a loan using the loan number
  • Agent to schedule a payment for a loan in the future
  • Agent to skip a payment for a loan
  • Agent to reschedule a payment
  • Agent to schedule a loan payoff
  • System to send out an email based on the email template whenever a payment is scheduled to the customer

Technical Requirements

The ABC’s API documentation is at https://api.xxx.com/help/index. The client proxies the call through our API instead of interacting with it directly from the front-end. The API code is at https://github.com/xxx and ABC’s API documentation explains how it would work. The following endpoints are in particular interest:

  • POST /api/v1/loans/{loanId}/payoff (to schedule a payoff)
  • POST /api/v1/loans/{loanId}/payments (to schedule a payment)
  • PUT /api/v1/loans/{loanId}/payments/{paymentId}/dueDate (to reschedule a payment)
  • PUT /api/v1/loans/{loanId}/payments/{paymentId}/paymentMode (to skip a payment, change paymentMode to Cash (id =7))

Their API does not have every ABC’s API proxied so we will need to fill in all the missing ones.

The client is going to either reuse the meridian/crystal front-end or create new, whichever easier for us. We can use Syncfusion UI controls or material controls, again whichever easier.
To test, we can use the username/password for clientCode “abc”, which is also the default client, and we don’t have to send in the client code param to interact with the ABC system. The client advised us to look at ABCApiExt.cs class in the Meridian.Web.Api project.
The test customerId is abc and the test loanId is xyz. We are also advised to be careful and use only this loan as it is associated with the production system.

 

Analyze Software Requirements CTA button


About the author

CTO CEO Enlab Software Vinh Tran Hi, my name's Vinh and I'm the CEO of Enlab Software. I'm passionate about building world-class digital products, helping my team become mature in their careers, and creating an environment where people find purpose and meaning in life.

Up Next

Why should startups consider Flutter for cross-platform app developments
November 12,2020 by Thang Le
What makes your startup successful? In a sense, you may count upon the high-quality product...
How to Secure Sensitive Data in The Configuration
October 13,2020 by Tan Nguyen
Introduction On the blog post “How to Configure .Net Core Environments With Practical Examples”, we shared...
How IIS Processes ASP.NET Core HTTP Request
September 30,2020 by Vinh Tran
Have you ever wondered what happens under the hood when you make an API call to...
Effective techniques for software engineer
September 25,2020 by Vinh Tran
Introduction Software development methodologies were introduced and practiced in every project using Waterfall which is the...