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.