2012-02-28 21 views
6

Tôi khá mới để thử nghiệm đơn vị nhưng tôi hoàn toàn có ý tưởng thử nghiệm các đơn vị mã riêng lẻ thực hiện một nhiệm vụ cụ thể, có thể kiểm tra, tuy nhiên, tôi đang ở vị trí mà tôi cần phải viết các bài kiểm tra và cung cấp độ tin cậy về độ chính xác của đầu ra của một phương thức hoạt động trên một đối tượng có trên 50 thuộc tính. Sự kết hợp của các giá trị của các thuộc tính này tạo ra một đầu ra dựa trên các quy tắc được tiêm từ một đối tượng định nghĩa quy tắc (sử dụng các biểu thức lambda) mà về cơ bản tương đương với một tỷ lệ phần trăm. Các tỷ lệ phần trăm đầu ra là "nhiệm vụ quan trọng" và đã được thử nghiệm khá lười biếng trước đây, ví dụ chất lượng của lớp định nghĩa quy tắc (làm tất cả tỷ lệ phần trăm có thể quy cho mỗi quy tắc thêm lên đến 100%) nhưng các thuộc tính thực tế của đối tượng chưa đã.Tư vấn thử nghiệm đơn vị trên một đối tượng có nhiều thuộc tính

Đối tượng "dữ liệu" đến từ cơ sở dữ liệu nhưng tôi có thể, tất nhiên, giả lập nó. Vấn đề của tôi là số hoán vị của dữ liệu cần mocking và số lượng test cần phải được viết để đảm bảo dữ liệu x, y, z (số lần 50 số mũ lẻ) cảm thấy gần như không thể.

Vì vậy, câu hỏi đặt ra là, các tình huống này có thể kiểm chứng theo nghĩa thực sự như thế nào. Các thử nghiệm kịch bản có dựa trên trạng thái "đúng" đã biết và các kết quả "chính xác" thậm chí có thể/hợp lý không? Là các bài kiểm tra đơn vị áp dụng trong trường hợp này và nếu không có lựa chọn thay thế nào.

Nhân tiện, đây là mã kế thừa ở đây với cơ hội nhỏ để tái cấu trúc nhưng chỉ khi tôi có thể đảm bảo độ chính xác v.v. trong khoảng thời gian vài ngày để thực hiện cả công cụ sửa và kiểm tra!

+1

Rất tiếc - bạn có thể tin được viết trên iPhone của mình không? Damn bạn văn bản tiên đoán. Sẽ sắp xếp ngữ pháp ra khi tôi có một bàn phím thực ở phía trước nếu tôi :) –

+2

@ S.Lott Chúng tôi cũng có thể cố gắng không để được hậu môn về lỗi chính tả, phải không? Ở đó, tôi đã sửa nó. ;) – weltraumpirat

+1

Ouch dude, quá khắc nghiệt IMHO –

Trả lời

4

Tôi nghĩ rằng bạn đã đưa ra một nửa số câu trả lời của bạn mình:

Sự kết hợp của các giá trị của các tài sản sản xuất một sản lượng dựa trên các quy tắc tiêm từ một đối tượng định nghĩa quy tắc (sử dụng lambda biểu) về cơ bản tương đương với tỷ lệ phần trăm.

Trong thử nghiệm đơn vị hiện tại của bạn, bạn sẽ là chế nhạo cả dữ liệu và quy tắc. Do đó, bạn chỉ cần đảm bảo rằng các phương thức in và output hoạt động chính xác.

Kiểm tra quy tắc là một tác vụ khác. Tôi chỉ có thể đoán, nhưng thông thường, bạn sẽ có một bảng Excel, hoặc một cái gì đó như thế, các giá trị trong và đầu ra có thể để xác định các yêu cầu cho quy tắc này. Tôi sẽ chuyển đổi bảng đó thành định dạng có thể đọc được (csv) và sử dụng nó trực tiếp để lái thử kiểm tra đơn vị của quy tắc.

2

Vâng, tôi không biết bạn đang làm việc ở ngôn ngữ nào, nhưng sau khi xem hồ sơ của bạn, tôi nghĩ .Net có thể liên quan.

