Frequent patterns in program executions represent recurring sequences of events. These patterns can be used to reveal the hidden structures of a program, and ease the comprehension of legacy systems. Existing grammarinduction approaches generally use sequential algorithms to infer formal models from program executions, in which program executions are represented as strings. Software developers, however, often use graphs to illustrate the process of program executions, such as UML diagrams, flowcharts and call graphs. Taking advantage of graphs’ expressiveness and intuitiveness for human cognition, we present a graph-grammar induction approach to discovering program’s behavioral patterns by analyzing execution traces represented in graphs. Moreover, to the efficiency, execution traces are abstracted to filter redundant or unrelated traces. A grammar induction environment called VEGGIE is adopted to facilitate the induction. Evaluation is conducted on an open source project JHotDraw...