throbber
Fundamentals
`of Software
`Engineering
`
`Carlo Ghezzi
`Politecmco di Milar«>, Milar«>, Iflliy
`
`Mehdi Jazayeri
`Hewlett-Packard Laboratories, Palo Alto, California and Pisa, Iflliy
`
`Dino Mandrioli
`Politecnico di Milano, Milano, Italy
`
`PRENTICE HALL, l]pper Saddle River, NJ 07458
`
`IBM-1008
`Page 1 of 83
`
`

`
`L1brary of Congress Catalog1ng-tn-PUbl1Cat1on Oat~
`
`Ghezz1. Carle.
`Funda•entals of software ~ng1neer~ng 1 by carle Ghezz1, Mehd\
`.Jazayer1. D1no Manclr1ol1.
`c•.
`p.
`Inc1uclas b1bl1ograph1cal referenceS and 1nclex.
`ISBN 0-13-820432-Z
`1. Software eng1near1ng.
`01no.
`III-. THla.
`QA76. 768.G47
`1991
`005.1--dc2.D
`
`I. Jazayert, Mehdt.
`
`II. Mandr1ol1,
`
`90-20198
`CIP
`
`Editorial/prodUction supervision: Joe Scordato
`Cover design: Bruce Kenselaar
`Cover Art: Paolo Uccello (15th Century Florentine)
`Manufacturing buyers: Linda Behrens and Patrice Fracdo
`Acquisitions Editor: Marcia Horton
`
`The author and publisher of this book have used their best efforts in preparing this book. These efforts include
`the development, reseafch and testing of the theories and programs to determine their effectiveness. The author
`and publisher make no warranty of any kind, expressed or implied, with regard to these programs or the documen(cid:173)
`tation contained in this book. The author and publisher shall not be liable in any event for incidental or consequential
`damages in connection with, or arising out of, the furnishing, performance, or use of these programs.
`
`1991 by Prentice-Hall, Inc.
`A Simon & Schuster Company
`Upper Saddle River, New Jersey 07458
`
`AU rights reserved. No part of this book may be
`reproduced, in any form or by any means,
`without permission in writing from the publisher.
`
`Printed in the U~t~ ~i.Z 2 America
`
`10 9 8
`
`ISBN-0-13-820432-2
`
`Prentice-Hall International {UK) Limited, London
`Prentice-Hall of Australia Pty. Limited, Sydney
`Prentice·Haii.Canada Inc., Toronto
`Prentice-Hall Hispanoarneticana, S.A.,lvlexi'co
`Prentice-Hall of India Private Limited, New Delhi
`Prentice-Hall of Japan, Inc., Tokyo
`Simon & Schuster Asia Pte. Ltd., Singapore
`Editora Prentice-Hall do Brasil, Ltda., Rio de Janeiro
`
`TRADEMARK INFORMATION
`
`A~a is a registered trademark of the U.S. Government, Ada
`Joint Program Office.
`Eiffel is a trademark of Interactive Software Engineering, Inc.
`Kee is a registered trademark of InteltiCorj>, Inc.
`Macintosh, MacDraw, QuickDraw, MacProject are registered
`trademarks of Apple Computer, Inc.
`Software Through Pictures is a registered trademark of Interactive
`Development Environments, Inc.
`STATEMATE is a registered trademark of i-Logix, Inc.
`The teamwork logo, teamwork/SA. teamwork/SD, teamwork/
`ACCESS, reamwork/RT are registered trademarks; teamwork/
`IM, teamwork/ ADA are ttademarksofCadreTechnotogies, Inc.
`UNIX is a registered trademark of AT&T (Bell Laboratories).
`X Window System is a trademark of the Massachusetts
`Institute of Technology.
`
`· Ronald Williams Library ,
`Bort.heastern Illinois Univers1'!}1
`
`Contents
`
`PREFACE xi
`
`1
`
`SOFTWARE ENGINEERING: A PREVIEW 1
`
`1.1
`
`1.2
`
`1.3
`
`1.4
`
`1.5
`
`1.6
`
`1.7
`
`The Role of Software Engineering in System Design
`
`2
`
`A History of Software Engineering 3
`
`The Role of the Software Engineer 5
`
`The Software Life Cycle 6
`
`The Relationship of Software Engineering to Other 8
`Areas of Computer Science
`1.5.1 Programming Languages, 8
`1.5.1 Operating Systems, 10
`1.5.3 Data Bases, 10
`1.5.4 Artificial Intelligence, 11
`1.5.5 Theoretical Models, 12
`
`The Relationship of Software Engineering to Other 13
`Disciplines
`1. 6.1 Management Sci'ence. 13
`1.6.2 Systems Engineering, 13
`Concluding Remarks 14
`Bibliographic Notes 14
`
`2 SOFTWARE: ITS NATURE AND QUALITIES 17
`
`2.1
`,_.
`
`2.2
`
`, Cla~ifjcation Of Spftware Qualities 18
`-2.I~J, ¥Exte.ma/ Versus Interntt(,Qu~/!ties, 18
`2.1.2 Product and Process Qualities, 19
`Representative Qualities 19
`
`iii
`
`IBM-1008
`Page 2 of 83
`
`

`
`iv
`
`Contents
`
`Contents
`
`v
`
`Correctness, Reliability, and Robustness, 19
`2.2.1
`2.2.2 Performance, 22
`2.2.3 User Friendli'ness. 24
`2.2.4
`Verifiability, 25
`2.2.5 Maimainability, 25
`2.2.6 Reusability, 28
`2.2. 7 Portability, 30
`2.2.8 Understandability, 31
`2.2.9
`Interoperability, 3/
`2.2.1 0 Productivity, 32
`2.2.1 1 Timeliness, 33
`2.2.12 Visibility, 35
`Quality Requiremenls in Different Application Areas
`2.3.1
`Information Systems, 36
`2.3.2 Rea~time SystEms, 37
`2.3.3 Distributed Systems, 38
`2.3.4 Embedded Systems, 39
`Measurement of Quality 40
`Concluding Remarks 40
`Further Exercises 40
`Hints and Sketchy Solutions 41
`Bibliographic Notes 41
`
`36
`
`2.3
`
`2.4
`2.5
`
`3
`
`SOFTWARE ENGINEERING PRINCIPLES 43
`
`3.1
`3.2
`3.3
`3.4
`3.5
`3.6
`3.7
`3.8
`
`Rigor and Formality 45
`Separation of Concerns 47
`Modularity 49
`Abstraction 51
`Anticipation of Change 53
`Generality 54
`Incrementality 56
`Concluding Remarks 57
`Further Exercises 57
`Hints and Sketchy Solu lions 58
`Bibliographic Notes 58
`
`4
`
`SOFTWARE DESIGN 61
`
`4.1
`
`4.2
`
`Software Design Activity and Its Objectives 63
`4. L 1 Design for Change, 65
`4.1.2 Program Families, 70
`Modularization Techniques 72
`4.2.1 The Module Structure and Its Representation, 73
`
`4.2.2
`
`lnteiface, Implementation. and Information
`Hiding, 81
`4.2.3 Design Notations, 89
`4.2.4 Categories of Modules, 96
`4.2.5 More Techniques for Design for Change, 104
`4.2.6 SIEpwise Refinement, 107
`4.2. 7 Top-down vs. Bottom-up Design, 115
`Object-oriented Design 115
`Handling Anomalies 122
`A Case Study in Design 125
`Concurrent Software 128
`4. 6.1 Shared Datn, 129
`4.6.2 Real-time Software, 136
`4.6.3 Distributed Software, 138
`Concluding Remarks 144
`Further Exercises 145
`Hints and Sketchy Solutions 147
`Bibliographic Notes 148
`
`4.3
`4.4
`4.5
`4.6
`
`4.7
`
`5 SOFTWARE SPECIFICATION 151
`
`5.1
`5.2
`5.3
`5.4
`5.5
`
`5.6
`
`5.7
`
`5.8
`
`The Uses of Specifications 152
`Specification Qualities 154
`Classification of Specification Styles 157
`Verification of Specifications 159
`Operational Specifications 160
`5.5. I Data Flow Diagrams: Specifying Functions of
`Information SysiEms, 161
`5.5.2 FiniiE Stn/2 Machines: Describing Control Flow, 167
`5.5.3 Petri Nets: Specifying Asynchronous Systems, 174
`Descriptive Specifications 199
`5.6.1 Entity-relationship Diagrams, 199
`5. 6.2 Logic Specifications, 202
`5.6.3 Algebraic Specifications, 219
`Building and Using Specifications in Practice 226
`5. 7.1 Requirements for Specification Notations, 227
`5.7.2 Building Modular Specifications, 230
`5. 7.3 Specifications for the End User, 241
`Concluding Remarks 242
`Further Exercises 243
`Hints and Sketchy Solutions 248
`Bibliographic Notes 251
`
`IBM-1008
`Page 3 of 83
`
`

`
`vi
`
`Contents
`
`Contents
`
`vii
`
`6 SOFTWARE VERIFICATION 255
`
`6.1
`
`6.2
`6.3
`
`6.4
`
`6.5
`
`6.6
`6. 7
`
`6.8
`
`Goals and Requirements of Verification 256
`6.1.1 Everything Must Be Verified. 257
`6.1.2 The Results of Verification May Not Be Binary, 257
`6.1.3 Verification May Be Objective or Subjective, 258
`6.1.4 Even Implicit Qualities Must Be Verified, 259
`Approaches to Verification 260
`Testing 260
`6.3.1 Goals for Testing, 262
`6.3.2 Theoretical Foundations of Testing, 264
`6.3.3 Empirical Testing Principles, 266
`6.3.4 Testing in the Small, 269
`6.3.5 Testing in the I..mge, 288
`6.3.6 Separate Concerns in the Testing Activity, 293
`6.3. 7 Testing Concurrent and Real-time Systems, 295
`
`Analysis 29'7
`6. 4.1
`Informal Analysis Techniques, 298
`6. 4.2 Correctness Proofs, 301
`Symbolic Execution 318
`6.5.1 Basic Concepts of Symbolic Execution, 320
`6.5.2 Progroms with Arroys, 323
`6.5.3 The Use of Symbolic Execution in Testing. 325
`6.5.4 Symbolic Execution of Concurrent Programs, ]27
`
`Debugging 329
`Verifying Other Software Properties 334
`6.7.1 VerifYing Performance, 334
`6. 7.2 VerifYing Reliability, 335
`6. 7.3 Source-code Metrics, 339
`Concluding Remarks 344
`Further Exercises 345
`Hints and Sketchy Solutions 350
`Bibliographic Notes 353
`
`7 THE SOFTWARE PRODUCTION PROCESS 357
`
`7.1
`
`7.2
`
`Software Production Process Models 358
`7.1.1 Wateifa/1 Model, 360
`7.1.2 Evolutionary Model, 374
`7.1.3 Transfonnation Model, 377
`7.1.4 Spiral Model, 380
`7.1.5 An Assessment of Process Models, 382
`Case Studies 384
`7.2.1 Telephone Switching System. 384
`7.2.2 Budget Control System, 389
`
`7.3
`
`7.4
`
`Organizing the Process 394
`7.3.1 Software Methodologies, 394
`7.3.2 Configuration Management, 403
`7.3.3 Software Standards, 408
`Concluding Remarks 409
`Further Exercises 409
`Hints and Sketchy Solutions 411
`Bibliographic Notes 411
`
`8
`
`MANAGEMENT OF SOFTWARE ENGINEERING 415
`
`8.1
`8.2
`
`8.3
`
`8.4
`
`8.5
`
`8.6
`
`Management Functions 417
`Project Planning 418
`8 .. 2.1 Software Productivity, 420
`8.2.2 People and Productivity, 426
`8.2.3 Cost Estimation, 427
`Project Control 434
`8.3.1 Work Breakdown Structures, 434
`8.3.2 Gantt Charts, 435
`8.3.3 PERT Charts, 437
`8.3. 4 Dealing with Deviations from the Plan, 440
`Organization 441
`8.4.1 Centrolized-control Team Organization, 443
`8.4.2 Decentralized-control Team Organization, 444
`8.4.3 Mixed-control Team Organization, 445
`8.4.4 An Assessment of Team Organizations, 446
`Risk Management 446
`8.5.1 7jtpical Management Risks in Software
`Engineedng, 447
`Conclilding·Reinarks 449
`Further .Exercises 451
`Hints and Sketchy Solutions 452
`Bibliographic Notes 452
`
`9
`
`SOFTWARE ENGINEERING roOLS AND ENVIRONMENTS 455
`
`9.1
`9.2
`9.3
`
`Historical Evoiution of Tools and Environments 456
`Classifieatioil of Software Tools and Environments 458
`Representative Tools 462
`9.3.1
`Editors, 463
`9.3.2
`Linkers, 464
`9.3.3
`Int2rpmters, 464
`9.3.4 Code Generotors, 465
`
`IBM-1008
`Page 4 of 83
`
`

`
`Contents
`
`Contents
`
`ix
`
`B.
`
`Case Study 2: Building a Family of Compilers 529
`B.1
`Initial Product Planning, 529
`B.2 Economic and Financial Planning. 529
`B.J
`Technical Plam¢ng and Managemen~ 530
`B.4 Early Development Phrues, 53()
`B.S Project Monitoring, 531
`B.6 Project Reexamination, Revival, and Goal Setting, 531
`B.7 Assignment of Responsibility, 533
`B.8
`Steady Progress and Relerue of the Product, 533
`B. 9 Product Distribution, 534
`B. 10 Remarks, 534
`Case Study 3: Incremental Delivery 537
`C.
`Concluding Remarks 538
`
`REFERENCES 539
`
`INDEX 567
`
`viii
`
`9.4
`
`9.5
`
`9.6
`9.7
`
`9.3.5 Debuggers, 466
`9.3.6
`Tbols Used in Software Testing, 467
`9.3. 7
`Static Analyzers, 468
`9.3.8 Usef"interface Management Tools, 47()
`9.3. 9 Configuratir;>n Management Tools, 474
`9.3.10 Management Tdols, 477
`9.3.11 Software Engineering Infrastructures, 478
`The Role of Programming Language in the 479
`Environment
`9.4.I Procedural Versus Nonprocedural Languages, 480
`9.4.2 Features of Progranuning in the Small, 483
`9.4.3 Progromming lAnguages and Modu/an'ty, 484
`9.4.4 Object-oriented Progromming lAnguages, 487
`9.4.5 Programming lAnguages and the Handling of
`Anomalies, 491
`9.4.6 Programming lAnguages and ConcWTency, 493
`9.4. 7 Programming Languages and Verification, 496
`9. 4.8 Programming lAnguages and Software Design, 497
`Saine Sample Tools and Environments 498
`9.5.1 Team·work, 498
`9.5.2 The UNIX Environment, 500
`9.5.3
`lAnguage-centered Environments: Sma/lta/k8()
`and KEE, 504
`9.5.4 PCTE, 505
`An ideal Scenario for the Future 506
`Concluding Remarks 511
`Further Exercises 511
`Hints and Sketchy Solutions 512
`Bibliographic Notes 513
`
`10 EPILOGUE 517
`
`10.1
`Hl.2
`10.3
`
`The Future 518
`Ethics and SoCial Responsibility 520
`Concluding Remarks 521
`Bibliograi>hic Notes 521
`
`CASE STUDIES 523
`
`A.
`
`Case Study 1: Automating a Law Office 524
`A.1 Economic and Financial Planning, 525
`A.2 Technical Planning and Management, 526
`A.J Project Monitoring, 527
`A.4 Initial Delivery, 528
`AS Partial Recovery, 528
`
`IBM-1008
`Page 5 of 83
`
`

