Thomas W. Reps

Professor
Computer Sciences Department
University of Wisconsin-Madison
1210 West Dayton Street
Madison, WI 53706-1685
USA

E-mail: reps at cs.wisc.edu
Telephone: (608) 262-2091
Secretary: (608) 262-0017
Department: (608) 262-1204
Fax: (608) 262-9777
Finger information

Some Maps: Campus Map | Campus-to-Capitol Map | City Map | Regional Map

Ph.D., Cornell University, 1982 (Curriculum Vitae)

Research Interests:

See also the home pages of the Wisconsin Program-Slicing Project, the Wisconsin Safety Analyzer Project, and the CMU-UW Software Model Checking Project, as well as Citeseer or DB&LP


Table of Contents


Disclaimer

This web page contains links to PostScript files of articles that may be covered by copyright. You may browse the articles at your convenience (in the same spirit that you read a journal article or an article from a conference proceedings in a public library). Retrieving, copying, or distributing these files may violate copyright law.

Please note that the definitive versions of these papers are the published versions. The PostScript versions are provided here as a courtesy, and, in some cases, there may be differences between the PostScript provided here and the published version. We believe that all of the differences are either formatting differences or copy-editing changes. If you cite these papers, please cite the published version rather than giving a URL.

[Back to the Table of Contents]


Research Summary

The goal of my research is to create tools that support the development of complex software systems. The aim is to create tools that help programmers develop correct, reliable, and secure software by providing powerful operations for manipulating programs and analyzing their properties.

I have carried out a great deal of work exploring how program slicing can serve as the basis for such program-manipulation operations. The slice of a program with respect to a set of program elements S is a projection of the program that includes only program elements that might affect (either directly or transitively) the values of the variables used at members of S. Slicing allows one to find semantically meaningful decompositions of programs, where the decompositions consist of elements that are not textually contiguous. Program slicing is a fundamental operation that can aid in solving many software-engineering problems. For instance, it has applications in program understanding, maintenance, debugging, testing, differencing, specialization, reuse, and merging. Projects that my co-workers and I carried out have been aimed at

(Click here for the home page of the Wisconsin Program-Slicing Project.)

