Abstract
Debugging can be exceptionally challenging for novice programmers, often consuming inordinate amounts of time and preventing students’ progress on coursework. Program visualization and debugging tools designed specifically for novice programmers have been shown to effectively assist students with both debugging and constructing knowledge of programming language semantics. Few such tools support the C programming language, despite it being widely considered a difficult language for novices. Of the tools supporting C described in the literature, most were either never released, are no longer available, or have been unmaintained for so long that they are now unusable.
This thesis describes the design, implementation, and evaluation of a program visualization and debugging tool for novice C programmers, named SeeC (pronounced “seek”). We avoid problems which commonly afflicted previous tools for the C programming language, particularly incomplete or incorrect language support and unsustainable implementations related to the use of custom-built parsers, interpreters, and compilers. We instead build upon the state-of-the-art compiler technologies provided by the LLVM and Clang projects, ensuring that SeeC’s language support rigorously follows the standards, that SeeC can support a range of platforms and architectures, and that SeeC’s implementation is sustainable.
SeeC’s design draws upon the literature on both programming language tools and Computer Science education. It combines advanced debugging techniques, such as trace-based debugging and runtime error detection, with program visualization features which have been shown to effectively assist novice programmers with program comprehension and debugging tasks. As far as we are aware, SeeC contains the first implementation of a dynamic evaluation tree visualization, and the first execution tracing system targeting LLVM’s Intermediate Representation. SeeC can be used as a traditional error detector, a generic program visualization system, a trace-based debugger, a tutorial environment, or as a tool to facilitate collaboration on multi-student projects.
Where possible, we evaluate SeeC’s features independently. For example, the execution tracing and runtime error detection system is evaluated by tracing the execution of real students’ project solutions collected over two years. SeeC’s runtime error detection compared favourably against several contemporary error detectors, finding legitimate runtime errors in more project solutions than any other tool. We also evaluate SeeC as a complete system. Firstly, we evaluate SeeC’s use in authentic learning scenarios by recording students’ interactions with the system during their regular coursework. Secondly, we use an observational study to investigate students’ use of SeeC when performing predetermined debugging tasks. Finally we investigate students’ perceptions of SeeC through a survey administered to participants of the aforementioned observational study. These evaluations show that students can use SeeC to debug programs effectively, and that students consider SeeC easy to use and effective for performing debugging tasks.
This thesis describes the design, implementation, and evaluation of a program visualization and debugging tool for novice C programmers, named SeeC (pronounced “seek”). We avoid problems which commonly afflicted previous tools for the C programming language, particularly incomplete or incorrect language support and unsustainable implementations related to the use of custom-built parsers, interpreters, and compilers. We instead build upon the state-of-the-art compiler technologies provided by the LLVM and Clang projects, ensuring that SeeC’s language support rigorously follows the standards, that SeeC can support a range of platforms and architectures, and that SeeC’s implementation is sustainable.
SeeC’s design draws upon the literature on both programming language tools and Computer Science education. It combines advanced debugging techniques, such as trace-based debugging and runtime error detection, with program visualization features which have been shown to effectively assist novice programmers with program comprehension and debugging tasks. As far as we are aware, SeeC contains the first implementation of a dynamic evaluation tree visualization, and the first execution tracing system targeting LLVM’s Intermediate Representation. SeeC can be used as a traditional error detector, a generic program visualization system, a trace-based debugger, a tutorial environment, or as a tool to facilitate collaboration on multi-student projects.
Where possible, we evaluate SeeC’s features independently. For example, the execution tracing and runtime error detection system is evaluated by tracing the execution of real students’ project solutions collected over two years. SeeC’s runtime error detection compared favourably against several contemporary error detectors, finding legitimate runtime errors in more project solutions than any other tool. We also evaluate SeeC as a complete system. Firstly, we evaluate SeeC’s use in authentic learning scenarios by recording students’ interactions with the system during their regular coursework. Secondly, we use an observational study to investigate students’ use of SeeC when performing predetermined debugging tasks. Finally we investigate students’ perceptions of SeeC through a survey administered to participants of the aforementioned observational study. These evaluations show that students can use SeeC to debug programs effectively, and that students consider SeeC easy to use and effective for performing debugging tasks.
Original language | English |
---|---|
Qualification | Doctor of Philosophy |
Awarding Institution |
|
Supervisors/Advisors |
|
Award date | 14 Apr 2016 |
Publication status | Unpublished - 2015 |