Jak mogę przeanalizować kod Pythona, aby zidentyfikować problematyczne obszary?


99

Mam duże repozytorium źródłowe podzielone na wiele projektów. Chciałbym sporządzić raport na temat stanu kodu źródłowego, identyfikując obszary problemowe, którymi należy się zająć.

W szczególności chciałbym przywołać procedury o dużej cyklicznej złożoności, zidentyfikować powtórzenia i być może przeprowadzić statyczną analizę podobną do kłaczków, aby wykryć podejrzane (a zatem prawdopodobnie błędne) konstrukcje.

Jak mogę zabrać się do tworzenia takiego raportu?

Odpowiedzi:


36

Na stronie traceback.org dostępne jest przydatne narzędzie do pomiaru złożoności cyklicznej . Strona zawiera również dobry przegląd sposobu interpretacji wyników.

+1 za pylint . Świetnie sprawdza się w sprawdzaniu zgodności ze standardami kodowania (czy to PEP8, czy wariantem Twojej organizacji), co ostatecznie może pomóc zredukować cykliczną złożoność.


4
traceback.org to uszkodzony link
denfromufa

Pylint jest świetny, ale powolny. Używamy go jako haka przed wypychaniem, ale używamy flake8 i zestawu wtyczek do regularnego sprawdzania i przechwytywania przed zatwierdzeniem. Właściwie to polecałbym https://flakehell.readthedocs.io/config.htmlte dni, ponieważ jego model wykonania jest znacznie bardziej niezawodny i konfigurowalny.
DylanYoung

29

Dla złożoności cyklomatycznej możesz użyć radon: https://github.com/rubik/radon

(Użyj pipgo zainstalować: pip install radon)

Dodatkowo ma również następujące funkcje:

  • surowe dane (obejmują SLOC, wiersze komentarzy, puste wiersze itd.)
  • Metryki Halstead (wszystkie)
  • Indeks łatwości utrzymania (ten używany w programie Visual Studio)

Jaka jest zmiana, aby uzyskać metryki Halstead?
Dima Tisnek

1
@qarma Jeśli rozumiem dokumenty, nie sądzę, abyś mógł używać wiersza poleceń. Musisz użyć API Pythona.
Dave Halter


11

Pycana działa jak urok, gdy musisz zrozumieć nowy projekt!

PyCAna (Python Code Analyzer) to fantazyjna nazwa prostego analizatora kodu dla Pythona, który tworzy diagram klas po wykonaniu kodu.

Zobacz, jak to działa: http://pycana.sourceforge.net/

wynik:

tekst alternatywny





3

Do sprawdzenia cykliczności złożoności jest oczywiście mccabepakiet.

Instalacja:

$ pip install --upgrade mccabe

Stosowanie:

$ python -m mccabe --min=6 path/to/myfile.py

Zwróć uwagę na próg 6 powyżej. Zgodnie z tą odpowiedzią wyniki> 5 prawdopodobnie powinny zostać uproszczone.

Przykładowe dane wyjściowe z --min=3:

68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3

Opcjonalnie może być również używany przez pylint-mccabe lub pytest-mccabe itp.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.