Typový system versus unittesty

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #510 kdy: 27. 06. 2018, 14:03:49 »
Pokryti testy asi vetsina lidi chape jako (mnozstvi kodu spusteneho behem testovani)/(celkove mnozstvi kodu) a ne jako (mnozstvi testovanych vstupu)/(mnozstvi vsech moznych vstupu).
To, že otestuju tři hodnoty, a prohlásím, že kód je otestovaný, přičemž u čtvrté hodnoty to chcípne, to je poněkud smutné, nemyslíš?
Ale jo, ale to pokryti zajima spis management nez programatory. Je to nejaka metrika ktere si mysli, ze rozumi. Ja na svem projektu rozhodne zadne pokryti nemerim.

Mám na mysli takové to, když vývojář napíše těch pár testů a posílá na produkci. Tím gestem říká, že je to otestované. Nemluvil jsem vysloveně o ceverage.

Nemuzu. Nerozumim tomu :-). Vychazel jsem jen z toho, ze v matematice lze funkci vyjadrit tremi zpusoby. Dva z nich jsou pouzitelne i v programovani, tak proc ne ten treti?
Jedine co si dovedu predstavit je nejake vzorkovani, ktere problem redukuje na vycet hodnot, takze vlastne nuda.
No já v matematice poněkud plavu, ale měl jsem za to, že ten algoritmus je funkce, která počítá hodnoty, ze kterých se dá udělat taková ta křivka ukazující charakteristiku, jak ty hodnoty jdou.
Asi bych si dovedl představit, že někdo bude "programovat" funkci tím, že ji myší vytáhne v nějakém prostoru, a kompiler z toho odvodí funkci. Ale nedovedu si představit, že by to bylo praktické.

Četl jsem zajímavej článek o tom, že máme matematiku řeckou, založenou na algoritmu, a babylonskou, založenou na tabulce (třeba takové ty tabulky odmocnin, co nám dávali na základce).

Máme reálnou množinu všech možných trojúhelníků.
Babyloňan z té množiny udělá podmnožinu několika pravoúhlých trojúhelníků, a tobě to musí stačit. Pythagoras vymyslí vzorec, kterým vytáhne libovolný pravúhlý trojúhelník jen na základě argumentů (vytvoří funktor? mezi množinou trojúhelníků a množinou těch argumentů).

Na tom typování je vtipné právě to, že na rozdíl od testování se pokouší o vytvoření těch ultimátních vzorečků díky kterým dosáhnu ultimátní jistoty.


v

Re:Typový system versus unittesty
« Odpověď #511 kdy: 27. 06. 2018, 14:15:12 »
Kód: [Vybrat]
    go (Op op a1 a2) = op a2 a1tak to kompilátor sežere i s chlupama a přitom to bude špatně.
dalo by se to napsat jako
Kód: [Vybrat]
data Expr a where
    Op :: (x -> y -> z) -> Expr x -> Expr y -> Expr z
ale nevím jestli to jde s tím rekurzním schématem

Pokud jsem dobře pochopil, tak se tohle dělá jen teoreticky. Stejně jako mnozí, kteří dělají testy také jen teoreticky - jenže na ně jsou aspoň metriky, u kterých je nepraktické podvádět.
jak teoreticky? je to normální, nudný haskell (-XGADTs)

Re:Typový system versus unittesty
« Odpověď #512 kdy: 27. 06. 2018, 14:18:17 »
Na tom typování je vtipné právě to, že na rozdíl od testování se pokouší o vytvoření těch ultimátních vzorečků díky kterým dosáhnu ultimátní jistoty.
… ultimátní jistoty v tom, že se ten vzoreček trefí do správného oboru hodnot. Ale neříká to vůbec nic o tom, jestli konkrétní vypočtené hodnoty jsou ty, které by člověk čekal.

To je ale pořád dokola.

SB

Re:Typový system versus unittesty
« Odpověď #513 kdy: 27. 06. 2018, 14:42:01 »
Mohl bych videt prosim nejaky unit test na "funkci" rand?

