Wednesday, March 10, 2010

Program Understanding

I’m starting research into Program Understanding and Program Comprehension. I am doing this research because software maintenance is the portion of the software development lifecycle that takes the most time and money. Some studies claim that software maintenance can consume 60 - 80% of the total cost of a software project.

I would like to create tools and techniques to enable people to get up to speed faster on legacy codebases. To me every code base is legacy, or will be legacy shortly.

The first idea that I want to look at to understand an arbitrary code base is finding how the classes are related. To get a feel the overall structure of the code base, is it a standard “n-tier” architecture, where all dependencies are downward? Is it a client server code base, where there are two distinct pieces that communicate with each other over a well defined boundary? Or is the code the classic “Big Ball of Mud” architecture that is common in tools that have grown organically since they were started.

Wednesday, December 10, 2008

Part 1

So far I have been reading the papers that have been published regarding Java Path Finder. In the paper "Model Checking Programs" by Visser et al. they describe the symmetry reductions that are done in the Java Path Finder code stating that they are closely related to the Partial Order Reduction rules that are described in the Holzmann and Peled paper from 1994.

I have also been reading the Slides "Model Checking Programs with Java Path Finder". It describes two different ways that they are using POR. On the one hand they are using it regarding scheduling relevance, which is the normal domain of POR. This is determining when a thread interleaving matters. On the other hand they are using it to detect race conditions on shared objects.

Monday, November 10, 2008

Series on Java Path Finder

For my class on Formal Methods I'm going to discuss the Partial Order Reduction algorithm that Java Path Finder uses.

I'm going to start explaining the algorithm and the source code that shows how this algorithm is implemented.