Zpo-8-lab
Ćwiczenie 8: Identyfikacja obszarów wymagających refaktoryzacji
Informacje wstępne
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem. Celem ćwiczenia jest zastosowanie metryk oraz narzędzia XSmells do identyfikacji obszarów kodu wymagających refaktoryzacji (tzw. przykrych zapachów w kodzie programu).
Instalacja
Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0 [1] oraz środowiska Eclipse [2] w wersji 3.2 Dodatkowo należy zainstalować wtyczkę Metrics (opisaną w materiale do ćwiczenia nr 4) oraz wtyczkę XSmells autorstwa Błażeja Pietrzaka (instrukcja instalacji znajduje się w pliku) Po uruchomieniu środowiska należy zaimportować (menu File->Import->Existing projects into workspace) przykładowy projekt Sudoku.
Zadanie 1
Zadanie polega na próbie zidentyfikowania przykrego zapachu Long Method w klasach com.vitting.rcpsudoku.model.SudokuDocument oraz com.vitting.rcpsudoku.rules.Rule4. Długa metoda to nie tylko metoda o dużej liczbie linii kodu, ale przede wszystkim wykonująca zbyt wiele czynności, zatem trudna w zrozumieniu i przetestowaniu. Dlatego warto rozważyć następujące kryteria:
- rozmiar kodu
- złożoność cyklomatyczną metody
- rozmiar komentarzy
- liczba parametrów
- liczba instrukcji return
Typowym mechanizmem służącym do oceny tych kryteriów są oczywiście metryki. Na podstawie wyników uzyskanych za pomocą wtyczki Metrics oraz np. arkusza kalkulacyjnego oceń, które z metod są obciążone wymienionym przykrym zapachem. Które spośród metryki okazały się przydatne w wykrywaniu tego przykrego zapachu?
Następnie uruchom dla tych samych klas wtyczkę XSmells, która samodzielnie ocenia obecność przykrych zapachów i porównaj otrzymane wyniki.
Na tej podstawie sformułuj reguły dotyczące występowania tego przykrego zapachu
Zadanie 2
Korzystając z doświadczeń uzyskanych podczas realizacji poprzedniego zadania, określ warunki występowania innego przykrego zapachu - Large Class. Dotyczy on zbyt dużej odpowiedzialności powierzonej klasie. Zwróć uwagę na jego wielokryterialność - wśród jego symptomów można wymienić m.in.:
- duża liczba pól klasy
- duża liczba metod
- duża liczba instancji klasy
- duża liczba implementowanych interfejsów
- duża liczba linii kodu klasy
- niska spójność klasy
Jakie metryki pozwalają ocenić jego występowanie? Ponownie, spróbuj zdefiniować reguły dotyczące występowania tego przykrego zapachu.
Pytania do dyskusji
- W jaki sposób agregować wyniki różnych metryk w celu identyfikacji przykrego zapachu?
- Jak wykorzystać wiedzę o zależnościach pomiędzy różnymi przykrymi zapachami do wykrywania przykrego zapachu Large Class?