Unit 1 - Approaches to Software Development Flashcards
Define a system
an assembly of components that are connected together in an organised way
A software system is built to meet requirements. What must a successful software project do?
Resolve the diverse and possibly conflicting needs of users in a disciplined way;
Satisfy the users’ expectations;
Have been developed and delivered in a timely and economical manner;
Be resilient to the changes that will be introduced during its operational lifetime.
What is the system boundary?
The system boundary is simply a conceptual line that divides the system that we wish to study from ‘everything else’. It is useful to think of a system’s environment as being made up of those things which are not part of the system, but which can either affect the system or be affected by it.
Hospitals are a domain where you can find software being put to a variety of uses. A hospital might, for example, join together a series of patient-monitoring systems along with the database management system that manages medical records, to make a larger system with a different scope. A forward-looking hospital might also wish to go further and add weather-forecasting software. The extension would allow planners to deal with the ebb and flow of patients that arise according to the season. Beds may be allocated, and other resources, such as drugs, can be bought in preparation.
In the above, we suggested that two systems, for patient monitoring and managing medical records, might be combined into a single system. Suggest an additional function that might be possible with the combined system that would not have been possible with either of the two original systems alone. What can you say about the boundary of the combined system compared with the boundaries of the original systems?
Suppose the monitoring system detected that a patient taking a common drug had a heart problem. If the two systems were combined, it would possible to automatically check whether the heart problem might be due to a known allergy recorded in the patient’s record.
The boundary of the combined system encompasses a wider scope than the combined boundaries of the separate systems because of their relationship.
What are the three important characteristics of software that affect its development?
Malleability. Software is easy to change (all programmers are often tempted to ‘tweak’ their code). This malleability creates a constant pressure for software to be changed rather than replaced. Every change that is made to the software introduces the possibility of new errors.
Complexity. Software is often complex. Complexity can usually be recognised, but it is less easy to define. One item of software can be considered more complex
than another if the description of the first requires more explanation than that of the second. Part of that complexity arises from the potential variety of pathways
between the components of a system. The number of errors is likely to depend on the complexity of a system.
Size. It is likely that there will be more errors in a large piece of software than there will be in a small one.
For each of the three characteristics of software mentioned above, explain how errors might arise in a piece of developed software.
Malleability: every time a change is made to a piece of software it introduces the possibility of a new error; the easier it is to make changes, the greater the chances of introducing new errors into the software.
Complexity: the more complex a piece of software becomes, the more chances there are of introducing an error.
Size: there are likely to be more errors in a large piece of software than in a small one.
(a) What is the defining quality of a good software system, and what are its main characteristics?
(b) How might greater flexibility make a software system more affordable?
(c) Give two reasons why a delivered software system might not meet its users’ needs.
(a) A good software system is one that meets its users’ needs. We can characterise a good software system as useful, usable, reliable, flexible, affordable and available.
(b) Users’ needs will change over time. The time taken to implement the changes in requirements is less than if that software were inflexible. Since labour costs are the most significant component of software costs, flexible software is more affordable.
(c) Software systems are usually out of date even as they are being developed, since users’ needs:
- are often missed during requirements capture;
- change with time.
Legacy systems often have what characteristics?
are large;
are critical to the business;
have been changed a number of times since their inception;
are difficult to understand because of either a lack of documentation about their
internal structure or a lack of experience within the group responsible for them;
are difficult to maintain because of the above factors.
(a) Suggest a means of measuring the maintainability of a software system.
(b) How does a legacy system relate to the attributes of a good software system?
(c) Suggest a reason why legacy systems will always be a problem.
(a) We could measure the effort required by a developer to locate and eventually implement a given change to a software system. We could classify that effort in two components: the effort needed to locate and fix errors (bugs); and the effort needed to adapt the software system to meet its users’ needs.
(b) A legacy system is lacking in flexibility. It may have started out with all the characteristics of a good software system, yet those characteristics may have changed over time. The longer a software system is used, the more difficult it will become to maintain, because of the number of changes made since its development. So it gradually loses its maintainability. As a software system ages, the quality of applied changes will be affected by their affordability and the relative importance of the system. Ultimately all the staff who developed and knew about the software system may have moved on, so those new staff allocated to its maintenance may not fully comprehend its features. This can happen to all software systems, including those being developed today.
Thus a legacy system still serves some useful purpose, but there are problems that make it less flexible and maintainable (and so affordable) than it was originally.
(c) The inherent malleability of software makes it easy to change. You have already seen that a legacy system is lacking in flexibility as a result of the number of changes made to it during its operational lifetime. (The analogy with metal-working through malleability is useful. Once a blacksmith forms some component, usually in iron, there is a limit to the number of times that it can be heated, formed and cooled before that component becomes brittle and hence liable to failure.)
This explains why our ability to bolt features and fixes onto a legacy system means that it will eventually become too fragile, and it will become precarious to go any further. The staff issues mentioned in (b) compound these problems.
What is the main technique to simplify the construction of a complex software solution?
The main technique for dealing with such messy situations is decomposition. We can decompose a problem into smaller and smaller parts or chunks until each one can be comprehended or dealt with by an individual.
What are modules?
internal boundaries and smaller subsystems identified within the system,
What is heroic programming?
An individual attempting to develop a complex system.
What are projections and partitions?
A projection overlaps (there are elements that are found in more than one projection).
A partition is an independent sub-problem.
What is coupling?
In software engineering, the term coupling is used to refer to the degree of interdependence among the different components of a system.
What is circular dependency?
Where chains of independent modules join up in a particularly strong (or high) form of coupling.
Two classes need to be coupled in order to communicate. What factors indicate coupling?
A inherits from B A has an attribute of class B A has a method that uses an instance of class B as an input or output argument A knows of a public attribute of class B
What is an interface to a module?
In general, we say that the interface to a module defines how other modules can use that module. An interface is the means of connecting one module to another. It tells you what to expect about the behaviour of a given module and what services the module will provide without telling you how those services will be provided. An interface encapsulates what we know about the class.
When a module provides services to other modules and in turn uses services from other modules, what is this called?
These required services are called its context dependencies.