• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    KOJAProgramovani 40+
    SULTHAN
    SULTHAN --- ---
    SATAI: Hodně záleží na tom, v jakém jazyku a frameworku pracuješ.

    Třeba v javascriptu se mockuje krásně - tam si vezmeš implementaci služby a dynamicky na ní nějakou funkci změníš na mock a použiješ to v testu. To ale ve většině jazyků udělat nemůžeš, takže abys nějakou službu mohl namockovat, tak její rozhraní musíš abstrahovat (např. Java interface) a mít separátní "reálnou" a "mock" implementaci (některé test frameworky samozřejmě ten "mock" vygenerují z rozhraní samy).
    Ale právě ta existence single-use rozhraní ti zbytečně komplikuje kód a je to jedna z nejtypičtějších "test induced design damage".
    SATAI
    SATAI --- ---
    SULTHAN: netvrdím, že se to neděje, ale přijde mi, že tak 80 procent změn kvůli testovatelnosti bylo k lepšímu
    SULTHAN
    SULTHAN --- ---
    JANFROG: Já mám rád termín "test induced design damage". Obecně jsou to všechny změny architektury, které musíte udělat, aby Váš kód byl testovatelný, například různé dependency injections.
    V minulosti jsem nucen psát kód v naprosto nepřehledné a otřesné architektuře, jejíž jediným smyslem bylo to, aby některé normálně neoddělitelné části kódu byly testovatelné samostatně.
    JANFROG
    JANFROG --- ---
    ANT_39: Ja myslim, ze nejsme ve pri. Testy pisu, dokonce je pise i kolega co testy v zasade neuznava :-) Sitovej stack je rekl bych stejne peklo jen s jinou prichuti.

    Proc o tom mluvim je, ze - alespon co si pamatuji - jsem nikde v zadnem textu / prednasce vysvetlujicim dulezitost testu, TDD apod, nevidel zminen fakt, ze od jiste komplexity toho systemu testy neskaluji.

    Jinak to cislo 5% jsem si vycucal z prstu, zadne konkretni cislo nepadlo, mozna je to min, nevim. Spis jsem chtel rici, ze proste nejaka mira failujich testu se proste toleruje. Neco podobneho jak jsi popisoval (flaky vs. non-flaky failures) delaji, ale neni to snadne a uz mas zase nejaky system nad tim, co sbira historicke data a z toho dela statisticke modely co jeste je ok a co uz ne. A to stoji dost energie a co ja vim, neni na to zadna standardni literatura co si prectes a vis jak na to (na rozdil od treba register alokatoru nebo refinements).
    ANT_39
    ANT_39 --- ---
    JANFROG: Jo, noise u testu je problem. Napsal jsem robustni a spolehlive, ale treba v mym pripade konkretne jde o testy sitovych zarizeni a linuxovyho sitovyho stacku, a ty sitovy veci proste jsou spis noisy. Je tam kupa ruznych timeoutu, je to slozitej dynamickej system. Ted ty testy se pousti na milionu ruznych typu HW, ve virtualkach ruznych konfiguraci, na HW switchich, s offloadama... Cili je tezky udelat skutecne robustni test. A kazdej test je v dusledku proste kod, kterej je treba maintainovat, kterej bitrotuje, a jehoz samostatna existence tim padem neco stoji.

    I tak se velice vyplati kazdou featuru mit testama pokrytou, pokud mozno. Aspon v Linuxu se ten sitovej stack furt hejbe, a zaroven je tam dost vzajemnych zavislosti, a zpusobu jak to nakonfigurovat, a ktery casti v tom kernelu mit a ktery nemit, a pak do toho jeste vstupuje jakou trafiku na tom poustis. Tam se nejde s zadnou mirou jistoty podivat na patch a vedet, tohle bude fungovat a nikoho to nerozbije. Potrebujes testy.

    Plus ty testy funguji jako navod, jak tu featuru pripadne nakonfigurovat, implicitni dokumentace!

    Ty delas myslim dost toolchain, prekladace, VMka, tenhle druh veci, tam si dovedu predstavit, ze je to podobna cerna magie napsat robustni test, protoze z verze na verzi bude prekladac prekladat mirne jinak, a jde o to, jestli se tim trefi do tolerancniho okna toho testu. Nemluve pak o vecech jako testovani, co ja vim, instruction schedulingu. Vlad Makarov delaval (a mozna porad dela, ale uz nejsem v RH) perf testy GCC, a zminoval, ze dosadnout reproducibility je velkej problem.

    Takze ad tech 5 %... hele, mas notoricky flaky testy, ty by pochopitelne bylo dobry fixnout, aby prestaly byt flaky, ale kdyz ti v mergi popadaji tyhle, asi se nad tim da pokrcit rameny. Pokud mas byt 2 % failu v "cistejch" testech... ehh, asi bych spis nemergoval :) Ale neznam podrobnosti. Jsem si jistej, ze to je nejakej kompromis mezi tim, aby se maintainer nezblaznil a koza zustala cela.
    SUCHRE
    SUCHRE --- ---
    Vetsina z nas stejne dela na softwaru nebo systemu, kterej je zbytnej a jestli funguje dobre nebo spatne, je ve finale uplne jedno, protoze nejde o zdravi ani zivot.

    Mimochodem GraalVM je skvela vec, nechapu, proc ho u jednoho z minulejch projektu porad ignorovali, kdyz to zlepsovalo vykon bez nutnosti optimalizovat jejich prumernej kod v jave.
    TMA
    TMA --- ---
    Testy jsou užitečné, ale...
    The first moral of the story is that program testing can be used very effectively to show the presence of bugs but never to show their absence.
    --Edsger W. Dijkstra, EWD303

    E.W. Dijkstra Archive: On the reliability of programs. (EWD303)
    https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD303.html

    Dijkstra: Testing shows the presence, not the absence of bugs.

    http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1969.PDF

    strana 16
    JANFROG
    JANFROG --- ---
    ANT_39: S tema testama je to takove zradne. Zrovna minuly tyden jsem mluvil s Thomasem Wuerthingerem (GraalVM) a ten rikal, ze jen *provoz* HW na testy je velmi vyrazna cast rozpoctu celeho projektu. A to jeste nepousti testy vsechny, protoze sjet vsechny testy ve vsech konfiguracich by trvalo roky. Navic v tom mnozstvi proste vzdycky nejakej test selze a nikdo nevi proc takze to konci tak ze si reknes "do 5% failures je to good-enough pro merge" :-)

    U svych projektu vidim presne tenhle trend taky (byt samozrejme v mnohem mensim meritku). Pridas ficuru a cas na testu se zdvojnasobi.

    Proste od nejakeho bodu jsou testy solidni bolehlav sam o sobe.
    ANT_39
    ANT_39 --- ---
    DARK_ONE: Dík, kouknu. Jsem mírně skeptickej, protože často mám X commitů, který postupně mění jednu část kódu, a netuším jak dobře je schopný to dělat tu disambiguaci, ale v průměru by to mělo být užitečný.
    ANT_39
    ANT_39 --- ---
    AXTHEB: Jo, protože nejpozději při code review ten kód (statisticky řečeno) budu stejně měnit, a ty testy jako když najdu. A pak znovu, až se to pošle do upstreamu, kterej (statisticky řečeno) taky bude mít $názory. A pak až to bude interní downstream za rok integrovat.
    Uznávám, že náš workflow je specifickej, ale málo co se vyplatí tak jako pořádný testy, na který se dá spolehnout.
    AXTHEB
    AXTHEB --- ---
    NOHOUS: TDD. Když nemáš failujicí test, nemáš nic.
    MARASAN
    MARASAN --- ---
    NOHOUS: proto nepisu testy, jinak bych nespal.
    DARK_ONE
    DARK_ONE --- ---
    ANT_39: mám to podobně. Čímž jsi mi připomněl 'programátorský life hack' jehož objevení mi nedávno udělalo radost (skoro stejnou, jako kdysi autojump) - git absorb --and-rebase.
    ANT_39
    ANT_39 --- ---
    JARDABEREZA: git rebase --interactive. Půlka mých stromů má nahoře pár wip commitů s všelijakým bordelem.
    JARDABEREZA
    JARDABEREZA --- ---
    Já se to snažím spíš redukovat... pokud něco neumím vyřešit dnes, tak to nechám ve stavu, že je to dojebané jenom na jednom místě a ne na 7 místech ve 4 souborech :-D. A hlavně dokud to nefunguje, nedělám comit, abych měl šanci to odjebat :-D S tím se dá usínat.
    JANFROG
    JANFROG --- ---
    SULTHAN: To ja si zadne nezkompilovatelne poznamky psat nemusim, oni se pres noc napisou sami! (co se vecer prelozilo se rano vetsinou uz neprelozi :-)
    MUXX
    MUXX --- ---
    SULTHAN
    SULTHAN --- ---
    KLEINZACH: To přesně dělám. Napíšu si nezkompilovatelnou poznámku, aby mi druhý den naskočil hned v hlavě kontext.
    SATAI
    SATAI --- ---
    NOHOUS: spánkem spravedlivých
    NOHOUS
    NOHOUS --- ---
    SATAI: jak můžeš usnout s failujicim testem??
    Kliknutím sem můžete změnit nastavení reklam