Thursday, September 15, 2016

What is the Software Development Lifecycle (SDLC)?

Introduction

Imposter Syndrome, or the feeling of inadequacy in one’s ability, can be detrimental to the completion of a project. This most likely originates from a project not being managed effectively. To combat the Imposter Syndrome it may help to go back to the basics of Software Development, starting with the Software Development Life Cycle. Revisiting the Software Development Life Cycle will build or reinforce a foundation that will be used to manage projects effectively. The phases of the Software Development Life Cycle are common to most, if not all, Software Development Processes/Models/Frameworks. Once the groundwork has been laid, specific implementations of Software Development Processes/Models/Frameworks can be studied and applied to projects to manage them effectively.

Other Keywords

The amount of keywords (sometimes referred to as 'Buzzwords') in Software Development is staggering. There are several keywords that seem related to the Software Development Life Cycle, such as: the ‘Systems Development Life Cycle’, ‘System Development Methodology’, ‘Application Development Life Cycle’, or the ‘Software Development Process’. Although there may be commonalities between the Software Development Life Cycle and these keywords, this may not be the case and the following text is only focusing on the Software Development Life Cycle and its phases.

Definition

The first step to answering what the Software Development Life Cycle is, is to determine what a Life Cycle is. Searching returns the following definitions for ‘Life Cycle’:

  • The continuous sequence of changes undergone by an organism from one primary form, as a gamete, to the development of the same form again.
  • A series of stages, as childhood and middle age, that characterize the course of existence of an individual, group, or culture.
  • Any similar series of stages – particularly related to the life cycle of a manufactured product.
The definitions show that a ‘Life Cycle’ defines periods of growth known as stages over the lifetime of an organism. Using the definitions above, a definition for the Software Development Life Cycle could be “a similar series of stages or phases that characterize the course of existence of a software product”. Now the question is ‘What are the similar series of stages of the Software Development Life Cycle’?

Real-Life Example

Before diving into the specifics of each phase of the Software Development Life Cycle, it may be beneficial to draw references from a real-world project. There are many commonalities between a construction projects' phases and the Software Development Life Cycle’s phases. The goal of looking at the Software Development Life Cycle through the construction reference lens is to help make the phases and the functions of the phases clear.

A construction project, whether it be personal or commercial, begins as an idea for development of some kind of structure. The next step in a construction project is to define what the construction project needs. This could be determining the number of floors, rooms, and bathrooms. The project continues by drawing up the plans or blueprints for those needs, consulting with an architect, and getting bids from contractors to begin estimating the cost of the project. Once the plans have been finalized, construction can be begin. Periodically throughout the construction, inspections must be performed. The inspections are to confirm that safety protocols are being followed and that proper building materials are being used in the proper quantities. Once construction is complete, people can begin using the facility as it was intended. For a personal home, this means the residents can move in. For a commercial project, such as a business, this means the employees can begin working inside. With day to day use, some of the structure's features may break or require maintenance, upkeep, or repair. Ideally, these items are covered under a warranty. Eventually, the owner of the structure may wish to renovate or rebuild. When this occurs, it marks the end of the structure’s Life Cycle.

Phases

Photo showing an interpretation of the Software Development Life Cycle phases (photo found via Google search)
 A Software Life Cycle begins when a software product is born from an idea in a phase known as 'Conception' and ends when the software is no longer used or needed in its current form in a stage known as 'Retirement'. But what goes on between the ‘Conception’ and ‘Retirement’ phases? A Software Development Life Cycle consists of stages in the following order: ‘Conception’, ‘Requirements Analysis’, ‘Design’, ‘Implementation’, ‘Testing & Integration’, ‘Acceptance & Installation’, ‘Operations & Maintenance’, and ‘Retirement’. These phases are common to most, if not all, Software Development Processes/Models/Frameworks and are used to describe how a software product is created. Later, specific implementations of these Software Development Processes/Models/Frameworks will be studied to see how the phases of the Software Development Life Cycle are executed.

Conception

In the real-world example above, the project began as an idea for developing a structure, either for personal or commercial use. Similarly, the Software Development Life Cycle begins with the ‘Conception’ of an idea for a software product that will serve a purpose or solve a need. Out of the other phases in the Software Development Life Cycle, this stage is the shortest and is often-times omitted entirely.

Requirements Analysis

The Requirements Analysis phase builds on the idea created in the ‘Conception’ phase. This phase focuses on documenting what must be included in the finished product in order for the project to be considered a success (also known as the 'Success Criteria'). Looking at the real-world example from before, the Requirements Analysis phase was represented by determining the number of floors, rooms, and bathrooms that would be available in the completed structure.

