The rigors of engineering must soon be applied to the software development process, or the complexities of new systems will initiate the collapse of companies that attempt to produce them. Software Specification and Design: An Engineering Approach offers a foundation for rigorously engineered software. It provides a clear vision of what occurs at each stage of development, parsing the stages of specification, design, and coding into compartments that can be more easily analyzed.
Formalizing the concepts of specification traceability witnessed at the software organizations of Rockwell, IBM FSD, and NASA, the author proposes a strategy for software development that emphasizes measurement. He promotes the measurement of every aspect of the software environment - from initial testing through test activity and deployment/operation.
This book details the path to effective software and design. It recognizes that each project is different, with its own set of problems, so it does not propose a specific model. Instead, it establishes a foundation for the discipline of software engineering that is both theoretically rigorous and relevant to the real-world engineering environment.
An Overview of the Software Development Process An Overview of the Software Engineering Environment Historical Perspective on Software Development Requirements Engineering Software Specification Software Development: Past and Present Testing Software Availability Considerations Software Performance Considerations Hardware Software Decomposition The Bottom Line Requirements Analysis The Requirements Process The Concept of a Customer Requirements Capture The Requirements Analyst Specification Traceability Operational Specification Software Operational Specification Operational System Overview Operational System Model Operations The Operational Profile The Evolution of the Operational Specifications An Example Functional Specification: High-Level Design Functional System Overview Functional System Model Functionalities The Functional Profile The Evolution of the Functional Specifications An Example (Continued) Configuration Control for the Functional Specifications Mapping Operations to Functionalities O x F Distribution of Activity among the Functionalities The Specification Build Process An Extended Definition of Operations and Functionalities The calc System Example Module Specification: Low-Level Design Introduction Architectural Overview Architectural Model Module Specifications The Elements of a Module Specification Module Call Graph Structure Module Profiles The Evolution of the Module Specifications An Example Mapping the Operations to Modules F x M O x F x M Distribution of Activity among the Modules The Specification Build Process An Extended Definition of Functionalities and Modules The calc System Example Choosing the Appropriate Language Metaphor Procrustes Matching Design Architecture to Program Language Mapping the Modules to Code O x F x M x C The Bottom Line Measuring Software Design Measuring Software Design Alternatives Understanding Program Modular Structure Measuring within Module Structure Design Module Complexity Testability The Key Elements of Bad Design System Architectural Trade-Offs The Actual Operational Model Parsing Functionalities The Partitioning of Large Systems The Structure of an Executing Program A Program Represented as a Call Graph A Program as a Call Tree Measuring for the Profiles Maintaining the Specifications Introduction Configuration Control for the Specifications Maintaining the Specifications The Software Development Infrastructure Multiple Projects Security Considerations Specification-Driven Verification and Validation Software Verification Some Definitions Software Validation Testing Objectives Measuring Test Outcomes Maintenance and the V & V Process Direct Benefits of Specification Traceability Reliability Software Security Maintainability Survivability The Software Blackbox Recorder