Suchen und Finden

Titel

Autor

Inhaltsverzeichnis

Nur ebooks mit Firmenlizenz anzeigen:

 

Handbook of Software Engineering

Handbook of Software Engineering

Sungdeok Cha, Richard N. Taylor, Kyochul Kang

 

Verlag Springer-Verlag, 2019

ISBN 9783030002626 , 533 Seiten

Format PDF, OL

Kopierschutz Wasserzeichen

Geräte

213,99 EUR

Mehr zum Inhalt

Handbook of Software Engineering


 

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