1.2 Introduction
The information society and knowledge economy is an integral part of the world we live in, and software is at the heart of modern business and is pervasive throughout society. New technologies such as the World Wide Web and mobile phones have transformed our lives, and software is an integral part of these technologies. Companies have changed their way of doing business to take advantage of new technologies, and major changes have been made to the business processes in banks, insurance companies, and the travel industry.
Modern automobiles use software to enhance the driving experience, and the software is used to fly airplanes safely throughout the world. Software is used to control nuclear power stations as well as missile and defence systems; it is used to control manufacturing plants, and everyday items such as televisions and washing machines are all driven by software.
The success of business today is highly influenced by the functionality and quality of the software that it uses. It is essential that the software used is safe, reliable, of a high quality, and fit for purpose. Companies may develop their own software internally or they may acquire software solutions off-the-shelf or from bespoke software development. Software development companies need to deliver high-quality and reliable software consistently on time to their customers.
Cost is a key driver in most organizations and it is essential that software is produced as cheaply and efficiently as possible, and that waste is reduced or eliminated in the software development process. In a nutshell, companies need to produce software that is better , faster , and cheaper than their competitors in order to survive in the marketplace. That is, companies need to continuously work smarter to improve their businesses.
Software process improvement initiatives are aligned to business goals and play a key role in helping companies achieve their strategic goals. It is invaluable in the implementation of best practice in organizations and allows companies to focus on fire prevention rather than firefighting. It allows companies to problem solve key issues to eliminate quality problems and to critically examine their current processes to determine the extent to which it meets their needs, as well as identifying how the process can be improved, and where waste can be minimized or eliminated.
It allows companies to identify the root causes of problems (e.g. using the five why tool) and to determine appropriate solutions to the root causes of problems. The benefits of successful process improvement include the consistent delivery of high-quality software, improved financial results, and increased customer satisfaction.
Software process improvement initiatives lead to a focus on the process and on ways to improve the process. This is important since most problems are caused by defective processes rather than by 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 mature their software engineering processes and to achieve their business goals more effectively. It helps software companies to deliver the agreed software on time and on budget, as well as improving the quality of the delivered software, reducing the cost of development, and improving customer satisfaction with the software. It has become an indispensable tool for software engineers and managers to achieve their goals and provides a return on investment to the organization.
1.3 What Is a Software Process?
A software development process is the process used by software engineers to design and develop computer software. It may be an undocumented ad hoc process as devised by the team for a particular project or it may be a standardized and documented process used by various teams on similar projects. The process is seen as the glue that ties people, technology, and procedures coherently together.
The processes employed in software development include processes to determine the requirements; processes to design and develop the software; processes to verify that the software is fit for purpose; and processes to maintain the software.
A software process is a set of activities, methods, practices, and transformations that people use to develop and maintain software and the associated work products.
Definition 1.1 (Software Process)
A process is a set of practices or tasks performed to achieve a given purpose. It may include tools, methods, material, and people.
An organization will typically have many processes in place for doing its work, and the object of process improvement is to improve these to meet business goals more effectively.
The Software Engineering Institute (SEI) believes that there is a close relationship between the quality of the delivered software and the quality and maturity of the underlying processes employed to create the software. The SEI adopted and applied the principles of process improvement employed in the manufacturing field to develop process maturity models such as the CMM and its successor the CMMI. These maturity models are invaluable in maturing software processes in software intensive organizations.
The process is an abstraction of the way in which work is done in the organization and is seen as the glue that ties people, procedures, and tools together (Fig. ).
Fig. 1.1
Process as glue for people, procedures, and tools
Fig. 1.2
Sample process map
A process is often represented by a process map which details the flow of activities and tasks. The process map will typically include the inputs to each activity as well as the output from an activity. Often, the output from one activity will become an input to the next activity. A simple example of a process map for creating the system requirements specification is described in Fig.. The input to the activity to create the systems requirements specification will typically be the business requirements, whereas the output is the systems requirements specification document itself.