Agent skill

test-structure-analysis

Analyzes test directory structure, coverage gaps, and helper consolidation opportunities. Produces coverage reports and refactoring recommendations. Use when auditing test suites, planning test improvements, or identifying coverage gaps.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/testing/test-structure-analysis

SKILL.md

Test Structure Analysis

Systematic analysis of test organization, coverage, and maintainability.

When to Use

  • Auditing existing test suites
  • Planning test coverage improvements
  • Identifying helper consolidation opportunities
  • Reviewing test directory structure

MCP Workflow

python
# 1. Get test directory structure
serena.list_dir(relative_path="tests/", recursive=True)

# 2. Find all test files
serena.find_file(file_mask="test_*.py", relative_path="tests/")

# 3. Count tests per file
serena.search_for_pattern("def test_", paths_include_glob="**/test_*.py")

# 4. Find helper functions
serena.search_for_pattern("def (get_|create_|make_|assert_)", paths_include_glob="**/test_*.py")

# 5. Identify source files without tests
serena.list_dir(relative_path="src/", recursive=True)

Analysis Framework

Step 1: Structure Inventory

markdown
## Test Structure: {project}

### Directory Layout

tests/ ├── cli/ [N files, M tests] ├── core/ [N files, M tests] │ ├── module_a/ [N files, M tests] │ └── module_b/ [N files, M tests] └── conftest.py


### Statistics
| Metric | Value |
|--------|-------|
| Total test files | N |
| Total tests | M |
| Tests per file (avg) | X |
| conftest files | Y |

Step 2: Coverage Mapping

Create source-to-test mapping:

markdown
### Coverage Map

| Source | Test File | Coverage |
|--------|-----------|----------|
| src/commands/metric.py | tests/cli/test_metric_cmd.py | HIGH |
| src/core/client.py | tests/core/test_client.py | MEDIUM |
| src/core/models.py | (none) | MISSING |

Coverage levels:

  • HIGH: Core paths tested, edge cases covered
  • MEDIUM: Core paths tested, gaps exist
  • LOW: Minimal tests, major gaps
  • MISSING: No test file exists

Step 3: Helper Analysis

Identify duplicated helpers:

markdown
### Helper Functions

| Helper | Location | Count | Action |
|--------|----------|-------|--------|
| get_output() | test_a.py, test_b.py | 2 | Consolidate |
| create_mock_client() | test_c.py | 1 | Keep |
| assert_table() | test_a.py, test_d.py, test_e.py | 3 | Move to helpers.py |

Coverage Gap Analysis

Priority Framework

Priority Criteria Action
P1-CRITICAL Core business logic, no tests Create immediately
P2-HIGH Public API, minimal tests Add before release
P3-MEDIUM Internal logic, partial tests Add when touching
P4-LOW Utilities, adapters Optional

Gap Identification Pattern

python
# For each source module
for src_file in source_files:
    test_file = find_corresponding_test(src_file)
    if not test_file:
        # MISSING coverage
        priority = assess_priority(src_file)
    else:
        # Analyze test quality
        test_count = count_tests(test_file)
        public_functions = count_public_functions(src_file)
        coverage_ratio = test_count / public_functions

Naming Convention Audit

Expected Patterns

Source Type Test File Pattern
commands/{cmd}.py tests/cli/test_{cmd}_cmd.py
core/{module}/models.py tests/core/{module}/test_models.py
core/client.py tests/core/test_client.py

Violations

markdown
### Naming Issues

| File | Issue | Suggested |
|------|-------|-----------|
| tests/test_utils.py | Location unclear | tests/core/test_utils.py |
| tests/cli/metric_tests.py | Wrong prefix | tests/cli/test_metric_cmd.py |

Consolidation Recommendations

When to Consolidate

Signal Action
Same function in 2+ test files Move to helpers.py
Same fixture in 2+ test files Move to conftest.py
Test file > 500 lines Consider splitting
0 tests in directory Remove or add tests

Target Structure

tests/
├── conftest.py          # Shared fixtures
├── helpers.py           # Shared utility functions
├── fixtures/            # Test data files
│   ├── sample_data.json
│   └── mock_responses.yaml
├── cli/
│   ├── conftest.py      # CLI-specific fixtures
│   └── test_*.py
└── core/
    ├── conftest.py      # Core-specific fixtures
    └── {module}/
        └── test_*.py

Output Format

Quick Analysis

markdown
## Test Structure: {project}

| Category | Count | Status |
|----------|-------|--------|
| Test files | N | |
| Total tests | M | |
| Coverage gaps | X | P1: Y, P2: Z |
| Duplicate helpers | N | |

### Top Priorities
1. [Most critical gap]
2. [Second priority]
3. [Third priority]

Detailed Report

markdown
## Test Structure Analysis: {project}

### Summary
- **Total test files**: N
- **Total tests**: M
- **Average tests per file**: X
- **Directories with conftest**: Y/Z

### Coverage Assessment

#### P1-CRITICAL Gaps
| Source | Issue | Recommendation |
|--------|-------|----------------|
| core/client.py | No error path tests | Add 3-4 tests |

#### P2-HIGH Gaps
| Source | Issue | Recommendation |
|--------|-------|----------------|
| commands/workflow.py | Missing backfill tests | Add before release |

### Consolidation Opportunities

#### Helpers to Consolidate
| Helper | Current Locations | Target |
|--------|-------------------|--------|
| get_output() | test_a.py, test_b.py | helpers.py |

#### Fixtures to Consolidate
| Fixture | Current Locations | Target |
|---------|-------------------|--------|
| sample_path | test_a.py, test_c.py | conftest.py |

### Structure Recommendations
1. [Recommendation 1]
2. [Recommendation 2]

### Action Items
- [ ] Create tests/core/module/test_models.py
- [ ] Move get_output() to tests/helpers.py
- [ ] Add conftest.py to tests/core/workflow/

Quality Checklist

  • All source modules have corresponding test files
  • Test file naming follows conventions
  • No duplicate helper functions across files
  • Fixtures consolidated in appropriate conftest.py
  • P1 coverage gaps identified and prioritized
  • Directory structure is logical and consistent

Didn't find tool you were looking for?

Be as detailed as possible for better results