A Systematic and Comprehensive Investigation of Methods to Build and Evaluate Fault Prediction Models