kto napisał 250 tys. testów dla webkitu?

zakładając wydajność 3 na godzinę, czyli 83000 godzin. 8 godzin dziennie daje 10 500 dni, podziel przez trzydzieści, aby otrzymać 342 mityczne osobo-miesiące. Nazywam je mitycznymi, bo pisanie 125 testów na osobę tygodniowo jest nierealne.

czy jakakolwiek mądra dusza na SO może rzucić trochę światła na to, jakiego rodzaju mityczni ludzie piszą nierealne ilości testów dla dużych projektów oprogramowania? Dziękuję.

aktualizacja chrisw uważa, że ​​jest tylko 20 tys. testów (sprawdź jego wyjaśnienie poniżej).
PS Naprawdę chciałbym usłyszeć opinie osób, które pracowały nad projektami z dużymi bazy testowe


person amwinter    schedule 29.05.2010    source źródło
comment
Twoja analiza jest niekompletna. Ilu programistów brało udział w pisaniu testów?   -  person Greg Hewgill    schedule 29.05.2010
comment
załóżmy, że 9000. Skończyli pracę w jeden mityczny dzień, a potem poszli na piwo.   -  person amwinter    schedule 29.05.2010
comment
W rzeczywistości jest to dłużej, miesiąc nie ma 30 dni roboczych, średnio 20, co oznacza ~520 osobo-miesięcy.   -  person Nick Craver    schedule 29.05.2010
comment
Gdzie znajdziesz listę/liczbę testów jednostkowych Webkit?   -  person ChrisW    schedule 29.05.2010
comment
Jestem za Chrisem – nie żebym miał powód wątpić w tę liczbę, ale byłbym ciekawy odniesienia.   -  person Nick Craver    schedule 29.05.2010
comment
w folderze LayoutTests źródła pakietu webkit znajduje się 243 491 plików. Obejmuje to metadane SVN i nie uwzględnia faktu, że test może obejmować stronę klienta i serwera. Wiele testów posiada również pliki objaśniające. prawdopodobnie podziel przez 3 lub 5, aby uzyskać prawdziwą odpowiedź.   -  person amwinter    schedule 29.05.2010
comment
Folder LayoutTests znajduje się pod adresem svn.webkit.org/repository/webkit/trunk/LayoutTests   -  person ChrisW    schedule 29.05.2010
comment
@dvk prawdziwy czy mityczny Mam nadzieję, że był darmowy (darmowy jak w piwie)   -  person amwinter    schedule 29.05.2010
comment
Teoretycznie test piszesz tuż przed wdrożeniem funkcjonalności, więc powinien wynosić od 3 do 30 na godzinę. To oczywiście teoria...   -  person James Westgate    schedule 29.05.2010
comment
Może ulubiony test jednostkowy, przechodzi za każdym razem:twierdzenie(wynik != wartość1 | wynik !=wartość2)   -  person James Westgate    schedule 29.05.2010
comment
@James To są testy systemowe/regresyjne, a nie testy jednostkowe. 1) Opracuj plik *.html demonstrujący błąd/funkcję 2) Napisz/debuguj kod implementujący tę funkcję 3) Użyj Webkit, aby wyrenderować testowy kod HTML 4) Uchwyć (dobry) wynik i powiedz, że jest to „oczekiwany” wynik 5) Testowanie regresyjne oznacza ponowne uruchomienie testów i sprawdzenie, czy oczekiwane/dobre wyniki pozostały niezmienione. Nie piszą kodu źródłowego specyficznego dla każdego testu.   -  person ChrisW    schedule 29.05.2010
comment
IMO to pytanie powinno zostać zmienione, aby usunąć etykietę testów jednostkowych (być może zastąpić ją innym rodzajem etykiety testowej): ponieważ wydaje mi się, że wszystkie są to testy systemowe/regresyjne specyficzne dla funkcji, a nie w ogóle „testy jednostkowe” .   -  person ChrisW    schedule 29.05.2010
comment
@ChrisW - tytuł mówi testy jednostkowe   -  person James Westgate    schedule 29.05.2010
comment
@James tytuł mówi testy jednostkowe, ale myślę, że tytuł jest błędny ... OP mówi o folderze LayoutTests źródła webkitu i nie wydają się to być testy jednostkowe.   -  person ChrisW    schedule 29.05.2010
comment
Chris ma rację. testy jednostkowe testują funkcje lub obiekty w izolacji, wiedzą o wewnętrznych elementach programu. testy te działają na całym programie. zmieniłem tytuł.   -  person amwinter    schedule 31.05.2010
comment
w3.org/2011/10/28-testing-minuty.html zawiera przegląd testów wszystkich dostawców przeglądarek. (Jeśli jesteś zainteresowany, mogę rozwinąć temat Opery — obecnie przeprowadzamy około 360 tys. testów na każdą kompilację.)   -  person gsnedders    schedule 13.08.2012
comment
125 testów na osobę tygodniowo to niezbyt duża liczba. Prawdopodobnie konsekwentnie piszę tyle testów jednostkowych dziennie, kiedy tylko koduję. Aktualizacja W przypadku większych testów (np. integracyjnych, systemowych) nie, mogę zwolnić do 1 tygodniowo. :-)   -  person Jonathan Hartley    schedule 14.06.2016


Odpowiedzi (9)


Z wytycznych dotyczących wkładu do Webkit

„Dla każdej funkcji wpływającej na silnik układu należy skonstruować nowy test regresji. Jeśli dostarczysz łatkę naprawiającą błąd, łatka ta powinna również zawierać dodanie testu regresji, który nie powiedzie się bez łatki, a zakończy się powodzeniem z łatką Jeśli nie zostanie udostępniony test regresji, recenzent poprosi Cię o sprawdzenie poprawki, dzięki czemu możesz zaoszczędzić czas, konstruując test od początku i upewniając się, że jest on dołączony do błędu. Jeśli żaden test układu nie może (lub nie musi) zostać przeprowadzony skonstruowany na potrzeby poprawki, musisz wyjaśnić recenzentowi, dlaczego nowy test nie jest konieczny.”

P) Kto napisał te testy? A) Prawie wszyscy, którzy współtworzyli webkit.

person Matt    schedule 29.05.2010
comment
Wierzę w to, ale musi być w tym coś więcej. kto obserwuje obserwatorów? ktoś musiał mieć koszmarną pracę wypasania tych wszystkich kaczątek. - person amwinter; 29.05.2010
comment
Zgaduję, że trwa również generowanie kodu. A może pojedynczy test wykorzystuje tablicę danych wejściowych i jest uruchamiany wiele razy. - person Mike Weller; 29.05.2010

Oryginalny katalog zawierał 240 tys. plików:

 Total Files Listed:
       243541 File(s)  1,062,470,729 bytes
       64718 Dir(s)

Wiele z nich to pliki svn. Jeśli usunę wszystkie podkatalogi o nazwie „.svn”, liczba plików spadnie do 90 KB:

 Total Files Listed:
       90615 File(s)    537,457,618 bytes
        7190 Dir(s) 

Niektóre katalogi mają podkatalog o nazwie „zasoby” i/lub „testy skryptów”. Myślę, że te podkatalogi zawierają pliki pomocnicze, które są używane przez przypadki testowe w nadkatalogach. Jeśli usunę te podkatalogi (ponieważ nie dodają się do całkowitej liczby testów), liczba plików spadnie do 87 KB:

 Total Files Listed:
       87672 File(s)    534,598,610 bytes
        6305 Dir(s)

Skondensowanie „podobnych” nazw plików (np. „klawisze-strzałek-na-body.html” i „klawisze-strzałek-na-body-expected.txt” to dwa pliki definiujące pojedynczy test) zmniejsza łączną liczbę z 87 tys. do 43 tys.

Jedynymi podkatalogami, które zawierają więcej niż 1500 takich przypadków testowych (liczonych jak opisano powyżej), są:

2761   LayoutTests\dom
10330  LayoutTests\fast (of which 5934 are in LayoutTests\fast\js)
22575  LayoutTests\platform (with various O/S-specific subdirectories).

Wydaje się, że w podkatalogach platform doszło do kopiowania i wklejania między platformami. Na przykład istnieje plik css3-modsel-37-expected.txt:

  • W podkatalogu LayoutTests\platform\mac\css3
  • W podkatalogu LayoutTests\platform\chromium-win\css3
  • W podkatalogu LayoutTests\platform\qt\css3.

Jeśli odrzucę nazwy plików, które są zduplikowane w kilku podkatalogach platformy, wówczas będzie tylko 5716 (zamiast 22575) unikalnych testów platformy.

Podsumowując, myślę, że istnieje około 18 tys. unikalnych testów: co wciąż jest imponującą liczbą testów, ale mniej niż 250 tys., które oszacowałeś w swoim OP.


Dla porównania niedawno znalazłem zestaw testów CSS2.1: to wygląda na około 9000 przypadków testowych dla CSS.

person ChrisW    schedule 29.05.2010
comment
to nie jest nawet w połowie tak imponujące, prawda. - person amwinter; 29.05.2010
comment
Musisz pamiętać, że ostatnio Google zrzuciło większość swoich testów, jeśli nie wszystkie (związane z webkitem) do drzewa WebKit. - person Mohamed Mansour; 01.06.2010
comment
jesteś osobą zaangażowaną w chrom, wspaniale. Powiedz nam więcej. - person amwinter; 01.06.2010
comment
Jednak wiele testów JS/DOM zawiera więcej niż jeden test na plik. - person gsnedders; 13.08.2012

