Typový system versus unittesty

v

Re:Typový system versus unittesty
« Odpověď #825 kdy: 23. 10. 2018, 08:49:31 »
Potrebuju jeste na chvilku vyhrabat tohle vlakno, protoze si myslim, ze jsem narazil na oblast kde unit testy predci typy.
A chtel bych si nechat poradit jestli je to tak nebo ne...

Problem typu je zavislost na kompilatoru. Ve smyslu ja musim 'verit' kompilatoru, ze provede spravne statickou typovou kontrolu. U unit testu kompilatoru verit nemusim, protoze overeni spravnosti je na nem nezavisle.

Ve vetsine pripadu to asi nebude velky problem, ale co kdyz se budu u nejakeho projektu rozhodovat, ze vymenim kompilator za jiny, protoze ma nejake vyhody, kterych chci vyuzit(napada me jen rychlost, ale muze jich asi byt vic).

Co myslite?
slovy klasika "Beware of bugs in the above code; I have only proved it correct, not tried it."

jestli jste tak daleko, že nemůžete věřit kompilátoru, tak byste měl testy napsat v jiném jazyce, přeložit jiným kompilátorem a testovat přímo objektový kód :) a v takové situaci byste možná chtěl i typy


Re:Typový system versus unittesty
« Odpověď #826 kdy: 23. 10. 2018, 08:52:38 »
Potrebuju jeste na chvilku vyhrabat tohle vlakno, protoze si myslim, ze jsem narazil na oblast kde unit testy predci typy.
A chtel bych si nechat poradit jestli je to tak nebo ne...

Problem typu je zavislost na kompilatoru. Ve smyslu ja musim 'verit' kompilatoru, ze provede spravne statickou typovou kontrolu. U unit testu kompilatoru verit nemusim, protoze overeni spravnosti je na nem nezavisle.

Ve vetsine pripadu to asi nebude velky problem, ale co kdyz se budu u nejakeho projektu rozhodovat, ze vymenim kompilator za jiny, protoze ma nejake vyhody, kterych chci vyuzit(napada me jen rychlost, ale muze jich asi byt vic).

Co myslite?

Ano, to je jeden z problémů, ktdrý skrz své malé zkušenosti nevnímáš v celé jeho šíři. Změna kompilátoru není výjimečná, je běžná. Stačí změna platformy (multiplatformní program) či architektury. Kompilátor se mění i s jeho verzí.

Tyto nemají zaručeně ani stejný výstup, ani stejnou kontrolu. Často pak upravuješ program ne proto, že je chybný, ale aby prošel tím ne o onním kompilátorem.

Mas nejaky priklad? Zatim jsem na to nenarazil a chtel bych to videt, abych si mohl udelat obrazek jak vazny je to problem. Zajima me predevsim ta kontrola, jestli si narazil na pripad, ze by se s verzi kompilatoru zmenila.

A to ani nemusíme zabředávat do typů, které mění své vlastnosti podle architektury.

Ve výsledku statické typy představují spíše překážku než pomoc, protože překáží, kód je kvůli nim zbytečně těžkopádný a nepřehledný, což zvyšuje počet jiných chyb, které kompilátor neodhalí, a tak se stejně program musí testovat tak jako tak.
V cem pises? Tohle sedi na javu, ale nerekl bych, ze je to obecne platne pro vsechny staticky typovane jazyky.



Kit

Re:Typový system versus unittesty
« Odpověď #827 kdy: 23. 10. 2018, 09:05:21 »
jestli jste tak daleko, že nemůžete věřit kompilátoru, tak byste měl testy napsat v jiném jazyce, přeložit jiným kompilátorem a testovat přímo objektový kód :) a v takové situaci byste možná chtěl i typy

Pokud budu testovat objektový kód, tak k tomu typy potřebovat nebudu.

Kit

Re:Typový system versus unittesty
« Odpověď #828 kdy: 23. 10. 2018, 09:11:19 »
Líbí se mi třeba konstrukce with, nebo zákaz používání přiřazení v podmínkách a podobně. To jsou jednoduchá opatření, která snižují počet chyb spolehlivěji, než statické typy, protože oproti nim si nenesou s sebou negativa.

