Cedric Reichenbach. DoodleDebug — A shot-gun marriage between System.out.println and object inspectors. Master’s thesis, University of Bern, 2013. Details.
Developers need effective ways to inspect and explore the run-time state of programs they are developing and debugging. Modern debuggers and object inspectors are powerful tools, but they can only be used to explore specific points in the execution where breakpoints have been set. As a result, developers often resort to inserting print statements in code to log the state at multiple points in the execution. Print statements, however are a "poor man’s debugger", since their output is static and cannot be further explored. We propose to combine the simplicity of print statements with the graphical sophistication and interaction of modern debugging tools. DoodleDebug is a simple API modeled loosely after Java’s System.out.println. Objects that are "printed" generate graphical views that can be further explored, and can also be used to navigate back to source code in the IDE. We introduce DoodleDebug and present the results of a usability study that shows that DoodleDebug can be very effective for common debugging tasks.
Attieh Sadeghi Givi. Layout Sensitive Parsing in Petit Parser Framework. Bachelor’s thesis, University of Bern, October 2012. Details.
Most parser frameworks can parse a context-free language generated by different context-free grammars. However, many languages are not context-free. One important class of such languages is layout-sensitive languages (eg Python, Haskell), in which the structure of code depends on indentation and whitespace. The parsers (and lexers) of this kind of languages are not declaratively specified but hand-tuned to account for layout-sensitivity. To support parsing of layout-sensitive languages, we propose an extension of parsing expression grammars in which a user is able to declare layout-sensitive specifications. For example, a user can declare a consisting block of statements to be aligned and arbitrary positioned. We have implemented our extension in a Petit Parser framework. We evaluate the correctness and performance of our parser by parsing Python- and Haskell-like grammars.
Marcel Hlopko, Jan Kurs, and Jan Vrany. Towards a Runtime Code Update in Java. In DATESO 2013, p. 13—25, Technical University of Ostrava, Ostrava, 2013. Details.
Runtime Code Update is a technique to update a program while it is running. Such a feature is often used so the developer can modify an application without the necessity to restart the application and recover desired state after restart. This saves time and lowers costs. Furthermore, there are applications which cannot be stopped, such as air traffic control systems or telephone switches. Current virtual machines for Java programming language do not support non-trivial updates to the running code. We have modified STX:LIBJAVA - an implementation of Java virtual machine within Smalltalk/X - to support arbitrary changes to the running code. Beside changes to the fields and methods which are already supported by the tools such as JRebel or Javaleon, we also support unrestricted changes to the class and interface hierarchy. Our Runtime Code Updates scheme has been integrated into the Smalltalk/X IDE, thus providing interactive environment where a developer can modify a Java application while it is running.
Erik Aeschilmann, Mircea Lungu, Oscar Nierstrasz, and Carl Worms. Analyzing PL/1 Legacy Ecosystems: An Experience Report. In Proceedings of the 20th Working Conference on Reverse Engineering, WCRE 2013, 2013. to appear. Details.
This paper presents a case study of analyzing a legacy PL/1 ecosystem that has grown for 40 years to support the business needs of a large banking company. In order to support the stakeholders in analyzing it we developed St1-PL/1 — a tool that parses the code for association data and computes structural metrics which it then visualizes using top-down interactive exploration. Before building the tool and after demonstrating it to stakeholders we conducted several interviews to learn about legacy ecosystem analysis requirements. We briefly introduce the tool and then present results of analysing the case study. We show that although the vision for the future is to have an ecosystem architecture in which systems are as decoupled as possible the current state of the ecosystem is still removed from this. We also present some of the lessons learned during our experience discussions with stakeholders which include their interests in automatically assessing the quality of the legacy code.
Michael Morelli. How to use Javassist for Polymorphism detection. Bachelor’s thesis, supplementary documentation, University of Bern, September 2010. Details.
This document is an introduction to the Javassist bytecode manipulation library and shows how to use it for polymorphism detection.