skip to main content
research-article

Reusing Bugged Source Code to Support Novice Programmers in Debugging Tasks

Published:22 November 2019Publication History
Skip Abstract Section

Abstract

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.

References

  1. Pasquale Ardimento, Mario L. Bernardi, Marta Cimitile, and Fabrizio M. Maggi. 2019. Evaluating coding behavior in software development processes: A process mining approach. In Proceedings of the International Conference on Software and System Processes (ICSSP’19). IEEE Press, Piscataway, NJ, 84--93. DOI:https://doi.org/10.1109/ICSSP.2019.00020Google ScholarGoogle Scholar
  2. Valerie Barr and Chris Stephenson. 2011. Bringing computational thinking to K-12: What is involved and what is the role of the computer science education community? ACM Inroads 2, 1 (Feb. 2011), 48--54. DOI:https://doi.org/10.1145/1929887.1929905Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Victor R. Basili, Gianluigi Caldiera, and Dieter H. Rombach. 1994. The Goal Question Metric Approach. Vol. I. John Wiley 8 Sons.Google ScholarGoogle Scholar
  4. Brett A. Becker, Kyle Goslin, and Graham Glanville. 2018. The effects of enhanced compiler error messages on a syntax error debugging test. In ACM Technical Symposium on Computer Science Education (SIGCSE’18). ACM, New York, NY, 640--645. DOI:https://doi.org/10.1145/3159450.3159461Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Moritz Beller, Niels Spruit, Diomidis Spinellis, and Andy Zaidman. 2018. On the dichotomy of debugging behavior among programmers. In International Conference on Software Engineering (ICSE). ACM, New York, NY. DOI:https://doi.org/10.1145/3180155.3180175Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Jens Bennedsen and Carsten Schulte. 2010. BlueJ visual debugger for learning the execution of object-oriented programs? Trans. Comput. Educ. 10, 2 (June 2010), Article 8, 22 pages. DOI:https://doi.org/10.1145/1789934.1789938Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. Eric Bodden. 2012. Inter-procedural data-flow analysis with IFDS/IDE and soot. In ACM SIGPLAN International Workshop on State of the Art in Java Program Analysis (SOAP’12). ACM, New York, NY, 3--8. DOI:https://doi.org/10.1145/2259051.2259052Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Samuel A. Brian, Richard N. Thomas, James M. Hogan, and Colin Fidge. 2015. Planting bugs: A system for testing students’ unit tests. In Proceedings of the 2015 ACM Conference on Innovation and Technology in Computer Science Education (ITiCSE’15). ACM, New York, NY, 45--50. DOI:https://doi.org/10.1145/2729094.2742631Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. A. Böttcher, V. Thurner, K. Schlierkamp, and D. Zehetmeier. 2016. Debugging students’ debugging process. In 2016 IEEE Frontiers in Education Conference (FIE). 1--7. DOI:https://doi.org/10.1109/FIE.2016.7757447Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Rafael Caballero, Adrián Riesco, and Josep Silva. 2017. A survey of algorithmic debugging. ACM Comput. Surv. 50, 4 (Aug. 2017), Article 60, 35 pages. DOI:https://doi.org/10.1145/3106740Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Elizabeth Carter. 2015. Its debug: Practical results. J. Comput.g Sci. Colleges 30, 3 (2015), 9--15.Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Thomas D. Cook and Donald T. Campbell. 1986. The causal assumptions of quasi-experimental practice. Synthese 68, 1 (1 July 1986), 141--180. DOI:https://doi.org/10.1007/BF00413970Google ScholarGoogle Scholar
  13. S. Deitz and U. Buy. 2016. From video games to debugging code. In 2016 IEEE/ACM 5th International Workshop on Games and Software Engineering (GAS’16). 37--41. DOI:https://doi.org/10.1109/GAS.2016.015Google ScholarGoogle Scholar
  14. Lisa Nguyen Quang Do, Stefan Krüger, Patrick Hill, Karim Ali, and Eric Bodden. 2018. Debugging static analysis. CoRR abs/1801.04894 (2018). arxiv:1801.04894 http://arxiv.org/abs/1801.04894Google ScholarGoogle Scholar
  15. M. Ducassé and A.-M. Emde. 1988. A review of automated debugging systems: Knowledge, strategies and techniques. In International Conference on Software Engineering. IEEE Computer Society Press, 162--171.Google ScholarGoogle ScholarCross RefCross Ref
  16. Alexander Egyed, Bryan Horling, Raphen Becker, and Robert Balzer. 2003. Visualization and Debugging Tools. Springer US, Boston, MA, 33--42. DOI:https://doi.org/10.1007/978-1-4615-0363-7_4Google ScholarGoogle Scholar
  17. Sue Fitzgerald, Gary Lewandowski, Renée McCauley, Laurie Murphy, Beth Simon, Lynda Thomas, and Carol Zander. 2008. Debugging: Finding, fixing and flailing, a multi-institutional study of novice debuggers. Computer Science Education 18, 2 (2008), 93--116. DOI:https://doi.org/10.1080/08993400802114508 arXiv:https://doi.org/10.1080/08993400802114508Google ScholarGoogle ScholarCross RefCross Ref
  18. Lindsey Ann Gouws, Karen Bradshaw, and Peter Wentworth. 2013. Computational thinking in educational activities: An evaluation of the educational game light-bot. In ACM Conference on Innovation and Technology in Computer Science Education (ITiCSE’13). ACM, New York, NY, 10--15. DOI:https://doi.org/10.1145/2462476.2466518Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Robert J. Grissom and John J. Kim. 2005. Effect Sizes for Research: A Broad Practical Approach (2nd ed.). Lawrence Earlbaum Associates.Google ScholarGoogle Scholar
  20. Philip J. Guo. 2013. Online python tutor: Embeddable web-based program visualization for CS education. In ACM Technical Symposium on Computer Science Education (SIGCSE’13). ACM, New York, NY, 579--584. DOI:https://doi.org/10.1145/2445196.2445368Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Geoffrey L. Herman, Michael C. Loui, Lisa Kaczmarczyk, and Craig Zilles. 2012. Describing the what and why of students’ difficulties in boolean logic. Trans. Comput. Educ. 12, 1 (March 2012), Article 3, 28 pages. DOI:https://doi.org/10.1145/2133797.2133800Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Derek Holton and David Clarke. 2006. Scaffolding and metacognition. Int. J. Math. Educ. Sci. Technol. 37, 2 (2006), 127--143. DOI:https://doi.org/10.1080/00207390500285818 arXiv:https://doi.org/10.1080/00207390500285818Google ScholarGoogle ScholarCross RefCross Ref
  23. Andreas Jedlitschka, Marcus Ciolkowski, and Dietmar Pfahl. 2008. Reporting experiments in software engineering. In Guide to Advanced Empirical Software Engineering. Springer, 201--228.Google ScholarGoogle Scholar
  24. J. Ji, G. Woo, H. Park, and J. Park. 2008. Design and implementation of retargetable software debugger based on GDB. In International Conference on Convergence and Hybrid Information Technology, Vol. 1. 737--740. DOI:https://doi.org/10.1109/ICCIT.2008.268Google ScholarGoogle Scholar
  25. David H. Jonassen and Woei Hung. 2006. Learning to troubleshoot: A new theory-based design architecture. Educ. Psychol. Rev. 18, 1 (2006), 77--114. http://www.jstor.org/stable/23363854.Google ScholarGoogle ScholarCross RefCross Ref
  26. Ahmed Khedr and Hazem Bahig. 2017. Debugging tool to learn algorithms: A case study minimal spanning tree. Int. J. Emerging Technol. Learning (iJET) 12, (2017), 90--100. http://online-journals.org/index.php/i-jet/article/view/6442Google ScholarGoogle ScholarCross RefCross Ref
  27. A. J. Ko and B. A. Myers. 2005. A framework and methodology for studying the causes of software errors in programming systems. J. Vis. Lang. Comput. 16, 1--2 Special Issue (2005), 41--84. DOI:https://doi.org/10.1016/j.jvlc.2004.08.003Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. M. J. Lee. 2014. Gidget: An online debugging game for learning and engagement in computing education. In 2014 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC). 193--194. DOI:https://doi.org/10.1109/VLHCC.2014.6883051Google ScholarGoogle ScholarCross RefCross Ref
  29. Thomas Lengauer and Robert Endre Tarjan. 1979. A fast algorithm for finding dominators in a flowgraph. ACM Trans. Program. Lang. Syst. 1, 1 (Jan. 1979), 121--141. DOI:https://doi.org/10.1145/357062.357071Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Chen Li, Emily Chan, Paul Denny, Andrew Luxton-Reilly, and Ewan Tempero. 2019. Towards a framework for teaching debugging. In Australasian Computing Education Conference (ACE’19). ACM, New York, NY, 79--86. DOI:https://doi.org/10.1145/3286960.3286970Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Andrew Luxton-Reilly, Emma McMillan, Elizabeth Stevenson, Ewan Tempero, and Paul Denny. 2018. Ladebug: An online tool to help novice programmers improve their debugging skills. In ACM Conference on Innovation and Technology in Computer Science Education (ITiCSE’18). ACM, New York, NY, 159--164. DOI:https://doi.org/10.1145/3197091.3197098Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Ana Milanova and Jan Vitek. 2011. Static dominance inference. In International Conference on Objects, Models, Components, Patterns (TOOLS’11). Springer-Verlag, Berlin, 211--227. http://dl.acm.org/citation.cfm?id=2025896.2025912Google ScholarGoogle ScholarCross RefCross Ref
  33. Glenford J. Myers, Corey Sandler, and Tom Badgett. 2011. The Art of Software Testing (3rd ed.). Wiley Publishing.Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Devon H. O’Dell. 2017. The debugging mindset. Queue 15, 1 (Feb. 2017), Article 50, 20 pages. DOI:https://doi.org/10.1145/3055301.3068754Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Hakjoo Oh, Wonchan Lee, Kihong Heo, Hongseok Yang, and Kwangkeun Yi. 2014. Selective context-sensitivity guided by impact pre-analysis. SIGPLAN Not. 49, 6 (June 2014), 475--484. DOI:https://doi.org/10.1145/2666356.2594318Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Gary M. Olson, Sylvia Sheppard, and Elliot Soloway (Eds.). 1987. Empirical Studies of Programmers: Second Workshop. Ablex Publishing Corp., Norwood, NJ.Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Ljubomir Perković, Amber Settle, Sungsoon Hwang, and Joshua Jones. 2010. A framework for computational thinking across the curriculum. In Conference on Innovation and Technology in Computer Science Education (ITiCSE’10). ACM, New York, NY, 123--127. DOI:https://doi.org/10.1145/1822090.1822126Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. F. Petrillo, Z. Soh, F. Khomh, M. Pimenta, C. Freitas, and Y.-G. Gueheneuc. 2016. Towards understanding interactive debugging. IEEE International Conference on Software Quality, Reliability and Security (QRS’16), 152--163. DOI:https://doi.org/10.1109/QRS.2016.27Google ScholarGoogle ScholarCross RefCross Ref
  39. Thomas Reps, Susan Horwitz, and Mooly Sagiv. 1995. Precise interprocedural dataflow analysis via graph reachability. In ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL’95). ACM, New York, NY, 49--61. DOI:https://doi.org/10.1145/199448.199462Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Valerie J. Shute, Chen Sun, and Jodi Asbell-Clarke. 2017. Demystifying computational thinking. Educ. Res. Rev. 22 (2017), 142--158. DOI:https://doi.org/10.1016/j.edurev.2017.09.003Google ScholarGoogle ScholarCross RefCross Ref
  41. Victor Sobreira, Thomas Durieux, Fernanda Madeiral Delfim, Martin Monperrus, and Marcelo de Almeida Maia. 2018. Dissection of a bug dataset: Anatomy of 395 patches from defects4j. CoRR abs/1801.06393 (2018). arxiv:1801.06393 http://arxiv.org/abs/1801.06393Google ScholarGoogle Scholar
  42. Diomidis Spinellis. 2018. Modern debugging: The art of finding a needle in a haystack. Commun. ACM 61, 11 (Oct. 2018), 124--134. DOI:https://doi.org/10.1145/3186278Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. I. Vessey. 1986. Expertise in debugging computer programs: An analysis of the content of verbal protocols. IEEE Trans. Syst., Man, Cybern. 16, 5 (Sep. 1986), 621--637. DOI:https://doi.org/10.1109/TSMC.1986.289308Google ScholarGoogle ScholarDigital LibraryDigital Library
  44. Rob Wass and Clinton Golding. 2014. Sharpening a tool for teaching: The zone of proximal development. Teaching Higher Education 19, 6 (2014), 671--684. DOI:https://doi.org/10.1080/13562517.2014.901958 arXiv:https://doi.org/10.1080/13562517.2014.901958Google ScholarGoogle ScholarCross RefCross Ref
  45. Jeannette M. Wing. 2006. Computational thinking. Commun. ACM 49, 3 (March 2006), 33--35. DOI:https://doi.org/10.1145/1118178.1118215Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Reusing Bugged Source Code to Support Novice Programmers in Debugging Tasks

    Recommendations

    Comments

    Login options

    Check if you have access through your login credentials or your institution to get full access on this article.

    Sign in

    Full Access

    • Published in

      cover image ACM Transactions on Computing Education
      ACM Transactions on Computing Education  Volume 20, Issue 1
      March 2020
      210 pages
      EISSN:1946-6226
      DOI:10.1145/3363561
      Issue’s Table of Contents

      Copyright © 2019 ACM

      Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

      Publisher

      Association for Computing Machinery

      New York, NY, United States

      Publication History

      • Published: 22 November 2019
      • Revised: 1 July 2019
      • Accepted: 1 July 2019
      • Received: 1 April 2019
      Published in toce Volume 20, Issue 1

      Permissions

      Request permissions about this article.

      Request Permissions

      Check for updates

      Qualifiers

      • research-article
      • Research
      • Refereed

    PDF Format

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader

    HTML Format

    View this article in HTML Format .

    View HTML Format