Psát to sem nebudu, popis musí stačit: Lze testovat např. typ hodnot, interval, rozložení, shodu posloupností v případě implementace se seedem, ...
Nemel by prave typ hodnot podchytit typovy system? To same interval. Shodu s posloupnosti si taky dovedu predstavit.

Samozřejmě že ano, to jsem dopsal jen proto, že to není problém a jde to. Problém pro typový systém už ale jsou to rozložení a opakovatelnost, to by mě zajímalo!

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #514 kdy: 27. 06. 2018, 14:50:47 »
Mohl bych videt prosim nejaky unit test na "funkci" rand?

Psát to sem nebudu, popis musí stačit: Lze testovat např. typ hodnot, interval, rozložení, shodu posloupností v případě implementace se seedem, ...
Nemel by prave typ hodnot podchytit typovy system? To same interval. Shodu s posloupnosti si taky dovedu predstavit.

Samozřejmě že ano, to jsem dopsal jen proto, že to není problém a jde to. Problém pro typový systém už ale jsou to rozložení a opakovatelnost, to by mě zajímalo!
Obvykle se rand vystrkává do side-effektů.


andy

Re:Typový system versus unittesty
« Odpověď #515 kdy: 27. 06. 2018, 15:23:22 »
Kód: [Vybrat]
    go (Op op a1 a2) = op a2 a1tak to kompilátor sežere i s chlupama a přitom to bude špatně.
dalo by se to napsat jako
Kód: [Vybrat]
data Expr a where
    Op :: (x -> y -> z) -> Expr x -> Expr y -> Expr z
ale nevím jestli to jde s tím rekurzním schématem

Já zrovna tohle řešil v tom Mapboxu (ale nepotřeboval jsem to, tak jsem se na to vybod), kde by to bylo zhruba takhle:
Kód: [Vybrat]
  Op :: Callable (Function paramlist z) => Function paramlist z -> Args paramlist -> Expr z
Ono to sazmozřejmě nezabrání tomu, aby člověk někde nenapsal '("sin", sin), ("cos", sin)', ale tak to je pak otázka nakolik mají unit testy (který by měly kontrolovat tu nejmenší část kódu) kontrolovat konstanty... (našel jsem jeden bug tohoto typu přímo v GHC...) možná někde v raketovém výzkumu, kde jeden tým píše a druhý kontroluje, jinak mi to nedává moc smysl.

Unittesty/typy jsou prostě nástroj, díky kterému můžeme psát programy s méně chybama - a od nějakého momentu dost nedávají smysl. A díky těm typům lze dosáhnout výrazně vyšší kvality s výrazně menším použitím i těch testů (ta kalkulačka je pravděpodobně kvalitnější bez jakéhokoliv testu než co by většina lidí spáchala v JS/pythonu/... i s unit testama).

Re:Typový system versus unittesty
« Odpověď #516 kdy: 27. 06. 2018, 15:26:33 »
Pokryti testy asi vetsina lidi chape jako (mnozstvi kodu spusteneho behem testovani)/(celkove mnozstvi kodu) a ne jako (mnozstvi testovanych vstupu)/(mnozstvi vsech moznych vstupu).
To, že otestuju tři hodnoty, a prohlásím, že kód je otestovaný, přičemž u čtvrté hodnoty to chcípne, to je poněkud smutné, nemyslíš?
Ale jo, ale to pokryti zajima spis management nez programatory. Je to nejaka metrika ktere si mysli, ze rozumi. Ja na svem projektu rozhodne zadne pokryti nemerim.

Mám na mysli takové to, když vývojář napíše těch pár testů a posílá na produkci. Tím gestem říká, že je to otestované. Nemluvil jsem vysloveně o ceverage.
Doufam, ze ve vetsine pripadu jeste do nejakeho testovaciho prostredi kde se na to koukne nekdo z QA. Ale i tak, mas pravdu. Nemelo by mu to stacit.

