PART 1
Concepts of Software Reliability
1. Definition of Software Reliability 3
Is the Moon an Enemy Rocket? 4
What is an Error? 4
What is Reliability? 7
Are Engineers Smarter than Programmers? 8
Hardware Reliability, 9
The High Cost of Software, 11
Software Experimentation, 12
References, 14
2. Errors— Their Causes and Consequences 15
The Macroscopic Translation Model, 17
The Microscopic Translation Model, 21
Consequences of Errors, 23
References, 25
PART 2 Designing Reliable Software
3. Basic Design Principles 29
Four Approaches to Reliability, 30
The Design Processes, 34
Complexity, 37
The User Relationship, 38
Problem Solving, 40
Design Correctness, 43
References, 45
4. Requirements, Objectives, and Specifications 46
Establishing Requirements, 46
Software Objectives, 48
Understanding the Tradeoffs, 51
Writing Software Objectives, 56
External Design, 59
Designing the User Interface, 61
Writing the External Specification, 65
Verifying the External Specification, 69
Planning for Change, 72
References, 73
5. System Architecture 74
Levels of Abstraction, 75
Port-Driven Subsystems, 79
Sequential Programs, 85
Documentation, 85
Verification, 86
References, 87
6. Program Structure Design 88
Module Independence, 89
Module Strength, 89
Module Coupling, 92
Further Guidelines, 95
Composite Analysis, 97
Composite Analysis Example, 98
Verification, 108
References, 109
7. Design Practices 110
Passive Fault Detection, 110
Active Fault Detection, 114
Fault Correction and Tolerance, 116
Error Isolation, 118
Handling Hardware Failures, 120
References, 121
8. Module Design and Coding 123
Module External Design, 124
Module Logic Design, 126
Structured Programming and Step-Wise Refinement, 129
Defensive Programming, 138
High-Level Languages, 139
Attitude, 143
Documentation, 145
Standards, 146
Verification, 147
References, 149
9. Programming Style 151
Program Clarity, 152
Using the Language, 155
Microefficiencies, 156
Comments, 160
Data Definitions, 161
Program Structure, 164
References, 165
PART 3 Software Testing
10. Testing Principles 169
Basic Definitions, 172
Testing Philosophies, 173
Module Integration, 178
Bottom-Up Testing, 178
Top-Down Testing, 181
Modified Top-Down Testing, 184
Big-Bang Testing, 185
Sandwich Testing, 186
Modified Sandwich Testing, 187
Which One is Best? 187
Testing Axioms, 189
References, 195
11. Module Testing 196
Test Case Design, 196
Test Execution, 206
Module Driver Tools, 208
Static Flow Analysis, 212
Run-Time Tools, 212
Quadratic Equation Tests, 214
References, 215
12. Function and System Testing 216
External Function Testing, 216
Cause-Effect Graphing, 218
System Integration, 227
System Testing, 230
Function and System Testing Tools, 238
Test Planning and Control, 242
Acceptance Testing, 244
Installation Testing, 245
References, 245
13. Debugging 247
Finding the Error, 247
Making the Correction, 251
Debugging Tools, 252
Monitoring the Debugging Process, 257
References, 258
PART 4 Additional Topics in Software Reliability
14. Management Techniques for Reliability 263
Organization and Staffing, 264
Programming Librarians, 267
Programming Teams, 269
The Elements of a Good Manager, 272
References, 273
15. Programming Languages and Reliability 275
Uniformity, 278
Simplicity, 281
Data Declaration, 282
Data Types and Conversion, 284
Procedures and Data Scoping, 287
Control Structures, 289
Data Operations, 291
Compile-Time Error Detection, 292
Execution-Time Error Detection, 295
References, 296
16. Computer Architecture and Reliability 298
Memory Structure, 300
Program Structure, 304
Debugging Aids, 306
High-Level Language Machines, 307
References, 308
17. Proving Program Correctness 310
The Method of Inductive Assertions, 311
What Can and Cannot be Proved by Proofs, 319
Formal and Automated Proofs, 322
Additional Applications of Proof Techniques, 324
References, 327
18. Reliability Models 329
A Reliability Growth Model, 330
Other Probabilistic Models 335
An Error Seeding Model, 336
Simple Intuitive Models, 338
Complexity Models, 340
References, 342
19. Software Support Systems 344
Program Library Systems, 344
Design Aids, 351
References, 353
Index 355