Aristotle provides program analysis information and supports the development of software engineering tools. Aristotle's front end consists of parsers that gather control-flow, local data-flow, and symbol table information for C and Java programs. Aristotle tools use the data provided by the front end to perform a variety of tasks, such as data-flow and control-dependence analysis, data-flow testing, regression test selection, graph construction and graph viewing. Parsers and tools use database access routines to store information in, and retrieve it from, a data repository. Users can view analysis data textually or graphically. A user interface provides menu-driven access to tools; many tools can also be invoked directly from applications programs. Most of Aristotle's components function on single procedures and entire programs. We use Aristotle as a platform for developing and experimenting with program analysis, maintenance, and testing tools.