On understanding the causes of software defectiveness