2009-06-09 40 views
13

Tôi chỉ tò mò về loại số liệu mã người đang sử dụng và ý kiến ​​/ kinh nghiệm về việc sử dụng hiệu quả nhất các chỉ số mã. Tất cả các mã của chúng tôi, bất kể ngôn ngữ, sử dụng như sau:Số liệu mã số

  • Cyclomatic Mã Phức tạp
  • Ngành Mã
  • nối (có ý nghĩa khác nhau cho các ngôn ngữ OO hơn bằng các ngôn ngữ thủ tục và khuôn mẫu)

Các biện pháp phức tạp đã được hiệu quả nhất đối với chúng tôi trong việc xác định cơn ác mộng bảo trì tiềm năng. Ở mức độ thấp hơn, LOC cũng hữu ích như một thước đo tương đối (nếu chúng ta thấy một lớp học có thêm 20 dòng so với lớp trung bình.) Khớp nối ít hữu ích hơn, thường hữu ích nhất khi xem chúng ta có thể phá vỡ với một sự thay đổi.

Tôi muốn biết những gì người khác đang sử dụng (nếu có) cho số liệu mã và ý kiến ​​về các số liệu được liệt kê ở trên.

Trả lời

2

Công ty hiện tại của tôi không thực sự giữ bất kỳ chỉ số mã nào, không phải là lựa chọn của tôi.

Chủ nhân cũ của tôi đã lưu giữ các chỉ số về độ phức tạp của mã và các dòng mã. Chúng cũng có giới hạn về độ dài của các tệp lớp. Các lớp học quá lớn đã phải trải qua quá trình đánh giá mã để chúng có thể được chia thành các lớp nhỏ hơn phù hợp hơn. Đó là một nỗi đau ở mông vào những thời điểm, nhưng nó giữ một cơ sở nguồn rất lớn (100 - 200 nhà phát triển đã được dự án) khá duy trì.

0
  • Lint
  • Cyclomatic phức tạp
  • Thật không may, chút khác
2

Chúng tôi hiện đang làm bảo hiểm thử nghiệm với EMMA như một plugin maven. Nó khá trơn. Nó sẽ cho bạn biết chính xác bao nhiêu mã của bạn được thực hiện bởi các bài kiểm tra của bạn. Chúng tôi sử dụng JUnit để kiểm tra.

0

Tôi thường xuyên sử dụng tài sản của Dave Wheeler cho LoC và cũng đã thử CCCC, mặc dù hiện tại nó đã có một chút.

0

Tại Bell, chúng tôi đã tính Điểm chức năng trên mọi dự án (xem IFPUG).

Điều tốt: họ đã xây dựng cơ sở dữ liệu khá lớn về chi phí của dự án.

Nhược điểm: nó không được làm việc càng sớm càng một cái gì đó mới được giới thiệu - và kể từ khoa học máy tính đang phát triển rất nhanh, hầu như mỗi lần một cái gì đó mới ...

Kết luận: chỉ số này là khá tốt trong liên tục môi trường. Nhưng nếu bạn thay đổi một số tham số, chúng có phần vô dụng.

Sylvain.

0

Tôi đã thử nghiệm với Metrics plugin for Eclipse from StateOfFlow và tôi nhận được ý tưởng về việc phân tích chất lượng mã của mình.Tất nhiên, không phải tất cả các số liệu đều quá rõ ràng đối với tôi hoặc hữu ích, nhưng từ nhiều chỉ số khác nhau mà plugin cung cấp (hiện tại là 14, theo số của tôi), tôi có xu hướng thực hiện những điều này một cách nghiêm túc:

Chỉ số phương pháp: Độ phức tạp của Cyclomatic | Số báo cáo | Số lượng người dân địa phương trong phạm vi | Số lượng các cấp

Số liệu lớp: Số trường | phương pháp gia quyền mỗi lớp

Để giảm danh sách này hơn nữa, tôi thực sự tin vào Cyclomatic phức tạp biện pháp McCabe và tôi tìm số báo cáo cũng là một dấu hiệu cho thấy khá hữu ích của công việc quá nhiều đang được thực hiện ở một nơi.

Trong số các chỉ số còn lại được cung cấp bởi plugin, tôi tìm thấy số liệu từ số Thiếu sự gắn kết theo phương pháp nhóm khá khó hiểu. Hôm nay, tôi bắt đầu với một thử nghiệm nhỏ của riêng mình và sau một vài giờ mã hóa tôi bật hỗ trợ Metrics cho dự án. 6/7 vấn đề được tìm thấy có liên quan đến sự gắn kết, một vấn đề đặc biệt đáng ngạc nhiên: Thiếu sự gắn kết trong phương pháp (Tổng tương quan) là 209%.

Tôi thấy khó làm bất cứ điều gì về những điều này: Chidamber và Kemerer | Henderson-Người bán | Tổng tương quan | Cặp đôi trường không liên quan. Tôi rất cám dỗ để tăng tối đa cho phép đối với các số liệu này, vì vậy chúng sẽ ngừng xuất hiện dưới dạng Cảnh báo.

Tôi nghĩ rằng việc tính toán chỉ số mã được cung cấp một cách nhanh chóng cung cấp hướng dẫn hữu ích để viết mã tốt hơn. Tôi rất vui vì bạn đã đặt câu hỏi này, vì tôi muốn đọc thêm về cách những người khác đang sử dụng các chỉ số để cải thiện chất lượng mã.

Nhân tiện, tôi sẽ hoan nghênh mọi đề xuất của các plugin (Eclipse) khác mà bạn có thể có kinh nghiệm. Một từ StateOfFlow cung cấp một cách tốt để xuất thông tin số liệu dưới dạng các trang HTML có biểu đồ và bảng và cũng có thể xuất chỉ số sang tệp CSV mà bạn có thể nạp vào bất kỳ tiện ích nào khác mà bạn có thể đang sử dụng. Tôi đang tận hưởng plugin cho đến thời điểm này :)

+0

Dưới đây là tóm tắt tốt đẹp: http://www.ibm.com/developerworks/java/library/j-ap01117/index.html # N10228 Sử dụng số liệu của anh.sourceforge.org (không phải eclipse-metrics.sourceforge.org). Cả hai plugin dường như bổ sung cho nhau, nhưng không phải là cùng AFAIK. – user77115

11

Bạn nhận được những gì bạn đo.

Vì vậy, hãy chọn số liệu của bạn một cách cẩn thận. Đo điều sai sẽ cho bạn điều sai trái. Không phải tất cả các mục tiêu có thể được đo trực tiếp, do đó bạn sẽ phải giải quyết cho một proxy hy vọng tương quan với mục tiêu.


Về dự án mới nhất tôi đã hoàn thành, tôi đo như sau. Đây là tất cả các chỉ số mã không chính xác nhưng chỉ số dự án cấp cao hơn. Tôi nghĩ nó vẫn liên quan đến câu hỏi này.

  • Daily xây dựng tỷ lệ thất bại (với phân tích nguyên nhân gốc rễ cho thất bại), nhắm mục tiêu < 20%
  • Testing chạy/vượt qua tỷ lệ (cả tự động và kiểm tra sổ tay), các mục tiêu khác nhau cho mỗi giai đoạn của dự án; ở mục tiêu tỷ lệ chạy cuối 100%, tỷ lệ vượt qua 95%
  • Chức năng thử nghiệm và phạm vi quyết định cho mã mới (không phải UI, không kế thừa, không được chuyển), nhắm mục tiêu 100% cho hàm API, 80% cho các chức năng khác, 50 % cho các quyết định
  • Lỗi mở tính theo mức độ ưu tiên, mục tiêu để xem đường cong phẳng hoặc giảm (khả năng sửa lỗi nhóm), không có lỗi ưu tiên mở cao
  • Kiểm tra: Kích thước thành phần, nỗ lực kiểm tra ; nhắm mục tiêu để có được một loại lỗi/nỗ lực/phương pháp đo lường heuristic để đảm bảo các thành phần được kiểm tra kỹ lưỡng
  • Các công cụ phân tích tĩnh như lint và một số công cụ cụ thể theo miền, các vấn đề ưu tiên cao được sửa hoặc hiểu
  • so với thực tế cho mỗi lần chạy nước rút, mục tiêu giảm lỗi ước tính xuống dưới 20%

Các số liệu này được lấy từ các mục tiêu cấp cao hơn mà chúng tôi có như một dự án. Tóm lại, vận chuyển một sản phẩm đủ tốt càng sớm càng tốt mà không phải chịu quá nhiều nợ kỹ thuật.

Hầu hết các vấn đề "chỉ số mã" đã được kiểm tra một cách không chính thức như là một phần của quá trình kiểm tra. Chúng tôi đã có một cảm giác khá tốt về hệ thống nên chúng tôi biết nơi mà những phần phức tạp nhất đòi hỏi sự chú ý nhất. Là những người lập trình, chúng tôi cũng có thể phát hiện mùi phức tạp mà không cần đến các biện pháp chính thức.

0

Essential Cyclometric Complexity là một điều thú vị cũng như nó đưa ra chỉ báo về cách 'không có cấu trúc' mã.

Mã không có cấu trúc là sử dụng ngắt và gotos ví dụ để thoát cấu trúc điều khiển chẳng hạn như đối với vòng lặp.

Tuy nhiên, sản phẩm duy nhất tôi biết về điều đó mang lại cho số liệu này là McCabe IQ

+0

* Độ phức tạp Cyclometric thiết yếu của bạn * liên kết tới ** 403 Forbidden ** – Wolf

2

Tôi tìm thấy số liệu Type Rank và Chỉ số mã phương thức cực kỳ hữu ích khi bạn cần có tổng quan nhanh về các loại/phương pháp chính trong mã của bạn. Loại và phương pháp xếp hạng được lấy cảm hứng từ nổi tiếng Google Page rank algorithm.

Nếu bạn đang ở trong một môi trường .NET, NDepend sẽ tính toán Loại Rank và Phương pháp Rank cho bạn (cũng như 80 số liệu mã khác)

+0

Interes + 1ng, bạn có biết các chỉ số * Loại Rank * và * Method Rank * có sẵn với các công cụ khác sau đó NDepend không? – Wolf

1

Có một số tài liệu khá khoa học về vấn đề này. Một cuộc khảo sát có thể được tìm thấy trong Nachiappan Naggapan's thesis (Xin lỗi, tôi không thể tìm thấy quyền truy cập tốt hơn vào luận án). Một bản trình bày khác về số liệu phần mềm là here.

Tôi đã biết về một số chỉ số, như chỉ số lưu lượng thông tin của Henry và Kafura, sau khi tôi chạy CCCC gần đây trên cơ sở mã C++. CCCC là nguồn mở và xuất ra một đầu ra toàn diện (sample) bao gồm 2-3 chỉ số khác nhau.