Skip to main content
main-content
Top

About this book

This textbook describes the approaches used by software engineers to build quality into their software. The fundamental principles of software quality management and software process im­provement are discussed in detail, with a particular focus on the CMMI framework. Features: includes review questions at the end of each chapter; covers both theory and practice, and provides guidance on applying the theory in an industrial environment; examines all aspects of the software development process, including project planning and tracking, software lifecycles, software inspections and testing, configuration management, and software quality assurance; provides detailed coverage of software metrics and problem solving; describes SCAMPI appraisals and how they form part of the continuous improvement cycle; presents an introduction to formal methods and the Z specification language; discusses UML, which is used to describe the architecture of the system; reviews the history of the field of software quality.

Table of Contents

1. Introduction

Abstract
The mission of a software company is to develop high-quality innovative products and services at a competitive price to its customers, and to do so ahead of its competitors. This requires a clear vision of the business, a culture of innovation, an emphasis on quality, detailed knowledge of the business domain, and a sound product development strategy.
Customers today have very high expectations on quality, and expect high-quality software products to be consistently delivered on time. The focus on quality requires that the organization define a sound software development infrastructure to enable quality software to be consistently produced.
This chapter discusses the fundamentals of software quality and includes a brief history of the quality field including the work of pioneers such as Deming, Juran and Crosby. The contribution of Watts Humphrey who is considered the father of software quality is discussed, as well as a brief discussion of important topics in the software quality field such as software inspections and testing; software process improvement; metrics and problem solving; appraisals; customer satisfaction, and the cost of quality.
Gerard O’Regan

2. Software Engineering

Abstract
Software engineering involves the multi-person construction of multi-version programs, and is a systematic approach to the development and maintenance of software. It is the application of engineering to software development, and the challenge is to deliver high-quality software on time and on budget to customers.
The birth of software engineering dates to a conference dealing with the crisis in software development held at Garmisch in Germany in the late 1960s. This conference highlighted the problems that existing in the software field including schedule and cost overruns, as well as problems with software quality. It was clear that there was a need to engineer software, and to develop effective methodologies to design and develop software. This chapter provides a broad overview of software engineering, and discusses various software lifecycles such as the Waterfall Model and the Spiral Model, and the phases in software development.
Gerard O’Regan

3. Project Management

Abstract
Project management is concerned with the effective management of projects to ensure the successful delivery of a high-quality product, on time and on budget, to the customer. A project is a temporary group activity designed to accomplish a specific goal such as the delivery of a product to a customer. It has a clearly defined beginning and end in time.
Project management involves good project planning and estimation; the management of resources; the management of issues and change requests that arise during the project; managing quality; managing risks; managing the budget; monitoring progress; taking appropriate action when progress deviates from expectations; communicating progress to the various stakeholders; and delivering a high-quality product to the customer.
Gerard O’Regan

4. Requirements, Design and Development

Abstract
The initial requirements for a project often arise due to a particular problem that the business or customer needs to solve. This leads to a project to implement an appropriate solution, and the first step is to determine the scope of work and the actual requirements for the project, and whether the project is feasible from the cost, time and technical considerations. The user requirements are determined from discussions with the customer, and they are then refined into the system requirements which state the functional and non-functional requirements of the system.
The software design of the system is concerned with the architecture of the system, as well as activities to describe the algorithms and functions required to implement the system requirements. It is a creative process concerned with how the system will be implemented, and the architecture may include hardware such as personal computers and servers as well as the various software modules and their interfaces.
The software development is concerned with the actual implementation of the design, and the implementation is in some programming language such as C++ or Java. The software may be developed internally or it may be outsourced to another company, or a solution may be purchased off-the-shelf. It is essential that the design is valid with respect to the requirements, and that the implemented system is valid with respect to the design.
Gerard O’Regan

5. Configuration Management

