In my PhD research work I developed the following software tools:
- LEVER – Learning to Verify. Lever can be used to verify specifications or a high level design models for software. It uses learning techniques to verify that the program meets its specifications.
- DiAna – Distributed Analyzer (This was joint work with Koushik Sen). This implements monitoring of a distributed system using a simple but intuitive logic.
Other tools that I have found very useful:
One very useful tool for finding memory leaks and errors is Valgrind . This tool essentially runs the program under test in a simulated environment and instruments the code to watch out for various errors. I have used Valgrind for a number of debugging sessions and have always found it useful. It turned out for one example, I had a very subtle memory corruption bug in some library code and I tried to find the bug using other methods like printing, gdb and plain old looking at the code, but was getting quite frustrated. I then downloaded Valgrind and ran the same programm under Valgrind. Though it took some time to run, but it was a lifesaver. Valgrind even pointed out to the likely culprit in the code. Installation was fairly easy and instructions webpage were quite useful. I recommend Valgrind to anyone who is doing C or C++ programming and uses pointers