Typový system versus unittesty

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #540 kdy: 27. 06. 2018, 23:25:10 »
Tak já se obecně domnívám, že ruční psaní unittestů je jen mezistupeň a v budocnosti to nahradí automatika.

Jednotkové testy, tedy alespoň jejich boilerplates, ve Vimu generuji už dávno.

A pak je mažeš?

Ne. Stávají se součástí dokumentace.
Tak to pak není to co mám na mysli.
Moje prognóza je, že IDE (nebo jakýkoliv jiný nástroj) perfektně rozumí kódu a je schopen na požádání vygenerovat ukázky kódu. Žádný další smysl nemají. Tudíž nebude mít smysl je uchovávat.


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #541 kdy: 27. 06. 2018, 23:27:38 »
Asi takhle. Pomocí testů můžeš otestovat pár vhodných případů, ale nemůžeš otestovat všechny. Nejen, že by si se upsal, ale u negativních to třeba vůbec nejde (https://forum.root.cz/index.php?topic=18804.msg271719#msg271719). Pomocí typů zajistíš naprosto bez výjimky všechny případy.

Testy na negativní případy se naopak píší zcela běžně, podle mne dokonce převažují nad pozitivními případy. Pokud metoda má vyhazovat tři výjimky při chybných vstupech, musím otestovat všechny.
Ty chybné vstupy nejsu tři, ale nekonečno.
Můžeš si všimnout, že v mém příspěvku nepíši o tom, že by se negativní testy nepsali vůbec.

Kit

Re:Typový system versus unittesty
« Odpověď #542 kdy: 27. 06. 2018, 23:52:35 »
Moje prognóza je, že IDE (nebo jakýkoliv jiný nástroj) perfektně rozumí kódu a je schopen na požádání vygenerovat ukázky kódu. Žádný další smysl nemají. Tudíž nebude mít smysl je uchovávat.

To není problém, protože už v první fázi překladu získáš derivační strom, který je základem pro jeho pochopení strojem. Když to interpretuješ jiným derivačním stromem, dostaneš výslednou aplikaci nebo testy. Dosud se však nevyplatilo vytváření derivačního stromu pro generování testů, neboť se do něj stejně musí doplnit okrajové podmínky.

V praxi to pak bude vypadat tak, že v záhlaví testované metody budou definovány tyto okrajové podmínky. Pak už nebude nutné testy generovat do dalších souborů, ale budou se přímo interpretovat z těchto záhlaví. Přiblíží se tak k typovým signaturám, ale budou dokonalejší. Pro některé jazyky to už více či méně funguje.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #543 kdy: 27. 06. 2018, 23:56:06 »
Přiblíží se tak k typovým signaturám, ale budou dokonalejší. Pro některé jazyky to už více či méně funguje.

Tak, o tom to celé je.

andy

Re:Typový system versus unittesty
« Odpověď #544 kdy: 28. 06. 2018, 00:11:07 »
Jinak tohle neznám, ale co jsem pochopil, tak je to automatické dokazování některých vlastností (refinement types)..

https://ucsd-progsys.github.io/liquidhaskell-blog/



BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #545 kdy: 28. 06. 2018, 00:30:32 »
Jinak tohle neznám, ale co jsem pochopil, tak je to automatické dokazování některých vlastností (refinement types)..

https://ucsd-progsys.github.io/liquidhaskell-blog/

Hezký, díky.

nv

Re:Typový system versus unittesty
« Odpověď #546 kdy: 28. 06. 2018, 00:41:01 »
Jestli tě chápu dobře - u typů je někdy blbá ta ultimátnost.
A co je to vlastně ta "ultimátnost"? S tím slovem jsem se ještě nesetkal.

Takové slovo vůbec neexistuje.
Ultimus znamená latinsky poslední.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #547 kdy: 28. 06. 2018, 01:12:47 »
Jestli tě chápu dobře - u typů je někdy blbá ta ultimátnost.
A co je to vlastně ta "ultimátnost"? S tím slovem jsem se ještě nesetkal.

Takové slovo vůbec neexistuje.
Ultimus znamená latinsky poslední.
He, to jsem ani netušil :-)

