Pracuję nad kilkoma aplikacjami, głównie starszymi. Obecnie ich zasięg kodu jest dość niski: zwykle od 10 do 50%.
Od kilku tygodni prowadzimy cykliczne dyskusje z zespołami z Bangalore (główna część rozwoju jest offshore w Indiach) na temat wyłączeń pakietów lub klas dla Cobertura (nasze narzędzie do obsługi kodu, nawet jeśli obecnie migrujemy do JaCoCo).
Ich punkt widzenia jest następujący: ponieważ nie będą pisać testów jednostkowych na niektórych warstwach aplikacji (1) , warstwy te należy po prostu wykluczyć z zakresu pokrycia kodu. Innymi słowy, chcą ograniczyć miarę pokrycia kodu do kodu, który jest testowany lub powinien zostać przetestowany .
Ponadto, gdy pracują nad testem jednostkowym dla złożonej klasy, korzyści - wyłącznie pod względem zasięgu kodu - pozostaną niezauważone ze względu na dużą aplikację. Ograniczenie zakresu kodu sprawi, że tego rodzaju wysiłki będą bardziej widoczne ...
Interesujące to podejście polega na tym, że będziemy mieli miarę pokrycia kodu, która wskazuje bieżący status części aplikacji, którą uważamy za testowalną .
Z mojego punktu widzenia uważam jednak, że w jakiś sposób oszukujemy liczby. To rozwiązanie jest łatwym sposobem na osiągnięcie wyższego poziomu pokrycia kodu bez żadnego wysiłku. Kolejną kwestią, która mnie niepokoi, są następujące: jeśli pokażemy wzrost zasięgu z tygodnia na tydzień, jak możemy stwierdzić, czy ta dobra wiadomość wynika z dobrej pracy programistów, czy po prostu z nowych wykluczeń?
Ponadto nie będziemy w stanie dokładnie wiedzieć, co jest brane pod uwagę w ramach pomiaru zasięgu kodu. Na przykład, jeśli mam 10 000 wierszy aplikacji kodu z 40% pokryciem kodu, mogę odliczyć, że 40% mojej bazy kodu jest testowane (2) . Ale co się stanie, jeśli ustawimy wykluczenia? Jeśli pokrycie kodu wynosi teraz 60%, co mogę dokładnie odliczyć? Czy 60% mojej „ważnej” bazy kodu jest testowane? Jak mogę
Jeśli o mnie chodzi, wolę zachować „rzeczywistą” wartość pokrycia kodu, nawet jeśli nie możemy być z tego zadowoleni. Ponadto, dzięki Sonarowi, możemy łatwo nawigować w naszej bazie kodu i wiedzieć, dla dowolnego modułu / pakietu / klasy, własny zasięg kodu. Ale oczywiście globalny zasięg kodu będzie nadal niski.
Jakie jest twoje zdanie na ten temat? Jak sobie radzisz przy swoich projektach?
Dzięki.
(1) Te warstwy są ogólnie powiązane z komponentami bean UI / Java itp.
(2) Wiem, że to nieprawda. W rzeczywistości oznacza to tylko, że 40% mojej bazy kodu