# TODO_test-analyzer.md
## Context
- **Data Source**: CI/CD pipeline logs (Jenkins/GitHub Actions), test framework reports (JUnit XML, pytest, Jest), coverage tools (Istanbul, Coverage.py, JaCoCo), git history
- **Analysis Period**: [SPECIFY - e.g., last 4 sprints / 30 days]
- **Previous Baseline**: [SPECIFY - e.g., pass rate 94.2%, flaky rate 2.1%, coverage 78%]
- **Quality Concerns**: [SPECIFY - e.g., increasing flaky tests, coverage drop in payment module, rising test execution time]
---
## Analysis Plan
### Data Preparation
- [ ] **TRAN-PLAN-1.1 [Data Collection]**:
- **Data Source**: All CI/CD pipeline runs for analysis period
- **Metric**: Complete test result dataset (pass/fail/skip counts, timings, errors)
- **Threshold**: 100% data completeness - no missing runs or reports
- **Trend Period**: Full analysis period
- [ ] **TRAN-PLAN-1.2 [Data Normalization]**:
- **Data Source**: Cross-framework test reports (JUnit, pytest, Jest)
- **Metric**: Unified format for test names, statuses, timings, error messages
- **Threshold**: 100% of tests mapped to canonical test IDs
- **Trend Period**: N/A - one-time setup
- [ ] **TRAN-PLAN-1.3 [Baseline Establishment]**:
- **Data Source**: Previous analysis period metrics
- **Metric**: Pass rate, flaky rate, coverage %, execution time, defect density
- **Threshold**: Baseline values for comparison
- **Trend Period**: Previous 4 sprints
### Failure Analysis
- [ ] **TRAN-PLAN-2.1 [Failure Categorization]**:
- **Data Source**: Test reports, CI logs, git history
- **Metric**: Failure counts by category (bug, flaky, environment, test debt)
- **Threshold**: 100% of failures categorized
- **Trend Period**: Current analysis period
- [ ] **TRAN-PLAN-2.2 [Flakiness Scoring]**:
- **Data Source**: Test reports, git history
- **Metric**: Flakiness score = failures without code changes / total runs (rolling window)
- **Threshold**: Score > 0.05 flagged as flaky
- **Trend Period**: Rolling 4-sprint window
- [ ] **TRAN-PLAN-2.3 [Top Impact Failures]**:
- **Data Source**: CI logs, developer time tracking
- **Metric**: Developer time lost + CI pipeline delays per failure
- **Threshold**: Top 10 failures by impact
- **Trend Period**: Current analysis period
### Trend Analysis
- [ ] **TRAN-PLAN-3.1 [Metric Trend Comparison]**:
- **Data Source**: All historical test data
- **Metric**: Pass rate, flaky rate, coverage, execution time, test count
- **Threshold**: Compare vs previous sprint and 4-sprint rolling average
- **Trend Period**: Minimum 4 data points (sprints)
- [ ] **TRAN-PLAN-3.2 [Degradation Detection]**:
- **Data Source**: Historical metrics
- **Metric**: Rate of change for each key metric
- **Threshold**: >10% week-over-week degradation flagged
- **Trend Period**: Current vs previous 4 sprints
- [ ] **TRAN-PLAN-3.3 [Cyclical Pattern Detection]**:
- **Data Source**: Timestamped test results
- **Metric**: Failure rates by day-of-week, time-of-day, sprint phase
- **Threshold**: Statistically significant deviation (chi-squared test)
- **Trend Period**: Full analysis period
### Coverage Analysis
- [ ] **TRAN-PLAN-4.1 [Coverage Gap Mapping]**:
- **Data Source**: Coverage reports (Istanbul, Coverage.py, JaCoCo)
- **Metric**: Line and branch coverage by file, directory, module
- **Threshold**: <60% coverage flagged as gap
- **Trend Period**: Current analysis period
- [ ] **TRAN-PLAN-4.2 [High-Risk Area Identification]**:
- **Data Source**: Coverage reports, git history, complexity metrics
- **Metric**: Files with high churn + low coverage + high complexity
- **Threshold**: Top 20 files by risk score
- **Trend Period**: Last 4 sprints
- [ ] **TRAN-PLAN-4.3 [Mutation Test Validation]**:
- **Data Source**: Mutation testing results (if available)
- **Metric**: Mutation score by module
- **Threshold**: <70% mutation score flagged
- **Trend Period**: Current analysis period
---
## Analysis Items
### Failure Pattern Findings
- [ ] **TRAN-ITEM-1.1 [Systemic Failure Cluster]**:
- **Finding**: [SPECIFY - e.g., 45% of failures share stack trace signature in auth module]
- **Impact**: [SPECIFY - e.g., ~12 developer hours/week lost to investigation]
- **Recommendation**: [SPECIFY - e.g., refactor auth token refresh logic; add integration test for token expiry]
- **Effort**: [SPECIFY - e.g., 2 days]
- [ ] **TRAN-ITEM-1.2 [Environment-Related Failures]**:
- **Finding**: [SPECIFY - e.g., 20% of failures occur only on CI runner with low memory]
- **Impact**: [SPECIFY - e.g., 3-4 CI pipeline red builds per day]
- **Recommendation**: [SPECIFY - e.g., increase runner memory; add resource isolation for integration tests]
- **Effort**: [SPECIFY - e.g., 4 hours]
### Flaky Test Findings
- [ ] **TRAN-ITEM-2.1 [Top Flaky Test - test_payment_retry_logic]**:
- **Finding**: Flakiness score 0.18 (18% failure rate without code changes); root cause: timing issue with external payment gateway mock
- **Impact**: Blocks CI ~2 hours/day; 5 developer investigations this sprint
- **Recommendation**: Replace time-based wait with explicit callback/polling mechanism; add retry count assertion
- **Effort**: 3 hours
- [ ] **TRAN-ITEM-2.2 [Flaky Test Cluster - async notification tests]**:
- **Finding**: 6 tests share flakiness pattern; root cause: test isolation issue - shared database state
- **Impact**: 15% of all CI reruns attributed to this cluster
- **Recommendation**: Implement per-test database transaction rollback; add test ordering independence
- **Effort**: 1 day
### Trend Findings
- [ ] **TRAN-ITEM-3.1 [Declining Pass Rate Trend]**:
- **Finding**: Pass rate declined from 96% to 91% over 4 sprints; correlated with 30% increase in test count without corresponding maintenance
- **Impact**: 2 critical bugs escaped to production in last sprint
- **Recommendation**: Allocate 20% of sprint capacity to test maintenance; implement test health budget
- **Effort**: Ongoing
- [ ] **TRAN-ITEM-3.2 [Execution Time Growth]**:
- **Finding**: Test suite execution time increased 35% (from 18 to 24 minutes) over 4 sprints; 15% of tests are >5 seconds
- **Impact**: Developer feedback loop degraded; 20% reduction in local test runs
- **Recommendation**: Parallelize test sharding; identify and optimize slow tests (>10s); move integration tests to nightly pipeline
- **Effort**: 3 days
### Coverage Gap Findings
- [ ] **TRAN-ITEM-4.1 [Critical Coverage Gap - Payment Module]**:
- **Finding**: Payment module coverage dropped from 82% to 54% after recent refactor; 3 high-churn files with <40% coverage
- **Impact**: High risk of regression in payment processing; compliance risk
- **Recommendation**: Add 15 targeted unit tests for new payment flow branches; add integration test for webhook retry logic
- **Effort**: 2 days
- [ ] **TRAN-ITEM-4.2 [Uncovered Error Handling Paths]**:
- **Finding**: 78% of error handling branches (catch blocks) across codebase are untested
- **Impact**: Error paths are highest-risk for production failures; 60% of recent production incidents originated in untested error paths
- **Recommendation**: Prioritize error path tests for critical services; use mutation testing to validate error handling
- **Effort**: 4 days
### Quality Metric Findings
- [ ] **TRAN-ITEM-5.1 [Defect Density Increase]**:
- **Finding**: Defect density increased from 4.2 to 6.8 per KLOC; highest in notification service (12.3/KLOC)
- **Impact**: Increased MTTR; growing bug backlog
- **Recommendation**: Root cause analysis for notification service; code review checklist for concurrency issues
- **Effort**: 2 days
- [ ] **TRAN-ITEM-5.2 [Escape Rate Above Threshold]**:
- **Finding**: Escape rate to production at 14% (threshold: <10%); 3 critical bugs escaped this quarter
- **Impact**: Customer-facing incidents; increased support load
- **Recommendation**: Add production smoke tests; implement canary deployment with automated rollback; enhance integration test coverage for cross-service interactions
- **Effort**: 5 days
---
## Proposed Code Changes
### Fix Flaky Test: test_payment_retry_logic
```diff
- import time
+ from unittest.mock import patch
def test_payment_retry_logic():
payment_service = PaymentService()
payment_service.charge(amount=100, retry_count=3)
- time.sleep(5) # Wait for retry
+ # Use callback to signal retry completion
+ with patch.object(payment_service, '_on_retry_complete') as mock_callback:
+ payment_service.charge(amount=100, retry_count=3)
+ mock_callback.assert_called_once()
assert payment_service.retry_count == 3
```
### Fix Test Isolation: Async Notification Tests
```diff
@pytest.fixture(autouse=True)
def clean_database():
- # Shared database state causes flakiness
- yield
- db.session.rollback()
+ # Ensure clean state before and after each test
+ db.session.rollback()
+ db.drop_all()
+ db.create_all()
+ yield
+ db.session.rollback()
+ db.drop_all()
```
### Add Coverage for Payment Module Error Paths
```python
# tests/test_payment_error_paths.py
def test_payment_webhook_invalid_signature():
"""Test webhook rejects invalid signature."""
client = app.test_client()
response = client.post('/webhook/payment',
json={'event': 'charge.succeeded'},
headers={'X-Signature': 'invalid'})
assert response.status_code == 400
assert response.json['error'] == 'Invalid signature'
def test_payment_retry_exhausted():
"""Test payment fails after max retries."""
payment_service = PaymentService()
with patch.object(payment_service, '_charge_once', side_effect=PaymentError):
with pytest.raises(PaymentFailedError):
payment_service.charge(amount=100, retry_count=3)
assert payment_service.retry_count == 3
```
---
## Commands
### Local Commands
```bash
# Run full test suite with coverage
pytest --cov=. --cov-report=term-missing --cov-branch
# Run mutation testing on critical module
mutmut run --paths-to-mutate payment_service.py
# Analyze flaky tests (requires pytest-flaky)
pytest --flaky-report
# Generate coverage report for CI comparison
coverage report -m --fail-under=80
```
### CI Commands (add to pipeline)
```yaml
# Add flaky test detection to CI
- name: Run tests with flaky detection
run: |
pytest --flaky-report --flaky-report-file=flaky.json
python scripts/analyze_flaky.py flaky.json
# Add coverage gate to CI
- name: Check coverage threshold
run: |
coverage report --fail-under=80
coverage json -o coverage.json
python scripts/check_coverage_delta.py coverage.json
```
---
## Quality Assurance Task Checklist
Before finalizing this analysis:
- [ ] All test data sources are included with verified completeness for the analysis period
- [ ] Metrics are calculated correctly with consistent methodology across data sources
- [ ] Trends are based on sufficient data points (minimum 4) for statistical validity
- [ ] Flaky tests are identified with quantified flakiness scores and impact assessment
- [ ] Coverage gaps are prioritized by risk (code churn, complexity, business criticality)
- [ ] Recommendations are specific, actionable, and ranked by expected impact
- [ ] Report format includes both executive summary and detailed technical sections
Discussion
0 commentaires