CS 530 - Advanced Software Engineering

Systems Engineering

Reference: Sommerville, Software Engineering, 10 ed., Chapter 19

 

The big picture

Software engineering is not an isolated activity but is part of a broader systems engineering process. Software systems are therefore not isolated systems but are essential components of broader systems that have a human, social or organizational purpose.

Systems that include software fall into two categories:

Systems engineering includes procuring, specifying, designing, implementing, validating, deploying and maintaining socio-technical systems. It is concerned with the services provided by the system, constraints on its construction and operation and the ways in which it is used to fulfill its purpose or purposes.

Software is now the dominant element in all enterprise systems. Software engineers have to play a more active part in high-level systems decision making if the system software is to be dependable and developed on time and to budget. As a software engineer, it helps if you have a broader awareness of how software interacts with other hardware and software systems, and the human, social and organizational factors that affect the ways in which software is used.

Systems engineering stages:

Many professional disciplines are involved in the systems engineering process. There are three reasons for misunderstanding or other differences between engineers with different backgrounds:

Socio-technical systems

Socio-technical systems are large-scale systems that do not just include software and hardware but also people, processes and organizational policies. Socio-technical systems are often 'systems of systems' i.e. are made up of a number of independent systems. The boundaries of socio-technical system are subjective rather than objective: different people see the system in different ways.

Socio-technical systems are used within organizations and are therefore profoundly affected by the organizational environment in which they are used. Failure to take this environment into account when designing the system is likely to lead to user dissatisfaction and system rejection.

There are a number of key elements in an organization that may affect the requirements, design, and operation of a socio-technical system. A new system may lead to changes in some or all of these elements:

A complex system may include software, mechanical, electrical and electronic hardware and be operated by people. System components are dependent on other system components. The properties and behavior of system components are inextricably inter-mingled. This leads to complexity. Complexity is the reason why socio-technical systems have emergent properties, are non-deterministic and have subjective success criteria:

Emergent properties are properties of the system as a whole rather than properties that can be derived from the properties of components of a system. Emergent properties are a consequence of the relationships between system components. They can therefore only be assessed and measured once the components have been integrated into a system.

Two types of emergent properties:

System reliability is a good example of an emergent property. Because of component inter-dependencies, faults can be propagated through the system. System failures often occur because of unforeseen inter-relationships between components. It is practically impossible to anticipate all possible component relationships. Software reliability measures may give a false picture of the overall system reliability.

System reliability is influenced by:

Failures are not independent and they propagate from one level to another.

System reliability depends on the context where the system is used. A system that is reliable in one environment may be less reliable in a different environment because the physical conditions (e.g. the temperature) and the mode of operation is different.

A deterministic system is one where a given sequence of inputs will always produce the same sequence of outputs. Software systems are deterministic; systems that include humans are non-deterministic. A socio-technical system will not always produce the same sequence of outputs from the same input sequence:

Complex systems are developed to address 'wicked problems' - problems where there cannot be a complete specification. Different stakeholders see the problem in different ways and each has a partial understanding of the issues affecting the system. Consequently, different stakeholders have their own views about whether or not a system is 'successful'. Success is a judgment and cannot be objectively measured. Success is judged using the effectiveness of the system when deployed rather than judged against the original reasons for procurement.

Conceptual design

Conceptual design investigates the feasibility of an idea and develops that idea to create an overall vision of a system. Conceptual design precedes and overlaps with requirements engineering. May involve discussions with users and other stakeholders and the identification of critical requirements. The aim of conceptual design is to create a high-level system description that communicates the system purpose to non-technical decision makers.

Conceptual design activities:

System procurement

System procurement is the process of acquiring a system (or systems) to meet some identified organizational need. Before procurement, decisions are made on: scope of the system, system budgets and timescales, high-level system requirements. Based on this information, decisions are made on whether to procure a system, the type of system and the potential system suppliers. These decisions are driven by:

It is usually necessary to develop a conceptual design document and high-level requirements before procurement. You need a specification to let a contract for system development. The specification may allow you to buy a commercial off-the-shelf (COTS) system. Almost always cheaper than developing a system from scratch. Large complex systems usually consist of a mix of off the shelf and specially designed components. The procurement processes for these different types of component are usually different.

Three types of systems or system components may have to be procured:

Issues with system procurement:

System development

System development usually follows a plan-driven approach because of the need for parallel development of different parts of the system. Little scope for iteration between phases because hardware changes are very expensive. Software may have to compensate for hardware problems. Inevitably involves engineers from different disciplines who must work together. Much scope for misunderstanding here. Different disciplines use a different vocabulary and much negotiation is required. Engineers may have personal agendas to fulfil.

The system development process:

Requirements engineering and system design are inextricably linked. Constraints posed by the system's environment and other systems limit design choices so the actual design to be used may be a requirement. Initial design may be necessary to structure the requirements. As you do design, you learn more about the requirements.

Subsystem engineering may involve some application systems procurement. Typically parallel projects developing the hardware, software and communications. Lack of communication across implementation teams can cause problems. There may be a bureaucratic and slow mechanism for proposing system changes, which means that the development schedule may be extended because of the need for rework.

System integration is the process of putting hardware, software and people together to make a system. Should ideally be tackled incrementally so that sub-systems are integrated one at a time. The system is tested as it is integrated. Interface problems between sub-systems are usually found at this stage. May be problems with uncoordinated deliveries of system components.

System delivery and deployment takes place after completion, when the system has to be installed in the customer's environment. A number of issues can occur:

System operation and evolution

Operational processes are the processes involved in using the system for its defined purpose. For new systems, these processes may have to be designed and tested and operators trained in the use of the system. Operational processes should be flexible to allow operators to cope with problems and periods of fluctuating workload.

Problems with operation automation:

Large systems have a long lifetime. They must evolve to meet changing requirements. Existing systems which must be maintained are sometimes called legacy systems. Evolution is inherently costly for a number of reasons:

Factors that affect system lifetimes:

Proposed changes have to be analyzed very carefully from a business and a technical perspective. Subsystems are never completely independent so changes to a subsystem may have side-effects that adversely affect other subsystems. Reasons for original design decisions are often unrecorded. Those responsible for the system evolution have to work out why these decisions were made. As systems age, their structure becomes corrupted by change so the costs of making further changes increases.