Podczas ręcznego sprawdzania nieznanego kodu (w celu przejrzenia lub zmodyfikowania) wydaje mi się, że mam trzy opcje.
- Odgórne odczytać kodu, wybierając każdy następny plik źródłowy tego, jak nazwa pliku fundamentalna wydaje. Zwykle czytam prawie wszystko. Niektóre pliki dwa razy.
- Szerokość pierwszego odczytu , gdzie mogę znaleźć i przeczytać wszystkie metody wywołującego z minimalnym zrozumieniem. Następnie przeczytaj wszystkie funkcje wywoływane przez tę funkcję i tak dalej. Mój mentalny stos ma tendencję do przepełnienia, jeśli wykonam kilka głębokich połączeń.
- Głębokość pierwszego odczytu , gdzie krok po kroku cały kod w debugger, niepewni, czy to zajmie 8 minut lub 8 godzin.
Po przeczytaniu wystarczającej ilości kodu, aby mieć dość solidne zrozumienie tego, co robi, często myślę, że przeczytałem 80% lub więcej bazy kodu, podczas gdy podstawowy kod to 20% lub mniej . Zmarnowałem dużo czasu.
Jakie narzędzia są przydatne, aby szybko poznać nieznany kod? Czy są jakieś narzędzia, które mogą dać „duży obraz” ścieżki krytycznego kodu i pozwolić mi przejść do szczegółów jednej części?
tools
code-reviews
source-code
maintenance
Drew Dormann
źródło
źródło
Odpowiedzi:
Oczywiście najlepszą rzeczą jest, aby ktoś, kto zna bazę kodu, przeprowadził cię przez nią. Jeśli nie jest to opcja, istnieje kilka narzędzi, które mogą ci pomóc.
Ogólnie rzecz biorąc, chcesz także używać w pełni funkcjonalnego IDE, w którym możesz kliknąć prawym przyciskiem myszy cokolwiek i „przejść do definicji”. To pozwala zaoszczędzić dużo czasu w porównaniu z użyciem grep na wielu plikach w złożonej strukturze katalogów.
Kolejna ważna rzecz, w zależności od tego, jak długo będziesz musiał radzić sobie z kodem. Jeśli istnieją testy jednostkowe, przejrzyj je. Jeśli nie ma testów, zacznij je pisać. Stwórz hipotezę o tym, co robi dana klasa lub funkcja, i napisz test, aby ją przetestować. Wymaga to dużej dyscypliny, ale jest to świetny sposób na uzyskanie odpowiedzi na temat tego, co dzieje się w kodzie.
źródło
To jest bardziej drastyczne podejście. Ta technika może być przydatna w przypadku projektu, który ma wiele klas, które nie są zorganizowane w znaczące przestrzenie nazw.
Celem tego ćwiczenia jest odkrycie relacji klasowej. Utwórz rzutowy klon projektu, a następnie spróbuj umieścić niektóre klasy w przestrzeniach nazw. Aby zaoszczędzić czas przy ponownych próbach, użyj narzędzi do przetwarzania plików Regex, aby zautomatyzować tę zmianę.
Spowoduje to wiele błędów kompilatora. Podczas naprawiania tych błędów lepiej zrozumiemy, w jaki sposób te klasy są od siebie zależne, i zdecydujemy, które klasy można umieścić w tej samej przestrzeni nazw.
Ta technika jest przydatna, ponieważ można ją zastosować nawet przy niewielkim zrozumieniu organizacji kodu projektu. W związku z tym istnieje ryzyko, że niektóre klasy mogą zostać zgubione przez tę technikę z powodu nieporozumień.
źródło