Menu

Recently I was invited to collaborate with a team to work on an industry use tool, GatorGrader. While working on this project I used the GitHub Flow Model, wrote code, helped write test cases, tested my team's work, troubleshooted, and wrote documentation.

GatorGrader is an automated assessment tool that checks the work of student programmers and writers. It is designed for use with GitHub, more specifically GitHub Classroom, and it also works for continuous and automated checking with Travis CI. Instructors can set criteria they want the tool to check for in student laboratory assignments in a "gatorgrader.yml" file. Then to see if their work meets the criteria, all the student has to do is run the simple command "gradle grade" in the project's working directory in terminal. GatorGrader will then run and tell the student if their code or writing meets the criteria in a simple and easily readable format.

The example below shows some sample criteria an instructor could set for a student Java assignment. Additionally, it shows the output of running "gator grade" for this criteria.

Checks in a GatorGrader.yml file for a sample Java project:
                  
                  ---
                  name: gatorgrader-samplelab
                  break: true
                  fastfail: false
                  indent: 4
                  ---
                  src/main:
                      java:
                          samplelab/SampleLabMain.java:
                              --exists
                              --single 1 --language Java
                              --multi 3 --language Java
                              --fragment "println(" --count 2
                              --fragment "new DataClass(" --count 1
                              --fragment "new Date(" --count 2
                          samplelab/DataClass.java:
                              --exists
                              --multi 1 --language Java
                              --fragment "int " --count 1
                  writing/reflection.md:
                      mdl
                      --paragraphs 2
                      --words 6
                  --commits 18
                  
                
Some of the sample code (SampleLabMain.java) being checked:
                
                public class SampleLabMain {
                  public static void main(String[] args) {
                    // Step 1: Display the welcome message
                    System.out.println("Hello World! DATA: " + new DataClass(4));
                    System.out.println("GatorGradle " + new Date());
                  }
                }

                
              

Output from running "gator grade":
                  
                 

The GatorGrader.yml file checks for a few things in the SampleLabMain.java file, such as at least one of the "new DataClass(" fragment, which it finds as it is in the source code above. Additionally, it also checks for at least 2 of the "new Data(" fragment, but in this case it only finds one, so the check fails.

My team was tasked with creating a LaTeX assignment starter that instructors could use as a sample lab assignment for projects utilizing LaTeX. I assisted with this task by collaborating with my team members both in person and using the GitHub Issue Tracker to come up with ideas of content to include in the assignment starter. During this process, I helped find relevant content to include in the README and the sample LaTeX file. Additionally, I worked to make improvements on and fix issues with both the repository's README and code in the sample LaTeX file. Afterward, my group worked to add support for checking regular expressions (regex) with GatorGrader. I assisted with this portion of the project by offering ideas on how regex support could work with GatorGrader. With this, once we had a semi-working version of the tool, I spent several hours trying to figure out how the commands would work with regex, eventually finding the correct solution. Later on, I continued to help with testing, trying the regex tool on a variety of machines and testing to make sure the command could recognize regex in a variety of different file types, such as Java and LaTeX. Now that our tool was working, I helped to troubleshoot failing test cases and noticed several bugs in these test cases and I subsequently notified the team members working on these test cases. Afterward, I wrote documentation in code and technical writing form for our new regex checking tool. Additionally, once our team submitted the pull request for our updated tool, I took steps to fix issues with the pull request reviewers brought up and discussed changes made and other topics with them in the pull request comments.

This project was a good learning experience for me as I better learned about the software engineering process and how to maintain industry use software. Additionally, I got more experience working in a team of motivated individuals on a software project. Also, since GitHub was used for collaboration between team members and for the project itself, I learned how to better use the GitHub Flow Model. Overall, this project taught me how to better work on real-world software in a team-based environment.

Header Image: CC BY-SA 3.0], from Wikimedia Commons