SoMoX

Aus SDQ-Wiki

Somox-logo01.png

SoMoX - SOftware MOdel eXtractor. Reverse engineers software component models from source code. The component extraction supports basic components, composite structures, interfaces, ports, as well as connectors. The extracted models are suitable to improve understanding of existing software and enable further quality analyses. Analyses for software performance, reliability, and maintenance are already available as part of a complementary tool chain [1][2]. SoMoX extraction is based on the evaluation of multiple source code metrics. The Extraction can be guided by metric settings which allow the adaptation of SoMoX to the specific component definitions and needs of individual projects. Currently, SoMoX supports source code of the languages C/C++, Delphi, and Java. However, its general source code model can be easily extended to further programming languages. SoMoX has been developed within the context of the EU project Q-ImPrESS.


SoMoX is the successor of ArchiRec.

A composite component reverse engineered by SoMoX
Screenshot of the metric configuration run config
Q-ImPrESS repository editor with a component reverse engineered by SoMoX

SoMoX Versions

The current code repositories related to SoMoX are listed at SoMoX/Development

The latest SoMoX version uses an JDT-based version of JaMoPP as its backend (see SoMoX/Development).

Previously, SoMoX was available with three additional backends:

  • SISSy (outdated, originally shipped with Q-ImPrESS) [3]
  • MoDisco [4]
  • DevBoost JaMoPP [5]


SoMoX Installation

SoMoX is available as an Eclipse update site.

SoMoX-Modisco

SoMoX-JaMoPP

  • install an Eclipse modeling framework.
  • install EMFText 1.4.1 from Marketplace (Help > Eclipse Marketplace) or from EmfText (Help > Install New Software)
  • install JaMoPP from JaMoPP updateseite (Help > Install New Software)
  • install SoMoX-JaMoPP from SoMoX-JaMoPP updateseite (Help > Install New Software)

Q-ImPrESS
If you are looking for the (older) SoMoX release that resulted from the Q-ImPrESS project and is integrated in the Q-ImPrESS toolchain, follow the Q-ImPrESS tooling installation instruction. The Q-ImPrESS version is based on SISSy, produces an SAMM instead of a PCM component model and includes complementing features such as:

  • Maintainability and Cost Estimation Tooling
  • Architecture Alternatives Design Evaluation
  • All-In-One Eclipse Update Site

This version of SoMoX was based on Eclipse 3.5 and integrated with the Q-ImPrESS toolchain.

Using SoMoX

1. Create the Java and Inventory Model.

Somoxrun01model.png

2. Then set DEEP_ANALYIS and SERIALZE_TARGET true. If you expect to extract a large model, you should also uncheck 'Open model in editor after discovery'.

Somoxrun02savemodel.png

2.1 Add the libs

Somoxrun02-1savemodel.png

2.2 In the Blacklist Tab: Select all except the code you want to analyse

3. Create a new SoMoX launch configuration. Select the project and the java2kdm.xmi file.

Somoxrun03runconfig.png


Intepreting the results

If you are interested in the top-most composite components only, simply open the last composite component entries from the "model/internal_architecture_model.samm_repository" file. The more to the end of the list of composite components a component is, the later was the iteration it was created it. Thus, it is a more abstract component.

Limit the reverse engineering scope

You have one major option to limit the information present in the reverse engineered model. You can blacklist classes and packages in the run configuration of SoMoX ("Launch Simple Model Analyzer") and the run configuration tab of "Q-Impress Reverse Engineering" in the "Metrics Configuration > Blacklist" tab. Here you can either specify a regular expression or in case of the "Launch Simple Model Analyzer" additionally pick blacklisted items in the package tree. A blacklist regular expression is for example of the format "java.*|javax.*" to exclude tha Java Libraries.

Blacklisting Settings

Default Blacklist Setting for Java-based systems:

java\..*|javax\..*

Other common libraries to exclude:

junit\..*|org\.apache\..*

Details on metric results and intermediate steps

In case you want more insights into the metrics calculation, you can switch on the "ALL" logging level in the "Common" tab of the run configuration. If enabled, the console output contains the metric details. Furthermore, in the "model/dotClusterTrace" folder graphs of the different iterations are present in the dot format. The dotty viewer [6] can open that graph format.

Result Visualisation

Hyperbolic Tree Visualisation for large systems

Use the context menu to initiate the Hyperbolic Tree Visualisation

The Hyperbolic Tree Visualisation allows for interactive navigation through large software systems

Repository editor for smaller systems

Use the context menu to initiate a new Repository Editor

The repository editor for reverse engineered components

Documentation

Get in Contact

Related Articles

Related Papers

Pattern-based Reverse Engineering Approaches]


Keywords: SoMoX, Reverse Engineering, Architecture Reconstruction, ArchiRec, Architectural Reverse Engineering, Reengineering, Static Architecture, Software Component Model