Introducing High School Students to Version Control, Continuous Integration, and Quality Assurance

cover
4 Jul 2024

Authors:

(1) Joseph Latessa, Department of Computer Science Wayne State University, Detroit MI USA (jlatessa@wayne.edu);

(2) Aadi Huria, Senior, Salem High School Canton, MI USA (huria.aadi@gmail.com);

(3) Deepak Raju, Senior, Salem High School, Canton MI USA (Deepak.Raju294@outlook.com).

Abstract and Introduction

Related Work

Project Prerequisites

Project Implementation

Insight and Reflections

Conclusions, Acknowledgement and References

ABSTRACT

Software Engineering concepts such as version control, continuous integration, and unit testing are often not presented in college computer science curriculums until the third year of study, after completing several semesters of programming courses. Throughout the summer of 2023, two high school students volunteered in our lab at Wayne State University where I’m a graduate research assistant and Ph.D. student in computer science. The students had taken AP Computer Science but had no prior experience with software engineering or software testing. This paper documents our experience devising a group project to teach the requisite software engineering skills to implement automated tests that meaningfully contribute to open-source scientific computing projects developed in connection with our lab. We describe the concepts covered, tools used, and software tests written in this early introduction to software engineering while maintaining shared emphases on education and the deployment of our work.

KEYWORDS

Automated Testing, Continuous Integration, GitHub Actions, High School Summer Research, Software Engineering, Version Control, Website Debugging

1 INTRODUCTION

During the summer of 2023, two high school students volunteered to assist in one of Wayne State University’s computer science research labs, which focuses on high-performance computing and software engineering for scientific applications. The students aspire to study computer science as their major when they begin their undergraduate studies in 2024. Prior to volunteering in our lab, they had successfully completed AP Computer Science courses where they learned Java and Python but had no prior experience with software engineering concepts such as version control, continuous integration, and unit testing. Our goals were to develop a summer project that would be appropriate for the students’ current experience and education, provide a learning opportunity to gain new skills relevant to assisting in a laboratory environment, and to provide an opportunity to produce work that meaningfully contributes to the scientific computing applications developed in connection with our lab.

Two scientific computing applications developed in connection with our lab include JETSCAPE [1] and GOMC [2]. JETSCAPE is a multi-institutional collaboration that develops event generators to simulate ultra-relativistic heavy-ion collisions. GOMC is an application to simulate molecular systems using the Metropolis Monte Carlo Algorithm [3]. Both projects are opensource and maintain their respective repositories on GitHub. They also use GitHub Pages to maintain and deploy their project websites.

To meet our project goals, we decided to emphasize automated software testing. JETSCAPE [1] and GOMC [2] have previously developed and deployed some tests, but there was an interest among the collaborators to further expand upon the tests in place. Since the student volunteers had not yet studied software engineering and were not yet familiar with concepts such as continuous integration and unit testing, attaining these skills while working on this project would provide a unique educational value. Since the students had already completed AP Computer Science and were already comfortable with the Java and Python languages, the students could apply the programming skills they already learned to develop these automated tests.

Although having studied Java and Python, the students had no prior experience with Linux or with working at the command line. They also had no previous experience working with Git or any version control platform. This project would therefore have to begin with preliminary introductions to the Linux shell environment and version control. Since continuous integration would also be a new concept, a demonstration of GitHub Actions and writing YAML files would conclude our preliminary introduction.

The main substantive tasks of the project would be the implementation of three automated tests. The first two tests, an HTML validator, and a link checker, would be deployed on the JETSCAPE [1] and GOMC [2] websites. The implementation of the third test would require discussing the concept of unit testing and then deploying a series of unit tests to ensure the correctness of JETSCAPE’s XML formatted input.

The tools used throughout the project include Visual Studio Code, the Ubuntu Distribution installed on WSL and accessed through Windows Terminal, version control with Git and GitHub, automation with GitHub Actions, static hosting with GitHub Pages, Python scripting to customize and enhance the functionality of GitHub Marketplace Actions, and Python’s UNITTEST framework.

In the following sections, we provide a detailed description of the project and the concepts covered. We then reflect upon the successes and challenges we faced and report this experience so that other students at a similar level in their computer science education might find comparable opportunities to study these software engineering concepts earlier than they otherwise might while also attaining practical lab experience to supplement their traditional high school computer science curriculum.

This paper is available on arxiv under CC BY-NC-ND 4.0 DEED license.