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.
- S. Abid, H.A. Basit, and N. Arshad. 2015. Reflections on teaching refactoring: A tale of two projects. Proc. of ITiCSE (2015).Google Scholar
- 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 Scholar
- 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 Scholar
- 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 Scholar
- 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 ScholarDigital Library
- 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 Scholar
- 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 Scholar
- R.R. Choudhury, H. Yin, and A. Fox. 2016. Scale-driven automatic hint generation for coding style. Proc. of Intelligent Tutoring Systems (2016).Google ScholarDigital Library
- 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 Scholar
- 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 Scholar
- 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 Scholar
- G. De Ruvo, E. Tempero, A. Luxton-Reilly, and N. Giacaman. 2018a. Unencapsulated collection - A teachable design smell. Proc. of SIGCSE (2018).Google Scholar
- G. De Ruvo, E. Tempero, G.B. Rowe, and N. Giacaman. 2018b. Understanding Semantic Style by Analysing Student Code. Proc. of ACE (2018).Google Scholar
- T. Delev and D. Gjorgjevikj. 2017. Static analysis of source code written by novice programmers. Proc. of EDUCON (2017).Google Scholar
- A. Fleury. 2001. Encapsulation and reuse as viewed by java students. Proc. of SIGCSE (2001).Google Scholar
- M. Fowler. 1999. Refactoring: improving the design of existing code. Addison-Wesley Professional.Google ScholarDigital Library
- E. Gamma, R. Helm, R. Johnson, and J. M. Vlissides. 1994. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional.Google ScholarDigital Library
- N. Garg and A.W. Keen. 2018. Earthworm: Automated Decomposition Suggestions. In Proc. of Koli Calling.Google Scholar
- F. Gilson, M. Morales-Trujillo, and M. Mathews. 2020. How junior developers deal with their technical debt? Proc. of Technical Debt (2020).Google Scholar
- 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 Scholar
- W. Groeneveld, D. Martin, T. Poncelet, and K. Aerts. 2022. Are Undergraduate Creative Coders Clean Coders? A Correlation Study. SIGCSE (2022), 314--320.Google Scholar
- 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 ScholarDigital Library
- T. Haendler. 2019. A card game for learning software-refactoring principles. Proc. of GamiLearn (2019).Google Scholar
- T. Haendler and G. Neumann. 2019. A framework for the assessment and training of software refactoring competences. In Proc. of KMIS.Google Scholar
- T. Haendler, G. Neumann, and F. Smirnov. 2020. RefacTutor: An Interactive Tutoring System for Software Refactoring. Communications in Computer and Information Science (2020).Google Scholar
- F. Hermans and E. Aivaloglou. 2016. Do code smells hamper novice programming? A controlled experiment on Scratch programs. Proc. of ICPC (2016).Google Scholar
- 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 ScholarCross Ref
- M. Ichinco, A. Zemach, and C. Kelleher. 2013. Towards generalizing expert programmers' suggestions for novice programmers. VL/HCC (2013).Google Scholar
- 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 Scholar
- C. Izu, P. Denny, and S. Roy. 2022. A Resource to Support Novices Refactoring Conditional Statements. Proc. of ITiCSE (2022), 344--350.Google Scholar
- 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 Scholar
- L. Jiang, R. Rewcastle, P. Denny, and E. Tempero. 2020. CompareCFG: Providing Visual Feedback on Code Quality Using Control Flow Graphs. In ITiCSE.Google Scholar
- H. Keuning, B. Heeren, and J. Jeuring. 2017. Code quality issues in student programs. Proc. of ITiCSE (2017).Google Scholar
- H. Keuning, B. Heeren, and J. Jeuring. 2021. A Tutoring System to Learn Code Refactoring. Proc. of SIGCSE (2021), 562--568.Google Scholar
- H. Keuning, J. Jeuring, and B. Heeren. 2023. A Systematic Mapping Study of Code Quality in Education -- with Complete Bibliography. arxiv: 2304.13451Google Scholar
- 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 Scholar
- D. Kirk, T. Crow, A. Luxton-Reilly, and E. Tempero. 2020. On assuring learning about code quality. Proc. of ACE (2020).Google Scholar
- 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 Scholar
- 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 Scholar
- D. Liu and A. Petersen. 2019. Static analyses in python programming courses. Proc. of SIGCSE (2019).Google Scholar
- 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 Scholar
- 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 Scholar
- J. Nandigam, V. N. Gudivada, and A. Hamou-Lhadj. 2008. Learning software engineering principles using open source software. In Proc. of FiE.Google Scholar
- 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 ScholarDigital Library
- 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 Scholar
- S. Nutbrown and C. Higgins. 2016. Static analysis of programming exercises: Fairness, usefulness and a method for application. Computer Science Ed. (2016).Google Scholar
- 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 Scholar
- 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 Scholar
- 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 Scholar
- 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 Scholar
- R.W. Roth. 1980. The teaching of documentation and good programming style in a liberal arts computer science program. Proc. of SIGCSE (1980).Google ScholarDigital Library
- 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 Scholar
- 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 Scholar
- 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 Scholar
- 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 Scholar
- S.K. Sripada and Y.R. Reddy. 2015. Code Comprehension Activities in Undergraduate Software Engineering Course - A Case Study. In Proc. of ASE.Google Scholar
- 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 ScholarDigital Library
- S. Stoecklin, S. Smith, and C. Serino. 2007. Teaching students to build well formed object-oriented methods through refactoring. Proc. of SIGCSE (2007).Google ScholarDigital Library
- 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 Scholar
- E. Tempero and Y. Tu. 2021. Assessing Understanding of Maintainability using Code Review. Proc. of ACE (2021), 40--47.Google Scholar
- L. C. Ureel II and C. Wallace. 2019. Automated Critique of Early Programming Antipatterns. In Proc. of SIGCSE.Google Scholar
- 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 Scholar
- 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 Scholar
- 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 ScholarDigital Library
- M. Zaidman. 2004. Teaching Defensive Programming in Java. J. Comput. Sci. Coll., Vol. 19, 3 (2004).Google Scholar
- 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 ScholarCross Ref
Index Terms
- A Systematic Mapping Study of Code Quality in Education
Recommendations
How Teachers Would Help Students to Improve Their Code
ITiCSE '19: Proceedings of the 2019 ACM Conference on Innovation and Technology in Computer Science EducationCode quality has been receiving less attention than program correctness in both the practice of and research into programming education. Writing poor quality code might be a sign of carelessness, or not fully understanding programming concepts and ...
An interactive ambient visualization for code smells
SOFTVIS '10: Proceedings of the 5th international symposium on Software visualizationCode smells are characteristics of software that indicate that code may have a design problem. Code smells have been proposed as a way for programmers to recognize the need for restructuring their software. Because code smells can go unnoticed while ...
An empirical investigation on the relationship between design and architecture smells
AbstractContext:Architecture of a software system represents the key design decisions and therefore its quality plays an important role to keep the software maintainable. Code smells are indicators of quality issues in a software system and are classified ...
Comments