Tôi thấy rằng rất nhiều chương trình khoa học tính toán của tôi có các yêu cầu kiểm tra không được bao gồm trong các khung kiểm tra tiêu chuẩn:
Kiểm tra thời gian tính toán
- Để đảm bảo rằng các thuật toán không bị chậm hơn. Tôi có thể làm một cái gì đó tương tự
assureSmallerEqual(RuntimeWrapper(algorithm),53)
nhưng tôi muốn giảm ngưỡng 53 giây liên tục khi tôi đang làm việc với thuật toán, tức là một cái gì đó nhưassureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance')
- Để đảm bảo rằng các thuật toán không bị chậm hơn. Tôi có thể làm một cái gì đó tương tự
Kiểm tra năng suất
- Để chắc chắn rằng một thuật toán trước đây tìm thấy một xấp xỉ tốt cho một giải pháp phân tích vẫn tìm thấy một giải pháp ít nhất là tốt hoặc tốt hơn. Một lần nữa, đây có thể là một mô phỏng của một bài kiểm tra tích hợp tiêu chuẩn, nhưng tôi muốn dung sai thu nhỏ liên tục vì thuật toán ngày càng tốt hơn. Hãy nghĩ đến việc thay thế
assureAlmostEqual(foo(),1,places=3)
bằngassureAlmostEqual(foo(),1,places='previousbest')
- Để chắc chắn rằng một thuật toán trước đây tìm thấy một xấp xỉ tốt cho một giải pháp phân tích vẫn tìm thấy một giải pháp ít nhất là tốt hoặc tốt hơn. Một lần nữa, đây có thể là một mô phỏng của một bài kiểm tra tích hợp tiêu chuẩn, nhưng tôi muốn dung sai thu nhỏ liên tục vì thuật toán ngày càng tốt hơn. Hãy nghĩ đến việc thay thế
Kiểm tra yêu cầu vật lý
- Để đảm bảo rằng các thuật toán đột nhiên không cần thêm bộ nhớ / dung lượng đĩa cứng. Rất giống với 1.
Kiểm tra yêu cầu trừu tượng
- Để chắc chắn rằng một thuật toán hoạt động tốt với các xấp xỉ bậc hai không đột nhiên cần xấp xỉ bậc ba hoặc thuật toán hoạt động tốt với thời gian bước 0,1 không đột nhiên cần 0,01 cho sự ổn định. Một lần nữa, chúng có thể được mô phỏng bằng các thử nghiệm tích hợp tiêu chuẩn, nhưng mục tiêu là ghi nhớ tham số yêu cầu nhỏ nhất đã đạt được một mục tiêu nhất định, vì vậy điều này sẽ đòi hỏi rất nhiều cập nhật thủ công. Ví dụ: nếu
foo(10)
trước đây không có ngoại lệ, tôi muốn khung để đảm bảofoo(10)
vẫn hoạt động và cũng thử nếufoo(9)
bây giờ hoạt động (trong trường hợp đó tất cả các thử nghiệm trong tương lai sẽ đảm bảofoo(9)
vẫn hoạt động).
- Để chắc chắn rằng một thuật toán hoạt động tốt với các xấp xỉ bậc hai không đột nhiên cần xấp xỉ bậc ba hoặc thuật toán hoạt động tốt với thời gian bước 0,1 không đột nhiên cần 0,01 cho sự ổn định. Một lần nữa, chúng có thể được mô phỏng bằng các thử nghiệm tích hợp tiêu chuẩn, nhưng mục tiêu là ghi nhớ tham số yêu cầu nhỏ nhất đã đạt được một mục tiêu nhất định, vì vậy điều này sẽ đòi hỏi rất nhiều cập nhật thủ công. Ví dụ: nếu
Người ta có thể lập luận rằng những gì tôi yêu cầu không mô tả các thử nghiệm theo nghĩa của thử nghiệm đơn vị / tích hợp, ví dụ như thời gian chạy tăng, có thể được chấp nhận để đổi lấy các cải tiến khác.
Tuy nhiên, trong thực tế, tôi biết rằng tôi sẽ tiết kiệm được rất nhiều thời gian gỡ lỗi nếu tôi có chức năng kiểm tra ở trên, bởi vì trong 95% các trường hợp yêu cầu và hiệu suất bị lỗi do lỗi tôi đã giới thiệu. Thật vậy, tôi biết một thực tế là rất nhiều lỗi mà tôi đã tìm thấy (sau nhiều thời gian lãng phí khi kiểm tra mã của riêng tôi) với các thư viện phần mềm số bên ngoài có thể tránh được các thử nghiệm ở trên được áp dụng một cách nghiêm ngặt.
PS
Câu hỏi có tên tương tự /programming/34982863/framework-for-regression-testing-of-numerical-code không phải là một bản sao vì nó mô tả chức năng dễ dàng đạt được hơn với các khung kiểm tra hồi quy tiêu chuẩn.
Câu hỏi Chiến lược để thử nghiệm đơn vị và phát triển dựa trên thử nghiệm yêu cầu các chiến lược trái ngược với khung giúp triển khai chúng (và các chiến lược mà nó yêu cầu / được cung cấp trong các câu trả lời khác với những gì tôi mô tả ở đây, theo ý kiến của tôi).