ฉันจะวิเคราะห์โค้ด Python เพื่อระบุพื้นที่ที่มีปัญหาได้อย่างไร


99

ฉันมีที่เก็บซอร์สขนาดใหญ่ที่แบ่งออกเป็นหลายโปรเจ็กต์ ฉันต้องการจัดทำรายงานเกี่ยวกับความสมบูรณ์ของซอร์สโค้ดโดยระบุประเด็นปัญหาที่ต้องได้รับการแก้ไข

โดยเฉพาะอย่างยิ่งฉันต้องการเรียกกิจวัตรที่มีความซับซ้อนของวัฏจักรสูงระบุการทำซ้ำและอาจเรียกใช้การวิเคราะห์แบบคงที่คล้ายขุยเพื่อตรวจหาโครงสร้างที่น่าสงสัย (และมีแนวโน้มที่จะผิดพลาด)

ฉันจะสร้างรายงานดังกล่าวได้อย่างไร

คำตอบ:


36

สำหรับการวัดความซับซ้อน cyclomatic มีเครื่องมือที่ดีที่มีอยู่ในtraceback.org หน้านี้ยังให้ภาพรวมที่ดีเกี่ยวกับวิธีตีความผลลัพธ์

+1 สำหรับไพลินท์ การตรวจสอบการปฏิบัติตามมาตรฐานการเข้ารหัสเป็นสิ่งที่ยอดเยี่ยม (ไม่ว่าจะเป็นPEP8หรือตัวแปรขององค์กรของคุณเอง) ซึ่งในท้ายที่สุดจะช่วยลดความซับซ้อนของวัฏจักรได้


4
traceback.org ลิงค์เสีย
denfromufa

Pylint ดีมาก แต่ช้า เราใช้เป็น pre-push hook แต่ใช้ flake8 และปลั๊กอินจำนวนมากสำหรับการตรวจสอบปกติและ pre -mit hook ฉันขอแนะนำhttps://flakehell.readthedocs.io/config.htmlวันนี้จริงๆเนื่องจากรูปแบบการดำเนินการนั้นมีประสิทธิภาพและกำหนดค่าได้มากกว่า
DylanYoung

29

สำหรับความซับซ้อนของวัฏจักรคุณสามารถใช้radon: https://github.com/rubik/radon

(การใช้งานpipการติดตั้ง: pip install radon)

นอกจากนี้ยังมีคุณสมบัติเหล่านี้:

  • เมตริกดิบ (รวมถึง SLOC, บรรทัดความคิดเห็น, บรรทัดว่างและ c.)
  • เมตริก Halstead (ทั้งหมด)
  • ดัชนีการบำรุงรักษา (ดัชนีที่ใช้ใน Visual Studio)

สวิตช์รับเมตริก Halstead คืออะไร
Dima Tisnek

1
@qarma ถ้าฉันเข้าใจเอกสารฉันไม่คิดว่าคุณจะใช้บรรทัดคำสั่งได้ คุณต้องใช้ Python API
Dave Halter

18

สำหรับการวิเคราะห์แบบคงที่มีไพลินท์และไพล็อต โดยส่วนตัวแล้วฉันใช้ pylint เพราะดูเหมือนจะครอบคลุมมากกว่า pychecker

สำหรับความซับซ้อนของวัฏจักรคุณสามารถลองใช้โปรแกรม perl นี้หรือบทความนี้ซึ่งแนะนำโปรแกรม python ให้ทำเช่นเดียวกัน


11

Pycana ทำงานได้อย่างมีเสน่ห์เมื่อคุณต้องทำความเข้าใจกับโปรเจ็กต์ใหม่!

PyCAna (Python Code Analyzer) เป็นชื่อแฟนซีสำหรับตัววิเคราะห์โค้ดอย่างง่ายสำหรับ python ที่สร้างคลาสไดอะแกรมหลังจากเรียกใช้โค้ดของคุณ

ดูวิธีการทำงาน: http://pycana.sourceforge.net/

เอาต์พุต:

ข้อความแสดงแทน





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.