In Software Development, the Requirements Analysis phase may require meeting with the ‘Business’ or ‘Stakeholders.’ These are the people who are interested in seeing and using the completed software product. These individuals will provide the most value in identifying what the software product needs. The generated requirements can be documented in the form of lists, ‘User Stories,’ or ‘Use Cases.’ ‘User Stories’ or ‘Use Cases’ are preferred for large scale projects because they provide a series of scenarios that convey how the system should interact with a human user or another system to achieve a specific business goal (completing a requirement). It is important to keep ‘User Stories’ and ‘Use Cases’ non-technical. ‘User Stories’ or ‘Use Cases’ should describe the behavior of the software system, not the internal workings of the system or how it is implemented.

Requirements Analysis may seem like a long process, but it is critical to the success or failure of a software product. Understanding what a software product needs to do is paramount before writing the code that does it.

Design

Next comes the Design phase, where the project gets planned in more detail by preparing diagrams and models. In the construction example, this refers to drawing blueprints, consulting with an architect, and starting to estimate the cost of the project. For Software Development, the Design phase can include planning the software solution by building UML diagrams, creating user interface mock-ups, or small prototypes, and writing the core functionality of the software product. The overall goal of this step is to solidify the most critical aspects of the software product before development begins. Performing this step now can prevent large unforeseen costs that could otherwise cause the project to fail.

Implementation

Once the Design phase been finalized, the Implementation phase can begin and the product can be built. In the Software Development Life Cycle, this phase is usually takes the largest amount of time.

Testing & Integration

After the Implementation phase has been completed and ideally, during the Implementation phase several tests will be performed to make sure the project is being implemented properly. Construction projects have inspections to ensure the blueprints are being followed correctly, that the materials are used correctly, and that the structure is being built to code correctly.

Inspections in Software Development usually take the form of written or manual testing of the software product. Testing & Integration in Software Development is made more difficult due to differing requirements between projects, and because the number of tests that can be run is nearly infinite. This means there is no definitive way to determine that a project is progressing in the same way as another project. The requirements specify what areas of the software product need to be tested and how. These tests ensure the results produced are expected for a section of code (known as ‘Unit Tests’), or for the entire system (known as ‘Integration Tests’), or that the infrastructure holds up during high utilization (known as ‘Stress Tests’).

Acceptance & Installation

Even after all the development and testing has been done, a product is not considered complete. It must first pass the next phase of the Life Cycle known as Acceptance & Installation. In this phase the completed product is delivered to the ‘Business’ or ‘Stakeholders’ who will verify that the product meets their needs and operates as expected.

If the real-world project were a personal home, this would mean the structure would have residents living inside the structure. A commercial business structure would have employees using the facility regularly.

In Software Development, this phase requires the software product be installed and started up in an environment similar to its intended environment. Usually, during this stage a ‘Smoke Test’ is performed to ensure the core functionality of the software product works as expected.

Operations & Maintenance

After the Acceptance and Installation phase, the Operations & Maintenance phase is used to correct faults, or improve attributes of a product. In the real-world, this is referred to as warranty or maintenance work. For Software Development, the Operations & Maintenance phase is used to improve the software. Usually to increase the performance of the software product, although sometimes inconsistencies or defects may be reported by the customer. If any inconsistencies or defects are found, the Life Cycle returns to the Implementation phase. Once the inconsistencies or defects are fixed and tested, a new deliverable is provided to the customer and the process continues until the software project fails or is retired.

Retirement

The final phase of the Software Development Life Cycle is Retirement, which a product enters into when it is no longer used or needed in its current form. For personal or residential construction projects this could mean when the owners or occupants are considering renovating or demolishing the current structure. A software product is said to be retired when the software is marked as obsolete or support by the producers is withdrawn. The Retirement phase could be brief or could span for an extended period of time.

Summary

As shown above, the Software Development Life Cycle is a series of related stages or phases that characterize the course of existence of a software product. A Software Development Life Cycle consists of stages in the following order: ‘Conception’, ‘Requirements Analysis’, ‘Design’, ‘Implementation’, ‘Testing & Integration’, ‘Acceptance & Installation’, ‘Operations & Maintenance’, and ‘Retirement’. A Software Development Life Cycle begins with an idea in the 'Conception' phase, each subsequent phase is used to expand upon the previous phases and advance the development of the software product until it reaches the 'Retirement' phase. The 'Retirement' phase is met when the software product is no longer used or needed in its current form. The phases of the Software Development Life Cycle are common to most, if not all, Software Development Processes/Models/Frameworks to describe how a software product is created and managed effectively. Later, specific implementations of these Software Development Processes/Models/Frameworks will be studied to see how the phases of the Software Development Life Cycle are executed to manage a project effectively. The Software Development Life Cycle is a useful tool to prevent mishaps from occurring during the development of a software product like those seen in the image below:

The results of bad software project management (photo found via Google Search)

No comments:

Post a Comment