# Mining Gerrit Data to Study Contentious Reviews and Community Evolution

Software teams that use Gerrit are quickly accumulating data about their code
reviewing processes. The [Software REBELs](http://rebels.ece.mcgill.ca/)—a
research lab at McGill University—mine code review data to study topics like the
impact that code review practices have on software release and design quality.
Our more recent work mines code review data to study the reviewing process
itself. In this talk, I will describe the results of two empirical studies of
data that we collected from the Gerrit instances of the OpenStack project. The
first study aims to understand the reviews where reviewers disagree about a
patch. The second study follows how the concerns that reviewers raise evolve as
the OpenStack community ages and individual reviews accrue experience.

*Shane McIntosh, McGill University*

Shane McIntosh is an assistant professor in the Department of Electrical and
Computer Engineering at McGill University, where he leads the Software
Repository Excavation and Build Engineering Labs (Software REBELs). He received
his Bachelor's degree in Applied Computing from the University of Guelph and
his MSc and PhD in Computer Science from Queen's University, for which he was
awarded the Governor General of Canada's Academic Gold Medal. In his research,
Shane uses empirical software engineering techniques to study software build
systems, release engineering, and software quality. More info about Shane and
the REBELs is available [online](http://rebels.ece.mcgill.ca/).