`
`We dedicate this book to our children:
`
`Marta, Silvia, and Giacomo;
`Darius and Ryan;
`Leonardo and Laura;
`
`who have Jived cheerfully through the many revisions.
`
`Preface
`
`This is a textbook on software engineering. The theme underlying the book is the
`importance of rigor in the practice of software engineering. Traditional textbooks on the
`subject are based on the lifecycle model of software development-that is, requirements,
`specification, designt coding, maintenance-examining each phase in tum. In contrast, our
`presentation is based on important principles that can be applied independently of the
`lifecycle model and often in several phases of the lifecycle. Our emphasis is on
`identifying and applying fundamental principles that are applicable throughout the
`software lifecycle.
`The general characteristics of the book are the following:
`
`It deals with software engineering as opposed to programming. Thus, we do
`not discuss any programming issues. For example, we omit any discussion of
`programming language constructs such as goto, loops, etc. We believe that the
`student of software engineering should have prior familiarity with these issues,
`which are more properly covered in textbooks on programming languages. On
`the other hand, w~ do discuss the issue of mapping software design constructs
`into specific programming languages. We concentrate on intermodule issues
`and assume as prerequisite the ability to program individual modules.
`It emphasizes principles and techniques as opposed to specific tools (which
`may be used in examples). Many companies are actively developing software
`engineering tools and environments today and we expect that better and more
`sophisticated tools will be invented as our knowledge of software engineering
`increases. Once the student understands the principles and techniques that the
`tool is based on, mastery of the tool will be easy. The principles and techniques
`are applicable across tools while mastering the use of any particular tool does
`not better prepare the student for the use of other tools. Further, use of tools
`without understanding their underlying principles is dangerous.
`It presents engineering principles; it is not an engineering handbook.
`Principles are general and are likely to remain applicable for many years while
`particular techniques will change due to technology, increased knowledge, etc.
`An engineering handbook may be consulted to learn how to apply a particular
`
`xi
`
`IBM-1008
`Page 6 of 83
`
`

`
`xii
`
`Preface
`
`Preface
`
`xiii
`
`technique: it contains a set of prescriptions. This book, on the other hand, aims
`to enable the reader to understand why a particular technique should be used
`and, just as important, why it should not be. Even though we do show how a
`particular technique can be used to implement a given principle, our primary
`emphasis is on the understanding of the why question.
`
`This book embodies our beliefs in the use of fundamental principles and the
`importance of theory in the practice of engineering. We have used the material in this
`book in both university and professional courses on various aspects of software
`engineering.
`
`AUDIENCE
`
`This book is designed to be used as a textbook by students of software engineering either
`in a classroom or for self-study. Professional engineers and managers will find material
`here to convince them of the usefulness of modem practices of software engineering and
`the need to adopt them. It may be used by professionals who are willing to invest the time
`for serious study; it is not really appropriate for a cursory reading. In particular, wherever
`necessary, we have sacrificed breadth for depth. For the professional, the notes on further
`references will be especially helpful. An Instructor's Manual is available with ideas for
`course organizations and solutions to some of the exercises.
`
`PREREQUISITES
`
`Tbe book is designed for junior, senior, or beginning-graduate level students in computer
`science. The reader must have had a course in data structures and should be fluent in one
`or more programming languages. We assume that the reader is already proficient in
`programming. Analytical reasoning, although not strictly necessary, will greatly enhance
`the ability of the reader to appreciate the deeper concepts of the book. This skill is
`developed by mathematics courses such as calculus, discrete mathematics, or-even
`better-theoretical computer science. "Mathematical maturity" is necessary for the student
`of any engineering discipline.
`
`ORGANIZATION AND CONTENT
`
`Software engineering is a large, multi-dimensional discipline. Organizing a textbook on
`the subject poses a challenge because a textbook should present material sequentially, but.
`the many facets of software engineering are so interrelated that there is no optimal
`sequence of topics. We have organized this textbook based on the view that in software
`'
`engineering:
`
`We are building a product: the software. ·
`We use a process to build that product; and
`We use tools in support of that process.
`
`The book thus has three technical sections dealing in tum with the software product
`(Chapters 4 through 6), the ,software engineering process and management (Chapters 7
`and 8), and the software engineering environment (Chapter 9). Chapters I through 3
`form a general introduction to the field and the subsequent more technical sections of the
`book.
`In Chapter 2, we discuss the many facets of software and common desirable
`characteristics for software. These characteristics impose constraints on the software
`builder and the process to be used. In Chapter 3, we present principles for building high(cid:173)
`quality software. By studying principles rather than specific tools, the student gains
`knowledge that is independent of a particular technology and application environment.
`Because technology changes and environments evolve, the student should be armed with
`principles and techniques that can be utilized in different application areas. Chapters 4
`through 8 present and discuss techniques for applying the principles of Chapter 3 to,
`respectively, design, specification, verification, engineering process, and engineering
`management. In Chapter 9, we discuss the use of computers themselves to help in the
`building of software. We postpone the discussion of any specific tools to this chapter.
`While the material in the first two sections should withstand the passage of time, it
`is likely that the material in the third section will become outdated (we hope) because
`newer and better tools are being developed. Since programming languages are a
`fundamental tool of the software engineer, we use Chapter 9 as a bridge between the
`design issues of Chapter 4 and specific programming language constructs.
`
`EXERCISES
`
`The book contains many exercises of three types:
`
`short, paper exercises, aimed at extending the knowledge gained from the book
`or applying the knowledge more deeply; these exercises are interspersed
`throughout the chapters.
`longer paper exercises at the end of each chapter, requiring integration of the
`material in the chapter.
`term-projects requiring the development of some substantial software system
`by a small team.
`
`Solutions to some of the exercises are provided at the end of each chapter. More
`exercise solutions are given in the Instructor's Manual.
`
`IBM-1008
`Page 7 of 83
`
`

`
`xiv
`
`CASE STUDIES
`
`Preface
`
`Preface
`
`XV
`
`Several case studies are used in the text to demonstrate the integration of different
`concepts and to contrast different approaches in realistic situations. In addition, three case
`studies of real-life software engineering projects and their analyses are presented at the
`end of the book. These case studies may be read and studied at different times and for
`different purposes. From these case studies, the new student with little industrial
`experience can gain a quick view of tbe diversity of problems faoed in industrial practice.
`The student with some experience perhaps will identify with certain aspects of these case
`studies and learn from others. The case studies may be read concurrently with the main
`text. Several exercises in the book refer to these case studies.
`
`LABORATORY COURSE
`
`Many software engineering courses combine lectures and a laboratory project. To do this
`in a single semester is rather difficult. The teacher will find himself discussing
`organizational issues while the students are concentrating on their daily forays into
`debugging. We believe that software engineering must be taught as all other engineering
`disciplines by first providing the student with a solid foundation in the "theory." Only
`after this has been achieved will laboratory experience enhance the student's knowledge.
`This implies that the student project must start closer to the middle of the semester rather
`than at the beginning. In our view, a better approach is to spend one semester on the
`theory and a second semester on the laboratury. The Instructor's Manual offers several
`ideas for organizing a laboratory course based on this text.
`
`READING GRAPH
`
`The book may be read in different sequences and at different levels. Each of Chapters 4
`through 7 contains material that may be skipped on the first reading or for a less detailed
`study. Chapters I through 3 are required reading for the subsequent chapters. The
`following graph shows the dependencies among the chapters and the various paths
`through the book. The notation nP refers to a partial reading of Chapter n, skipping some
`sections; nC stands for a complete reading.
`
`The Inst~ctor's Manual discusses different course organizations based on the book.
`The conventiOnal one-semester project software engineering course may follow the
`sequence: 1, 2, 3, 7P, 5P, 4P, 6P, 8, 9, 10. We ourselves prefer the sequence 1, 2, 3, 4P,
`5P, 6P, 7P, 8, 9, 10. In etther case, the students should start on the project after 5P.
`
`ACKNOWLEDGEMENTS
`
`W~ grat~fully acknowledge reviews of earlier drafts provided by Reda A. Ammar of the
`Umverstty of Conn"':ticut: Larry C. Christensen of Brigham Young University, William
`F .. Decker of the Uruversuy of Iow~, David A. Gustafson of Kansas State University,
`RtChar? A. ~emme~er_o~ the Umverstty of California at Santa Barbara, John C. Knight of
`the Umverstty of Vtrgmta, Seymour V. Pollack of Washington University, and K. C. Tai
`of North Carolina State University.
`We would_ also like to thank the following people who have provided valuable
`feedback on van?us drafts of the manuscript: Vincenzo Ambriola, Paola Bertaina, David
`Jacobson, and M!lon Mackey.
`,
`~ewle_tt-Packard Laboratories and Politecnico di Milano made it possible to
`co~cetve th~s book by supporting a course offered by Mehdi Jazayeri at the Politecnico di
`Mtlano dunng the spring of 1988. Alfredo Scarfone and HP Italiana provided us with
`support in Italy. "W_e would 1_ike to acknowledge the support of management at Hewlett(cid:173)
`Packard Laboratones, espectally John Wilkes, Dick Lampman, ~ob Ritchie, and Frank
`Carrubba m Palo Alto, and Peter Porzer in Pisa. We would like to thank Bart Sears for
`his help with various systems: and John Wilkes for the use of his data base for managing
`references. We have also recetved support from Co11siglio Nazionale delle Ricerche.
`
`Milano, Palo Alto, Pisa
`
`. Carlo Ghezzi
`Mehdi Jazayeri
`Dino Mandrioli
`
`IBM-1008
`Page 8 of 83
`
`

`
`Chapter 1
`
`Software Engint:ering: A Preview
`
`••
`
`•
`
`1
`
`Softwjlre engineering is the fielq of CQmputer science tflat deills with the building of
`software systems "~bleb are, so Jarge Qr so coinplex that tq~Y ¥e built by a team or teams
`of engln"!'rs. Usually, these software systel)ls I'Xist in multiple versions and are useq for
`many years. During. tb!fir lifl'lime, 'ihey Uf1dergo minJy changes-to· fix <lefects; to enhance
`existing features, to add new f!'all!res,'to remoye old features, or to be adapted to run i11 a
`new enVironrneQ.t.
`Pamas [1987] has defined software engineerif!g l"' "multi-person construction of
`multi-Yersion·software." This definition·captun;~ t!Je essen~e of software engineering and
`higlllights the differences between pro~rammi'!ll ,nd software engipeering .. A
`programmer ~rites a ~omplete program, while a software ~ngineer writes a software
`component that will be combined with comP.onents written by other software engineers to
`bUild " system. The oomponent one writes may be modified by others; it ~ay be used by
`others·!" build differept Vefsions of the systei!I long ·~fter. one has left .the project.
`Programming is primarily ~·personal actiyity, while software engineering is essenti'!lly a
`~ acti-;:jfY-
`··
`'


`· .

`Ind"'1~• the term "software engineering" wa,~ il)Vented In the jate 1960s after the
`reali~ation that all thee less!Jns learned about how to pr!)gram well were not helping to
`b!!ild better software systems. While the field of programming had made tremendous
`progres,.:..through the systematic study of !'lgqrithms and data structures and the invention
`of "strul'tUred programming"-there were still major difficultie~ in building large software
`systems. The techniques !llat were used by a physicist writing a progi'am to calpulate the
`solution to a differential equa\iOI) for an experiment were not 3\lequate for a programmer
`. ~
`working on a team that was trying to build an operating system or even an inventory
`.
`.
`.
`.
`.
`.
`1
`
`IBM-1008
`Page 9 of 83
`
`

`
`2
`
`!
`
`Software Engineering: A Preview
`
`Chap. 1
`
`Sec. 1.2
`
`A History of Software Engineering
`
`3
`
`tracking system. WtJ_at was needed in these complex cases was the classic engineering
`approach: define clearly the problem you are trying to solve, and develop standard tools
`and techniques for solving it.
`To be sure, software engineering has made progress since the 1960s. There are
`standard techniques that are used in the field. But the field is still far from achieving the
`status of a classic engineering discipline. Many areas remain in the field that are still
`being taught and practiced on the basis of informal techniques. There are no generally
`accepted methods even for specifying what a software system should do. In designing an
`electrical engineering system, such as an amplifier, the system is specified precisely. All
`parameters and tolerance levels are stated clearly and are understood by the customer and
`the engineer. In software engineering, we are just beginning to define both what such
`parameters ought to be for a software system and-an apparently much harder task-how to
`specify them.
`Furthermore, in classic engineering disciplines, the engineer is equipped with tools
`and the maihematical maturity to specify the properties of the product separately from
`those of the design. For example, an electrical engineer relies on mathematjcal equations
`to verify that a design will not violate power requirements. In software engineering, such
`mathematical tools are not well developed. The typical software engineer relies much
`more on experience and judgment rather than mathematical techniques. While experience
`and judgment are ne;,.,ssary. fofr!lal analysis tools are also essential in the practice of
`engineering.
`In this book, we take the view that software engineering must be practiced as an
`engineering discipline. Our approach is to present certain principles that we l:!elieve are
`essential to the "multi-person construction of multi-version. software." It is our view that
`such principles are much more important than any particular notation or methodology for
`building software. These principles will enable the software engineer to evaluate various
`methodologies and apply them when they are appropriate. Chapter 3 presents the
`principles; the rest of the book can be viewed as setting forth their application to the
`various problems in software engineering.
`-
`.
`In this chapter, we review the evolution of software engineering and its relationship
`to other disciplines. The goal of the chapter is to place the field of software engineering
`in perspective.
`
`1.1 THE ROLE OF SOFTWARE ENGINEERING
`IN SYSTEM DESIGN
`
`A software system is often a component of a much larger system. The software
`engineering activity is therefore a part of a much larger system design activity in which
`the requirements of the software are balanced against the requirements of other parts of.
`the system being designed. For example, a telephone switching system consists of
`computers, telephone lines and cables, telephones, perhaps other hardware such as
`satellites, and finally, software to control the various other c.omponents. It is the
`combination of all these components that is expected to meet the requirements of the
`whole system.

`
`A requirement such as "the system must not be down for more than a second in 20
`years" or "when a receiver is taken off the hook, a dial tone is played within half a
`second" can be satisfied with a combination of hardware, software, and special devices.
`The decision of how best to meet the requirement can only be made by considering many
`trade-offs. Power plant or traffic monitoring systems, banking systems, and hospital
`administration systems are other examples of systems that exhibit the need to view the
`software as a component of a larger system.
`To do software engineering right, then, requires a broader look at the general
`problem of system engineering. It requires the software engineer to be involved when the
`requirements are being developed initially for the whole system. It requires that the
`software engineer attempt to understand the application area rather than just what abstract
`interfaces the software must meet. For example, if the system is aimed at users who are
`going to use primarily a menu system, it is not wise to develop a sophisticated word
`processor as a component of the system.
`Above all, any engineering discipline requires the application of compromise. A
`classic compromise concerns the choice of what should be done in software and what
`should be done in hardware. Software implementation offers flexibility, while hardware
`implementation offers performance. For example, in Chapter 2, we will see an example
`of a coin-operated machine that could be built either with several coin slots, one for each
`type pf coin, or a single slot, leaving it to software to recognize the different coins. An
`even more basic compromise involves the decision as to what should be automated and
`what should be done manually.
`
`1.2 A IDSTORY OF SOFTWARE ENGINEERING
`
`The birth and evolution of software engineering as a discipline within computer science
`can be traced to the evolving and maturing view of the programming activity. In the early
`days of computing, the problem of programming was viewed essentially as how to place
`a sequence of instructions together to get the computer to do something useful. The
`problems being programmed were quite well understood-for example, how to solve a
`differential equation. The program was written by, say, a physicist to solve an equation of
`interest to him or her. The problem was just between the user and the computer-no other
`person was involved.
`As computers became cheaper and more common, more and more people started
`using them. Higher level languages were invented in the late 1950s to make it easier to
`communicate with the machine. But still, the activity of getting the computer to do
`something useful was essentially done by one person who was writing a program for a
`well-defined task.
`It was at this time that "programming" attained the status of a profession: you could
`ask a programmer to write a program for you instead of doing it yourself. This
`introduced a separation between the user and the computer. Now the user had to specify
`the task in a form other than the precise programming notation used before. The
`programmer then interpreted this specification and translated it into a precise set of
`machine instructions. This. of course~ sometimes resulted in the programmer
`misinterpreting the user's intentions, even in these usually small tasks.
`
`IBM-1008
`Page 10 of 83
`
`

`
`4
`
`Software Engineering: A Preview
`
`Chap. I
`
`Sec. 1.3
`
`The Role of the Software Engineer
`
`5
`
`Very few large software projects were being done at this time-the early 1960s-and
`these were done by computer pioneers who were experts. For example, the CTSS
`operating system developed at MIT was indeed a large project, but it was done by highly
`knowledgeable and motivated individuals.
`In the middle to late 1960s, truly large software systems were attempted
`commercially. The best documented of these projects was the OS 360 operating system
`for the IBM 360 computer family. The large projects were the source of the realization
`that building large software systems was materially different from building smaller
`systems. There were fundamental difficulties in scalin

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket