Software Development is a Communication
Process
R. Rockwell
Softlab Gmbh, Zarndorferstr. 120,
D-8000 Munich 80, Germany (roc@softlab.uucp)
Software is information communicated among people and machines about how
people and machines use information. The software development process 1 consists
of:
- agreeing
what information is to be communicated in what contexts,
- specifying
the codified agreements in some reliably enactable form, and
-
implementing
the codified agreements in their intended operational setting, en-
suring that the resulting human/machine performance is both
9 correct
as a translation of the codified agreements, and
9 satisfying as
an application of those human/machine resources which the
software is intended to control ~.
The metaphor of software
engineering
leads us to look at the specification profess
in terms of what is needed for effective
implementation,
and at the implementation
process in terms of what is need@d to ensure
correct
results. We seldom consider
how the wholly correct translation of a technically sound specification into system
operations may fail to fulfill the expectations raised by -- and indeed undermine the
assumptions that guided -- the specification process. Perhaps that is why so many
software development efforts are, in the end, so
unsatisfying.
To see software development as a
communication
process involving both people
and machines is to expand our focus to include the explanatory negotiation needed
to arrive at a workable agreement as to what system behaviour is desirable. More
importantly, it forces us to confront the heart of the software development problem:
the
fundamental dissimilarity of human and machine communication
- a difference
so essential that it is misleading to use the same word for both processes.
The paradigm of machine communication is the telex message: a series of trans-
lations from keystrokes to machine codes to analogue signals and back again. The
goal is to have the receiving machine type out exactly what was typed in at the
sending machine. To accomplish this, each step of the translation must be
correct.
1 Vulgar DP usage tends to exclude from "development" the 80% of the work on a software
product that occurs after its initial deployment. I prefer to follow the established meaning
of the term outside the DP community, which clearly includes the ongoing work needed
to sustain and enhance a successful state (cf "personnel development" and "portfolio
development")
2 Correctness
is an unambiguous goal. With adequate preparation, it can even be made
subject to formal proof; once achieved, its remains certain until the software is changed.
Satisfaction
is another matter. Lehman has cogently argued that this goal can, in the
nature of things, be only partially - and only temporarily - achieved.