Zpo-8-lab

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Ć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

  1. W jaki sposób agregować wyniki różnych metryk w celu identyfikacji przykrego zapachu?
  2. Jak wykorzystać wiedzę o zależnościach pomiędzy różnymi przykrymi zapachami do wykrywania przykrego zapachu Large Class?