From SDQ-Wiki
Jump to: navigation, search


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.

Websites: and

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

Currently, SoMoX is availble with three different backends:

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

SoMoX Installation

SoMoX is available as an Eclipse update site.


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.


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'.


2.1 Add the libs


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.


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:


Other common libraries to exclude:


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


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