This handbook distils the wealth of expertise and knowledge from a large community of researchers and industrial practitioners in Software Product Lines (SPLs) gained through extensive and rigorous theoretical, empirical, and applied research. It is a timely compilation of well-established and cutting-edge approaches that can be leveraged by those facing the prevailing and daunting challenge of re-engineering their systems into SPLs. The selection of chapters provides readers with a wide and diverse perspective that reflects the complementary and varied expertise of the chapter authors. This perspective covers the re-engineering processes, from planning to execution.
SPLs are families of systems that share common assets, allowing a disciplined software reuse. The adoption of SPL practices has shown to enable significant technical and economic benefits for the companies that employ them. However, successful SPLs rarely start from scratch, but instead, they usually start from a set of existing systems that must undergo well-defined re-engineering processes to unleash new levels of productivity and competitiveness.Practitioners will benefit from the lessons learned by the community, captured in the array of methodological and technological alternatives presented in the chapters of the handbook, and will gain the confidence for undertaking their own re-engineering challenges. Researchers and educators will find a valuable single-entry point to quickly become familiar with the state-of-the-art on the topic and the open research opportunities; including undergraduate, graduate students, and R&D engineers who want to have a comprehensive understanding of techniques in reverse engineering and re-engineering of variability-rich software systems.
Author(s): Roberto E. Lopez-Herrejon, Jabier Martinez, Wesley Klewerton Guez Assunção, Tewfik Ziadi, Mathieu Acher, Silvia Vergilio
Publisher: Springer
Year: 2022
Language: English
Pages: 534
City: Cham
Foreword
Preface
What Is This Handbook About?
Who Should Read This Handbook?
Acknowledgements
Contents
Editors and Contributors
Acronyms
Part I Feature Location and Variability Model Extraction
1 Feature Location in Software Variants Toward Software Product Line Engineering
1.1 Introduction
1.2 Product Variants
1.3 Types of Feature Location
1.3.1 Static-Based Feature Location
1.3.2 Textual-Based Feature Location
1.3.2.1 Pattern Matching
1.3.2.2 Natural Language Processing (NLP)
1.3.2.3 Information Retrieval (IR)
1.3.3 Dynamic-Based Feature Location
1.4 Feature Location in Software Variants
1.4.1 Feature Location with IR in Product Variants: Conventional Application
1.4.1.1 VSM-Based Feature Location
1.4.1.2 LSI-Based Feature Location
1.4.1.3 Feature Location by Combining IR with Static Analysis
1.4.1.4 Feature Location by Combining IR with Dynamic Analysis
1.4.2 Feature Location with IR in Product Variants: Variability Awareness
1.5 An Illustrative Approach for Feature Location with IR: Variability Awareness
1.5.1 An Overview of the Feature Location Process
1.5.2 Reducing IR Search Spaces
1.5.2.1 Determining Common and Variable Partitions at the Feature Level
1.5.2.2 Determining Common and Variable Partitions at the Source Code Level
1.5.2.3 Fragmentation of the Variable Partitions into Minimal Disjoint Sets
1.5.3 Reducing the Abstraction Gap Between Feature and Source Code Levels Using Code-Topic
1.5.3.1 Code-Topic Identification as a Partitioning Problem
1.5.3.2 Computing Similarity Between Classes for Supporting Code-Topic Identification
1.5.3.3 Clustering Classes as Code-Topics
1.5.4 Locating Features by LSI
1.5.4.1 Establishing a Mapping Between Features and Code-Topics
1.5.4.2 Decomposing Code-Topics to their Classes
1.6 Conclusions
References
2 Feature and Variability Extraction from Natural Language Requirements
2.1 Introduction
2.2 Natural Language Processing in a Nutshell
2.3 Feature Extraction
2.3.1 Similarity-Based Feature Extraction
2.3.1.1 Similarity Measures
2.3.1.2 Rules & Heuristics
2.3.2 Graph-Based Feature Extraction
2.3.3 Feature Term Extraction
2.3.4 Evaluation Metric
2.4 Variability Extraction
2.4.1 Optionality
2.4.2 Group Constraints
2.4.3 Cross-Tree Constraints
2.4.4 Evaluation Metric
2.5 Related Work
2.6 Challenges and Risks
References
3 Semantic History Slicing
3.1 Introduction
3.1.1 Locating Features in Software Histories
3.1.2 Semantic History Slicing
3.1.3 Chapter Organization
3.2 Representing Programs and Program Changes
3.2.1 Program Representation
3.2.2 Changes and Change Histories
3.2.2.1 AST-Based View
3.2.2.2 Line-Based View
3.2.3 Tests and Test Suites
3.3 Semantics-Preserving History Slices
3.4 Semantic History Slicing
3.4.1 CSlicer by Example
3.4.1.1 Dependency Hierarchy
3.4.1.2 CSlicer Workflow
3.4.2 The Semantic History Slicing Algorithm
3.4.2.1 Algorithm Description
3.4.2.2 Correctness of Algorithm 1
3.4.3 SCM Adaptation
3.5 Web-Based History Slicing Framework
3.5.1 User Interface
3.5.2 Use Cases in SPL
3.6 Conclusion
References
4 Feature Location in Models (FLiM): Design Time and Runtime
4.1 Introduction
4.2 Background
4.2.1 Software Product Lines
4.2.2 Feature Location
4.2.3 Information Retrieval
4.2.4 Evolutionary Algorithms
4.2.5 The Induction Hob Domain
4.2.6 The Common Variability Language Applied to Induction Hobs
4.3 Relation Between FLiMEA and FLiMRT
4.4 FLiM at Design Time (FLiMEA)
4.4.1 User Input
4.4.2 Encoding
4.4.3 Genetic Operations
4.4.3.1 Selection of Parents
4.4.3.2 Crossover
4.4.3.3 Mutation
4.4.4 Model Fragment Fitness
4.4.4.1 Loop
4.5 FLiM at Runtime (FLiMRT)
4.5.1 The Dynamic Analysis Phase
4.5.2 The Information Retrieval Phase
4.6 Evaluation
4.6.1 The Induction Hobs Domain
4.6.2 Train Control and Management Domain
4.6.3 Oracle Preparation
4.6.4 Test Cases
4.6.5 Comparison and Measure
4.6.6 Evaluation of FLiM at Design Time (FLiMEA)
4.6.6.1 Analysis of the Results
4.6.7 Evaluation of FLiM at Runtime (FLiMRT)
4.6.7.1 Analysis of the Results
4.7 Conclusion
References
5 Search-Based Variability Model Synthesis from Variant Configurations
5.1 Introduction
5.2 Running Example
5.3 Source Code Dependency Graphs
5.4 Multi-Objective Search-Based Variability Model Synthesis
5.4.1 Variability Model Representation
5.4.2 Fitness Functions
5.4.3 Evolutionary Operators
5.5 Evaluation
5.6 Results and Analysis
5.7 Example of Use
5.8 Related Work
5.9 Concluding Remarks
References
6 Extending Boolean Variability Relationship Extraction to Multi-valued Software Descriptions
6.1 Introduction
6.2 Variability in Boolean Descriptions
6.2.1 Boolean Feature-Based Descriptions
6.2.2 Boolean Variability Relationships
6.2.3 Feature Relationship Extraction in the Literature
6.2.4 A Sound and Complete FCA-Based Feature Relationships Extraction
6.3 Variability in Non-Boolean Descriptions
6.3.1 Multi-Valued Descriptions
6.3.2 Multi-valued variability relationships
6.3.3 Multi-Valued Variability Extraction in the Literature
6.3.4 A Sound and Complete FCA-Based Multi-Valued Variability Extraction
6.4 Conclusion
References
7 Machine Learning for Feature Constraints Discovery
7.1 Introduction
7.2 Machine Learning in a Nutshell
7.2.1 Data Representation and Model Generation
7.2.2 Supervised and Unsupervised Learning
7.2.3 Decision Trees
7.2.4 Metrics
7.3 Sampling, Labeling, Learning
7.3.1 Sampling
7.3.2 Labeling
7.3.3 Learning
7.4 Applications
7.4.1 Learning Constraints of an Industrial Video Generator
7.4.2 VaryLaTeX: Generating Text Documents That Does Not Exceed a Fixed Number of Pages
7.4.3 Other Applications
7.4.4 Applicability
7.5 Benefits, Risks, and Challenges
7.5.1 Benefits
7.5.2 Risks
7.5.3 Challenges
7.6 Conclusion
References
Part II Reengineering Product Line Architectures
8 Extraction of Software Product Line Architectures from Many System Variants
8.1 Introduction
8.2 An Illustrative Example
8.3 Variability in SPLA
8.3.1 Component Variability
8.3.2 Architecture Configuration Variability
8.3.3 Component Dependencies
8.4 Challenges in Extracting SPLA from Software Variants
8.5 Toward SPLA Extraction from Many Software Variants: Good Practices
8.5.1 The Input Artifacts to Be Analyzed for Extracting SPLA
8.5.2 The Process of SPLA Extraction
8.6 Illustrative Approach to Extract SPLA
8.6.1 Input and Goal
8.6.2 Extraction of Component Variability
8.6.2.1 Extraction of Component Variants
8.6.2.2 Extraction of Component Structure Variability
8.6.2.3 Extraction of Component Interface Variability
8.6.3 Extraction of Configuration Variability
8.6.3.1 Extraction of Component Existence Variability
8.6.3.2 Extraction of Component-to-Component Link Variability
8.6.3.3 Extraction of Component Dependencies
8.7 Conclusion
References
9 ModelVars2SPL: From UML Class Diagram Variants to Software Product Line Core Assets
9.1 Introduction
9.2 Background and Related Work
9.3 ModelVars2SPL
9.3.1 Approach Overview
9.3.2 Features Traceability
9.3.3 Reverse Engineering of Feature Models
9.3.3.1 Representation of Individuals
9.3.3.2 Objective Functions
9.3.3.3 Evolutionary Operators
9.3.4 Model Merging
9.3.4.1 Representation of the Individuals
9.3.4.2 Objective Function
9.3.4.3 Evolutionary Operators
9.3.5 Variability Grafting
9.4 Evaluation
9.4.1 Implementation Details and Parameter Settings
9.4.2 Target Applications
9.4.3 Evaluation Metrics
9.5 Results and Analysis
9.5.1 Capacity to Rederive Input Variant
9.5.2 Performance for Obtaining Solutions
9.6 Practical Usage of ModelVars2SPL Solutions
9.7 Concluding Remarks
References
10 Extraction and Evolution of a Software Product Line from Existing Web-Based Systems
10.1 Introduction
10.2 Study Settings
10.2.1 Target Systems
10.2.2 Study Procedures
10.3 Study Results
10.3.1 SPL Extraction from Existing Systems
10.3.1.1 Variability Modeling
10.3.1.2 Design and Implementation of SPL Through Refactoring of Existing Systems
10.3.2 SPL Evolution
10.4 Discussions and Lessons Learned
10.5 Related Work
10.6 Conclusion and Future Work
References
11 Re-Engineering Microservice Applications into Delta-Oriented Software Product Lines
11.1 Introduction
11.2 Variability Modeling
11.2.1 Preliminary Analysis
11.2.2 Multi-Level Feature Diagram
11.2.3 Multi-Stage Configurations
11.3 Product Line Architecture
11.3.1 UML Component Diagram
11.3.2 UML Class Diagram
11.4 Product Line Implementation
11.5 Conclusion and Future Work
References
12 Understanding the Variability on the Recovery of Product Line Architectures
12.1 Introduction
12.2 Background
12.2.1 Architecture Recovery
12.2.2 Variability in Software Architecture
12.3 PLA Recovery Approach
12.3.1 Motivating Example
12.3.1.1 Variant 1 Source Code Analysis and Extraction
12.3.1.2 Variant 2 Source Code Analysis and Extraction
12.3.1.3 Application of the PLA Recovery
12.3.2 PLAR Tool
12.3.2.1 Tool Functionalities
12.3.3 PLAR Algorithm
12.3.4 Validation Example
12.4 Exploratory Study
12.4.1 Research Questions
12.4.2 Execution
12.4.3 Data Collection
12.4.4 Descriptive Statistics
12.4.5 Answers to the Research Questions
12.4.6 General Findings
12.4.7 Threats to Validity
12.5 Related Work
12.6 Conclusion
References
Part III Frameworks
13 PAxSPL: A Framework for Aiding SPL Reengineering Planning
13.1 Introduction
13.2 Background and Related Work
13.2.1 Software Product Lines and Reengineering Process
13.2.2 SPL Reengineering Planning
13.2.3 Motivational Scenarios
13.2.4 Related Work
13.3 PAxSPL Framework
13.3.1 Process Overview
13.3.1.1 Prepare
13.3.1.2 Assemble
13.3.1.3 Execute
13.3.2 Guidelines
13.4 Case Study
13.4.1 Planning and Design
13.4.1.1 Participants Profile
13.4.1.2 Case Study Protocol
13.4.1.3 Data Collection
13.4.1.4 Quality Metrics
13.4.2 Conduction and Data Collecting
13.4.2.1 Time Spent
13.4.2.2 Quality of Generated Artifacts
13.4.2.3 Use of Generated Artifacts
13.4.2.4 Participants Answers for Surveys
13.4.3 Results and Discussion
13.4.3.1 OBJ1: Impact and Relevance of the Artifacts Generated by PAxSPL Execution in Terms of Reengineering
13.4.3.2 OBJ2: The Effort Needed to Perform Each PAxSPL Phase and Activity
13.4.3.3 OBJ3: PAxSPL Reuse Capability
13.5 Concluding Remarks
Appendix
Survey 1 Questions: Participants Information
Survey 2 Questions: Answered After Phase 1
Survey 3 Questions: Answered After Phase 2
References
14 Bottom-Up Technologies for Reuse: A Framework to Support Extractive Software Product Line Adoption Activities
14.1 Introduction
14.2 A Generic Framework for Different Artefact Types: Adapters
14.2.1 Principles to Be Considered in Adapter Development
14.2.2 Design Examples of Adapters
14.2.3 Currently Available Adapters
14.3 Covered Re-engineering Activities
14.4 An Extensible Framework for Different Algorithms and Techniques
14.5 Benchmarking Support for Different Techniques
14.6 Conclusion
References
15 Systematic Software Reuse with Automated Extraction and Composition for Clone-and-Own
15.1 Introduction and Motivation
15.2 Illustrative Example and Basic Data Structures
15.3 Operations
15.3.1 Trace Extraction
15.3.2 Variant Composition
15.4 Workflow and Application Scenarios
15.4.1 Extractive Adoption
15.4.2 Reactive Extension
15.5 Repository Contents
15.6 Tool Implementation
15.6.1 Heterogeneous Implementation Artifacts
15.6.2 Graphical User Interface
15.6.3 Data Visualization
15.7 Evaluation
15.7.1 Setup
15.7.2 Data Set
15.7.2.1 Scenarios
15.7.2.2 Ground Truth
15.7.3 Results
15.7.3.1 Time Performance
15.7.3.2 Precision, Recall, F1 Score
15.7.3.3 Discussion
15.8 Conclusion and Future Work
References
16 Re-engineering Automation Software with the Variability Analysis Toolkit
16.1 Introduction and Motivation
16.2 The IEC 61131-3 Standard
16.2.1 Structured Text
16.2.2 Sequential Function Chart
16.2.3 Function Block Diagram
16.2.4 Ladder Diagram
16.3 Code Clones
16.4 Intra- and Inter-System Clone Detection for IEC 61131-3
16.4.1 IEC 61131-3 Meta-Model
16.4.2 Comparison Metric for IEC 61131-3
16.4.3 Comparison of IEC 61131-3 Model Instances
16.4.4 Matching of Compared Model Instances
16.4.5 Result Presentation
16.5 The Variability Analysis Toolkit for IEC 61131-3
16.6 Analyzing the Pick and Place Unit
16.6.1 The Pick and Place Unit
16.6.2 Case Study Methodology
16.6.3 Results of the Intra System Clone Analysis
16.6.4 Results of the Inter System Clone Analysis
16.6.5 Quantitative Analysis
16.7 Conclusion and Future Work
References
17 Managing Software Product Line Evolution by Filtered Editing: The SuperMod Approach
17.1 Introduction
17.2 Background and Contribution
17.2.1 Relevant Software Engineering Sub-disciplines
17.2.2 Integration of Sub-disciplines
17.2.3 Comparison: SPLE and Revision Control
17.2.4 Filtered Editing and Variation Control
17.2.5 Contribution
17.3 SuperMod by Example
17.4 Architectural and Functional Foundations
17.5 Formal Foundations
17.6 Advanced Functionality
17.6.1 Dynamic Filtered Editing and the Operation Migrate
17.6.2 Multi-User Operation by Distributed Versioning
17.6.3 Product Conflict Detection and Resolution
17.7 Discussion
17.7.1 Connection to SPL Re-engineering
17.7.2 Alignment with SPLE Processes
17.7.3 Conceptual and Technical Maturity
17.8 Conclusion
Resources
References
Part IV Perspectives
18 Challenges and Potential Benefits of Adopting Product Line Engineering in Start-Ups: A Preliminary Study
18.1 Introduction
18.2 Background
18.2.1 Start-Up Ecosystems
18.2.2 Software Product Line Engineering in Start-Ups
18.2.3 Related Work
18.3 Research Design
18.4 Results and Discussion
18.5 Threats to Validity
18.6 Conclusion and Outlook
References
19 Re-engineering Legacy Systems as Microservices: An Industrial Survey of Criteria to Deal with Modularity and Variability of Features
19.1 Introduction
19.2 Background
19.2.1 Microservices
19.2.2 Customization and Variability
19.3 Study Design
19.3.1 Study Phases, Population and Sample
19.3.2 Instrumentation
19.3.3 Rolling Out the Survey and Interview
19.4 Results and Analysis
19.4.1 Participants Characterization
19.4.2 Perception of Criteria Usefulness
19.4.3 Detailed Results and Analysis
19.4.3.1 Variability
19.4.3.2 Microservice Customization
19.5 Related Work
19.6 Final Remarks
References
20 Evolution in Software Product Lines: An Overview
20.1 Introduction
20.2 SPL Evolution: A Brief on Main Concepts
20.3 Backward Propagation: Evolving SPL Assets out of Product Customization
20.3.1 Identify Change
20.3.2 Analyze and Plan Change
20.3.3 Implement Change
20.3.4 Verify Change
20.4 Forward Propagation: Evolving Derived Products Out of Core-Asset Changes
20.5 Conclusion
References
Glossary
Index