Approaches to Software Engineering -- Article Index and Overview

HOME | Project Management

Data Warehousing / Mining

Software Testing | Technical Writing

Article Index

1. Introduction

2. Software Processes [part 1, part 2, part 3]

3. Software Requirements, Analysis and Specification

4. Planning a Software Project

5. Function-Oriented Design

6. Object-Oriented Design

7. Detailed Design

8. Coding

9. Testing


It is now clear that development of large software systems is an extremely complex activity which is full of various opportunities to introduce errors. Software engineering is the discipline that attempts to provide methods to handle this complexity and enable us to produce reliable software systems with maximum productivity.

This guide offers an integrated approach to software engineering. The "integrated" approach is different from others because the different topics are not covered in isolation. A running case study is employed, which is used throughout the guide, illustrating the different activities of software development on the same project.

Most of the major outputs of the project, such as the project plan, design document, code, test plan, test report, and so on, are shown for the case study.

It is important, and very instructive, to not only teach the principles of software engineering but also apply them to a software development project so that all aspects of development can be seen clearly on a project. Such an approach, besides explaining the principles, also offers a case study which can be used as a model for a software development project by a student.

Integration is further achieved by combining software metrics with the different development phases, instead of having a separate section on the subject. It is recognized that metrics are used for controlling and assessing a software project and are employed throughout the life cycle. In the guide, for each phase, relevant metrics and their use is discussed in the section for that phase. This conveys the right idea that metrics is not really a separate topic, complete in itself, but is integrated with the different activities of software development. Similarly, for each phase, quality assurance activities and the control activities that need to be performed while the activities of that phase are being done are described in the section for the particular phase.

The sequence of sections is essentially the same as the sequence of activities performed during software development. All activities, including quality assurance and control activities, that should be performed during a particular phase are grouped in one section. This is particularly useful for a project-based introductory course in software engineering in which both the students and the instructor can follow the sections in the order given both in the lectures as well as in the project.

This guide is for students who have not had previous training in software engineering, and it is suitable for a one-semester course. In order to limit the scope of the guide and focus it for an introductory course, advanced topics like software reuse, reverse engineering, development environments, and so on, have not been included. It was felt that in an introductory course, rather than trying to give a flavor of all the topics, it would be best to introduce the student to the discipline of software engineering as well as to some of the important topics, and to prepare the student for taking advanced courses in the area of software engineering. This need was further felt since in the undergraduate computer science curriculum of most universities, the students have no exposure to software engineering prior to the introductory course, and often do not have any other follow-up course before they graduate. One of the goals of the guide, then, is to include only as much material as can be covered in a one-semester course, which may be the only software engineering course in a computer science student's education.


A lot has changed in the fast-moving area of software engineering since the first edition of this guide was published. However, two particularly dominant trends are clearly discernible: focus on software processes and object-orientation. A lot more attention is now given to software processes because process improvement is considered one of the basic mechanisms for improving quality and productivity. And the object-oriented approach is considered by many one of the best hopes for solving some of the problems faced by software developers.

In this second edition, these two trends are clearly highlighted. A separate section has been included entitled "Software Processes." In addition to talking about the various development process models, the section discusses other processes in soft ware development and other issues related to processes. Object-orientation figures in many sections. Object-oriented analysis is discussed in the section on requirements, while there is a complete section entitled "Object-Oriented Design." Some aspects of object-oriented programming are discussed in the section on coding, while specific techniques for testing object-oriented programs are discussed in the section on testing. Overall, if one wants to develop software using the paradigm of object-orientation, all aspects of development that require different handling are discussed. Most of the other sections have also been enhanced in various ways.

In particular, the sections on requirements specification and testing have been considerably enhanced.

The focus of the guide remains an introductory course on software engineering; advanced topics are still not included. The basic case study-based approach of the guide has been preserved. In addition to the structured design of the case study, the object-oriented design of the case study has been performed, and the design is described in the guide. The structured design has now been implemented in C (in the first edition the coding was done in Pascal), keeping in mind the growing popularity of the C language in commercial establishments. The object-oriented design has been coded in C++. Again, C++ was chosen mostly due to its high availability and popularity. Both the C and C++ code of the case study are available to students via Google search.

Metrics-based software development has been steadily gaining importance. This trend has been reflected in the guide by placing greater emphasis on the role of metrics in software development. The use of some of the metrics in effecting the development process has been demonstrated on the case study. For example, metrics were used to evaluate, and then change, the design of the case study. Similarly, the C code was evaluated and then changed to reduce the complexity. Tools that were developed for metrics extraction and evaluation are also available -- search for them using Google.

The following material is available through the home page (these are discussed at appropriate places in the guide):

1. Design specifications for the structured design of the case study (both the initial and the final versions).

2. The C code implementing the final structured design of the case study (both the initial and the final versions).

3. The C++ code implementing the object-oriented design of the case study.

4. The following tools which have been used in the case study:

• dmetric--to evaluate the complexity of a design.

• complexity--to evaluate the complexity of a C program.

• style--to evaluate the style of a C program.

• ccov--a test coverage analyzer for C programs.


Also see: Guide to Software Engineering--Theory and Application (Why SE; Modeling the Process + Life Cycle)

top of page | Article IndexHome