How the software development lifecycle can help you create effective software

The software development lifecycle (SDLC) is a series of steps and guidelines for creating software. Typically, the SDLC comprises six stages: requirements gathering and feasibility analysis, design, development, testing, deployment, and maintenance. Software development teams use the SDLC to create software that effectively meets the user’s needs, while minimising costs, ensuring the project is delivered on schedule and capitalising on each team member’s strengths. In this article, we will discuss each SDLC stage and explore how you can use the SDLC to develop effective software.

software-development-lifecycle.png

Requirements gathering and feasibility analysis

The requirements gathering and feasibility analysis stage is a time to assess the resource requirements and risks associated with the project. Careful consideration of the requirements can help you decide whether the project offers sufficient benefit to offset the costs and risks. For this reason, it is important to gather as much information as possible about the project’s purpose, its users, and the environment in which it will be used. To achieve this, it is important to meet with your users to define what their needs are and what they expect from the project. Once the project’s requirements are clear, the requirements should be discussed with subject matter experts to determine the expertise, time and resources that will be required to deliver the project. At the end of the requirements gathering and feasibility analysis stage, you should have a report (such as a Software Requirement Specification document) that details the purpose and expectations for the project. You can also use the report to assess whether the benefit offered by the project sufficiently compensates the resources, labour and time required to deliver the software product.

Example – After discussing a music application project with users, you may identify two core user stories:

  1. As a user of the music application, I need to browse the songs, albums and artists in my music library.
  2. As a user of the music application, I need to control the playback of the songs in my music library.

You could translate these user stories into a list of requirements including:

Design

After analysing the project’s requirements, and determining that the project is feasible, you can begin to design how the software will look and function. For example, if the software will have a user interface, then you could draw a wireframe diagram to illustrate how the components of the user interface will be organised. You can also design the software's code architecture. For example, you can create UML diagrams that detail the classes, functions and variables that will be used in the application. Altogether, your design documents should address all the user requirements that were defined in the requirements gathering stage. It may also be beneficial to share the design documents with the user to request feedback and ensure the product will fulfil their expectations.

Continuing with the music application example, the application will likely require classes for storing data about the user’s songs and playlists. You could create a UML diagram demonstrating a many-to-many association between the Playlist and Song classes. The Song class contains several properties detailing the song’s metadata. Each instance of the Song class can be associated with zero or more instances of the Playlist class. Likewise, each instance of the Playlist class can be associated with one or more instances of the Song class.

software-development-uml-class-diagram.png

Development

Once the design documents have been prepared, the developers can begin to create the software product based on the design guidelines. The development team will prepare all aspects of the software including databases, application code and any physical IT infrastructure that is required for the software to function. Developers should incorporate features that address every user requirement. Also, the project filenames and code should adhere to any business naming conventions. For example, some organisations prefer variable names to use camel case (e.g. firstVariable), while others have alternative preferences such as separating words using underscores (e.g. first_variable).

During the development phase, it is often useful to use a version control repository such as Git or Subversion. Developers can use the repository to store and share code and monitor any changes that are made. Also, developers will often prepare documentation detailing how the software works and the instructions for using it. Comprehensive documentation can help other developers learn about the project and teach users how the software works.

Testing

To ensure you release the best product possible, it is important to comprehensively test each aspect of the software for security and performance and to identify any bugs. Ideally, testers should be independent of the development team so they can complete an impartial and objective assessment of the software. Testers will often use a predefined set of criteria to assess the software. The criteria should be based on the project’s requirements. Every project requirement and use case should be evaluated. You may also want to assess non-functional requirements such as the software's security, capacity to scale, and usability. The testers will assess that each requirement is fulfilled as expected and record their observations in a test report. If any issues are identified, then they should be reported back to the development team so the software can be modified accordingly.

The testers would prepare a test schedule to test each application feature and record their observations.

software-development-lifecycle-testing-stage.png

Deployment

Once you have a finished, thoroughly tested product that fulfils all the project’s requirements, you can deploy the product and make it available to your users. Deployment can involve uploading your software to a server, installing the software directly on the users’ systems, or any other kind of delivery method that is best suited to your product and users. Also, it is important to show your users how your software works so they can use it confidently. For this reason, the deployment process can also involve organising training sessions and preparing user manuals and documentation to show users how to best utilise the software.

Maintenance

Post-deployment, the software should be monitored to assess its performance and identify areas for improvement. Also, if the user’s needs change then the software may have to be updated accordingly. If changes to your software are required, then you will need to release an updated version that addresses the issues. Often, it is beneficial for developers and operations teams to use the same tools to track bugs and performance, so that information can be easily communicated between teams and solutions can be developed quickly.

How the software development lifecycle can help you create effective software

The SDLC provides you with a blueprint for creating well-documented, robust software that effectively meets the user’s needs. In clearly defining the project’s requirements and creating a detailed plan for how those requirements will be fulfilled, the SDLC helps ensure the project is delivered on schedule and within budget. The SDLC also provides a clear and transparent structure for the project and reduces the risk of going off the track and spending time developing features that the user does not want.

The SDLC is not without its limitations. For example, the SDLC revolves around the user’s requirements. If you fail to identify requirements or consider all stakeholders, then the product will be incomplete. Documenting all requirements is critical to the success of projects developed using the SDLC. Also, the SDLC methodology directs testing to be completed near the end of the project. If lots of issues are identified during testing, then this can lead to delays in the delivery of the project and unexpected costs. For this reason, some development teams prefer to integrate the SDLC with an Agile software development methodology. Agile is an iterative approach, which means testing and user feedback are regularly incorporated throughout the project. Issues can be identified and rectified quicker, and this can overcome some of the limitations of the traditional SDLC.

Next >>>