Właśnie napisałem 4 testy jednostkowe w 5 minut. Nie wszystkie testy jednostkowe wymagają dużo czasu. Niektóre są bardzo proste ;)

person Thomas Winsnes    schedule 29.05.2010
comment
return true; jest łatwy. - person MusiGenesis; 29.05.2010
comment
Odkryłem, że moje prawie zawsze przechodzą z @Test(expected=RuntimeException.class), wciąż próbuję debugować te, które tego nie robią;) - person Uri; 29.05.2010

  • Istnieją takie rzeczy jak automatyczne generatory testów jednostkowych. W przypadku funkcji złożonej często może być konieczne wykonanie wszystkich permutacji możliwych wartości, powiedzmy, 7 parametrów. Jeśli są logiczne, otrzymasz 27=128 testów. W niektórych scenariuszach wszystkie te 128 testów są generowane przy użyciu 10 wierszy kodu.

  • Wiele testów jednostkowych opartych na regresji można wygenerować, pobierając duży zestaw danych wejściowych, uruchamiając na nich istniejący kod, rejestrując odpowiednie dane wyjściowe, a następnie wykonując testy gazillionowe, które pobierają nowy kod, uruchamiają go na tym samym wejściu i sprawdzają, czy dane wyjściowe pasują stare wyjście.

  • Pisanie testów jednostkowych jest przedsięwzięciem dość rozproszonym. Równolegle mogą to robić armie stażystów/ochotników.

person DVK    schedule 29.05.2010
comment
to może być to, co się tutaj dzieje, ale te, które oglądałem, są dość ręcznie wykonane. funky mathml, specjalne przypadki nagłówka http. - person amwinter; 29.05.2010

Nie wyglądają na testy jednostkowe: bardziej przypominają testy systemowe/regresyjne.

Nie jest to bezpośrednia odpowiedź na Twoje pytanie, ale opracowałem własną przeglądarkę, więc być może mam na ten temat pewien wgląd; Widzieć:

czy jakakolwiek mądra dusza na SO może rzucić trochę światła na to, jakiego rodzaju mityczni ludzie piszą nierealne ilości testów dla dużych projektów oprogramowania?

Napisanie tego rodzaju testu jest łatwe i konieczne:

  • Łatwe: napisz stronę HTML (lub podobną czarną skrzynkę), aby sprawdzić funkcjonalność/funkcje/zachowanie
  • Necessary:
    1. Need to test/exercise functionality when it's written
    2. Należy zademonstrować/odtworzyć błędy podczas składania raportu o błędach
    3. Należy zachować wszystkie poprzednie testy z punktów 1. i 2., aby przeprowadzić testy regresyjne

Mój szef powiedział kiedyś: „Dostajesz to, co sprawdzasz”. (co oznacza, że ​​wszystko, czego nie testujesz, jest nieznane/losowe).

person ChrisW    schedule 29.05.2010

To naprawdę zależy od tego, jak to zostało policzone.

Tak czy inaczej, gdy już zostanie skonfigurowany dobry framework do testowania konkretnej klasy/biblioteki/jednostki/cokolwiek, dodanie nowego testu zajmuje zwykle tylko kilka linii. Jeśli pisali testy, których celem był wysoki procent pokrycia kodu, testy te są zazwyczaj jeszcze krótsze, ponieważ wykonuje się wiele testów, które różnią się tylko wartością pojedynczej zmiennej, aby uzyskać inną ścieżkę kodu.

person SoapBox    schedule 29.05.2010

Twoja analiza jest w najlepszym razie niekompletna. Albo jest stronniczy, tak myślę.

Powinieneś policzyć liczbę testerów, niektórzy (lub wszyscy) z nich są w pełni oddani testowaniu i tylko testują, co zwiększa ich produktywność. Powinieneś także zdać sobie sprawę, że w wielu projektach bardzo niewiele testów jest skomplikowanych, a większość testów może być powtarzalna, dzięki czemu można je łatwo wdrożyć.

person eKek0    schedule 29.05.2010
comment
prawda, zadajesz to samo pytanie co ja. ilu było testerów. kim oni są. czy są programistami czy pracownikami kontroli jakości? wolontariusze? - person amwinter; 29.05.2010

W komentarzach pytaliście:

kto obserwuje obserwatorów? ktoś musiał mieć koszmarną pracę wypasania tych wszystkich kaczątek

... I ...

prawda, zadajesz to samo pytanie co ja. ilu było testerów. kim oni są. czy są programistami czy pracownikami kontroli jakości? wolontariusze?

Być może odpowiedzi na Twoje pytania znajdziesz w Zasady osób zgłaszających i recenzentów WebKit.

