Software process

A common mistake among students about software is that software development is just programming. When they think of programming, they think of language such as C, C++, Java etc. and as long as they can code in those languages, they can do software. In fact, programming is only a small part of the software development process. There are many things that must be done before programming can take place.

The process of software development consists of many steps. The sum of all steps is called the software development life cycle. There are several software life cycle models such as the waterfall model, the spiral model, the incremental release model etc. However, all of them consists of five basic processes that make up the software life cycle: Requirements, Design, Implement, (Code), , Integration & Test, and Maintenance.

Requirements process: Typically, project team receives a requirements specification from customer. The team reviews, analyzes these requirements then meet with customers to discuss and validate these requirements. Project manager and some key members must use certain techniques to assess the “real needs” of customers. It is a common mistake among students that requirements specification is good enough to start the project so they do not learn to analyze and verify these requirements. In fact, most requirements specification are not well- written by customers. Most have many conflicting or missing requirements and do not represent “the real needs” of customers. Many requirements are only “Wishes” not “Needs” and some even have imposed solutions for developers. That is why the project team must analyze, review and validate them with customers before the project can start. If the requirements process is not done properly, the final software may not be useful to customers or meet their needs.

The requirements specification written by customer usually reflects the view of users. The project team must analyze and understand users’ need, how it will be used, and transforms them into the developers’ view where they can implement. If the requirements are not well defined as customer may not know what they really want. The project team may have to use technique such as rapid prototyping in which a simple “prototype” is built that mimic the functionality of the desired final software. By using this “prototype” as a demonstration to customer, the project team can discuss with customers in details to understand how the final product will be used and determine the “real requirements”. The requirements process is completed when the software requirements specification is completely transformed into the developers’ view so the project team can move to the next phase. (Note: The more efforts that project team puts in this process, the less likely requirements will change and the chance the software project will achieve customers’ satisfaction is high.)

Design process: In this process, the project team decides “How” they will build the software product so that it meets the approved requirements specifications. Usually the design process goes through several steps from high level (Architecture) to lower levels (Detailed design). At the architecture level, requirements are organized into different types or views. A view is a representation of a set of system components and relationships among them. This is where the hardware components, software components and interface components are identified and organize on how they will be implemented. This process is called “stepwise refinement” (Step by step) as it allows the project team to manage the complexity of software. Starting at the high level at component layers, project team can decompose the function into more detailed specific tasks at the programming language statement. When the design is complete, it is recorded in the design specification document. (Note: The more efforts the project team put in this process, the higher quality and better structure the final product will become. Certain quality attributes such as performance, scalability, maintainability etc are identified during the design process)

Implementation process (Coding): During this process, the project team begin to write code of the software based on the design components. The software is divided into separate units called modules in order to handle the complexity of the programming process. The teams must implement these modules according to a coding standard and procedures. Team members are also responsible for proper documentation describing their code and for testing the code to insure correctness.

Team members must test their own works to make sure they work well (Unit test) before handing them to the next process.

(Note: This process is not required a lot of efforts if the previous processes are done properly. Coding is usually just an implementation of the detailed design. If the design is well done, project should never have problem with coding)

Integration & Test process: During this process, project team validate and verify that the software meets the requirements and work as expected. Since the modules were developed separately, testing is very important to make sure that they all work together as planned. Even with a good design, incompatibilities between modules may happen and they need to be identified and corrected to complete the integration as all individual modules are combined to form the integrated software product. There are number of tests that must be executed such as Function test, System test, Integration test, Performance test, Security test etc. (Note: For small project, the project team conducts all these tests. For larger project, there is often an independent test team will conduct these tests. All tests must be planned, organized and test cases must be reviewed and approved before testing can be done)

After all tests completed successfully, the project team deliver the software to the customers. Usually the customers will conduct acceptance testing on the software to determine whether or not it meets the requirements specifications that both sides agreed upon in the requirements process. If the software is accepted, it is installed and used by the customers.

Maintenance process: Most software products are not static but will change. During maintenance, the project team continues to provide support by fixing defects (If any), add new functionality, change the software to be used in new platforms, or adapt the software to new technologies. Although many students believe that when the project complete and deliver to customers, the team work should be done. In reality, all software products evolve over time to meet the changing needs of the clients. Maintenance is probably the longest process in the development life cycle, it may last several years after the software is delivered to customers.

If you understand this software development process, you can apply it to any model such as waterfall, incremental or spiral depend on the type of project that you are using.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University