0
0
Testing Fundamentalstesting~15 mins

Defect metrics in Testing Fundamentals - Build an Automation Script

Choose your learning style9 modes available
Calculate and verify defect metrics from a defect log
Preconditions (2)
Step 1: Open the defect log file
Step 2: Count total number of defects
Step 3: Count number of open defects
Step 4: Count number of closed defects
Step 5: Calculate defect density given total defects and total lines of code (LOC)
Step 6: Calculate defect removal efficiency (DRE) using defects found before release and total defects
Step 7: Verify that the calculated metrics match expected values
✅ Expected Result: The defect metrics (total defects, open defects, closed defects, defect density, DRE) are correctly calculated and match the expected values
Automation Requirements - Python unittest
Assertions Needed:
Assert total defects count equals expected
Assert open defects count equals expected
Assert closed defects count equals expected
Assert defect density calculation is correct
Assert defect removal efficiency calculation is correct
Best Practices:
Use setup method to load defect data
Use clear variable names for metrics
Use assertEqual for exact matches
Keep test focused on metric calculations
Avoid hardcoding values inside test methods
Automated Solution
Testing Fundamentals
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.

Common Mistakes - 4 Pitfalls
Hardcoding expected values inside the test method without explanation
Not using setup method to prepare test data
Using print statements instead of assertions
Calculating metrics incorrectly, e.g., dividing by zero or wrong denominator
Bonus Challenge

Now add data-driven testing with 3 different defect logs having different defect counts and LOC values

Show Hint