ABSTRACT
In software engineering, it is not enough to simply write code that only works as intended, even if it is free from vulnerabilities and bugs. Every programming language has a style guide and a set of best practices defined by its community, which help practitioners to build solutions that have a clear structure and therefore are easy to read and maintain. To introduce assessment of code quality into the educational process, we developed a tool called Hyperstyle. To make it reflect the needs of the programming community and at the same time be easily extendable, we built it upon several existing professional linters and code checkers. Hyperstyle supports four programming languages (Python, Java, Kotlin, and Javascript) and can be used as a standalone tool or integrated into a MOOC platform. We have integrated the tool into two educational platforms, Stepik and JetBrains Academy, and it has been used to process about one million submissions every week since May 2021.
Supplemental Material
- 2021. Artifacts and supplementary material. https://doi.org/10.5281/zenodo. 5749825Google Scholar
- 2021. Checkstyle. https://checkstyle.sourceforge.io/Google Scholar
- 2021. Class cohesion measuring tool for Python. https://github.com/mschwager/ cohesionGoogle Scholar
- 2021. Codacy. https://www.codacy.com/Google Scholar
- 2021. flake8. https://flake8.pycqa.org/en/latest/Google Scholar
- 2021. Hyperstyle docker image. https://hub.docker.com/r/stepik/hyperstyleGoogle Scholar
- 2021. Hyperstyle tool. https://github.com/hyperskill/hyperstyleGoogle Scholar
- 2021. JetBrains Academy. https://www.jetbrains.com/academy/Google Scholar
- 2021. Maintainability Index. https://radon.readthedocs.io/en/latest/intro.html# maintainability-indexGoogle Scholar
- 2021. Oracle Java code conventions. https://www.oracle.com/java/technologies/ javase/codeconventions-contents.htmlGoogle Scholar
- 2021. PEP 8 -- Style Guide for Python Code. https://www.python.org/dev/peps/pep0008/Google Scholar
- 2021. PMD. https://pmd.github.io/Google Scholar
- 2021. Pylint. https://www.pylint.org/Google Scholar
- 2021. Qodana. https://www.jetbrains.com/help/qodana/getting-started.htmlGoogle Scholar
- 2021. SonarQube. https://www.sonarqube.org/Google Scholar
- 2021. Stepik. https://stepik.org/Google Scholar
- 2021. Tutor demo version. https://www.hkeuning.nl/rpt/Google Scholar
- Korhan Akcura, Reza Shalchian, Abhijit Patil, Rattandeep Singh, and Jay Tanna. [n.d.]. Static Versus Dynamic Source Code Analysis. ([n. d.]).Google Scholar
- Amjad Altadmri and Neil CC Brown. 2015. 37 million compilations: Investigating novice programming mistakes in large-scale student data. In Proceedings of the 46th ACM Technical Symposium on Computer Science Education. 522--527.Google ScholarDigital Library
- Hannah Blau and J Eliot B Moss. 2015. FrenchPress gives students automated feedback on java program flaws. In Proceedings of the 2015 ACM Conference on Innovation and Technology in Computer Science Education. 15--20.Google ScholarDigital Library
- Jürgen Börstler, Harald Störrle, Daniel Toll, Jelle Van Assema, Rodrigo Duran, Sara Hooshangi, Johan Jeuring, Hieke Keuning, Carsten Kleiner, and Bonnie MacKellar. 2018. " I know it when I see it" Perceptions of Code Quality: ITiCSE'17 Working Group Report. In Proceedings of the 2017 ITiCSE Conference on Working Group Reports. 70--85.Google ScholarDigital Library
- Rohan Roy Choudhury, Hezheng Yin, and Armando Fox. 2016. Scale-driven automatic hint generation for coding style. In International Conference on Intelligent Tutoring Systems. Springer, 122--132.Google ScholarDigital Library
- Martin Fowler. 2018. Refactoring: improving the design of existing code. AddisonWesley Professional.Google Scholar
- Ruvo Giuseppe, Tempero Ewan, Luxton-Reilly Andrew, Rowe Gerard, and Giacaman Nasser. 2018. Understanding semantic style by analysing student code. 73--82. https://doi.org/10.1145/3160489.3160500Google ScholarDigital Library
- Robert L Glass. 2002. Facts and Fallacies of Software Engineering. Addison-Wesley Professional.Google ScholarDigital Library
- Sudheendra Hangal and Monica S Lam. 2002. Tracking down software bugs using automatic anomaly detection. In Proceedings of the 24th International Conference on Software Engineering. ICSE 2002. IEEE, 291--301.Google ScholarCross Ref
- Willy Jimenez, Amel Mammar, and Ana Cavalli. 2009. Software vulnerabilities, prevention and detection methods: A review1. Security in model-driven architecture 215995 (2009), 215995.Google Scholar
- Hieke Keuning, Bastiaan Heeren, and Johan Jeuring. 2017. Code quality issues in student programs. In Proceedings of the 2017 ACM Conference on Innovation and Technology in Computer Science Education. 110--115.Google ScholarDigital Library
- Hieke Keuning, Bastiaan Heeren, and Johan Jeuring. 2019. How teachers would help students to improve their code. In Proceedings of the 2019 ACM Conference on Innovation and Technology in Computer Science Education. 119--125.Google ScholarDigital Library
- Hieke Keuning, Bastiaan Heeren, and Johan Jeuring. 2021. A tutoring system to learn code refactoring. In Proceedings of the 52nd ACM Technical Symposium on Computer Science Education. 562--568.Google ScholarDigital Library
- Kris MY Law, Victor CS Lee, and Yuen-Tak Yu. 2010. Learning motivation in e-learning facilitated computer programming courses. Computers & Education 55, 1 (2010), 218--228.Google ScholarDigital Library
- Robert C Martin. 2009. Clean code: a handbook of agile software craftsmanship. Pearson Education.Google Scholar
- Heather Miller, Philipp Haller, Lukas Rytz, and Martin Odersky. 2014. Functional programming for all! Scaling a MOOC for students and professionals alike. In Companion Proceedings of the 36th International Conference on Software Engineering. 256--263.Google ScholarDigital Library
- Norman Peitek, Sven Apel, Chris Parnin, André Brechmann, and Janet Siegmund. 2021. Program comprehension and code complexity metrics: An fmri study. In 2021 IEEE/ACM 43rd International Conference on Software Engineering (ICSE). IEEE, 524--536.Google ScholarDigital Library
- Nick Rutar, Christian B Almazan, and Jeffrey S Foster. 2004. A comparison of bug finding tools for java. In 15th International symposium on software reliability engineering. IEEE, 245--256.Google ScholarDigital Library
- Caitlin Sadowski, Edward Aftandilian, Alex Eagle, Liam Miller-Cushon, and Ciera Jaspan. 2018. Lessons from building static analysis tools at google. Commun. ACM 61, 4 (2018), 58--66.Google ScholarDigital Library
- Liisa Sakerman. 2021. Overview of the advantages and disadvantages of static code analysis tools. (2021).Google Scholar
- Leo C Ureel II and Charles Wallace. 2019. Automated critique of early programming antipatterns. In Proceedings of the 50th ACM Technical Symposium on Computer Science Education. 738--744.Google Scholar
Index Terms
- Hyperstyle: A Tool for Assessing the Code Quality of Solutions to Programming Assignments
Recommendations
Detecting Code Quality Issues in Pre-written Templates of Programming Tasks in Online Courses
ITiCSE 2023: Proceedings of the 2023 Conference on Innovation and Technology in Computer Science Education V. 1In this work, we developed an algorithm for detecting code quality issues in the templates of online programming tasks, validated it, and conducted an empirical study on the dataset of student solutions. The algorithm consists of analyzing recurring ...
Ne-course for learning programming
TEEM '16: Proceedings of the Fourth International Conference on Technological Ecosystems for Enhancing MulticulturalityDifficulties in learning programming are a constant concern in engineering courses. In many research studies involving the learning programming must of the solutions presented, from the beginning of the first programming languages, was to apply different ...
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 ...
Comments