powrót do spisu treści

Rozdział 2

Refaktoryzacja

(...)

2.8.7 Podsumowanie przeglądu narzędzi

Z przedstawionego przeglądu istniejących narzędzi do automatycznego wspomagania refaktoryzacji wynika, że ta dziedzina oprogramowania znajduje się nadal w początkowej fazie rozwoju. Możemy wyróżnić kilka podstawowych problemów związanych z istniejącymi narzędziami.

Niewystarczająca weryfikacja warunków wstępnych
Zadaniem narzędzia do refaktoryzacji jest takie przeprowadzenie żądanej modyfikacji kodu, by działanie programu pozostało niezmienione (1). Kilka z wymienionych narzędzi (przykładowo JRefactory, IntelliJ Renamer) traktuje pobieżnie analizę warunków wstępnych refaktoryzacji, co sprawia, że w rezultacie narzędzie modyfikuje działanie programu w nieprzewidywalny sposób. Naszym zdaniem wyklucza to zastosowanie takich narzędzi do programów nawet średniej wielkości.

Ograniczenia funkcjonalności związane z nieuwzględnieniem całości języka
Niektóre z zaprezentowanych narzędzi (JREB, Transmogrify) nie uwzględniają całości języka programowania. Przekłada się to na niewystarczającą analizę warunków wstępnych, czego bezpośrednim skutkiem jest nieprzewidywalność wprowadzanych przez narzędzie zmian w kodzie źródłowym programu. Wspomniane narzędzia zazwyczaj niejawnie ignorują istnienie pewnych konstrukcji języka. Użytkownik korzystający z takiego narzędzia nie jest więc ostrzegany o możliwości wystąpienia zmian w działaniu programu.

Ograniczenia skalowalności
Pewna grupa przedstawionych narzędzi (JREB, Transmogrify) ma znacznie ograniczoną skalowalność ze względu na to, że w celu dokonania analizy i modyfikacji kodu narzędzia te wczytują do pamięci cały refaktoryzowany program.
Wspomagana automatycznie refaktoryzacja jest pomocna przy pracy nad dowolnym programem. Jednakże narzędzia takie najbardziej przydają się przy pracy z dużymi, złożonymi, projektami - gdzie ręczna modyfikacja programu jest prawie niemożliwa. Podane ograniczenie bardzo utrudnia, a wręcz uniemożliwa, użycie tych narzędzi tam, gdzie byłyby najbardziej potrzebne.

Brak możliwości łatwego wycofania przeprowadzonych zmian
Niektóre z wymienionych narzędzi (jFactor, JREB, XRef Speller) nie oferują możliwości łatwego wycofania zmian. Znacznie utrudnia to korzystanie z nich w najbardziej pożądany przez użytkowników sposób, polegający na przeprowadzeniu kilku następujących po sobie refaktoryzacji (2), ocenie (subiektywnej lub wspomaganej narzędziami) ich wpływu na budowę programu i ewentualnym wycofaniu wprowadzonych zmian jeżeli struktura programu nie uległa poprawie.

Niewielka liczba wspomaganych refaktoryzacji Katalog Opdyke'a (przytoczony w dodatku A) zawiera ponad 20 refaktoryzacji, książka Fowlera opisuje ponad 80, najlepsze narzędzie wspomagające refaktoryzację, The Smalltalk Refactoring Browser (p. 2.8.1), wspiera ponad 30. Natomiast żadne z obecnie istniejących i znanych nam narzędzi do refaktoryzacji programów w języku Java nie zawiera wsparcia dla więcej niż 15 refaktoryzacji (średnio poniżej 10).

Dwa pozostałe problemy są bardziej ogólnej natury.

Brak wsparcia dla refaktoryzacji w środowiskach programistycznych
Żadne z najważniejszych, istniejących na rynku, środowisk programistycznych (JBuilder, Forte4Java, Visual Age for Java) nie zawiera obecnie wsparcia dla refaktoryzacji (3). Wszystkie przedstawione narzędzia są jedynie nakładkami. Ogranicza to stopień ich integracji ze środowiskiem.

Ograniczenia w dostępie do narzędzi
Kilka opisanych programów do modyfikacji kodu i refaktoryzacji (jFactor, JREB, XRef Speller, IntelliJ Renamer) to narzędzia komercyjne, co nie tylko utrudnia ich wykorzystanie przez szersze grono zainteresowanych programistów, lecz także uniemożliwia ich rozszerzanie przez implementację nowych refaktoryzacji.

W rozdziale 4 omówione zostało nasze podejście do wymienionych tu problemów i sposób, w jaki rozwiązaliśmy je (4) przy konstrukcji naszego narzędzia.



(1) Użytkownik powinien mieć możliwość modyfikacji programu w dowolny pożądany przez siebie sposób. Jednakże zawsze wszelka zmiana działania programu powinna być wykonywana jedynie na wyraźne polecenie użytkownika.
(2) Składanie refaktoryzacji to najważniejszy sposób ich wykorzystania, co omówiono krótko w punkcie 2.5.1..
(3) Jedyne, znane nam, środowisko zawierające wsparcie dla refaktoryzacji to IDEA firmy IntelliJ. Krótki opis programu Renamer używanego w tym środowisku znajduje się w punkcie 2.8.6..
(4) Stworzone przez nas narzędzie, którego opis stanowi treść rozdziału 4 zawiera rozwiązanie wszystkich wskazanych tu problemów poza liczbą wspieranych refaktoryzacji - jak podano w rozdziale 5 jest to najważniejszy obszar dalszych prac.