Tôi không phải là kỹ sư phần mềm. Tôi là một sinh viên phd trong lĩnh vực khoa học địa chất.
Gần hai năm trước tôi bắt đầu lập trình một phần mềm khoa học. Tôi chưa bao giờ sử dụng tích hợp liên tục (CI), chủ yếu vì lúc đầu tôi không biết nó tồn tại và tôi là người duy nhất làm việc trên phần mềm này.
Bây giờ vì cơ sở của phần mềm đang chạy nên những người khác bắt đầu quan tâm đến nó và muốn đóng góp cho phần mềm. Kế hoạch là những người khác tại các trường đại học khác đang thực hiện bổ sung cho phần mềm cốt lõi. (Tôi sợ họ có thể giới thiệu lỗi). Ngoài ra, phần mềm trở nên khá phức tạp và ngày càng khó kiểm tra hơn và tôi cũng có kế hoạch tiếp tục làm việc với nó.
Vì hai lý do này, giờ đây tôi ngày càng suy nghĩ nhiều hơn về việc sử dụng CI. Vì tôi chưa bao giờ được đào tạo kỹ sư phần mềm và không có ai xung quanh tôi từng nghe về CI (chúng tôi là nhà khoa học, không có lập trình viên), tôi cảm thấy khó khăn khi bắt đầu dự án của mình.
Tôi có một vài câu hỏi mà tôi muốn nhận được một số lời khuyên:
Trước hết là một lời giải thích ngắn về cách thức hoạt động của phần mềm:
Phần mềm được kiểm soát bởi một tệp .xml chứa tất cả các cài đặt bắt buộc. Bạn khởi động phần mềm bằng cách chuyển đường dẫn đến tệp .xml làm đối số đầu vào và nó chạy và tạo một vài tệp có kết quả. Một lần chạy có thể mất ~ 30 giây.
Nó là một phần mềm khoa học. Hầu như tất cả các hàm đều có nhiều tham số đầu vào, có kiểu chủ yếu là các lớp khá phức tạp. Tôi có nhiều tệp .txt với các danh mục lớn được sử dụng để tạo các thể hiện của các lớp này.
Bây giờ hãy đến với câu hỏi của tôi:
kiểm tra đơn vị, kiểm tra tích hợp, kiểm tra đầu cuối? : Phần mềm của tôi hiện có khoảng 30.000 dòng mã với hàng trăm chức năng và ~ 80 lớp. Tôi cảm thấy lạ khi bắt đầu viết bài kiểm tra đơn vị cho hàng trăm chức năng đã được triển khai. Vì vậy, tôi nghĩ về việc đơn giản là tạo ra một số trường hợp thử nghiệm. Chuẩn bị 10-20 tệp .xml khác nhau và để phần mềm chạy. Tôi đoán đây là những gì được gọi là thử nghiệm đầu cuối? Tôi thường đọc rằng bạn không nên làm điều này, nhưng có lẽ nó vẫn ổn khi bắt đầu nếu bạn đã có một phần mềm hoạt động? Hoặc chỉ đơn giản là một ý tưởng ngu ngốc để cố gắng thêm CI vào một phần mềm đã hoạt động.
Làm thế nào để bạn viết kiểm tra đơn vị nếu các tham số chức năng khó tạo ra? giả sử tôi có một hàm
double fun(vector<Class_A> a, vector<Class_B>)
và thông thường, trước tiên tôi cần đọc nhiều tệp văn bản để tạo các đối tượng kiểuClass_A
vàClass_B
. Tôi nghĩ về việc tạo ra một số chức năng giả nhưClass_A create_dummy_object()
không đọc trong các tệp văn bản. Tôi cũng nghĩ về việc thực hiện một số loại tuần tự . (Tôi không có kế hoạch kiểm tra việc tạo các đối tượng lớp vì chúng chỉ phụ thuộc vào nhiều tệp văn bản)Làm thế nào để viết bài kiểm tra nếu kết quả rất cao? Phần mềm của tôi sử dụng các mô phỏng monte-carlo lớn và hoạt động lặp lại. Thông thường, bạn có ~ 1000 lần lặp và ở mỗi lần lặp, bạn đang tạo ~ 500-20.000 trường hợp đối tượng dựa trên mô phỏng monte-carlo. Nếu chỉ một kết quả của một lần lặp khác nhau một chút thì toàn bộ các lần lặp lại sắp tới là hoàn toàn khác nhau. Làm thế nào để bạn đối phó với tình huống này? Tôi đoán đây là một điểm lớn so với các bài kiểm tra đầu cuối, vì kết quả cuối cùng rất khác nhau?
Bất kỳ lời khuyên nào khác với CI đều được đánh giá cao.