Suchen und Finden
Service
Handbook of Software Engineering
Sungdeok Cha, Richard N. Taylor, Kyochul Kang
Verlag Springer-Verlag, 2019
ISBN 9783030002626 , 533 Seiten
Format PDF, OL
Kopierschutz Wasserzeichen
Preface
5
Acknowledgment
7
Contents
8
Editors and Contributors
11
About the Editors
11
Contributors
12
Process and Workflow
13
1 Background, Goals, and Motivation
13
1.1 Goals and Benefits of Process
14
1.1.1 Communication
14
1.1.2 Coordination
15
1.1.3 Training
15
1.1.4 Understanding
15
1.1.5 Improvement
16
1.1.6 Guidance and Control
16
2 History and Seminal Work
17
3 Some Definitions, Unifying Assumptions, and Characterizations
21
3.1 Processes and Workflows
21
3.2 Process Performances
21
3.3 Process Specifications
21
3.4 Activities
22
3.5 Process Artifacts
22
3.6 Process Agents
23
4 Conceptual Framework
23
4.1 Process Specification Approaches
24
4.1.1 Process Specification Evaluation Criteria
24
4.1.2 Example Process Specification Approaches
24
4.2 Process Acquisition
28
4.3 Process Analysis Facilities and Results
30
4.3.1 Dynamic Analysis of Process Specifications
30
4.3.2 Static Analysis of Process Specifications
31
4.4 Process Evolution
35
5 Specific Processes, Frameworks, and Architectures
35
5.1 The Rational Unified Process
36
5.2 The Spiral Model/Incremental Commitment Model
37
5.3 Agile Methods
38
5.4 Extreme Programming
39
5.5 Scrum Development
41
5.6 Adaptive Case Management
42
5.7 Summary and Analysis
43
5.7.1 Communication
43
5.7.2 Coordination
44
5.7.3 Training
44
5.7.4 Understanding
45
5.7.5 Improvement
45
5.7.6 Guidance and Control
47
6 Future Directions
47
6.1 Current Unmet Challenges
48
6.1.1 Specification Language Issues
48
6.2 Learning and Improvement Through Analysis
51
6.2.1 Learning from Big Data
51
6.2.2 Learning from Analysis
52
6.3 Progress Toward Standardized (Yet Flexible) Processes
53
6.4 Human/Computer Collaboration and Human Guidance Direction
55
6.5 Application to New Domains
56
6.6 Merging Process and Workflow Communities and Technologies
57
7 Conclusions
58
References
59
Requirements Engineering
62
1 Introduction
62
2 Concepts and Principles
64
2.1 Fundamentals: The World and the Machine
64
2.2 Qualities
66
2.3 Processes
67
3 Organised Tour: Genealogy and Seminal Works
70
3.1 Elicitation
71
3.1.1 Data Gathering
71
3.1.2 Collaborative
72
3.1.3 Cognitive
73
3.1.4 Contextual
73
3.1.5 Creativity
74
3.1.6 Choosing and Combining Elicitation Techniques
74
3.2 Modelling and Analysis
74
3.2.1 Natural Language
75
3.2.2 Structural Modelling
76
3.2.3 Behavioural Modelling
79
3.2.4 Goal Modelling
80
3.2.5 Choosing and Combining Modelling Techniques
83
3.3 Assurance
84
3.3.1 Validation
84
3.3.2 Verification
85
3.4 Management and Evolution
87
3.4.1 Negotiation and Prioritisation
87
3.4.2 Agile Methods
88
3.4.3 Reuse
89
3.4.4 Adaptation
90
3.4.5 Traceability
91
3.5 RE for Cross-Cutting Properties
92
4 Future Challenges
94
4.1 Sustainability and Global Societal Challenges
95
4.2 Artificial Intelligence
96
4.3 Exemplars and Artefacts
96
5 Conclusion
97
References
97
Software Architecture and Design
104
1 Introduction
104
2 An Organized Tour: Genealogy and Seminal Papers
106
2.1 Domain-Independent Design
107
2.1.1 Early Design Approaches and Module Interconnection Languages
107
2.1.2 Initial Articulations of “Software Architecture”
110
2.1.3 Styles and Patterns
110
2.1.4 Architecture Description Languages (ADLs)
111
2.1.5 Analysis: Early Value from Representations
112
2.1.6 Connectors: The Distinctive Characteristic of Software Architecture Descriptions
114
2.1.7 Adaptation
115
2.2 Domain-Informed Design
115
2.2.1 Focus on a Single Domain
115
2.2.2 Design by Simulation: Object Oriented Design
116
2.2.3 Domain-Specific Software Engineering and Product Families
117
2.2.4 Ecosystems
118
3 Concepts and Principles: Summarizing the Key Points
119
3.1 Software Architecture: A Mature Definition
119
3.1.1 Illustrations
120
3.2 Key Definitions
122
3.3 Key Principles and Practices
124
3.3.1 Designing Architectures
124
3.3.2 Maintaining Conceptual Integrity
126
3.3.3 Cost-Benefit Analysis
127
4 Future Directions
128
4.1 Modeling
128
4.2 Knowledge Capture
129
4.3 Evolution
129
4.4 Ecosystems
130
5 Conclusions
130
References
131
Software Testing
134
1 Introduction
135
2 Concepts and Principles
136
3 Organized Tour: Genealogy and Seminal Works
141
3.1 Analyzing Tests
141
3.1.1 Structural Testing
142
3.1.2 Logical Coverage Criteria
145
3.1.3 Dataflow Testing
146
3.1.4 Mutation Testing
148
3.1.5 Coverage Criteria for Concurrent Programs
150
3.1.6 Coverage Criteria for Graphical User Interfaces
151
3.2 Generating Tests
152
3.2.1 Random Testing
152
3.3 Fuzz Testing
155
3.3.1 Black Box Techniques
155
3.3.2 White Box Techniques
166
3.3.3 Concurrency Testing Techniques
176
3.4 Executing Tests
176
3.4.1 Automated Test Execution
177
3.4.2 Test Suite Minimization
178
3.4.3 Regression Test Selection
180
3.4.4 Test Case Prioritization
182
3.4.5 Testing Embedded Software
184
3.5 Current Trends in Testing Research
184
3.5.1 Model-Based Testing
185
3.5.2 Automated Test Generation
186
3.5.3 Test Analysis
186
3.6 Current Trends in Software Testing Practice
187
3.6.1 Developers Are Testers
187
3.6.2 Test Automation
187
3.6.3 Trending Application Domains
188
4 Future Challenges
189
4.1 Test Analysis
189
4.2 Automated Testing
190
4.3 Test Oracles
190
4.4 Flaky Tests
192
4.5 Legacy Tests
193
4.6 Nonfunctional Testing
193
4.7 Testing Domain-Specific Software
194
4.8 The Academia-Industry Gap
194
5 Conclusions
195
References
196
Formal Methods
204
1 Introduction
204
2 Historical Perspective
206
3 Grand Tour of Formal Methods
210
3.1 Modeling: Concepts and Principles
210
3.2 Formal Specification
213
3.2.1 Linear Temporal Logic
214
3.2.2 Using Finite Automata on Infinite Words as a Specification Formalism
214
3.2.3 Branching Modeling and Specification
216
3.2.4 Process Algebra
217
3.3 Model Checking
219
3.3.1 Symbolic Model Checking
220
3.3.2 Partial Order Reduction
221
3.3.3 Abstraction
222
3.3.4 Bounded Model Checking
223
3.4 Formal Verification
224
3.5 Runtime Verification
227
4 Future Challenges
228
References
230
Software Evolution
234
1 Introduction
234
2 Concepts and Principles
236
2.1 Corrective Change
236
2.2 Adaptive Change
237
2.3 Perfective Change
237
2.4 Preventive Change
237
3 An Organized Tour of Seminal Papers: Applying Changes
238
3.1 Corrective Change
238
3.1.1 Empirical Studies of Bug Fixes
239
3.1.2 Rule-Based Bug Detection and Fixing Approaches
240
3.1.3 Automated Repair
241
3.2 Adaptive Change
242
3.2.1 Cross-System Porting
242
3.2.2 Cross-Language Migration
243
3.2.3 Library Upgrade and API Evolution
244
3.3 Perfective Change
245
3.3.1 Techniques for Locating Crosscutting Concerns
246
3.3.2 Language Support for Crosscutting Concerns
246
3.4 Preventive Change
247
3.4.1 Definition of Refactoring Operations
247
3.4.2 Empirical Studies of Refactoring
248
3.4.3 Automated Refactoring
249
3.4.4 Real-World Refactoring Practices
250
3.4.5 Quantitative Assessment of Refactoring Impact
251
3.4.6 Code Smells Detection
252
3.5 Automatic Change Application
254
3.5.1 Source Transformation and Languages and Tools
254
3.5.2 Programming by Demonstration
256
4 An Organized Tour of Seminal Papers: Inspecting Changes
258
4.1 Software Inspection and Modern Code Review Practices
258
4.1.1 Commercial Code Review Tools
261
4.1.2 Change Decomposition
262
4.1.3 Refactoring Aware Code Review
263
4.1.4 Change Conflicts, Interference, and Relevance
265
4.1.5 Detecting and Preventing Inconsistent Changes to Clones
266
4.2 Program Differencing
267
4.2.1 String and Lexical Matching
268
4.2.2 Syntax Tree Matching
269
4.2.3 Control Flow Graph Matching
270
4.2.4 Program Dependence Graph Matching
270
4.2.5 Related Topics: Model Differencing and Clone Detection
272
4.3 Recording Changes: Edit Capture and Replay
272
5 An Organized Tour of Seminal Papers: Change Validation
273
5.1 Change Impact Analysis
274
5.2 Debugging Changes
275
5.3 Refactoring Validation
278
6 Future Directions and Open Problems
279
6.1 Change Comprehension
279
6.2 Change Suggestion
280
6.3 Change Validation
281
Appendix
282
Key References
283
References
284
Empirical Software Engineering
296
1 Introduction
297
2 Concepts and Principles
298
2.1 Justification
298
2.2 General Concepts
299
2.3 Empirical Research Methods
301
2.4 Empirical Research Methods: Supporting Concepts
303
2.5 Empirical Research Techniques
304
3 Genealogy and Seminal Papers
305
3.1 Landmark Articles
306
3.1.1 Timeline
306
3.1.2 Methods
309
3.2 Landmark Books
311
3.3 Landmark Venues
312
3.4 Other Landmarks
313
4 Challenges
314
4.1 Size of the Studies
315
4.2 Recruiting Students
315
4.3 Recruiting Professional Developers
317
4.4 Theories in ESE
318
4.5 Publication of Negative Results
319
4.5.1 Antinomy Between Doing Research and Empirical Studies
320
4.5.2 Seemingly Uselessness of Empirical Studies
320
4.5.3 What Is and What Should Be
321
4.6 Data Sharing
321
4.7 Comparisons of Software Artefacts
322
5 Future Directions
323
5.1 Idioms for Empirical Studies
324
Pattern Name ``Tool Comparison''
324
5.2 Patterns for Empirical Studies
324
Pattern Name ``Prima Facie Evidence''
324
Pattern Name ``Idea Inspired by Experience''
325
5.3 Styles of Empirical Studies
326
Pattern Name ``Mixed-Method Style''
326
6 Conclusion
327
References
327
Software Reuse and Product Line Engineering
332
1 Introduction
332
2 Concepts and Principles
333
2.1 Software Reuse Benefits
336
2.2 The Obstacles
338
2.3 The Basic Features
340
3 Organized Tour: Genealogy and Seminal Papers
340
3.1 The Roots
341
3.2 Libraries and Repository Systems
342
3.3 Generative Reuse
343
3.4 Metrics and Economic Models
345
3.5 Reuse Models
346
3.6 Software Reuse Methods and Processes
347
3.7 Software Reuse: The Past Future
351
4 Software Product Lines (SPL): An Effective Reuse Approach
352
4.1 Software Product Line Essential Activities
352
4.2 Commonalities and Variabilities in SPL
353
4.3 Future Directions in SPL and Software Reuse
354
5 Conclusion
356
References
357
Key Software Engineering Paradigms and Modeling Methods
360
1 Introduction
360
2 Organized Tour: Genealogy and Seminal Works
361
2.1 A Brief History of Software Engineering
362
2.2 Paradigms
363
2.2.1 Structure Paradigm
364
2.2.2 Object Orientation Paradigm
365
2.3 Product vs Process
366
2.4 Modeling Methods
368
2.4.1 Model-Driven Engineering
369
2.4.2 Graph Representation of Models
371
2.4.3 Classification of Graph-Structured Models
372
2.4.4 Relation with Other Models
378
3 Future Challenges
379
3.1 Endogenous or Exogenous
379
3.2 Technological Singularity and the Fourth Paradigm
380
3.3 The Next Software Engineering Paradigm
381
4 Conclusions
382
References
383
Coordination Technologies
386
1 Introduction
386
2 Organized Tour of Coordination Technologies
388
3 The Coordination Pyramid
389
3.1 Layer 1: Basic Functional Support
391
3.2 Layer 2: Structured Processes
394
3.3 Layer 3: Information Discovery
396
3.4 Layer 4: Contextualized Information Provision
399
3.5 Layer 5: Seamless
402
4 Conclusion and Future Work
402
Key References
405
References
405
Software Engineering of Self-adaptive Systems
410
1 Introduction
410
2 Concepts and Principles
412
2.1 Basic Principles of Self-adaptation
412
2.2 Conceptual Model of a Self-adaptive System
414
3 An Organised Tour in Six Waves
417
3.1 Wave I: Automating Tasks
418
3.2 Wave II: Architecture-Based Adaptation
422
3.3 Wave III: Models at Runtime
428
3.4 Wave IV: Goal-Driven Adaptation
431
3.5 Wave V: Guarantees Under Uncertainties
435
3.6 Wave VI: Control-Based Approaches
440
4 Future Challenges
443
4.1 Analysis of the Maturity of the Field
443
4.2 Challenges
445
4.2.1 Challenges Within the Current Waves
445
4.2.2 Challenges Beyond the Current Waves
447
5 Conclusions
450
References
450
Security and Software Engineering
455
1 Introduction
456
2 Concepts and Principles
457
3 Organized Tour: Genealogy and Seminal Works
463
3.1 Illustrative Example for Program Analysis
463
3.2 Static Analysis
465
3.2.1 Foundations of Static Analysis
465
3.2.2 Static Analysis in Practice
468
3.3 Dynamic Analysis
471
3.3.1 Dynamic Taint Analysis
471
3.3.2 Dynamic Symbolic Execution
472
3.3.3 Automatic Exploit Generation
473
3.3.4 Fuzzing
475
3.4 Formal Methods
476
3.4.1 Model Checking
476
3.4.2 Theorem Proving
478
3.4.3 Bounded Verification
480
3.5 Adaptive Mechanisms
482
3.5.1 Illustrative Example
482
3.5.2 Self-protecting Software Reference Architecture
484
3.5.3 Architecture-Based Self-protection
485
3.5.4 Protective Wrapper Pattern
486
3.5.5 Software Rejuvenation Pattern
488
4 Future Challenges
490
4.1 Static Analysis
490
4.2 Dynamic Analysis
491
4.3 Formal Methods
492
4.4 Adaptive Mechanisms
493
5 Conclusions
494
References
495
Software Engineering in the Cloud
500
1 Introduction
500
1.1 Example
501
2 Key Concepts
502
2.1 Virtualization
502
2.1.1 Virtual Computing
502
2.1.2 Virtual Storage
504
2.1.3 Virtual Networking
504
2.1.4 Example
505
2.2 The Three-Layer “as-a-Service” Model of Cloud Computing
506
2.2.1 Infrastructure-as-a-Service (IaaS)
506
2.2.2 Platform-as-a-Service (PaaS)
509
2.2.3 Software-as-a-Service (SaaS)
511
3 The Software Economics of Clouds
514
3.1 Private Clouds
515
4 Software Development and Deployment in the Cloud
516
4.1 Example
518
5 Seminal Papers and Genealogy
518
5.1 Foundations of Cloud Computing
518
5.2 Precursors to Cloud Computing
519
5.3 Cloud Computing
520
5.4 Related Concepts
520
6 Conclusions
521
6.1 Key Challenges
521
6.2 Future Directions
523
References
523
Index
526