Abstract
Software configuration management is concerned with identifying the configuration items of a system; controlling changes to them; and maintaining integrity and traceability. The configuration items are generally documents in the early part of the development lifecycle, whereas the focus is on source code control management and software release management in the later parts of the development cycle.
Configuration management allows the orderly development of software, and it ensures that the impacts of proposed changes are considered prior to authorization. It ensures that releases are planned and that only authorized changes to the software are made. The integrity of the system is maintained and the constituents of the software system and their version numbers are known at all times.
Gerard O’Regan

6. Software Inspections Capability Maturity Model Integration

Abstract
The objective of software inspections is to build quality into the software product, rather than adding quality later. There is clear evidence that the cost of correction of a defect increases the later that it is detected, and it is therefore more cost effective to build quality in rather than adding it later in the development cycle. Software inspections are an effective way of doing this. There are several approaches to software inspections, and these vary in the level of formality employed. A simple informal approach consists of a walkthrough of the document or code by an individual other than the author. The meeting usually takes place at the author’s desk or in a meeting room, and the reviewer and author discuss the document or code informally.
The well-known Fagan inspection process was developed at IBM in the 1970s, and it provides a rigorous approach to building quality into the software. The majority of defects (e.g., 80 %) will be detected by software inspections in a mature software company, with the remainder detected by the various forms of testing conducted in the organization.
Gerard O’Regan

7. Software Testing Capability Maturity Model Integration

Abstract
Testing plays a key role in verifying the correctness of software, and confirming that the requirements have been correctly implemented. It is a constructive and destructive activity in that while on the one hand it aims to verify correctness, on the other hand it aims to find as many defects as possible.
Software testing provides confidence that the product is ready for release to potential customers, and the test manager highlights any risks associated with the product, and these are considered prior to its release. The test manager and test department can be influential in an organization by providing strategic advice on product quality, and by encouraging organization change to improve the quality of the software product through the use of best practice in software engineering.
The various types of testing that may be carried out are discussed including unit, system, performance, regression, usability and user acceptance testing. Test planning, test case definition, test tracking, test metrics, and test reporting are discussed.
Gerard O’Regan

8. Supplier Selection and Management

Abstract
Supplier selection and management is concerned with the selection and management of a third-party software supplier. Many large projects involve total or partial outsourcing of the software development, and it is therefore essential to select a supplier who is capable of delivering high-quality and reliable software on time and on budget.
The process for the selection of the supplier needs to be rigorous, and the capability of the supplier needs to be clearly understood, as well as identifying any associated risks with the supplier. The selection is based on objective criteria such as its ability to deliver the required solution, and while cost is an important criterion it is just one among several other important factors.
Once the selection is finalised a legal agreement is drawn up which usually includes the terms and condition of the contract as well as a statement of work. The supplier then commences the defined work, and is appropriately managed for the duration of the contract.
Gerard O’Regan

9. Software Quality Assurance Software Quality Assurance

Abstract
The purpose of software quality assurance is to provide visibility to management on the processes being followed and the work products being produced in the organization. It is a systematic enquiry into the way that things are done in the organization, and involves conducting audits of projects, suppliers and departments.
It provides visibility into the processes and standards in use in the organization, and the extent of compliance to the defined processes and standards. Software quality assurance involves planning and conducting audits; reporting the results to the affected groups; tracking the assigned audit actions to completion; and conducting follow up audits, as appropriate. It is generally conducted by the SQA group and this group is independent of the groups being audited.
Gerard O’Regan

10. Software Metrics Software Metrics

Abstract
Measurement is an essential part of mathematics and the physical sciences, and in recent years it has been successfully applied to the software engineering discipline. The purpose of a measurement program is to establish and use quantitative measurements to manage the software development environment in the organization, to assist the organization in understanding its current software process maturity, and to provide an objective indication that improvements have been successful.
Measurements provide visibility into the various functional areas in the organization, and the actual quantitative data allow trends to be seen over time. The analysis of the trends and quantitative data allow action plans to be derived for continuous improvement. Measurements may be employed to track the quality, timeliness, cost, schedule, and effort of software projects. The term “metric” and “measurement” are used interchangeably.
The balanced score card may be used to identify appropriate metrics for the organization. The Goal, Question, Metrics (GQM) approach may be employed to define metrics that are related to the organization goals. A collection of sample metrics for an organization is presented, and problem solving tools such as fishbone diagrams, pareto charts, trend charts are discussed.
Gerard O’Regan

