Handbook of software engineering
This handbook provides a unique and in-depth survey of the current state-of-the-art in software engineering, covering its major topics, the conceptual genealogy of each subfield, and discussing future research directions. Subjects include foundational areas of software engineering (e.g. software pro...
Saved in:
Main Authors | , , |
---|---|
Format | eBook Book |
Language | English |
Published |
Cham
Springer
2019
Springer International Publishing AG Springer International Publishing |
Edition | 1 |
Subjects | |
Online Access | Get full text |
Cover
Loading…
Table of Contents:
- Intro -- Preface -- Acknowledgment -- Contents -- Editors and Contributors -- About the Editors -- Contributors -- Process and Workflow -- 1 Background, Goals, and Motivation -- 1.1 Goals and Benefits of Process -- 1.1.1 Communication -- 1.1.2 Coordination -- 1.1.3 Training -- 1.1.4 Understanding -- 1.1.5 Improvement -- 1.1.6 Guidance and Control -- 2 History and Seminal Work -- 3 Some Definitions, Unifying Assumptions, and Characterizations -- 3.1 Processes and Workflows -- 3.2 Process Performances -- 3.3 Process Specifications -- 3.4 Activities -- 3.5 Process Artifacts -- 3.6 Process Agents -- 4 Conceptual Framework -- 4.1 Process Specification Approaches -- 4.1.1 Process Specification Evaluation Criteria -- 4.1.2 Example Process Specification Approaches -- 4.2 Process Acquisition -- 4.3 Process Analysis Facilities and Results -- 4.3.1 Dynamic Analysis of Process Specifications -- 4.3.2 Static Analysis of Process Specifications -- 4.4 Process Evolution -- 5 Specific Processes, Frameworks, and Architectures -- 5.1 The Rational Unified Process -- 5.2 The Spiral Model/Incremental Commitment Model -- 5.3 Agile Methods -- 5.4 Extreme Programming -- 5.5 Scrum Development -- 5.6 Adaptive Case Management -- 5.7 Summary and Analysis -- 5.7.1 Communication -- 5.7.2 Coordination -- 5.7.3 Training -- 5.7.4 Understanding -- 5.7.5 Improvement -- 5.7.6 Guidance and Control -- 6 Future Directions -- 6.1 Current Unmet Challenges -- 6.1.1 Specification Language Issues -- 6.2 Learning and Improvement Through Analysis -- 6.2.1 Learning from Big Data -- 6.2.2 Learning from Analysis -- 6.3 Progress Toward Standardized (Yet Flexible) Processes -- 6.4 Human/Computer Collaboration and Human Guidance Direction -- 6.5 Application to New Domains -- 6.6 Merging Process and Workflow Communities and Technologies -- 7 Conclusions -- References -- Requirements Engineering
- 4 Software Product Lines (SPL): An Effective Reuse Approach
- 5 An Organized Tour of Seminal Papers: Change Validation -- 5.1 Change Impact Analysis -- 5.2 Debugging Changes -- 5.3 Refactoring Validation -- 6 Future Directions and Open Problems -- 6.1 Change Comprehension -- 6.2 Change Suggestion -- 6.3 Change Validation -- Appendix -- Key References -- References -- Empirical Software Engineering -- 1 Introduction -- 2 Concepts and Principles -- 2.1 Justification -- 2.2 General Concepts -- 2.3 Empirical Research Methods -- 2.4 Empirical Research Methods: Supporting Concepts -- 2.5 Empirical Research Techniques -- 3 Genealogy and Seminal Papers -- 3.1 Landmark Articles -- 3.1.1 Timeline -- 3.1.2 Methods -- 3.2 Landmark Books -- 3.3 Landmark Venues -- 3.4 Other Landmarks -- 4 Challenges -- 4.1 Size of the Studies -- 4.2 Recruiting Students -- 4.3 Recruiting Professional Developers -- 4.4 Theories in ESE -- 4.5 Publication of Negative Results -- 4.5.1 Antinomy Between Doing Research and Empirical Studies -- 4.5.2 Seemingly Uselessness of Empirical Studies -- 4.5.3 What Is and What Should Be -- 4.6 Data Sharing -- 4.7 Comparisons of Software Artefacts -- 5 Future Directions -- 5.1 Idioms for Empirical Studies -- Pattern Name ``Tool Comparison'' -- 5.2 Patterns for Empirical Studies -- Pattern Name ``Prima Facie Evidence'' -- Pattern Name ``Idea Inspired by Experience'' -- 5.3 Styles of Empirical Studies -- Pattern Name ``Mixed-Method Style'' -- 6 Conclusion -- References -- Software Reuse and Product Line Engineering -- 1 Introduction -- 2 Concepts and Principles -- 2.1 Software Reuse Benefits -- 2.2 The Obstacles -- 2.3 The Basic Features -- 3 Organized Tour: Genealogy and Seminal Papers -- 3.1 The Roots -- 3.2 Libraries and Repository Systems -- 3.3 Generative Reuse -- 3.4 Metrics and Economic Models -- 3.5 Reuse Models -- 3.6 Software Reuse Methods and Processes -- 3.7 Software Reuse: The Past Future
- 3.3.1 Designing Architectures -- 3.3.2 Maintaining Conceptual Integrity -- 3.3.3 Cost-Benefit Analysis -- 4 Future Directions -- 4.1 Modeling -- 4.2 Knowledge Capture -- 4.3 Evolution -- 4.4 Ecosystems -- 5 Conclusions -- References -- Software Testing -- 1 Introduction -- 2 Concepts and Principles -- 3 Organized Tour: Genealogy and Seminal Works -- 3.1 Analyzing Tests -- 3.1.1 Structural Testing -- 3.1.2 Logical Coverage Criteria -- 3.1.3 Dataflow Testing -- 3.1.4 Mutation Testing -- 3.1.5 Coverage Criteria for Concurrent Programs -- 3.1.6 Coverage Criteria for Graphical User Interfaces -- 3.2 Generating Tests -- 3.2.1 Random Testing -- 3.3 Fuzz Testing -- 3.3.1 Black Box Techniques -- 3.3.2 White Box Techniques -- 3.3.3 Concurrency Testing Techniques -- 3.4 Executing Tests -- 3.4.1 Automated Test Execution -- 3.4.2 Test Suite Minimization -- 3.4.3 Regression Test Selection -- 3.4.4 Test Case Prioritization -- 3.4.5 Testing Embedded Software -- 3.5 Current Trends in Testing Research -- 3.5.1 Model-Based Testing -- 3.5.2 Automated Test Generation -- 3.5.3 Test Analysis -- 3.6 Current Trends in Software Testing Practice -- 3.6.1 Developers Are Testers -- 3.6.2 Test Automation -- 3.6.3 Trending Application Domains -- 4 Future Challenges -- 4.1 Test Analysis -- 4.2 Automated Testing -- 4.3 Test Oracles -- 4.4 Flaky Tests -- 4.5 Legacy Tests -- 4.6 Nonfunctional Testing -- 4.7 Testing Domain-Specific Software -- 4.8 The Academia-Industry Gap -- 5 Conclusions -- References -- Formal Methods -- 1 Introduction -- 2 Historical Perspective -- 3 Grand Tour of Formal Methods -- 3.1 Modeling: Concepts and Principles -- 3.2 Formal Specification -- 3.2.1 Linear Temporal Logic -- 3.2.2 Using Finite Automata on Infinite Words as a Specification Formalism -- 3.2.3 Branching Modeling and Specification -- 3.2.4 Process Algebra -- 3.3 Model Checking
- 3.3.1 Symbolic Model Checking -- 3.3.2 Partial Order Reduction -- 3.3.3 Abstraction -- 3.3.4 Bounded Model Checking -- 3.4 Formal Verification -- 3.5 Runtime Verification -- 4 Future Challenges -- References -- Software Evolution -- 1 Introduction -- 2 Concepts and Principles -- 2.1 Corrective Change -- 2.2 Adaptive Change -- 2.3 Perfective Change -- 2.4 Preventive Change -- 3 An Organized Tour of Seminal Papers: Applying Changes -- 3.1 Corrective Change -- 3.1.1 Empirical Studies of Bug Fixes -- 3.1.2 Rule-Based Bug Detection and Fixing Approaches -- 3.1.3 Automated Repair -- 3.2 Adaptive Change -- 3.2.1 Cross-System Porting -- 3.2.2 Cross-Language Migration -- 3.2.3 Library Upgrade and API Evolution -- 3.3 Perfective Change -- 3.3.1 Techniques for Locating Crosscutting Concerns -- 3.3.2 Language Support for Crosscutting Concerns -- 3.4 Preventive Change -- 3.4.1 Definition of Refactoring Operations -- 3.4.2 Empirical Studies of Refactoring -- 3.4.3 Automated Refactoring -- 3.4.4 Real-World Refactoring Practices -- 3.4.5 Quantitative Assessment of Refactoring Impact -- 3.4.6 Code Smells Detection -- 3.5 Automatic Change Application -- 3.5.1 Source Transformation and Languages and Tools -- 3.5.2 Programming by Demonstration -- 4 An Organized Tour of Seminal Papers: Inspecting Changes -- 4.1 Software Inspection and Modern Code Review Practices -- 4.1.1 Commercial Code Review Tools -- 4.1.2 Change Decomposition -- 4.1.3 Refactoring Aware Code Review -- 4.1.4 Change Conflicts, Interference, and Relevance -- 4.1.5 Detecting and Preventing Inconsistent Changes to Clones -- 4.2 Program Differencing -- 4.2.1 String and Lexical Matching -- 4.2.2 Syntax Tree Matching -- 4.2.3 Control Flow Graph Matching -- 4.2.4 Program Dependence Graph Matching -- 4.2.5 Related Topics: Model Differencing and Clone Detection -- 4.3 Recording Changes: Edit Capture and Replay
- 1 Introduction -- 2 Concepts and Principles -- 2.1 Fundamentals: The World and the Machine -- 2.2 Qualities -- 2.3 Processes -- 3 Organised Tour: Genealogy and Seminal Works -- 3.1 Elicitation -- 3.1.1 Data Gathering -- 3.1.2 Collaborative -- 3.1.3 Cognitive -- 3.1.4 Contextual -- 3.1.5 Creativity -- 3.1.6 Choosing and Combining Elicitation Techniques -- 3.2 Modelling and Analysis -- 3.2.1 Natural Language -- 3.2.2 Structural Modelling -- 3.2.3 Behavioural Modelling -- 3.2.4 Goal Modelling -- 3.2.5 Choosing and Combining Modelling Techniques -- 3.3 Assurance -- 3.3.1 Validation -- 3.3.2 Verification -- 3.4 Management and Evolution -- 3.4.1 Negotiation and Prioritisation -- 3.4.2 Agile Methods -- 3.4.3 Reuse -- 3.4.4 Adaptation -- 3.4.5 Traceability -- 3.5 RE for Cross-Cutting Properties -- 4 Future Challenges -- 4.1 Sustainability and Global Societal Challenges -- 4.2 Artificial Intelligence -- 4.3 Exemplars and Artefacts -- 5 Conclusion -- References -- Software Architecture and Design -- 1 Introduction -- 2 An Organized Tour: Genealogy and Seminal Papers -- 2.1 Domain-Independent Design -- 2.1.1 Early Design Approaches and Module Interconnection Languages -- 2.1.2 Initial Articulations of "Software Architecture" -- 2.1.3 Styles and Patterns -- 2.1.4 Architecture Description Languages (ADLs) -- 2.1.5 Analysis: Early Value from Representations -- 2.1.6 Connectors: The Distinctive Characteristic of Software Architecture Descriptions -- 2.1.7 Adaptation -- 2.2 Domain-Informed Design -- 2.2.1 Focus on a Single Domain -- 2.2.2 Design by Simulation: Object Oriented Design -- 2.2.3 Domain-Specific Software Engineering and Product Families -- 2.2.4 Ecosystems -- 3 Concepts and Principles: Summarizing the Key Points -- 3.1 Software Architecture: A Mature Definition -- 3.1.1 Illustrations -- 3.2 Key Definitions -- 3.3 Key Principles and Practices