v

Re:Typový system versus unittesty
« Odpověď #548 kdy: 28. 06. 2018, 09:33:00 »
Jinak tohle neznám, ale co jsem pochopil, tak je to automatické dokazování některých vlastností (refinement types)..

https://ucsd-progsys.github.io/liquidhaskell-blog/

Hezký, díky.
připomělo mi to tohle https://github.com/hwayne/lets-prove-leftpad
verze v idrisu je zajímavě stručná

Ghhh

Re:Typový system versus unittesty
« Odpověď #549 kdy: 28. 06. 2018, 10:24:28 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Kit

Re:Typový system versus unittesty
« Odpověď #550 kdy: 28. 06. 2018, 11:09:25 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Možná by stačilo vypočtené kořeny dosadit do té kvadratické rovnice, což snad půjde také provést v těch typech.

JSH

Re:Typový system versus unittesty
« Odpověď #551 kdy: 28. 06. 2018, 12:32:45 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Možná by stačilo vypočtené kořeny dosadit do té kvadratické rovnice, což snad půjde také provést v těch typech.
Nevím, jak dobře půjde symbolicky kontrolovat floatové výpočty. Má to vycházet pro ideální reálná čísla, nebo pro floaty včetně nekonečen a nanů? A s jakou přesností?

Re:Typový system versus unittesty
« Odpověď #552 kdy: 28. 06. 2018, 13:07:04 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Možná by stačilo vypočtené kořeny dosadit do té kvadratické rovnice, což snad půjde také provést v těch typech.
Jenže kompilátor neví nic o kvadratických rovnicích, takže to z typů nijak neodvodí. Ale to je právě ten spor, který tady vedeme – existují určité doménové znalosti, a část z nich je přenesena do kódu, ať už v podobě příkazů nebo pravidel. Jednotkové testy nejsou nic jiného, než snaha nezávislým způsobem ověřit, že jsou ty doménové znalosti přenesené do kódu správně. Vedlejším efektem těchto testů je, že se zkontroluje, zda vůbec dává smysl kód sám o sobě – jestli se třeba nepokouší provádět nedefinovanou operaci (třeba násobení textů nebo dělení nulou). Někteří zde ovšem tento vedlejší efekt testů považují za jejich hlavní a jediný účel, z čehož plyne jejich přesvědčení, že by se jednotkové testy vlastně daly úplně zrušit.

Mimochodem, k představě, že všechny jednotkové testy bude umět vytvořit nějaký automat, je vhodné dodat, že až ten automat bude umět pochopit danou doménu a napsat testy, bude umět naprogramovat i ten výkonný kód.

v

Re:Typový system versus unittesty
« Odpověď #553 kdy: 28. 06. 2018, 13:24:45 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Možná by stačilo vypočtené kořeny dosadit do té kvadratické rovnice, což snad půjde také provést v těch typech.
v celých číslech si to docela umím představit (sčítání a násobení je jednoduché, už jsem tu dával odkaz, několikrát), s reálnýma si to představit už neumím :)

Kit

Re:Typový system versus unittesty
« Odpověď #554 kdy: 28. 06. 2018, 13:33:02 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Možná by stačilo vypočtené kořeny dosadit do té kvadratické rovnice, což snad půjde také provést v těch typech.
v celých číslech si to docela umím představit (sčítání a násobení je jednoduché, už jsem tu dával odkaz, několikrát), s reálnýma si to představit už neumím :)

S reálnými čísly by to šlo taky, pokud by program skutečně pracoval s reálnými hodnotami. S něčím takovým jsem se setkal pouze u analogového počítače, což už je docela historie.