11. ISO 9000

Abstract
ISO 9000 is a widely employed quality management standard, and it was developed by the International Standards Organization (ISO). The standard was influenced by the British quality standard (BS 5750), and it was originally published as a standard in 1987, and revised in 1994, 2000 and in 2008.
The ISO 9000 family of standards may be applied to various types of organizations, including manufacturing, software and service organizations. The achievement of ISO 9001 by a company typically indicates that the company has a sound quality system in place, and that quality and customer satisfaction are core values of the company. ISO 9001 is regarded as a minimal standard that an organization which takes quality seriously should satisfy, and many organizations require their subcontractors to be ISO 9001 certified.
Gerard O’Regan

12. Software Process Improvement

Abstract
The origins of the software process improvement field go back to Walter Shewhart’s work on statistical process control in the 1930s. Software process improvement is concerned with practical action to improve the processes in the organization to ensure that they meet business goals more effectively. For example, the goal may be to deliver projects faster and with higher quality.
Software process improvement initiatives lead to a focus on the process and on ways to improve it. Many problems are caused by defective processes rather than people, and a focus on the process helps to avoid a blame culture that occurs when blame is apportioned to individuals rather than the process. The focus on the process leads to a culture of openness in discussing problems and their solutions, and in instilling process ownership in the process practitioners.
Software process improvement allows companies to achieve their business goals more effectively. It helps software companies to deliver high-quality software on-time and on-budget, as well, reducing the cost of development, and improving customer satisfaction. It has become an indispensable tool for software engineers and managers to achieve their goals, and provides a return on investment to the organization.
Various models that support software process improvement are discussed, and these include the CMMI, ISO 9000, PSP and TSP.
Gerard O’Regan

13. Capability Maturity Model Integration

Abstract
The Software Engineering Institute developed the Capability Maturity Model (CMM) in the early 1990s as a framework to help software organizations improve their software process maturity. The CMMI is the successor to the older CMM, and its implementation brings best practice in software and systems engineering into the organization. The SEI and many other quality experts believe that there is a close relationship between the maturity of software processes and the quality of the delivered software product.
The CMMI consists of five maturity levels with each maturity level (except level 1) consisting of a number of process areas. Each process area consists of a set of goals, and these must be implemented by a set of related practices in order for the process area to be satisfied. The practices specify what is to be done rather than how it should be done.
Processes are activities associated with carrying out certain tasks, and they need to be defined and documented. The users of the process need to receive appropriate training to enable them to carry out the process, and process discipline need to be enforced by independent audits. Process performance needs to be monitored and improvements made to ineffective processes.
Gerard O’Regan

14. Setting Up a CMMI Initiative

Abstract
The implementation of the CMMI is a project, and as with any project it needs good planning and management to ensure its success. Once an organization makes a decision to embark on a CMMI initiative, a project manager needs to be appointed to manage the project. The CMMI project manager will treat the implementation as a standard project, and plans are made to implement the CMMI within the approved schedule and budget.
The improvement initiative will often consist of several improvement cycles, with each improvement cycle implementing one or more process areas. Small improvement cycles may be employed to implement findings from an appraisal or improvement suggestions from staff.
The various activities and teams required to set up a CMMI improvement initiative for an organization are discussed. These include the CMMI Steering Group, the SEPG team and process specific teams.
Gerard O’Regan

15. SCAMPI Appraisals SCAMPI Appraisals

