On this page I provide some tools for download, which I developed during research.
Behavior Compliance Control
This project deals with addressing potential problems of outsourcing computations to cloud environments. We propose different approaches that are based on methods from dynamic anomaly detection to provide clients with trustworthy evidence about the runtime behavior of outsourced applications. In this setting, it is important that clients can check the evidence efficiently. In a hybrid cloud scenario, our approach permits (and in all generality requires) re-performing a small fraction of computations in the private cloud, the bulk of the workload must still execute in the public cloud for the approach to pay. Our approach can be fully automated, it requires no manual intervention. Read more here
Join Point Interfaces
Join point interfaces allow for truly modular type checking in aspect-oriented programs, for the first time completely de-coupling aspect code from base code. Read more here.
Closure Joinpoints for AspectJ
Several people have previously proposed to add Block Joinpoints to AspectJ. Closure Joinpoints are the right way to do it. In our AOSD 2011 paper I show that simple Block Joinpoints do not suffice. You can download our implementation here.
TamiFlex: Taming Reflection during static analysis
TamiFlex is our tool suite for “taming reflection. It allows you to statically analyze – much more thoroughly as without TamiFlex – programs that use reflection and dynamic class loading.
Clara is my framework for partially evaluating runtime monitors ahead of time, i.e., at compile time.
RacerAJ is an AspectJ based implementation of the Racer algorithm, a variant of Eraser. It allows you to detect data races in Java and AspectJ programs at runtime. The implementation of RacerAJ is based on three novel pointcuts that we implemented as an extension to the AspectBench Compiler.
I provide an introduction to Soot 2.2.5 here.
J-LO, the Java Logical Observer
J-LO is a tool for runtime-checking temporal assertions, which I developed for my Diploma thesis at RWTH Aachen University. You can find all information about it, including downloads, here.
Generate clone() plugin for Eclipse
Ever had to deal with cloning of object structures in Java? As my study showed, there is actually a lot that can go wrong with this and many people do get it wrong all the time. Hence, why not have a plugin for Eclipse that helps you generate clone() methods semi-automatically? I have written exactly such a plugin. It first of all detects four different code smells with respect to cloning and in addition offers you to correct those smells by generating a correct implementation of clone().
Static optimizations for tracematches
As I describe on my research page, I have developed several static analyses to speed up runtime verification using tracematches, and sometimes even match tracematches against a program completely at compile time. All those analyses are available in the AspectBench Compiler and for download at the compiler’s website.
AspectJ library for fault tolerance
As a course project at McGill, I developed a little library for fault tolerance, written in AspectJ 5. It contains two components:
- Support for automatic N-Version programming.
- A full implementation of a recovery cache.
The fundamental concepts involved are explained in Joerg Kienzle’s lecture slides. N-Version programming basically allows you to implement several different versions of an algorithm. With the library, those versions are then automatically run in parallel, synchronized and a voter decides the overall outcome of the concurrent computation (usually voting based on a majority vote). Here is some example code:
VersionGroup1 version1 = new Version1(); VersionGroup1 version2 = new Version2(); VersionGroup1 version3 = new Version3(); Voter v = new ExceptionalMajorityVoter(); VersionGroup group = new VersionGroup("group1",v,1,TimeUnit.SECONDS,version1,version2,version3); VersionGroupRegistry.v().registerVersionGroup(group); System.err.println(version1.compute(1));
This snippet of code associates three versions with the same group. In the last line, where we kick off the computation, an around-advice will automatically start all three versions and then return the voted result instead of the original one.
The recovery block on the other hand allows you to do checkpointing on the fly: Just call the checkpoint method, do some state changes and then, for instance in case of an exception, call restore(). All the previous heap state will be restored for you.
The library can be downloaded in the form of two Eclipse projects here:
Example clients are included. The code is made available under the BSD license.
Aspect-oriented approaches targeting the .NET Framework
There exists a survey Aspect-oriented approaches targeting the .NET Framework of which I prepared for the the article bit-Fabrik: Zweigstelle, Hauptstelle, Dienstleister: Aspektorientierte Programmierung mit .NET that I co-authored with Torsten Weber.