|
|
|
|
Some important properties we want our system to
have, specifically correctness and maintainability. |
|
General design characteristic for achieving
standards of quality. |
|
|
|
|
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. |
|
|
|
|
|
|
|
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. |
|
|
|
|
|
|
|
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”? |
|
|
|
|
Compatibility.
Can the system work with other software systems. |
|
|
|
|
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. |
|
|
|
|
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. |
|
|
|
|
A
library of standard pieces that can be used in commonly occurring
situations. |
|
Tailorable software components. |
|
|
|
|
|
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. |
|
|
|
|
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. |
|
|
|
|
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. |
|
|
|
|
|
|
|
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. |
|
|
|
|
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 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. |
|
|
|
|
|
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. |
|
|
|
|
|
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. |
|
|
|