Chapter 1 THE PRODUCT
1.1 The Evolving Role Of Software
1.2 Software
1.2.1 Software Characteristics
1.2.2 Software Applications
1.3 Software: A Crisis on the Horizon?
1.4 Software Myths
1.5 Summary
Chapter 2 THE PROCESS
2.1 Software Engineering: A Layered Technology
2.1.1 Process, Methods and Tools
2.1.2 A Generic View /of Software Engineering
2.2 The Software Process
2.3 Software Process Models
2.4 The Linear Sequential Model
2.5 The Prototyping Model
2.6 The RAD Model
2.7 Evolutionary Software Process Models
2.7.1 The Incremental Model
2.7.2 The Spiral Model
2.7.3 The WINWIN Spiral Model
2.7.4 The Concurrent Devlopment
2.8 Component-Based Devlopment
2.9 The Formal Methods Model
2.10 Fourth Generation Techniques
2.11 Process Technology
2.12 Product and Process
2.13 Summary
Chapter 3 PROJECT MANAGMENTS AND CONCEPTS
3.1 The Management Spectrum
3.1.1 The People
3.1.2 The Product
3.1.3 The Process
3.1.4 The Projects
3.2 People
3.2.1 The Players
3.2.2 Team Leaders
3.2.3 The Software Team
3.2.4 The Coordination and Communication Issues
3.3 The Product
3.3.1 Software Scope
3.3.2 Problem Decomposition
3.4 The Process
3.4.1 Melding the Product and the Process
3.4.2 Process Decomposition
3.5 The Project
3.6 The W5HH Principle
3.7 The Critical Practies
3.8 Summary
Chapter 4 SOFTWARE PROCESS AND PROJECT METRICS
4.1 Measures, Metrics and Indicators
4.2 Metrics in the Process and Project Domains
4.2.1 Process Metrics and Software Process Improovement
4.2.2 Project Metrics
4.3 Software Measurement
4.3.1 Size Oriented Metrics
4.3.2 Function-Oriented Metrics
4.3.3 Extended Function Point Metrics
4.4 Reconciling Different Metrics Approaches
4.5 Metrics for Software Quality
4.5.1 An Overview of Factors That Affect Quality
4.5.2 Measuring Quality
4.5.3 Defect Removal Efficiency
4.6 Integrating Metrics Within the Software Engineering Process
4.6.1 Arguments for Software Metrics
4.6.2 Establishing a Baseline
4.6.3 Metrics Collection, Computation and Evaluation
4.7 Managing Variation: Statistical Quality Control
4.8 Metrics for small Organization
4.9 Establishing a Software Metrics Program
4.10 Summary
Chapter 5 SOFTWARE PROJECT PLANNING
5.1 Observation on Estimating
5.2 Project Planning Objectives
5.3 Software Scope
5.3.1 Obtaining information Necessary for Scope
5.3.2 Feasibility
5.3.3 A Scoping Example
5.4 Resources
5.4.1 Human Resource
5.4.2 Reusable Software Resource
5.4.3 Environment Resources
5.5 Software Project Estimation
5.6 Decomposition Techniques
5.6.1 Software Sizing
5.6.2 Problem - Based Estimation
5.6.3 An Example of LOC - Based Estimation
5.6.4 An Example of FP - Based Estimation
5.6.5 Process - Based Estimation
5.6.6 An Example of Process - Based Estimation
5.7 Empirical Estimation Models
5.7.1 The Structure of Estimation Model
5.7.2 The COCOMO Model
5.7.3 The Software Equation
5.8 The Make / Buy Decision
5.8.1 Creating a Decision Tree
5.8.2 Outsourcing
5.9 Automated Estimation Tools
5.10 Summary
Chapter 6 RISK ANALYSIS AND MANAGEMENT
6.1 Reactive verses Productive Risk Stratagies
6.2 Software Risk
6.3 Risk Identification
6.3.1 Assessing Overall Project Risk
6.3.2 Risk Components and Drivers
6.4 Risk Projection
6.4.1 Developing a Risk Table
6.4.2 Assessing Risk Impact
6.4.3 Risk Assessment
6.5 Risk Refinement
6.6 Risk Mitigation, Monitoring and Management
6.7 Safely Risk and Hazards
6.8 The RMMM Plan
6.9 Summary
Chapter 7 PROJECT SCHEDULING AND TRACKING
7.1 Basic Concept
7.1.1 Comments on "Lateness"
7.1.2 Basic Principles
7.2 The Relationship Between People and Effort
7.2.1 An Example
7.2.2 An Empirical Relationship
7.2.3 Effort Distribution
7.3 Defining a Task Set for The Software Projects
7.3.1 Degree Of Rigor
7.3.2 Defining Adaptation Criteria
7.3.3 Computing a Task set Selector Value
7.3.4 Interpreting the TSS Value and Selecting the Task Set
7.4 Selecting Software Engineering Task
7.5 Refinement of Major Task
7.6 Defining a Task Network
7.7 Scheduling
7.7.1 Timeline charts
7.7.2 Tracking the Schedule
7.8 Earned Value Analysis
7.9 Error Tracking
7.10 The Project Plan
7.11 Summary
Chapter 8 SOFTWARE QUALITY ASSURANCE
8.1 Quality Concepts
8.1.1 Quality
8.1.2 Quality Control
8.1.3 Quality Assurance
8.1.4 Cost of Quality
8.2 The Quality Movement
8.3 Software Quality Assurance
8.2.1 Background Issues
8.2.2 SQA Activities
8.4 Software Reviews
8.4.1 Cost Impact Of Software Defects
8.4.2 Defect Amplification and Removal
8.5 Formal Technical Reviews
8.5.1 The Review Meeting
8.5.2 Review Reporting and Record Keeping
8.5.3 Review Guidlines
8.6 Formal Approaches to SQA
8.7 Statistical Software Quality Assurance
8.8 Software Reliability
8.8.1 Measures of Reliability and Availability
8.8.2 Software Safety
8.9 Mistake - Proofing for Software
8.10 The ISO 9000 Quality Standards
8.10.1 The ISO Approach to Quality Assurance
8.10.2 The ISO 9001 Standard
8.11 The SQA Plan
8.12 Summary
Chapter 9 SOFTWARE CONFIGURATION MANAGEMENT
9.1 Software Configuration Managment
9.1.1 Baselines
9.1.2 Software Configuration Items
9.2 The SCM Process
9.3 Identification of Objects in the Software Configuration
9.4 Version Control
9.5 Change Control
9.6 Configuration Audit
9.7 Status Reporting
9.8 SCM Standards
9.9 Summary
Chapte 10 SYSTEM ENGINEERING
10.1 Computer - Based Systems
10.2 The System Engineering Hierarchy
10.2.1 System Modeling
10.2.2 System Simulation
10.3 Business Process Engineering : An Overview
10.4 Product Engineering : An Overview
10.5 Requirement Engineering
10.5.1 Requirements Elicitation
10.5.2 Requirements Analysis and Negotiation
10.5.3 Requirements Specification
10.5.4 System Modeling
10.5.5 Requirements Validation
10.5.6 Requirements Management
10.6 System Modeling
10.7 Summary
Chapter 11 ANALYTICS CONCEPT AND PRINCIPLE
11.1 Requirement Analysis
11.2 Requirement Elicitation for Software
11.2.1 Initiating the Process
11.2.2 Facilitated Application Specification Techniques
11.2.3 Quality Function Deployment
11.2.4 Use - Cases
11.3 Analysis Principle
11.3.1 The Information Domain
11.3.2 Modeling
11.3.3 Partitioning
11.3.4 Essential and Implementation Views
11.4 Software Prototyping
11.4.1 Selecting the Prototyping Approch
11.4.2 Prototyping Methods and Tools
11.5 Specification
11.5.1 Specification Principle
11.5.2 Representation Principle
11.5.3 The Software Requirement Specification
11.6 Specification Review
11.7 Summary
Chapter 12 ANALYSIS MODELING
12.1 A Brief History
12.2 The Elements of the Analysis Model
12.3 Data Modeling
12.3.1 Data Object, Attributes and Relationship
12.3.2 Cardinality and Modality
12.3.3 Entity / Relation Diagrams
12.4 Fictional Modeling and Information Flow
12.4.1 Data Flow Diagrams
12.4.2 Extension for Real - Time Systems
12.4.3 Ward and Mellor Extensions
12.4.4 Hatley and Pirbhai Extensions
12.5 Behavioral Modeling
12.6 The Mechanics of Structured Analysis
12.6.1 Creating an Entity / Relationship Diagram
12.6.2 Creating a Data Flow Model
12.6.3 Creating a Control Flow Model
12.6.4 The Control Specification
12.6.5 The Process Specification
12.7 The Data Dictionary
12.8 Other Classical Analysis Methods
12.9 Summary
Chapter 13 DESIGN CONCEPTS AND PRINCIPLES
13.1 Software Design and Software Engineering
13.2 The Design Process
13.2.1 Design and Software Quality
13.2.2 The Evolution of Software Design
13.3 Design Principles
13.4 Design Concepts
13.4.1 Abstraction
13.4.2 Refinement
13.4.3 Modularity
13.4.4 Software Architecture
13.4.5 Control Hierarchy
13.4.6 Structural Partitioning
13.4.7 Data Structure
13.4.8 Software Procedure
13.4.9 Information Hiding
13.5 Effective Modular Design
13.5.1 Functional Independence
13.5.2 Cohesion
13.5.3 Coupling
13.6 Design Heuristics for Effective Modularity
13.7 The Design Model
13.8 Design Documentation
13.9 Summary
Chapter 14 ARCHITECTURAL DESIGN
14.1 Software Architecture
14.1.1 What Is Architecture?
14.1.2 Why Is Architecture Important?
14.2 Data Design
14.2.1 Data Modeling, Data Structures, Databases, and the Data Warehouse
14.2.2 Data Design at the Component Level
14.3 Architectural Styles
14.3.1 A Brief Taxonomy of Styles and Patterns
14.3.2 Organization and Refinement
14.4 Analyzing Alternative Architectural Designs
14.4.1 An Architecture Trade-off Analysis Method
14.4.2 Quantitative Guidance for Architectural Design
14.4.3 Architectural Complexity
14.5 Mapping Requirements into a Software Architecture
14.5.1 Transform Flow
14.5.2 Transaction Flow
14.6 Transform Mapping
14.6.1 An Example
14.6.2 Design Steps
14.7 Transaction Mapping
14.7.1 An Example
14.7.2 Design Steps
14.8 Refining the Architectural Design
14.9 Summary
Chapter 15 USER INTERFACE DESIGN
15.1 The Golden Rules
15.1.1 Place the User in Control
15.1.2 Reduce the User’s Memory Load
15.1.3 Make the Interface Consistent
15.2 User Interface Design
15.2.1 Interface Design Models
15.2.2 The User Interface Design Process
15.3 Task Analysis and Modeling
15.4 Interface Design Activities
15.4.1 Defining Interface Objects and Actions
15.4.2 Design Issues
15.5 Implementation Tools
15.6 Design Evaluation
15.7 Summary
Chapter 16 COMPONENT-LEVEL DESIGN
16.1 Structured Programming
16.1.1 Graphical Design Notation
16.1.2 Tabular Design Notation
16.1.3 Program Design Language
16.1.4 A PDL Example
16.2 Comparison of Design Notation
16.3 Summary
Chapter 17 SOFTWARE TESTING TECHNIQUES
17.1 Software Testing Fundamentals
17.1.1 Testing Objectives
17.1.2 Testing Principles
17.1.3 Testability
17.2 Test Case Design
17.3 White-Box Testing
17.4 Basis Path Testing
17.4.1 Flow Graph Notation
17.4.2 Cyclomatic Complexity
17.4.3 Deriving Test Cases
17.4.4 Graph Matrices
17.5 Control Structure Testing
17.5.1 Condition Testing
17.5.2 Data Flow Testing
17.5.3 Loop Testing
17.6 Black-Box Testing
17.6.1 Graph-Based Testing Methods
17.6.2 Equivalence Partitioning
17.6.3 Boundary Value Analysis
17.6.4 Comparison Testing
17.6.5 Orthogonal Array Testing
17.7 Testing for Specialized Environments, Architectures, and Applications
17.7.1 Testing GUIs
17.7.2 Testing of Client/Server Architectures
17.7.3 Testing Documentation and Help Facilities
17.7.4 Testing for Real-Time Systems
17.8 Summary
Chapter 18 SOFTWARE TESTING STRATEGIES
18.1 A Strategic Approach to Software Testing
18.1.1 Verification and Validation
18.1.2 Organizing for Software Testing
18.1.3 A Software Testing Strategy
18.1.4 Criteria for Completion of Testing
18.2 Strategic Issues
18.3 Unit Testing
18.3.1 Unit Test Considerations
18.3.2 Unit Test Procedures
18.4 Integration Testing
18.4.1 Top-down Integration
18.4.2 Bottom-up Integration
18.4.3 Regression Testing
18.4.4 Smoke Testing
18.4.5 Comments on Integration Testing
18.4.6 Integration Test Documentation
18.5 Validation Testing
18.5.1 Validation Test Criteria
18.5.2 Configuration Review
18.5.3 Alpha and Beta Testing
18.6 System Testing
18.6.1 Recovery Testing
18.6.2 Security Testing
18.6.3 Stress Testing
18.6.4 Performance Testing
18.7 The Art of Debugging
18.7.1 The Debugging Process
18.7.2 Psychological Considerations
18.7.3 Debugging Approaches
18.8 Summary
Chapter 19 TECHNICAL METRICS FOR SOFTWARE
19.1 Software Quality
19.1.1 McCall’s Quality Factors
19.1.2 FURPS
19.1.3 ISO 9126 Quality Factors
19.1.4 The Transition to a Quantitative View
19.2 A Framework for Technical Software Metrics
19.2.1 The Challenge of Technical Metrics
19.2.2 Measurement Principles
19.2.3 The Attributes of Effective Software Metrics
19.3 Metrics for the Analysis Model
19.3.1 Function-Based Metrics
19.3.2 The Bang Metric
19.3.3 Metrics for Specification Quality
19.4 Metrics for the Design Model
19.4.1 Architectural Design Metrics
19.4.2 Component-Level Design Metrics
19.4.3 Interface Design Metrics
19.5 Metrics for Source Code
19.6 Metrics for Testing
19.7 Metrics for Maintenance
19.8 Summary
Chapter 20 OBJECT-ORIENTED CONCEPTS AND PRINCIPLES
20.1 The Object-Oriented Paradigm
20.2 Object-Oriented Concepts
20.2.1 Classes and Objects
20.2.2 Attributes
20.2.3 Operations, Methods, and Services
20.2.4 Messages
20.2.5 Encapsulation, Inheritance, and Polymorphism
20.3 Identifying the Elements of an Object Model
20.3.1 Identifying Classes and Objects
20.3.2 Specifying Attributes
20.3.3 Defining Operations
20.3.4 Finalizing the Object Definition
20.4 Management of Object-Oriented Software Projects
20.4.1 The Common Process Framework for OO
20.4.2 OO Project Metrics and Estimation
20.4.3 An OO Estimating and Scheduling Approach
20.4.4 Tracking Progress for an OO Project
20.5 Summary
Chapter 21 OBJECT-ORIENTED ANALYSIS
21.1 Object-Oriented Analysis
21.1.1 Conventional vs. OO Approaches
21.1.2 The OOA Landscape
21.1.3 A Unified Approach to OOA
21.2 Domain Analysis
21.2.1 Reuse and Domain Analysis
21.2.2 The Domain Analysis Process
21.3 Generic Components of the OO Analysis Model
21.4 The OOA Process
21.4.1 Use-Cases
21.4.2 Class-Responsibility-Collaborator Modeling
21.4.3 Defining Structures and Hierarchies
21.4.4 Defining Subjects and Subsystems
21.5 The Object-Relationship Model
21.6 The Object-Behavior Model
21.6.1 Event Identification with Use-Cases
21.6.2 State Representations
21.7 Summary
Chapter 22 OBJECT-ORIENTED DESIGN
22.1 Design for Object-Oriented Systems
22.1.1 Conventional vs. OO Approaches
22.1.2 Design Issues
22.1.3 The OOD Landscape
22.1.4 A Unified Approach to OOD
22.2 The System Design Process
22.2.1 Partitioning the Analysis Model
22.2.2 Concurrency and Subsystem Allocation
22.2.3 The Task Management Component
22.2.4 The User Interface Component
22.2.5 The Data Management Component
22.2.6 The Resource Management Component
22.2.7 Intersubsystem Communication
22.3 The Object Design Process
22.3.1 Object Descriptions
22.3.2 Designing Algorithms and Data Structures
22.3.3 Program Components and Interfaces
22.4 Design Patterns
22.4.1 Describing a Design Pattern
22.4.2 Using Patterns in Design
22.5 Object-Oriented Programming
22.6 Summary
Chapter 23 OBJECT-ORIENTED TESTING
23.1 Broadening the View of Testing
23.2 Testing OOA and OOD Models
23.2.1 Correctness of OOA and OOD Models
23.2.2 Consistency of OOA and OOD Models
23.3 Object-Oriented Testing Strategies
23.3.1 Unit Testing in the OO Context
23.3.2 Integration Testing in the OO Context
23.3.3 Validation Testing in an OO Context
23.4 Test Case Design for OO Software
23.4.1 The Test Case Design Implications of OO Concepts
23.4.2 Applicability of Conventional Test Case Design Methods
23.4.3 Fault-Based Testing
23.4.4 The Impact of OO Programming on Testing
23.4.5 Test Cases and the Class Hierarchy
23.4.6 Scenario-Based Test Design
23.4.7 Testing Surface Structure and Deep Structure
23.5 Testing Methods Applicable at the Class Level
23.5.1 Random Testing for OO Classes
23.5.2 Partition Testing at the Class Level
23.6 Interclass Test Case Design
23.6.1 Multiple Class Testing
23.6.2 Tests Derived from Behavior Models
23.7 Summary
Chapter 24 TECHNICAL METRICS FOR OBJECT-ORIENTED SYSTEMS
24.1 The Intent of Object-Oriented Metrics
24.2 The Distinguishing Characteristics of Object-Oriented Metrics
24.2.1 Localization
24.2.2 Encapsulation
24.2.3 Information Hiding
24.2.4 Inheritance
24.2.5 Abstraction
24.3 Metrics for the OO Design Model
24.4 Class-Oriented Metrics
24.4.1 The CK Metrics Suite
24.4.2 Metrics Proposed by Lorenz and Kidd
24.4.3 The MOOD Metrics Suite
24.5 Operation-Oriented Metrics
24.6 Metrics for Object-Oriented Testing
24.7 Metrics for Object-Oriented Projects
24.8 Summary
Chapter 25 FORMAL METHODS
25.1 Basic Concepts
25.1.1 Deficiencies of Less Formal Approaches
25.1.2 Mathematics in Software Development
25.1.3 Formal Methods Concepts
25.2 Mathematical Preliminaries
25.2.1 Sets and Constructive Specification
25.2.2 Set Operators
25.2.3 Logic Operators
25.2.4 Sequences
25.3 Applying Mathematical Notation for Formal Specification
25.4 Formal Specification Languages
25.5 Using Z to Represent an Example Software Component
25.6 The Ten Commandments of Formal Methods
25.7 Formal Methods—The Road Ahead
25.8 Summary
Chapter 26 CLEANROOM SOFTWARE ENGINEERING
26.1 The Cleanroom Approach
26.1.1 The Cleanroom Strategy
26.1.2 What Makes Cleanroom Different?
26.2 Functional Specification
26.2.1 Black-Box Specification
26.2.2 State-Box Specification
26.2.3 Clear-Box Specification
26.3 Cleanroom Design
26.3.1 Design Refinement and Verification
26.3.2 Advantages of Design Verification
26.4 Cleanroom Testing
26.4.1 Statistical Use Testing
26.4.2 Certification
26.5 Summary
Chapter 27 COMPONENT-BASED SOFTWARE ENGINEERING
27.1 Engineering of Component-Based Systems
27.2 The CBSE Process
27.3 Domain Engineering
27.3.1 The Domain Analysis Process
27.3.2 Characterization Functions
27.3.3 Structural Modeling and Structure Points
27.4 Component-Based Development
27.4.1 Component Qualification, Adaptation, and Composition
27.4 2 Component Engineering
27.4.3 Analysis and Design for Reuse
27.5 Classifying and Retrieving Components
27.5.1 Describing Reusable Components
27.5.2 The Reuse Environment
27.6 Economics of CBSE
27.6.1 Impact on Quality, Productivity, and Cost
27.6.2 Cost Analysis Using Structure Points
27.6.3 Reuse Metrics
27.7 Summary
Chapter 28 CLIENT/SERVER SOFTWARE ENGINEERING
28.1 The Structure of Client/Server Systems
28.1.1 Software Components for c/s Systems
28.1.2 The Distribution of Software Components
28.1.3 Guidelines for Distributing Application Subsystems
28.1.4 Linking c/s Software Subsystems
28.1.5 Middleware and Object Request Broker Architectures
28.2 Software Engineering for c/s Systems
28.3 Analysis Modeling Issues
28.4 Design for c/s Systems
28.4.1 Architectural Design for Client/Server Systems
28.4.2 Conventional Design Approaches for Application Software
28.4.3 Database Design
28.4.4 An Overview of a Design Approach
28.4.5 Process Design Iteration
28.5 Testing Issues
28.5.1 Overall c/s Testing Strategy
28.5.2 c/s Testing Tactics
28.6 Summary
Chapter 29 WEB ENGINEERING
29.1 The Attributes of Web-Based Applications
29.1.1 Quality Attributes
29.1.2 The Technologies
29.2 The WebE Process
29.3 A Framework for WebE
29.4 Formulating/Analyzing Web-Based Systems
29.4.1 Formulation
29.4.2 Analysis
29.5 Design for Web-Based Applications
29.5.1 Architectural Design
29.5.2 Navigation Design
29.5.3 Interface Design
29.6 Testing Web-Based Applications
29.7 Management Issues
29.7.1 The WebE Team
29.7.2 Project Management
29.7.3 SCM Issues for WebE
29.8 Summary
Chapter 30 REENGINEERING
30.1 Business Process Re-engineering
30.1.1 Business Processes
30.1.2 Principles of Business Process Re-engineering
30.1.3 A BPR Model
30.1.4 Words of Warning
30.2 Software Re-engineering
30.2.1 Software Maintenance
30.2.2 A Software Reengineering Process Model
30.3 Reverse Engineering
30.3.1 Reverse Engineering to Understand Processing
30.3.2 Reverse Engineering to Understand Data
30.3.3 Reverse Engineering User Interfaces
30.4 Restructuring
30.4.1 Code Restructuring
30.4.2 Data Restructuring
30.5 Forward Engineering
30.5.1 Forward Engineering for Client/Server Architectures
30.5.2 Forward Engineering for Object-Oriented Architectures
30.5.3 Forward Engineering User Interfaces
30.6 The Economics of Reengineering
30.7 Summary
Chapter 31 COMPUTER-AIDED SOFTWARE ENGINEERING
31.1 What is CASE?
31.2 Building Blocks for CASE
31.3 A Taxonomy of CASE Tools
31.4 Integrated CASE Environments
31.5 The Integration Architecture
31.6 The CASE Repository
31.6.1 The Role of the Repository in I-CASE
31.6.2 Features and Content
31.7 Summary
Chapter 32 THE ROAD AHEAD
32.1 The Importance of Software—Revisited
32.2 The Scope of Change
32.3 People and the Way They Build Systems
32.4 The "New" Software Engineering Process
32.5 New Modes for Representing Information
32.6 Technology as a Driver
32.7 A Concluding Comment