Włączanie analizy pokrycia kodu z poziomu skryptu Ant
Aby zweryfikować, czy budowany kod spełnia określone kryteria akceptacji jego pokrycia, można włączyć tę funkcję z poziomu skryptu Ant. Aby to zrobić, należy wykonać następujące czynności:
Można również wyświetlać wyniki pokrycia kodu w środowisku roboczym.
Konfigurowanie skryptu Ant w celu włączenia analizy pokrycia kodu
Aby skonfigurować skrypt Ant w celu włączenia analizy pokrycia kodu, dodaj następujący łańcuch
do zmiennej środowiskowej CLASSPATH:
<katalog_instalacyjny>/plugins/com.ibm.rational.llc.engine_1.0.0.<numer_wersji>
Następnie zdefiniuj nowe zadanie w pliku budowania. Na przykład:
<taskdef name="instrument"
classname="com.ibm.rational.llc.engine.instrumentation.anttask.InstrumentationTask"
classpath="${katalog_instalacyjny}/plugins/com.ibm.rational.llc.engine_1.0.0.<numer_wersji>"/>
Format zadania instrumentacji to:
<instrument buildPath="" baseLineFile="" saveBackups="" outputDir=""/>
gdzie:
- buildPath:
- Określa pliki, dla których będą zbierane dane o pokryciu kodu. Ścieżka budowania może odwoływać się do nazwy pliku klasy, nazwy pliku JAR lub nazwy katalogu. Jest ona definiowana tak jak każde inne odwołanie do ścieżki w środowisku Ant.
- baseLineFile:
- Określa ścieżkę, w której zapisany jest plik linii bazowej. Jest to plik, względem którego porównywany jest instrumentowany kod i dla którego generowane są statystyki pokrycia kodu. Stanowi on również dane wejściowe dla zadania generowania raportu środowiska Ant.
- saveBackups:
- Określa, czy zmienić nazwy oryginalnych plików JAR i plików klas, dodając
do nazw rozszerzenie *.bak. Ustawienie właściwości saveBackups na wartość true spowoduje wygenerowanie plików kopii zapasowej. Ustawienie jej na wartość false spowoduje nadpisanie (a więc utratę) oryginalnych plików.
Uwaga: Właściwość saveBackups jest opcjonalna, a jej wartość domyślna to false.
- outputDir:
- Określa miejsce, w którym zostaną zapisane instrumentowane pliki. Domyślnie są one zapisywane w tym samym położeniu, co pliki oryginalne.
Przykład 1
W następującym przykładzie dane dotyczące pokrycia kodu są zbierane dla wszystkich plików w katalogu bin/, plik linii bazowej jest zapisany w położeniu blfile.coveragedata, nie są generowane kopie zapasowe plików, a pliki po instrumentacji są zapisywane w katalogu coverageData_files.
<instrument saveBackups="false" baseLineFile="blfile.coveragedata" buildPath="bin/" outputDir="coverageData_files"/>
Przykład 2
W następującym przykładzie dane dotyczące pokrycia kodu są zbierane dla wszystkich plików w katalogu bin przywoływanym za pomocą identyfikatora build.Dir, plik linii bazowej jest zapisany w położeniu blfile.coveragedata i generowana jest kopia zapasowa wszystkich plików.
<path id="build.Dir">
<pathelement location="bin"/>
</path>
<instrument saveBackups="true" baseLineFile="blfile.coveragedata" buildPathRef="build.Dir" />
Przykład 3
W następującym przykładzie dane dotyczące pokrycia kodu są zbierane dla wszystkich plików w katalogu bin/, plik linii bazowej jest zapisany w położeniu blfile.coveragedata i generowana jest kopia zapasowa wszystkich plików.
<instrument saveBackups="true" baseLineFile="blfile.coveragedata">
<buildPath>
<pathelement location="bin"/>
</buildPath>
</instrument>
Przykład 4
W następującym przykładzie dane dotyczące pokrycia kodu są włączone dla wszystkich podkatalogów katalogu bin/ zawierających w nazwie łańcuch com, a wykluczone są pliki z podkatalogów zawierających w nazwie łańcuch Test. Tworzone są kopie zapasowe wszystkich plików objętych analizą pokrycia kodu, a plik linii bazowej jest zapisany w położeniu blfile.coveragedata.
<instrument saveBackups="true" baseLineFile="blfile.coveragedata">
<buildPath>
<fileset dir="bin">
<exclude name="**/*Test*"/> <include name="**/*com*/*">
</fileset>
</buildPath>
</instrument>
Przykład 5
W następującym przykładzie dane dotyczące pokrycia kodu są włączone dla wszystkich podkatalogów katalogu bin2/ oraz katalogu bin/, ale w przypadku tego katalogu z wyjątkiem podkatalogów zawierających w nazwie łańcuch Test. Tworzone są kopie zapasowe wszystkich plików objętych analizą pokrycia kodu, a plik linii bazowej jest zapisany w położeniu blfile.coveragedata.
<instrument saveBackups="true" baseLineFile="blfile.coveragedata">
<buildPath>
<fileset dir="bin">
<exclude name="**/*Test*"/>
</fileset>
</buildPath>
<buildPath>
<pathelement location="bin2"/>
</buildPath>
</instrument>
Uruchomianie skryptu Ant
Po skonfigurowaniu skryptu Ant do włączenia analizy pokrycia kodu można uruchomić ten skrypt z wiesza komend Ant lub z poziomu środowiska roboczego.
Uruchamianie z poziomu wiersza komend
Aby uruchomić skrypt Ant z poziomu wiersza komend:
- Ustaw zmienną środowiskową JAVA_HOME na katalog, w którym zainstalowane jest środowisko JDK.
- Upewnij się, że zmienna środowiskowa CLASSPATH zawiera pełną ścieżkę oraz nazwę pliku probekit.jar. Plik probekit.jar znajduje się w podfolderze org.eclipse.hyades.probekit folderu wtyczek, który ma najwyższy numer wersji i najnowszy znacznik czasu, w posiadanej instalacji produktu.
- Upewnij się, że zmienna środowiskowa CLASSPATH zawiera zmienną JAVA_HOME (ścieżkę do instalacji środowiska Java, np. JAVA_HOME/bin/java).
- Upewnij się, że zmienna środowiskowa PATH zawiera pełną ścieżkę do odpowiedniego dla używanej platformy podfolderu w folderze org.eclipse.hyades.probekit. Na przykład:
- W systemie Windows:
<katalog_instalacyjny>\plugins\org.eclipse.hyades.probekit_<wersja>\os\win32\x86
- W systemie Linux:
<katalog_instalacyjny>/plugins/org.eclipse.hyades.probekit_<wersja>/os/linux/x86
- Ustaw zmienną LLC_PLUGIN na wartość ścieżki do folderu wtyczek:
set LLC_PLUGIN=<katalog_instalacyjny>\plugins
Przykład
ant -lib=<katalog_instalacyjny>\plugins\org.eclipse.hyades.probekit_<wersja>\probekit.jar myTarget
Uruchamianie z poziomu środowiska roboczego
Aby uruchomić skrypt Ant z poziomu środowiska roboczego:
- Wybierz plik budowania.
- Kliknij go prawym przyciskiem myszy i wybierz opcję Wykonaj jako > Budowanie Ant.
- Wybierz kartę Ścieżka klasy.
- Wybierz opcję Pozycje użytkownika.
- Kliknij opcję Dodaj zewnętrzne pliki JAR.
- Dodaj plik <katalog_instalacyjny>\plugins\org.eclipse.hyades.probekit_<wersja>\probekit.jar do zmiennej CLASSPATH, wskazując na podfolder wtyczek org.eclipse.hyades.probekit, który ma najwyższy numer wersji i najnowszy znacznik czasu.
- Wybierz kartę Cele.
- Wybierz żądane cele.
- Wybierz kartę Środowisko.
- Kliknij przycisk Nowy.
- W oknie dialogowym Nowa zmienna środowiskowa w polu Nazwa wpisz wartość LLC_Plugin, a w polu Wartość wpisz ścieżkę do katalogu LLC_PLUGIN (np. <katalog_instalacyjny>\plugins).
- Kliknij przycisk OK.
- Kliknij przycisk Nowy.
- W oknie dialogowym Nowa zmienna środowiskowa w polu Nazwa wpisz wartość PATH, a w polu Wartość wpisz <katalog_instalacyjny>\plugins\org.eclipse.hyades.probekit_<wersja>\os\win32\x8.
- Kliknij przycisk OK.
- Kliknij przycisk Wykonaj.
Generowanie statystyk pokrycia kodu
Upewnij się, że ścieżka klasy zawiera następującą pozycję:
<katalog_instalacyjny>\plugins\com.ibm.rational.llc.engine_1.0.0.<numer_wersji>
Aby wygenerować statystyki pokrycia kodu z poziomu wiersza komend, z katalogu nadrzędnego względem kodu uruchom komendę:
java -Dcoverage.out.file=C:\coverage_report\coverage_data.coveragedata com.ibm.rational.llc.example
Uwaga: Może być konieczne ustawienie używanego środowiska Java, tak aby było zgodne ze środowiskiem instalacji produktu.
Generowanie raportów z pokrycia kodu
Aby wygenerować raport, korzystając ze środowiska Ant:
Pobierz Mechanizm raportowania środowiska BIRT i rozpakuj jego zawartość.
Ustaw następujące zmienne środowiskowe:
- CLASSPATH - na wartość org.eclipse.equinox.common_<numer_wersji>.jar
- LLC_COMMON_PLUGIN - na wartość com.ibm.rational.llc.common_1.0.0.<numer_wersji>
- LLC_REPORT_PLUGIN - na wartość com.ibm.rational.llc.report.birt_1.0.0.<numer_wersji>
- BIRT_HOME - na wartość wskazującą katalog ReportEngine środowiska wykonawczego BIRT
Na przykład:
<path id="lib.path">
<pathelement location="${env.LLC_COMMON_PLUGIN}"/>
<pathelement location="${env.LLC_REPORT_PLUGIN}"/>
<fileset dir="${env.BIRT_HOME}/lib" includes="*.jar"/>
</path>
Zdefiniuj nowe zadanie w pliku budowania na potrzeby generowania raportu z pokrycia kodu, na przykład:
<taskdef name="code-coverage-report"
classname="com.ibm.rational.llc.report.birt.adapters.ant.ReportGenerationTask"
classpathref="lib.path"/>
Format zadania generowania raportu z pokrycia kodu to:
<code-coverage-report outputDir="" coverageDataFile="" baseLineFiles=""> <filters> <filter type="" value=""/> </filters> <configurations> <configuration name="" value=""/> </configurations> </code-coverage-report>
gdzie:
- outputDir:
- Określa miejsce, w którym zostaną zapisane pliki wynikowe raportu.
- coverageDataFile:
- Określa co najmniej jeden plik danych pokrycia kodu, na podstawie którego zostanie wygenerowany raport. Są one definiowane tak jak każde inne odwołanie do ścieżki w środowisku Ant.
- baseLineFiles:
- Określa co najmniej jeden plik linii bazowej, który został wygenerowany w ramach zadania instrumentacji. Są one definiowane tak jak każde inne odwołanie do ścieżki w środowisku Ant.
- filters:
- Opcjonalne: Używane na potrzeby filtrowania wyników raportu.
- filter:
- type: Typ filtru do zastosowania w raporcie.
- value: Wartość filtru do zastosowania w raporcie.
- Dostępne filtry:
- Próg pokrycia wierszy: Określa próg w raporcie o pokryciu wierszy, aby wyświetlać dane poniżej określonej wartości procentowej. type=line_coverage_threshold, value=wartość progu
- Configurations:
- Opcjonalne: Używane do określania różnych konfiguracji obliczeń.
- Configuration:
- name: Nazwa konfiguracji.
- value: Wartość konfiguracji.
- Dostępne konfiguracje:
- Włączanie konstruktora domyślnego: Określ, czy do obliczeń pokrycia kodu włączane są konstruktory domyślne. Domyślnie konstruktory domyślne są włączane. W przypadku gdy klasa nie definiuje konstruktora, kompilator generuje konstruktor domyślny bez argumentów. Jednak nie jest on wyświetlany w rzeczywistym pliku źródłowym. Podczas wykonywania programu, gdy instancja danej klasy nie jest tworzona, ukryty konstruktor domyślny nie jest wykonywany, dlatego pokrycie kodu nie równa się 100% (inaczej niż można było oczekiwać). To zachowanie można zmienić, korzystając z następującej konfiguracji: name=excludeDefaultConstructor, value=true lub false
Przykład 1
W następującym przykładzie generowanie raportu odbywa się na podstawie danych coverage-data/coverage.coveragedata, plikiem linii bazowej jest coverage-data/blfile.coveragedata, raport jest zapisywany w położeniu coverage-reports i stosowany jest filtr line_coverage_threshold z wartością progową 80%. Z obliczeń pokrycia kodu wykluczone są konstruktory domyślne.
<code-coverage-report outputDir="coverage-reports/"
coverageDataFile="coverage-data/coverage.coveragedata"
baseLineFiles="coverage-data/blfile.coveragedata">
<filters>
<filter type="line_coverage_threshold" value="80"/>
</filters>
<configurations>
<configuration name="excludeDefaultConstructor" value="true"/>
</configurations>
</code-coverage-report>
Przykład 2
W następującym przykładzie generowanie raportu odbywa się na podstawie dwóch plików danych coverage1.coveragedata i coverage2.coveragedata , plikami linii bazowej są blfile1.coveragedata i blfile2.coveragedata, a raport jest zapisywany w położeniu coverage-reports. Domyślnie konstruktory domyślne są włączane do obliczeń pokrycia kodu.
<code-coverage-report outputDir="coverage-reports/"
coverageDataFile="coverage-data/coverage1.coveragedata;coverage-data/coverage2.coveragedata"
baseLineFiles="coverage-data/blfile1.coveragedata;coverage-data/blfile2.coveragedata">
</code-coverage-report>
Wyświetlanie wyników pokrycia kodu w środowisku roboczym
Aby wyświetlić wyniki pokrycia kodu ze skryptu Ant w środowisku roboczym:
- Zaimportuj plik wynikowy .coveragedata:
- Wybierz opcję Plik > Importuj.
- Wybierz opcję Pokrycie kodu > Plik danych pokrycia kodu.
- Kliknij przycisk Dalej.
- Jako typ importowania wybierz system plików.
- Kliknij przycisk Dalej.
- Wprowadź położenie pliku danych pokrycia kodu do zaimportowania (w powyższym przykładzie jest to plik coverage_data.coveragedata), nazwę folderu, do którego plik zostanie zaimportowany, oraz projekty powiązane z plikiem danych pokrycia kodu.
- Kliknij przycisk Zakończ.
Jeśli w projekcie nie była jeszcze włączona funkcja pokrycia kodu, zostanie wyświetlony monit o ponowne zbudowanie projektu.
- Wygeneruj raport z pokrycia kodu:
- Wybierz opcję Wykonaj > Pokrycie kodu > Generuj raport.
- W kolumnie Nazwa wybierz co najmniej jedno uruchomienie kodu Java.
- Wybierz raport oparty na środowisku Eclipse lub raport w formacie pliku HTML.
- Kliknij przycisk Wykonaj.
Uwaga: Zamiast wybierania plików z danymi o pokryciu kodu można kliknąć prawym przyciskiem myszy, a następnie wybrać opcję Pokrycie kodu > Generuj raport. Określ powiązany projekt i położenie folderu raportu, a następnie kliknij przycisk Zakończ.
Wyłączanie analizy pokrycia kodu
Aby wyłączyć klasy instrumentowane w ramach zadania Ant, ponownie skompiluj projekt lub zastąp pliki .class plikami .class.bak (o ile opcja saveBackups była włączona).
Pojęcia pokrewne
Indykatory pokrycia kodu
Czynności pokrewne
Włączanie analizy pokrycia kodu
Konfigurowanie poziomów i filtrów pokrycia kodu
Konfigurowanie indykatorów pokrycia kodu
Analizowanie raportów z pokrycia kodu
(C) Copyright IBM Corporation 2007, 2008. Wszelkie prawa zastrzeżone.