Keywords

We embarked on a long journey in this book and set ourselves the objective of providing a concise introduction to the software engineering field to students and practitioners. The book was based on the author’s experience at leading industrial companies, and it covered both theory and practice. The objective was to give the reader a grasp of the fundamentals of the software engineering field, as well as guidance on how to apply the theory in an industrial environment.

Customers today have very high expectations on quality and expect high-quality software to be consistently delivered on time and on budget. The focus on quality requires that sound software engineering practices be employed to enable quality software to be consistently produced. Further, it is an accepted view in the software quality field that the quality of the delivered software is closely related to the quality of the underlying processes used to build the software and on adherence to them.

Many processes are employed in the design and development of software, and companies need to determine the extent to which the underlying processes used to design, develop, test and manage software projects are fit for purpose. The process will need to be continuously improved, and often, model-based improvement using a framework such as the Capability Maturity Model Integration (CMMI) is employed. There is also the need to focus on best practice in software engineering, as well as emerging technologies from various research programmes. Piloting or technology transfer of innovative technology is an important part of continuous improvement. Companies need to focus on customer satisfaction and software quality, and they need to ensure that the desired quality is built into the software product.

We discussed project planning and tracking, software lifecycles, software inspections and testing, configuration management, software quality assurance, etc. The CMMI was discussed, and it provides a framework that assists organizations in software process improvement. The appraisal of an organization against the CMMI allows the organization to determine the current capability or maturity of selected software processes and to prioritize improvements. It reveals strengths and weaknesses of the management and engineering processes in the organization. The output from the appraisal is used to formulate an improvement plan, which is then tracked to completion.

We provided an introduction to project management and discussed project estimation; project planning and scheduling, project monitoring and control, risk management and managing project quality.

We discussed requirements engineering including activities such as requirements gathering, requirements elicitation, requirements analysis, requirements management, and requirements verification and validation.

We then discussed design and development, including the high-level architectural design, the low-level design of individual programmes, and software development and reuse. The views of Hoare and Parnas on software design were discussed, and we discussed function-oriented design and object-oriented design. We discussed software development topics such as software reuse, customized-off-the-shelf software (COTS), and open-source software development.

We then moved on to discuss configuration management and discussed the concept of a baseline. Configuration management is concerned with identifying those deliverables that are subject to change control and controlling changes to them.

We discussed software inspections including Fagan inspections, as well as the less formal review and walk-through methodologies. Software testing was then discussed, including the various types of testing that may be carried out, and we discussed test planning, test case definition, test tracking, test metrics, test reporting and testing in an e-commerce environment.

We then discussed the selection and management of a software supplier and described how candidate suppliers may be formally evaluated, selected and managed during the project.

We discussed software quality assurance and the importance of process quality, and the discussion included audits and described how they are carried out. We then discussed metrics and problem-solving, including the balanced score card and GQM, as well as presenting a collection of sample metrics for an organization.

We then discussed software reliability and dependability and covered topics such as software reliability and software reliability models; the Cleanroom methodology; system availability; safety and security critical systems, and dependency engineering.

We discussed formal methods, which are often employed in the safety critical and security critical fields. These consist of a set of mathematical techniques to specify and derive a programme from its specification. Formal methods may be employed to rigorously state the requirements of the proposed system; they may be employed to derive a programme from its mathematical specification; and they provide a rigorous proof that the implemented programme satisfies its specification.

We discussed the Z specification language, which was developed at the Programming Research Group at Oxford University in the early 1980s. Z specifications are mathematical and the use of mathematics ensures precision and allows inconsistencies and gaps in the specification to be identified. Theorem provers may be employed to demonstrate that the software implementation meets its specification.

We then discussed the unified modelling language (UML), which is a visual modelling language for software systems, and it is used to present several views of the system architecture. We presented various UML diagrams such as use case diagrams, sequence diagrams and activity diagrams.

We then discussed the important field of software process improvement, discussed the idea of a software process and discussed the benefits that may be gained from software process improvement.

We gave an overview of the CMMI model, and discussed its five maturity levels and their constituent process areas. We discussed both the staged and continuous representations of the CMMI.

We then discussed a selection of tools to support various software engineering activities, including tools to support project management, requirements engineering, configuration management, design and development activities and software testing.

We discussed the Agile methodology which is a popular lightweight approach to software development. Agile has a strong collaborative style of working, and it advocates adaptive planning and evolutionary development,

We then discussed some innovative developments in the computer field, such as distributed systems, service-oriented architecture, software as a service, cloud computing and embedded systems. This led to a discussion of the many innovations in the software engineering and the need for continuous innovation.

20.1 The Future of Software Engineering

Software engineering has come a long way since the 1950s and 1960s, when it was accepted that the completed software would always contain lots of defects and that the coding should be done as quickly as possible, to enable these defects to be quickly identified and corrected.

The software crisis in the late 1960s highlighted problems with budget and schedule overruns, as well as problems with the quality and reliability of the delivered software. This led to the birth of software engineering as a discipline in its own right and the realization that programming is quite distinct from science and mathematics.

The software engineering field is highly innovative and many new technologies and systems have been developed over the decades. These include object-oriented design and development; formal methods and UML; the waterfall and spiral models; software inspections and software testing; software process improvement and the CMMI; and the Agile methodology.

Software engineering will continue to be fundamental to the success of projects. There is not a one size that fits all: some companies (e.g. in the safety critical or security critical fields) are likely to focus on formal methods and software process maturity models such as the CMMI. For other areas, the lightweight Agile methodology may be the appropriate software development methodology.

Companies are likely to measure the cost of poor quality in the future, as driving down the cost of poor quality will become more important. Software components and the verification of software components are likely to become important, in order to speed up software development and to shorten time to market. Software reuse and open-source software development are likely to grow in popularity, and continuous innovation will continue in the software engineering field.