V podmínkách přece není zákaz přiřazení.

Re:Typový system versus unittesty
« Odpověď #829 kdy: 23. 10. 2018, 09:24:58 »
Potrebuju jeste na chvilku vyhrabat tohle vlakno, protoze si myslim, ze jsem narazil na oblast kde unit testy predci typy.
A chtel bych si nechat poradit jestli je to tak nebo ne...

Problem typu je zavislost na kompilatoru. Ve smyslu ja musim 'verit' kompilatoru, ze provede spravne statickou typovou kontrolu. U unit testu kompilatoru verit nemusim, protoze overeni spravnosti je na nem nezavisle.

Ve vetsine pripadu to asi nebude velky problem, ale co kdyz se budu u nejakeho projektu rozhodovat, ze vymenim kompilator za jiny, protoze ma nejake vyhody, kterych chci vyuzit(napada me jen rychlost, ale muze jich asi byt vic).

Co myslite?
slovy klasika "Beware of bugs in the above code; I have only proved it correct, not tried it."

jestli jste tak daleko, že nemůžete věřit kompilátoru, tak byste měl testy napsat v jiném jazyce, přeložit jiným kompilátorem a testovat přímo objektový kód :) a v takové situaci byste možná chtěl i typy

Nejsem tak paranoidni (zatim :-)).
Vidim to spis tak, ze testy si muzu snadno prohlidnout a ziskam prehled o tom jake kontroly se delaji.
A kdyz zmenim prekladac tak ty testy porad budou delat ty same kontroly.

Kdezto kdyz nekdo vyrobi alternativni prekladac haskellu, ktery bude zazracne rychly, protoze vynecha nektere kontroly...
To je jako kdyby mi nekdo smazal cast testu.

Abych se ubranil "zlovuli" autora alternativniho prekladace budu muset rozumet tomu jak prekladac funguje driv nez ho pouziju.
A nebo budu muset naveky zustat u jednoho prekladace - compiler lock-in

Vim, ze je to hodne hypoteticky priklad, ale to mi snad v kontextu tohoto vlakna odpustite.







Bacsa

Re:Typový system versus unittesty
« Odpověď #830 kdy: 23. 10. 2018, 09:34:26 »
Potrebuju jeste na chvilku vyhrabat tohle vlakno, protoze si myslim, ze jsem narazil na oblast kde unit testy predci typy.
A chtel bych si nechat poradit jestli je to tak nebo ne...

Problem typu je zavislost na kompilatoru. Ve smyslu ja musim 'verit' kompilatoru, ze provede spravne statickou typovou kontrolu. U unit testu kompilatoru verit nemusim, protoze overeni spravnosti je na nem nezavisle.

Ve vetsine pripadu to asi nebude velky problem, ale co kdyz se budu u nejakeho projektu rozhodovat, ze vymenim kompilator za jiny, protoze ma nejake vyhody, kterych chci vyuzit(napada me jen rychlost, ale muze jich asi byt vic).

Co myslite?
slovy klasika "Beware of bugs in the above code; I have only proved it correct, not tried it."

jestli jste tak daleko, že nemůžete věřit kompilátoru, tak byste měl testy napsat v jiném jazyce, přeložit jiným kompilátorem a testovat přímo objektový kód :) a v takové situaci byste možná chtěl i typy

Nejsem tak paranoidni (zatim :-)).
Vidim to spis tak, ze testy si muzu snadno prohlidnout a ziskam prehled o tom jake kontroly se delaji.
A kdyz zmenim prekladac tak ty testy porad budou delat ty same kontroly.

Kdezto kdyz nekdo vyrobi alternativni prekladac haskellu, ktery bude zazracne rychly, protoze vynecha nektere kontroly...
To je jako kdyby mi nekdo smazal cast testu.

Abych se ubranil "zlovuli" autora alternativniho prekladace budu muset rozumet tomu jak prekladac funguje driv nez ho pouziju.
A nebo budu muset naveky zustat u jednoho prekladace - compiler lock-in

Vim, ze je to hodne hypoteticky priklad, ale to mi snad v kontextu tohoto vlakna odpustite.
Tak právě proto existují normy.

