Software engineering from a project point of view embarks on software products that are both feasible technically and financially. Moreover, software projects must be completed on time and within budgets and are important challenges to software engineers. Research has shown that one-third of software projects are never completed, another third do not fulfill their promises.
Software Engineering provides the software engineering fundamentals, principles and skills needed to develop and maintain high quality software products. The software engineering processes and techniques covered include requirements specification, design, implementation, testing and management of software projects. This up-to-date book is modeled on the recommendations and guidelines prescribed in the Guide to the Software Engineering Body of Knowledge (SWEBOK) published by the IEEE Computer Society, and the Software Engineering Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering published by the IEEE Computer Society and the Association for Computing Machinery Joint Task Force on Computing Curricula.
At the end of each chapter, the reader will be able to perform tangible software engineering tasks by applying the learned techniques and methods, will be familiar with the terminology, the principles by mastering the subjects, and will be able to analyze existing task deliverables, compare and critique the different techniques. The book is designed as a text for an undergraduate first course in software engineering and graduate bridging courses in information technology. In addition, Software Engineering can be used by practitioners who need to refresh their knowledge with the latest in software engineering techniques and processes. The prerequisite to use this text is to have a background in an object-oriented programming language.
Key Features
Covers the critical and significant topic of software maintenance
Follows the recommendations and guidelines prescribed in the Guide to SWEBOK
Clarifies the material in a concrete way by solving carefully selected examples
Offers practical coverage of the Unified Modeling Language (UML 2)
Provides suggested readings to supplement the text
Includes end-of-chapter problems and solutions to selected problems
Features instructor’s material available via the WAV section of the publisher’s website at www.jrosspub.com/wav
About the Author(s)
Kassem A. Saleh, Ph.D. is currently Professor of Information Sciences at Kuwait University. He received his B.Sc., M.Sc. and PhD in Computer Science from the University of Ottawa in Canada. Professor Saleh worked as a computer systems specialist at Mediatel, Bell Canada, from 1985 to 1991, and was on the faculty of Concordia University in 1991-1992, Kuwait University from 1992 to 2000, and American University of Sharjah from 2000 to 2007. He is also a Certified Information Systems Security Professional (CISSP) and is currently the Editor-in-Chief of the Journal of Software.
The Journal of Systems and Software has ranked Professor Saleh among the top scholars in the field of systems and software engineering in seven of its annual assessments published from 1996 to 2003. Professor Saleh has published more than 120 journal and conference papers and has presented numerous tutorials and invited talks at international conferences and universities worldwide.
Table of Contents
1 Software and Software Engineering
1.1 Software, Software Engineering and the Software Crisis
1.2 Types of Software
1.3 Generic Stages in Software Development
1.4 Software Errors
1.5 Software Behavior, Structure and Architecture
1.6 Stakeholders of Software
1.7 Related Disciplines
1.8 Software Engineering Education, Training and Certification
1.9 Code of Ethics and Professional Practice
1.10 Project, Process and People
1.11 Desirable Software Capabilities
1.12 Pioneers in Software and Software Engineering
1.13 Analogy to Other Engineering Disciplines
1.14 The Rest of the Book
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards
2 Software Development Life Cycle Models
2.1 Life Cycle Models
2.2 Pre-Development Activities and Deliverables
2.3 Waterfall Model Development Phases, Activities and Deliverables
2.4 Software Maintenance Activities
2.5 Continuous Life Cycle Activities and Deliverables
2.6 Prototyped Waterfall Model
2.7 The Object-Oriented Model
2.8 Incremental and Iterative Model
2.9 The Spiral Model
2.10 The Rational Unified Process (RUP)
2.11 Software Development and Maintenance Teams
2.12 Software Engineering Standards and Tools
2.13 Software Processes Capability Maturity Model (CMM)
2.14 The Unified Modeling Language
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards
3 Software Requirements
3.1 Software Analysis
3.2 Product Vision and Project Scope
3.3 Requirements Engineering
3.4 Elicitation of Functional Requirements
3.4.1 Elicitation Techniques
3.4.2 Use Case Modeling
3.4.3 Use Case Development
3.5 Elicitation of Non-Functional Requirements
3.5.1 Technical Non-Functional Requirements
3.5.2 Non-Technical Non-Functional Requirements
3.6 Requirements Validation
3.7 Requirements Maintenance
3.8 The Software Requirements Specification Document
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards
4 Software Specification
4.1 Software Modeling
4.2 Behavior Modeling
4.2.1 The Finite State Machine Model
4.2.1.1 Graphical, Algebraic and Tabular Representations
4.2.1.2 Properties of FSM-Based Models
4.2.1.3 Limitations of the Basic FSM Model
4.2.1.4 The Extended Finite State Machine Model (EFSM)
4.2.1.5 Applications of the EFSM Model
4.2.1.6 Additional Properties of EFSM-Based Models
4.2.2 The Petri Net Model
4.2.2.1 Mathematical and Graphical Representations
4.2.2.2 Properties of the Petri Net Model
4.2.2.3 Extensions to the Basic Petri Net Model
4.2.2.4 Modeling Requirements
4.2.3 Statechart Diagram
4.2.4 Activity Diagram
4.3 Process Modeling
4.3.1 Data Flow Diagrams
4.3.2 Decision Table
4.3.3 Decision Tree
4.4 Data Modeling
4.4.1 Entity Relationship Model
4.4.2 Data Dictionary
4.5 Formal Specification Techniques
4.6 Object-Oriented Analysis
4.6.1 Identifying Objects
4.6.1.1 Entity Objects
4.6.1.2 Interface Objects
4.6.1.3 Control Objects
4.6.2 Objects Relationships
4.6.3 Dynamic Object Behavior
4.6.4 Objects Interactions
4.6.4.1 Sequence Diagram
4.6.4.2 Communication Diagram
4.7 Validating Specifications and Traceability
4.8 Completing the Software Requirement Specification Document
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards
8 Software Testing and Quality Assurance
8.1 Testing and Test Coverage
8.2 Dynamic and Static Testing
8.3 Anatomy of a Test Case
8.4 Black-Box, White-Box and Grey-Box Testing
8.5 Black Box-Based Unit Testing Techniques
8.5.1 Boundary Value Analysis
8.5.2 Equivalence Class Testing
8.5.3 Decision Table and Decision Tree Based Testing
8.5.4 State-Based Testing
8.5.5 Black Box-Based Robustness Testing
8.6 White Box-Based Unit Testing Techniques
8.6.1 Control Flow Graph
8.6.2 Control Flow-Based Techniques
8.6.3 Data Flow-Based Testing
8.6.4 Path Expression
8.7 Integration Testing
8.7.1 Top-Down Integration
8.7.2 Bottom-Up Integration
8.7.3 Hybrid Integration
8.8 System-Level Testing
8.8.1 Acceptance Testing
8.8.2 Testing Conformance to Non-Functional Requirements
8.9 Other Test Selection Strategies
8.9.1 Random Testing
8.9.2 Probabilistic Testing
8.9.3 Mutation Testing
8.10 Potpourri of Testing Issues
8.10.1 Test Architectures
8.10.2 Test Correctness
8.10.3 Test Description Language
8.10.4 Software Testability
8.10.5 Regression Testing
8.11 Object-Oriented Testing
8.11.1 Testing Classes
8.11.2 Integrating Classes
8.11.3 System-Level Use Case Testing
8.12 Software Quality Assurance
8.12.1 Plan and Activities
8.12.2 Audit and Review
8.12.3 Inspection Checklist and Walkthrough
8.12.4 Metrics
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards
9 Software Maintenance
9.1 The Importance of Software Maintenance
9.2 Taxonomy of Software Maintenance Activities
9.3 Software Maintenance Process
9.4 Software Maintenance Management
9.5 Software Configuration Management
9.6 Configuration Management Activities
9.6.1 Configuration Item Identification
9.6.2 Configuration Control and Change Management
9.6.3 Configuration Status Accounting
9.6.4 Configuration Audits and Reviews
9.6.5 Configuration Interface Control
9.6.6 Subcontractor and Vendor Control
9.7 Software Maintenance Techniques
9.7.1 Reverse Engineering and Design Recovery
9.7.2 Restructuring and Reengineering
9.7.3 Regression Testing
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards
10 Software Project Management
10.1 Project, People, Processes and Products
10.2 Project Management Activities
10.3 Estimation Techniques and Software Metrics
10.3.1 Function Points
10.3.2 Use Case Points
10.3.3 COCOMO
10.4 Risk Management
10.4.1 Risk Management Planning
10.4.2 Risk Identification
10.4.3 Risk Analysis
10.4.4 Risk Planning
10.4.5 Risk Tracking
10.4.6 Risk Control
10.4.7 Risk Communication
10.5 Scheduling and Tracking Projects
10.6 The Software Project Management Plan Document
Chapter Summary
Key Terms
Review Questions
Exercises
Bibliography
Standards