Sei sulla pagina 1di 3

The Information Society, 18:139 – 144, 2002

Copyright ° 2002 Taylor & Francis

0197-2243/02 $12.00 + .00

DOI: 10.1080/0197224029007506 6

Practice-Based Design of Information Systems:

Notes from the Hyperdeveloped World

Lucy A. Suchman

Department of Sociology, Lancaste r University, Lancaster, United Kingdom

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

study of existing systems.Good design is the key to effective software engineering.A

well-designed software system is straightforward [1] to implement and maintain,easily

understood and reliable.Badly designed systems,although they may work,are likely to be

expensive to maintain,difficult to test and unreliable.The design stage is therefore the most

critical part of the software development process.

Until fairly recently,software design was largely an ad hoc[2] process.Given a set of

requirements,usually in natural language,an informal design was prepared,often in the form of

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

description of the system.

This approach to software design was responsible for many dramatic and very expensive

project failures.Now it is realized that completely informal notations such as flowcharts,which

are close to the programming language,are inadequate vehicles for formulating and expressing

system design.It is recognized that precise(although not necessarily formal)specification is an

essential part of the design process and that software design is an iterative,multi-stage activity

which cannot be represented in any single notation.Accordingly,a number of design notations

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

programming system which satisfies these requirements.This derivation is accomplished in a

number of stages:

(1)The subsystems making up the programming system must be established.

(2)Each subsystem must be decomposed into separate components and the subsystem

specification established by defining the operation of these components.

(3)Each program may then be designed in terms of interacting subcomponents.

(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

also be required to design communication mechanisms allowing processes in the system to

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.

There is no definitive way of establishing what is meant by a“good”design.Depending on the

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].

Effective software design is best accomplished by using a consistent design

methodology.There have been a vast number of design methodologies developed and used in

different applications.Some of these are described by Peters(1980)and by Blank and Krijger

(1983).In essence,most of these methodologies can be classified into one of three areas:

(1)Top-down functional design.The system is designed from a functional viewpoint,starting

with a high-level view and progressively refining this into a more detailed design.This

methodology is exemplified by Structured Design and stepwise refinement.

(2)Object-oriented design.The system is viewed as a collection of objects rather than as

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

forward by Parnas(1972)and which has been described more recently by Robson(1981)and

Booch(1983).

(3)Data-driven design.This methodology,suggested by Jackson(1975)and Warnier(1977)

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.

Potrebbero piacerti anche