ProjectsTopTopIntroduction

Introduction

Theory of Program Schemas
Program schemas define a class of programs, all of which have identical statement structure, but whose expressions may differ. Program Schemas have a well developed theory. We have introduced linear schemas and recently proved that given any two structured schemas which are conservative, linear and free, it is decidable whether they are equivalent. Problems that are expressed in terms of a Control Flow Graph can naturally expressed in terms of Linear Schemas whose theory can be used to verify the decidability of solutions to these problems. We are currently working on other results applying the theory of linear schemas to program slicing.
Program Slicing
Conventionally, Program Slicing simplifies a program, by deleting statements, while preserving a projection of its semantics. Currently, we are investigating the existence of minimal slicing algorithms. We have introduced Amorphous Slicing Unlike conventional slicing, in amorphous slicing all semantics preserving transformations are allowed. We have also developed a theoretical framework of program projection upon which amorphous slicing is based. We are investigating problems with slicing programs with side effects. We have implemented a number of novel slicing algorithms.
Conditioned Slicing using Theorem Provers
Program conditioning involves attempting to simplify a program assuming that the states it reaches at various points in its execution satisfy certain properties. These properties are specified by adding assertions at arbitrary points in the program. Program conditioning relies upon both symbolic execution and reasoning about symbolic predicates and therefore requires some form of automated theorem proving. We have developed systems that perform program conditioning with the aid of theorem provers These are the first fully automated implementations of program conditioning. We are also developing a semantic theory of program conditioning.
Evolutionary Mutation Testing
Mutation Testing involves running slightly corrupted versions (mutants) of your target program through your test suite to see if any test cases flag the variations as defects. This enables us to measure abilty of the test suite to detect bugs. We are developing methods using genetic algorithms where the mutant programs and the test suite co-evolve to form a stronger test suite.

ProjectsTopTopIntroduction