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 . 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.
SoMoX is available as an Eclipse update site.
- install an Eclipse Juno 4.2: http://www.eclipse.org/downloads/packages/eclipse-classic-421/junosr1
- install SoMoX from the Update Site: http://sdqweb.ipd.kit.edu/eclipse/somox/nightly/
If you are looking for the 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.
1. Create the Java and Inventory Model.
2. Then set DEEP_ANALYIS and SERIALZE_TARGET true.
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.
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  can open that graph format.
Hyperbolic Tree Visualisation for large systems
Repository editor for smaller systems
- SoMoX Metric Documentation (PDF) (Thanks to Henning Hager for providing the documentation)
- "Reverse Engineering Component Models for Quality Predictions" Publication on SoMoX BibTeX
- Publication on ArchiRec (the predecessor of SoMoX) BibTeX
- Screencasts on the Q-ImPrESS reverse engineering approach
Get in Contact
- SoMoX/Development/Getting Started
- SoMoX/Development/SAMM to PCM Migration
- Beagle - Component Behaviour Reverse Engineering
- SoMoX/Change Impact Case Study
- Browse OW2 SVN Repository
- [http://subs.emis.de/LNI/Proceedings/Proceedings184/P-184.pdf#page=38 Travkin, Detten and Becker: Towards the Combination of Clustering-based and
Pattern-based Reverse Engineering Approaches]