2009-07-17 28 views
10

O ile złożoność cykliczna jest wartościową miarą, to uważam ją za słabe narzędzie do identyfikacji trudnego do utrzymania kodu. W szczególności, staram się go znaleźć po prostu podkreśla niektóre rodzaje kodu (na przykład analizatory składni) i pomija trudne problemy rekursji, wątków i sprzężeń, jak również wiele zdefiniowanych wzorców anty-wzorców.Narzędzia do analizy złożoności kodu poza złożonością cykliczną

Jakie inne narzędzia są dostępne, aby zidentyfikować problematyczny kod Java?

Uwaga, używamy już PMD i FindBugs, które uważam za doskonałe do identyfikacji problemu na poziomie metody.

Odpowiedz

11

Z mojego doświadczenia wynika, że ​​najważniejsze wskaźniki patrząc kodu konserwacji są:

  • Złożoność cykliczna, aby zidentyfikować duże fragmenty kodu, które są prawdopodobnie trudne do zrozumienia/modyfikować.
  • Głębokość zagnieżdżania, aby znaleźć podobne punkty (wysoka głębokość zagnieżdżenia jest automatycznie wysoka, ale niekoniecznie odwrotnie, dlatego ważne jest, aby uzyskać punktację na obu).
  • Włączanie/wyłączanie wentylatora, aby uzyskać lepszy obraz relacji między metodami/klasami a faktyczną ważnością poszczególnych metod.

Podczas badania kodu napisanego przez innych często przydatne jest uwzględnienie technik dynamicznych.Wystarczy uruchomić wspólne scenariusze użycia przez/code narzędzie pokrycia Profiler odkryć:

  • Kod, który jest faktycznie wykonywana dużo (profiler jest dobre dla tego, po prostu zignorować informacje o taktowaniu i spojrzeć na liczby hit zamiast).
  • Zasięg kodu jest doskonały do ​​znalezienia (prawie) martwego kodu. Aby nie inwestować czasu w kod refaktoryzacji, który i tak rzadko jest wykonywany.

Zwykłe osoby podejrzane, takie jak profiler, zasięg kodu i narzędzie metryk, zazwyczaj pomagają w uzyskaniu danych wymaganych do dokonania tych ocen.

0

Narzędzia analizy statycznej, z których już korzystasz, są dość standardowe. Jeśli korzystasz z Eclipse, spróbuj wyszukać here, aby uzyskać więcej narzędzi do analizy kodu.

Emma zapewnia analizę zasięgu kodu, ale tak naprawdę jest do testowania.

6

sprawdza na przykład dla singletonów i innych rzeczy statycznych, które mają nieprzyjemny zapach w designie. Metrics to wtyczka Eclipse, która mierzy prawie każdy rodzaj kodu znany ludzkości. Użyłem i mogę z łatwością polecić oba.

+1

+1 dla Dane ... –

4

Sonar próbuje zidentyfikować "gorące punkty" złożoności i łatwości konserwacji, łącząc wyniki różnych narzędzi open source (w tym PMD i Findbugs). Doskonale integruje się z serwerami Maven i CI (szczególnie Hudson).

EDIT przez extraneon

Jest to witryna Sonar available gdzie wiele projektów open source są analizowane. Wydaje mi się, że pokazuje to całkiem dobrze, jak wiele reguł jest stosowanych i jak daleko sięga wiertło. Możesz oczywiście również wyłączyć reguły, które nie są dla ciebie interesujące.

Here to wyjaśnienie wskaźników.

0

Narzędzie NDepend dla kodu .NET pozwoli Ci przeanalizować wiele aspektów złożoności kodu w tym metryki kodu, takich jak: Złożoność cykliczna, głębokość zagnieżdżenia, brak spójności Metod, pokrycie testami ...

. ... w tym analizę zależności i włączając w to Code Rules over LINQ Queries (CQLinq) poświęconą pytaniu, co jest złożone w moim kodzie i przepisywaniu reguły. Dostarczono około 200 default Code Rules. Dotyczą one anty-wzorców jak Singleton, wykrywanie threading problems, wykrywanie problemów sprzęgających jak UI layer shouldn't use directly DB types ...

Jakiś czas temu napisałem artykuł, aby podsumować kilka wymiarów kodu Złożoność: Fighting Fabricated Complexity

+0

Dziękuję. Wygląda jak dobry produkt. Czy zdobyliście innych sprzedawców lub zespoły, aby zaadoptowali CQL i zbudowali go dla innych języków? –

+0

Jim, faktycznie wydaliśmy Code Query i Regułę nad LINQ (CQLinq), która jest znacznie potężniejsza niż CQL. Jak dotąd jesteśmy jedynym sprzedawcą, który proponuje coś takiego jak CQLinq. Jest to wynik ogromnego wysiłku Badań i Rozwoju i uważamy go za dojrzały do ​​użytku w świecie rzeczywistym. –

Powiązane problemy