TOPICS

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