
The Engineering of Software
A Technical Guide for the Individual
Résumé
The book is divided into four parts—Software and Engineering; Requirements and Specification; Design and Coding; and Software Testing—to discuss the phases (besides coding) of the software lifecycle. It covers modern topics like Capability Maturity Model, Java, Automated and Regression testing, and Safety for mission critical projects.
This book is designed to hone the skills of the software engineer by reinforcing the methods and techniques used throughout the software lifecycle. It is also suitable for "crossover" engineers trained in other technical field who now find themselves working with software.
Contents
I. ENGINEERING AND SOFTWARE.
Management vs. Technical.
Teamwork vs. Individual effort.
Different Tasks—Development Phases.
Phases of the Software Life Cycle.
Information Exchange Between Developer and End User.
Complete Problem Description (Developer Only).
Break Down into Detailed Assignments for Programming.
Programming.
Testing.
Changing the Program.
Naming the Development Phases.
The Business of Developing Software.
Time to Market.
Perceived Software Quality.
The Software Development Team.
Managing Development.
How Does It Fit?
Review Questions.
Further Reading.
References.
2. Some Principles of Software Development.
Complexity and Control.
Language Betrays Us.
Divide and Conquer.
Independent Parts.
7+-2 Rule.
Hierarchies.
Know When to Stop.
Identify the "Customers".
Fuzzy into Focus.
Document it!
Record It or It's Lost.
Know What You've Assumed.
Traceability.
A (Document) Place for Everything and Everything in Its Place.
Documentation Isn't a Novel.
Input/Output is the Essence of Software.
Too Much Engineering Is Not a Good Thing.
If It Ain't Broke Don't Fix It.
The "Creeping Feature Creature".
Expect to deal with change.
Plan for it.
Fix it now.
Reuse past work.
Previous work well done is golden.
Create software sothat reuse is possible.
Don't reinvent the wheel.
Take responsibility.
Summary of software engineering principles.
How Does It Fit?
Review Questions.
Further Reading.
References.
3. Is it Really Engineering?
Artificial Science.
The Analogy to Other Professions.
Civil Engineering.
Architecture.
Mechanical/Aeronautical Engineering.
Computer (Hardware) Engineering.
Medicine.
Responsibility of Software Developers.
Engineering Institutions.
Market forces.
The legal system.
Warranties.
Professional organizations.
Government regulation.
Professional engineers and accreditation.
"Software engineers" are legal only in Texas.
How Does It Fit?
Review Questions.
Further Reading.
References.
4. Management and Process.
Fred Taylor's Scientific Management.
Program Development as a Formal Process.
Capability Maturity Model (CMM).
Process management isn't for every organization.
Engineering Management.
Metrics.
Estimation models.
Feedback from metrics.
How Does It Fit?
Review Questions.
Further Reading.
References.
5. The "Life Cycle" of Software.
The spiral model.
Exploratory programming.
Opportunistic development.
The Phases of Development.
Requirements.
Specification.
Design.
Code.
Testing.
Software inspection.
Inspection works.
The participants and the procedure.
Inspection is expensive.
What can an individual do?
Maintenance Throughout the Lifecycle.
Debugging.
Configuration management.
Managing a Development Lifecycle.
Progress reports.
Dividing effort among the phases.
How Does It Fit?
Review Questions.
Further Reading.
References.
6. The Test Plan.
System-level functional testing.
Functional unit testing.
Normal vs. exception test cases.
Broken-box testing.
Fault-based testing.
An example.
Interface testing.
Boundary-value tests.
Test plan throughout the lifecycle.
Adding systematic testing to the plan.
After testing.
How Does It Fit?
Review Questions.
Further Reading.
References.
II. REQUIREMENTS AND SPECIFICATION.
Requirements describe a software transform.
Identification of system inputs and output.
Partitioning inputs and outputs.
Exploring relationships between inputs and outputs.
From requirements to the test plan.
Example: Printing Trees.
Pinning down the output format.
The input format.
Specifications that are not of concern to the user.
Commentary on the example.
Software "modes".
Rapid Prototyping.
Managing the Requirements Phase.
How Does It Fit?
Review Questions.
Further Reading.
References.
8. Properties of Good Requirements.
Non-prescriptive.
Correct.
Complete.
Concise (succinct).
Precise.
Clear.
Unambiguous.
Consistent.
Traceable.
Modifiable.
Testable (verifiable).
Feasible.
Summary: how to write requirements?
How Does It Fit?
Review Questions.
Further Reading.
References.
9. Specification.
Sharpening Requirements into Specifications.
When the end user "doesn't care".
Internal ("system") errors.
Using a specification as a test oracle.
Writing a specification only to discard it.
The Uses of Formalism.
Informal formalism.
The opportunity to verify.
Formal Specification and Design Methods.
Finite-state-machine design.
Object-oriented design.
Design with data-flow diagrams.
How Does It Fit?
Review Questions.
Further Reading.
References.
10. Formal Methods.
Enabling human talent.
Hard-to-use mathematics.
First-order Predicate Logic.
Example: sorting.
A first try.
Restricting the input.
Second try.
"Programming" a Specification.
Prolog: a quick introduction.
Prolog as a specification language.
Prolog and first-order logic-correct specifications.
The Controversy Over "Formal Methods".
Dangerous software.
Can formal methods make software safe?
Mathematical precision for its own sake.
Mathematical precision for proof.
The Formal Methodists' dream.
The "agnostic" position.
Formal specifications as automatic oracles.
How Does It Fit?
Review Questions.
Further Reading.
References.
III. DESIGN AND CODING.
What Is a Design?
General Design Ideas.
Iterative Enhancement.
Step-wise Refinement.
Information Hiding.
Adding to the Test Plan in Design.
The Designer's Art.
By Engineers for Engineers.
From Requirements to Design.
Common, Needed Functions.
Major Data Structures.
Major Algorithms.
High-level ("Architectural") Design.
Designing Major Subsystems.
Traceability Matrices.
Subsystem Interfaces.
Environment Interface.
Detailed Design.
Decomposition of Subsystems into Modules.
Designing Major Modules of a Subsystem.
Defining Module Interfaces.
Specifying the Module Functions.
Module Documentation.
Formal Notations for Design.
Architectural Diagrams.
Design Formalisms.
How Does It Fit?
Review Questions.
Further Reading.
References.
12. Coding.
Strong Typing.
User-defined Types.
Encapsulation for Data Abstractions.
Run-time Checking.
Program Redundancy Checking.
Assertions.
And When a Problem is Caught-What Then?
Macro Capability.
Programming-language Libraries.
Error-prone Programming Language Constructions.
Choosing a Programming Language.
Languages for Rapid Prototyping.
Support Tools for Programming.
Language Analyzers-LCLint.
File Utilities.
Shell Command Scripts.
grep Searches.
Programmed Searches and Edits.
Comparing Files.
The make Utility.
Version-control Tools.
Adding to the Test Plan while Coding.
How Does It Fit?
Review Questions.
Further Reading.
References.
13. Pseudocode.
Example of Pseudocode: Zipf's Law.
Test Plan for the Zipf's Law Software.
Implementing Pseudocode.
C Implementation of Zipf's Law.
Implementing Zipf's Law in a Shell Script.
How Does It Fit?
Review Questions.
Further Reading.
References.
14. Finite-state Machines.
Formal Finite-state Automata.
Example FSM: the C scanf() Conversion.
Designing a Simple GUI as an FSM.
Test Plan for the GUI.
Model Checking.
Coding an FSM Design.
Implementation Techniques.
Implementing Transgressions of FSM Formalism.
How Does It Fit?
Further Reading.
References.
15. Abstract Data Types (ADTs).
ADT Signatures and Axioms-Boolean Example.
Signature Diagram.
Algebraic Axioms.
Encapsulation and C.
Example: the ADT "IntSet".
Signature for IntSet.
English Specification.
Design of IntSet.
Testing IntSet.
Implementing an ADT.
Implementing a Boolean ADT.
Encapsulation: Header Files.
Correctness of ADT implementations.
Implementing the IntSet ADTinC.
Instrumenting the ADT's Memory Allocation.
Local Variables of the ADT Type.
How Does It Fit?
Review Questions.
Further Reading.
References.
16. Object-oriented Design.
What is a Software Object?
The Object Paradigm.
Object-oriented requirements.
Modeling the physical world.
The role of requirements.
Booch method.
Shlaer-Mellor method.
Class-Responsibilities-Collaboration (CRC) Method.
Example: A checkbook system.
Identification of classes and patterns.
Identification of Responsibilities.
Identification of collaborators.
Polymorphism and Inheritance.
Identification and Use of Persistent Data.
Checking an Object Design for Implementation.
Object-oriented languages.
Smalltalk.
C++.
Java.
A brief introduction to Java.
Objects and Classes.
Methods and parameters.
Inheritance and polymorphism.
Implementation of the Checkbook.
Implementation of the Account class.
Implementation of the Transaction and Check classes.
How Does It Fit?
Review Questions.
Further Reading.
References.
17. Data-flow Diagrams.
Data transforms.
Information flows.
Information sources and sinks.
Information stores.
Example DFDs: a payroll system.
Refining DFDs.
Heritage numbers.
DFD terminology.
The data dictionary.
Checking DFDs - CASE tools.
Structure charts.
The Central Transform.
Constructing Structure Charts.
Example Construction.
Implementing a DFD.
How Does It Fit?
Review Questions.
Further Reading.
References.
18. Wrapping up Design and Coding.
The Universal Modeling Language (UML).
Client-server Design.
Choosing Design Techniques.
Recognizing a Design.
Which Formal Technique(s) Should I Use?
Wrapping Up the Code.
Documenting Choices.
Defensive Coding.
Managing the Design and Coding Phases.
How Does It Fit?
Review Questions.
Further Reading.
References.
IV. TESTING.
What Should Testing Accomplish?
The Testing Process: Unit Testing Versus System Testing.
Unit testing.
Test harness and stubs.
Subsystem testing.
System testing.
Inspection vs. testing.
Managing the Testing Phase.
How Does It Fit?
Review Questions.
Further Reading.
References.
20. Coverage - "Systematic" Testing.
Functional (specification-based, blackbox) testing.
Structural (code-based) testing.
Generating Code-Based Tests.
Misleading the tester.
Test oracles.
Structural Test Adequacy and Marick's Recommendation.
Variations on Coverage Testing.
Control-flow graphs and their coverage.
Path coverage.
Branch coverage.
Testing "tools".
Tools to manage the testing process.
Structural-coverage measuring tools.
More Complex Structural Coverage Criteria.
Dataflow Coverage.
Mutation Coverage.
Which Coverage Is Best?
The "Subsumes" Relationship.
Choosing a Testing Method in Practice.
How Does It Fit?
Review Questions.
Further Reading.
References.
21. The Future of Testing.
User profile.
Random input values.
An ideal example of random testing.
Predicting Software Quality.
Reliability.
Dependability.
Automated Testing.
Regression Testing.
State of the Software Testing Art.
How Does It Fit?
Review Questions.
Further Reading.
References.
Answers and Hints for Selected Exercises.
Index.
Caractéristiques techniques
PAPIER | |
Éditeur(s) | Addison Wesley |
Auteur(s) | Dick Hamlet, Joe Maybee |
Parution | 01/10/2000 |
Nb. de pages | 494 |
Couverture | Broché |
Intérieur | Noir et Blanc |
EAN13 | 9780201701036 |
Avantages Eyrolles.com
Nos clients ont également acheté
Consultez aussi
- Les meilleures ventes en Graphisme & Photo
- Les meilleures ventes en Informatique
- Les meilleures ventes en Construction
- Les meilleures ventes en Entreprise & Droit
- Les meilleures ventes en Sciences
- Les meilleures ventes en Littérature
- Les meilleures ventes en Arts & Loisirs
- Les meilleures ventes en Vie pratique
- Les meilleures ventes en Voyage et Tourisme
- Les meilleures ventes en BD et Jeunesse