Flexible detection of software idioms to support program comprehension

Project Details


Program comprehension can be difficult and time-consuming to achieve, especially when a program's documentation is missing or out of sync. Techniques for detecting software idioms can provide program comprehension support. The term software idiom covers different kinds of recurring, prototypical programming constructs. Examples include programming recipes such as advancing through a list, but also architectural blue prints such as the well-known design patterns.
Developers can be presented a more abstract view of the program by detecting familiar idioms in its source code, thus supporting program comprehension.

Automatically detecting software idioms is difficult because multiple implementation variants exist of each idiom. Existing techniques are often only capable of localizing a single variant in the program's source code. This research project focuses on logic meta-programming. In this technique, detecting an idiom amounts to gathering program facts that support the idiom's presence. Here, the root of the problem manifests itself in the rigidity of the logic on the one hand, and on the static nature of the program facts on the other hand.

As the first cornerstone of our solution, we will investigate a form of approximate reasoning that is suitable to model vague concept and to reason with incomplete information. Its built-in tolerance for discrepancies between the program facts at hand and the program facts that are required to assert the presence of an idiom, should enable detecting deviating idiom implementations. As the second cornerstone of our solution, we will investigate using facts about the behavior of the program rather than its structure. We will use abstract interpretation as a means to obtain these facts without executing the program. Reasoning about these facts will have to be approximate as well. Abstract interpretation can only compute an approximation of the the actual run-time behavior.
Effective start/end date1/01/0531/12/08


  • informatics

Flemish discipline codes

  • Biological sciences