Pythonコードを分析して問題のある領域を特定するにはどうすればよいですか?


99

大規模なソースリポジトリが複数のプロジェクトに分割されています。ソースコードの状態に関するレポートを作成し、対処する必要のある問題領域を特定します。

具体的には、サイクロマティックの複雑度が高いルーチンを呼び出し、繰り返しを識別し、おそらく糸くずのような静的分析を実行して、疑わしい(したがって誤っている可能性が高い)構造を見つけたいと思います。

このようなレポートを作成するにはどうすればよいですか?

回答:


36

循環的複雑度を測定するために、traceback.orgに優れたツールがあります。このページでは、結果の解釈方法の概要もわかります。

pylintの +1 。これは、コーディング基準(PEP8または独自の組織のバリアント)への準拠を検証するのに優れており、最終的には循環的な複雑さを軽減するのに役立ちます。


4
traceback.orgはリンクが壊れています
denfromufa

ピリントは素晴らしいですが、遅いです。プレプッシュフックとして使用しますが、定期的なチェックとプレコミットフックにはflake8と一連のプラグインを使用します。https://flakehell.readthedocs.io/config.htmlただし、実行モデルの方がはるかに堅牢で構成可能であるため、実際には最近お勧めします。
DylanYoung

29

循環的複雑度については、次を使用できますradonhttps : //github.com/rubik/radon

(使用して、pipそれをインストールしますpip install radon

さらに、次の機能もあります。

  • 生のメトリック(これらには、SLOC、コメント行、空白行などが含まれます。)
  • Halsteadメトリック(すべて)
  • 保守性インデックス(Visual Studioで使用されるもの)

Halsteadメトリックを取得するスイッチは何ですか?
Dima Tisnek、2015

1
@qarmaドキュメントを理解している場合、コマンドラインを使用できないと思います。Python APIを使用する必要があります。
Dave Halter、2015


11

Pycanaは、新しいプロジェクトを理解する必要があるときに魅力のように機能します!

PyCAna(Pythonコードアナライザー)は、コードの実行後にクラス図を作成する、Python用のシンプルなコードアナライザーの架空の名前です。

それがどのように機能するかを見てください:http : //pycana.sourceforge.net/

出力:

代替テキスト




4

同様のコードスニペットを見つけるのに役立つCloneDiggerというツールがあり ます。


1
Python 3では機能せず、十分にメンテナンスされていません。
Acumenus 2016年

3

循環的複雑度をチェックするために、もちろんmccabeパッケージがあります。

インストール:

$ pip install --upgrade mccabe

使用法:

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

上記のしきい値6に注意してください。パーこの答え、スコア> 5は、おそらく単純化されなければなりません。

のサンプル出力--min=3

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

オプションで、pylint-mccabeまたはpytest-mccabeなどを介して使用することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.