Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DOI: 10.1080/0197224029007506 6
Lucy A. Suchman
SOFTWARE DESIGN
Software design is a creative process.It requires a certain amount of flair on the part of the
designer and the final design is normally an iteration from a number of preliminary
designs.Design cannot be learned from a book—it must be practiced and learnt by experience and
expensive to maintain,difficult to test and unreliable.The design stage is therefore the most
a flowchart[3].Coding then commenced and the design was modified as the system was
1
implemented.When the implementation stage was complete,the design had usually changed so
much from its initial specification that the original design document was a totally inadequate
This approach to software design was responsible for many dramatic and very expensive
are close to the programming language,are inadequate vehicles for formulating and expressing
essential part of the design process and that software design is an iterative,multi-stage activity
such as data flow diagrams.HIPO charts[4],structure diagrams and design description languages
have been developed which are superior to flowcharts for expressing software designs.
Given a requirements definition,the software engineer must use this to derive the design of a
number of stages:
(2)Each subsystem must be decomposed into separate components and the subsystem
(4)Each component must then be refined.This normally entails specifying each component as
hierarchy of subcomponents.
(5)At some stage of this refinement process,the algorithms used in each component must
be specified in detail.
As well as these various stages of programming system design,the software engineer may
communicate[5].He or she may have to design file structures,and will almost certainly have to
design the data structures used in his programs.He or she will have to design test cases to validate
his programs.
2
application and the particular project requirements,a good design might be a design which allows
very efficient code to be produced,it might be a minimal design where the implementation is as
compact as possible,or it might be the most maintainable design.This latter criterion is the
criterion of“goodness”adopted here.A maintainable design implies that the cost of system
changes is minimized and this means that the design should be understandable and that changes
should be local in effect.Both of these are achieved if the software design is highly cohesive and
loosely coupled[6].
methodology.There have been a vast number of design methodologies developed and used in
(1983).In essence,most of these methodologies can be classified into one of three areas:
with a high-level view and progressively refining this into a more detailed design.This
functions with messages passed from object to object.Each object has its own set of associated
operations.Object-oriented design is based on the idea of information hiding which was first put
Booch(1983).
suggests that the structure of a software system should reflect the structure of the data processed
by that system.Therefore,the software design is derived from an analysis of the input and output
system data.