2009-02-10 41 views
24

Có cách nào để đo lường mức độ phù hợp mã với DUnit không? Hay có công cụ miễn phí nào hoàn thành điều đó? Bạn sử dụng cái gì? Bạn thường đi bảo hiểm mã nào?Phạm vi mã đo tại Delphi

Jim McKeeth: Cảm ơn câu trả lời chi tiết. Tôi đang nói về thử nghiệm đơn vị theo nghĩa của phương pháp TDD, không chỉ về các xét nghiệm đơn vị sau khi xảy ra lỗi. Tôi quan tâm đến phạm vi mã tôi có thể đạt được với một số bài kiểm tra đơn vị viết sẵn cơ bản.

+0

Tôi chưa chấp nhận một trong các câu trả lời, vì tôi muốn khuyến khích mọi người viết ý kiến ​​của họ về kiểm tra đơn vị, công cụ họ sử dụng và mức độ phù hợp họ cố gắng đạt được. Vì vậy, tất cả mọi người, cảm thấy tự do để bình luận;) – jpfollenius

Trả lời

24

Tôi vừa tạo ra một dự án mã nguồn mở mới trên Google Code với một công cụ bảo hiểm mã cơ bản cho Delphi 2010. https://sourceforge.net/projects/delphicodecoverage/

Ngay bây giờ nó có thể đo vùng phủ sóng dòng nhưng tôi đang lập kế hoạch để thêm lớp học và phương pháp bảo hiểm quá .

Nó tạo ra các báo cáo html với bản tóm tắt cũng như nguồn được đánh dấu cho bạn thấy những dòng nào được bao phủ (màu xanh lá cây), không phải (màu đỏ) và phần còn lại của dòng không có bất kỳ mã nào được tạo cho chúng.

Cập nhật: Tính đến phiên bản 0.3 của Delphi Code Coverage bạn có thể tạo các báo cáo XML tương thích với các plugin Hudson EMMA để hiển thị xu hướng mã số bảo hiểm trong vòng Hudson.

Cập nhật: Version 0.5 mang lại sửa lỗi, tăng năng cấu hình và dọn dẹp các báo cáo

Cập nhật: Phiên bản 1.0 mang lại hỗ trợ cho đầu ra emma, độ bao phủ của các lớp học và các phương pháp và nội dung của file DLL và BPLs

+0

Công cụ rất đơn giản và hiệu quả. Thx để chia sẻ! – TridenT

+0

Chỉ cần một hoặc hai từ hỗ trợ cho Christer, công cụ này đã hữu ích và nhận được REALLY hữu ích. – Mmarquee

+3

Tôi đã tạo một trình hướng dẫn nhỏ để trợ giúp với dòng lệnh delphi-code-coverage. Xem http://code.google.com/p/delphi-code-coverage-wizard/ – TridenT

7

Bạn có đề cập đến phạm vi mã từ các bài kiểm tra đơn vị hoặc mã cũ? Nói chung tôi nghĩ rằng chỉ có thể kiểm tra mã có một thất bại nên được bao phủ với một bài kiểm tra đơn vị (có tôi nhận ra rằng có thể bắt đầu một cuộc chiến thánh thiện, nhưng đó là nơi tôi đứng). Vì vậy, đó sẽ là một tỷ lệ khá thấp.

Mặt khác, mã cũ hơn là một câu chuyện khác. Mã cũ là mã không được sử dụng. Bạn rất có thể không cần một công cụ để cho bạn biết điều này cho rất nhiều mã của bạn, chỉ cần tìm Blue Dots nhỏ sau khi bạn biên dịch trong Delphi. Bất cứ điều gì không có dấu chấm màu xanh là cũ. Nói chung nếu mã không được sử dụng thì nó sẽ bị loại bỏ. Vì vậy, đó sẽ là 100% mã vùng phủ sóng.

Có các trường hợp khác cho mã cũ, như nếu bạn có mã đặc biệt để xử lý nếu ngày đó đến ngày 31 tháng 2. Trình biên dịch không biết nó không thể xảy ra, do đó, nó biên dịch nó và cho nó một dấu chấm màu xanh. Bây giờ bạn có thể viết một bài kiểm tra đơn vị cho điều đó, và kiểm tra nó và nó có thể làm việc, nhưng sau đó bạn chỉ lãng phí thời gian của bạn lần thứ hai (đầu tiên để viết mã, thứ hai để kiểm tra nó).

Có các công cụ để theo dõi đường dẫn mã nào được sử dụng khi chương trình chạy, nhưng điều đó chỉ đáng tin cậy vì không phải tất cả các đường dẫn mã sẽ được sử dụng mọi lúc. Giống như mã đặc biệt bạn phải xử lý năm nhuận, nó sẽ chỉ chạy mỗi bốn năm. Vì vậy, nếu bạn lấy nó ra sau đó chương trình của bạn sẽ bị hỏng mỗi bốn năm.

