Projects
AutoProof
During my PhD studies I was the main developer of AutoProof, an automated verifier for functional properties of Eiffel programs. AutoProof takes a contract-equipped Eiffel program and verifies that each function satisifes its postcondition whenever the precondition is satisfied. As an example of what AutoProof can do, take the following procedure of a clock class that increases the clock by one minute. It contains an obvious error on line 106, as it increases the number of minutes by 2 instead of 1.
increase_minutes -- Increase 'minutes' by one. note explicit: wrapping require modify_model (["minutes", "hours"], Current) do if minutes = 59 then set_minutes (0) increase_hours else set_minutes (minutes + 2) end ensure hours_set: old minutes = 59 implies hours = (old hours + 1) \\ 24 hours_set: old minutes < 59 implies hours = old hours minutes_increased: minutes = (old minutes + 1) \\ 60 end
The procedure contains a frame condition in the precondition - describing what the routine may modify - and a postcondition that describes the effect of the routine. Running AutoProof on the clock class that contains this procedure will result in the following output.
AutoProof spots two errors. First, the call to set_minutes
might fail as the function argument is restricted to the values between 0 and 59, but when the current value is 58 the call will fail. Second, the postcondition minutes_increased is violated as it states that the minutes attribute is only increased by 1. You can try it yourself (and fix the mentioned error).
AutoProof is available for download as part of the open-source Eiffel Verification Environment IDE or via an online interface. A list of example algorithms and programs that have been verified with AutoProof, for example sorting algorithms or a simple board game application, are available in an online repository.
Verification Assistant
The Verification Assistant is tool that automatically launches different verifiers and checkers in the background. A prototype, integrated in the Eiffel Verification Environment IDE, utilizes three different types of tools:
- AutoProof: an automated verifier.
- AutoTest: an automated testing tool based on random testing.
- Eiffel Inspector: a light-weight static code checker.
The Verification Assistant takes care of launching the tools in the background and aggregates their results in a single display. This display uses a scoring system that combines the results of the various tools in a single correctness score which give the developer a broad overview of the state of the program.
SeaBlast
During the ETH Master's course Game Programming Lab we have developed a submarine action game with a group of three people. The game features a 2D underwater playing field visualized using 3D graphics. A fluid-dynamics simulation is used to model underwater currents that influence the ships and weapons.
The game offers a campaign mode that can be played alone or cooperatively and a skirmish mode for up to four players. An AI takes on the role of the adversary in the campaign mode and can also substitute players in the skirmish mode.
My contribution to the project was the overall system architecture and development of the game engine, artificial intelligence, and user interface.
Drupal Modules
For several years I was active in the Drupal community. I have developed several modules that help build a Wiki with Drupal:
- The Wikitools module: Provides wiki behaviour for the Drupal website by handling requests to a specific area of the website. Nodes are identified by their name and links to inexistent nodes trigger a prompt to create a new node.
- The Recent Changes module: List of recent changes including all subrevisions for the nodes. The module provides an RSS feed to easily follow the development of a website.
- The Diff module: Reimplementation of the diff module to show differences between node revisions using the same diff-engine that MediaWiki uses.
- The PEAR Wiki Filter module: Allows the use of various different wiki syntaxes as input filters.
Since I stopped developing Drupal modules a few years ago, all of these modules are now either maintained by other people or made obsolete.