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.