1st Edition

Foundations of Software Engineering

By Ashfaque Ahmed, Bhanu Prasad Copyright 2016
    476 Pages 189 B/W Illustrations
    by Auerbach Publications

    475 Pages 189 B/W Illustrations
    by Auerbach Publications

    The best way to learn software engineering is by understanding its core and peripheral areas. Foundations of Software Engineering provides in-depth coverage of the areas of software engineering that are essential for becoming proficient in the field. The book devotes a complete chapter to each of the core areas. Several peripheral areas are also explained by assigning a separate chapter to each of them.

    Rather than using UML or other formal notations, the content in this book is explained in easy-to-understand language. Basic programming knowledge using an object-oriented language is helpful to understand the material in this book. The knowledge gained from this book can be readily used in other relevant courses or in real-world software development environments.

    This textbook educates students in software engineering principles. It covers almost all facets of software engineering, including requirement engineering, system specifications, system modeling, system architecture, system implementation, and system testing. Emphasizing practical issues, such as feasibility studies, this book explains how to add and develop software requirements to evolve software systems.

    This book was written after receiving feedback from several professors and software engineers. What resulted is a textbook on software engineering that not only covers the theory of software engineering but also presents real-world insights to aid students in proper implementation.

    Students learn key concepts through carefully explained and illustrated theories, as well as concrete examples and a complete case study using Java. Source code is also available on the book’s website. The examples and case studies increase in complexity as the book progresses to help students build a practical understanding of the required theories and applications.

    Introduction to Software Engineering
    Introduction
    Components of a Computer
    Building the Software Products
    What Is Software Engineering?
    Why Software Engineering?
    Challenges in Software Engineering
    Project Management and Software Engineering
    Costs Involved in Software Development
    Methodologies Used for Software Development
    Some Careers in Software Engineering
    Software Industry Size
    Code of Ethics
    Book Organization
    Chapter Summary
    Recommended Reading

    Software Engineering Methodologies
    Introduction
    Why a Methodology?
    Agile Methodologies
    Waterfall Model
    Rational Unified Process
    Spiral Model
    Incremental Iteration Model
    eXtreme Programming
    Scrum
    Methodology for Implementing SaaS Products
    Methodology for Implementing COTS Products
    A Discussion on the Usage of Software Development Models
    Popular Process Standards
    Process Standards and Software Engineering Methodologies
    Software Process Activities
    Chapter Summary
    Recommended Reading

    Feasibility Study
    Introduction
    Feasibility Study for Software Projects
    Finding the Economic Feasibility of Requirements
    Finding the Technical Feasibility of Requirements
    Prototyping
    Pilot Projects
    Chapter Summary
    Recommended Reading

    Software Requirement Specifications

    Introduction
    Software Engineering Methodologies and Requirement Management
    Implementation of the Requirements 6
    Requirement Types
    Sources of Requirements
    Categories of Users
    Software Requirement Life Cycle
    Requirement Gathering (Elicitation)
    Requirement Analysis
    Requirement Specification
    Requirement Management
    Case Study
    Chapter Summary
    Recommended Reading

    Software High-Level Design and Modeling

    Introduction
    Methodology Used
    How to Reduce Complexity in Software Design
    Logical Design for Software Architecture
    Architecture Design Patterns
    Client–Server Architecture
    Web-Based Architecture
    Service-Oriented Architecture
    Software Component Design Fundamentals
    Component Diagrams
    Data Flow Diagram
    Software Design Patterns
    Programming Language Considerations
    Types of Programming Languages: A Brief Review
    Security
    Performance
    Case Study
    Chapter Summary
    Recommended Reading

    Software User Interface Design and Construction

    Introduction
    Graphical User Interface
    Graphic Control Elements
    Hyper Text Markup Language
    Cascading Style Sheets
    Client-Side Scripting
    Asynchronous JavaScript and XML
    Simple (Model–View) User Interface
    Model–View–Controller
    Case Study
    Chapter Summary
    Recommended Reading

    Software Middle Layer Design and Construction

    Introduction
    Software Design and Implementation and Software Engineering Methodology
    Procedural Programming: A Brief Introduction
    Object-Oriented Programming
    Basics of Programming Languages
    Variables and Variable Types
    Operators
    Decision Trees and Loops
    Methods
    Classes
    Objects and Object-Oriented Programming Packages
    Database Programming
    Model–View–Controller Revisited
    Refactoring
    Client-Side and Server-Side Scripts
    Debugging
    Case Study
    Chapter Summary
    Recommended Reading

    Database Design and Construction

    Introduction
    Databases and Software Engineering Methodologies
    Database Types
    Database Languages
    Database Entities
    Database Design
    Database Management Systems
    Object Relational Databases
    Case Study
    Chapter Summary
    Recommended Reading

    Software Testing (Verification and Validation)

    Introduction
    Software Testing and Software Engineering Methodologies
    Introduction to Different Types of Software Testing
    Introduction to Verification and Validation
    Introduction to Levels of Software Testing (Validation)
    Verification
    Unit Testing
    Integration Testing
    System Testing
    User Acceptance Testing
    Other Important Tests
    Test Case Design
    Test Preparation
    Test Life Cycle
    Case Study
    Chapter Summary
    Recommended Reading

    Software Release

    Introduction
    Software Release and Software Engineering Methodology
    Integration
    Documentation
    Release Cycles
    User Training
    Deployment
    Software Migration Strategies
    Software Product Release Checklist
    Chapter Summary
    Recommended Reading

    Software Maintenance
    Introduction
    Software Maintenance and Software Engineering Methodology
    Production Environment Maintenance
    Production Environment Monitoring
    Maintenance Process
    Types of Software Maintenance
    Software Maintenance Strategies
    Reverse Engineering
    Chapter Summary
    Recommended Reading

    Configuration and Version Management
    Introduction
    Configuration Management and Version Control Concepts
    CVS Systems
    Chapter Summary
    Recommended Reading

    Software Project Management

    Introduction
    Project Management and Software Engineering Methodologies
    Project Planning
    Project Monitoring and Controlling
    Project Team Management
    Project Customer Management
    Supplier Management
    Chapter Summary
    Recommended Reading

    Appendix: Answers to Questions

    Index

    Biography

    Ashfaque Ahmed has more than 25 years of working experience. During his career, he has worked on multimillion dollar projects that built cutting edge technological software. His roles on these projects include project manager, test manager, business analyst, and software engineer. He has worked throughout the world in such countries as India, Canada, USA, UAE, Libya, and Nigeria for companies that include the Steel Authority of India Limited, SAP, and One Network.Dr. Bhanu Prasad is an associate professor in the Department of Computer and Information Sciences at Florida A&M University, Tallahassee, FL, USA. Previously, he was an assistant professor in the School of Computer and Information Sciences at Georgia Southwestern State University, Americus GA, USA. He has taught software engineering courses at both the graduate and undergraduate level. Before entering academia, he worked at software companies that include Infosys Technologies, Future Software, and Hyperion Solutions Corporation. Dr. Prasad holds a Master of Technology degree from Andhra University and a Ph.D. degree in Computer Science from the Indian Institute of Technology, Madras.