MoDeC is an instrumentor, invoker, and meta-model to collect and model execution traces of Java programs.
To instrument Java programs, extract their execution traces, model these traces as sequence diagrams, and identify occurrences of behavioural and creational design motifs in these traces, you must download and install the following projects:
- MoDeC Bytecode Instrumentation
(and MoDeC Bytecode Instrumentation Tests
) deals with the instrumentation of the bytecodes of the Java programs for which to collect execution traces (called target Java program).
- MoDeC Invoker
allows to simply calls the instrumented Java programs (i.e., to run the instrumented bytecodes of the target Java program.
- MoDeC Metamodel
provides a meta-model of the execution traces produced by the MoDeC Bytecode Instrumentation
and provides a parser to instantiate the MoDeC meta-model to obtain models of execution traces.
- MoDeC Solver
(and MoDeC Solver Tests
) defines constaints and problems to identify occurrences of behavioural and creational design motifs in the MoDeC models of execution traces.
Here are the three main steps to gather execution traces of some target Java program and identify occurrences of behavioural and creational design motifs in their MoDeC models.
modec.util.Instrumentor.instrumentClasses(String)
, see examples in modec.util.Instrumentor.main(String[])
. The input of the instrumentClasses(String)
method is a file describing:MoDeC Bytecode Instrumentation Tests/Input Files/Evaluation of ArgoUML v0.19.8.txt
. The list of paths to the Java class files to instrument can be generated using modec.tool.helper.ClassFileListGenerator.main(String[])
.modec.tool.Invoker.invokeMainClass(String)
, see examples in modec.tool.Invoker.main(String[])
. Running the invoker will launch the instrumented target program and open a new window. The new window shows only one button and a text field, used to insert marks (also called tags) at any user-chosen appropriate moment in the collected execution traces, for example before and after executing some particular feature.