2008-09-19 16 views
96

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 ra một báo cáo về sức khỏe của mã nguồn, xác định các lĩnh vực vấn đề cần được giải quyết. Cụ thể, tôi muốn gọi ra các thói quen với độ phức tạp chu trình cao, xác định sự lặp lại, và có lẽ chạy một số phân tích tĩnh giống như lint để phát hiện các cấu trúc đáng ngờ (và do đó có khả năng sai).Làm cách nào để phân tích mã Python để xác định các khu vực có vấn đề?

Tôi làm cách nào để xây dựng báo cáo như vậy?

Trả lời

33

Để đo độ phức tạp của chu trình, 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 diễn giải kết quả.

+1 cho pylint. Thật tuyệt vời khi 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 của bạn), mà cuối cùng có thể giúp giảm độ phức tạp của chu trình.

+3

traceback.org bị phá vỡ liên kết – denfromufa

17

Để 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 so với pychecker.

Đối cyclomatic phức tạp bạn có thể thử this perl program, hoặc article này trong đó giới thiệu một chương trình python cũng làm như vậy

6

Nhờ Pydev, bạn có thể integrate pylint trong Eclipse IDE thực sự dễ dàng và có được một báo cáo mã đi theo thời gian giúp bạn tiết kiệm sửa đổi tập tin.

4

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

+0

Nó không làm việc với Python 3 và nó không bao giờ được duy trì tốt . –

26

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

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

Bên cạnh đó nó cũng có các tính năng:

  • số liệu thô (bao gồm các SLOC, dòng bình luận, dòng trống, & c.)
  • số liệu Halstead (tất cả trong số họ)
  • Bảo trì Index (một trong những sử dụng trong Visual Studio)
+0

Chuyển đổi để nhận số liệu Halstead là gì? –

+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. –

+0

Nó có một dòng lệnh – Chris

4

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

0

Để kiểm tra độ phức tạp của chu trình, tất nhiên là có gói mccabe.

Cài đặt:

$ pip install --upgrade mccabe 

Cách sử dụng:

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

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

Mẫu đầu ra 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ể tùy chọn được sử dụng qua pylint-mccabe vv

Các vấn đề liên quan