Proto me se libi treba clojure.spec. I kdyz je clojure dynamicky jazyk tak spec mu pridava neco jako "velmi silny typovy system" (Neni to primo v jazyku takze jsou potreba nejake nastroje na instrumentaci, proto "neco jako"). A krasne to integruje s testcheckem takze tomu muzu rict aby se pri buildu nahodne vygenerovalo bambilion vstupu odpovidajicich SPECifikaci a projelo se to funkci a vyhodnotilo jestli vystup taky odpovida specifikaci(a do znacne miry i jestli je spravne vzhledem ke konkretnim vstupum). Takze nemusim napsat jedinny unit test a mam pokryto radove lepe nez s unit testy.


Nemuzu. Nerozumim tomu :-). Vychazel jsem jen z toho, ze v matematice lze funkci vyjadrit tremi zpusoby. Dva z nich jsou pouzitelne i v programovani, tak proc ne ten treti?
Jedine co si dovedu predstavit je nejake vzorkovani, ktere problem redukuje na vycet hodnot, takze vlastne nuda.
No já v matematice poněkud plavu, ale měl jsem za to, že ten algoritmus je funkce, která počítá hodnoty, ze kterých se dá udělat taková ta křivka ukazující charakteristiku, jak ty hodnoty jdou.
Asi bych si dovedl představit, že někdo bude "programovat" funkci tím, že ji myší vytáhne v nějakém prostoru, a kompiler z toho odvodí funkci. Ale nedovedu si představit, že by to bylo praktické.

Dovedu si treba predstavit pripad, ze nejaky program generuje jako jeden z vystupu nejaky graf kam vynasi body ktere oznacuji nejaky konkretni pripad pouziti. Prijde business analytik a v grafu za posledni mesic vyznaci body, ktere jsou nezadouci. V pripade, ze se body pripadu pouziti budou shlukovat vhodne podle stejneho kriteria jako pouzije business analytik, muze byt prakticke nakreslit krivku ktera oddeli zadouci a nezadouci body a nechat si vyhodnotit funkci predpis kompilatorem. Ale jak kdysi rekl jeden mudrc: " na prakticnost vam prdim" :-)

andy

Re:Typový system versus unittesty
« Odpověď #517 kdy: 27. 06. 2018, 15:27:56 »
Kód: [Vybrat]
data Expr a where
    Op :: (x -> y -> z) -> Expr x -> Expr y -> Expr z
ale nevím jestli to jde s tím rekurzním schématem

Zas blbě :) Jo, jde to i s tím rekurzivním schématem: http://www.timphilipwilliams.com/posts/2013-01-16-fixing-gadts.html

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #518 kdy: 27. 06. 2018, 15:48:51 »
A díky těm typům lze dosáhnout výrazně vyšší kvality s výrazně menším použitím i těch testů (ta kalkulačka je pravděpodobně kvalitnější bez jakéhokoliv testu než co by většina lidí spáchala v JS/pythonu/... i s unit testama).

Zahráváš si s ohněm :D

v

Re:Typový system versus unittesty
« Odpověď #519 kdy: 27. 06. 2018, 15:59:11 »
Kód: [Vybrat]
data Expr a where
    Op :: (x -> y -> z) -> Expr x -> Expr y -> Expr z
ale nevím jestli to jde s tím rekurzním schématem

Zas blbě :) Jo, jde to i s tím rekurzivním schématem: http://www.timphilipwilliams.com/posts/2013-01-16-fixing-gadts.html
hezké, díky

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #520 kdy: 27. 06. 2018, 16:00:32 »
Proto me se libi treba clojure.spec. I kdyz je clojure dynamicky jazyk tak spec mu pridava neco jako "velmi silny typovy system" (Neni to primo v jazyku takze jsou potreba nejake nastroje na instrumentaci, proto "neco jako"). A krasne to integruje s testcheckem takze tomu muzu rict aby se pri buildu nahodne vygenerovalo bambilion vstupu odpovidajicich SPECifikaci a projelo se to funkci a vyhodnotilo jestli vystup taky odpovida specifikaci(a do znacne miry i jestli je spravne vzhledem ke konkretnim vstupum). Takze nemusim napsat jedinny unit test a mam pokryto radove lepe nez s unit testy.
Domnívám se, že v tomto případě jde spíše o automaticky generované testy. Což je taky dobrý. Ale typy jsou imho o něčem jiném. Viz ta ukázka https://forum.root.cz/index.php?topic=18804.msg271719#msg271719