Tôi đoán tôi đã không thực sự trả lời câu hỏi của bạn về DUnit và Bảo hiểm mã, nhưng tôi nghĩ tôi có thể đã để lại cho bạn nhiều câu hỏi hơn sau đó bạn bắt đầu. Bạn đang tìm kiếm loại mã bảo hiểm nào?

CẬP NHẬT: Nếu bạn đang sử dụng phương pháp TDD thì không có mã nào được viết cho đến khi bạn viết thử nghiệm, do đó bạn có 100 vùng phủ sóng thử nghiệm. Tất nhiên chỉ vì mỗi phương pháp được thực hiện bởi một bài kiểm tra không có nghĩa là toàn bộ phạm vi hành vi của nó được thực hiện. SmartInspect cung cấp một phương pháp thực sự dễ dàng để đo lường phương pháp nào được gọi cùng với thời gian, vv. Ít hơn AQTime, nhưng không miễn phí. Với một số công việc khác, bạn có thể thêm thiết bị để đo từng đường dẫn mã (các nhánh của câu lệnh "if", v.v.) Tất nhiên bạn cũng có thể thêm bản ghi của riêng mình vào các phương pháp để đạt được báo cáo bảo hiểm, và đó là miễn phí (tốt, mong đợi cho thời gian của bạn, mà có lẽ có giá trị hơn sau đó các công cụ). Nếu bạn sử dụng JEDI Debug thì bạn cũng có thể nhận được một ngăn xếp cuộc gọi.

TDD thực sự không thể dễ dàng được áp dụng hồi tố cho mã hiện tại mà không cần phải tái cấu trúc lại nhiều. Mặc dù IDE Delphi mới hơn có khả năng tạo ra các phần tử thử nghiệm đơn vị cho mỗi phương thức công khai, sau đó cung cấp cho bạn 100% phạm vi phủ sóng của các phương thức công khai của bạn. Những gì bạn đưa vào những cuống xác định mức độ bao phủ đó hiệu quả như thế nào.

+0

Cảm ơn. Tôi đã chỉnh sửa câu hỏi để làm rõ hơn ý tôi. – jpfollenius

+0

Tôi đã thêm một số chi tiết để trang trải TDD. –

+0

"... nhưng điều đó chỉ đáng tin cậy ... chương trình của bạn sẽ bị hỏng sau mỗi bốn năm". Đó là các thử nghiệm đơn vị trên mã mà (hiện tại) không có lỗi có thể giúp ngăn chặn mã bị xóa khi phạm vi mã chỉ chạy trên các năm không phải là bước nhảy vọt? :) Cá nhân tôi nghĩ rằng bất kỳ chức năng giao dịch với ngày nên được thực hiện trong các bài kiểm tra đơn vị với tất cả các loại ngày ivvy thông qua vào chúng. Tương tự áp dụng cho bất kỳ chức năng "cơ bản" nào đối phó với "các yếu tố môi trường". Bạn không muốn phụ thuộc vào thiết lập/ngày hiện tại của máy cho kết quả kiểm tra/bảo hiểm của bạn. –

11

Tôi không biết bất kỳ công cụ miễn phí nào. AQTime gần như là tiêu chuẩn defacto để lược tả Delphi. Tôi đã không sử dụng nó, nhưng một tìm kiếm nhanh chóng tìm thấy Discover for Delphi, mà bây giờ là mã nguồn mở, nhưng chỉ cần bảo hiểm mã.

Một trong hai công cụ này sẽ cung cấp cho bạn ý tưởng về mức độ bao phủ mã mà các thử nghiệm đơn vị của bạn đang nhận được.

+0

Khám phá cho Delphi bây giờ là mã nguồn mở https://sourceforge.net/projects/discoverd/ –

5

Tôi sử dụng Discover for Delphi và thực hiện công việc, để kiểm tra đơn vị với DUnit và kiểm tra chức năng với TestComplete.

Khám phá có thể được định cấu hình để chạy từ dòng lệnh để tự động hóa. Như trong:

Discover.exe Project.dpr -s -c -m 
+2

Khám phá tại đây http://sourceforge.net/projects/discoverd/ ngay bây giờ. – philnext

2

Khám phá các công trình tuyệt vời cho tôi. Nó hầu như không làm chậm ứng dụng của bạn, không giống như AQTime. Điều này có thể không phải là một vấn đề cho bạn anyway, tất nhiên. Tôi nghĩ rằng các phiên bản gần đây của AQTime hoạt động tốt hơn về mặt này.

1

Tôi đã sử dụng Discover "trong nhiều năm, đã hoạt động xuất sắc và bao gồm BDS2006 (phiên bản trước của XE * Delphi i được sử dụng và vẫn còn sử dụng), nhưng trạng thái mở ra hiện tại của nó, không rõ làm sao nó hoạt động với phiên bản XE * của Delphi. ame thực sự, bởi vì tôi yêu công cụ này, nhanh chóng và thuận tiện trong hầu như mọi cách. Vì vậy, bây giờ tôi đang di chuyển đến vùng phủ sóng delphi ...

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