Nếu tôi đúng với điều này, tôi khuyên bạn nên sử dụng Kiểm tra Driven dữ liệu. MSDN cung cấp một Quick Start ngắn, đã giúp tôi rất nhiều để xúc xắc trong: How to: Create a Data-Driven Unit Test Vì tôi đọc bài viết này tôi bắt đầu phát minh ra một biến thể mới để sử dụng trong mọi dự án mới ...

Làm việc với các DDT trong Visual Studio cho phép bạn lưu trữ dữ liệu thử nghiệm XML, CSV của bạn hoặc trong một bảng cơ sở dữ liệu. Có lẽ bạn có thể viết một số mã để tạo ra các giá trị cần thiết để chèn vào các bài kiểm tra?

Lời khuyên thứ hai là dự án Pex and Moles của Microsoft phân tích hệ thống của bạn đang được kiểm tra và trên cơ sở này tự động tạo dữ liệu thử nghiệm để tìm thêm trường hợp kiểm tra cực đoan.

3

Nếu đó là số tiền tuyệt đối của các kết hợp đang giữ bạn trở lại khi cố gắng tạo testcases, bạn có thể xem qua số all-pair kiểm tra.

Chúng tôi đã sử dụng PICT từ microsoft để giảm thiểu tối đa số lượng testcases trong khi vẫn có sự tự tin hợp lý để có nhiều trường hợp nhất.

Tóm tắt

Ví dụ, nếu bạn muốn tạo một bộ kiểm tra cho phân vùng và tạo khối lượng, tên miền có thể được mô tả bởi các thông số sau: Type, Size, Hệ thống tập tin, định dạng phương pháp, Kích thước cụm và Nén. Mỗi tham số có một số giới hạn các giá trị có thể, mỗi giá trị được xác định theo tính chất của nó (ví dụ: Nén chỉ có thể Bật hoặc Tắt) hoặc dưới dạng phân đoạn tương đương (chẳng hạn như Kích thước).

Loại: Tiểu học, logic, Độc thân, Span, Stripe, Mirror, RAID-5
Kích thước: 10, 100, 500, 1000, 5000, 10000, 40000
phương pháp Format: nhanh, chậm
hệ thống file : FAT, FAT32, NTFS
cụm kích thước: 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536
Compression: bật, tắt

có hơn 4.700 tổ hợp có thể có của các giá trị. Nó sẽ là rất khó khăn để kiểm tra tất cả chúng trong một khoảng thời gian hợp lý. Nghiên cứu cho thấy rằng việc kiểm tra tất cả các cặp giá trị có thể cung cấp rất mức độ phù hợp tốt và số lượng trường hợp kiểm tra sẽ vẫn có thể quản lý được. Đối với ví dụ , {Chính, FAT} là một cặp và {10, chậm} là một cặp khác; a trường hợp thử nghiệm đơn lẻ có thể bao gồm nhiều cặp.

Đối với tập hợp các thông số được hiển thị ở trên, PICT sẽ tạo 60 thử nghiệm trường hợp.

điểm Takeaway

  • có hơn 4.700 tổ hợp có thể
  • PICT sẽ sản xuất 60 testcases

Tất cả các cặp

Lý do đằng sau việc kiểm tra tất cả các cặp là điều này: các lỗi đơn giản nhất trong chương trình thường được kích hoạt bởi tham số đầu vào đơn .

Phạm trù đơn giản nhất tiếp theo của lỗi bao gồm những phụ thuộc vào sự tương tác giữa cặp thông số, có thể bị bắt với thử nghiệm tất cả các cặp.

Bugs liên quan đến sự tương tác giữa ba hoặc các thông số hơn là dần ít phổ biến, trong khi đồng thời là dần đắt hơn để tìm thấy bằng cách thấu đáo thử nghiệm, trong đó có như giới hạn của nó là kiểm tra toàn diện của tất cả các thể đầu vào.

+0

Không chắc chắn rằng điều này là chính xác, những gì các câu hỏi đã được yêu cầu, nhưng một ** rất ** ngắn gọn và hữu ích câu trả lời không ít hơn. Một lời giải thích tuyệt vời của tất cả các cặp thử nghiệm và lợi ích của nó là gì. – mklauber

+0

@mklauber - OP tuyên bố rằng * 'Vấn đề của tôi là số lượng hoán vị' * vì vậy tôi giả định Tất cả các bài kiểm tra Cặp sẽ có liên quan đến OP. –

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