będę miał o czym mówić jutro na rozmowie o prace testera hehe
mialem do napisania prosta kolejke priorytetowa tj max heap, napisalem sobie ja sobie elegancniutko i wszystko gitarka dziala elegancko sprawdzarka wyrzuca mi 95% poprawnosci, nie przechodzi jedynie test na losowym wejsciu. Ja mowie no wtf u mnie wszystko dziala generuje sobie losowe testy nawet przechodzi wszystko git. W koncu zauwazam ze jedna literka sie printuje w zlym miejscu, na dziesiatki testow, duzych i malych, pojawil sie jeden blad w bardzo duzym tescie. no dobra, analizuje. kurde. nie jestem w stanie odtworzyc tego bledu, zmieniam relacje wiekszosci z silnie wiekszych na slabo wieksze itd sprawdzam rozne randomowe kombinacje w celu odtworzenia bledu i nic. w koncu dochodze do tego, ze blad sie pojawil, tylko jesli literka jest skrajnie lewym potomkiem. no to sobie patrze hmm co by tu co by tu. w pewnym momencie wpadam na dziwny pomysl, zeby w funkcji Delete(int x) ktora usuwa element o x-indeksie z drzewa zamiast sprawdzania parenta jako x/2 ustawiam parenta jako x/2 + 1. no i patrze, dziala git, wrzucam na sprawdzarke - troche wiecej bledow, ale test na losowych nagle przechodzi xD mysle se wtf. robie opcje w takim razie ze jesli x%2 == 0 to parent=x/2 + 1 w przeciwnym razie parent = x/2 no i gitatka dziala. pytam na discordzie klasowym wtf i czy ktos mial podonie. okazuje sie moi drodzy, ze parenta w drzewie binarnym wylicza sie nie jako x/2 lecz jako (x+1)/2 :))))
i ja sie pytam: jakim cudem to w ogole mozliwe, ze tak oczywisty blad objawil sie tylko w niektorych miejscach i to naprawde duzych testow?Pokaż ukrytą treść jakim cudem tak elementarny blad w zaokragleniu nie zmienil w sumie nic poza kilkoma bardzo konkretnymi przypadkami ;0
@ajdajzler: po to właśnie są testy losowe, żeby wyeliminować czynnik testera bez wyobraźni (:
wgl to jak sobie pomyślę, jak ja nie myślę czasem o oczywistych egde-case'ach to taki wstyd mnie bierze, ale już jak się spierdzę publicznie i śmierdzi to nie
@sens: chwila brachu.. edgy case != dziwny blad w kodzie. edgy case to ja mialem tam tak ubezpieczone ze hoho, ale takiej durnoty nie wyaptrzysz na pierwszy rzut oka. przed chwila pomagalem koledze ktory mial problem z kodem i okazalo sie, ze mając pętle z wartoscia boolean && Licznikiem (petla dziala, dopoki wartosc bool jest git i licznik jest mniejszy niz tam 40) po operacji sprawdzał % z boola bo sobie pomylil nazwy xD i tez mu weszlo 95% na sprawdzarce.
@ajdajzler: i siedzial tydzien nad tym bledem
Pokaż ukrytą treść swoja droga ze kolega to debil ktory nie potrafi debuggera uruchomic i zauwazyc, ze kod nie wchodzi w warunek, mimo (teoretycznie) spelnienia warunku