Introduction
Software engineering is a process that builds the end product, called computer software. Computer software consists of programs that execute on a computer of any size and architecture, documents that describe the operations and use of the program and data that is processed into information. It is built by a team, which consists of software engineers (system analyst, software designers and programmers) and other people that have stake in system. It is built by applying software engineering approach, which is a process that leads to high quality product. Computer software is an important end product of software engineering because it is used in every aspect of our life, commerce, culture, entertainment etc.
The term software crisis was used in the early days of computing (around 1960’s), to describe the problem situation at that time, which was characterised by high cost of computer software, late delivery of software product and poor quality software. This problem situation was caused due to lack of standard methodology with well defined processes for developing computer software. However, the emergence of software engineering, which has continue to develop technologies that will make it easier, faster and less expensive to build high quality software has led to the end of the software crisis. Software engineering therefore is a technology, which encompasses a process, a set of methods, an array of tools for building high quality software.
Software engineering can be considered as the use of sound engineering principles in order to create quality software So far, we have defined software engineering based on the following concepts: quality, process, methods and tools. Software engineering, like any engineering discipline is committed to developing quality software, which will lead to increasing process improvement and ultimately leads to development of increasingly more mature methods and tools. Figure 1.2 shows the layers of software engineering.
Quality |
Process |
Methods |
Tools |
Figure 1.2, Layers of software engineering
The process layer is regarded as the foundation for software engineering, it is like the glue that holds the technology layers together and enable rational and timely development of computer software.
Software engineering methods provides the technical how-to’s for building software. It consists of a broad array of taskss, like requirement analysis, design, program construction, testing and support. It rely on a set of principles, and it includes modelling activities and other techniques for describing the system.
Software engineering tools provides automated and semi-automated support for the process and the methods.
Computer software perform the role of a product, at the same time, it performs the role of a vehicle for delivering the product. As a product, it produces, manages, acquires, modifies, displays and transmits information, which means that as a product, it delivers the computing potential of the computer hardware. On the other hand, as a vehicle for delivering the product, it acts as the basis for the control of the computer (operating system), the basis for the communications of information (computer network) and the basis for the development and control of other software (software tools and environment).
A good understanding of what software and software engineering are requires the knowledge of characteristics features of software that distinguish the logical product, software from other physical products.
Though there are similarities between the two activities, software development/engineering and product manufacturing, but the two are different.
Software, unlike hardware does not wear out, but it deteriorates. The failure rate of hardware with time shows that the failure rate of the hardware product is high in its early life. This is due to design and production defects. When the defects are corrected, the failure rate maintains low steady-state level. However, due to wear and tear (i.e. effects of dust, vibration, temperature, and other environmental problems), the failure rate begins to increase, as shown in figure 1.4.1. This relationship between failure rate of hardware and time, as shown in figure 1.4.1 is called ‘bathtub curve’.
Figure 1.4.1: Failure rate of hardware against time
However, for software, the idealized relationship between the failure rate of software with time shows that in the early life of software, it has a high failure rate, which is caused by bugs, however, as soon as the bugs are fixed, the failure rate maintains low stedy-state, as shown in the figure 1.4.2
In reality, since software undergo changes with time. Any change made in the software will cause the failure rate to rise due to bugs, as soon as the bug is fixed, the failure rate maintains low steady-state. After sometime, new changes will be introduced to the software, this will cause the failure rate to rise again. The failure rate of software, for an actual case can be seen in figure 1.4.3
Figure 1.4.2, Idealize case of software failure rate against time
Figure 1.4.3, Idealize and actual cases of software failure rate against time