Calculate and verify defect metrics from a defect log
Preconditions (2)
โ
Expected Result: The defect metrics (total defects, open defects, closed defects, defect density, DRE) are correctly calculated and match the expected values
import unittest class DefectMetricsTest(unittest.TestCase): def setUp(self): # Sample defect log data: list of dicts self.defects = [ {'id': 'D1', 'severity': 'High', 'status': 'Open', 'reported_date': '2024-01-01', 'found_before_release': True}, {'id': 'D2', 'severity': 'Medium', 'status': 'Closed', 'reported_date': '2024-01-02', 'found_before_release': True}, {'id': 'D3', 'severity': 'Low', 'status': 'Closed', 'reported_date': '2024-01-03', 'found_before_release': False}, {'id': 'D4', 'severity': 'High', 'status': 'Open', 'reported_date': '2024-01-04', 'found_before_release': True}, {'id': 'D5', 'severity': 'Medium', 'status': 'Closed', 'reported_date': '2024-01-05', 'found_before_release': False} ] self.total_loc = 1000 # total lines of code def test_defect_metrics(self): total_defects = len(self.defects) open_defects = sum(1 for d in self.defects if d['status'] == 'Open') closed_defects = sum(1 for d in self.defects if d['status'] == 'Closed') defect_density = total_defects / self.total_loc # defects per LOC defects_found_before_release = sum(1 for d in self.defects if d['found_before_release']) # Defect Removal Efficiency (DRE) = defects found before release / total defects dre = defects_found_before_release / total_defects # Expected values based on sample data expected_total_defects = 5 expected_open_defects = 2 expected_closed_defects = 3 expected_defect_density = 5 / 1000 expected_dre = 3 / 5 self.assertEqual(total_defects, expected_total_defects, "Total defects count mismatch") self.assertEqual(open_defects, expected_open_defects, "Open defects count mismatch") self.assertEqual(closed_defects, expected_closed_defects, "Closed defects count mismatch") self.assertAlmostEqual(defect_density, expected_defect_density, places=5, msg="Defect density mismatch") self.assertAlmostEqual(dre, expected_dre, places=5, msg="Defect Removal Efficiency mismatch") if __name__ == '__main__': unittest.main()
This test uses Python's unittest framework to automate defect metrics calculation.
The setUp method prepares sample defect data and total lines of code.
The test method calculates total defects, open and closed defects counts, defect density, and defect removal efficiency (DRE).
Assertions check that these calculated values match expected values derived from the sample data.
Using assertEqual and assertAlmostEqual ensures exact and approximate matches respectively.
This approach keeps the test clear, focused, and easy to maintain.
Now add data-driven testing with 3 different defect logs having different defect counts and LOC values
defect density measure in software testing?Pass the test and this pattern moves unknown