Bao nhiêu mã bảo hiểm là đủ 18 điểm?


37

Chúng tôi đang bắt đầu thúc đẩy bảo hiểm mã ở đây tại nơi làm việc của tôi và điều đó khiến tôi phải suy nghĩ .... Bao nhiêu mã là đủ?

Khi nào bạn đạt đến mức giảm lợi nhuận trên phạm vi bảo hiểm mã? Điểm ngọt ngào giữa bảo hiểm tốt và không đủ là gì? Nó có thay đổi theo loại dự án bạn đang thực hiện không (ví dụ WPF, WCF, Mobile, ASP.NET) (Đây là các lớp C # chúng tôi đang viết.)


Thực sự không có câu trả lời tốt cho điều này; " Bạn cần bao nhiêu Bảo hiểm Kiểm tra Đơn vị? " Trên diễn đàn Artima Developer có một số lời khuyên hữu ích.
RN01

Câu trả lời:


19

Chúng tôi nhắm đến ít nhất 70%. Trên những thứ dễ kiểm tra hơn (ví dụ, cấu trúc dữ liệu chức năng), chúng tôi nhắm tới 90% và hầu hết các cá nhân nhắm đến gần 100% nhất có thể. Trên những thứ liên quan đến WPF và các khung công tác khác rất khó kiểm tra, chúng tôi nhận được mức độ bao phủ thấp hơn nhiều (chỉ 70%).


WPF vốn đã khó kiểm tra, hoặc bạn chưa dành nỗ lực để vạch ra chiến lược tốt nhất để có được phạm vi bảo hiểm tốt hơn?
JBRWilkinson

Rất nhiều trong số đó bắt nguồn từ thực tế là đầu vào WPF khó giả mạo. Thử nghiệm của chúng tôi là đơn vị-y hoặc API-y như chúng tôi có thể có được và việc không thể giả mạo dễ dàng lớp "nằm trên cùng" của WPF (ít nhất là đầu vào) gây khó khăn cho việc kiểm tra. Đây không phải là một vấn đề lớn, vì các phần không phải GUI của API rất dễ kiểm tra, nhưng đó chỉ là đoạn cuối cùng đi từ mô hình của chúng tôi (hoặc mô hình xem) đến WPF là một thách thức.

1
Vâng, WPF là một bitch để kiểm tra. Và tôi có thể sống với điều đó nếu có thời gian biên dịch kiểm tra các ràng buộc trong các khung nhìn. Vì vậy, ít nhất bản dựng sẽ bị hỏng nếu bạn thay đổi thuộc tính mà chế độ xem liên kết. Nhưng nó không. Điều đó đã khiến chúng tôi sử dụng tự động hóa GUI trong các thử nghiệm chấp nhận của chúng tôi, đây cũng là một lỗi để viết. Nhưng ít nhất nó mang lại cho chúng tôi sự tự tin rằng hệ thống hoạt động.
Pete

Tôi thích con số (70%). Khi các nhóm của tôi trở nên cao hơn, tôi có xu hướng bắt đầu tìm kiếm các thử nghiệm về phạm vi bảo hiểm hơn là giá trị. Trên bình luận WPF, chúng tôi chỉ mới ở những ngày đầu. Có nghĩa là, chúng tôi không xây dựng / cấu trúc mã WPF để dễ kiểm tra. Mô hình giả giúp. Khi thiết kế mã, thiết kế nó có thể kiểm tra được. Và, vâng, tại thời điểm này có những ví dụ hạn chế nên bạn sẽ nghĩ về nó. Không khác gì nơi mà hầu hết các nhà phát triển là TDD lần đầu tiên được giới thiệu với họ chỉ là ít kinh nghiệm trong ngành.
Jim Rush

để cụ thể hơn WPF là một thử thách đơn vị , nếu bạn cần bảo hiểm lớn hơn vì một số lý do, cách dễ nhất để tăng mức độ bao phủ của các lớp WPF là với các bài kiểm tra UI / kiểm tra tích hợp được mã hóa
jk.

55

Tôi cho rằng chỉ riêng phạm vi bảo hiểm là một số liệu kém. Thật dễ dàng để tạo ra vô số các thử nghiệm vô dụng bao gồm mã, nhưng không kiểm tra đầy đủ đầu ra, hoặc không thử các trường hợp cạnh, chẳng hạn. Mã bao gồm chỉ có nghĩa là nó không ném ngoại lệ, không phải là nó đúng. Bạn cần kiểm tra chất lượng - số lượng không quan trọng.


8
Bảo hiểm mã phải là một trong những kết quả đầu ra của các thử nghiệm tự động được thực hiện trong hệ thống xây dựng tự động của bạn. Các xét nghiệm không kiểm tra đầu ra hầu như không có giá trị. Phạm vi bảo hiểm dưới ngưỡng cho biết các tính năng mới không có / không đủ kiểm tra. Nó không phải là một cái gì đó để đánh bại mọi người - nhưng chắc chắn nó có thể đánh dấu mã chưa được kiểm tra.
JBRWilkinson

3
Tôi thứ hai JBRWilkinson ở đây, mặc dù không phải là một chỉ số về mã tốt, phạm vi bảo hiểm mã có thể là một chỉ báo về việc thiếu các bài kiểm tra. Bằng cách này, các bài kiểm tra đơn vị của bạn cũng có thể cung cấp các số liệu khác, như các biện pháp hiệu suất, để bạn không bất ngờ khi một bản phát hành mới bị sập máy chủ dưới khối lượng công việc không mong muốn.
Matthieu M.

4
Tôi nghĩ rằng đây là một lựa chọn sai lầm. Các thử nghiệm chất lượng cao chỉ chạm vào một lượng nhỏ mã là các thước đo chất lượng tổng thể kém, cũng như các "thử nghiệm" chạm vào một lượng lớn mã nhưng không thực sự kiểm tra kết quả. Nói cách khác, hãy tưởng tượng một quy trình đảm bảo chất lượng cho những chiếc xe rất kỹ lưỡng trong việc kiểm tra bánh xe phía trước của người lái xe, nhưng không có phần nào khác của chiếc xe. Điều đó sẽ tệ theo cách tương tự như một quy trình QA mà chỉ là một anh chàng nhìn toàn bộ chiếc xe và nói "ừ, trông ổn."

38

"Đủ" là khi bạn có thể thay đổi mã của mình với sự tự tin rằng bạn không vi phạm bất cứ điều gì. Đối với một số dự án, có thể là 10%, đối với các dự án khác, nó có thể là 95%.

Nó gần như không bao giờ cao đến 100%. Tuy nhiên, đôi khi cố gắng để có được phạm vi bảo hiểm mã 100% có thể là một cách tuyệt vời để loại bỏ hành trình khỏi cơ sở mã. Đừng quên rằng có hai cách để tăng độ bao phủ mã - viết thêm các bài kiểm tra hoặc lấy mã ra. Nếu mã không được bảo hiểm vì khó kiểm tra, rất có thể bạn có thể đơn giản hóa hoặc cấu trúc lại để dễ kiểm tra hơn. Nếu nó quá mơ hồ để kiểm tra, thường có khả năng tốt là không có gì khác trong mã đang sử dụng nó.


24
"Thử cho đến khi nỗi sợ chuyển thành sự nhàm chán"
Brad Mace

2
Upvote cho các bình luận về việc loại bỏ mã. Tôi sử dụng các số liệu bảo hiểm mã cho tất cả thời gian (trong VS, nơi nó làm nổi bật các dòng không được bảo hiểm).

Trích dẫn tuyệt vời @bemace
jayraynet

14

Mã bảo hiểm tiếp cận 100% không có triệu chứng. Do đó, 5% cuối cùng đó có lẽ là nỗ lực nhiều hơn giá trị của nó, khi bạn bắt đầu đạt được lợi nhuận nhỏ đáng tiếc cho những nỗ lực đã bỏ ra.


7

Bảo hiểm là một số liệu để theo dõi, nhưng nó không phải là mục tiêu cuối cùng. Tôi đã thấy (và được thừa nhận bằng văn bản!) Rất nhiều mã bảo hiểm cao - bảo hiểm 100% (dĩ nhiên là TDD):

  • lỗi vẫn xuất hiện
  • thiết kế vẫn có thể kém
  • bạn thực sự có thể tự giết mình để bắn cho một số mục tiêu bảo hiểm tùy ý - chọn các trận đánh của bạn: p

Có một "Con đường của Testivus" entry mà tôi nghĩ là thích hợp để tham khảo ở đây :)


