Pracuję nad projektem, który ma dużo starego kodu, który nie jest objęty testami.Ciągła integracja: upewnij się, że nowe zatwierdzenia są objęte testami.
Czy istnieje sposób, w jaki mogę skonfigurować serwer integracyjny, aby sprawdzić, czy wszystkie nowe zatwierdzenia mają minimalną liczbę testów (np. Pokrycie wynosi> 70%)?
Zasadniczo, widzę dwie opcje:
- jakoś skonfigurować serwer CI niepowodzenie kompilacji, gdy popełnione zmiany nie są pokryte testów jednostkowych. Zapewni to, że każdy fragment nowego kodu będzie miał testy, a testy starszych kodów będą wzrastać wraz z każdą zmianą.
- Ustawienie progu zasięgu dla całego projektu i niepowodzenie kompilacji, jeśli procent pokrycia zmniejszy się po zatwierdzeniu. Problem polega na tym, że jeśli usunę klasę zawierającą 100 instrukcji i dodaję nową klasę z 50 instrukcjami, procent pokrycia wzrośnie bez pisania jakichkolwiek testów.
Jeszcze bardziej podoba mi się opcja 1, ponieważ wymusza zmiany w dotychczasowym kodzie w celu przetestowania jednostki. Powinno to zwiększyć ogólny zasięg testu.
W tej chwili używamy Jenkinsa jako naszego serwera CI i JaCoCo do pokrycia testowego. Maven służy do budowania projektu, a SVN jest naszą główną kontrolą źródła.
Należy pamiętać, że 100% pokrycia niekoniecznie jest możliwe, a nawet pożądane. Można również manipulować numerami zasięgu; napisanie testu jednostkowego dla klasy testowej może sztucznie zawyżyć zakres testowy. –
@MikeRylander Wiem, że nawet nie marzę o 100% zasięgu tego projektu. Ale wciąż uważam, że wymuszanie nowych zmian, aby przynajmniej część z nich była dobra. –
Obecnie pracuję nad rozwiązaniem tego problemu, który w dużym stopniu odnosi się do komentarza @MikeRylanders. http://pitest.org jest teraz zintegrowany z kontrolą wersji. Następne wydanie pozwoli na analizę plików według statusu scm. Następująca wersja umożliwi analizę według zakresu dat lub zatwierdzenia, co umożliwi serwerowi kompilacji sprawdzenie, czy zmodyfikowany kod spełnia określony wynik mutacji. – henry