symfinder Demos
symfinder
symfinder is a toolchain built in order to automatically identify and visualize symmetries in object-oriented systems written in Java. These symmetries are helping in determining variation points and variants in large code structures.
It is composed of four distinct parts:
- sources fetching
- C++ sources preprocessing
- symmetry identification
- visualization
Click on the image to view full size
Sources fetching
symfinder is able to clone projects versioned under git and checkout the desired tags and/or commits using Bash and Python scripts.
C++ sources preprocessing
When analysing a C++ project, sources may contain macros that are potentially used to implement variability. These macros then need to be expanded to be able to detect such variability implementations. First, the macros definitions are identified and extracted using an ANTLR grammar. Then, the C preprocessor uses these definitions to expand macro calls.
Symmetry identification
This part is the heart of the toolchain. A Java engine parses the classes of the projects using Eclipse JDT parser and builds a graph representation of the source code in a Neo4j graph database. Then, local symmetries are identified and added to the graph database.
Visualization
Once all the symmetries have been identified, a subpart of the graph is exported in JSON and used as input for the D3.js visualization. We chose not to directly use the visualization provided by Neo4j as a D3.js visualization is written in JavaScript and hence only needs a web browser to be displayed. Furthermore, D3.js provides plethora of chart types and customization features.
Demos and experiments
SPLC 2019
Analysed projects:
- Java AWT
- Apache CXF 3.2.7
- JUnit 4.12
- Apache Maven 3.6.0
- JHipster 2.0.28
- JFreeChart 1.5.0
- JavaGeom
- ArgoUML
SPLC 2019 community projects
VaMoS 2020
SPLC 2020
SPLC 2020 community projects
Analyzed C++ projects
Documents
Publications
-
Xhevahire Tërnava, Johann Mortara, and Philippe Collet. 2019. Identifying and Visualizing Variability in Object-Oriented Variability-Rich Systems. In 23rd International Systems and Software Product Line Conference - Volume A (SPLC ’19), September 9–13, 2019, Paris, France. ACM, New York, NY, USA, 12 pages.
Download the preprint paper here. -
Johann Mortara, Xhevahire Tërnava, and Philippe Collet. 2019. symfinder: A Toolchain for the Identification and Visualization of Object-Oriented Variability Implementations. In 23rd International Systems and Software Product Line Conference - Volume B (SPLC ’19), September 9–13, 2019, Paris, France. ACM, New York, NY, USA, 6 pages.
Download the preprint paper here. -
Johann Mortara, Xhevahire Tërnava, and Philippe Collet. 2020. Mapping Features to Automatically Identified Object-Oriented Variability Implementations: The case of ArgoUML-SPL. In Proceedings of the 14th International Working Conference on Variability Modelling of Software-Intensive Systems (VaMoS ’20), February 5–7, 2020, Magdeburg, Germany. ACM, New York, NY, USA, 9 pages.
Download the preprint paper here. -
Johann Mortara, Philippe Collet, and Xhevahire Tërnava. 2020. Identifying and Mapping Implemented Variabilities in Java and C++ Systems using symfinder. In 24th International Systems and Software Product Line Conference (SPLC ’20), October 19–23, 2020, Montréal, Canada. ACM, New York, NY, USA, 4 pages. Download the preprint paper here.
Presentations
-
Get the SPLC 2019 presentation here.
-
Get the VaMoS 2020 presentation here.
-
Watch the SPLC 2020 presentation on YouTube.
-
symfinder has also been presented at the Journée 2020 du GT Vélocité Logicielle. Get the presentation here.
Get symfinder
You can get symfinder on its GitHub repository.