5

Chỉ 20% phần lớn mã sẽ chạy 80% thời gian . Phân tích phạm vi bảo hiểm mã không hữu ích trừ khi được ghép nối với biểu đồ cuộc gọi để xác định những gì cần kiểm tra nhất. Điều đó cho bạn biết trường hợp cạnh của bạn có khả năng là. Bạn có thể đưa ra 100 bài kiểm tra chỉ dành cho những trường hợp cạnh đó, chiếm chưa đến 5% mã thực tế.

Vì vậy, hãy đảm bảo bao gồm 100% trong số 20% xác định các đường dẫn quan trọng và ít nhất 50% phần còn lại (theo biểu đồ cuộc gọi). Điều này sẽ giúp bạn (khoảng) 70% - 75% tổng bảo hiểm, nhưng nó khác nhau.

Đừng đốt thời gian cố gắng để có được hơn 70% tổng bảo hiểm trong khi để lại các trường hợp quan trọng mà không cần kiểm tra.


Theo định nghĩa, các công cụ bao phủ mã tạo ra một biểu đồ cuộc gọi theo định nghĩa?
JBRWilkinson

4

Sử dụng bảo hiểm như một hướng dẫn để chỉ ra các khu vực không được thử nghiệm. Thay vì có một nhiệm vụ bảo hiểm, sẽ khôn ngoan hơn khi hiểu lý do mã không được bảo hiểm. Ghi lại một lý do cho sự thiếu hụt là kỷ luật tốt cho phép các rủi ro được cân bằng.

Đôi khi lý do ít hơn mong muốn 'ví dụ như hết thời gian' nhưng có thể ổn khi phát hành sớm. Tốt hơn là gắn cờ các khu vực để trở lại để tăng cường bảo hiểm sau này.

Tôi làm việc trên phần mềm chuyến bay quan trọng trong đó phạm vi bảo hiểm 100% được coi là phù hợp với các hệ thống không quan trọng. Đối với các hệ thống quan trọng hơn, chúng tôi kiểm tra phạm vi bảo hiểm chi nhánh / quyết định và sử dụng kỹ thuật gọi MC / DC đôi khi không đủ nghiêm ngặt.

Chúng tôi cũng phải đảm bảo rằng chúng tôi cũng đã bao gồm mã đối tượng.

Đó là sự cân bằng giữa rủi ro, trong trường hợp của chúng tôi rất cao, so với giá trị / chi phí. Một sự lựa chọn sáng suốt là cần thiết dựa trên nguy cơ bỏ sót một lỗi.


3

Khi bạn bắt đầu xem xét các thay đổi sẽ ảnh hưởng đến hiệu suất thời gian chạy, bảo mật, tính linh hoạt hoặc khả năng bảo trì để cho phép bảo hiểm nhiều mã hơn, đã đến lúc kết thúc nhiệm vụ để có thêm bảo hiểm mã.

Tôi có các dự án với điểm đó là 0% vì phạm vi bảo hiểm là không thể tính toán mà không làm tổn hại đến thiết kế và các dự án khác với tỷ lệ cao tới 92%.

Số liệu bảo hiểm mã chỉ hữu ích trong việc chỉ ra rằng bạn có thể đã bỏ lỡ một số bài kiểm tra. Họ không cho bạn biết gì về chất lượng bài kiểm tra của bạn.


2

Không gian phần mềm quan trọng yêu cầu bảo hiểm 100% tuyên bố.

Lúc đầu nó không có ý nghĩa gì. Mọi người đều biết rằng phạm vi kiểm tra đầy đủ không có nghĩa là mã được kiểm tra đầy đủ và không khó để có được phạm vi bảo hiểm 100% mà không thực sự kiểm tra ứng dụng.

Tuy nhiên, phạm vi bảo hiểm 100% là giới hạn thấp hơn: mặc dù phạm vi bảo hiểm 100% không phải là bằng chứng của phần mềm không có lỗi, nhưng chắc chắn rằng với phạm vi bảo hiểm ít hơn, mã không được kiểm tra đầy đủ và điều này đơn giản là không thể chấp nhận được đối với phần mềm quan trọng.


2

Tôi thực sự thích câu trả lời của @ RevBingo vì anh ấy gợi ý rằng cuộc đấu tranh hướng tới 100% có thể khiến bạn dọn dẹp hoặc xóa mã không sử dụng. Những gì tôi chưa thấy trong các câu trả lời khác là ý thức khi bạn cần bảo hiểm cao và khi bạn không. Tôi đã đâm sau khi bắt đầu này. Tôi nghĩ rằng việc thêm chi tiết vào biểu đồ như thế này sẽ là một việc theo đuổi hữu ích hơn là tìm một số bao phủ thử nghiệm phù hợp với tất cả các mã.

100%

Đối với API công khai, như Bộ sưu tập java.util, không được kết hợp với Cơ sở dữ liệu và không trả về HTML, tôi nghĩ rằng phạm vi bảo hiểm 100% là mục tiêu bắt đầu cao cả, ngay cả khi bạn giải quyết 90-95% do thời gian hoặc khác ràng buộc. Việc tăng phạm vi kiểm tra sau khi bạn là tính năng hoàn chỉnh buộc mức độ xem xét chi tiết hơn so với các loại đánh giá mã khác. Nếu API của bạn hoàn toàn phổ biến, mọi người sẽ sử dụng nó, phân lớp nó, giải nén nó, v.v. theo những cách bạn không thể mong đợi. Bạn không muốn trải nghiệm đầu tiên của họ là tìm lỗi, hoặc giám sát thiết kế!

90%

Đối với mã cơ sở hạ tầng kinh doanh, có cấu trúc dữ liệu và trả về cấu trúc dữ liệu, 100% vẫn có thể là mục tiêu khởi đầu tốt, nhưng nếu mã này không đủ công khai để mời nhiều người sử dụng sai, có thể 85% vẫn được chấp nhận?

75%

Đối với mã nhận và trả về Chuỗi, tôi nghĩ rằng kiểm thử đơn vị dễ vỡ hơn nhiều, nhưng vẫn có thể hữu ích trong nhiều tình huống.

50% hoặc ít hơn

Tôi ghét viết bài kiểm tra cho các hàm trả về HTML vì nó quá dễ vỡ. Điều gì xảy ra nếu ai đó thay đổi CSS, JavaScript hoặc toàn bộ blob HTML và tiếng Anh mà bạn trả lại không có ý nghĩa gì với người dùng cuối? Nếu bạn có thể tìm thấy một hàm sử dụng nhiều logic nghiệp vụ để tạo ra một ít HTML, thì điều này có thể đáng để thử nghiệm. Nhưng tình huống ngược lại có thể không đáng để thử nghiệm chút nào.

Gần 0%

Đối với một số mã, định nghĩa của "chính xác" là "có ý nghĩa với người dùng cuối." Có những bài kiểm tra phi truyền thống mà bạn có thể thực hiện đối với mã này như kiểm tra ngữ pháp tự động hoặc HTML xác thực đầu ra. Tôi thậm chí đã thiết lập các câu lệnh grep cho những mâu thuẫn nhỏ mà chúng ta thường gặp phải khi làm việc, như nói "Đăng nhập" khi phần còn lại của hệ thống gọi nó là "Đăng nhập". Người đàn ông này không hoàn toàn là một bài kiểm tra đơn vị, nhưng là một cách hữu ích để nắm bắt các vấn đề mà không mong đợi đầu ra cụ thể.

Cuối cùng, chỉ có một con người có thể đánh giá những gì hợp lý với con người. Kiểm tra đơn vị không thể giúp bạn ở đó. Đôi khi phải mất vài người để đánh giá chính xác.

Tuyệt đối 0%

Đây là một thể loại buồn và tôi cảm thấy như một người ít viết nó hơn. Nhưng trong bất kỳ dự án đủ lớn nào cũng có những lỗ thỏ có thể hút người trong nhiều tuần mà không mang lại lợi ích kinh doanh nào.

Tôi đã mua một cuốn sách bởi vì nó tuyên bố sẽ cho thấy cách tự động giả dữ liệu để thử nghiệm Hibernate. Nhưng nó chỉ kiểm tra các truy vấn HQL và Hibernate Hibernate. Nếu bạn phải thực hiện nhiều HQL và SQL, bạn thực sự không nhận được lợi thế của Hibernate. Có một dạng cơ sở dữ liệu trong bộ nhớ Hibernate, nhưng tôi đã không đầu tư thời gian để tìm ra cách sử dụng nó hiệu quả trong các thử nghiệm. Nếu tôi có hoạt động đó, tôi muốn có phạm vi kiểm tra cao (50% -100%) cho bất kỳ logic nghiệp vụ nào tính toán công cụ bằng cách điều hướng một biểu đồ đối tượng khiến Hibernate chạy một số truy vấn. Khả năng kiểm tra mã này của tôi là gần 0% ngay bây giờ và đó là một vấn đề. Vì vậy, tôi cải thiện phạm vi kiểm tra trong các lĩnh vực khác của dự án và cố gắng thích các chức năng thuần túy hơn các chức năng truy cập cơ sở dữ liệu, phần lớn là do việc viết các bài kiểm tra cho các chức năng đó dễ dàng hơn. Vẫn,


1

Tôi nghĩ rằng nó phụ thuộc vào một phần của ứng dụng bạn đang thử nghiệm. Ví dụ, đối với logic nghiệp vụ hoặc bất kỳ thành phần nào liên quan đến chuyển đổi dữ liệu phức tạp, tôi sẽ nhắm đến mức độ bao phủ 90% (càng cao càng tốt). Tôi thường tìm thấy các lỗi nhỏ nhưng nguy hiểm bằng cách chỉ kiểm tra càng nhiều mã càng tốt. Tôi thà tìm thấy những lỗi như vậy trong quá trình thử nghiệm hơn là để chúng xảy ra tại trang web của khách hàng một năm sau đó. Ngoài ra, một lợi ích của phạm vi bảo hiểm mã cao là nó ngăn mọi người thay đổi mã làm việc quá dễ dàng, vì các thử nghiệm phải được điều chỉnh tương ứng.

Mặt khác, tôi nghĩ có những thành phần mà phạm vi bảo hiểm mã ít phù hợp hơn. Ví dụ, khi kiểm tra GUI, sẽ rất tốn thời gian để viết một bài kiểm tra bao gồm tất cả các mã được thực thi khi nhấp vào nút để gửi sự kiện đến đúng thành phần. Tôi nghĩ trong trường hợp này sẽ hiệu quả hơn nhiều khi sử dụng phương pháp truyền thống để thực hiện kiểm tra thủ công, trong đó bạn chỉ cần nhấp vào nút và quan sát hành vi của chương trình (cửa sổ hộp thoại bên phải có mở ra không? ?).


0

Tôi không có ý kiến ​​cao về việc sử dụng phạm vi bảo hiểm mã làm thước đo để biết khi nào bộ thử nghiệm của bạn có đủ phạm vi bảo hiểm.

Lý do chính là vì nếu bạn có một quy trình mà trước tiên bạn viết một số mã, sau đó một số thử nghiệm, sau đó xem phạm vi bảo hiểm mã để khám phá nơi bạn đã bỏ lỡ một bài kiểm tra, thì đó là quá trình bạn cần cải thiện. Nếu bạn thực hiện TDD thực sự, thì bạn có phạm vi bảo hiểm mã 100% (phải thừa nhận rằng có một số điều không quan trọng mà tôi không kiểm tra). Nhưng nếu bạn nhìn vào phạm vi bảo hiểm mã để tìm ra những gì cần kiểm tra, thì bạn có thể sẽ viết các bài kiểm tra sai.

Vì vậy, điều duy nhất bạn có thể kết luận từ phạm vi bảo hiểm mã là nếu nó quá thấp, bạn không có đủ các bài kiểm tra. Nhưng nếu nó cao, không có gì đảm bảo rằng bạn có tất cả các bài kiểm tra đúng.

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.