It is sometimes said that progress in a scientific discipline can be measured by how quickly its founders are forgotten. Software development, sometimes called software engineering, is not a scientific discipline and is still young: Many of those who formulated fundamental principles in the field are still active in it. Unfortunately, we have the worst of both worlds: Our founders seem dimly remembered, and we are making little progress towards becoming a discipline. Fundamental ideas, such as information hiding and abstraction, are only vaguely understood by those who need them most and are constantly reinvented. Those who practice software development and those who teach software engineering seem uneducated in, and unaware of, the history of their profession.
This book is our attempt to provide a view of the work of one of the grandmasters of our field, highlighting the fundamental ideas that he and his colleagues invented and expounded. We hope to provide a reference for those who teach and those who do, giving them both an historical record, a clear explanation of fundamental ideas that will help them in their work, and a set of examples to use and emulate. David L. Parnas is both a clear and creative thinker and an extraordinary expositor of seminal ideas. The issues that he addresses are at the heart of software engineering today; his explanations are still relevant and his solutions, trialed on real systems, transfer to today's software development organizations and environments.
Do you need to understand how to organize your software into modules so it can be easily maintained and so that your modules are reusable, whether they are expressed as classes, packages, or other forms? Dave Parnas identified the information hiding principle and showed how to to use it to construct workable, reusable modular structures that are stable over time. (See Chapters 2 and 16.)
Are you struggling to create APIs to make your software useful to application programmers? Dave Parnas devised the idea (and coined the term) for abstract interfaces, and showed how to design interfaces that provide services without revealing their implementations. (See Chapter 15.) Languages like C++ and Java directly support this idea with abstract classes.
Are you wondering how to create your software as a set of layers that define a hierarchical structure that meets your requirements, lets you build your system a few layers at a time, and lets others add to the structure that you have created? Dave Parnas clearly explained what a hierarchical structure is, what some of the important hierarchical structures that we use are, why people often confuse them, and how to create a layered structure that meets your needs. (See Chapter 8.)
Do you know that your software is going to exist in many different versions, but are having difficulty designing your software not just to accommodate the different versions, but to take advantage of your situation to make your development process more efficient? Dave Parnas defined program families to help with just this situation and showed how to create them in a cost-effective way. (See Chapters 10 and 14.)
Dave has been busy in more than just technical areas. His work includes commentary on the social responsibility of software engineers, both by exposition and by example. His stance on our inability to create trustworthy software for the Strategic Defense Initiative is represented (Chapters 26 and 27), as well as his thoughts on how to teach software engineering (Chapter 31 and 32), and how to make software engineering a profession (Chapters 28 and 33).
The preceding are just a few examples of the ideas described in the papers that constitute this book. Out of the more than two hundred papers that Dave has published, we selected thirty-two, plus one special one that he did not write, but strongly influenced. We picked technical papers that expressed fundamental ideas that were groundbreaking when they were published, that have an enduring message, and that are models of exposition, and nontechnical papers that had an influence on the opinions of the time. Some were controversial when published and remain so.
An outstanding aspect of Dave's career is his insistence that his ideas be tested on real problems, where one cannot define away the complexity of the world in the interest of devising an elegant solution. Perhaps the best known examples are the operational flight program (OFP) for the U.S. Navy's A-7E aircraft and the shut-down software for the Darlington nuclear power plant.
The A-7E project, also known as the Software Cost Reduction (SCR) project, was conducted by Dave and colleagues at the U.S. Naval Research Laboratory (NRL). It was a demonstration of how to apply ideas such as information hiding, abstraction, cooperating sequential processes, deterministic scheduling, program families, formal specification, hierarchical structuring, and undesired event handling to the design of a hard-real-time system. Many of the same approaches now appear in modern designs and modern languages under different names; a few diverse examples are exception handling (Chapter 12) and the observer pattern (Chapter 22).
Several years of Dave's time and effort were directed at making the SCR software and its documentation an engineering model of how to develop and document software. The papers derived from the project that appeared in the research literature; such as Chapters 6, 12, 15, 16, 17, 18, and 22, only tell part of the story. The complete set of requirements and design documentation (including what we now term architecture), was published as technical reports by NRL and serve as detailed guides and templates for those wishing to use the ideas.
This book contains thirty-three papers divided into four sections. Dave has written a short introduction to each section and we have invited a guest author to write an introduction to each paper.
Specification and Description contains six papers, focusing on the most important kinds of software engineering documentation and the roles that they play. Relational and tabular documentation are presented in depth, including both the underlying mathematical basis and practical notations suitable for use by working programmers.
Design contains thirteen papers, covering the principles and techniques that have been central to Dave's work for the past three decades. Information hiding is emphasized, including the role of information hiding in abstract interfaces, its application in complex systems, and its implications in the design of program families.
Concurrency and Scheduling contains two early papers on the use of semaphores and two more recent papers on new approaches to synchronization and scheduling. The latter focus on achieving bo
Daniel Hoffman is an Associate Professor of Computer Science at the University of Victoria in British Columbia.
David M. Weiss is the Director of the Software Production Research Department at Avaya Laboratories. His technical work has evolved into the invention of processes that incorporate ideas from families, design for change, measurement, precise specification, and technology transfer. The result has been a software production process based on family-oriented abstraction, specification, and translation, known as FAST.
Foreword | ix | ||||
Preface | xi | ||||
PART I DESCRIPTION AND SPECIFICATION | 1 | (136) | |||
|
|||||
|
7 | (22) | |||
|
|||||
|
9 | (1) | |||
|
|||||
|
|||||
|
9 | (3) | |||
|
12 | (3) | |||
|
15 | (2) | |||
|
17 | (2) | |||
|
19 | (7) | |||
|
26 | (3) | |||
|
29 | (20) | |||
|
|||||
|
31 | (1) | |||
|
|||||
|
|||||
|
31 | (1) | |||
|
31 | (1) | |||
|
32 | (1) | |||
|
32 | (1) | |||
|
32 | (1) | |||
|
33 | (1) | |||
|
34 | (1) | |||
|
34 | (1) | |||
|
34 | (1) | |||
|
34 | (1) | |||
|
35 | (1) | |||
|
35 | (1) | |||
|
36 | (1) | |||
|
36 | (1) | |||
|
36 | (1) | |||
|
36 | (1) | |||
|
37 | (1) | |||
|
38 | (1) | |||
|
38 | (1) | |||
|
39 | (1) | |||
|
39 | (1) | |||
|
40 | (1) | |||
|
41 | (1) | |||
|
42 | (7) | |||
|
49 | (18) | |||
|
|||||
|
51 | (1) | |||
|
|||||
|
51 | (1) | |||
|
51 | (1) | |||
|
52 | (1) | |||
|
53 | (2) | |||
|
55 | (2) | |||
|
57 | (1) | |||
|
58 | (2) | |||
|
60 | (3) | |||
|
63 | (4) | |||
|
67 | (22) | |||
|
|||||
|
71 | (1) | |||
|
|||||
|
|||||
|
|||||
|
71 | (1) | |||
|
71 | (2) | |||
|
73 | (2) | |||
|
75 | (2) | |||
|
77 | (5) | |||
|
82 | (3) | |||
|
85 | (4) | |||
|
89 | (18) | |||
|
|||||
|
93 | (1) | |||
|
|||||
|
93 | (1) | |||
|
93 | (1) | |||
|
94 | (1) | |||
|
95 | (2) | |||
|
97 | (1) | |||
|
98 | (1) | |||
|
99 | (1) | |||
|
99 | (1) | |||
|
100 | (2) | |||
|
102 | (2) | |||
|
104 | (1) | |||
|
104 | (1) | |||
|
105 | (2) | |||
|
107 | (30) | |||
|
|||||
|
111 | (1) | |||
|
|||||
|
111 | (1) | |||
|
111 | (1) | |||
|
112 | (1) | |||
|
113 | (1) | |||
|
114 | (2) | |||
|
116 | (5) | |||
|
121 | (9) | |||
|
130 | (1) | |||
|
131 | (1) | |||
|
131 | (1) | |||
|
132 | (5) | |||
PART II SOFTWARE DESIGN | 137 | (246) | |||
|
|||||
|
143 | (14) | |||
|
|||||
|
145 | (1) | |||
|
|||||
|
145 | (1) | |||
|
145 | (1) | |||
|
146 | (1) | |||
|
146 | (1) | |||
|
146 | (1) | |||
|
146 | (7) | |||
|
153 | (1) | |||
|
154 | (3) | |||
|
157 | (14) | |||
|
|||||
|
161 | (1) | |||
|
|||||
|
161 | (1) | |||
|
161 | (1) | |||
|
161 | (7) | |||
|
168 | (3) | |||
|
171 | (20) | |||
|
|||||
|
173 | (1) | |||
|
|||||
|
|||||
|
173 | (1) | |||
|
173 | (1) | |||
|
173 | (2) | |||
|
175 | (1) | |||
|
175 | (3) | |||
|
178 | (4) | |||
|
182 | (4) | |||
|
186 | (2) | |||
|
188 | (1) | |||
|
188 | (1) | |||
|
189 | (2) | |||
|
191 | (24) | |||
|
|||||
|
193 | (1) | |||
|
|||||
|
193 | (1) | |||
|
193 | (1) | |||
|
194 | (1) | |||
|
194 | (2) | |||
|
196 | (1) | |||
|
197 | (1) | |||
|
198 | (2) | |||
|
200 | (1) | |||
|
201 | (1) | |||
|
202 | (1) | |||
|
202 | (2) | |||
|
204 | (1) | |||
|
205 | (3) | |||
|
208 | (1) | |||
|
209 | (1) | |||
|
210 | (1) | |||
|
210 | (1) | |||
|
211 | (4) | |||
|
215 | (14) | |||
|
|||||
|
217 | (1) | |||
|
|||||
|
|||||
|
|||||
|
217 | (1) | |||
|
217 | (1) | |||
|
218 | (2) | |||
|
220 | (6) | |||
|
226 | (3) | |||
|
229 | (26) | |||
|
|||||
|
231 | (1) | |||
|
|||||
|
|||||
|
231 | (1) | |||
|
231 | (2) | |||
|
233 | (1) | |||
|
233 | (1) | |||
|
234 | (1) | |||
|
235 | (1) | |||
|
236 | (1) | |||
|
237 | (3) | |||
|
240 | (1) | |||
|
241 | (3) | |||
|
244 | (1) | |||
|
244 | (11) | |||
|
247 | (8) | |||
|
255 | (12) | |||
|
|||||
|
257 | (1) | |||
|
|||||
|
257 | (1) | |||
|
257 | (1) | |||
|
258 | (1) | |||
|
259 | (1) | |||
|
260 | (1) | |||
|
261 | (1) | |||
|
262 | (1) | |||
|
263 | (1) | |||
|
263 | (1) | |||
|
264 | (3) | |||
|
267 | (24) | |||
|
|||||
|
269 | (1) | |||
|
|||||
|
269 | (1) | |||
|
269 | (1) | |||
|
270 | (1) | |||
|
271 | (2) | |||
|
273 | (6) | |||
|
279 | (7) | |||
|
286 | (1) | |||
|
286 | (5) | |||
|
291 | (24) | |||
|
|||||
|
295 | (1) | |||
|
|||||
|
|||||
|
|||||
|
295 | (1) | |||
|
295 | (1) | |||
|
296 | (3) | |||
|
299 | (2) | |||
|
301 | (6) | |||
|
307 | (6) | |||
|
313 | (2) | |||
|
315 | (22) | |||
|
|||||
|
319 | (1) | |||
|
|||||
|
|||||
|
|||||
|
319 | (1) | |||
|
319 | (2) | |||
|
321 | (4) | |||
|
325 | (10) | |||
|
335 | (2) | |||
|
337 | (16) | |||
|
|||||
|
339 | (1) | |||
|
|||||
|
|||||
|
339 | (1) | |||
|
339 | (1) | |||
|
340 | (1) | |||
|
341 | (2) | |||
|
343 | (7) | |||
|
350 | (3) | |||
|
353 | (16) | |||
|
|||||
|
355 | (1) | |||
|
|||||
|
|||||
|
355 | (1) | |||
|
355 | (1) | |||
|
356 | (1) | |||
|
357 | (1) | |||
|
358 | (1) | |||
|
358 | (6) | |||
|
364 | (2) | |||
|
366 | (1) | |||
|
367 | (2) | |||
|
369 | (14) | |||
|
|||||
|
371 | (1) | |||
|
|||||
|
371 | (1) | |||
|
371 | (2) | |||
|
373 | (1) | |||
|
374 | (1) | |||
|
375 | (1) | |||
|
376 | (2) | |||
|
378 | (2) | |||
|
380 | (1) | |||
|
380 | (3) | |||
PART III CONCURRENCY AND SCHEDULING | 383 | (84) | |||
|
|||||
|
387 | (6) | |||
|
|||||
|
389 | (1) | |||
|
|||||
|
|||||
|
|||||
|
389 | (1) | |||
|
389 | (1) | |||
|
389 | (1) | |||
|
390 | (1) | |||
|
391 | (2) | |||
|
393 | (10) | |||
|
|||||
|
395 | (1) | |||
|
|||||
|
395 | (1) | |||
|
395 | (2) | |||
|
397 | (1) | |||
|
397 | (1) | |||
|
397 | (1) | |||
|
398 | (1) | |||
|
398 | (1) | |||
|
399 | (4) | |||
|
403 | (34) | |||
|
|||||
|
407 | (1) | |||
|
|||||
|
|||||
|
407 | (1) | |||
|
407 | (1) | |||
|
408 | (2) | |||
|
410 | (1) | |||
|
410 | (1) | |||
|
411 | (2) | |||
|
413 | (5) | |||
|
418 | (8) | |||
|
426 | (2) | |||
|
428 | (2) | |||
|
430 | (1) | |||
|
430 | (2) | |||
|
432 | (5) | |||
|
437 | (30) | |||
|
|||||
|
439 | (1) | |||
|
|||||
|
|||||
|
439 | (1) | |||
|
439 | (3) | |||
|
442 | (2) | |||
|
444 | (3) | |||
|
447 | (2) | |||
|
449 | (2) | |||
|
451 | (1) | |||
|
452 | (15) | |||
|
455 | (2) | |||
|
457 | (3) | |||
|
460 | (7) | |||
PART IV COMMENTARY | 467 | (140) | |||
|
|||||
|
471 | (6) | |||
|
|||||
|
473 | (1) | |||
|
|||||
|
473 | (1) | |||
|
473 | (1) | |||
|
474 | (1) | |||
|
474 | (1) | |||
|
475 | (1) | |||
|
475 | (2) | |||
|
477 | (16) | |||
|
|||||
|
479 | (1) | |||
|
|||||
|
479 | (1) | |||
|
480 | (4) | |||
|
484 | (2) | |||
|
486 | (1) | |||
|
487 | (1) | |||
|
488 | (2) | |||
|
490 | (1) | |||
|
490 | (1) | |||
|
491 | (2) | |||
|
493 | (26) | |||
|
|||||
|
497 | (1) | |||
|
|||||
|
497 | (1) | |||
|
497 | (2) | |||
|
499 | (2) | |||
|
501 | (3) | |||
|
504 | (2) | |||
|
506 | (4) | |||
|
510 | (2) | |||
|
512 | (2) | |||
|
514 | (2) | |||
|
516 | (3) | |||
|
519 | (14) | |||
|
|||||
|
519 | (1) | |||
|
520 | (2) | |||
|
522 | (1) | |||
|
523 | (1) | |||
|
524 | (4) | |||
|
528 | (5) | |||
|
533 | (16) | |||
|
|||||
|
537 | (1) | |||
|
|||||
|
537 | (1) | |||
|
537 | (1) | |||
|
538 | (2) | |||
|
540 | (2) | |||
|
542 | (1) | |||
|
543 | (1) | |||
|
543 | (2) | |||
|
545 | (1) | |||
|
546 | (1) | |||
|
546 | (3) | |||
|
549 | (20) | |||
|
|||||
|
551 | (1) | |||
|
|||||
|
551 | (1) | |||
|
551 | (1) | |||
|
552 | (1) | |||
|
553 | (1) | |||
|
553 | (1) | |||
|
554 | (1) | |||
|
555 | (4) | |||
|
559 | (3) | |||
|
562 | (1) | |||
|
563 | (2) | |||
|
565 | (4) | |||
|
569 | (8) | |||
|
|||||
|
571 | (1) | |||
|
|||||
|
571 | (1) | |||
|
571 | (1) | |||
|
572 | (3) | |||
|
575 | (1) | |||
|
576 | (1) | |||
|
577 | (16) | |||
|
|||||
|
579 | (1) | |||
|
|||||
|
579 | (1) | |||
|
579 | (1) | |||
|
580 | (1) | |||
|
581 | (1) | |||
|
581 | (1) | |||
|
582 | (1) | |||
|
582 | (2) | |||
|
584 | (1) | |||
|
584 | (3) | |||
|
587 | (3) | |||
|
590 | (1) | |||
|
591 | (2) | |||
|
593 | (4) | |||
|
|||||
|
595 | (1) | |||
|
|||||
|
595 | (2) | |||
|
597 | (10) | |||
|
|||||
|
599 | (1) | |||
|
|||||
|
599 | (1) | |||
|
599 | (2) | |||
|
601 | (1) | |||
|
602 | (1) | |||
|
603 | (2) | |||
|
605 | (2) | |||
PART V BIBLIOGRAPHY | 607 | (2) | |||
Bibliography | 609 | (16) | |||
Biographics | 625 | (6) | |||
Credits | 631 | (4) | |||
Index | 635 |
The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.
The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.