Když tu tak čtu tu diskusi (a některým věcem nerozumím), tak mě napadá, že by asi šlo testy nahradit nějakým typovým systémem, ale jeho složitost by byla extrémní. Z praktického hlediska testy vyměňují obecnost (kategorie) či případnou složitost typového systému za svoji neúplnost (testování diskrétních hodnot) - diskrétní hodnoty by musely být nahrazeny mnoha specifickými třídami vedoucími na výraznou složitost typového systému. Uvažuju správně?
Nešlo by takto nahradit ani zdaleka všechny testy. Vycházíte z toho, že test pokryje jenom některé možné vstupy, a nějakým typovým systémem byste omezil typy tak, aby byly možné jenom ty vstupy, které dávají správné výstupy. Jenomže tím se dostáváte do cyklu, protože to, zda jsou výstupy správné, není vlastností toho typového systému, ale je to arbitrární vlastnost – něco, co tomu přisuzujeme z venku. A k tomu právě slouží ty testy, abychom ověřili, že implementace (libovolná, klidně jako „typový systém“) odpovídá těm námi stanoveným pravidlům.
Jinak řečeno – o nějakém algoritmu ani typu nelze říci, zda je nebo není správně (sám o sobě). Jestli je nebo není správně závisí na tom, k čemu ho chceme použít. A to právě dělají testy – dají dohromady implementaci (algoritmus) a způsob použití a testují, zda daný algoritmus je správný pro daný způsob použití.
Typový systém nás může omezit, abychom něco nemohli použít způsobem, který pravděpodobně nikdy nebude správně. Ale už nás nemůže omezovat ve způsobu použití, který někdy správně je ale jindy správně není.