SPLevo/Variation Point Analysis
A core concept of the SPLevo approach is the analysis of the variation points cluster them into more coarse grained variation points. Further information about the development of VPMAnalyzers can be found in the development section: VPM Analyzer Development
Analalysis Strategies
A set of initial variation point analysis strategies has been identified as described in the following.
Code Location
The Code Location analysis considers variation points as related if located in the same parent software element (e.g., variation points of varying statements in the same method).
Program Structure
The Program Structure analysis identifies dependencies between variation points' software artifacts (e.g., a variable declaration and the import of the declared type).
Data Dependency
The Data Dependency analysis identifies relationships between variation points of software elements which potentially influence each other because of common data objects they manipulate or access. In a similar way, the architecture of a system identifies components which indirectly exchange data with each other (e.g., through a common data store). Again, there might be no obvious connection in the implementation due to a loose coupling.
Program Execution Traces
Program Execution Traces represent program flows monitored during the execution of one or more features. Such traces can be gathered, for example, by instrumenting a software before its execution. As variation points represent locations of variability, relationships are identified between variation points with locations reached by the same execution trace. Execution traces can become very large depending on their granularity. The information which components are out of scope can be used to filter out parts of the execution traces during the trace recording or before the analysis and speed up the analysis.
Change Types
A Change Type describes a modification of a software entity (e.g., a constructor added to a class). Considering the differences between variants of a variation point as a change, variation points containing differences with the same standardized type of change can be related to each other (e.g., all variation points with a constructor added to a class).
Change Pattern
A Change Pattern is similar to a change type and describes the modification between the variants of a variation point, but can involve multiple software entities and can be specific to the system under study. For example, added constructors which require a boolean parameter, that is checked for a null value in a conditional statement within the constructor. Note: There are change patterns which are more for code beautifying or other common code improvements but not relevant for feature variability. This has to be handled in addition to the variability related change patterns covered by this analyzer. Especially, the same change pattern could be relevant to variability in one product, but code beautifying in the other.
Cloned Changes
The cloned change analysis applies a clone detection to the code changes of the variation points. For example, if variation points are about a set of added statements, the clone analysis is applied to those statements to check if the same functionality has been added at several locations.
Semantic Relationship
The Semantic Relationship analysis benefits from developers introducing semantics not only in comments but also in names of variables, methods and classes. Semantic code clustering techniques can be used to find related variation points based on terms included in the code of their varying software elements.
Common Modifications
The Common Modifications analysis investigates in changes performed for the same intention and identies relationships between variation points linked with those changes. Common modifications are typically committed at once into a revision control system (e.g., svn or git). The analysis can cluster based on single commits or even multiple commits with equal commit messages or contained issue identifiers.