Think with Enlab

Diving deep into the ocean of technology

Stay Connected. No spam!

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 are 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 work.

 

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 is 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 breakdown 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:

 

 

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
        • The loan number must not be null
        • Access is 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
      • A 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 something new, whichever is easier for us. We can use Syncfusion UI controls or material controls, again whichever is 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 loaned is xyz. We are also advised to be careful and use only this loan as it is associated with the production system.

 

About the author

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.
Frequently Asked Questions (FAQs)
What is requirements analysis in software engineering, and why is it crucial?

Requirements analysis is the process of defining user expectations for a new software being developed. It’s crucial because it ensures that the software team understands what the customer or user wants and needs from the software. A well-conducted requirements analysis helps prevent misunderstandings and incomplete requirements, leading to a successful project that meets user needs.

What are the primary steps involved in the requirements analysis process?

The primary steps in the requirements analysis process include:

Defining Software Requirements: Clarifying vague business requirements, using techniques like document analysis, interviews, observation, workshops, brainstorming, and prototyping.

Analyzing Requirements: Breaking down defined requirements into smaller categories by features and functionalities.

Breaking Down Tasks: Converting the requirement breakdown structure into actionable tasks, documenting them as user stories in project management tools like Jira or Trello.

What techniques can be used to gather and define software requirements effectively?

Effective techniques for gathering and defining software requirements include document analysis, interviews, observation, workshops, brainstorming, and prototyping. These techniques help in eliciting clear, comprehensive, and actionable software requirements from stakeholders, ensuring a solid foundation for the development process.

How does one effectively analyze and break down software requirements?

Effectively analyzing and breaking down software requirements involves reading requirement documents thoroughly to identify actionable items and organizing these items into modules, features, and functions. This breakdown facilitates a structured approach to developing user stories and tasks, ensuring every requirement is addressed systematically.

What are some best practices for transforming software requirements into actionable tasks?

Best practices for transforming software requirements into actionable tasks include ensuring that each task is fine-grained enough to be actionable and completed. Tasks should be like leaf nodes in the requirement breakdown structure, with a clear definition and scope. Organizing tasks in project management tools and maintaining traceability with requirements help in effective tracking and implementation.

Up Next

July 05, 2024 by Dat Le
In the rapidly evolving world of software development, Big Data stands out as a transformative force....
June 27, 2024 by Dat Le
In today's rapidly evolving digital landscape, secure coding practices are paramount to safeguarding applications from a...
June 20, 2024 by Dat Le
In the rapidly evolving digital landscape, the role of User Interface (UI) and User Experience (UX)...
June 17, 2024 by Dat Le
In the dynamic world of software development, one element has emerged as crucial to success: User...

Can we send you our next blog posts? Only the best stuffs.

Subscribe