![]() | MSc-IT Study Material January 2011 Edition Computer Science Department, University of Cape Town | MIT Notes Home | Edition Home | |
Software systems are made up of the following components:
Users — the people who add information to the system, request information from the system, and perform some of the information processing functions.
Procedures – the tasks performed by the human components of the information system.
Information – meaningful data that the system stores and processes.
Documents – manuals on how to use the system, sometimes even files of data which should not or could not be stored electronically.
Hardware – not only the computers in the system but also any networks linking the computers, the input devices and output devices.
Software – computer applications performing some of the system functions to record, process, and regulate access to some of the information worked with by the information system
Importantly, we need to consider what software is. Software is typically defined to be instructions that provide desired features, functions, and performance. They contain data structures which allow the software program to manipulate the information contained in an information system. Importantly, software also includes documentation describing how the software performs the actions that it does, and how the software may be used. Notice that some of the documentation is for the software's users, while other portions of the documentation are for its developers and maintainers.
There are some important properties of software that you should consider when thinking of the discipline of software engineering.
First, software is engineered rather than manufactured. Once the software has been developed, there remains no significant “manufacturing” process that could possibly lower the software's quality (i.e., introduce software errors, cause the software to deviate from what the customer requested, and so on). The cost of developing software lies almost completely in the engineering of the software, and not in the “manufacturing” of a “product” that customers can be hold in their hands.
Software does not wear out with use, as hardware might. However, this does not mean that software does not degrade over time. A software program is continuously changed over its lifetime. If these changes occur too frequently, the bugs introduced by each change may slowly degrade the performance and utility of the software as a whole. Also, when software degrades in quality, there are no “spare parts” which can be used as replacements.
Unlike hardware, most software remains custom built, rather than built using “off the shelf” components.
Over the last few decades, software systems and the software that run them have become an important component to many aspects of our society, from commerce to medicine, engineering, the sciences and entertainment.
Importantly, the infrastructure of all developed countries rely heavily on software systems. Because of this, it is important that the software we use and rely on are of a high quality and fulfil our requirements of them. Gaining this high quality does not happen randomly or by accident — rather we need to engineer that quality into the software that we use.
When software fails, people may be bankrupted and even killed (consider safety critical systems which run planes, medical equipment, and so on). Because so much depends on software, software has become important to business and the economy. This means that the software engineer is always part of a larger environment, consisting of customers, other software engineers, managers, and so on. It is important that the engineer be able to interact appropriately with all of these individuals, and this, too, is part of software engineering.
Because information systems are what we build using software, it is important to consider exactly what it is that we are building: what is a system?
The word system is used regularly to refer to a coherent group of elements (or components) that together aim to achieve a certain objective, or to have a specific purpose. A more rigorous definition would describe a system as a group or combination of interrelated, interdependent or interacting elements forming a collective entity (a whole) with a control mechanism that helps the system achieve its goal.
Systems live in environments that are relevant to their existence. They receive inputs from the environment, and produce outputs for the environment. Systems tend to have a boundary that is defined in relation to the external environments in which they reside. The survival of a system relies on a control mechanism that regulates the processes of receiving inputs and producing outputs using feedback.
Figure 1.1, “A diagrammatic representation of a system” illustrates many of the important features of a system:
There may be many different inputs
There may be many different outputs
The system is composed of interconnected components — the components may be of different kinds.
Some of the outputs of the system are fed back into the system, so that the system can control itself and make corrective changes when unexpected or undesirable outputs occur
These components play a role in the software that we create: the inputs to the system will become inputs to the software. The outputs of the software will eventually be the system's outputs.