E-Book, Englisch, 533 Seiten
Cha / Taylor / Kang Handbook of Software Engineering
1. Auflage 2019
ISBN: 978-3-030-00262-6
Verlag: Springer International Publishing
Format: PDF
Kopierschutz: 1 - PDF Watermark
E-Book, Englisch, 533 Seiten
ISBN: 978-3-030-00262-6
Verlag: Springer International Publishing
Format: PDF
Kopierschutz: 1 - PDF Watermark
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 processes, requirements engineering, software architecture, software testing, formal methods, software maintenance) as well as emerging areas (e.g., self-adaptive systems, software engineering in the cloud, coordination technology). Each chapter includes an introduction to central concepts and principles, a guided tour of seminal papers and key contributions, and promising future research directions. The authors of the individual chapters are all acknowledged experts in their field and include many who have pioneered the techniques and technologies discussed.
Readers will find an authoritative and concise review of each subject, and will also learn how software engineering technologies have evolved and are likely to develop in the years to come. This book will be especially useful for researchers who are new to software engineering, and for practitioners seeking to enhance their skills and knowledge.
Sungdeok (Steve) Cha is a Professor at Korea University in Seoul, Korea and a former professor at Korea Advanced Institute of Science and Technology (KAIST) in Daejeon. Prior to joining KAIST, he was a member of technical staff at the Aerospace Corporation and the Hughes Aircraft Company working on various software engineering and computer security projects. His main research topics include software safety, requirements engineering, and computer security. He is also a member of editorial boards for several software engineering journals.
Richard N. Taylor is a Professor Emeritus of Information and Computer Sciences at the University of California, Irvine, USA. His research interests are centered on design and software architectures, especially focusing on decentralized systems. In 2017 he received the ACM SIGSOFT Impact Paper Award (with Roy Fielding). In 2009 he was recognized with the ACM SIGSOFT Outstanding Research Award, in 2008 the ICSE Most Influential Paper award, and in 2005 the ACM SIGSOFT Distinguished Service Award. In 1998 he was named an ACM Fellow for his contributions to research in software engineering and software environments.
Kyochul Kang is an Executive Vice President at Samsung Electronics as well as a Professor Emeritus at POSTECH in Korea. Prior to joining POSTECH, he conducted software engineering research at Bell Communications Research, Bell Labs, and SEI. His research career in software engineering began in the 1970s as a member of the PSL/PSA team, which developed the first-ever requirements modelling and analysis technology. He is well known for his FODA (Feature-Oriented Domain Analysis) work at SEI and is an expert on software reuse and product line engineering.
Autoren/Hrsg.
Weitere Infos & Material
1;Preface;5
2;Acknowledgment;7
3;Contents;8
4;Editors and Contributors;11
4.1;About the Editors;11
4.2;Contributors;12
5;Process and Workflow;13
5.1;1 Background, Goals, and Motivation;13
5.1.1;1.1 Goals and Benefits of Process;14
5.1.1.1;1.1.1 Communication;14
5.1.1.2;1.1.2 Coordination;15
5.1.1.3;1.1.3 Training;15
5.1.1.4;1.1.4 Understanding;15
5.1.1.5;1.1.5 Improvement;16
5.1.1.6;1.1.6 Guidance and Control;16
5.2;2 History and Seminal Work;17
5.3;3 Some Definitions, Unifying Assumptions, and Characterizations;21
5.3.1;3.1 Processes and Workflows;21
5.3.2;3.2 Process Performances;21
5.3.3;3.3 Process Specifications;21
5.3.4;3.4 Activities;22
5.3.5;3.5 Process Artifacts;22
5.3.6;3.6 Process Agents;23
5.4;4 Conceptual Framework;23
5.4.1;4.1 Process Specification Approaches;24
5.4.1.1;4.1.1 Process Specification Evaluation Criteria;24
5.4.1.2;4.1.2 Example Process Specification Approaches;24
5.4.2;4.2 Process Acquisition;28
5.4.3;4.3 Process Analysis Facilities and Results;30
5.4.3.1;4.3.1 Dynamic Analysis of Process Specifications;30
5.4.3.2;4.3.2 Static Analysis of Process Specifications;31
5.4.4;4.4 Process Evolution;35
5.5;5 Specific Processes, Frameworks, and Architectures;35
5.5.1;5.1 The Rational Unified Process;36
5.5.2;5.2 The Spiral Model/Incremental Commitment Model;37
5.5.3;5.3 Agile Methods;38
5.5.4;5.4 Extreme Programming;39
5.5.5;5.5 Scrum Development;41
5.5.6;5.6 Adaptive Case Management;42
5.5.7;5.7 Summary and Analysis;43
5.5.7.1;5.7.1 Communication;43
5.5.7.2;5.7.2 Coordination;44
5.5.7.3;5.7.3 Training;44
5.5.7.4;5.7.4 Understanding;45
5.5.7.5;5.7.5 Improvement;45
5.5.7.6;5.7.6 Guidance and Control;47
5.6;6 Future Directions;47
5.6.1;6.1 Current Unmet Challenges;48
5.6.1.1;6.1.1 Specification Language Issues;48
5.6.2;6.2 Learning and Improvement Through Analysis;51
5.6.2.1;6.2.1 Learning from Big Data;51
5.6.2.2;6.2.2 Learning from Analysis;52
5.6.3;6.3 Progress Toward Standardized (Yet Flexible) Processes;53
5.6.4;6.4 Human/Computer Collaboration and Human Guidance Direction;55
5.6.5;6.5 Application to New Domains;56
5.6.6;6.6 Merging Process and Workflow Communities and Technologies;57
5.7;7 Conclusions;58
5.8;References;59
6;Requirements Engineering;62
6.1;1 Introduction;62
6.2;2 Concepts and Principles;64
6.2.1;2.1 Fundamentals: The World and the Machine;64
6.2.2;2.2 Qualities;66
6.2.3;2.3 Processes;67
6.3;3 Organised Tour: Genealogy and Seminal Works;70
6.3.1;3.1 Elicitation;71
6.3.1.1;3.1.1 Data Gathering;71
6.3.1.2;3.1.2 Collaborative;72
6.3.1.3;3.1.3 Cognitive;73
6.3.1.4;3.1.4 Contextual;73
6.3.1.5;3.1.5 Creativity;74
6.3.1.6;3.1.6 Choosing and Combining Elicitation Techniques;74
6.3.2;3.2 Modelling and Analysis;74
6.3.2.1;3.2.1 Natural Language;75
6.3.2.2;3.2.2 Structural Modelling;76
6.3.2.3;3.2.3 Behavioural Modelling;79
6.3.2.4;3.2.4 Goal Modelling;80
6.3.2.5;3.2.5 Choosing and Combining Modelling Techniques;83
6.3.3;3.3 Assurance;84
6.3.3.1;3.3.1 Validation;84
6.3.3.2;3.3.2 Verification;85
6.3.4;3.4 Management and Evolution;87
6.3.4.1;3.4.1 Negotiation and Prioritisation;87
6.3.4.2;3.4.2 Agile Methods;88
6.3.4.3;3.4.3 Reuse;89
6.3.4.4;3.4.4 Adaptation;90
6.3.4.5;3.4.5 Traceability;91
6.3.5;3.5 RE for Cross-Cutting Properties;92
6.4;4 Future Challenges;94
6.4.1;4.1 Sustainability and Global Societal Challenges;95
6.4.2;4.2 Artificial Intelligence;96
6.4.3;4.3 Exemplars and Artefacts;96
6.5;5 Conclusion;97
6.6;References;97
7;Software Architecture and Design;104
7.1;1 Introduction;104
7.2;2 An Organized Tour: Genealogy and Seminal Papers;106
7.2.1;2.1 Domain-Independent Design;107
7.2.1.1;2.1.1 Early Design Approaches and Module Interconnection Languages;107
7.2.1.2;2.1.2 Initial Articulations of “Software Architecture”;110
7.2.1.3;2.1.3 Styles and Patterns;110
7.2.1.4;2.1.4 Architecture Description Languages (ADLs);111
7.2.1.5;2.1.5 Analysis: Early Value from Representations;112
7.2.1.6;2.1.6 Connectors: The Distinctive Characteristic of Software Architecture Descriptions;114
7.2.1.7;2.1.7 Adaptation;115
7.2.2;2.2 Domain-Informed Design;115
7.2.2.1;2.2.1 Focus on a Single Domain;115
7.2.2.2;2.2.2 Design by Simulation: Object Oriented Design;116
7.2.2.3;2.2.3 Domain-Specific Software Engineering and Product Families;117
7.2.2.4;2.2.4 Ecosystems;118
7.3;3 Concepts and Principles: Summarizing the Key Points;119
7.3.1;3.1 Software Architecture: A Mature Definition;119
7.3.1.1;3.1.1 Illustrations;120
7.3.2;3.2 Key Definitions;122
7.3.3;3.3 Key Principles and Practices;124
7.3.3.1;3.3.1 Designing Architectures;124
7.3.3.2;3.3.2 Maintaining Conceptual Integrity;126
7.3.3.3;3.3.3 Cost-Benefit Analysis;127
7.4;4 Future Directions;128
7.4.1;4.1 Modeling;128
7.4.2;4.2 Knowledge Capture;129
7.4.3;4.3 Evolution;129
7.4.4;4.4 Ecosystems;130
7.5;5 Conclusions;130
7.6;References;131
8;Software Testing;134
8.1;1 Introduction;135
8.2;2 Concepts and Principles;136
8.3;3 Organized Tour: Genealogy and Seminal Works;141
8.3.1;3.1 Analyzing Tests;141
8.3.1.1;3.1.1 Structural Testing;142
8.3.1.2;3.1.2 Logical Coverage Criteria;145
8.3.1.3;3.1.3 Dataflow Testing;146
8.3.1.4;3.1.4 Mutation Testing;148
8.3.1.5;3.1.5 Coverage Criteria for Concurrent Programs;150
8.3.1.6;3.1.6 Coverage Criteria for Graphical User Interfaces;151
8.3.2;3.2 Generating Tests;152
8.3.2.1;3.2.1 Random Testing;152
8.3.3;3.3 Fuzz Testing;155
8.3.3.1;3.3.1 Black Box Techniques;155
8.3.3.2;3.3.2 White Box Techniques;166
8.3.3.3;3.3.3 Concurrency Testing Techniques;176
8.3.4;3.4 Executing Tests;176
8.3.4.1;3.4.1 Automated Test Execution;177
8.3.4.2;3.4.2 Test Suite Minimization;178
8.3.4.3;3.4.3 Regression Test Selection;180
8.3.4.4;3.4.4 Test Case Prioritization;182
8.3.4.5;3.4.5 Testing Embedded Software;184
8.3.5;3.5 Current Trends in Testing Research;184
8.3.5.1;3.5.1 Model-Based Testing;185
8.3.5.2;3.5.2 Automated Test Generation;186
8.3.5.3;3.5.3 Test Analysis;186
8.3.6;3.6 Current Trends in Software Testing Practice;187
8.3.6.1;3.6.1 Developers Are Testers;187
8.3.6.2;3.6.2 Test Automation;187
8.3.6.3;3.6.3 Trending Application Domains;188
8.4;4 Future Challenges;189
8.4.1;4.1 Test Analysis;189
8.4.2;4.2 Automated Testing;190
8.4.3;4.3 Test Oracles;190
8.4.4;4.4 Flaky Tests;192
8.4.5;4.5 Legacy Tests;193
8.4.6;4.6 Nonfunctional Testing;193
8.4.7;4.7 Testing Domain-Specific Software;194
8.4.8;4.8 The Academia-Industry Gap;194
8.5;5 Conclusions;195
8.6;References;196
9;Formal Methods;204
9.1;1 Introduction;204
9.2;2 Historical Perspective;206
9.3;3 Grand Tour of Formal Methods;210
9.3.1;3.1 Modeling: Concepts and Principles;210
9.3.2;3.2 Formal Specification;213
9.3.2.1;3.2.1 Linear Temporal Logic;214
9.3.2.2;3.2.2 Using Finite Automata on Infinite Words as a Specification Formalism;214
9.3.2.3;3.2.3 Branching Modeling and Specification;216
9.3.2.4;3.2.4 Process Algebra;217
9.3.3;3.3 Model Checking;219
9.3.3.1;3.3.1 Symbolic Model Checking;220
9.3.3.2;3.3.2 Partial Order Reduction;221
9.3.3.3;3.3.3 Abstraction;222
9.3.3.4;3.3.4 Bounded Model Checking;223
9.3.4;3.4 Formal Verification;224
9.3.5;3.5 Runtime Verification;227
9.4;4 Future Challenges;228
9.5;References;230
10;Software Evolution;234
10.1;1 Introduction;234
10.2;2 Concepts and Principles;236
10.2.1;2.1 Corrective Change;236
10.2.2;2.2 Adaptive Change;237
10.2.3;2.3 Perfective Change;237
10.2.4;2.4 Preventive Change;237
10.3;3 An Organized Tour of Seminal Papers: Applying Changes;238
10.3.1;3.1 Corrective Change;238
10.3.1.1;3.1.1 Empirical Studies of Bug Fixes;239
10.3.1.2;3.1.2 Rule-Based Bug Detection and Fixing Approaches;240
10.3.1.3;3.1.3 Automated Repair;241
10.3.2;3.2 Adaptive Change;242
10.3.2.1;3.2.1 Cross-System Porting;242
10.3.2.2;3.2.2 Cross-Language Migration;243
10.3.2.3;3.2.3 Library Upgrade and API Evolution;244
10.3.3;3.3 Perfective Change;245
10.3.3.1;3.3.1 Techniques for Locating Crosscutting Concerns;246
10.3.3.2;3.3.2 Language Support for Crosscutting Concerns;246
10.3.4;3.4 Preventive Change;247
10.3.4.1;3.4.1 Definition of Refactoring Operations;247
10.3.4.2;3.4.2 Empirical Studies of Refactoring;248
10.3.4.3;3.4.3 Automated Refactoring;249
10.3.4.4;3.4.4 Real-World Refactoring Practices;250
10.3.4.5;3.4.5 Quantitative Assessment of Refactoring Impact;251
10.3.4.6;3.4.6 Code Smells Detection;252
10.3.5;3.5 Automatic Change Application;254
10.3.5.1;3.5.1 Source Transformation and Languages and Tools;254
10.3.5.2;3.5.2 Programming by Demonstration;256
10.4;4 An Organized Tour of Seminal Papers: Inspecting Changes;258
10.4.1;4.1 Software Inspection and Modern Code Review Practices;258
10.4.1.1;4.1.1 Commercial Code Review Tools;261
10.4.1.2;4.1.2 Change Decomposition;262
10.4.1.3;4.1.3 Refactoring Aware Code Review;263
10.4.1.4;4.1.4 Change Conflicts, Interference, and Relevance;265
10.4.1.5;4.1.5 Detecting and Preventing Inconsistent Changes to Clones;266
10.4.2;4.2 Program Differencing;267
10.4.2.1;4.2.1 String and Lexical Matching;268
10.4.2.2;4.2.2 Syntax Tree Matching;269
10.4.2.3;4.2.3 Control Flow Graph Matching;270
10.4.2.4;4.2.4 Program Dependence Graph Matching;270
10.4.2.5;4.2.5 Related Topics: Model Differencing and Clone Detection;272
10.4.3;4.3 Recording Changes: Edit Capture and Replay;272
10.5;5 An Organized Tour of Seminal Papers: Change Validation;273
10.5.1;5.1 Change Impact Analysis;274
10.5.2;5.2 Debugging Changes;275
10.5.3;5.3 Refactoring Validation;278
10.6;6 Future Directions and Open Problems;279
10.6.1;6.1 Change Comprehension;279
10.6.2;6.2 Change Suggestion;280
10.6.3;6.3 Change Validation;281
10.7;Appendix;282
10.8;Key References;283
10.9;References;284
11;Empirical Software Engineering;296
11.1;1 Introduction;297
11.2;2 Concepts and Principles;298
11.2.1;2.1 Justification;298
11.2.2;2.2 General Concepts;299
11.2.3;2.3 Empirical Research Methods;301
11.2.4;2.4 Empirical Research Methods: Supporting Concepts;303
11.2.5;2.5 Empirical Research Techniques;304
11.3;3 Genealogy and Seminal Papers;305
11.3.1;3.1 Landmark Articles;306
11.3.1.1;3.1.1 Timeline;306
11.3.1.2;3.1.2 Methods;309
11.3.2;3.2 Landmark Books;311
11.3.3;3.3 Landmark Venues;312
11.3.4;3.4 Other Landmarks;313
11.4;4 Challenges;314
11.4.1;4.1 Size of the Studies;315
11.4.2;4.2 Recruiting Students;315
11.4.3;4.3 Recruiting Professional Developers;317
11.4.4;4.4 Theories in ESE;318
11.4.5;4.5 Publication of Negative Results;319
11.4.5.1;4.5.1 Antinomy Between Doing Research and Empirical Studies;320
11.4.5.2;4.5.2 Seemingly Uselessness of Empirical Studies;320
11.4.5.3;4.5.3 What Is and What Should Be;321
11.4.6;4.6 Data Sharing;321
11.4.7;4.7 Comparisons of Software Artefacts;322
11.5;5 Future Directions;323
11.5.1;5.1 Idioms for Empirical Studies;324
11.5.1.1;Pattern Name ``Tool Comparison'';324
11.5.2;5.2 Patterns for Empirical Studies;324
11.5.2.1;Pattern Name ``Prima Facie Evidence'';324
11.5.2.2;Pattern Name ``Idea Inspired by Experience'';325
11.5.3;5.3 Styles of Empirical Studies;326
11.5.3.1;Pattern Name ``Mixed-Method Style'';326
11.6;6 Conclusion;327
11.7;References;327
12;Software Reuse and Product Line Engineering;332
12.1;1 Introduction;332
12.2;2 Concepts and Principles;333
12.2.1;2.1 Software Reuse Benefits;336
12.2.2;2.2 The Obstacles;338
12.2.3;2.3 The Basic Features;340
12.3;3 Organized Tour: Genealogy and Seminal Papers;340
12.3.1;3.1 The Roots;341
12.3.2;3.2 Libraries and Repository Systems;342
12.3.3;3.3 Generative Reuse;343
12.3.4;3.4 Metrics and Economic Models;345
12.3.5;3.5 Reuse Models;346
12.3.6;3.6 Software Reuse Methods and Processes;347
12.3.7;3.7 Software Reuse: The Past Future;351
12.4;4 Software Product Lines (SPL): An Effective Reuse Approach;352
12.4.1;4.1 Software Product Line Essential Activities;352
12.4.2;4.2 Commonalities and Variabilities in SPL;353
12.4.3;4.3 Future Directions in SPL and Software Reuse;354
12.5;5 Conclusion;356
12.6;References;357
13;Key Software Engineering Paradigms and Modeling Methods;360
13.1;1 Introduction;360
13.2;2 Organized Tour: Genealogy and Seminal Works;361
13.2.1;2.1 A Brief History of Software Engineering;362
13.2.2;2.2 Paradigms;363
13.2.2.1;2.2.1 Structure Paradigm;364
13.2.2.2;2.2.2 Object Orientation Paradigm;365
13.2.3;2.3 Product vs Process;366
13.2.4;2.4 Modeling Methods;368
13.2.4.1;2.4.1 Model-Driven Engineering;369
13.2.4.2;2.4.2 Graph Representation of Models;371
13.2.4.3;2.4.3 Classification of Graph-Structured Models;372
13.2.4.4;2.4.4 Relation with Other Models;378
13.3;3 Future Challenges;379
13.3.1;3.1 Endogenous or Exogenous;379
13.3.2;3.2 Technological Singularity and the Fourth Paradigm;380
13.3.3;3.3 The Next Software Engineering Paradigm;381
13.4;4 Conclusions;382
13.5;References;383
14;Coordination Technologies;386
14.1;1 Introduction;386
14.2;2 Organized Tour of Coordination Technologies;388
14.3;3 The Coordination Pyramid;389
14.3.1;3.1 Layer 1: Basic Functional Support;391
14.3.2;3.2 Layer 2: Structured Processes;394
14.3.3;3.3 Layer 3: Information Discovery;396
14.3.4;3.4 Layer 4: Contextualized Information Provision;399
14.3.5;3.5 Layer 5: Seamless;402
14.4;4 Conclusion and Future Work;402
14.5;Key References;405
14.6;References;405
15;Software Engineering of Self-adaptive Systems;410
15.1;1 Introduction;410
15.2;2 Concepts and Principles;412
15.2.1;2.1 Basic Principles of Self-adaptation;412
15.2.2;2.2 Conceptual Model of a Self-adaptive System;414
15.3;3 An Organised Tour in Six Waves;417
15.3.1;3.1 Wave I: Automating Tasks;418
15.3.2;3.2 Wave II: Architecture-Based Adaptation;422
15.3.3;3.3 Wave III: Models at Runtime;428
15.3.4;3.4 Wave IV: Goal-Driven Adaptation;431
15.3.5;3.5 Wave V: Guarantees Under Uncertainties;435
15.3.6;3.6 Wave VI: Control-Based Approaches;440
15.4;4 Future Challenges;443
15.4.1;4.1 Analysis of the Maturity of the Field;443
15.4.2;4.2 Challenges;445
15.4.2.1;4.2.1 Challenges Within the Current Waves;445
15.4.2.2;4.2.2 Challenges Beyond the Current Waves;447
15.5;5 Conclusions;450
15.6;References;450
16;Security and Software Engineering;455
16.1;1 Introduction;456
16.2;2 Concepts and Principles;457
16.3;3 Organized Tour: Genealogy and Seminal Works;463
16.3.1;3.1 Illustrative Example for Program Analysis;463
16.3.2;3.2 Static Analysis;465
16.3.2.1;3.2.1 Foundations of Static Analysis;465
16.3.2.2;3.2.2 Static Analysis in Practice;468
16.3.3;3.3 Dynamic Analysis;471
16.3.3.1;3.3.1 Dynamic Taint Analysis;471
16.3.3.2;3.3.2 Dynamic Symbolic Execution;472
16.3.3.3;3.3.3 Automatic Exploit Generation;473
16.3.3.4;3.3.4 Fuzzing;475
16.3.4;3.4 Formal Methods;476
16.3.4.1;3.4.1 Model Checking;476
16.3.4.2;3.4.2 Theorem Proving;478
16.3.4.3;3.4.3 Bounded Verification;480
16.3.5;3.5 Adaptive Mechanisms;482
16.3.5.1;3.5.1 Illustrative Example;482
16.3.5.2;3.5.2 Self-protecting Software Reference Architecture;484
16.3.5.3;3.5.3 Architecture-Based Self-protection;485
16.3.5.4;3.5.4 Protective Wrapper Pattern;486
16.3.5.5;3.5.5 Software Rejuvenation Pattern;488
16.4;4 Future Challenges;490
16.4.1;4.1 Static Analysis;490
16.4.2;4.2 Dynamic Analysis;491
16.4.3;4.3 Formal Methods;492
16.4.4;4.4 Adaptive Mechanisms;493
16.5;5 Conclusions;494
16.6;References;495
17;Software Engineering in the Cloud;500
17.1;1 Introduction;500
17.1.1;1.1 Example;501
17.2;2 Key Concepts;502
17.2.1;2.1 Virtualization;502
17.2.1.1;2.1.1 Virtual Computing;502
17.2.1.2;2.1.2 Virtual Storage;504
17.2.1.3;2.1.3 Virtual Networking;504
17.2.1.4;2.1.4 Example;505
17.2.2;2.2 The Three-Layer “as-a-Service” Model of Cloud Computing;506
17.2.2.1;2.2.1 Infrastructure-as-a-Service (IaaS);506
17.2.2.2;2.2.2 Platform-as-a-Service (PaaS);509
17.2.2.3;2.2.3 Software-as-a-Service (SaaS);511
17.3;3 The Software Economics of Clouds;514
17.3.1;3.1 Private Clouds;515
17.4;4 Software Development and Deployment in the Cloud;516
17.4.1;4.1 Example;518
17.5;5 Seminal Papers and Genealogy;518
17.5.1;5.1 Foundations of Cloud Computing;518
17.5.2;5.2 Precursors to Cloud Computing;519
17.5.3;5.3 Cloud Computing;520
17.5.4;5.4 Related Concepts;520
17.6;6 Conclusions;521
17.6.1;6.1 Key Challenges;521
17.6.2;6.2 Future Directions;523
17.7;References;523
18;Index;526




