2009-07-17 75 views
10

Trong khi độ phức tạp của chu trình là một số liệu đáng giá, tôi có xu hướng tìm nó là một công cụ nghèo để xác định khó duy trì mã. Đặc biệt, tôi có xu hướng tìm thấy nó chỉ làm nổi bật một số loại mã nhất định (ví dụ: trình phân tích cú pháp) và bỏ qua các sự cố đệ quy, luồng và ghép khó khăn cũng như nhiều mẫu chống đã được xác định.Các công cụ phân tích phức tạp mã vượt quá độ phức tạp của chu trình

Những công cụ nào khác có sẵn để xác định mã Java có vấn đề?

Lưu ý, chúng tôi đã sử dụng PMD và FindBugs mà tôi tin là rất tốt cho việc xác định vấn đề cấp phương pháp.

Trả lời

11

Kinh nghiệm của tôi là chỉ số quan trọng nhất khi nhìn vào mã bảo trì là:

  • Cyclomatic phức tạp, để xác định khối lượng lớn các mã mà có lẽ khó hiểu/sửa đổi.
  • Độ sâu làm tổ, để tìm các điểm tương tự (độ sâu làm tổ cao tự động là CC cao, nhưng không nhất thiết phải theo cách khác, vì vậy việc ghi điểm trên cả hai đều quan trọng để xem).
  • Hâm mộ vào/ra, để có cái nhìn tốt hơn về mối quan hệ giữa các phương pháp/lớp và tầm quan trọng thực tế của các phương pháp riêng lẻ.

Khi kiểm tra mã được viết bởi những người khác, thường hữu ích khi bao gồm các kỹ thuật động.Đơn giản chỉ cần chạy các kịch bản sử dụng phổ biến thông qua một công cụ bảo hiểm/code profiler để khám phá:

  • Mã được thực sự thực hiện rất nhiều (các hồ sơ là rất tốt cho điều này, chỉ cần bỏ qua các thông tin thời gian và nhìn vào số lượng hit thay vì).
  • Phạm vi mã là rất tốt để tìm (gần như) mã chết. Để ngăn không cho bạn đầu tư thời gian vào mã tái cấu trúc mà hiếm khi được thực thi.

Các nghi phạm thông thường, chẳng hạn như bất kỳ công cụ lập trình, mã hóa và số liệu thường sẽ giúp bạn nhận dữ liệu cần thiết để thực hiện các đánh giá này.

0

Các công cụ phân tích tĩnh mà bạn đã sử dụng là khá chuẩn. Nếu bạn đang sử dụng Eclipse, hãy thử tìm kiếm here để biết thêm các công cụ phân tích mã.

Emma cung cấp phân tích phạm vi mã, mặc dù điều này thực sự là để thử nghiệm.

6

Google Testability Explorer kiểm tra ví dụ cho người độc thân và những thứ tĩnh khác có mùi hôi trong thiết kế. Metrics là một plugin Eclipse để đo lường hầu như mọi số liệu mã được biết đến với nhân loại. Tôi đã sử dụng và có thể dễ dàng giới thiệu cả hai.

+1

1 cho Số liệu ... –

4

Sonar cố gắng xác định "điểm nóng" về độ phức tạp và tính bảo trì kết hợp các kết quả của nhiều công cụ nguồn mở khác nhau (bao gồm PMD và Findbugs). Nó tích hợp tốt với các máy chủ Maven và CI (đặc biệt là Hudson).

EDIT bởi extraneon

Có một trang web Sonar available nơi rất nhiều các dự án mã nguồn mở được phân tích. Tôi nghĩ rằng điều này cho thấy khá tốt bao nhiêu quy tắc được áp dụng, và bao xa đi sâu xuống. Bạn cũng có thể vô hiệu hóa các quy tắc mà bạn không thấy thú vị.

Here là giải thích về số liệu.

0

Công cụ này NDepend cho mã .NET sẽ cho phép bạn phân tích nhiều khía cạnh của sự phức tạp mã bao gồm các số liệu mã như: Cyclomatic phức tạp, sâu làm tổ, thiếu sự gắn kết của phương pháp, Bảo hiểm bằng cách thử nghiệm ...

. ..bao gồm phân tích phụ thuộc và bao gồm Code Rules over LINQ Queries (CQLinq) dành riêng để hỏi, điều phức tạp trong mã của tôi là gì và viết quy tắc. Khoảng 200 default Code Rules được cung cấp. Họ lo ngại chống các mẫu như các Singleton, phát hiện threading problems, phát hiện các vấn đề về khớp nối như UI layer shouldn't use directly DB types ...

Một khi trở lại, tôi đã viết một bài báo để tóm tắt một vài khía cạnh của mã phức tạp: Fighting Fabricated Complexity

+0

Cảm ơn bạn. Nó trông giống như một sản phẩm tốt. Bạn đã mua bất kỳ nhà cung cấp hoặc đội nào khác để áp dụng CQL và xây dựng nó cho các ngôn ngữ khác? –

+0

Jim, thực ra chúng tôi đã phát hành Mã truy vấn và Quy tắc trên LINQ (CQLinq) mạnh hơn nhiều so với CQL. Cho đến nay chúng tôi là nhà cung cấp duy nhất để đề xuất một cái gì đó như CQLinq. Đó là kết quả của một nỗ lực rất lớn của nghiên cứu và phát triển và chúng tôi coi nó như là trưởng thành để sử dụng trong thế giới thực. –

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