skip to main content
10.1145/3587102.3588777acmconferencesArticle/Chapter ViewAbstractPublication PagesiticseConference Proceedingsconference-collections
research-article

A Systematic Mapping Study of Code Quality in Education

Published:30 June 2023Publication History

ABSTRACT

While functionality and correctness of code has traditionally been the main focus of computing educators, quality aspects of code are getting increasingly more attention. High-quality code contributes to the maintainability of software systems, and should therefore be a central aspect of computing education. We have conducted a systematic mapping study to give a broad overview of the research conducted in the field of code quality in an educational context. The study investigates paper characteristics, topics, research methods, and the targeted programming languages. We found 195 publications (1976-2022) on the topic in multiple databases, which we systematically coded to answer the research questions. This paper reports on the results and identifies developments, trends, and new opportunities for research in the field of code quality in computing education.

References

  1. S. Abid, H.A. Basit, and N. Arshad. 2015. Reflections on teaching refactoring: A tale of two projects. Proc. of ITiCSE (2015).Google ScholarGoogle Scholar
  2. E. Aivaloglou and F. Hermans. 2016. How kids code and how we know: An exploratory study on the scratch repository. Proc. of ICER (2016).Google ScholarGoogle Scholar
  3. R. Andrade and J. Brunet. 2018. Can students help themselves? An investigation of students' feedback on the quality of the source code. Proc. of FIE (2018).Google ScholarGoogle Scholar
  4. A. Birillo, I. Vlasov, A. Burylov, V. Selishchev, A. Goncharov, E. Tikhomirova, N. Vyahhi, and T. Bryksin. 2022. Hyperstyle: A Tool for Assessing the Code Quality of Solutions to Programming Assignments. Proc. of SIGCSE (2022), 307--313.Google ScholarGoogle Scholar
  5. J. Börstler, M.E. Caspersen, and M. Nordström. 2016. Beauty and the Beast: on the readability of object-oriented example programs. Software Quality Journal, Vol. 24, 2 (2016), 231--246.Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. J. Börstler, H. Störrle, D. Toll, J. van Assema, R. Duran, S. Hooshangi, J. Jeuring, H. Keuning, C. Kleiner, and B. MacKellar. 2018. "I Know It When I See It" Perceptions of Code Quality. In ITiCSE Conference Working Group Reports. 70--85.Google ScholarGoogle Scholar
  7. C. Charitsis, C. Piech, and J. C. Mitchell. 2022. Function Names: Quantifying the Relationship Between Identifiers and Their Functionality to Improve Them. In Proc. of Learning @ Scale. 93--101.Google ScholarGoogle Scholar
  8. R.R. Choudhury, H. Yin, and A. Fox. 2016. Scale-driven automatic hint generation for coding style. Proc. of Intelligent Tutoring Systems (2016).Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Y. Crespo, A. Gonzalez-Escribano, and M. Piattini. 2021. Carrot and Stick approaches revisited when managing Technical Debt in an educational context. In Proc. of Technical Debt. 99--108.Google ScholarGoogle Scholar
  10. D. Cristea, D. cSotropa, A. Molnar, and S. Motogna. 2021. On the Use of FCA Models in Static Analysis Tools to Detect Common Errors in Programming. Lecture Notes in Computer Science (2021), 3--18.Google ScholarGoogle Scholar
  11. P. H. de Andrade Gomes, R. E. Garcia, G. Spadon, D. M. Eler, C. Olivete, and R. C. Messias Correia. 2017. Teaching software quality via source code inspection tool. In Proc. of FIE.Google ScholarGoogle Scholar
  12. G. De Ruvo, E. Tempero, A. Luxton-Reilly, and N. Giacaman. 2018a. Unencapsulated collection - A teachable design smell. Proc. of SIGCSE (2018).Google ScholarGoogle Scholar
  13. G. De Ruvo, E. Tempero, G.B. Rowe, and N. Giacaman. 2018b. Understanding Semantic Style by Analysing Student Code. Proc. of ACE (2018).Google ScholarGoogle Scholar
  14. T. Delev and D. Gjorgjevikj. 2017. Static analysis of source code written by novice programmers. Proc. of EDUCON (2017).Google ScholarGoogle Scholar
  15. A. Fleury. 2001. Encapsulation and reuse as viewed by java students. Proc. of SIGCSE (2001).Google ScholarGoogle Scholar
  16. M. Fowler. 1999. Refactoring: improving the design of existing code. Addison-Wesley Professional.Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. E. Gamma, R. Helm, R. Johnson, and J. M. Vlissides. 1994. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional.Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. N. Garg and A.W. Keen. 2018. Earthworm: Automated Decomposition Suggestions. In Proc. of Koli Calling.Google ScholarGoogle Scholar
  19. F. Gilson, M. Morales-Trujillo, and M. Mathews. 2020. How junior developers deal with their technical debt? Proc. of Technical Debt (2020).Google ScholarGoogle Scholar
  20. E.L. Glassman, L. Fischer, J. Scott, and R.C. Miller. 2015. Foobaz: Variable Name Feedback for Student Code at Scale. In Proc. of User Interface Software & Techn.Google ScholarGoogle Scholar
  21. W. Groeneveld, D. Martin, T. Poncelet, and K. Aerts. 2022. Are Undergraduate Creative Coders Clean Coders? A Correlation Study. SIGCSE (2022), 314--320.Google ScholarGoogle Scholar
  22. K. Grotov, S. Titov, V. Sotnikov, Y. Golubev, and T. Bryksin. 2022. A Large-Scale Comparison of Python Code in Jupyter Notebooks and Scripts. Proc. of Mining Software Repositories Conference (MSR) (2022), 353--364.Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. T. Haendler. 2019. A card game for learning software-refactoring principles. Proc. of GamiLearn (2019).Google ScholarGoogle Scholar
  24. T. Haendler and G. Neumann. 2019. A framework for the assessment and training of software refactoring competences. In Proc. of KMIS.Google ScholarGoogle Scholar
  25. T. Haendler, G. Neumann, and F. Smirnov. 2020. RefacTutor: An Interactive Tutoring System for Software Refactoring. Communications in Computer and Information Science (2020).Google ScholarGoogle Scholar
  26. F. Hermans and E. Aivaloglou. 2016. Do code smells hamper novice programming? A controlled experiment on Scratch programs. Proc. of ICPC (2016).Google ScholarGoogle Scholar
  27. T. Hsu, S. Chang, and Y. Hung. 2018. How to learn and how to teach computational thinking: Suggestions based on a review of the literature. Computers & Education, Vol. 126 (2018), 296--310.Google ScholarGoogle ScholarCross RefCross Ref
  28. M. Ichinco, A. Zemach, and C. Kelleher. 2013. Towards generalizing expert programmers' suggestions for novice programmers. VL/HCC (2013).Google ScholarGoogle Scholar
  29. T. Indriasari, A. Luxton-Reilly, and P. Denny. 2020. A review of peer code review in higher education. ACM Trans. on Computing Education (TOCE) (2020), 1--25.Google ScholarGoogle Scholar
  30. C. Izu, P. Denny, and S. Roy. 2022. A Resource to Support Novices Refactoring Conditional Statements. Proc. of ITiCSE (2022), 344--350.Google ScholarGoogle Scholar
  31. S. Jatzlau, S. Seegerer, and R. Romeike. 2019. The Five Million Piece Puzzle: Finding Answers in 500,000 Snap!-Projects. In IEEE Blocks and Beyond Workshop.Google ScholarGoogle Scholar
  32. L. Jiang, R. Rewcastle, P. Denny, and E. Tempero. 2020. CompareCFG: Providing Visual Feedback on Code Quality Using Control Flow Graphs. In ITiCSE.Google ScholarGoogle Scholar
  33. H. Keuning, B. Heeren, and J. Jeuring. 2017. Code quality issues in student programs. Proc. of ITiCSE (2017).Google ScholarGoogle Scholar
  34. H. Keuning, B. Heeren, and J. Jeuring. 2021. A Tutoring System to Learn Code Refactoring. Proc. of SIGCSE (2021), 562--568.Google ScholarGoogle Scholar
  35. H. Keuning, J. Jeuring, and B. Heeren. 2023. A Systematic Mapping Study of Code Quality in Education -- with Complete Bibliography. arxiv: 2304.13451Google ScholarGoogle Scholar
  36. W. Kim, S. Rhim, J. Choi, and K. Han. 2020. Modeling Learners' Programming Skills and Question Levels Through Machine Learning. In Proc. of HCI. 281--288.Google ScholarGoogle Scholar
  37. D. Kirk, T. Crow, A. Luxton-Reilly, and E. Tempero. 2020. On assuring learning about code quality. Proc. of ACE (2020).Google ScholarGoogle Scholar
  38. D. Kirk, T. Crow, A. Luxton-Reilly, and E. Tempero. 2022. Teaching code quality in high school programming courses - Understanding teachers' needs. Proc. of ACE (2022), 36--45.Google ScholarGoogle Scholar
  39. G. Lacerda, F. Petrillo, M. Pimenta, and Y. Guéhéneuc. 2020. Code smells and refactoring: A tertiary systematic review of challenges and observations. J. of Systems and Software (2020).Google ScholarGoogle Scholar
  40. D. Liu and A. Petersen. 2019. Static analyses in python programming courses. Proc. of SIGCSE (2019).Google ScholarGoogle Scholar
  41. Y. Lu, X. Mao, T. Wang, G. Yin, and Z. Li. 2019. Improving students' programming quality with the continuous inspection process: a social coding perspective. Frontiers of Computer Science, Vol. 14, 5 (2019).Google ScholarGoogle Scholar
  42. Y. Ma and E. Tilevich. 2021. You have said too much : Java-like verbosity anti-patterns in python codebases. Proc. of the SPLASH-E Symposium (2021), 13--18.Google ScholarGoogle Scholar
  43. J. Nandigam, V. N. Gudivada, and A. Hamou-Lhadj. 2008. Learning software engineering principles using open source software. In Proc. of FiE.Google ScholarGoogle Scholar
  44. M. Novak, M. Joy, and D. Kermek. 2019. Source-code similarity detection and detection tools used in academia: a systematic review. ACM Transactions on Computing Education (TOCE), Vol. 19, 3 (2019), 1--37.Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. A. S. Nu nez-Varela, H. G. Pérez-Gonzalez, F. E. Mart'inez-Perez, and C. Soubervielle-Montalvo. 2017. Source code metrics: A systematic mapping study. J. Syst. and Softw. (2017).Google ScholarGoogle Scholar
  46. S. Nutbrown and C. Higgins. 2016. Static analysis of programming exercises: Fairness, usefulness and a method for application. Computer Science Ed. (2016).Google ScholarGoogle Scholar
  47. J. C. Paiva, J. P. Leal, and Á. Figueira. 2022. Automated Assessment in Computer Science Education: A State-of-the-Art Review. ACM Trans. on Computing Education (TOCE) (2022), 1--40.Google ScholarGoogle Scholar
  48. H. Passier, S. Stuurman, and H. Pootjes. 2014. Beautiful JavaScript: How to Guide Students to Create Good and Elegant Code. In Proc. of CSERC.Google ScholarGoogle Scholar
  49. K. Petersen, R. Feldt, S. Mujtaba, and M. Mattsson. 2008. Systematic mapping studies in software engineering. In Proc. of Evaluation and Assessment in SE.Google ScholarGoogle Scholar
  50. S. Rose, J. Habgood, and T. Jay. 2019. Using Pirate Plunder to Develop Children's Abstraction Skills in Scratch. In Proc. of Human Factors in Comp. Sys. (CHI).Google ScholarGoogle Scholar
  51. R.W. Roth. 1980. The teaching of documentation and good programming style in a liberal arts computer science program. Proc. of SIGCSE (1980).Google ScholarGoogle ScholarDigital LibraryDigital Library
  52. I. B. Sampaio and L. Barbosa. 2016. Software readability practices and the importance of their teaching. In Proc. of Information and Commun. Sys. (ICICS).Google ScholarGoogle Scholar
  53. L.P. Scatalon, J.C. Carver, R.E. Garcia, and E.F. Barbosa. 2019. Software testing in introductory programming courses: A systematic mapping study. In SIGCSE.Google ScholarGoogle Scholar
  54. C. Schulte, T. Clear, A. Taherkhani, T. Busjahn, and J. H.wohli Paterson. 2010. An introduction to program comprehension for computer science educators. ITiCSE working group reports (2010), 65--86.Google ScholarGoogle Scholar
  55. A. Senger, S. H. Edwards, and M. Ellis. 2022. Helping Student Programmers Through Industrial-Strength Static Analysis: A Replication Study. Proc. of SIGCSE (2022), 8--14.Google ScholarGoogle Scholar
  56. S.K. Sripada and Y.R. Reddy. 2015. Code Comprehension Activities in Undergraduate Software Engineering Course - A Case Study. In Proc. of ASE.Google ScholarGoogle Scholar
  57. M. Stegeman, E. Barendsen, and S. Smetsers. 2016. Designing a rubric for feedback on code quality in programming courses. Proc. of Koli Calling (2016).Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. S. Stoecklin, S. Smith, and C. Serino. 2007. Teaching students to build well formed object-oriented methods through refactoring. Proc. of SIGCSE (2007).Google ScholarGoogle ScholarDigital LibraryDigital Library
  59. P. Techapalokul and E. Tilevich. 2017. Enhancing block-based programming pedagogy to promote the culture of quality from the ground up a position paper. Blocks and Beyond Workshop (2017).Google ScholarGoogle Scholar
  60. E. Tempero and Y. Tu. 2021. Assessing Understanding of Maintainability using Code Review. Proc. of ACE (2021), 40--47.Google ScholarGoogle Scholar
  61. L. C. Ureel II and C. Wallace. 2019. Automated Critique of Early Programming Antipatterns. In Proc. of SIGCSE.Google ScholarGoogle Scholar
  62. E.S. Wiese, A.N. Rafferty, and A. Fox. 2019a. Linking Code Readability, Structure, and Comprehension among Novices: It's Complicated. In Proc. of ICSE-SEET.Google ScholarGoogle Scholar
  63. E.S. Wiese, A.N. Rafferty, D.M. Kopta, and J.M. Anderson. 2019b. Replicating novices' struggles with coding style. Proc. of ICPC (2019).Google ScholarGoogle Scholar
  64. C. Wohlin. 2014. Guidelines for snowballing in systematic literature studies and a replication in software engineering. In Proc. of Evaluation and Assessment in software engineering (EASE)s. 1--10.Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. M. Zaidman. 2004. Teaching Defensive Programming in Java. J. Comput. Sci. Coll., Vol. 19, 3 (2004).Google ScholarGoogle Scholar
  66. I. Zsigmond, M.I. Bocicor, and A.-J. Molnar. 2020. Gamification based learning environment for computer science students. Proc. of Evaluation of Novel Approaches to SE (ENASE) (2020).Google ScholarGoogle ScholarCross RefCross Ref

Index Terms

  1. A Systematic Mapping Study of Code Quality in Education

      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
      • Published in

        cover image ACM Conferences
        ITiCSE 2023: Proceedings of the 2023 Conference on Innovation and Technology in Computer Science Education V. 1
        June 2023
        694 pages
        ISBN:9798400701382
        DOI:10.1145/3587102

        Copyright © 2023 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: 30 June 2023

        Permissions

        Request permissions about this article.

        Request Permissions

        Check for updates

        Qualifiers

        • research-article

        Acceptance Rates

        Overall Acceptance Rate552of1,613submissions,34%

        Upcoming Conference

        ITiCSE 2024

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader