Software engineering shares common interest with other engineering disciplines. Like other engineering domains where a given problem (for example, building a bridge) can be solved by following a series of interrelated steps, the software development process also comprises a number of steps or phases. The main objective of software engineering is to develop methods for large systems, which help developers obtaining high-quality software in minimum time and at low cost. Therefore, it is essential to perform software development in phases. This phased development of software is often referred to as the software development life cycle (SDLC) or software life cycle.
A software development process comprises different phases. These phases follow a top-to-bottom approach, implying that the phases take inputs from the previous phases, add features, and then produce outputs. The outputs from different phases are referred to as intermediate product, work product, or derivable. Various phases involved in the systematic development of software. The phases of the software development process are shown as a comparison to the process of building a bridge in Table.
Table Building Bridge and Corresponding SDLC Phase
Formulate the problem by understanding the nature and general requirements of the problem.
Understand the locations where the bridge is to be built; estimate the traffic that would pass on from the bridge along with its size requirements such as height and width; and so on.
Defining the problem precisely.
Specify the exact location where the bridge is to be built along with its size and type.
Detailing the solution to the problem.
Determine exact configuration, size of the cables and beams, and developing blueprints for the bridge.
Correspond to actual building of the bridge.
Specify load, pressure, endurance, and robustness of the bridge.
Specify the essential repairs that are to be made such as repainting, repaving, etc.
This phase commences with discussion on the requests made by the user. The requests can be for a new system or for modifying the existing one. In this phase, it is determined whether the user’s requirements can be met with the available hardware and software technologies. Preliminary investigation verifies the problem and understands the need for the required system. It involves determining whether the proposed system is beneficial for business and can be developed within the specified budget. In addition, the time factor that determines the duration of the project is also considered.
Preliminary investigation should be quick and cost effective. The output of preliminary investigation decides whether the new system should be developed. There are three constraints on which the decision to go ahead or not depends. These are listed below.
- Technical: This evaluation determines whether technology needed for the proposed system is available and if it is available, then how it can be integrated within the organization. Technical evaluation also determines whether the existing system can be upgraded to use new technology and’ whether the organization has the expertise to use it.
- Time: This evaluation determines the time needed to complete a project. Time factor is an important issue in software development as cost increases with an increase in the time period of a project.
- Budgetary: This evaluation looks at the financial aspect of the project. Budgetary evaluation determines whether the investment needed to implement the system will be recovered at later stages.
This phase studies the problems or requirements of software in detail. These requirements define the processes to be managed during the software development. After analyzing the requirements of the user, a requirements statement known as Software Requirements Specification (SRS) is developed. After analysis, planning for the project begins, which includes developing plans that describe the activities to be performed during the project development such as software configuration management plans, project and scheduling, and quality assurance plans. In addition, the resources required during the project are also determined.
In this phase, the requirements are given a ‘defined’ form. Design can be defined as a process of deciding information structures in terms of efficiency, flexibility, and reusability. Software design serves as the blueprint for the implementation of requirements in the software system. Each element of the analysis model in the analysis phase provides information that can be used for creating design models. The requirements specification of software together with data, functional, and behavioural model provides a platform to feed the design task to achieve the desired functionality and quality.
First, a top level design is made to outline the problem solution. Next, detailed designing is carried out to specify all the details needed so that the programmers can easily implement the1design. Some of the basic design principles that are used for a good design practice are listed below.
- Software design should be traceable to the analysis model: As a single design element often traces multiple requirements, it becomes essential to have a means for tracking how requirements are satisfied by a design model.
- Software design should demonstrate uniformity and integration: A design is said to be uniform if its appearance is consistent in the design model. In most cases, rules, formats, and styles are defined in advance to the design team before the design work begins.
- Software design should be structured to adapt to changes: The software design should be flexible enough to adapt to changes easily. To achieve the flexibility, the basic design concepts such as abstraction, refinement, and modularity should be applied effectively.
- Software design should endeavour to minimize conceptual (Semantic) Errors: The design team ensures that major conceptual elements of designsuch as ambiguity and inconsistency have been addressed in advance.
The coding phase can be defined as a process of translating the software requirements into a programming language, using tools that are available. Writing an efficient software code requires a thorough knowledge of programming language and its tools. Therefore, it is important to choose the appropriate programming language according to the user’s requirements. A program code is efficient if it makes optimal use of resources and contains minimum errors.
To write software code efficiently and with minimum errors in a programming language, a coding style is followed. A coding style comprises several guidelines known as coding guidelines that are used to implement individual programming language constructs, comments, formatting, and so on. The objective of using these guidelines is to reduce complexity and errors in programs and improve the understanding of the source code. A set of comprehensive coding guidelines encompasses all aspects of code development. To ensure that all developers work in a harmonized manner (the source code should reflect a harmonized style as if a single developer has written the entire code in one session), the developers should be aware of the coding guidelines before the inception of a software project.
Software testing is performed to ensure that the software is free from errors. Efficient testing improves the quality of software. To achieve high-quality software, testing requires a thorough analysis of the software in a systematic manner. A test plan is created to test software in a planned and systematic manner. In addition, software testing is performed to ensure that the software produces the correct output. This implies that outputs produced should be according to user requirements, produced by following rules and guidelines. These rules and guidelines that are followed while performing testing are known as principles of software testing and help perform testing efficiently and effectively. The commonly followed principles for software testing are listed below.
- Define the expected output: When programs are executed during software testing, they mayor may not produce the expected output. This can be due to different errors present in the software. Hence, before software testing begins, it is necessary to define the expected output.
- Inspect output of each test completely: The output of each test should be inspected thoroughly in order to determine the performance and functionality of the software.
- Include test cases for invalid and unexpected conditions: Software produces correct outputs when it is tested using precise or expected inputs. However, if an unexpected input is given to software, it may produce erroneous outputs. Hence, it is necessary to develop test cases that detect errors, when unexpected and incorrect inputs are given.
- Test the modified program to check its expected performance: Sometimes, when certain modifications (such-as adding new functions) are made in the software, it may produce unexpected outputs. Hence it is necessary to test the software after modifications to check whether it performs in the expected manner.
- Plan test to find errors: Testing is planned with an intention of finding errors in software. It should be viewed as a process that locates errors rather than as one that proves the correctness of the software.
This phase comprises a set of software engineering activities that occur after the software has been delivered to the user. The objective of this phase is to make the software operational as per the user requirements and to provide continuity of service. To achieve this objective, software maintenance focuses on fixing errors, recovering from failures such as hardware failures or incompatibility of hardware with software. In addition, it facilitates future maintenance work by modifying the software code and databases used in the software.
After the software is developed and delivered, it may require changes. Sometimes, changes are made in a software system when user requirements are not completely met. To make changes in a software system, the software maintenance process evaluates, controls, and implements changes. Note that changes can also be forced on the software system because of changes in government regulations or in policies of the organization.
Software is developed using different software process models. It must be noted that software maintenance is applicable to every software system regardless of the software process model followed. Software maintenance is performed to accomplish tasks such as detecting and fixing errors, supporting enhancements, and improving software to accomplish user requirements.