Software

from rich.console import Console
import re

def count_software(file_path: str) -> int:
    with open(file_path, "r") as file:
        html_content = file.read()
    pattern = r'<li\s+class="software"\s*>'
    return len(re.findall(pattern, html_content))

console = Console()
file_path = "../software/index.qmd"
count = count_software(file_path)
console.print(
      f":rocket: Here are {count} software projects to which I have contributed!"
)
🚀 Here are 121 software projects to which I have contributed!

Research

Software

  • afluent: Pytest plugin to support automated fault localization
  • avmf: Extensible framework for the search-based alternating variable method
  • cannier-framework: Flaky test detection with re-running and machine learning
  • expose: Doubling experiments to infer actual-worst-case time complexity
  • kanonizo: Effective automated regression test suite prioritization for JUnit
  • major: Easy and scalable mutation testing for the Java programming language
  • mrstudyr: Retrospectively study effectiveness of mutation testing techniques
  • pytest-cannier: Pytest plugin to characterize Pytest test suites
  • redecheck: Automated checking of responsively designed web pages
  • schemaanalyst: Data generation and mutation analysis for database schemas
  • testinspect: Pytest plugin to characterize Pytest test suites
  • showflakes: Pytest plugin for automatically finding flaky tests
  • tada: Automated order-of-growth analysis for Python functions
  • viser: Automated visual verification of responsive layout failure reports
Research Connection

Many, but not all, of these software tools are connected to the research papers and research presentations published by me and my research collaborators. For instance, the papers (Kinneer et al. 2015a) and (Kinneer et al. 2015b) both describe experiments with the expose tool. As additional examples, the testinspect and showflakes tools both supported research that resulted in the publication of (Parry et al. 2022a) and the schemaanalyst tool enabled the publication of papers like (Alsharif, Kapfhammer, and McMinn 2020) . It is also important to note that, while I played an active role in the conception, documentation, use, and experimental evaluation of each of these research prototypes, I normally was not the lead developer of the tool. See the contributor list in each project’s GitHub repository for contributor details!

Resources

Research Connection

Interested in conducting research that builds or cites on the research papers and research presentations published by me and my research collaborators? You can check out these resources for abstracts of conference talks, BiBTeX references to papers, and templates for writing a research paper or a curriculum vitae. For instance, the avm-bibliography documents the research articles cited in the (McMinn and Kapfhammer 2016) paper that describes the avmf tool.

Papers

Research Connection

While I don’t release the LaTeX source code of most of the research papers that my research collaborators and I publish, I’ve made the GitHub repository of select papers publicly available. For instance, the source code that results in the paper (McMinn, Kapfhammer, and Wright 2016) is in the gkapfham/ast2016-paper GitHub repository. Check it out to see how we structure papers!

Presentations

Research Connection

Did you know that I use LaTeX, JavaScript, Markdown, and other programming languages to create many of research presentations? By studying the source code for presentations like (Kapfhammer 2021a) and (Kapfhammer 2021b) you can see how we create and layout the graphical content! My colleagues and I have also release the source code for the presentations that accompany select research papers, like (McCurdy, McMinn, and Kapfhammer 2016) .

Replication

Research Connection

Whenever possible, my collaborators and I publish replication packages to support our research papers and research presentations. For instance, you can review all of the survey data from (Parry et al. 2022b) and try out the tooling used to run the experiments that we report on in (Alsharif, Kapfhammer, and McMinn 2020) . Check the above GitHub repositories for more details!

Teaching

Software

  • dockagator: Docker container and infrastructure for GatorGrader
  • gatorgrade: Python front-end for the GatorGrader assessment tool
  • gatorgrader: Automated assessment for source code and writing
  • gatorgradle: Gradle plugin for efficient use of GatorGrader
  • gatorgrouper: Group formation tool for team-based courses
  • sheetshuttle: Tool for data transfer between Google Sheets and GitHub
  • seed: Analyzer and displayer of responses to the SEED survey
Teaching Connection

My students, colleagues, and I create and maintain several tools that support the automated assessment of the source code and technical writing that students complete as part of a course project. You can learn more about the tools that we have implemented and deployed by checking out presentations like (Kapfhammer 2018) and (Kapfhammer 2019) . Check out the above GitHub repositories for details about how to use these tools in your teaching!

Platforms

Teaching Connection

Please visit the web site for each of my course platforms to learn more about the specific technologies that we use to deploy each site that I use for teaching.

