Skip to content

System evolution analysis

Silvio Montanari edited this page Jan 10, 2017 · 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 total number of revisions for each layer or subsystem.
  • The second analysis tracks the absolute churn, as total 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).

Here's 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:

System evolution diagram - churn

On the other hand the coupling between the different architectural layers in time is represented through a stacked bar chart:

System evolution diagram - coupling

Clone this wiki locally