Tôi thường xuyên viết các bài kiểm tra đơn vị để chứng minh rằng một số bộ mã là chuỗi an toàn. Thông thường, tôi viết các xét nghiệm này để đáp ứng với một lỗi tìm thấy trong sản xuất. Trong trường hợp này, mục đích của thử nghiệm là chứng minh rằng lỗi được nhân rộng (kiểm tra thất bại), và mã mới sửa vấn đề luồng (kiểm tra), và sau đó hoạt động như một bài kiểm tra hồi quy cho các bản phát hành trong tương lai.
Hầu hết các bài kiểm tra kiểm tra an toàn chủ đề tôi đã viết thử nghiệm một điều kiện chủng tộc thread, nhưng một số cũng kiểm tra cho deadlocks thread.
Kiểm tra đơn vị chủ động mã là an toàn chủ đề phức tạp hơn một chút. Không phải vì thử nghiệm đơn vị khó viết hơn, nhưng bởi vì bạn phải phân tích vững chắc để xác định (đoán, thực sự,) những gì có thể là chuỗi không an toàn. Nếu phân tích của bạn là chính xác, thì bạn sẽ có thể viết một bài kiểm tra thất bại cho đến khi bạn làm cho chuỗi mã an toàn.
Khi thử nghiệm cho một điều kiện chủ đề chủng tộc, kiểm tra của tôi hầu như luôn luôn theo cùng một khuôn mẫu: (đây là mã giả)
boolean failed = false;
int iterations = 100;
// threads interact with some object - either
Thread thread1 = new Thread(new ThreadStart(delegate() {
for (int i=0; i<iterations; i++) {
doSomething(); // call unsafe code
// check that object is not out of synch due to other thread
if (bad()) {
failed = true;
}
}
});
Thread thread2 = new Thread(new ThreadStart(delegate() {
for (int i=0; i<iterations; i++) {
doSomething(); // call unsafe code
// check that object is not out of synch due to other thread
if (bad()) {
failed = true;
}
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
Assert.IsFalse(failed, "code was thread safe");
Nguồn
2012-02-27 19:34:30
Nguyên tắc chung là bạn không thể sử dụng kiểm tra đơn vị để ** chứng minh ** mã đó an toàn chỉ hoặc không an toàn. –
@DavidHeffernan Ummmm ..... help! – Jon
Chủ yếu là bạn phải thực hiện loại xác minh này bằng cách lý luận về mã.Các loại thử nghiệm mà Marc mô tả rất hữu ích và mang lại nhiều lợi ích. Nhưng họ không đủ chứng minh điều gì. –