Stages of Development
Software development consists of a sequence of stages. The following subsections elaborate on each stage:
Analysis. Model the application from the perspective of the real world (see Reference ).
Design. Decide how to build the application from the analysis model (see Reference ).
Implementation. Write the actual database and programming code (see Reference ).
Data conversion. Populate the application database with available data.
Testing. Ensure that the application is suitable for actual use.
Training. Help users master the new application.
Maintenance. Preserve the soundness of the application over the long term.
Modeling is the focus of analysis (see Figure 1). Analysis prepares a model of the application from the perspective of the real world. During analysis, you specify what must be done, not how it should be done. Analysis is a difficult task in its own right, and developers must fully understand it before addressing the additional complexities of design.
Figure 1 Analysis: The purpose of analysis is to construct models that specify what must be done, not how it should be done.
The preparation of a model and architecture must be interleaved for complex applications. The architecture helps to establish a model's scope. In turn, modeling reveals important issues of strategy to resolve. Thus, there is much interplay between the construction of a model and the model's architecture, and they must happen together.
During analysis, developers consider the available inputs and resolve ambiguities. Often, business experts are not sure of the precise requirements, and must refine them in tandem with software development. Modeling quickens the convergence between developers and business experts because it is much faster to work with multiple iterations of models than with code. Models highlight omissions and inconsistencies so that they can be resolved.
During design, the focus shifts from an emphasis on the real world to techniques for realizing the application (see Figure 2). Developers address how a problem is to be solved, but they don't descend into the fine details of the target database and programming language. Thus, during design, developers should convert a model to relational database tables, for example; but they should defer the idiosyncrasies of a specific database manager, such as Oracle.
Figure 2 Design: During design, developers address the way a problem is to be solved, but defer the fine details.
The first step of design is to devise an architecture. For complex problems, you must coordinate the development of an architecture with an analysis model. Next, you choose a specific data management approachwhether to use simple files (which suffice for some applications), a database manager, or possibly something else. Developers then determine the data structures and algorithms that will realize the model from analysis.
Implementation is the stage of writing the actual code (see Figure 3). It is at this point that developers must deal with the nuances of the specific database manager and programming languages that are being used to construct the system. Developers should take the design model and drive it into the database structure. Once they establish a sound database, they can write programming logic and build a user interface. Tools can generate the code for creating an empty database.
Figure 3 Implementation: Implementation is the stage for writing the actual programming and database code.
Data conversion adds existing data to a database (see Figure 4). Data conversion is often an intricate task; source databases can be difficult to understand. In addition, the source data structure rarely matches the target data structure. Many source databases have data flaws that must be repaired.
Figure 4 Data conversion: Data conversion adds existing data to a database.
After implementation, the system is complete, but it must be carefully tested before it can be commissioned for actual use. Hopefully, the ideas that inspired the original project were nurtured through the previous stages by the use of models. Testers once again look at the original business requirements and verify that the system delivers the proper functionality. Testing can also uncover accidental errors (bugs) that were introduced. If an application runs on multiple hardware and operating system platforms, it should be tested on all of them.
An organization must train users so that it can benefit fully from an application. Training accelerates users on the software learning curve.
Once development is complete and a system has been deployed, it must be maintained for continued success. There are several kinds of maintenance. Bugs that remain in the original system will gradually appear during use and must be fixed. A successful application will also trigger requests for enhancements, and a long-lived application will occasionally have to be restructured.