2.1 Software development as an engineering activity
Software development has a great deal in common with the discipline of engineering, from which the term software engineering arose, and is said to be:
- The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
- The study of approaches as in (1).
Carrying out a systematic, disciplined and quantifiable approach implies management, and assumes that project management is a necessary activity within the discipline of software development.
As discussed in Section 1, words such as reliable, flexible and maintainable (among others) describe characteristics of software systems. They are all aspects of software quality. To obtain a high-quality software product requires a well-managed development process.
But the term engineering for software development is also associated with a few other factors:
- Developers are concerned with meeting a set of requirements – there is usually an identifiable problem that they can solve.
- There is a defined process that can be used to produce a solution and, within that process, there are a number of identifiable phases or activities.
- There are tasks to be done in each phase that result in one, or possibly more than one, artefact related to the final product (software, hardware or document). Developers undertake different roles to perform such tasks (designer, programmer, tester and so on).
- The quality of both the products and the processes by which they are made is important: the right product is being built (validation), the product is built in the right way (verification), and the product is behaving as expected (testing).
- There are tools to improve the effectiveness and efficiency of the tasks performed by developers in their various roles.
- There is a body of knowledge that developers might use and/or add to. There are ways of working to support the previous five factors (such as standards and rules for decomposition in a given context).
- There is a recognised professional activity with its own code of practice and legal framework.
You might like to look at some dictionary definitions of the term engineering and see how the above observations fit them.
While there is considerable argument about the term software engineering, there is no doubt that software development does require certain skills and knowledge of certain ideas and principles. This section looks at what is needed to ‘engineer software’. What should a developer do in order to produce a software system that meets the needs of its users?
In Section 1, you saw that there are three characteristics of software that affect its development and use – malleability, complexity and size – and that these all contribute to the likelihood of errors. Issues arising from size and complexity are addressed through modularisation. In order to ensure that the introduction of errors is minimised whenever a change occurs, you need to pay special attention to the development process.
Software development is a human activity. Software systems are developed by one group of people for another group of people to use. The success or failure of a project is determined by social as well as technical factors.
Users want a system that does what they need and that they can use. One that is technically superior but does not meet these criteria will fail. Users will resent, ignore or, in the worst case, completely reject it.
Activity 8 Software development
Give the characteristics of an engineering approach that support the argument that software development is an engineering discipline.
Software development follows an engineering approach provided that the following conditions are met:
- it is concerned with meeting a set of requirements that are defined as clearly as possible
- it uses a defined process with clear activities, each of which has at least one identifiable end product
- developers can apply their skills and experience to the tasks demanded of them
- validation and verification are regarded to be as essential as building the software itself
- it makes sensible use of tools and standards
- it follows a code of practice.