The complexity and vast input space often makes it difficult for developers to adequately test scientific software, which can result in less confidence in the correctness and quality of the code. To address this problem, contemporary peer code review is a lightweight, asynchronous method for ensuring high-quality code. Research results in traditional software engineering and open-source software engineering have shown clear benefits to software quality and maintainability gained from employing peer code review. By writing code that is more readable and easier to understand, developers also make that code more maintainable over time. Despite these benefits, there is a relatively small frequency of its use in the development of scientific software. The goal of this tutorial is to begin to remedy this situation. This tutorial will help bring this valuable practice to the scientific software community to help developers produce more trustworthy, correct, and maintainable software.
The first part of the tutorial will provide important background information and motivation for the usefulness of contemporary peer code review. During this portion of the tutorial, we will describe the peer code review process, introduce the available support tools, and describe some of our own research results on peer code review in scientific software, open-source software, and commercial software. The second part of the tutorial will be hands-on. We will first teach attendees how to use the Gerrit code review support tools commonly used in open-source and commercial software. We will then provide the attendees with code review exercises in which they can use Gerrit and gain some experience. We will conclude the tutorial with a debrief of the hands-on exercise, a discussion of peer code review needs in scientific software, and an overview of peer code review best practices.
Anyone who writes code for any types of software, especially scientific software, will be beneficial from this tutorial. The impacts from contemporary code review on the software should lead to both improved scientific results in the short term (through higher quality software) and in the long-term (through the more maintainable software). The introduction of this practice, along with knowledge of the available tools, will help scientific software developers begin to employ it more frequently in their own projects.
This tutorial is held in conjuction with the 2018 IEEE International Conference on eScience.