Chapter 10
This chapter discusses
|
|
|
Some important properties we want our
system to have, specifically correctness and maintainability. |
|
General design characteristic for
achieving standards of quality. |
External Qualities
|
|
|
External qualities are those with which
the user is concerned. |
|
Internal qualities are those that help
achieve the external qualities. |
|
One of the most obvious external
qualities is correctness. |
|
A system is correct if it conforms to
its specifications. |
|
Some attributes are quantitative,
others are qualitative. |
|
|
External Qualities
(cont.)
|
|
|
|
Another important quality is efficiency. |
|
memory requirements |
|
system speed |
|
For real-time systems, speed is a
matter of correctness. If it doesn’t
act in time, the system doesn’t act as expected. |
|
User friendliness-- difficult to
measure. |
|
Robustness--no one wants a system to
crash. |
|
|
External Qualities
(cont.)
|
|
|
|
Maintainability. How easily can the system be modified? |
|
Maintenance activities: |
|
Corrective: taken to correct errors in
the system. |
|
Adaptive: taken to adapt the system to
changes in the environment or in the user’s requirements. Software that is adapted easily sometimes
is called extendible. |
|
Perfective: taken to improve the
quality of the system. |
|
Portability. Can the system run on different “platforms”? |
External Qualities
(cont.)
|
|
|
Compatibility. Can the system work with other software
systems. |
Complexity
|
|
|
Complexity is the principal obstacle to
the creation of correct, reliable, maintainable software. |
|
Software systems are inherently
complex. |
|
A good design can reduce complexity
considerably. |
|
Key: control the interactions between
components. |
|
Components should be self contained;
interaction should be minimal and carefully defined. |
Modularity
|
|
|
The logical components of the design
should correspond to physically separate syntactic software components. |
|
Modules should be self-contained and
coherent. |
|
Cohesion is a measure of the degree to
which a module completely encapsulates a single notion (a facet of the
system’s functionality or data). |
|
Coupling is a measure of the degree to
which a module interacts with and depends on other modules. |
|
We want to design modules with high
cohesion and weak coupling. |
Reusable software modules
|
|
|
A library of standard pieces that can be used in commonly
occurring situations. |
|
Tailorable software components. |
Principles
|
|
|
|
Information hiding principle: A
module should be able to obtain information from another module only
through a well-defined interface between them. |
|
Continuity principle: A small change in the specifications
should effect only a few modules in the system, and not the entire structure
of the system. |
|
Structuring a system around data rather
than around functionality measurably enhances continuity. |
|
Open-closed principle: The ability to
modify or extend a module without affecting other modules. |
|
A module that still can be modified is
said to be open. |
|
A module that is available for use by
other modules is said to be closed. |
Software = a temporary
solution to an evolving problem
|
|
|
We must design a system that adequately
models the problem as currently perceived, yet implement the system in such a
way as to minimize dependency on the particularities of the problem at hand. |
A temporary solution to
an evolving problem
|
|
|
Object design produces the collection
of objects that not only model the problem at hand, but also provide a set of
fixed conceptual constituents in terms of which system evolution can be
expressed. |
|
Algorithm design involves providing the
detailed functionality of the objects. |
|
|
A temporary solution to
an evolving problem (cont.)
|
|
|
|
As the system changes, we expect |
|
the way the objects interact to change. |
|
the set of objects defining the system
to remain stable. |
|
The quality of a model depends on how
successfully the stable components are identified and isolated from the
aspects of the problem likely to change. |
Software = data +
algorithms
|
|
|
Since every program handles data,
attention must be paid to how the representation of the data can affect the
algorithm. |
|
Data is the fundamental and most stable
aspect of a software system. |
|
The design of an abstract view of the
data, followed by the implementation of this abstract view by means of
algorithms, is the essence of programming. |
Software = English and
mathematics
|
|
|
Software is executed by machines, but
written and maintained by people. |
|
A software solution must be read and
understood by anyone intending to maintain it -- it should be clear and
comprehensible to a human reader. |
|
The correctness should be verifiable in a formal,
mathematical sense. |
Why is this important?
|
|
|
|
When testing a program to detect a
possible bug, quality is directly related to our ability to: |
|
read the code. |
|
localize the affected code. |
|
tractably modify the code. |
We’ve covered
|
|
|
|
Correctness --Conforming to
specifications |
|
Maintainability--Modification with
minimal difficulty. |
|
Composing module that are: |
|
highly cohesive. |
|
weakly coupled. |
|
Three design principles: |
|
information hiding |
|
continuity |
|
open/closed |
|
software as a temporary solution. |
|
Software as data design followed by
algorithm design. |
|
Software as both an English document
and mathematical document. |
Slide 18
Slide 19