  Concurrent programs are difficult to test due to their inherent
non-determinism. To address this problem, testing often requires the
exploration of thread schedules of a program; this can be time-consuming when
applied to real-world programs. Software defect prediction has been used to
help developers find faults and prioritize their testing efforts. Prior studies
have used machine learning to build such predicting models based on designed
features that encode the characteristics of programs. However, research has
focused on sequential programs; to date, no work has considered defect
prediction for concurrent programs, with program characteristics distinguished
from sequential programs. In this paper, we present ConPredictor, an approach
to predict defects specific to concurrent programs by combining both static and
dynamic program metrics. Specifically, we propose a set of novel static code
metrics based on the unique properties of concurrent programs. We also leverage
additional guidance from dynamic metrics constructed based on mutation
analysis. Our evaluation on four large open source projects shows that
ConPredictor improved both within-project defect prediction and cross-project
defect prediction compared to traditional features.