Abstract
Appraisals play an essential role in the software process improvement programme. They allow an organization to understand its current software process maturity, including the strengths and weaknesses in its processes. An initial appraisal is conducted at the start of the initiative to allow the organization understand its current process maturity, and to plan and prioritize improvements for the first improvement cycle. Improvements are then implemented, and an appraisal is typically conducted at the end of the cycle to confirm progress.
There are three classes of SCAMPI appraisal, and these are the SCAMPI Class A, B or C appraisals. A SCAMPI Class A appraisal is often conducted on a large organizations to obtain a CMMI rating that allows them to benchmark itself against other organizations. A SCAMPI Class B or C appraisal is less expensive and time consuming but may not be used for benchmarking.
Gerard O’Regan

16. Software Engineering Tools Software Engineering Tools

Abstract
The goal of this chapter is to give a flavour of a selection of tools that can support the various software engineering activities in the organization. Tools for project management, requirements management, configuration management, design and development, testing, and so on are considered. The organization will generally choose tools to support the process rather than choosing a process to support the tool.
Mature organizations will employ a structured approach to the introduction of new tools. First, the requirements for a new tool are specified and the options to satisfy the requirements are considered. These may include developing a tool internally; outsourcing the development of a tool to a third party supplier; or purchasing a tool off the shelf from a vendor.
Several candidate tools will be identified and considered prior to selection, and each candidate tool is evaluated to determine the extent to which it satisfies the specified requirements. An informed decision is then made and the proposed tool will be piloted prior to its deployment. Finally, the users are trained on the tool, and the tool is rolled out throughout the organization. Support is provided for a period post deployment.
Gerard O’Regan

17. Formal Methods

Abstract
The term “formal methods” refer to various mathematical techniques used for the formal specification and development of software. They consist of a formal specification language, and employ a collection of tools to support the syntax checking of the specification, as well as the proof of properties of the specification. They allow questions to be asked about what the system does independently of the implementation.
The use of mathematical notation avoids speculation about the meaning of phrases in an imprecisely worded natural language description of a system. Natural language is inherently ambiguous, whereas mathematics employs a precise rigorous notation.
Formals methods consist of a set of mathematical techniques to specify and derive a program from its specification. Formal methods may be employed to rigorously state the requirements of the proposed system; they may be employed to derive a program from its mathematical specification; and they provide a rigorous proof that the implemented program satisfies its specification. They have been mainly applied to the safety critical field.
Gerard O’Regan

18. Z Formal Specification Language

Abstract
Z is a formal specification language based on Zermelo set theory. It was developed at the Programming Research Group at Oxford University in the early 1980s and became an ISO standard in 2002. Z specifications are mathematical and employ a classical two-valued logic. The use of mathematics ensures precision, and allows inconsistencies and gaps in the specification to be identified. Theorem provers may be employed to demonstrate the correctness of the refinement steps, and that the software implementation meets its specification.
Z is a ‘model oriented’ approach with an explicit model of the state of an abstract machine given, and operations are defined in terms of this state. Its mathematical notation is used for formal specification, and the schema calculus is used to structure the specifications. The latter is visually striking, and consists essentially of boxes, with these boxes or schemas used to describe operations and states. The schema calculus enables schemas to be used as building blocks and combined with other schemas.
Gerard O’Regan

19. Unified Modelling Language

Abstract
The unified modelling language (UML) is a visual modelling language for software systems. It was developed by Jim Rumbaugh, Grady Booch, and Ivar Jacobson at Rational Corporation as a notation for modelling object-oriented systems. It provides a visual means of specifying, constructing and documenting object-oriented systems, and facilitates the understanding of the architecture of the system, and managing the complexity of a large system.
The language was strongly influenced by three methods: the Object Modelling Technique (OMT) developed by Rumbaught; the Booch Method developed by Booch, and Object-Oriented Software Engineering (OOSE) developed by Jacobson. UML unifies and improves upon these methods, and it has become a popular formal approach to modelling software systems.
Gerard O’Regan

20. Epilogue

Abstract
This chapter is the concluding chapter in which we summarize the journey that we have travelled in this book.
Gerard O’Regan
Additional information