|
News
There is now an Eclipse plug-in for jMoped,
see the new jMoped page.
To keep jMoped compatible with Moped version 2, we are now offering
jMoped version 2, which translates Java bytecode into Remopla
instead of pushdown rules.
Overview
Java compilers produce so-called bytecode, a kind of machine
language interpreted by the Java Virtual Machine. jMoped can translate
this bytecode into pushdown systems, which are the input of
Moped. Moped can then be used to check
reachability and LTL properties of the translated system.
Although, some details have been changed
since the introduction of the Remopla language,
the idea of the translation process
is explained in great detail in Remy's
Master thesis
and TACAS'05 paper.
Downloads
Requirements
jMoped requires Java 5.0 or later. Eclipse
is recommended to compile the source.
Set-up procedures
Since version 2.2.3, jMoped should run without initial set-ups.
Usages
jmoped [-<options>] <file>
<file> can be either Java file or class file.
Running jMoped without an option will produce a Remopla file
having same name as file but with .rem extension.
Running just jmoped will display available options.
Options that effect the output of jMoped are:
-n |
adds some instructions into the Remopla output,
which will make the label NPE reachable
if a NullPointerException occurs. |
-o<outfile> |
sets the output file to <outfile> |
-s |
symplifies labels of the Remopla output.
This option only works when no two methods have the same name. |
-t |
uses another translation technique for heap manipulation.
There is still no documentation at the moment.
However, this option is supposed to work better with large programs. |
There are also some options in the case where Moped is called directly
from jMoped. Theses options are basically passed to Moped without
effecting the translation results. Make sure that the path
to Moped executable in jmoped.conf is set correctly.
-a |
runs Moped for checking reachability of the label,
which indicates an assertion violation. |
-e |
runs Moped for checking reachability of the label,
which indicates a NullPointerException. |
-h |
runs Moped for checking reachability of the label,
which indicates a heap overflow. |
-r<label> |
runs Moped for checking reachability of <label> |
There are example files in ex/ subdirectory.
It contains some examples that should give
some ideas how to use jMoped.
For example, jmoped -a ex/QuickSort.java
will check for assertion error of an quicksort implementation.
Configurations
This version of jMoped includes a file named jmoped.conf,
which is the configuration file that tells how the translated file
is going to look like. The most important parameters are
"bit" and "heap size". "bit" tells how many bits integers inside the
program will have (default=4). "heap size" tells the size of the heap
which will directly effect the number of objects can be instantiated in
a Java program (default=15).
Limitations
The current jMoped supports common Java features,
however some obvious limitations are:
- Negative integer is not supported.
- Multi-threading is not supported.
- Very limited support of String.
- Programs that use Java library might not work correctly,
since they sometimes involve native library.
Changes
- 17.11.06: Version 2.2.3, classpath look-up procedure changed.
- 07.11.06: Version 2.2.2, bug fix in command-line option --bits=<n>.
- 11.10.06: Version 2.2.1, first public release of jMoped version 2.
jMoped version 1
This is the old version of jMoped, created for Moped version 1.
Downloads
Changes
- 15.10.2004: Version 1.0.0, initial release of the tool
- 20.10.2004: Eliminated the requirement to have Spin installed
- 11.04.2005: Version 1.0.1, use Java-supported assert() instead of special
error() method. Counterexamples are translated back to Java statements.
- 13.04.2005: Bug fixed, incorrect path while including class files
- 15.04.2005: Another example (BinaryHeap.java) added
Contact
jMoped is written and maintained by
Dejvuth Suwimonteerabuth.
Links
|
|