Software Engineering: The Current Practice teaches students basic software engineering skills and helps practitioners refresh their knowledge and explore recent developments in the field, including software changes and iterative processes of software development.
After a historical overview and an introduction to software technology and models, the book discusses the software change and its phases, including concept location, impact analysis, refactoring, actualization, and verification. It then covers the most common iterative processes: agile, directed, and centralized processes. The text also journeys through the software life span from the initial development of software from scratch to the final stages that lead toward software closedown.
The book gives programmers and software managers a unified view of the contemporary practice of software engineering. It shows how various developments fit together and fit into the contemporary software engineering mosaic. The knowledge gained from the book allows practitioners to evaluate and improve the software engineering processes in their projects.
Instructors have several options for using this classroom-tested material. Designed to be run in conjunction with the lectures, ideas for student projects include open source programs that use Java or C++ and range in size from 50 to 500 thousand lines of code. These projects emphasize the role of developers in a classroom-tailored version of the directed iterative process (DIP).
Students gain a real understanding of software engineering processes through the lectures and projects. They acquire hands-on experience with software of the size and quality comparable to that of industrial software. As is the case in the industry, students work in teams but have individual assignments and accountability.
Table of Contents
History of Software Engineering
Origins of Software
Birth of Software Engineering
Third Paradigm: Iterative Approach
Software Life Span Models
Variants of Staged Model
Programming Languages and Compilers
Version Control System
UML Activity Diagrams
Class Dependency Graphs and Contracts
Introduction to Software Change
Characteristics of Software Change
Phases of Software Change
Requirements and Their Elicitation
Requirements Analysis and Change Initiation
Concepts and Concept Location
Concept Location Is a Search
Extraction of Significant Concepts (ESC)
Concept Location by Grep
Concept Location by Dependency Search
Class Interaction Graphs
Process of Impact Analysis
Alternatives in Software Change
Tool Support for Impact Analysis
Changes Requiring New Classes
Extract Base Class
Extract Component Class
Prefactoring and Postfactoring
Regression and System Testing
Conclusion of Software Change
Build Process and New Baseline
Preparing for Future Changes
Introduction to Software Processes
Characteristics of Software Processes
Solo Iterative Process (SIP)
Enacting and Measuring SIP
Planning in SIP
Team Iterative Processes
Agile Iterative Process (AIP)
Directed Iterative Process (DIP)
Centralized Iterative Process (CIP)
Initial Product Backlog
Team Organizations for Initial Development
End of Software Evolution
Phaseout and Closedown
Other Computing Disciplines
Software Engineering Research
Example of Software Change
Example of SIP
A Summary, Further Reading and Topics, and References appear at the end of each chapter.
Václav Rajlich is a professor and former chair of computer science at Wayne State University. Dr. Rajlich is an editorial board member of the Journal of Software Maintenance and Evolution and the founder and permanent steering committee member of the IEEE International Conference on Program Comprehension (ICPC). His research focuses on software evolution and comprehension.
"… a great read … this [is] an entirely different approach to teaching software engineering and it could really help students (and practitioners) understand recent advances in software engineering and become better software engineers. … this book explains software engineering not from a constructionist point of view, but from a change/maintenance perspective, meaning most of the time you need to read/analyze programs rather than write them (though there is plenty of material in the book to support green field development)."
—Will Tracz, ACM SIGSOFT Software Engineering Notes, November 2013