Arguments
Each figure backs one argument. Colour and shape mark the method family of the Summary table in runs/full-1/tdd-methodologies.md, the A02 reference is drawn in ink, and each figure has its table view.
Survey (full-1)
Each survey method ran once, so its figures describe one build. On the share of hidden tests passed at 500000 weighted tokens Held-out TDD led at 0.42, then Coarse-to-fine TDD and Most informative next test at 0.39, against 0.29 for Classic greedy TDD. Held-out TDD also had the lowest adjusted mutation score of the survey at 0.794. In rep-2, a different batch from the survey, the median shares at 500000 weighted tokens were 0.00 for Held-out TDD, 0.34 for Coarse-to-fine TDD, 0.09 for Most informative next test and 0.29 for Classic greedy TDD. Tag: recomputed.
Figure 6.1
PMD violations against classes
The 3 methods that pass strict PMD compliance have 6, 14 and 16 classes, and the other 8 have at most 5.
One mark per method's final clone. Labelled marks pass strict PMD compliance. Hollow marks are start clones, which the permutation test leaves out. An exact one-sided permutation test over all 165 ways to pick 3 of the 11 methods gives p = 0.006 for clean methods having this many classes or more. Spearman rho = -0.73 between classes and violations. Both are post hoc and treat each method as one observation, since each ran once. The hollow start clone with the most classes is multi-start-1 with 7 classes and 3 PMD violations. The A02 reference has 10 classes and 0 PMD violations. Tag: recomputed.
Table view, 15 rows and 5 columns
| Method | Slug | Family | Classes | PMD violations |
|---|---|---|---|---|
| Classic greedy TDD | classic | Baseline | 1 | 10 |
| Noun-verb map | noun-verb | Structure first | 14 | 0 |
| Mapped-path TDD | mapped-path | Structure first | 16 | 0 |
| Functions first, classes later | functions-first | Structure first | 6 | 0 |
| Transformation Priority Premise TDD | tpp | Step size | 3 | 7 |
| Coarse-to-fine TDD | coarse-to-fine | Step size | 3 | 6 |
| Annealed refactoring | annealed | Step size | 1 | 2 |
| Multi-start TDD | multi-start | Search and validation | 3 | 5 |
| Most informative next test | mutation-guided | Search and validation | 3 | 9 |
| Property-based TDD | property-based | Search and validation | 4 | 5 |
| Held-out TDD | held-out | Search and validation | 5 | 4 |
| Multi-start TDD, start clone | multi-start-1 | Search and validation | 7 | 3 |
| Multi-start TDD, start clone | multi-start-2 | Search and validation | 1 | 5 |
| Multi-start TDD, start clone | multi-start-3 | Search and validation | 3 | 5 |
| A02 reference | reference | Reference | 10 | 0 |
Figure 6.2
Mutation score per method
Informs Q12.
Mutation scores run from 75% (held-out) to 95% (mapped-path).
Each dot is the share of a method's N compiled mutants its tests killed or timed out, labelled killed/N, and its whisker is the Wilson 95% interval, descriptive only since one suite judges all of a method's mutants. Only each method's own tests ran, without the starter's two Example tests and their ExampleSpec helper. Over the scores a seeded permutation chi-square gives 63.0 with p below 0.001, and Fisher exact tests with Holm correction separate 11 of the 55 pairs at 0.05. Over the adjusted scores a seeded permutation chi-square gives 120.5 with p below 0.001, and Fisher exact tests with Holm correction separate 22 of the 55 pairs at 0.05. Both treat each mutant as independent within one run per method. Surviving mutants missed by the hidden suite are excluded. They may be equivalent or expose gaps in that suite. The A02 reference ran the reference's own TestKalah tests from the hidden jar and the dashed line marks its score. Tag: recomputed.
Table view, 12 rows and 8 columns
| Method | Slug | Family | Adjusted % | Killed |
|---|---|---|---|---|
| Mapped-path TDD | mapped-path | Structure first | 98 | 107 |
| Property-based TDD | property-based | Search and validation | 100 | 116 |
| Most informative next test | mutation-guided | Search and validation | 100 | 112 |
| Annealed refactoring | annealed | Step size | 98 | 115 |
| Classic greedy TDD | classic | Baseline | 100 | 105 |
| Coarse-to-fine TDD | coarse-to-fine | Step size | 100 | 102 |
| Functions first, classes later | functions-first | Structure first | 96 | 117 |
| Multi-start TDD | multi-start | Search and validation | 87 | 103 |
| Transformation Priority Premise TDD | tpp | Step size | 88 | 94 |
| Noun-verb map | noun-verb | Structure first | 81 | 88 |
| Held-out TDD | held-out | Search and validation | 79 | 112 |
| A02 reference | reference | Reference | not graded | 154 |
| Method | Compiled mutants | Score % | 95% interval % |
|---|---|---|---|
| Mapped-path TDD | 113 | 95 | 88.9 to 97.5 |
| Property-based TDD | 123 | 94 | 88.7 to 97.2 |
| Most informative next test | 119 | 94 | 88.4 to 97.1 |
| Annealed refactoring | 123 | 93 | 87.7 to 96.7 |
| Classic greedy TDD | 113 | 93 | 86.6 to 96.4 |
| Coarse-to-fine TDD | 111 | 92 | 85.3 to 95.7 |
| Functions first, classes later | 132 | 89 | 82.1 to 93.0 |
| Multi-start TDD | 123 | 84 | 76.2 to 89.2 |
| Transformation Priority Premise TDD | 114 | 82 | 74.4 to 88.3 |
| Noun-verb map | 115 | 77 | 68.0 to 83.3 |
| Held-out TDD | 149 | 75 | 67.7 to 81.4 |
| A02 reference | 165 | 93 | 88.5 to 96.2 |
Figure 6.3
Bench run times per method
Informs Q7.
Bench medians run from 205 ms (tpp) to 606 ms (held-out).
Each dot is one bench run, the first hollow, and the tick marks the median. Each run plays 1000 random games from seed 701. The first run is the slowest in 11 of 11 methods, 68 to 468 ms over the median. The dashed line marks the A02 reference median of 500 ms. Tag: recomputed.
Table view, 12 rows and 5 columns
| Method | Slug | Family | Median ms | Run ms |
|---|---|---|---|---|
| Classic greedy TDD | classic | Baseline | 605 | 1020, 610, 605, 600, 599 |
| Noun-verb map | noun-verb | Structure first | 562 | 896, 562, 606, 529, 536 |
| Mapped-path TDD | mapped-path | Structure first | 520 | 858, 518, 520, 520, 517 |
| Functions first, classes later | functions-first | Structure first | 521 | 838, 554, 521, 518, 515 |
| Transformation Priority Premise TDD | tpp | Step size | 205 | 273, 225, 205, 194, 194 |
| Coarse-to-fine TDD | coarse-to-fine | Step size | 605 | 903, 614, 605, 602, 583 |
| Annealed refactoring | annealed | Step size | 526 | 938, 526, 544, 520, 512 |
| Multi-start TDD | multi-start | Search and validation | 553 | 916, 548, 553, 523, 627 |
| Most informative next test | mutation-guided | Search and validation | 576 | 867, 595, 576, 576, 568 |
| Property-based TDD | property-based | Search and validation | 553 | 1021, 591, 540, 553, 547 |
| Held-out TDD | held-out | Search and validation | 606 | 985, 641, 606, 600, 593 |
| A02 reference | reference | Reference | 500 | 831, 500, 502, 495, 495 |