Program understanding and the concept assignment problem

A person understands a program because he is able to relate the structures of the program and its environment to his conceptual knowledge about the world. The problem of discovering individual human oriented concepts and assigning them to their implementation oriented counterparts for a given program is the concept assignment problem. We argue that the solution to this problem requires methods that have a strong plausible reasoning component based on a priori knowledge. We illustrate these ideas through example scenarios using an existing design recovery system called DESIRE. 1. Human understanding and the concept assignment problem A person understands a program when he is able to explain the program, its structure, its behavior, its effects on its operational context, and its relationships to its application domain in terms that are qualitatively different from the tokens used to construct the source code of the program. That is, it is qualitatively different for me to claim that a program "reserves an airline seat" than for me to assert that "if (seat = request(flight)) && available(seat) then reserve(seat,customer). " Apart from the obvious differences of level of detail and formality, the first case expresses computational intent in human oriented terms, terms that live in a rich context of knowledge about the world. In the second case, the vocabulary and grammar are narrowly restricted, formally controlled and do not inherently reference the human oriented context of knowledge about the world. The first expression of computational intent is designed for succinct, intentionally ambiguous (i.e., informal), human level communication whereas the second is designed for automated treatment, e.g., program verification or compilation. Both forms of the information must be present for a human to manipulate programs (create, maintain, explain, re-engineer, reuse or document) in any but the most trivial way. Moreover, one must understand the association between the formal and the informal expressions of computational intent. If a person tries to build an understanding of a unfamiliar program or portion of a program, he or she must create or reconstruct the informal, human oriented expression of computational intent through a process of analysis, experimentation, guessing and crossword puzzle-like assembly. Importantly, as the informal concepts are discovered and interrelated concept by concept, they are simultaneously associated with or assigned to the specific implementation structures within the program (and its operational context) that are the concrete instances of those concepts. The problem of discovering these human oriented concepts and assigning them to their implementation instances within a program is the concept assignment problem [4] and we address this problem in this paper. 2. The concept assignment problem 2.1. Programming Oriented Concepts vs. Human Oriented Concepts A central hypothesis of this paper is that a parsingoriented recognition model based on formal, predominately structural patterns of programming language features is necessary but insufficient for the general concept assignment problem. While parsingoriented recognition schemes certainly play a role in program understanding, the signatures of most human oriented concepts are not constrained in ways that are convenient for parsing technologies. (See Sidebar on Automatic Concept Recognition) So there is more to program understanding than parsing. In particular, there is the general concept assignment problem, which requires a different approach. More specifically, parsing technologies lend themselves nicely to the recognition of programming