Sorunlu alanları belirlemek için Python kodunu nasıl analiz edebilirim?


99

Birden çok projeye bölünmüş büyük bir kaynak havuzum var. Kaynak kodun sağlığı hakkında, ele alınması gereken sorunlu alanları belirleyen bir rapor üretmek istiyorum.

Spesifik olarak, yüksek bir siklomatik karmaşıklığa sahip rutinleri çağırmak, tekrarı tanımlamak ve belki de şüpheli (ve dolayısıyla muhtemelen hatalı) yapıları tespit etmek için tiftik benzeri statik analizler çalıştırmak istiyorum.

Böyle bir raporu nasıl oluşturabilirim?

Yanıtlar:


36

Cyclomatic karmaşıklığı ölçmek için kullanılabilir güzel bir araç vardır traceback.org . Sayfa ayrıca sonuçların nasıl yorumlanacağına dair iyi bir genel bakış sunar.

Direk için +1 . Sonuçta siklomatik karmaşıklığı azaltmaya yardımcı olabilecek kodlama standartlarına ( PEP8 veya kendi kuruluşunuzun varyantı olabilir) bağlılığı doğrulamak için harikadır .


4
traceback.org bozuk bağlantı
denfromufa

Pylint harika ama yavaş. Ön itme kancası olarak kullanıyoruz, ancak düzenli kontroller ve ön işleme kancası için flake8 ve bir sürü eklenti kullanıyoruz. https://flakehell.readthedocs.io/config.htmlYürütme modeli çok daha sağlam ve yapılandırılabilir olduğu için bugünlerde aslında tavsiye ederim .
DylanYoung

29

Siklomatik karmaşıklık için şunları kullanabilirsiniz radon: https://github.com/rubik/radon

(Kullanım pipyüklemek için: pip install radon)

Ek olarak şu özelliklere de sahiptir:

  • ham metrikler (bunlar arasında SLOC, yorum satırları, boş satırlar ve c.)
  • Halstead metrikleri (tümü)
  • Sürdürülebilirlik Dizini (Visual Studio'da kullanılan)

Halstead ölçümlerini almanın anahtarı nedir?
Dima Tisnek

1
@qarma Dokümanları anlıyorsam, komut satırını kullanabileceğinizi sanmıyorum. Python API'yi kullanmanız gerekir.
Dave Halter


11

Yeni bir projeyi anlamanız gerektiğinde Pycana cazibe gibi çalışır!

PyCAna (Python Kod Analizcisi), kodunuzu çalıştırdıktan sonra bir sınıf diyagramı oluşturan python için basit bir kod analizcisinin süslü bir adıdır.

Nasıl çalıştığını görün: http://pycana.sourceforge.net/

çıktı:

alternatif metin




4

Benzer kod parçacıkları bulmanıza yardımcı olan CloneDigger adlı bir araç var .


1
Python 3 ile çalışmaz ve hiçbir zaman iyi korunmamıştır.
Acumenus

3

Siklomatik karmaşıklığı kontrol etmek için elbette mccabepaket var.

Kurulum:

$ pip install --upgrade mccabe

Kullanım:

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

Yukarıdaki 6 eşiğine dikkat edin. Başına bu cevap , puanlar> 5 muhtemelen basitleştirilmiş olmalıdır.

Örnek çıktı --min=3:

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

İsteğe bağlı olarak pylint-mccabe veya pytest-mccabe , vb. Aracılığıyla da kullanılabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.