Skip to content

System evolution analysis

Silvio Montanari edited this page Jun 28, 2018 · 5 revisions

Description

This type of analysis lets you investigate the whole system from the outside-in, allowing you to separate the significant layers of the architecture and observe how they evolve in time and how they may depend on each other.

Tasks

system evolution analysis

This task actually executes and combines three separate reports into a single one, as each report gives a different perspective to the same investigation and, like different pieces of a bigger puzzle, its information is most relevant when incorporated with the others.

  • The first analysis tracks the number of revisions for each layer or subsystem.
  • The second analysis tracks the absolute churn, as number of lines of code added and deleted, again for each layer or subsystem.
  • The final report is basically a temporal coupling analysis performed at a higher level of abstraction than the individual module/file, where the data is aggregated for each layer/component of the overall system architecture.
Usage
$ gulp system-evolution-analysis [--dateFrom=<dateFrom>] [--dateTo=<dateTo>] [--timeSplit=<timeSplit>] [--layerGroup=<layerGroup>]
  • The layerGroup parameter is not mandatory (if not present the results will be aggregated for one single layer that is the whole system), however it is very important and you should use it to run different analyses depending how you want to slice your system. See Configuration on how to define different layer groups.
  • The timeSplit parameter again determines how to split the time interval into periods of time that are meaningful for the collection of the results.

I suggest you play with the possible values of these parameters in order to understand the effect they have on the analysis and the different learnings you can infer. See Tasks parameters.

Visualisation

The results from the first two reports are represented through typical line charts. It is important to note that the the shorter the chosen time split the more values are plotted in the diagram, therefore the more accurate is the curve interpolation (however this is not necessarily a reason to keep the time split very short).

Below is an example of a diagram representing the revision trend.

System evolution diagram - revisions

The chart for the code churn is very similar. You can play with the controls on the left side of the diagram to show and hide a particular curve or a group of curves.

Note: pay attention to the different meaning of the Total and Cumulative metric trends. The Total number of lines of code (together with Added and Deleted) still refers to the metric value within the time interval determined through the timeSplit parameter. On the other hand, the Cumulative metric is the value accrued (or accumulated) through the entire period of the analysis.

System evolution diagram - churn

The coupling between the different architectural layers in time is represented through a stacked bar chart.

System evolution diagram - coupling

Clone this wiki locally