Zpo-4-lab: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
=Ćwiczenie 4. Obiekty zastępcze=
=Ćwiczenie 4. Metryki obiektowe=


==Informacje wstępne==
==Informacje wstępne==
Ćwiczenie jest realizowany w języku Java w środowisku Eclipse 3.2.
Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2.
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem.
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem.
Celem ćwiczenia zastosowanie obiektów zastępczych (ang. mock objects) do testowania jednostkowego systemów obiektowych.
Celem ćwiczenia jest ocena jakości oprogramowania za pomocą metryk obiektowych


==Instalacja==
==Instalacja==
Przygotowanie do ćwiczenia polega na zainstalowaniu [http://java.sun.com/javase/downloads/index.jsp JDK 5.0] oraz środowiska [http://www.eclipse.org/downloads Eclipse] w wersji 3.2
Przygotowanie do ćwiczenia polega na zainstalowaniu [http://java.sun.com/javase/downloads/index.jsp JDK 5.0] oraz środowiska [http://www.eclipse.org/downloads Eclipse] w wersji 3.2
Biblioteka EasyMock jest dołączona do projektu zawierającego [media:zpo-05-lab.zip|szablon aplikacji]. Można także pobrać ją ze strony projektu [http://www.easymock.org EasyMock]
Po uruchomieniu środowiska i wyborze przestrzeni roboczej należy wykonać instalację wtyczki [http://metrics.sourceforge.net/projects/metrics Eclipse Metrics], która pozwoli na automatyczny pomiar wybranych metryk obiektowych dla programów w środowisku Eclipse.
Po uruchomieniu środowiska i wyborze przestrzeni roboczej należy zaimportować (menu File->Import->Existing projects into workspace) projekt [[media:zpo-04-lab.zip|zpo-04-lab.zip]] z szablonem rozwiązania.


==Zadanie 1==
Ostatni krok polega na zaimportowaniu projektu [[media:sudoku.zip|RCP SuDoKu]], stanowiącego kopię projektu RCP SuDoKu ((c) by Henning Vitting) dostępnego w serwisie SourceForge.net
Napisz testy jednostkowe wykorzystujące obiekty zastępcze (ang. mock objects) do testowania aplikacji-zegara.  


Zegar jest systemem interpretującym drgania generatora, który odmierza czas w postaci odcinków jednosekundowych. Generator drgań jest niezbędny do uruchomienia zegara, jednak wykorzystanie go w środowisku testowym jest niemożliwe, ponieważ wykonanie niektórych przypadków testowych zajęłoby zbyt wiele czasu.
==Zadanie==
Zadanie polega na obliczeniu metryk obiektowych za pomocą wtyczki Eclipse Metrics dla klas należących do projektu RCP SuDoKu, oraz zinterpretowaniu ich wartości.  


Dlatego należy zaimplementować obiekt zastępczy reprezentujący generator drgań, który zastąpi odliczanie sekund prostszym i konfigurowalnym mechanizmem. Obiekt zastępczy jest alternatywną (w stosunku do istniejącego generatora drgań) implementacją interfejsu ''GeneratorDrgan'', którego metody posiadają najmniejszą możliwą funkcjonalność, a jednocześnie są konfigurowalne.
Opcje konfiguracyjne wtyczki Eclipse Metrics są dostępne w menu Preferences->Metrics Preferences. Możliwe jest m.in. określanie kolejności metryk oraz włączenie ostrzeżeń o wykroczeniu metryki poza dopuszczalny zakres


==Zadanie 2==
[[image:zpo-5-metrics-1.png]]
Drugim zadaniem jest zrealizowanie tego samego obiektu zastępczego za pomocą biblioteki EasyMock, która pozwala na dynamiczne (tj. bez konieczności ich ręcznej implementacji) utworzenie obiektów z wykorzystaniem mechanizmu Java Dynamic Proxy.


Dokumentacja systemu EasyMock znajduje się pod adresem [http://www.easymock.org/EasyMock2_2_Documentation.html EasyMock]
Określenie zakresów dopuszczalnych dla każdej z metryk jest możliwe w kolejnej zakładce tego okienka
 
[[image:zpo-5-metrics-2.png]]
 
Aby uruchomić obliczanie metryk, należy w preferencjach projektu w opcji Metrics zaznaczyć ''Enable Metrics'', a następnie wymusić skompilowanie kodu: wyłączyć automatyczne budowanie kodu (Project->Build Automatically) oraz wywołać kompilację (Project->Build Project). Po skompilowaniu kodu można ponownie włączyć automatyczne budowanie projektu
 
[[image:zpo-5-metrics-3.png]]
 
Wtyczka Eclipse Metrics umożliwia także wizualizację zależności pomiędzy pakietami. Zależność pomiędzy pakietami występuje wówczas, gdy klasy należące do paietów są od siebie zależne.
 
Wygenerowanie widoku zależności pozwala określić pakiety abstrakcyjne i niestabilne oraz zidentyfikować cykle zależności (oznaczane na czerwono i powiązane liczbami w kółku: pierwsza liczba oznacza liczbę pakietów uczestniczących w cyklu, a druga najdłuższą ścieżkę łączącą pakiety w tej grupie). Siła zależości jest prezentowana w postaci długości linii łączącej pakiety.
 
Możliwe jest także prześledzenie szczegółowych zależności pomiędzy poszczególnymi klasami: po kliknięciu prawym klawiszem w kółko należy wybrać z menu kontekstowego opcję ''Analyze details''. Wówczas pakiety są oznaczane zielonymi prostokątami, natomiast pojedyncze klasy - granatowymi.
 
Za pomocą wtyczki Eclipse Metrics należy wyznaczyć wartości następującyc metryk:
* dotyczących powiązań między obiektami: Ce, Ca
* dotyczących spójności obiektów: LCOM
* dotyczących niestabliności i abstrakcyjności klas: I, A
* dotyczących dziedziczenia: NOC, DIT
 
==Pytania do dyskusji==
* O czym świadczy niska wartość metryki Instability pakietu Engine?
* Jaki jest związek metryk Ce i Ca z metrykami CBO i CF?
* Które metryki są bardziej przydatne do całościowej oceny jakości projektu?
* Które metryki są skorelowane z innymi?


==Literatura==
==Literatura==
# T. Mackinnon, S. Freeman, P. Craig "Endo testing. Unit testing with mock objects". [[http://www.connextra.com/aboutUs/mockobjects.pdf PDF]]
# B. Henderson-Sellers "Object-oriented metrics. Measures of complexity". Prentice-Hall, 1995
# "Mock objects i EasyMock w praktyce". [[http://jdn.pl/node/6 Java Developers Network]]
# B. Walter "Metryki obiektowe jako wskaźniki jakości kodu i projektu". [http://www.inmost.org.pl/articles/Metryki_obiektowe_jako_wskaAniki_jakoAci_kodu_i_projektu/base_view InMoST]
# A. Chaffee, W. Pietri "Unit testing with mock objects". [[http://www-128.ibm.com/developerworks/library/j-mocktest.html IBM]]
# L. Williams, D. Ho, S. Smith "Software Metrics in Eclipse" [http://open.ncsu.edu/se/tutorials/metrics NCSU]
# EasyMock Homepage, [http://www.easymock.org http://www.easymock.org]

Aktualna wersja na dzień 09:36, 30 paź 2006

Ćwiczenie 4. Metryki obiektowe

Informacje wstępne

Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2. Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem. Celem ćwiczenia jest ocena jakości oprogramowania za pomocą metryk obiektowych

Instalacja

Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0 oraz środowiska Eclipse w wersji 3.2 Po uruchomieniu środowiska i wyborze przestrzeni roboczej należy wykonać instalację wtyczki Eclipse Metrics, która pozwoli na automatyczny pomiar wybranych metryk obiektowych dla programów w środowisku Eclipse.

Ostatni krok polega na zaimportowaniu projektu RCP SuDoKu, stanowiącego kopię projektu RCP SuDoKu ((c) by Henning Vitting) dostępnego w serwisie SourceForge.net

Zadanie

Zadanie polega na obliczeniu metryk obiektowych za pomocą wtyczki Eclipse Metrics dla klas należących do projektu RCP SuDoKu, oraz zinterpretowaniu ich wartości.

Opcje konfiguracyjne wtyczki Eclipse Metrics są dostępne w menu Preferences->Metrics Preferences. Możliwe jest m.in. określanie kolejności metryk oraz włączenie ostrzeżeń o wykroczeniu metryki poza dopuszczalny zakres

Określenie zakresów dopuszczalnych dla każdej z metryk jest możliwe w kolejnej zakładce tego okienka

Aby uruchomić obliczanie metryk, należy w preferencjach projektu w opcji Metrics zaznaczyć Enable Metrics, a następnie wymusić skompilowanie kodu: wyłączyć automatyczne budowanie kodu (Project->Build Automatically) oraz wywołać kompilację (Project->Build Project). Po skompilowaniu kodu można ponownie włączyć automatyczne budowanie projektu

Wtyczka Eclipse Metrics umożliwia także wizualizację zależności pomiędzy pakietami. Zależność pomiędzy pakietami występuje wówczas, gdy klasy należące do paietów są od siebie zależne.

Wygenerowanie widoku zależności pozwala określić pakiety abstrakcyjne i niestabilne oraz zidentyfikować cykle zależności (oznaczane na czerwono i powiązane liczbami w kółku: pierwsza liczba oznacza liczbę pakietów uczestniczących w cyklu, a druga najdłuższą ścieżkę łączącą pakiety w tej grupie). Siła zależości jest prezentowana w postaci długości linii łączącej pakiety.

Możliwe jest także prześledzenie szczegółowych zależności pomiędzy poszczególnymi klasami: po kliknięciu prawym klawiszem w kółko należy wybrać z menu kontekstowego opcję Analyze details. Wówczas pakiety są oznaczane zielonymi prostokątami, natomiast pojedyncze klasy - granatowymi.

Za pomocą wtyczki Eclipse Metrics należy wyznaczyć wartości następującyc metryk:

  • dotyczących powiązań między obiektami: Ce, Ca
  • dotyczących spójności obiektów: LCOM
  • dotyczących niestabliności i abstrakcyjności klas: I, A
  • dotyczących dziedziczenia: NOC, DIT

Pytania do dyskusji

  • O czym świadczy niska wartość metryki Instability pakietu Engine?
  • Jaki jest związek metryk Ce i Ca z metrykami CBO i CF?
  • Które metryki są bardziej przydatne do całościowej oceny jakości projektu?
  • Które metryki są skorelowane z innymi?

Literatura

  1. B. Henderson-Sellers "Object-oriented metrics. Measures of complexity". Prentice-Hall, 1995
  2. B. Walter "Metryki obiektowe jako wskaźniki jakości kodu i projektu". InMoST
  3. L. Williams, D. Ho, S. Smith "Software Metrics in Eclipse" NCSU