Phd Dissertation

Epitaxis: A System for Deductive and Constructive Program Queries

Publication Date

December 30, 2010

Author(s)

Areas of Expertise

Abstract

Modern computer hardware (multi-core, multi gigahertz processors with gigabytes of RAM and terabytes of disk) along with IDEs allows programmers to build computer programs which are bigger and more complex than they can understand or keep in their working memories. Additionally, the problems these programs are designed to model are ever more complicated. Consequently, programs are full of inconsistencies, mistakes, and incompleteness’s. These problems are difficult to detect, difficult to locate, and difficult to correct. Often a change is made by a programmer to fix a problem for which understanding all the repercussions of the change is difficult. Consequently, further bugs are introduced into the code base. Because of the pervasiveness of software in society and the potential severity of the consequences of bugs, software developers need ever better tools to help them understand, navigate, and follow the consequences of their development and maintenance activities. This dissertation presents a novel framework based on tree/graph searching and parsing, deductive retrieval, dynamic analysis, symbolic execution, aspect oriented programming, and an open interpreter to allow a software developer to navigate, locate features, find bugs, and abstract information in software. The system is designed to have a fast modify-test cycle such that the programmer can search and test the software as it is being edited without time consuming recompilation, reinstrumenting, or database repopulating each time an edit is made to the code base. The system is language independent, requiring only files to specify the language grammar, control flow graph transformation, and execution semantics. In addition, because of the flexibility and programmability of the system it is an excellent environment to perform further research on program analysis techniques such as dynamic analysis, symbolic execution and abstract interpretation. A prototype system has been built along with data files for the C programming language which demonstrates the feasibility of the system and its ability to scale to “modern-sized” programs.