Typový system versus unittesty

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #840 kdy: 23. 10. 2018, 12:19:21 »
- U typů musíš věřit kompilátoru, který napsali lepší programátoři, stavějící na teorii lepších matematiků, ověřený miliardami iterací jednotlivých vývojářů-uživatelů, kteří "ověřili" že se ten typový systém chová "inteligentně".
- U unittestů musíš věřit autorovi těch testů.

Svobodně si vyber, komu svěříš svou důvěru :-)

U typů musíš také věřit autorovi těch typů.

Samozřejmě. Však to píšu, že?


BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #841 kdy: 23. 10. 2018, 12:25:33 »
Vim, ze je to hodne hypoteticky priklad, ale to mi snad v kontextu tohoto vlakna odpustite.

IMHO ano, hypoteticky se něco takového může stát. Podle mého ale benefity typů extrémně převažují. Upřednostňovat testy jen z tohoto důvodu mi nepřijde racionální.

Kit

Re:Typový system versus unittesty
« Odpověď #842 kdy: 23. 10. 2018, 13:20:57 »
- U typů musíš věřit kompilátoru, který napsali lepší programátoři, stavějící na teorii lepších matematiků, ověřený miliardami iterací jednotlivých vývojářů-uživatelů, kteří "ověřili" že se ten typový systém chová "inteligentně".
- U unittestů musíš věřit autorovi těch testů.

Svobodně si vyber, komu svěříš svou důvěru :-)

U typů musíš také věřit autorovi těch typů.

Samozřejmě. Však to píšu, že?

No jasně, jenže kvalita vývojáře těch typů je z principu stejná jako kvalita vývojáře testů.

agent

Re:Typový system versus unittesty
« Odpověď #843 kdy: 23. 10. 2018, 13:31:10 »
Píšu sice jen v jazycích, které tak bohatý typový systém nemají, ale zajímalo by mě:
- jak typovým systémem ošetříte metodu která má na vstupu jakýkoliv int, na výstupu také vždy int závislý na vstupu a uvnitř nějakou matematimu.
Unit test je vcelku jasný - pošlu pár běžných a hraničních hodnot a ověřím známý správný výsledek, ale řešení nějakým závislostním typovým systémem by přece muselo zopakovat tu matematiku, která je uvnitř metody = ověřování samo sebou = když bude chyba v metodě, bude i v definici výstupního typu.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #844 kdy: 23. 10. 2018, 13:35:23 »
- U typů musíš věřit kompilátoru, který napsali lepší programátoři, stavějící na teorii lepších matematiků, ověřený miliardami iterací jednotlivých vývojářů-uživatelů, kteří "ověřili" že se ten typový systém chová "inteligentně".
- U unittestů musíš věřit autorovi těch testů.

Svobodně si vyber, komu svěříš svou důvěru :-)

U typů musíš také věřit autorovi těch typů.

Samozřejmě. Však to píšu, že?

No jasně, jenže kvalita vývojáře těch typů je z principu stejná jako kvalita vývojáře testů.

Můžeš rozvést ten princip, kdy platí, že:
kvalita průměrného vývojáře == kvalita lepších vývojářů + lepší matematici + miliardy iterací testování
?


BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #845 kdy: 23. 10. 2018, 13:39:07 »
Píšu sice jen v jazycích, které tak bohatý typový systém nemají, ale zajímalo by mě:
- jak typovým systémem ošetříte metodu která má na vstupu jakýkoliv int, na výstupu také vždy int závislý na vstupu a uvnitř nějakou matematimu.
Unit test je vcelku jasný - pošlu pár běžných a hraničních hodnot a ověřím známý správný výsledek, ale řešení nějakým závislostním typovým systémem by přece muselo zopakovat tu matematiku, která je uvnitř metody = ověřování samo sebou = když bude chyba v metodě, bude i v definici výstupního typu.

Myslím, že už to tu několikrát bylo. To, co vyčítáš typovému systému musíš vyčítat i unittestům. Dělají to totiž úplně stejně. To, že zaneseš chybu do typu je podobné, jako zanesení chyby do testů.

A říkám předem, že testy rozhodně nejsou čitelnější jak typy.

Re:Typový system versus unittesty
« Odpověď #846 kdy: 23. 10. 2018, 13:40:35 »
- U typů musíš věřit kompilátoru, který napsali lepší programátoři, stavějící na teorii lepších matematiků, ověřený miliardami iterací jednotlivých vývojářů-uživatelů, kteří "ověřili" že se ten typový systém chová "inteligentně".
- U unittestů musíš věřit autorovi těch testů.

Svobodně si vyber, komu svěříš svou důvěru :-)

U typů musíš také věřit autorovi těch typů.

Samozřejmě. Však to píšu, že?

No jasně, jenže kvalita vývojáře těch typů je z principu stejná jako kvalita vývojáře testů.

Můžeš rozvést ten princip, kdy platí, že:
kvalita průměrného vývojáře == kvalita lepších vývojářů + lepší matematici + miliardy iterací testování
?

