Tôi đã có một chút kinh nghiệm với kiểm thử đơn vị trước đây, trong cái mà tôi gọi (không phải là một cách miệt thị) dự án kỹ thuật phần mềm cổ điển: một MVC, với GUI người dùng, cơ sở dữ liệu, logic nghiệp vụ ở lớp giữa, v.v ... Bây giờ tôi Tôi đang viết một thư viện máy tính khoa học bằng C # (vâng, tôi biết C # quá chậm, sử dụng C, không phát minh lại bánh xe, và tất cả những thứ đó, nhưng chúng tôi có rất nhiều người làm tính toán khoa học trong khoa của tôi trong C #, và chúng tôi sắp xếp cần nó). Đó là một dự án nhỏ, về ngành công nghiệp phát triển phần mềm, bởi vì tôi tự mình viết nó, và thỉnh thoảng có sự giúp đỡ của một vài đồng nghiệp. Ngoài ra, tôi không được trả tiền cho nó, và quan trọng nhất, là một dự án học thuật. Ý tôi là, tôi hy vọng nó sẽ có chất lượng chuyên nghiệp một ngày nào đó, bởi vì tôi đang lên kế hoạch phát triển nguồn mở,
Dù sao, dự án đang trở nên lớn (khoảng 18.000 dòng mã, mà tôi nghĩ là lớn cho dự án của một người), và nó nằm ngoài tầm tay của tôi. Tôi đang sử dụng git để kiểm soát nguồn và tôi nghĩ rằng tôi đã ổn, nhưng tôi đang thử nghiệm như trường cũ, ý tôi là, viết các ứng dụng bảng điều khiển đầy đủ kiểm tra một phần lớn của hệ thống, chủ yếu là vì tôi không biết làm thế nào để thực hiện kiểm tra đơn vị trong kịch bản này, mặc dù tôi cảm thấy đó là điều tôi nên làm. Vấn đề là thư viện chứa hầu hết các thuật toán, ví dụ: thuật toán đồ thị, bộ phân loại, bộ giải số, phân phối ngẫu nhiên, v.v. Tôi chỉ không biết cách chỉ định các trường hợp thử nghiệm nhỏ cho mỗi thuật toán này, và vì nhiều trong số chúng là stochastic Tôi không biết làm thế nào để xác nhận tính đúng đắn. Ví dụ, để phân loại, một số số liệu như độ chính xác và thu hồi, nhưng các số liệu này tốt hơn để so sánh hai thuật toán hơn là đánh giá một thuật toán đơn lẻ. Vì vậy, làm thế nào tôi có thể xác định tính chính xác ở đây?
Cuối cùng cũng có vấn đề về hiệu suất. Tôi biết một loạt các thử nghiệm khác nhau, nhưng hiệu suất là một trong những tính năng quan trọng của một công cụ khoa học, thay vì sự hài lòng của người dùng hoặc các số liệu kỹ thuật phần mềm khác.
Một trong những vấn đề lớn nhất của tôi là với cấu trúc dữ liệu. Thử nghiệm duy nhất tôi có thể đưa ra cho cây kd là một bài kiểm tra căng thẳng: chèn nhiều vectơ ngẫu nhiên và sau đó thực hiện nhiều truy vấn ngẫu nhiên, và so sánh với tìm kiếm tuyến tính ngây thơ. Tương tự cho hiệu suất. Và với tối ưu hóa số, tôi có các chức năng điểm chuẩn mà tôi có thể kiểm tra, nhưng một lần nữa, đây là một bài kiểm tra căng thẳng. Tôi không nghĩ những bài kiểm tra này có thể được phân loại là bài kiểm tra đơn vị và quan trọng nhất là chạy liên tục, vì hầu hết chúng đều khá nặng. Nhưng tôi cũng nghĩ rằng những thử nghiệm này cần phải được thực hiện, tôi không thể chỉ chèn hai yếu tố, bật gốc và vâng, nó hoạt động cho trường hợp 0-1-n.
Vì vậy, cái gì, nếu có, là phương pháp thử nghiệm (đơn vị) cho loại phần mềm này? Và làm cách nào để tổ chức các bài kiểm tra đơn vị và các bài kiểm tra nặng xung quanh chu trình tích hợp mã-xây dựng-cam kết?