Làm cách nào để phân tích mã Python để xác định các khu vực có vấn đề?


99

Tôi có một kho lưu trữ nguồn lớn được chia thành nhiều dự án. Tôi muốn tạo một báo cáo về tình trạng của mã nguồn, xác định các khu vực vấn đề cần được giải quyết.

Cụ thể, tôi muốn gọi ra các quy trình có độ phức tạp chu kỳ cao, xác định sự lặp lại và có thể chạy một số phân tích tĩnh giống như xơ vải để phát hiện các cấu trúc đáng ngờ (và do đó có thể là sai).

Làm thế nào tôi có thể bắt đầu xây dựng một báo cáo như vậy?

Câu trả lời:


36

Để đo độ phức tạp theo chu kỳ, có một công cụ tuyệt vời có sẵn tại traceback.org . Trang này cũng cung cấp một cái nhìn tổng quan tốt về cách giải thích kết quả.

+1 cho pylint . Nó rất tốt trong việc xác minh sự tuân thủ các tiêu chuẩn mã hóa (có thể là PEP8 hoặc biến thể của tổ chức bạn), cuối cùng có thể giúp giảm độ phức tạp theo chu kỳ.


4
traceback.org bị hỏng liên kết
denfromufa

Pylint rất tuyệt, nhưng chậm. Chúng tôi sử dụng như một hook đẩy trước, nhưng sử dụng flake8 và một loạt các plugin để kiểm tra thường xuyên và hook cam kết trước. Tuy nhiên, tôi thực sự khuyên bạn nên sử dụng https://flakehell.readthedocs.io/config.htmlnhững ngày này, vì mô hình thực thi của nó mạnh mẽ và có thể cấu hình hơn nhiều.
DylanYoung

29

Đối với độ phức tạp theo chu kỳ, bạn có thể sử dụng radon: https://github.com/rubik/radon

(Sử dụng pipđể cài đặt nó pip install radon:)

Ngoài ra, nó cũng có các tính năng sau:

  • các chỉ số thô (bao gồm SLOC, dòng nhận xét, dòng trống & c.)
  • Các chỉ số Halstead (tất cả chúng)
  • Chỉ số khả năng bảo trì (chỉ mục được sử dụng trong Visual Studio)

Công tắc để nhận các chỉ số Halstead là gì?
Dima Tisnek

1
@qarma Nếu tôi hiểu tài liệu, tôi không nghĩ bạn có thể sử dụng dòng lệnh. Bạn phải sử dụng API Python.
Dave Halter

18

Đối với phân tích tĩnh có pylintpychecker . Cá nhân tôi sử dụng pylint vì nó có vẻ toàn diện hơn pychecker.

Đối với độ phức tạp theo chu kỳ, bạn có thể thử chương trình perl này hoặc bài viết này giới thiệu một chương trình python để làm điều tương tự


11

Pycana hoạt động như một sự quyến rũ khi bạn cần hiểu một dự án mới!

PyCAna (Python Code Analyzer) là một cái tên ưa thích của một trình phân tích mã đơn giản dành cho python tạo ra một sơ đồ lớp sau khi thực thi mã của bạn.

Xem cách nó hoạt động: http://pycana.sourceforge.net/

đầu ra:

văn bản thay thế



6

Sử dụng flake8 , cung cấp phân tích độ phức tạp pep8, pyflakes và chu kỳ trong một công cụ


4

Có một công cụ tên là CloneDigger giúp bạn tìm các đoạn mã tương tự.


1
Nó không hoạt động với Python 3 và nó không bao giờ được duy trì tốt.
Acumenus

3

Để kiểm tra độ phức tạp theo chu kỳ, tất nhiên là có mccabegói.

Cài đặt:

$ pip install --upgrade mccabe

Sử dụng:

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

Lưu ý ngưỡng 6 ở trên. Mỗi câu trả lời này , điểm> 5 có lẽ nên được đơn giản hóa.

Đầu ra mẫu với --min=3:

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

Nó cũng có thể được tùy chọn sử dụng qua pylint-mccabe hoặc pytest-mccabe , v.v.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.