symfinder Demos

This site references all demos of the symfinder toolchain.


SPLC 2019 Experiments

This page summarizes the experiments conducted on several projects with symfinder, as reported in the papers published at SPLC 2019.

The output visualization of symfinder for all projects is deployed here.

Observed Results

JFreeChart

JFreeChart is a Java charting library which helps in drawing charts of all types.

We observe in the visualization generated from this project the presence of variability at several places:

  • The different entities that compose a chart

Entities composing a chart

  • The different types of plots that can be created

Types of plots

These detected variation points and variants can be linked to the features:

Types of plots

  • The different periods of time that are used in temporal plots

Time periods

Java 8 AWT

AWT (Abstract Window Toolkit) is Java’s original toolkit to build graphics, windows and user interfaces, before Swing. Still, AWT is used as the core of Swing.

As this framework helps in building graphics and figures, we can expect variability in the implementation of the different types of shapes that can be drawn. This is indeed the case when we analyze the visualization. Here is shown an excerpt exhibiting Shape as a variation point and having multiple variants being variation points too representing different kinds of shapes:

  • polygons (vp_Polygon)
  • rectangles (vp_Rectangle2D)
  • lines (vp_Line2D)
  • ellipses (vp_Ellipse2D)
  • arcs (vp_Arc2D)

Shapes

JavaGeom

JavaGeom is a Java library that provides methods to easily perform geometric computations, such as intersections of lines, clipping of polygons, transformation shapes, perimeter and area computations.

JavaGeom’s visualization exhibits a single zone of high density of variability corresponding to the different types of 2D figures that can be drawn.

JavaGeom

We can note that we find elements of variability similar to Java AWT’s, which can be expected as both frameworks provide support for drawing figures.

We can also see that 3D shapes do not share any inheritance relationship with classes corresponding to 2D figures.

Apache CXF

Apache CXF is an open source services framework that helps to build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.

Apache CXF consists of one single repository. We analyzed the core of CXF, which contains the implementation of all the wiring between the different parts of the framework.

The main variability concentration zone corresponds to the interceptors. Interceptors constitute an important part of CXF by allowing the user to intercept messages and process them.

CXF interceptors

The official documentation explains more precisely how interceptors are used in CXF, and provides examples of interceptors:

  • SoapActionInterceptor
  • StaxInInterceptor
  • Attachment(In/Out)Interceptor

These examples therefore constitue variants of interceptors, which we can see on the excerpts above and below.

CXF phase interceptors

JHipster

JHipster is a configuration tool which helps in building Web apps or microservice architectures. It can be described as a SPL offering configuration for:

  • Client side technologies
  • Server side technologies
  • Deployment platforms
  • Continuous Integration and Deployment

JHipster

The overall codebase of the project is split in several repositories and written in different languages. The analyzed project is only JHipster’s server-side library, which is implemented in Java and used in the generator. This server-side mainly consists of implementation classes with no real variability structure. It is likely that the variabiity captured by JHipster will be visible in the other parts such as the generator. In future work, we aim to extend symfinder to be able to parse JavaScript code and be able to analyze variability in projects using several languages.

Apache Maven

Apache Maven is a build automation tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

Maven

The figure above is an overall view of Maven. We do not distinguish as much variability concentration as in other projects clearly showing variability, but we can see the presence of numerous interfaces being implemented by only a single class. These interfaces constitute variation points as they already provide an abstraction to ease the creation of other variants.

interface implementation zoom

Maven uses plugins to define the different build steps. Some of them are considered as “core plugins” (such as clean, install or deploy) but their implementations are not part of the main Maven repository. As a result, no relevant variability places is really emerging. In future work, we aim to extend symfinder to be able to analyse sources from several repositories at once, so that be able to study this kind of organization.

JUnit

JUnit is a unit testing framework for Java. Its source code is concentrated in a unique repository.

JUnit

Most of JUnit is an engine which runs unit tests. This explains why we do not find many variability implementations in the resulting visualization.

ArgoUML

ArgoUML is an application allowing the user to build UML diagrams. It supports all standard UML 1.4 diagrams. Its source code is available here.

This code refactor allows us to view some implementations of variability, after having filtered some classes and packages:

  • The following excerpts shows variants of ArgoFig, representing an element of a diagram

ArgoUML states

  • By zooming on the variant FigStateVertex (which represents an element of a state chart), we can distinguish variants of states such as the initial and final states, as well as shallow and deep history states. (which is itself a variation point as it represents )

ArgoUML states

  • The creation process of the different UML diagrams, achieved with factories inheritance.

ArgoUML factories (only vps)