Who Introduces and Who Fixes? Analyzing Code Quality in Collaborative Student's Projects
Rafael Corsi Ferrao, Igor dos Santos Montagner, Rodolfo Azevedo
TL;DR
The paper investigates code quality in collaborative student projects within an embedded systems course, addressing how errors are introduced and corrected and how group dynamics shape code hygiene. It uses automated quality tools (cppcheck and a custom embedded analyzer) to track issues across eight labs and two two-person projects, connecting per-commit and per-student contributions with statistical analyses. Key findings include that the most active contributors tend to introduce many issues, fixes by the original author are faster, and critical issues are resolved quickly while non-critical issues can linger; laboratory work shows different patterns than project work, and pre-existing boilerplate issues can have longer remediation times. The results motivate curricular integration of explicit code-quality objectives in group projects to bridge academic practice with industry expectations, and point to future work on qualitative analyses of collaboration and feedback delivery in automated environments.
Abstract
This paper investigates code quality education by analyzing how errors are introduced and corrected in group projects within an embedded systems course. We identify who introduces errors, who fixes them, and when these actions occur. Students learn code quality rules for C and embedded systems. We address three questions: RQ1: What is the impact of group formation on code quality? RQ2: How do students interact to fix code issues? RQ3: When are issues introduced and resolved? We analyzed data from eight individual labs and two group projects involving 34 students. The course provides continuous, automated feedback on code quality. Findings show that the most active contributors often introduce the most issues. Many issues are fixed late in the project. Individual labs tend to have fewer issues due to their structured nature. Most problems are fixed by the original author, while cross-student fixes take longer, especially in shared code. Critical issues are fixed quickly, but non-critical ones may be ignored, showing a focus on functionality over quality.
