Fundamentals of software engineering [Fifth edition.] 9789388028028, 9388028023, 9789388028035, 9388028031


2,166 238 69MB

English Pages [614] Year 2018

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Title
Fundamentals of Software Engineering, Fifth Edition
Copyright
Dedication
CONTENTS
List of Figures
Preface
Preface to the First Edition
1. Introduction
1.1 Evolution—From an Art Form to an Engineering Discipline
1.1.1 Evolution of an Art into an Engineering Discipline
1.1.2 Evolution Pattern for Engineering Disciplines
1.1.3 A Solution to the Software Crisis
1.2 Software Development Projects
1.2.1 Programs versus Products
1.2.2 Types of Software Development Projects
1.2.3 Software Projects Being Undertaken by Indian Companies
1.3 Exploratory Style of Software Development
1.3.1 Perceived Problem Complexity: An Interpretation Based on Human
Cognition Mechanism
1.3.2 Principles Deployed by Software Engineering to Overcome Human
Cognitive Limitations
1.4 Emergence of Software Engineering
1.4.1 Early Computer Programming
1.4.2 High-level Language Programming
1.4.3 Control Flow-based Design
1.4.4 Data Structure-oriented Design
1.4.5 Data Flow-oriented Design
1.4.6 Object-oriented Design
1.4.7 What Next
1.4.8 Other Developments
1.5 Notable Changes in Software Development Practices
1.6 Computer Systems Engineering
Summary
Exercises
2. Software Life Cycle Models
2.1 A Few Basic Concepts
2.2 Waterfall Model and Its Extensions
2.2.1 Classical Waterfall Model
2.2.2 Iterative Waterfall Model
2.2.3 V-Model
2.2.4 Prototyping Model
2.2.5 Incremental Development Model
2.2.6 Evolutionary Model
2.3 Rapid Application Development (RAD
2.3.1 Working of RAD
2.3.2 Applicability of RAD Model
2.3.3 Comparison of RAD with Other Models
2.4 Agile Development Models
2.4.1 Essential Idea behind Agile Models
2.4.2 Agile versus Other Models
2.4.3 Extreme Programming Model
2.4.4 Scrum
2.4.5 Lean Software Development
2.5 Spiral Model
2.5.1 Phases of the Spiral Model
2.6 A Comparison of Different Life Cycle Models
2.6.1 Selecting an Appropriate Life Cycle Model for a Project
Summary
Exercises
3. Software Project Management
3.1 Software Project Management Complexities
3.2 Responsibilities of a Software Project Manager
3.2.1 Job Responsibilities for Managing Software Projects
3.2.2 Skills Necessary for Managing Software Projects
3.3 Project Planning
3.3.1 Sliding Window Planning
3.3.2 The SPMP Document of Project Planning
3.4 Metrics for Project Size Estimation
3.4.1 Lines of Code (LOC
3.4.2 Function Point (FP) Metric
3.5 Project Estimation Techniques
3.5.1 Empirical Estimation Techniques
3.5.2 Heuristic Techniques
3.5.3 Analytical Estimation Techniques
3.6 Empirical Estimation Techniques
3.6.1 Expert Judgement
3.6.2 Delphi Cost Estimation
3.7 COCOMO—A Heuristic Estimation Technique
3.7.1 Basic COCOMO Model
3.7.2 Intermediate COCOMO
3.7.3 Complete COCOMO
3.7.4 COCOMO 2
3.8 Halstead’s Software Science—An Analytical Technique
3.8.1 Length and Vocabulary
3.8.2 Program Volume
3.8.3 Potential Minimum Volume
3.8.4 Effort and Time
3.8.5 Length Estimation
3.9 Staffing Level Estimation
3.9.1 Norden’s Work
3.9.2 Putnam’s Work
3.9.3 Jensen’s Model
3.10 Scheduling
3.10.1 Work Breakdown Structure
3.10.2 Activity Networks
3.10.3 Critical Path Method (CPM
3.10.4 PERT Charts
3.10.5 Gantt Charts
3.11 Organisation and Team Structures
3.11.1 Organisation Structure
3.11.2 Team Structure
3.12 Staffing
3.13 Risk Management
3.13.1 Risk Management Approaches
3.13.2 Risk Identification
3.13.3 Risk Assessment
3.13.4 Risk Mitigation
3.13.5 Boehm’s Top 10 Risks and Counter Measures
3.14 Software Configuration Management
3.14.1 Necessity of Software Configuration Management
3.14.2 Configuration Management Activities
Summary
Exercises
4. Requirements Analysis and Specification
4.1 Requirements Gathering and Analysis
4.1.1 Requirements Gathering
4.1.2 Requirements Analysis
4.2 Software Requirements Specification (SRS
4.2.1 Users of SRS Document
4.2.2 Why Spend Time and Resource to Develop an SRS Document
4.2.3 Characteristics of a Good SRS Document
4.2.4 Attributes of Bad SRS Documents
4.2.5 Important Categories of Customer Requirements
4.2.6 Functional Requirements
4.2.7 How to Identify the Functional Requirements
4.2.8 How to Document the Functional Requirements
4.2.9 Traceability
4.2.10 Organisation of the SRS Document
4.2.11 Techniques for Representing Complex Logic
4.3 Formal System Specification
4.3.1 What is a Formal Technique
4.3.2 Operational Semantics
4.4 Axiomatic Specification
4.5 Algebraic Specification
4.5.1 Auxiliary Functions
4.5.2 Structured Specification
4.6 Executable Specification And 4GL
Summary
Exercises
5. Software Design
5.1 Overview of the Design Process
5.1.1 Outcome of the Design Process
5.1.2 Classification of Design Activities
5.1.3 Classification of Design Methodologies
5.2 How to Characterise a Good Software Design
5.2.1 Understandability of a Design: A Major Concern
5.3 Cohesion and Coupling
5.3.1 Classification of Cohesiveness
5.3.2 Classification of Coupling
5.4 Layered Arrangement of Modules
5.5 Approaches to Software Design
5.5.1 Function-oriented Design
5.5.2 Object-oriented Design
Summary
Exercises
6. Function-Oriented Software Design
6.1 Overview of SA/SD Methodology
6.2 Structured Analysis
6.2.1 Data Flow Diagrams (DFDs
6.3 Developing the DFD Model of a System
6.3.1 Context Diagram
6.3.2 Level 1 DFD
6.3.3 Extending DFD Technique to make it Applicable to Real-time
Systems
6.4 Structured Design
6.4.1 Transformation of a DFD Model into Structure Chart
6.5 Detailed Design
6.6 Design Review
Summary
Exercises
7. Object Modelling Using UML
7.1 Basic Object-Orientation Concepts
7.1.1 Basic Concepts
7.1.2 Class Relationships
7.1.3 How to Identify Class Relationships
7.1.4 Other Key Concepts
7.1.5 Related Technical Terms
7.1.6 Advantages and Disadvantages of OOD
7.2 Unified Modelling Language (UML
7.2.1 Origin of UML
7.2.2 Evolution of UML
7.3 UML Diagrams
7.4 Use Case Model
7.4.1 Representation of Use Cases
7.4.2 Why Develop the Use Case Diagram
7.4.3 How to Identify the Use Cases of a System
7.4.4 Essential Use Case versus Real Use Case
7.4.5 Factoring of Commonality among Use Cases
7.4.6 Use Case Packaging
7.5 Class Diagrams
7.6 Interaction Diagrams
7.7 Activity Diagram
7.8 State Chart Diagram
7.9 Postscript
7.9.1 Package, Component, and Deployment Diagrams
7.9.2 UML 2.0
Summary
Exercises
8. Object-Oriented Software Development
8.1 Introduction to Patterns
8.1.1 Basic Pattern Concepts
8.1.2 Types of Patterns
8.1.3 More Pattern Concepts
8.2 Some Common Design Patterns
8.3 An Object-Oriented Analysis and Design (OOAD) Methodology
8.3.1 Unified Process
8.3.2 Overview of the OOAD Methodology
8.3.3 Use Case Model Development
8.3.4 Domain Modelling
8.3.5 Identification of Entity Objects
8.3.6 Booch’s Object Identification Method
8.3.7 Interaction Modelling
8.3.8 Class-Responsibility-Collaborator (CRC) Cards
8.4 Applications of the Analysis and Design Process
8.5 OOD Goodness Criteria
Summary
Exercises
9. User Interface Design
9.1 Characteristics of a Good User Interface
9.2 Basic Concepts
9.2.1 User Guidance and On-line Help
9.2.2 Mode-based versus Modeless Interface
9.2.3 Graphical User Interface (GUI) versus Text-based User Interface
9.3 Types of User Interfaces
9.3.1 Command Language-based Interface
9.3.2 Menu-based Interface
9.3.3 Direct Manipulation Interfaces
9.4 Fundamentals of Component-based GUI Development
9.4.1 Window System
9.4.2 Types of Widgets
9.4.3 An Overview of X-Window/MOTIF
9.4.4 X Architecture
9.4.5 Size Measurement of a Component-based GUI
9.5 A User Interface Design Methodology
9.5.1 Implications of Human Cognition Capabilities on User Interface
Design
9.5.2 A GUI Design Methodology
Summary
Exercises
10. Coding and Testing
10.1 Coding
10.1.1 Coding Standards and Guidelines
10.2 Code Review
10.2.1 Code Walkthrough
10.2.2 Code Inspection
10.2.3 Cleanroom Technique
10.3 Software Documentation
10.3.1 Internal Documentation
10.3.2 External Documentation
10.4 Testing
10.4.1 Basic Concepts and Terminologies
10.4.2 Testing Activities
10.4.3 Why Design Test Cases
10.4.4 Testing in the Large versus Testing in the Small
10.4.5 Tests as Bug Filters
10.5 Unit Testing
10.6 Black-Box Testing
10.6.1 Equivalence Class Partitioning
10.6.2 Boundary Value Analysis
10.6.3 Summary of the Black-box Test Suite Design Approach
10.7 White-Box Testing
10.7.1 Basic Concepts
10.7.2 Statement Coverage
10.7.3 Branch Coverage
10.7.4 Condition Coverage
10.7.5 Condition and Decision Coverage
10.7.6 Multiple Condition Coverage
10.7.7 Multiple Condition/Decision Coverage (MC/DC
10.7.8 Path Coverage
10.7.9 McCabe’s Cyclomatic Complexity Metric
10.7.10 Data Flow-based Testing
10.7.11 Mutation Testing
10.8 Debugging
10.8.1 Debugging Approaches
10.8.2 Debugging Guidelines
10.9 Program Analysis Tools
10.9.1 Static Analysis Tools
10.9.2 Dynamic Analysis Tools
10.10 Integration Testing
10.10.1 Phased versus Incremental Integration Testing
10.11 Testing Object-Oriented Programs
10.11.1 What is a Suitable Unit for Testing Object-oriented Programs
10.11.2 Do Various Object-orientation Features Make Testing Easy
10.11.3 Why are Traditional Techniques Considered Not Satisfactory for
Testing Object-oriented Programs
10.11.4 Grey-Box Testing of Object-oriented Programs
10.11.5 Integration Testing of Object-oriented Programs
10.12 System Testing
10.12.1 Smoke Testing
10.12.2 Performance Testing
10.12.3 Error Seeding
10.13 Some General Issues Associated with Testing
Summary
Exercises
11. Software Reliability and Quality Management
11.1 Software Reliability
11.1.1 Hardware versus Software Reliability
11.1.2 Reliability Metrics of Software Products
11.1.3 Reliability Growth Modelling
11.2 Statistical Testing
11.2.1 Steps in Statistical Testing
11.3 Software Quality
11.3.1 Software Quality Models
11.4 Software Quality Management System
11.4.1 Evolution of Quality Systems
11.4.2 Product Metrics versus Process Metrics
11.5 ISO 9000
11.5.1 What is ISO 9000 Certification
11.5.2 ISO 9000 for Software Industry
11.5.3 Why Get ISO 9000 Certification
11.5.4 How to Get ISO 9000 Certification
11.5.5 Summary of ISO 9001 Requirements
11.5.6 Salient Features of ISO 9001 Requirements
11.5.7 ISO 9000-2000
11.5.8 Shortcomings of ISO 9000 Certification
11.6 SEI Capability Maturity Model
11.6.1 Comparison between ISO 9000 Certification and SEI/CMM
11.6.2 Is SEI CMM Applicable to Small Organisations
11.6.3 Capability Maturity Model Integration (CMMI
11.7 Few Other Important Quality Standards
11.8 Six Sigma
Summary
Exercises
12. Computer Aided Software Engineering
12.1 CASE and Its Scope
12.2 CASE Environment
12.2.1 Benefits of CASE
12.3 CASE Support in Software Life Cycle
12.3.1 Prototyping Support
12.3.2 Structured Analysis and Design
12.3.3 Code Generation
12.3.4 Test Case Generator
12.4 Other Characteristics of CASE Tools
12.4.1 Hardware and Environmental Requirements
12.4.2 Documentation Support
12.4.3 Project Management
12.4.4 External Interface
12.4.5 Reverse Engineering Support
12.4.6 Data Dictionary Interface
12.4.7 Tutorial and Help
12.5 Towards Second Generation CASE Tool
12.6 Architecture of a CASE Environment
Summary
Exercises
13. Software Maintenance
13.1 Characteristics of Software Maintenance
13.1.1 Characteristics of Software Evolution
13.1.2 Special Problems Associated with Software Maintenance
13.2 Software Reverse Engineering
13.3 Software Maintenance Process Models
13.4 Estimation of Maintenance Cost
Summary
Exercises
14. Software Reuse
14.1 What can be Reused
14.2 Why Almost no Reuse So Far
14.3 Basic Issues in any Reuse Program
14.4 A Reuse Approach
14.4.1 Domain Analysis
14.4.2 Component Classification
14.4.3 Searching
14.4.4 Repository Maintenance
14.4.5 Reuse without Modifications
14.5 Reuse at Organisation Level
14.5.1 Current State of Reuse
Summary
Exercises
15. Emerging Trends
15.1 Client-Server Software
15.2 Client-Server Architectures
15.3 CORBA
15.3.1 CORBA Reference Model
15.3.2 CORBA ORB Architecture
15.3.3 CORBA Implementations
15.3.4 Software Development in CORBA
15.4 COM/DCOM
15.4.1 COM
15.4.2 DCOM
15.5 Service-Oriented Architecture (SOA
15.5.1 Service-oriented Architecture (SOA): Nitty-Gritty
15.6 Software as a Service (SaaS
Summary
Exercises
References
Index
Back cover

Fundamentals of software engineering [Fifth edition.]
 9789388028028, 9388028023, 9789388028035, 9388028031

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up