2009-02-02 20 views
14

Obecnie pracuję nad stylem LAMP aplikacji internetowej perl i niedawno natknąłem się na ten labirynt śmierci kodu pozostawionego przez jakiegoś wcześniejszego programistę. Zostawił tyle magicznych liczb i dziwną logikę, że za każdym razem, gdy musiałem przez to przejść, bolało mnie.Czy istnieje dobre narzędzie do reflaktowania kodu internetowego Perla?

Obecnie uczę się testów jednostkowych, więc chcę znaleźć przydatne narzędzie do refaktoryzacji kodu i napisać test jednostkowy po drodze, aby upewnić się, że niczego nie uszkodzę.

Jakieś zalecenie dla każdego dobrego narzędzia do refaktoryzacji dla LAMP perl? Najlepiej za darmo :)

Dzięki.

Odpowiedz

13

myślę Eclipse/EPIC ma „kilka” narzędzi refaktoringu Perl ... ale nie zacytować mnie na tym ;-)

może również być warto sprawdzić Komodo. Pełna wersja nie jest jednak darmowa, podobnie jak Eclipse/EPIC. Możesz wypróbować ich wersję open source Komodo Edit, ale myślę, że nie będzie mieć wszystkich funkcji?

Nie użyłem powyższych ani żadnych innych narzędzi do refaktoryzacji ... Dostaję się za pomocą vi/vim & edytorów TextMate i ich dostarczania (lub tego, co dotychczas znalazłem w każdym z tych edytorów!).

Wykonywanie testów jednostkowych to dobry początek. Zobacz też, co może pomóc zerknąć przez bałagan i znaleźć niektóre z tych "zapachów kodu".

+0

EPIC pozwala zamienić fragmenty kodu na podprogramy, ale o ile mogę powiedzieć, nie pozwoli ci zmienić nazwy rutyny i zmienne. Nie mogę się doczekać, aż dodadzą tę funkcję ... Mam już dość wyszukiwania i zamiany! –

+1

Myślę, że Padre: http://padre.perlide.org/howto.html ma refaktoryzację leksykalną (przeszukaj stronę "refactor"). Jeszcze nie wypróbowałem tego narzędzia, ale planuję! Wygląda na to, że wciąż jest na wczesnym (ale przynajmniej obecnie aktywnym) rozwoju. – FrustratedWithFormsDesigner

+0

Po prostu wypróbowałem Padre, refaktoryzacja nie działa poprawnie. Otrzymujesz "nieznany błąd" lub nie można zmienić nazwy wszystkich wystąpień zmiennej. –

0

vim! (Lub jakikolwiek inny edytor tekstu)

Naprawdę nie ma magicznego narzędzia do ponownego kodowania kodu, istnieją narzędzia do (na przykład) zmiany nazwy zmiennych/funkcji, ale nie ma sposobu, aby magicznie naprawić straszną strukturę kodu lub dziwna logika.

+0

Cóż, patrzyłem wzdłuż linii narzędzi, które mogą mi pomóc zidentyfikować nieprzyjemne zapachy kodu dla refaktora itp. :) – melaos

5

Chociaż tak naprawdę nie jest to refaktoryzacja na tak dużej głębokości, to PerlMonks node opisuje kilka mapowań Vima do odświeżania kodu perlowego przy użyciu B::Deparse.

Ich przykłady:

Można wpisać _d kiedy kursor znajduje się na tej linii w trybie normalnym:

--$|&&s|\n|-|; 

... i zostanie ona zastąpiona:

s/\n/-/ if --$|; 

I ta linia:

$foo and $bar or $baz = 1; 

... zostanie zastąpiony:

$baz = 1 unless $foo and $bar; 
6

dynamiczny charakter Perl oznacza, że ​​jest to bardzo trudne do tworzenia narzędzi Refaktoryzacja do niego.

Jednak w odniesieniu do testów, powinieneś być w stanie zebrać kilka testów regresji, aby pomóc Ci w drodze.Działa to zaczynając od aktualnego kodu i przechwytując jego bieżące wyniki. Może to być uruchomienie skryptu CGI z linii poleceń i zapisanie wynikowego HTML do pliku.

Po przechwyceniu tego można zmienić kod i podczas sprawdzania, czy HTML nie zmienił się, co oznacza, że ​​kod nie został uszkodzony. Gdy pojawią się zmiany, możesz albo znaleźć błąd, albo zmienić test, aby zaakceptować nowy HTML jako poprawny.

Może to być trochę trudne do skonfigurowania, ale na dłuższą metę ułatwi Ci życie. Powinieneś spróbować zautomatyzować te testy, aby ułatwić ich uruchamianie. Test kasowy :: WWW :: Mechanize and Test :: LongString oraz wszystkie inne.

1

Eclipse z wtyczką EPIC ma pewne wsparcie refaktoryzacji. Nie tak wyrafinowane jak narzędzie do refaktoryzacji IntelliJ dla Javy. Nie jestem jednak w 100% pewien, czy pomógłby ci w rozwiązaniu problemu. Sposób, w jaki go użyłem, polega na podświetlaniu bloków kodu i przenoszeniu ich do funkcji/metod. W twoim przypadku prawdopodobnie będziesz chciał dużo szukać/zamieniać na te magiczne liczby ...

Zakładam, że zamierzasz użyć Test :: More do napisania testów jednostkowych. Pomocne mogą być niektóre z innych narzędzi EPIC (np. Znaczniki "todo").

Można również użyć Test :: WWW :: Mechanize i Test :: WWW :: Selenium - przydałoby się w twoim przypadku, aby zdefiniować testy selenu, aby upewnić się, że nie naruszysz żadnej funkcji użytkownika końcowego. EPIC nie ma w tym nic szczególnego, ale powinno być możliwe jego użycie do przejrzenia kodu podczas debugowania.

Powodzenia. :-)

0

Padre ma kilka narzędzi do refaktoryzacji. Zmiana nazwy zmiennych działa całkiem dobrze przez jakiś czas (dwa lata).

http://padre.perlide.org/

Zastrzeżenie: Jestem Padre specjalista.

Powiązane problemy