2009-06-05 35 views
15

Bạn có lời khuyên nào về cách kiểm tra ứng dụng đa luồng không?Cách kiểm tra an toàn chủ đề

Tôi biết, lỗi luồng rất khó nắm bắt và chúng có thể xảy ra bất kỳ lúc nào - hoặc hoàn toàn không xảy ra. Các thử nghiệm rất khó và kết quả không bao giờ chắc chắn. Chắc chắn nó là tốt nhất để cẩn thận thiết kế và chương trình các mô-đun đồng thời.
Tuy nhiên - tôi không muốn bỏ qua khía cạnh thử nghiệm. Vì vậy, chạy rất nhiều chủ đề được tất cả làm việc trên cùng một mục có thể gọi lỗi luồng, đôi khi.

Bất kỳ ý tưởng hay phương pháp hay nhất nào để đạt được tỷ lệ lỗi ẩn cao về lỗi ẩn?
(Tôi đang sử dụng .Net/C#)

+0

đây là một câu hỏi tương tự: http://stackoverflow.com/questions/111676/unit-testing-a-multithreaded-application –

+0

cảm ơn, tôi đã có một nhìn xung quanh, nhưng không tìm thấy cái này. – tanascius

+0

Rất tiếc, nhận xét trùng lặp. –

Trả lời

11

Bạn có thể sử dụng một số công cụ tốt để kiểm tra tất cả các vấn đề luồng như Dữ liệu chủng tộc, deadlocks, chủ đề bị ngừng, vv intel-thread-checker là một trong những công cụ tốt.

Bạn cũng có thể thử, CHESS bởi Microsoft Research

+0

Cảm ơn các liên kết - Tôi hiện đang xem CHESS - các ví dụ trông rất hứa hẹn – tanascius

+1

CHESS chắc chắn là cách để đi, xem video trên http://channel9.msdn.com/ cũng –

5

Hãy thử tăng số lượng chuỗi lên số lớn nếu có thể, thậm chí vượt quá số lượng chuỗi sẽ được sử dụng trong bản phát hành. Với rất nhiều chủ đề chạy chương trình của bạn, một lỗi sẽ xuất hiện thường xuyên hơn vì nhiều luồng hơn đang chạy trên mã.

Kiểm tra lại các khai báo, khóa, mở khóa, đếm semaphore, v.v. và đảm bảo chúng có ý nghĩa.

Tạo tài liệu hoặc bảng tính thử nghiệm và sử dụng kiến ​​thức về mã của bạn, suy nghĩ về nơi có thể xảy ra tình trạng đua hoặc deadlocks.

Lấy một số người từ hành lang và thực hiện 'kiểm tra khả năng sử dụng hành lang' (Joel trên Phần mềm nói rằng tôi nghĩ?). Nói chung, những người không biết chương trình của bạn làm gì/có thể sẽ dễ dàng phá vỡ nó.

2

Câu hỏi hay. Tôi thường kiểm tra các điều kiện chủng tộc bằng cách sinh sản nhiều đề tài và cho phép họ thực hiện một cách dữ dội các hoạt động mà tôi nghi ngờ có thể phải tuân theo các điều kiện chủng tộc.

Có thể bạn có thể xem PNUnit - mặc dù nó có thể hơi khác so với những gì bạn đang tìm kiếm. Các tác giả nói rằng họ xây dựng nó bởi vì "chúng tôi cần phải mô phỏng hàng trăm khách hàng trên cùng một máy chủ".

-1

mã grep để thực hiện các cuộc gọi đến các luồng thông thường. Nếu bất kỳ được tìm thấy, không kiểm tra, như mã của bạn có lỗi đa luồng.

Nếu nó qua, hãy mở rộng tìm kiếm của bạn đến các phần của thư viện bạn sử dụng, cho đến khi nó không thành công hoặc (không chắc) đã được chứng minh là an toàn chỉ (tức là một luồng).

Khi bạn biết mình có lỗi luồng, phần thử nghiệm của công việc được thực hiện. Tất cả những gì còn lại là vấn đề nhỏ trong việc tìm và loại bỏ chúng ...