Haider Ali Ramadhan
Department of Computer Science, Sultan Qaboos University
PO Box 36 Code 123 Muscat, Sultanate of Oman
email@example.com Fax: 968-513145
Automatic program diagnosis and debugging systems can be classified by their primary means of program analysis. The most distinctive split is between those systems that are unable to analyze partial code segments as they are provided by the user and must wait until the entire solution code is completed before attempting any diagnosis, and those that are capable of analyzing partial solutions. The former perform passive analysis while the later perform active analysis.
Systems using passive analysis do not trace the intentions of the user or his design decisions while being developed and require him to explicitly request the automatic debugging of his code segments. These systems localize errors in the user programs either by looking for surface structural forms (plans) or by accounting for differences between forms and actual code segments. Examples of these systems include Bridge ( Bonar 1992) and Proust ( Johnson 1990). Generally speaking, these systems rely on some sort of pre-stored requirements for a complete solution. It is worth noting here that systems which rely on prestored requirements for a successful solution cannot solve the problems themselves, and hence cannot reason about the solutions and designs provided by the users.
On the other hand, systems using active analysis perform automatic debugging by implementing model-tracing ( Anderson 1990). Through this approach, these systems subdivide tasks into smaller steps that must be solved one at a time. The user's design decisions are traced as he develops the solution. On each step taken by the user, these systems check to see if the user is following a design path known to be correct or buggy. Buggy paths are pruned as soon as they are detected by giving the user intelligent feedback and allowing him to try again. Example of such systems include The Lisp Tutor ( Anderson 1990) and GIL ( Resier 1992). These systems tend to be quite directive. However, through rich interaction and flexible immediate feedback, these systems detect very specific bugs and misconceptions.