Jak zmusić SonarQube, by dołączał do raportów wyniki testowania mutacyjnego.
Krótki wstęp
Dzisiaj będziemy zmuszać PIT’a (http://pitest.org/) do współpracy z SonarQube (http://www.sonarqube.org/).
PIT (PiTest) to narzędzie do testowania mutacyjnego kodu javy. Chodzi tutaj o to, że PIT wprowadza do kodu produkcyjnego błędy (mutacje), a następnie sprawdza, czy nasze unit testy potrafią wykryć wprowadzone błędy. Czyli w pewnym sensie jest to rozwinięcie idei testowania pokrycia kodu; mówi nam o tym, jak dobrze testujemy nasz kod. Polecam wystąpienie Marcina Zajączkowskiego na temat testowania mutacyjnego: http://www.youtube.com/watch?v=DvZpvIK3EwE
SonarQube (dalej: sonar) to cały panel do zarządzania jakością kodu, który dostarcza mnóstwa informacji na temat rozwoju projektu (np. w postaci przyrostu liczby linii kodu, testów jednostkowych) i i wiele miar jakościowych. Najlepiej będzie, jeśli zobaczysz sobie demo w działaniu: http://nemo.sonarqube.org/
Co potrzeba
Zakładam, że mamy świeżo postawionego SonarQube’a na komputerze, zainstalowanego Mavena oraz przykładowy javowy projekt mavenowy (posiadający plik konfiguracyjny POM.xml). Naszym celem jest takie skonfigurowanie narzędzi, by zobaczyć wyniki z testowania mutacyjnego w raporcie sonara.
Trzy kroki do celu
- Po pierwsze musimy zainstalować wtyczkę PIT do SonarQube. Ściągamy wtyczkę z http://docs.codehaus.org/display/SONAR/Pitest i kopiujemy do /SonarQube/extensions/plugins
- Po drugie musimy skonfigurować SonarQube do korzystania z nowej wtyczki:
– uruchamiany sonara plikiem StartSonar.bat i czekamy aż wyświetli sie info “Web server is started” (to może zająć 60sekund i więcej, więc – cierpliwości). Lub restartujemy sonara jeśli wcześniej był włączony – musi wczytać nową wtyczkę. Wchodzimy na localhost:9000 i logujemy się do panelu administracji jako admin/admin. Wchodzimy do menu General settings -> Pitest i ustawiamy pole “PIT activation mode” na reuseReport. Dzięki temu sonar będzie korzystał z raportów PITa generowanych standardowo do /target/pit-reports.
– wchodzimy do menu Quality Profiles ->Sonar way (czy jakiego tam profilu akurat używamy), wyszukujemy w Name/Key “Survived mutant” i zaznaczamy pole Active - Konfigurujemy PIT’a w pliku POM.xml do generowania raportów w formacie XML. U mnie wygląda to tak:
<plugin> <groupId>org.pitest</groupId> <artifactId>pitest-maven</artifactId> <version>0.31</version> <configuration> <targetClasses> <param>com.mateuszmidor*</param> </targetClasses> <targetTests> <param>com.mateuszmidor*</param> </targetTests> <excludedClasses> <param>com.mateuszmidor.App</param> </excludedClasses> <outputFormats> <outputFormat>XML</outputFormat> <outputFormat>HTML</outputFormat> </outputFormats> </configuration> </plugin>
No i to w zasadzie tyle
Teraz odpalamy PIT’a i zaraz po nim sonara, mavenem, z lini poleceń:
mvn clean test pitest:mutationCoverage sonar:sonar
i cieszymy się wynikami testowania mutacyjnego w postaci Issues sonara ;)
Btw. nie pisałbym o tym wszystkim, gdyby PIT był oficjalnie wspierany przez sonara. Niestety – nie jest, w związku z czym potrzeba tu troszkę więcej pracy niż wciśnięcie “Install plugin”. Przynajmniej na dzień dzisiejszy ;)