powrót do spisu treści

Rodział 5

Podsumowanie

W tym punkcie prezentujemy główne osiągnięcia niniejszej pracy. O ile nie wskazano inaczej, wszystkie opisane wyniki są autorstwa Adama Kieżuna.

1. Identyfikacja tych właściwości języka Java (ściślej, programów napisanych w tym języku), których występowanie sprawia, że niektóre, nawet koncepcyjnie proste, refaktoryzacje stają się trudne w realizacji. Następnie, opis i przedstawienie na przykładach problemów powstających z powodu występowania wskazanych cech języka oraz dyskusja możliwych rozwiązań. W szczególności, w pracy omówiono:

2. Opis efektu fali występującego w związku z użyciem wielokrotnego dziedziczenia oraz sformułowanie algorytmu (uwzględniającego to zjawisko) znajdującego wszystkie metody objęte refaktoryzacją wraz z omówieniem możliwości jego wykorzystania.
3. Podanie warunków wstępnych wynikających z występowania metod natywnych.
4. Opis kilku, specyficznych dla języka Java, refaktoryzacji (wraz ze szczegółowym wyliczeniem warunków wstępnych, uwzględniającym opisane w punkcie 1 właściwości języka): 5. Stworzenie szczegółowego opisu (uwzględniającego wymienione w punkcie 1 właściwości języka) warunków wstępnych dla kilku, rozważanych wcześniej, refaktoryzacji: 6. Rozwinięcie listy, podanej przez Robertsa [19] i uzupełnionej przez Tokudę [22], warunków, które powinno spełniać każde narzędzie do refaktoryzacji.
7. Projekt i implementacja wsparcia refaktoryzacji w środowisku IBM WebSphere Studio Workbench (program jest dostępny pod adresem [24]). Ten punkt został zrealizowany przez autora niniejszej pracy wspólnie z dr Dirkiem Baeumerem (szczegóły dotyczące podziału pracy wykonanej przy projekcie i implementacji podano w rozdziale 4).

Cechy wykonanego narzędzia to:

8. Stworzenie opisu zagadnień związanych z integracją wsparcia refaktoryzacji ze środowiskiem programistycznym. Wyniki te opublikowaliśmy wraz z dr Erichem Gammą i dr Dirkiem Baeumerem w artykule [1].
 

Możliwości kontynuacji pracy

Refaktoryzacja to nadal dość nowa dziedzina badań. Pierwsza praca prezentująca to zagadnienie [17] pochodzi z roku 1992, a większość wyników badań opublikowano w ciągu ostatnich trzech lat. Znaczny wzrost zainteresowania tą dziedziną pozwala mieć nadzieję na osiągnięcie w najbliższym czasie ciekawych rezultatów. Badania, których wynikiem jest niniejsza praca, można kontynuować na kilka sposobów.

1. Rozszerzenie podanej w dodatku B listy refaktoryzacji posiadających szczegółowy opis warunków wstępnych.
2. Sformalizowanie określenia warunków wstępnych.
3. Sformalizowanie opisu zmian w programie wprowadzanych przez refaktoryzacje.
4. Zbadanie refaktoryzacji w kontekście innych języków programowania.
5. Zbadanie zagadnienia refaktoryzacji programów napisanych w kilku językach programowania. W punkcie 3.5 omówiliśmy wpływ wykorzystania metod natywnych na refaktoryzację programów w języku Java. Ciekawe byłoby zbadanie możliwości zbudowania narzędzia umiejącego refaktoryzować programy korzystające z tego mechanizmu (tzn. narzędzia potrafiącego analizować i modyfikować zarówno kod Javy, jak i kod natywny).

Język Java jest bardzo często wykorzystywany w połączeniu z językami skryptowymi, takimi jak Java Script, a także w powiązaniu z takimi mechanizmami jak Java Server Pages. Stworzenie narzędzia potrafiącego refaktoryzować tego typu systemy byłoby bardzo ciekawe i pożądane, ponieważ kombinacja wielu języków programowania w jednym systemie często prowadzi do znacznego wzrostu stopnia komplikacji kodu źródłowego.

Wsparcie refaktoryzacji w IBM WebSphere Studio Workbench jest nadal w początkowej fazie tworzenia. Do chwili obecnej (lipiec 2001, wersja R0.9 produktu) zaimplementowaliśmy jedynie część planowanych refaktoryzacji. Naszą pracę chcemy kontynuować w następujący sposób:

1. Zaimplementowanie większej liczby refaktoryzacji.
2. Wprowadzenie transakcyjności operacji.
3. Zwiększenie zasięgu możliwości wycofywania zmian. Obecnie wycofanie refaktoryzacji jest możliwe tylko do chwili, gdy użytkownik zacznie wykonywać inne modyfikacje kodu. Chcielibyśmy zintegrować mechanizm wycofywania zmian używany w edytorach z mechanizmem użytym w naszym narzędziu do refaktoryzacji.
4. Ułatwienie wprowadzania zmian na wyższym poziomie abstrakcji. Jak podano w punkcie 4.5.2, wszystkie modyfikacje są obecnie wykonywane bezpośrednio w kodzie źródłowym refaktoryzowanego programu. Mimo, że jest to bardzo elastyczne podejście, to wprowadzenie możliwości operowania elementami programu, a nie fragmentami plików z kodem źródłowym ułatwi implementację kolejnych refaktoryzacji.
5. Podczas wykonywania refaktoryzacji, aktualizowanie komentarzy dokumentujących (JavaDoc). Jest to ważne np. przy refaktoryzacjach Zmiana Nazwy Metody, Zmiana Położenia Typu itp.