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

  1. 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
  2. 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/KeySurvived mutant” i zaznaczamy pole Active
  3. 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 ;)

Related Posts: