2011-10-06 14 views
11

Tôi đang sử dụng php undercontrol và báo cáo trình duyệt mã số lỗi index chuyện phiếm trên tất cả các setter/getter tức mã như thế nàyPHPUnit và chỉ số chuyện phiếm

public function getFoo() 
{ 
    return $this->_foo; 
} 

Các getter/setter được bao phủ bởi những kiểm tra đơn vị, mức độ phức tạp là không có gì vì không có/for/switch/foreach. vậy tại sao tôi có chỉ số CRAP là 1 cho mã đó ???

PS: tự trả lời bản thân có thể là do sự phức tạp là không, nhưng vấn đề chính của tôi là mỗi getter/setter tạo ra một cảnh báo vì chỉ mục CRAP như vậy là có anyway để nói với phpunit/php mã vùng phủ sóng để làm cho CRAP bằng 0 cho hàm có chỉ số phức tạp là 0.

+0

Chúng tôi đã chuyển từ phpUnderControl sang Jenkins. Nó có thể cấu hình và tích cực hơn trong quá trình phát triển, và có một mẫu dự án cho các dự án PHP. Nó cho phép bạn thiết lập các giá trị CRAP ngưỡng sẽ kích hoạt các cảnh báo và xây dựng các lỗi. –

Trả lời

22

Điểm số chuyện phiếm tối thiểu là 1, không phải 0. Điều này là do các thuật toán cho chuyện phiếm là

CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) 

và sự phức tạp cyclomatic tối thiểu (comp) giá trị cho một chức năng là một. Vì vậy, vấn đề không phải là trong phpunit, nhưng bất cứ điều gì đang gắn cờ một CRAP của 1 là một vấn đề.

Nói chung, bạn muốn đặt ngưỡng CRAP của bạn ở đâu đó khoảng 5, ở bất cứ đâu thấp hơn và bạn cũng có thể chỉ sử dụng một số liệu mã đơn giản (và bắn 100%) vì yếu tố phức tạp hầu như không nặng. > = 30 có nghĩa là không có số lượng kiểm tra nào có thể khiến phương thức của bạn không bị crappy.

Cyclomatic phức tạp có thể thường (nhưng có nhiều hơn một định nghĩa) được tay tính như sau:

  • thêm 1 điểm cho các cuộc gọi chức năng
  • thêm 1 điểm cho mỗi vòng lặp
  • thêm 1 điểm cho mỗi chi nhánh
+0

bạn là đúng, tối thiểu là 1 ... có vẻ là một lỗi của php_codebrowser làm nổi bật những dòng ngay cả khi họ là tốt. xem https://github.com/mayflowergmbh/PHP_CodeBrowser/issues/50 – RageZ

+0

Còn CRAP 12 cho lớp học với điểm số 3 cho ba phương pháp thì sao? (Tôi nghĩ đó là vì số lượng đường dẫn trả lại) – MrMesees

1

Đây có phải là cảnh báo không? Nói chung ngưỡng cho cảnh báo được đặt cao hơn nhiều so với 1 (có lẽ khoảng 30). Có một bài đăng SO tốt here cho biết số được tính như thế nào. Dường như có một vài giá trị mã hóa cứng trong thiết lập phpunit tôi cho chuyện phiếm của 30.

Theo Alberto Savoia, tác giả của chỉ số chuyện phiếm:

"crap (Change Phân tích rủi ro và dự đoán) Chỉ số này được thiết kế để phân tích và dự đoán số lượng nỗ lực, đau đớn và thời gian cần thiết để duy trì cơ thể mã hiện có. "

Số CRAP tối thiểu sẽ là độ phức tạp chu trình đối với mã có độ bao phủ 100%. Ý tưởng được rằng những thay đổi đối với mã phức tạp có nhiều khả năng tạo ra các vấn đề hơn là thay đổi mã đơn giản.

+0

thực sự nó là một thông báo nhưng khá khó chịu để có một thông báo trên mỗi getter đơn và setter – RageZ