Courses

  • cs102F2020: Course content for Computer Science 102 Fall 2020
  • cs302F2020: Course content for Computer Science 302 Fall 2020
  • cs100S2020: Course content for Computer Science 100 Spring 2020
  • cs203S2020: Course content for Computer Science 203 Spring 2020
  • cs100F2019: Course content for Computer Science 100 Fall 2019
  • cs101F2019: Course content for Computer Science 101 Fall 2019
  • cs203S2019: Course content for Computer Science 203 Spring 2019
  • cs302S2019: Course content for Computer Science 302 Spring 2019
  • cs481S2019: Course content for Computer Science 481 Spring 2019
  • cs100F2018: Course content for Computer Science 100 Fall 2018
  • cs101F2018: Course content for Computer Science 101 Fall 2018
  • cs103S2018: Course content for Computer Science 103 Spring 2018
  • cs112S2018: Course content for Computer Science 112 Spring 2018
  • cs111F2017: Course content for Computer Science 111 Fall 2017
  • cs280F2017: Course content for Computer Science 280 Fall 2017
  • cs600F2017: Course content for Computer Science 600 Fall 2017
  • cs111S2017: Course content for Computer Science 111 Spring 2017
  • fs102S2017: Course content for First-Year/Sophomore 102 Spring 2017
  • cs111F2016: Course content for Computer Science 111 Fall 2016
  • cs112F2016: Course content for Computer Science 112 Fall 2016
  • cs111S2016: Course content for Computer Science 111 Spring 2016
  • cs441S2016: Course content for Computer Science 441 Spring 2016
  • cs111F2015: Course content for Computer Science 111 Fall 2015
  • cs280F2015: Course content for Computer Science 280 Fall 2015
Teaching Connection

Prior to developing course platforms for each of the classes that I teach, I created GitHub repositories and/or organizations for every course and linked to them from my professional web site’s teaching page. Even though I no longer maintain out-of-date course content and instead encourage learners to visit my course platforms, you may contact me with your request for old materials.

Open-Source

Configurations

  • dotfiles: Configuration files for my development environment
  • tmuxinators: Configuration files for the terminal multiplexor
  • vim-vitamin-onec: Dark color scheme for Vim and Neovim
Software Connection

I aim to have a well-documented set of software tools that I run on the laptop that I use for all of my professional activities. I hope that some of these configurations can help you to setup your own development workstation!

Defects and Discussions

Software Connection

Whenever I can do so, I participate in the maintenance and enhancement of open-software software tools by reporting defects and participating in discussions. My aim is to help and encourage the maintainers of these tools!

Prior Work

  • gelations: Test suite prioritization with order-based genetic algorithms
  • modificare: Reproducible experimentation with regression testing techniques
  • proteja: Easy-to-use techniques for test suite reduction and prioritization
  • raise: Comprehensive test suite execution and management
Software Connection

Although I no longer maintain any of these software tools, I’m glad to make them available so that others can use them as a source of inspiration.

References

Alsharif, Abdullah, Gregory M. Kapfhammer, and Phil McMinn. 2020. “STICCER: Fast and Effective Database Test Suite Reduction Through Merging of Similar Test Cases.” In Proceedings of the 13th International Conference on Software Testing, Verification and Validation.
Kapfhammer, Gregory M. 2018. “Using GitHub, Travis CI, and Python to Introduce Collaborative Software Development.” PyCon Education Summit.
———. 2019. “Using Python and GitHub for Team Formation and Assessment.” PyCon Poster Symposium.
———. 2021a. “Committing to Writing Good Commit Messages: Supporting the Creation of Human- and Machine-Readable Commit Messages with Python.” PyCon Lightning Talk Session.
———. 2021b. “Type Annotations in Python: Terribly Intimidating or Tremendously Informative?” PyOhio.
Kinneer, Cody, Gregory M. Kapfhammer, Chris J. Wright, and Phil McMinn. 2015a. “Automatically Evaluating the Efficiency of Search-Based Test Data Generation for Relational Database Schemas.” In Proceedings of the 27th International Conference on Software Engineering and Knowledge Engineering.
———. 2015b. “ExpOse: Inferring Worst-Case Time Complexity by Automatic Empirical Study.” In Proceedings of the 27th International Conference on Software Engineering and Knowledge Engineering.
McCurdy, Colton J., Phil McMinn, and Gregory M. Kapfhammer. 2016. “Mrstudyr: Retrospectively Studying the Effectiveness of Mutant Reduction Techniques.” In Proceedings of the 32nd International Conference on Software Maintenance and Evolution.
McMinn, Phil, and Gregory M. Kapfhammer. 2016. “AVMf: An Open-Source Framework and Implementation of the Alternating Variable Method.” In Proceedings of the 8th International Symposium on Search-Based Software Engineering.
McMinn, Phil, Gregory M. Kapfhammer, and Chris J. Wright. 2016. “Virtual Mutation Analysis of Relational Database Schemas.” In Proceedings of the 11th International Workshop on Automation of Software Test.
Parry, Owain, Gregory M. Kapfhammer, Michael Hilton, and Phil McMinn. 2022a. “Evaluating Features for Machine Learning Detection of Order- and Non-Order-Dependent Flaky Tests.” In Proceedings of the 15th International Conference on Software Testing, Verification and Validation.
———. 2022b. “Surveying the Developer Experience of Flaky Tests.” In Proceedings of the 44th International Conference on Software Engineering – Software Engineering in Practice Track.