Myslim, ze nema na mysli vyvojare typoveho systemu, ale vyvojare co ho pouzije. Tzn. toho sameho, ktery alternativne pouzije testy. Tzn. napriklad sebe. tebe, nebo me ;-)

Kit

Re:Typový system versus unittesty
« Odpověď #847 kdy: 23. 10. 2018, 13:49:32 »
Můžeš rozvést ten princip, kdy platí, že:
kvalita průměrného vývojáře == kvalita lepších vývojářů + lepší matematici + miliardy iterací testování
?

Ty si nepíšeš vlastní typy? Kolegové je také nepíší? A co vývojáři třetích stran, také nic?

v

Re:Typový system versus unittesty
« Odpověď #848 kdy: 23. 10. 2018, 14:00:51 »
Můžou být stavové typy?
Ano.
"stavové typy" možná ještě neznám, jak se to prosím jmenuje anglicky?

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #849 kdy: 23. 10. 2018, 14:13:14 »
Myslim, ze nema na mysli vyvojare typoveho systemu, ale vyvojare co ho pouzije. Tzn. toho sameho, ktery alternativne pouzije testy. Tzn. napriklad sebe. tebe, nebo me ;-)

Ahá! To pak jo.

V takovém případě bych zdůraznil expresivitu a deklarativnost typů. Napsat nebo použít typ je IMHO výrazně snazší a bezpečnější než napsat testy. Snazší, když to umíš, samozřejmě. Ale to opět platí o obém.

Bacsa

Re:Typový system versus unittesty
« Odpověď #850 kdy: 23. 10. 2018, 14:36:50 »
Můžou být stavové typy?
Ano.
"stavové typy" možná ještě neznám, jak se to prosím jmenuje anglicky?
Closure over a type. Některé jazyky to mají, je to stejný princip jako uzávěr lambda výrazu, akorát na úrovni typů. Někdy se to hodí ve FP.

Re:Typový system versus unittesty
« Odpověď #851 kdy: 23. 10. 2018, 14:54:27 »
Ono naopak díky typům lze i velmi dobře testovat... takový QuickCheck je vynikající...
mohli bychom se zeptat jestli je lepší jazyk dynamický nebo statický (nebo statický a "rich") vzhledem k testovatelnosti

Zeptat se můžem asi na cokoliv, ale nejsem si jist, zdali existuje správná odpověď. Imho v prvé řadě záleží na kódu - tj. tom, co chci testovat.


Nicméně asi tomuto vláknu pořád nerozumím... ony typy vylučují unittesty a unittesty typy?

Bacsa

Re:Typový system versus unittesty
« Odpověď #852 kdy: 23. 10. 2018, 15:00:22 »
Ono naopak díky typům lze i velmi dobře testovat... takový QuickCheck je vynikající...
mohli bychom se zeptat jestli je lepší jazyk dynamický nebo statický (nebo statický a "rich") vzhledem k testovatelnosti
ony typy vylučují unittesty a unittesty typy?
Ne, vzájemně se doplňují, nicméně částečně se funkčně prolínají.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #853 kdy: 23. 10. 2018, 15:28:53 »
Nicméně asi tomuto vláknu pořád nerozumím... ony typy vylučují unittesty a unittesty typy?

No já nic takového nikdy netvrdil. Naopak jsem takovou myšlenku opakovaně dementoval. Marně.

agent

Re:Typový system versus unittesty
« Odpověď #854 kdy: 23. 10. 2018, 15:55:56 »
Myslím, že už to tu několikrát bylo. To, co vyčítáš typovému systému musíš vyčítat i unittestům. Dělají to totiž úplně stejně. To, že zaneseš chybu do typu je podobné, jako zanesení chyby do testů.

A říkám předem, že testy rozhodně nejsou čitelnější jak typy.
Já v tom vidím rozdíl:
- u unit testu ověřuji výsledek, ke kterému jsem mohl dojít naprosto jiným způsobem, než výpočtem tou mojí metodou/funkcí a kódem v ní. Mohla být součástí zadání, mohu ji mít z nějakých Mat-Fyz-Tech tabulek, mohl jsem ji spočítat na kalkulačce a někde ověřit správnost - prostě tu dvojici čísel "konkrétní vstupní hodnota => konkrétní výstupní hodnota" mám ověřenou nezávisle na kódu v mé metodě/funkci a zásah do kódu na té definici nic nemění. 
Unit test bude mít jen statickou hromádku vstupních a výstupních hodnot, které ověří - souhlasí/nesouhlasí - nic, v čem by mohla vzniknout nečitelnost, tam nevidím.
- u typového systému duplikuju obsah své metody/funkce jako ověření výsledku, ten nezávislý pohled tam není. Když něco upravím v v kódu, budu asi muset stejnou úpravu udělat v definici výstupního typu = možnou chybu zduplikuju. A co se týká čitelnosti - definice výstupního typu je přesně stejně složitá jako celý můj kód v metodě/funkci.

Nezavrhuju typový systém obecně, ale pro výše uvedený příklad mi prostě na rozdíl od unit testu nedává smysl.