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. For Professionals 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. For Instructors 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). For Students 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
INTRODUCTION History of Software Engineering Software PropertiesOrigins of SoftwareBirth of Software EngineeringThird Paradigm: Iterative Approach Software Life Span Models Staged ModelVariants of Staged Model Software Technologies Programming Languages and CompilersObject-Oriented TechnologyVersion Control System Software Models Class DiagramsUML Activity DiagramsClass Dependency Graphs and Contracts SOFTWARE CHANGE Introduction to Software Change Characteristics of Software ChangePhases of Software ChangeRequirements and Their ElicitationRequirements Analysis and Change Initiation Concepts and Concept Location ConceptsConcept Location Is a SearchExtraction of Significant Concepts (ESC)Concept Location by GrepConcept Location by Dependency Search Impact Analysis Impact SetClass Interaction GraphsProcess of Impact AnalysisPropagating ClassesAlternatives in Software ChangeTool Support for Impact Analysis Actualization Small ChangesChanges Requiring New ClassesChange Propagation Refactoring Extract FunctionExtract Base ClassExtract Component ClassPrefactoring and Postfactoring Verification Testing StrategiesUnit TestingFunctional TestingStructural TestingRegression and System TestingCode Inspection Conclusion of Software Change Build Process and New BaselinePreparing for Future ChangesNew Release SOFTWARE PROCESSESIntroduction to Software Processes Characteristics of Software ProcessesSolo Iterative Process (SIP)Enacting and Measuring SIPPlanning in SIP Team Iterative Processes Agile Iterative Process (AIP)Directed Iterative Process (DIP)Centralized Iterative Process (CIP) Initial Development Software PlanInitial Product BacklogDesignImplementationTeam Organizations for Initial Development Final Stages End of Software EvolutionServicingPhaseout and ClosedownReengineering CONCLUSIONRelated Topics Other Computing DisciplinesProfessional EthicsSoftware ManagementSoftware ErgonomicsSoftware Engineering Research Example of Software Change Concept LocationImpact AnalysisActualizationTesting Example of SIP Initial DevelopmentIteration 1Iteration 2 Index A Summary, Further Reading and Topics, and References appear at the end of each chapter.
\"ÃÂ¿ 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