We were also able to establish some interesting connections between the work on interprocedural program slicing and a number of other program-analysis problems, such as classical interprocedural dataflow analysis. In particular, we showed that a large class of program-analysis problems can be solved by transforming them into instances of a special kind of graph-reachability problem. These graph-reachability problems can be solved in polynomial time by algorithms similar to the one originally developed for interprocedural slicing. [The PowerPoint presentation prepared for the tutorial that I gave on this material at PLDI '00 can be found here. (Because of the animations, you should run the presentation, rather than just look at the slides in Powerpoint editing mode.)]

I have also been working on the problem of shape analysis of programs written in languages that permit destructive updating of dynamically allocated storage. Shape analysis discovers information (in a conservative way) about the possible ``shapes'' of the dynamically allocated data structures to which a program's pointer variables can point. I am also interested in applying the techniques that we have developed for shape analysis to the problem of verifying properties of distributed systems. [A PowerPoint presentation on some of this material can be found here. (Because of the animations, you should run the presentation, rather than just look at the slides in Powerpoint editing mode.)]

[Back to the Table of Contents]


Recent Items of Note*new*

Recent Papers

[Back to the Table of Contents]

Miscellaneous

The paper was selected for inclusion in a special SIGPLAN collection of the 50 most influential papers from the SIGPLAN Conference on Programming Language Design and Implementation from 1979 to 1999. [abstract; retrospective (PS); retrospective (PDF)]

An extended version of the PLDI 88 paper later appeared as the following journal paper:

[Back to the Table of Contents]

Availability of Program-Slicing Tools

The Wisconsin Program-Slicing Tool

The The Wisconsin Program-Slicing Tool is a software system that supports operations on C programs, including backward slicing, forward slicing, and chopping [TOPLAS90, FSE94, FSE95b], which can help the user gain an understanding of what a program does and how it works. The Wisconsin Program-Slicing Tool consists of a package for building and manipulating control-flow graphs and program dependence graphs, as well as a front-end that parses C programs and translates them to the internal representations used for slicing.

Although the Wisconsin Program-Slicing Tool was distributed from 1996-2000 for not-for-profit research purposes under license from the University of Wisconsin, it is no longer being distributed. However, there is a commercial tool available, named CodeSurfer, that is derived from the Wisconsin implementation and is available from GrammaTech, Inc. GrammaTech has improved on the Wisconsin implementation considerably (both in terms of speed and space efficiency). GrammaTech also provides CodeSurfer to academic researchers on very favorable terms.

CodeSurfer

The Wisconsin program-slicing technology is now available in a commercial product, the CodeSurfertm tool available from GrammaTech, Inc.

CodeSurfer builds a dependence-graph program representation and provides a GUI for exploring this web. The dependence graph includes forward and backward links between each assignment statement and possible uses of the values stored by that assignment. Pointer analysis is used so that indirect loads and stores through pointers are taken into account, as well as indirect function calls. Dataflow analysis is used so that links between unrelated assignments and uses are excluded. Operations that highlight forward and backward slices show the impact of a given statement on the rest of the program (forward slicing), and the impact of the rest of a program on a given statement (backward slicing) [TOPLAS90, FSE94]. Operations that highlight paths between nodes in the dependence graph (chops) show ways in which the program points are interdependent (or independent) [FSE95b]. CodeSurfer's scripting language, which provides access to the dependence-graph program representation and the Tk widget set, is used for extensibility and for batch applications.

Full information about CodeSurfer is available here, where you can find

You should be aware that the most important current limitations of CodeSurfer are as follows: CodeSurfer is currently available for Sun SPARC Solaris, as well as for Windows 95, 98, NT, and 2000.

[Back to the Table of Contents]

Categorized Index to Publications

Program Slicing, Differencing, Merging, etc.

Overview

The Wisconsin Program-Slicing Tool

CodeSurfer System

Slicing

Chopping

Differencing

Merging

Algebra of slices (and applications to program merging)

Semantics and slicing

Other applications of slicing

Implemented integration system (for a small Pascal subset)

Miscellaneous

Ph.D. Dissertations

[Back to the Table of Contents]

Interprocedural Dataflow Analysis

Demand IDFA via bottom-up logic programming and the magic-sets transformation

Exhaustive and Demand IDFA via graph reachability

IDFA using more than graph reachability

PTIME completeness of IDFA

[Back to the Table of Contents]

Alias Analysis, Pointer Analysis, and Shape Analysis

[Back to the Table of Contents]

Other Program-Analysis Problems

Ph.D. Dissertations

[Back to the Table of Contents]

Path Problems

Context-Free-Language Reachability

Other Path Problems

Ph.D. Dissertations

[Back to the Table of Contents]

Model Checking

[Back to the Table of Contents]

Computer Security

Ph.D. Dissertations

[Back to the Table of Contents]

Code Instrumentation

Ph.D. Dissertations

[Back to the Table of Contents]

Computational Differentiation and Computational Divided Differencing

[Back to the Table of Contents]

Language-Based Program-Development Environments

Ph.D. Dissertations

[Back to the Table of Contents]

Incremental Computing

Ph.D. Dissertations

[Back to the Table of Contents]

Attribute Grammars

Ph.D. Dissertations

[Back to the Table of Contents]

Miscellaneous

[Back to the Table of Contents]


List of Publications

Books

[Back to the Table of Contents]

Journal Publications

[Back to the Table of Contents]

Invited Papers

[Back to the Table of Contents]

Book Chapters

[Back to the Table of Contents]

Reprinted in Collections

[Back to the Table of Contents]

Magazine Articles

[Back to the Table of Contents]

Conference Publications

[Back to the Table of Contents]

Software

[Back to the Table of Contents]

Patents

[Back to the Table of Contents]

Pending Submissions

[Back to the Table of Contents]

Other Publications and Reports

[Back to the Table of Contents]


Visitors, Post-Docs, and Students

Post-Doctoral Associates and Visitors

Former Students

Current Students

[Back to the Table of Contents]