Nechapu jednu vec. Mam funkci, ktera meni vstup na vystup:
5->3
3->5
Jak jde toto ošetřit typem bez použití unit testu?
Zkusím taky odpovědět: Např. závislostním typem duplikujícím výpočet dané funkce.
Jestli po celé té diskusi správně chápu závislostní typy, pak se jedná o (deklarativní) mechanismus omezení definičního oboru a oboru hodnot, případně vyjádření jejich závislosti. To lze určit v rozsahu od zcela volného až po zcela přesný, který pak ale obvykle (když nemá více řešení) kopíruje samotný výpočet. Takže buďto získám mechanismus omezeně kontrolující správnost výpočtu - otázkou je, zda to stačí, nebo zcela spolehlivě ověřím výpočet, ale samotná definice typu bude nutně stejně složitá jako samotný výpočet, takže můžu udělat tu samou chybu 2x. Závěr: Obecně neexistuje žádný magický mechanismus, který by dokázal (aťto v typu či jinde) rozhodnout, zda je můj výpočet správný.
To podstatné: Jednotkové testy se o hledání takového mechanismu ani nesnaží, protože to dle výše uvedené úvahy nejde. Využívají podmnožinu ZNÁMÝCH vstupů a jejich výstupů pro ověření výpočtu s tím, že je-li v pořádku, pro neznámé výstupy se výpočet považuje za pravděpodobně správný.
Takže z podstaty správnost výpočtu nezaručují ani jednotkové testy (to se vědělo), ani typový systém (to se tu někteří snažili dokázat). Tudíž jestli má smysl o něčem diskutovat, tak to, zda se vyplatí budovat typový systém nebo jednotkové testy.