Skip to content

Engineering of Software A Technical Guide for the Individual

Best in textbook rentals since 2012!

ISBN-10: 0201701030

ISBN-13: 9780201701036

Edition: 2001

Authors: Dick Hamlet, Joe Maybee

List price: $98.80
Blue ribbon 30 day, 100% satisfaction guarantee!
what's this?
Rush Rewards U
Members Receive:
Carrot Coin icon
XP icon
You have reached 400 XP and carrot coins. That is the daily max!

Description:

In this book, the authors provide an introduction to the essential activities involved in software development. Readers will learn and understand the technical skills needed for requirements/specification, design/implementation, and testing. The principles involved in the engineering of software are presented and traced through to practical methods, with examples for readers to emulate. The book is addressed to the individual learning about technical software development, although management and group activities are also covered. It is suitable for a sophomore/junior-level college course of one- or two terms, and for self-study by engineers.
Customers also bought

Book details

List price: $98.80
Copyright year: 2001
Publisher: Addison-Wesley Longman, Incorporated
Publication date: 10/24/2000
Binding: Hardcover
Pages: 494
Size: 7.00" wide x 9.25" long x 1.00" tall
Weight: 2.046
Language: English

Foreword
Preface
Engineering and Software
Concepts of Software Development
Separation of Concerns
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
Some Principles of Software Development
Intellectual Control
Complexity and Control
Language Betrays Us
Divide and Conquer
Independent Parts
7 [plus or minus] 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 So that Reuse Is Possible
Don't Reinvent the Wheel
Take Responsibility
Summary of Software Engineering Principles
How Does It Fit?
Review Questions
Further Reading
References
Is It Really Engineering?
What's Different About Software?
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
Management and Process
The Controversy over "Process"
Fred Taylor's Scientific Management
Program Development as a Formal Process
Capability Maturity Model
Process Management Isn't for Every Organization
Engineering Management
Metrics
Estimation Models
Feedback from Metrics
How Does It Fit?
Review Questions
Further Reading
References
The "Life Cycle" of Software
Alternatives to the Waterfall Model
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 Life Cycle
Debugging
Configuration Management
Managing a Development Life Cycle
Progress Reports
Dividing Effort Among the Phases
How Does It Fit?
Review Questions
Further Reading
References
The Test Plan
Functional Testing
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 Life Cycle
Adding Systematic Testing to the Plan
After Testing
How Does It Fit?
Review Questions
Further Reading
References
Requirements and Specification
Requirements
Exploring Requirements
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
Properties of Good Requirements
Understandable by End Users
Nonprescriptive
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
Specification
Customers and Their Needs
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
Formal Methods
Specification Languages
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
Design and Coding
Software Design
Purposes of Design
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
Coding
Programming Languages
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
Pseudocode
Designing with 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
Finite State Machines
Designing with FSMs
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
Abstract Data Types (ADTs)
Hiding Design Decisions
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 ADT in C
Instrumenting the ADT's Memory Allocation
Local Variables of the ADT Type
How Does It Fit?
Review Questions
Further Reading
References
Object-Oriented Design
Real Objects and Software Objects
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
Data Flow Diagrams
Elements of 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
Wrapping up Design and Coding
Additional Design Ideas
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
Testing
Software Testing
Get out the Test Plan
What Should Testing Accomplish?
The Testing Process: Unit Testing Versus System Testing
Unit Testing
Test Harness and Stubs
Subsystem Testing
System Testing
Inspection Versus Testing
Managing the Testing Phase
How Does It Fit?
Review Questions
Further Reading
References
Coverage-- "Systematic" Testing
Dividing the Input Space for Failure Search
Functional (Specification-Based, Black Box) 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
The Future of Testing
Random 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