  Lehman's Laws teach us that a software system will become progressively less
satisfying to its users over time, unless it is continually adapted to meet new
needs. Understanding software maintenance can potentially relieve many of the
pains currently experienced by practitioners in the industry and assist in
reducing uncertainty, improving cost-effectiveness, reliability and more. The
research community classifies software maintenance into 3 main activities:
Corrective: fault fixing; Perfective: system improvements; Adaptive: new
feature introduction.
  In this work we seek to model software maintenance activities and design a
commit classification method capable of yielding a high quality classification
model. We performed a comparative analysis of our method and existing
techniques based on 11 popular open source projects from which we had manually
classified 1151 commits, over 100 commits from each of the studied projects.
The model we devised was able to achieve an accuracy of 76% and Kappa of 63%
(considered '"Good" in this context) for the test dataset, an improvement of
over 20 percentage points, and a relative improvement of ~40% in the context of
cross-project classification.
  We then leverage our commit classification method to demonstrate two
applications: (1) a tool aimed at providing an intuitive visualization of
software maintenance activities over time, and (2) an in-depth analysis of the
relationship between maintenance activities and unit tests.
