Fundamentals of Software Engineering /
Rajib Mall
- 3rd ed.
- New Delhi : PHI Learnings , 2010.
- xxii, 441 p.
1. INTRODUCTION 1.1 The Software Engineering Discipline—^Its Evolution and Impact 1.1.1 Evolution of an Art into an Engineering Discipline 1.1.2 A Solution to the Software Crisis 1.2 Software Development Projects 1.2.1 Programs versus Products 1.2.2 Types of Soft%vare Development Projects 1.2.3 Software Projects being Undertaken by Indian Companies 1.3 What is Wrong with the 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.3.3 Why Study Software Engineering? 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 2. SOFTWARB LIFE CYCLE MODELS 2.1 Why Use a Life Cycle Model? 2.1.1 Why Dociiment a Life Cycle Model? 2.1.2 Phase Entry and Exit Criteria 2.2 Classical Waterfall Model 2.2.1 Phases of Classical Waterfall Model. 2.2.2 Shortcomings of the Classical WaterfEtll Model. 2.2.3 Is the Classical-Waterfall Model Useful at All? 2.3 Iterative Waterfall Model 2.3.1 Phase Containment of Errors .... 2.3.2 Shortcomings of the Iterative Waterfall Model.. 2.4 Prototyping Model 2.5 Evolutionary Model 2.5.1 Life Cycle Activities .... 2.6 Spiral Model 2.6.1 Bisk Handling in Spiral Model 2.6.2 Phases of the Spiral Model 2.6.3 Pros and Cons of the Spiral Model 2.6.4 Spiral Model as a Meta Model 2.7 Comparison of Different Life Cycle Models . 2.7.1 Selecting an Appropriate Life Cycle Model for a Project. 8. SOFTWARE PROJECT MANAGEMENT 3.1 Responsibilities of a Software Project Manager 3.1.1 Job Responsibilities of a Software Project Manager. 3.1.2 Skills Necessary for Software Project Management... 3.2 Project Planning 3.2.1 The SPMP Document 3.3 Metrics for Project Size Estimation 3.3.1 Lines of Code (LOC) 3.3.2 Function Point Metric 3.4 Project Estimation Techniques 3.4.1 Empirical Estimation Techniques .< 3.4.2 Heuristic Tedmiques 3.4.3 Analytical Estimation Tedmiques .... 3.5 Empiricd Estimation Techniques 3.5.1 Expert Judgement Technique 3.5.2 Delphi Cost Estimation 3.6 COCOMO—A Heuristic Estimation Technique 3.6.1 Basic COCOMO Model , 3.6.2 Intermediate COCOMO . 3.6.3 Complete COCOMO 3.6.4 COCOMO 2 ..: 3.7 Halstead's Software Science—An Analytical Technique....... 3.7.1 Length and Vocabulary 3.7.2 Program Volume 3.7.3 Potential Minimum Volume 3.7.4 Effort and Time 3.7.5 Length Estimation 3.8 Staffing Level Estimation r. 3.8.1 Norden's Work 3.8.2 Putnam's Work 3.8.3 Effect of Schedule Change on Cost 3.8.4 Jensen's Model 3.9 Scheduling 3.9.1 Work Breakdown Structure 3.9.2 Activity Networks and Critical Path Method 3.9.3 Gantt Charts 3.9.4 PERT Charts 3.9.5 Project Monitoring and Control 3.10 Organization and Team Structures 3.10.1 Organization Structure 3.10.2 Team Structure 3.11 Staffing 3.11.1 Who is a Good Software Engineer? . 3.12 Risk Management 3.12.1 Risk Identification 3.12.2 Risk Assessment 3.12.3 Risk Containment 3.13 Software Configuration Management 3.13.1 Necessity of Software Configuration Management 3.13.2 Configuration Management Activities 3.13.3 Source Code Control System (SCCS) and RCS 3.14 Miscellaneous Plans 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 Characteristics of a Good SRS Document 4!2.2 Examples of Bad SRS Documents 4.2.3 Important Categories of Customer Requirements , 4.2.4 Functional Requirements 4.2.5 How to Identify the Functional Requirements? 4.2.6 How to Document the Functional Requirements? 4.2.7 Traceability 4.2.8 Organization of the SRS Document 4.2.9 Techniques for Representing Complex Logic.., 4.3 Formal System Specification 4.3.1 What is a Formal Technique? 4.3.2 Model versus Property-Oriented Methods 4.3.3 Operational Semantics 4.3.4 Merits and Limitations of Formal Methods ... 4.4 Axiomatic Specification 4.5 Algebraic Specification 4.5.1 Properties of Algebraic Specifications . 4.5.2 Auxiliary Functions 4.5.3 Structured Specification 4.5.4 Pros and Cons of Algebraic Specifications .... 4.6 Executable Specification and 4GL SOFTWARE DESIGN 5.1 Outcome of a Design Process 5.1.1 Classification of Design Activities, 5.1.2 Classification of Design Methodologies 5.1.3 Analysis versus Design 5.2 How can We Characterize a Good Software Design? . 5.3 Cohesion and Coupling 5.3.1 Coupling 5.3.2 Cohesion 5.3.3 Functional Independence 5.3.4 Classification of Cohesiveness 5.3.5 Classification of CoupUng 5.4 Layered Arrangement of Modules 5.5 Approaches to Software Design 5.5.1 Function-Oriented Design 5.5.2 Object-Oriented Design 5.6 Object-Oriented versus Function-Oriented Design Approaches 5.6.1 Automated Fire-Alarm System—Customer Requirements 5.6.2 Function-Oriented Approach 5.6.3 Object-Oriented Approach 6. FUNCTION-ORIENTED SOFTWARE DESIGN. 6.1 Overview of SA/SD Methodology 6.2 Structured Analysis 6.3 Data Flow Diagrams (DFDs) 6.3.1 Primitive Symbols Used for Constructing DFDs 6.3.2 Some Important Concepts Associated with Constructing DFD Models 6.3.3 Developing the DFD Model of a System. 6.3.4 Shortcomings of the DFD Model 6.4 Extending DFD Technique to Make it Applicable to Real-Time Systems 6.5 Structmred Design 6.5.1 Flow Chart versus Structure Chart... 6.5.2 Transformation of a DFD Model into Structmre Uhart . 6.5.3 Transform Analysis .. 6.5.4 Transaction Analysis 6.6 Detailed Design..., 6.7 Design Review 7. OBJECT MODELLING USING UML. 7.1 Overview of Basic Object-Orientation Concepts . 7.1.1 Basic Mechanisms 7.1.2 Key Concepts 7.1.3 Related Technical Terms 7.1.4 Advantages of OOD 7.2 Unified Modelling Language (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 versus Real Use Case lA.b Factoring of Connnonality among Use Cases 7.4.6 Use Case Packaging 7.5 Class Diagrams 7.6 Interaction Diagrams . 7.7 Activity Diagrams 7.8 State Chart Diagram . 7.9 Postscript 7.9.1 Package and Deployment Diagrams . 7.9.2 UML 2.0 8. OBJECT-ORIENTED SOFTWARE DEVELOPMENT 8.1 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.2.1 Expert 8.2.2 Creator 8.2.3 Facade Pattern 8.2.4 Model View Separation Patterns 8.2.5 Observer Pattern 8.2.6 Model-View-Controller (MVC) Pattern 8.2.7 Publish-Subscribe Pattern 8.2.8 Intermediary (or Proxy) Pattern 8.3 An Object-Oriented Analysis and Design Methodology 8.3.1 The 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.4 Interaction Modelling. 8.4.1 CRC Cards.... 8.5 Applications of the Analysis and Design Process . 8.6 OOD Goodness Criteria 9. USER INTERFACE DESIGN 9.1 Characteristics of a Good User Interface.... 9.2 Basic Concepts 9.2.1 User Guidance and Online Help 9.2.2 Mode-based versus Modeless Interface 9.2.3 Graphical User Interface (GUI) vs. 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 Visual Programming 9.4.6 Size Measurement of a Component-based GUI 9.5 A User Interface Design Methodology 9.5.1 Imphcations of Human Cognition Capabilities on User Interface Design 9.5.2 A GUI Design Methodology 9.5.3 Task and Object Modelling 9.5.4 Selecting a Metaphor 9.5.5 Interaction Design and Rough Layout 9.5.6 User Interface Inspection 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 Clean Room Testing 10.3 Software Docmnentation 10.3.1 Internal Docmnentation 10.3.2 External Documentation 10.3.3 Gmming's Fog Index 10.4 Testing 10.4.1 Basic Concepts and Terminologies 10.4.2 Why Design Test Oases? 10.5 Testing in the Large versus Testing in the Small. 10.6 Unit Testing 10.6.1 Driver and Stub Modules 10.7 Black-Box Testing 10.7.1 Equivalence Class Partitioning. 10.7.2 Boimdary Value Analysis 10.7.3 Summary of the Black-Box Test Suite Design Approach 10.8 White-Box Testing 10.8.1 Basic Concepts 10.8.2 Statement Coverage 10.8.3 Branch Coverage..... 10.8.4 Condition Coverage 10.8.5 Path Coverage 10.8.6 McCabe's Cyclomatic Complexity Metric 10.8.7 Data Flow-based Testing 10.8.8 Mutation Testing 10.9 Debugging 10.9.1 Debugging Approaches.... 10.9.2 Debugging Guidelines 10.10 Program Analysis Tools 10.10.1 Static Analysis Tools 10.10.2 Dynamic Analysis Tools . 10.11 Integration Testing 10.11.1 Phased versus Incremental Integration Testing 10.12 Testing Object-Oriented Programs 10.12.1 What is a Suitable Unit for Testing Object-Oriented Programs? 10.12.2 Do Various Object-Orientation Concepts Make Testing Easy? 10.12.3 Why are Traditional Techniques Considered Unsatisfactory for Testing Object-Oriented Programs? 10.12.4 Grey-Box Testing of Object-Oriented Programs .. 10.12.5 Integration Testing of Object-Oriented Programs 10.13 System Testing 10.13.1 Performance Testing . 10.13.2 Error Seeding 10.14 Some General Issues Associated with Testing 10.14.1 Test Documentation. 10.14.2 Regression Testing ... 11. SOFTWARE RELIABILITY AND QUALITY MANAGEMENT 11.1 Software Reliability 11.1.1 Hardware versus Software Reliability 11.1.2 Reliability Metrics 11.1.3 Reliability Growth Modelling.. 11.2 Statistical Testing 11.3 Software Quality 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 Siuninary of ISO 9001 Requirements 11.5.6 Salient Features of ISO 9001 Reqmrements 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 Organizations? .. 11.6.3 CMMI 11.7 Personal Software Process (PSP) 11.8 Six Sigma 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 Docmnentation 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 13. SOFTWARE MAINTENANCE 13.1 Characteristics of Software Maintenance.. 13.1.1 Types of Software Maintenance 13.1.2 Characteristics of Software Evolution 13.1.3 Special Problems Associated with Software Maintenance 13.2 Software Reverse Engineering 13.3 Software Maintenance Process Models 13.4 Estimation of Maintenance Cost 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 Organization Level 14.5.1 Current State of Reuse 15. EMERGING TRENDS 15.1 Client-Server Software 15.1.1 Advantages of Client-Server Software .... 15.1.2 Disadvantages of Client-Server Software 15.1.3 Client-Server Architectures .. 15.1.4 COKBA 15.1.5 COM/DCOM 15.2 Service-Oriented Architecture (SOA) 15.3 Software £is a Service (SaaS)
9788120338197 (pb)
Computer Science. Software Engineering. Logics and Meanings of Programs.