Můžeš udělat typy, které se budou checkovat třeba týden. Ale udělat testy na bambilion vstupů budou ještě mnohem horší s horší efektivitou.


Ale jak kdysi rekl jeden mudrc: " na prakticnost vam prdim" :-)
Au :-D Na svou obranu musím říct, že to bylo prohlášení uvedené v zoufalství ze zaspamování této diskuse, kdy se ani věci znalí lidé nechtěli bavit k tématu ze strachu z trollů.

JSH

Re:Typový system versus unittesty
« Odpověď #521 kdy: 27. 06. 2018, 16:11:01 »
Ale jak kdysi rekl jeden mudrc: " na prakticnost vam prdim" :-)
Au :-D Na svou obranu musím říct, že to bylo prohlášení uvedené v zoufalství ze zaspamování této diskuse, kdy se ani věci znalí lidé nechtěli bavit k tématu ze strachu z trollů.
Sorry, ale za to zatrollení diskuze si můžeš IMO primárně sám. Většina téhle diskuze je o tom, že ostatní šijou do tvých kategorických tvrzení.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #522 kdy: 27. 06. 2018, 16:15:21 »
Sorry, ale za to zatrollení diskuze si můžeš IMO primárně sám. Většina téhle diskuze je o tom, že ostatní šijou do tvých kategorických tvrzení.

Ale no tak!

Takže když napíšu "Dospěl jsem k nezdravému přesvědčení, že jednotkové testy nejsou potřeba máte-li kvalitní typový systém." je to přes čáru? A místní smetánka, která věci sice nerozumí, ale má tím pádem právo mě trollit? To jako vážně?!

JSH

Re:Typový system versus unittesty
« Odpověď #523 kdy: 27. 06. 2018, 16:25:35 »
Sorry, ale za to zatrollení diskuze si můžeš IMO primárně sám. Většina téhle diskuze je o tom, že ostatní šijou do tvých kategorických tvrzení.

Ale no tak!

Takže když napíšu "Dospěl jsem k nezdravému přesvědčení, že jednotkové testy nejsou potřeba máte-li kvalitní typový systém." je to přes čáru? A místní smetánka, která věci sice nerozumí, ale má tím pádem právo mě trollit? To jako vážně?!
Je to kategorické tvrzení. Taková přímo svádějí k vyvracení. A když místní smetánce otloukáš o hlavu že tomu nerozumí, tak si o to přímo říkáš. Obzvlášť když to vypadá, že jsi ani nepochopil jejich argumenty.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #524 kdy: 27. 06. 2018, 16:39:31 »
Sorry, ale za to zatrollení diskuze si můžeš IMO primárně sám. Většina téhle diskuze je o tom, že ostatní šijou do tvých kategorických tvrzení.

Ale no tak!

Takže když napíšu "Dospěl jsem k nezdravému přesvědčení, že jednotkové testy nejsou potřeba máte-li kvalitní typový systém." je to přes čáru? A místní smetánka, která věci sice nerozumí, ale má tím pádem právo mě trollit? To jako vážně?!
Je to kategorické tvrzení. Taková přímo svádějí k vyvracení. A když místní smetánce otloukáš o hlavu že tomu nerozumí, tak si o to přímo říkáš. Obzvlášť když to vypadá, že jsi ani nepochopil jejich argumenty.
Vyvracení není trollení.
Já nejsem ten, který tu na potkání tvrdí, že ten druhý je úplně blbej, a že tomu nerozumí, a že by měl to a to. Si mě s někým pleteš.
A co se týče argumentů, byl bych s něčím takovým výrazně méně kategorický. Ano, uznávám, že příspěvky Kita a Filipa Jirsáka nečtu. Určitě chápeš proč.