2010-04-17 21 views
8

Jednym z najbardziej wymagających zadań dla każdego programisty jest zrozumienie kodu innych użytkowników.Znajomość kodu, inżynieria wsteczna, najlepsze koncepcje i narzędzia. Java

Na przykład jestem wykonawcą, zatrudniony, aby bardzo szybko uratować jakiś projekt. Napraw błędy, planuj globalne refaktoryzacje i dlatego potrzebuję najbardziej skutecznego sposobu na zrozumienie kodu. Jaka jest lista koncepcji, ich priorytet i najlepsze na to narzędzie?

Z tego, co wiem: inżynieria odwrotnego kodu do tworzenia modeli obiektów (tworzenie diagramu na pakiet nie jest tak wygodne), tworzenie diagramów sekwencji (narzędzie łączy się w trybie debugowania z systemem i generuje diagramy ze środowiska wykonawczego). Niektóre techniki wizualizacji, przy użyciu niektórych narzędzi do pracy nie tylko z .java, ale także z np. JPA implementatory takie jak Hibernate. Wygeneruj diagram nie dla całego kodu, ale dodaj kilka klas, a następnie klas używanych przez niego.

Czy Sparx Enterprise Architect jest najnowocześniejszy w inżynierii odwrotnej czy też daleko od tego? Jakieś inne lepsze narzędzia? Idealnie byłoby, gdyby to narzędzie pozwoliło mi zrozumieć kod, tak jakbym sam to napisał :)

Odpowiedz

6

Do tej pory najważniejszymi narzędziami są twoje uszy, język i krtań. Zapytaj ludzi, którzy znają kod - będą w stanie pomóc ci zrozumieć jego ogólną architekturę znacznie lepiej niż jakiekolwiek narzędzia programowe.

Całkowicie odświeżone kompletne modele UML są zasadniczo prawie bezużyteczne, ponieważ nie są w stanie odróżnić ważnych abstrakcji od szczegółów implementacji - co jest istotnym punktem takich modeli.

Narzędzia programowe są bardziej przydatne w udzielaniu odpowiedzi na bardzo szczegółowe pytania podczas badania szczegółów, np. "Skąd pochodzi ta metoda?". lub "jakie klasy implementują ten interfejs" - każdy dobry IDE będzie w stanie to zrobić. Pomocne mogą być także debuggery - umieszczanie punktów przerwania w kluczowych punktach kodu i przeglądanie stosu wywołań, gdy są trafieniami, jest często bardzo pouczające.

11

Książka ta szczegółowo omawia książkę Object-Oriented Reengineering Patterns. Niestety nie ma dołączonej srebrnej kuli :-)

Wymienia jednak wiele przydatnych technik przejęcia starszego kodu. W skrócie

  • wywiadzie przynajmniej niektóre z oryginalnych twórców (jeśli są one nadal się) o
    • Historia rozwoju: fazy, uwalnia
    • aktualny stan rzeczy
    • zespół struktura społeczna, polityka , dynamika: kiedy i dlaczego ludzie przyłączyli się i pozostawili
    • błędów: typowy, najłatwiejszy, najtrudniejszy
    • jakość kodu: najczystsze/najbrzydsze części
    • dane konfiguracyjne: formularz, treść i użycie
    • urządzenie/integracja/instrukcja/...przypadki testowe i dane
    • SCM struktura gałęzi i wykorzystanie
    • dokumentacja: co jest udokumentowane, gdzie jest to aktualne
    • osoby kontaktowe dla interfejsów zewnętrznych
  • Watch programistów/użytkowników podczas demo znaleźć
    • główne cechy
    • typowe przypadki użycia
    • użytkowania anegdoty
    • dobry/zły, brakuje/zbędna funkcjonalność
  • „czytaj cały kod w jednej godzinie”
    • uzyskać wysoki poziom Widok hierarchii klas, interfejsów
    • podjąć wiele sesji razie potrzeby
    • identyfikacja dużych struktur (często zawierają one ważną funkcję)
    • poszukaj wzorów wzorców
    • sprawdź com mentów (mogą ujawnić się wiele, ale może być również mylące)
  • dokumentację odtłuszczone (jeśli istnieje)
    • prostu nagrać dostępności poszczególnych rodzajów np docs Specyfikacja UML diagram, Wiki, Javadoc itp
    • jest to przydatne i dlaczego (nie)
    • jest to aktualne
2

Wystarczy rozwinąć Michaels wspomnieć o dobre IDE, które mogą pomóc Państwo:

używam Eclipse następujące udogodnienia a lot:

  • Shift-F2, gdy kursor znajduje się identyfikator przynieść s aż do Javadoc dla tego identyfikatora, jeśli taki istnieje. Dobry do nawigacji.
  • Po najechaniu myszką na identyfikator pojawia się pole z Javadoc, jeśli takie istnieje. Dobry do przypominania podczas pisania np. wywołanie metody.
  • Widok Deklaracja pokazuje źródło, w którym znajduje się słowo kluczowe, w którym umieszczony jest kursor. Jest to aktualizowane po przesunięciu kursora.
  • F3 przechodzi do definicji bieżącego identyfikatora.
  • Ctrl-T na identyfikatorze pokazuje wszystkie podklasy i implementacje w wyskakującym okienku. Bardzo przydatne przy pracy z interfejsami.
  • F4 na identyfikatorze wyświetla hierarchię implementacji tego identyfikatora w panelu, który można nawigować. Bardzo przydatne, aby dowiedzieć się, jak rzeczy są połączone. Dotyczy to zarówno klas, jak i interfejsów.
1

EclipseUML Omondo to najlepsze narzędzie inżynierii odwrotnej Java. Odwraca cały kod Java, wszystkie pakiety, a nawet interakcję klasy z interfejsem, jeśli nie jest w tym samym pakiecie. Po prostu niesamowite. Można również odwrócić: - .class - hibernacja Adnotacje - WZP adnotacje

Co lubię z tego narzędzia jest to, że mój kod jest czysty, ponieważ wszystkie informacje o modelu jest zapisany w formacie xmi a nie jak w tagu mój kod. Możesz również utworzyć małą dokumentację wewnątrz każdego istniejącego pakietu, korzystając z diagramów jako widoku modelu. Po prostu cudowny i zgodny z oficjalną specyfikacją uml 2.2. Jedynym problemem jest to, że jest naprawdę zbyt drogi, więc cena jest dla mnie zatrzymująca!

0

Używam Enterprise Architect dla całego UML (w tym inżynierii odwrotnej z Javą) i działa idealnie.

1

Nie wyodrębnia architektur wysokiego poziomu, ale znacznie ułatwia poruszanie się po kodzie Java: nasz Java Source Code Browser. Odczytuje kod źródłowy (i pliki klas pomocniczych) i tworzy dokumentację w stylu Javadoc oraz tekst źródłowy dwukierunkowo hiperłącze do informacji Javadoc. (Jestem jednym z głównych dostawców).

+0

Ten? http://www.semdesigns.com/Products/Formatters/JavaBrowser.html – TofuBeer

+0

@TofuBeer: Tak, przepraszam, spartaczyłem link; poprawione również w odpowiedzi. –

+0

Miałem zamiar edytować link ... ale pomyślałem, że powinienem upewnić się, że to było pierwsze :-) – TofuBeer

Powiązane problemy