Unit 1 - Approaches to software development Flashcards
What is a system?
We define a system as ‘an assembly of components that are connected together in an organised way’.
A successful software project
must?
. 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
. demonstrate good overall system quality.
What is a sociotechnical system?
A system that includes software, hardware which is part of a much wider context that involves not only other technical components, but also people, organisations and other social structures.
What is a system boundary?
The system boundary is a conceptual line that divides the system that you want to study from ‘everything else’.
What is a viewpoint?
A viewpoint is a personal understanding of a system depending on the sets of users interacting with it. Different viewpoints of a system correspond
to different sets of users and therefore different purposes.
What are three important characteristics of software that affect its development and the likelihood of errors?
. Malleability. Software is easy to change. This malleability creates a constant pressure for
software to be changed rather than replaced. Every change 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 it requires more explanation. 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 in a small one.
For each of the three characteristics of software, explain why errors might arise in a piece of developed software.
Malleability. As change is easy to make, often changes are introduced without thorough consideration of the full consequences of each new change introduced.
Complexity. The more complex a piece of software becomes, the more chances there are of a change affecting other parts of the software.
Size. The greater the number of lines of code in a piece of software, the greater the number of likely errors.
What is the defining quality of a good software system, and what are its main characteristics?
A good software system is one that meets its users’ needs. We can characterise a good software system as useful, usable, reliable, flexible, available and affordable.
How might greater flexibility make a software system more affordable over its whole life?
Users’ needs will change over time. The time taken to implement the changes in requirements in a flexible system is less than for less flexible software. As labour costs are the most significant component of software costs, flexible software is more affordable.
Give two reasons why a delivered software system might not meet its users’ needs.
Software systems are usually out of date even as they are being developed because:
◦ some needs are often missed during requirements capture
◦ users’ needs change with time.
What are typical characteristics of legacy systems?
. old
. large
. developed using outdated techniques
. implemented with old programming languages
. critical to the business
. changed a number of times since their inception
. 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
. difficult to maintain because of the above factors.
Suggest a means of measuring the maintainability of a software system?
We could measure the effort required by a developer to locate and implement a given change to a software system. That effort can be classified 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.
What can we learn from legacy systems about developing a good software system?
As change is inevitable, the right processes should be in place to make change happen in a more controlled way.
This requires the adoption of standards and documentation conventions that help decision
making on changes and how to introduce them.
Any changes need to be well documented so that software is still understandable and less dependent on the people initially involved with developing and
maintaining the software.
Suggest a reason why legacy systems will always be a problem?
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.
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.
Still being dependent on the original developers, compound these problems.
What is meant by decomposition?
Decomposing a problem into smaller and smaller parts or chunks until each one can be comprehended or dealt with by an individual
What is the purpose of a module interface?
An 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.
What is meant by a module’s context dependencies?
A module may need to use the services of other modules. These are called its context dependencies.
What is abstraction?
Abstraction is a particular way of viewing a complex problem to arrive at some useful decomposition of that problem.
Useful abstraction is achieved in a particular module if the potential software clients of that module do not need to know more than is contained in its interface.
What is coupling?
It refers to the degree of interdependence among the different parts of a system.
What are the benefits of a loosely coupled system?
They are easier to understand and maintain.
A good software system has low coupling, which means that changes to one part are less likely to affect other parts of the system.
A further benefit of low coupling is that components are easy to replace and, potentially, reuse.
What is cohesion?
Cohesion is a way of describing how closely the activities within a single module are related to each other.
In software systems, a highly cohesive module performs one task or achieves a single objective – ‘do one thing and do it well’ is a useful motto to apply.
Why might you consider splitting up a large project into smaller chunks?
By splitting a large project into smaller
chunks, it is possible to identify a number of more manageable tasks for those involved.
How does the complexity of a software system affect the maintenance task?
Each change becomes difficult when the flow of control and dependencies within programs are complex.
The greater the number and nature of the dependencies, the harder it is to maintain a software system.
What is a module?
A module is any identifiable part of a software system that is considered separately.
Why does it help to have low coupling in a software system?
With low coupling, there are few dependencies between modules. Therefore changes made to one part of a software system are less likely to propagate throughout the whole system.
Give examples of the kinds of information that would be valuable when considering a change to a given module.
There are two kinds of information that contribute to the analysis of a proposed change:
◦ Which modules are clients of the module in question? This information indicates how far a change may propagate through the software system.
◦ What assumptions have been made in client modules of the module in question? An understanding of the expected services of a module will help assess the risks associated with a particular change.