Below, the lessons of the Software Engineering module are summarized for review.

  1. In the introduction, the software crisis was described through the example of the Denver International Airport. This example showed the inherent complexity of software, a characteristic which makes it extremely difficult to design correct software.

  2. Two software life cycles models were introduced: the Waterfall Model and the Spiral Model. The six processes of the Waterfall software life cycle model were defined: requirements engineering, design, programming, integration, delivery, and maintenance. Of these processes, maintenance consumes the most resources during the life cycle of a typical software product.

  3. The Waterfall model was presented and explained. This model is the classical software life cycle model. The model is characterized by a series of products and processes where each process takes a product and transforms it to a new product. The new product then becomes the input to the next process of the model.

  4. The Spiral model was presented and explained. This model emphasizes the need for risk management and prototyping in the software development process.

  5. Six important software quality characteristics were introduced in an effort to provide a meaningful answer to the question "What is better software?" These characteristics were maintainability, correctness, reusability, reliability, portability, and efficiency.

  6. The procedural paradigm of software development was described and illustrated. This paradigm emphasizes the decomposition of software based on logical tasks. Tasks are then implemented as modules or subprograms that receive data, operate on the data, and then pass this data on to the next module. This approach was illustrated through the design and implementation of a simple sorting routine.

  7. The object oriented paradigm of software development was described and illustrated. This paradigm decomposes software as objects which are collections of private data and a set of operations that can be performed on that data. This decomposition is both task-based and data-based because it groups tasks and data together in objects.

  8. The object oriented paradigm also includes the ideas of classes and inheritance which support software reuse.

  9. The procedural and object oriented paradigms were compared and analyzed according to the six software quality characteristics presented earlier.