Reusing Bugged Source Code to Support Novice Programmers in Debugging Tasks

Novice programmers often encounter difficulties performing debugging tasks effectively. Even if modern development environments (IDEs) provide high-level support for navigating through code elements and for identifying the right conditions leading to the bug, debugging still requires considerable human effort. Programmers usually have to make hypotheses that are based on both program state evolution and their past debugging experiences. To mitigate this effort and allow novice programmers to gain debugging experience quickly, we propose an approach based on the reuse of existing bugs of open source systems to provide informed guidance from the failure site to the fault position. The goal is to help novices in reasoning on the most promising paths to follow and conditions to define. We implemented this approach as a tool that exploits the knowledge about fault and bug position in the system, as long as any bug of the system is known. The effectiveness of the proposed approach is validated through a quasi-experiment that qualitatively and quantitatively evaluates how the debugging performances of the students change when they are trained using the tool.

[1]  Ewan D. Tempero,et al.  Towards a Framework for Teaching Debugging , 2019, ACE '19.

[2]  Mireille Ducassé,et al.  A review of automated debugging systems: knowledge, strategies and techniques , 1988, Proceedings. [1989] 11th International Conference on Software Engineering.

[3]  Eric Bodden,et al.  Inter-procedural data-flow analysis with IFDS/IDE and Soot , 2012, SOAP '12.

[4]  Robert E. Tarjan,et al.  A fast algorithm for finding dominators in a flowgraph , 1979, TOPL.

[5]  Adrián Riesco,et al.  A Survey of Algorithmic Debugging , 2017, ACM Comput. Surv..

[6]  David H. Jonassen,et al.  Learning to Troubleshoot: A New Theory-Based Design Architecture , 2006 .

[7]  Axel Böttcher,et al.  Debugging students' debugging process , 2016, 2016 IEEE Frontiers in Education Conference (FIE).

[8]  Fabrizio Maria Maggi,et al.  Evaluating Coding Behavior in Software Development Processes: A Process Mining Approach , 2019, 2019 IEEE/ACM International Conference on Software and System Processes (ICSSP).

[9]  V. Shute,et al.  Demystifying computational thinking , 2017 .

[10]  Iris Vessey,et al.  Expertise in Debugging Computer Programs: An Analysis of the Content of Verbal Protocols , 1986, IEEE Transactions on Systems, Man, and Cybernetics.

[11]  Ewan D. Tempero,et al.  Ladebug: an online tool to help novice programmers improve their debugging skills , 2018, ITiCSE.

[12]  Hyung-Bae Park,et al.  Design and Implementation of Retargetable Software Debugger Based on GDB , 2008, 2008 Third International Conference on Convergence and Hybrid Information Technology.

[13]  R. Grissom,et al.  Effect sizes for research: A broad practical approach. , 2005 .

[14]  Elizabeth Carter,et al.  Its debug: practical results , 2015 .

[15]  C. Golding,et al.  Sharpening a tool for teaching: the zone of proximal development , 2014 .

[16]  James M. Hogan,et al.  Planting Bugs: A System for Testing Students' Unit Tests , 2015, ITiCSE.

[17]  Diomidis Spinellis,et al.  On the Dichotomy of Debugging Behavior Among Programmers , 2018, 2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE).

[18]  Ugo Buy,et al.  From Video Games to Debugging Code , 2016, 2016 IEEE/ACM 5th International Workshop on Games and Software Engineering (GAS).

[19]  Peter Wentworth,et al.  Computational thinking in educational activities: an evaluation of the educational game light-bot , 2013, ITiCSE '13.

[20]  Ljubomir Perkovic,et al.  A framework for computational thinking across the curriculum , 2010, ITiCSE '10.

[21]  Brad A. Myers,et al.  A framework and methodology for studying the causes of software errors in programming systems , 2005, J. Vis. Lang. Comput..

[22]  Thomas W. Reps,et al.  Precise interprocedural dataflow analysis via graph reachability , 1995, POPL '95.

[23]  Bryan Horling,et al.  Visualization and Debugging Tools , 2003 .

[24]  Glenford J. Myers,et al.  Art of Software Testing , 1979 .

[25]  Jens Bennedsen,et al.  BlueJ Visual Debugger for Learning the Execution of Object-Oriented Programs? , 2010, TOCE.

[26]  H. D. Rombach,et al.  The Goal Question Metric Approach , 1994 .

[27]  David Clarke,et al.  Scaffolding and metacognition , 2006 .

[28]  Elliot Soloway,et al.  Empirical Studies of Programmers: Second Workshop , 1991 .

[29]  Jeannette M. Wing An introduction to computer science for non-majors using principles of computation , 2007, SIGCSE.

[30]  Hongseok Yang,et al.  Selective context-sensitivity guided by impact pre-analysis , 2014, PLDI.

[31]  OhHakjoo,et al.  Selective context-sensitivity guided by impact pre-analysis , 2014 .

[32]  Hazem M. Bahig,et al.  Debugging Tool to Learn Algorithms: A Case Study Minimal Spanning Tree , 2017, iJET.

[33]  Donald T. Campbell,et al.  The causal assumptions of quasi-experimental practice , 1986, Synthese.

[34]  Sue Fitzgerald,et al.  Debugging: finding, fixing and flailing, a multi-institutional study of novice debuggers , 2008, Comput. Sci. Educ..

[35]  Eric Bodden,et al.  Debugging Static Analysis , 2020, IEEE Transactions on Software Engineering.

[36]  Diomidis Spinellis Modern debugging , 2018, Commun. ACM.

[37]  Michael J. Lee Gidget: An online debugging game for learning and engagement in computing education , 2014, 2014 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC).

[38]  Marcelo de Almeida Maia,et al.  Dissection of a bug dataset: Anatomy of 395 patches from Defects4J , 2018, 2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER).

[39]  Chris Stephenson,et al.  Bringing computational thinking to K-12: what is Involved and what is the role of the computer science education community? , 2011, INROADS.

[40]  Dietmar Pfahl,et al.  Reporting Experiments in Software Engineering , 2008, Guide to Advanced Empirical Software Engineering.

[41]  Foutse Khomh,et al.  Towards Understanding Interactive Debugging , 2016, 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS).

[42]  Michael C. Loui,et al.  Describing the What and Why of Students’ Difficulties in Boolean Logic , 2012, TOCE.

[43]  Jan Vitek,et al.  Static Dominance Inference , 2011, TOOLS.

[44]  Philip J. Guo Online python tutor: embeddable web-based program visualization for cs education , 2013, SIGCSE '13.

[45]  Brett A. Becker,et al.  The Effects of Enhanced Compiler Error Messages on a Syntax Error Debugging Test , 2018, SIGCSE.