Kit

Re:Typový system versus unittesty
« Odpověď #831 kdy: 23. 10. 2018, 09:44:46 »
U typů musíš také věřit autorovi těch typů.
Kite, typy - a to je moje zvláštnost - si zásadně míchám sám  ;D

Takže nepoužíváš žádné knihovny třetích stran a neustále vynalézáš kolo?

Bacsa

Re:Typový system versus unittesty
« Odpověď #832 kdy: 23. 10. 2018, 09:56:27 »
U typů musíš také věřit autorovi těch typů.
Kite, typy - a to je moje zvláštnost - si zásadně míchám sám  ;D
Takže nepoužíváš žádné knihovny třetích stran a neustále vynalézáš kolo?
Jen občas.

v

Re:Typový system versus unittesty
« Odpověď #833 kdy: 23. 10. 2018, 10:35:23 »
Nejsem tak paranoidni (zatim :-)).
Vidim to spis tak, ze testy si muzu snadno prohlidnout a ziskam prehled o tom jake kontroly se delaji.
A kdyz zmenim prekladac tak ty testy porad budou delat ty same kontroly.

Kdezto kdyz nekdo vyrobi alternativni prekladac haskellu, ktery bude zazracne rychly, protoze vynecha nektere kontroly...
To je jako kdyby mi nekdo smazal cast testu.

Abych se ubranil "zlovuli" autora alternativniho prekladace budu muset rozumet tomu jak prekladac funguje driv nez ho pouziju.
A nebo budu muset naveky zustat u jednoho prekladace - compiler lock-in

Vim, ze je to hodne hypoteticky priklad, ale to mi snad v kontextu tohoto vlakna odpustite.
ny typy se můžete podívat stejně jako testy, myslím, že ten hypotetický zjednodušený překladač by spíš odmítl některé validní (podle nezjednodušeného) programy než pustil nevalidní

jinak mezi testama a typama bych volil fakt nerad, testy jsou z principu strašně omezené, ale ukážou mi příklad, že to aspoň někdy funguje

Re:Typový system versus unittesty
« Odpověď #834 kdy: 23. 10. 2018, 10:44:27 »
Ono naopak díky typům lze i velmi dobře testovat... takový QuickCheck je vynikající...

Kit

Re:Typový system versus unittesty
« Odpověď #835 kdy: 23. 10. 2018, 11:13:51 »
jinak mezi testama a typama bych volil fakt nerad, testy jsou z principu strašně omezené, ale ukážou mi příklad, že to aspoň někdy funguje

Testy mi ukážou i příklady, kdy to nefunguje a ani fungovat nemá.

v

Re:Typový system versus unittesty
« Odpověď #836 kdy: 23. 10. 2018, 11:43:28 »
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

SB

Re:Typový system versus unittesty
« Odpověď #837 kdy: 23. 10. 2018, 11:50:10 »
jinak mezi testama a typama bych volil fakt nerad, testy jsou z principu strašně omezené, ale ukážou mi příklad, že to aspoň někdy funguje

Testy mi ukážou i příklady, kdy to nefunguje a ani fungovat nemá.

A testy zvládají i ověřování netransparentních funkcí, tj. můžou být stavové. Můžou být stavové typy?

Bacsa

Re:Typový system versus unittesty
« Odpověď #838 kdy: 23. 10. 2018, 12:03:38 »
jinak mezi testama a typama bych volil fakt nerad, testy jsou z principu strašně omezené, ale ukážou mi příklad, že to aspoň někdy funguje
Testy mi ukážou i příklady, kdy to nefunguje a ani fungovat nemá.
To i typy, viz konstrukce typu "X -> Void", které musí být uninhabited.

Bacsa

Re:Typový system versus unittesty
« Odpověď #839 kdy: 23. 10. 2018, 12:04:37 »
jinak mezi testama a typama bych volil fakt nerad, testy jsou z principu strašně omezené, ale ukážou mi příklad, že to aspoň někdy funguje

Testy mi ukážou i příklady, kdy to nefunguje a ani fungovat nemá.
Můžou být stavové typy?
Ano.