person ChrisW    schedule 29.05.2010
comment
to jak zasady porządku Roberta. w prawdziwym życiu nie może być tak czysto. Chcę usłyszeć historie z okopów o polityce zakulisowej. jak naprawdę wygląda utrzymanie dużej bazy testowej? jakie wyzwania związane z testowaniem stoją przed bardzo dużymi projektami oprogramowania. - person amwinter; 29.05.2010
comment
webkit to projekt, który przeszedł ze świata Linuksa (konqueror) do Apple i jest teraz udostępniany Google. trzy bardzo różne kultury i style oraz to ogromne źródło testów. kim są bohaterowie? kim są złoczyńcy? warto znać tę politykę, ale chcę poznać ją też z drugiej strony. - person amwinter; 29.05.2010

zakładając wydajność 3 na godzinę, czyli 83000 godzin

Biorąc pod uwagę, że istnieje tylko 18 tys. unikalnych testów i 200 dni roboczych na osoborok, to jeśli przeznaczy się cały dzień na opracowanie każdego testu, wówczas zespół składający się z 9 pełnoetatowych testerów/osób ​​mógłby opracować 18 tys. testów w ciągu 10 lat ( Projekty KHTML i KJS KDE rozpoczęły się w 1998 roku). Liczby te prawdopodobnie są nieistotne (opracowanie każdego nowego przypadku testowego może nie zająć jednego dnia i mogą nie mieć pełnoetatowych/dedykowanych testerów), ale IMO pokazują, że 18 tys. testów w ciągu 10 lat jest wykonalne dla „dużej” ( lub nietrywialny), udany projekt.

W moim projekcie stosuję podobną strategię testowania: nie dlatego, że skopiowałem Webkit, ale dlatego, że jest to jedyny sposób, jaki przychodzi mi na myśl, aby wykonać zautomatyzowane, ale łatwe w utrzymaniu testy regresyjne GUI.

Poniższy FYI jest przykładem (jednym z najkrótszych/najprostszych przykładów) jednego z moich przypadków testowych. Generuję go (i inne podobne) po prostu ręcznie uruchamiając interfejs mojej przeglądarki w ramach wbudowanego środowiska generowania przypadków testowych. Następnie mogę uruchomić ponownie później jako zautomatyzowany test regresji (struktura odtwarza dane wejściowe i potwierdza, że ​​dane wyjściowe się nie zmieniły).

Uważam, że tworzenie przypadków testowych nie jest czymś, co zajmuje stosunkowo dużo czasu.

> clientSize 20 10
+ screenDisplays lines 0
----------
----------
> loadDocument lines 5
----------
<div>
<h1>Easy title</h1>
<p>Hello world. Lorem ipsum.</p>
<p>Embedded <a>anchor</a> tag.</p>
</div>
----------
< invalidateAll
> paint 0 0 20 10
+ screenDisplays lines 10
----------
····················
····················
··»«Easy title········
····················
····················
··Hello world. ·····
··Lorem ipsum.······
····················
····················
··Embedded anchor ··
----------
> mouse down 9 2
< ensureVisible 9 2 1 13
+ screenDisplays lines 10
----------
····················
····················
··Easy ti»«tle········
····················
····················
··Hello world. ·····
··Lorem ipsum.······
····················
····················
··Embedded anchor ··
----------
> mouse up 9 2
< ensureVisible 9 2 1 13
+ screenDisplays lines 10
----------
····················
····················
··Easy ti»«tle········
····················
····················
··Hello world. ·····
··Lorem ipsum.······
····················
····················
··Embedded anchor ··
----------
> keyDown Enter
< invalidate 2 2 16 1
< invalidateAll
< invalidate 2 4 16 3
< ensureVisible 2 5 1 16
+ currentDocument lines 6
----------
<div id="ModelText_id_contents">
 <h1>Easy ti</h1>
 <h1>tle</h1>
 <p>Hello world. Lorem ipsum.</p>
 <p>Embedded <a>anchor</a> tag.</p>
</div>
----------
+ debugDumpDom lines 15
----------
 1  div
 2    h1
 3      Easy ti
 4    h1
 5      tle
 6    p
 7      Hello world. Lorem ipsum.
 8    p
 9      Embedded 
10      a
11        anchor
12       tag.

Selected start={parentId=4,parent={tle},offset=0}, end={parentId=4,parent={tle},offset=0}

----------
> paint 0 0 20 10
+ screenDisplays lines 10
----------
····················
····················
··Easy ti···········
····················
····················
··»«tle···············
····················
····················
··Hello world. ·····
··Lorem ipsum.······
----------
person ChrisW    schedule 29.05.2010
comment
@Roger Nie mam nic więcej do powiedzenia na ten temat, chyba że ktoś zada inne pytanie. - person ChrisW; 29.05.2010