Dữ liệu kiểm tra có nên được kiểm tra vào kiểm soát phiên bản?


40

Tôi đang viết một số mã kiểm tra cho một tính năng xử lý tệp PDF. Ý tưởng cơ bản đằng sau các bài kiểm tra là tôi hướng chúng tới một số tệp PDF tôi đã chọn đặc biệt, họ xử lý chúng và tôi kiểm tra xem đầu ra có đúng như tôi mong đợi không.

Câu hỏi của tôi là: tôi nên lưu trữ những tệp PDF lớn này ở đâu? Tôi có nên kiểm tra chúng vào kiểm soát phiên bản cùng với mã không? Hoặc đặt chúng ở một nơi khác? Rõ ràng, mã kiểm tra là vô dụng nếu không có các tệp PDF (hoặc thậm chí với các tệp PDF khác nhau) nhưng vẫn đưa chúng vào kho lưu trữ của chúng tôi cảm thấy sai.



19
@ MichaelKjorling:Tests != Test Data
Robert Harvey

4
@RobertHarvey Đúng, nhưng nếu dữ liệu thử nghiệm được yêu cầu để thử nghiệm hoạt động, tôi cảm thấy nó nên được coi là một phần của thử nghiệm. Đó cũng là cách tiếp cận được thực hiện bởi cả ba câu trả lời cho đến nay, khi tôi hiểu chúng.
một CVn

Câu trả lời:


84

Hệ thống kiểm soát phiên bản của bạn nên chứa mọi thứ cần thiết để xây dựng, biên dịch, kiểm tra và đóng gói một ứng dụng để phân phối (ví dụ MSI, RPM). Tôi cũng sẽ tranh luận cấu hình xây dựng và các tập lệnh khác cũng nên được kiểm soát phiên bản.

Tôi sẽ có thể kiểm tra một dự án và có một môi trường biên dịch, xây dựng và kiểm thử hoàn chỉnh.

Có hai cách tiếp cận để kiểm tra dữ liệu thử nghiệm. Đầu tiên, bạn có thể tự kiểm tra dữ liệu thử nghiệm (PDF trong trường hợp này). Thứ hai, bạn có thể kiểm tra dữ liệu nguồn có thể được sử dụng để tạo dữ liệu thử nghiệm (nếu có). Đây có thể là tập lệnh SQL được tải vào cơ sở dữ liệu trống chứa dữ liệu kiểm tra hoặc có thể là tệp dựa trên văn bản có thể được biên dịch thành tệp PDF hoặc tệp khác.

Những người khác có thể không đồng ý với việc kiểm tra mọi thứ vào kiểm soát phiên bản, nhưng tôi nhận thấy trong kinh nghiệm chuyên môn của mình, điều quan trọng là đảm bảo một môi trường hoàn chỉnh có thể được xây dựng lại từ đầu.


20
Vâng. Hoàn toàn đồng ý. Đó là năm 2014, không có lý do nào để sử dụng kiểm soát sửa đổi mà không xử lý các tệp nhị phân một cách liền mạch.
Kilian Foth

4
Tôi đồng ý, nhưng bạn chắc chắn muốn tránh tình huống bạn đang kiểm tra các mặt hàng rác. Ví dụ: nếu dữ liệu thử nghiệm bao gồm thư mục "đầu ra" chứa tất cả các tệp pdf được tạo bởi các thử nghiệm, thì bạn sẽ không muốn đưa dữ liệu đó vào kho lưu trữ. Nhưng tôi đồng ý rằng các bài kiểm tra nên là một phần của repo cũng như bất kỳ gói nào cần thiết để chạy nó.
Kenneth Garza

1
@KennethGarza Thật sự không khó. Theo nguyên tắc thông thường, phải bao gồm mọi nội dung gốc (mã nguồn, mã nguồn thử nghiệm, dữ liệu thử nghiệm, phương tiện, tài liệu [thực], thư viện bên thứ ba, tập lệnh xây dựng, tập lệnh công cụ, tập lệnh chuyển đổi, v.v.) không nên tạo trong thời gian hợp lý từ dữ liệu gốc. Ngoài ra, với các kết quả đầu ra thử nghiệm, chúng có thể chỉ có ý nghĩa sau khi tự chạy thử nghiệm, nếu không, bạn không kiểm tra chương trình của mình, bạn đang kiểm tra khả năng của phần mềm VCS để bảo vệ tính toàn vẹn của các tệp của bạn :)
Thomas

1
@ MarnenLaibow-Koser: một dự án tôi đã thực hiện để phát hiện sự cố điện trong các máy tạo nhịp được cấy ghép có một bộ thử nghiệm hơn 40 GB. Không có một VCS nào tồn tại trong đó đối phó với điều đó không đáng ghét. Có hai repos là một rắc rối quản trị của riêng mình, nhưng đôi khi nó có thể là sự lựa chọn tốt hơn.
tên của

1
@ MarnenLaibow-Koser bạn đã nhận nó. Kiểm tra tích hợp nằm trong repo riêng và nếu người dùng muốn chạy cục bộ, quản lý phụ thuộc sẽ tìm nạp tệp zip cho anh ta và giải nén nó. Thông thường máy chủ / trang trại tích hợp liên tục được giao nhiệm vụ kiểm tra tích hợp và sẽ ngăn chặn tính năng hợp nhất nhánh cho đến khi kiểm tra tích hợp vượt qua.
dùng482745

15

Nếu các kiểm tra là vô ích nếu không có các tệp thiết lập mà bạn đã chuẩn bị, thì việc bao gồm các tệp trong VCS của bạn cùng với mã kiểm tra là điều hợp lý.

Mặc dù các tệp được sử dụng trong thử nghiệm không có mã, bạn có thể xem chúng như một phần phụ thuộc mà mã dựa vào. Vì vậy, có công trong việc giữ mọi thứ lại với nhau.


Như một đối trọng, một số VCS không xử lý tốt các tệp nhị phân lớn và một số khác có sự phản đối mạnh mẽ đối với bất kỳ loại tệp nhị phân nào trong một VCS. Nếu một trong những trường hợp đó áp dụng cho bạn, thì việc lưu trữ các tệp kiểm tra ở một vị trí nổi tiếng dễ truy cập cũng sẽ có ý nghĩa.

Tôi cũng sẽ xem xét đưa ra một nhận xét trong mã kiểm tra có nội dung "dựa vào foo.pdfđể chạy tất cả các bài kiểm tra."


Tôi không thấy có gì sai khi kiểm tra dữ liệu kiểm tra, nếu không tìm thấy thì cố lấy nó (ví dụ: từ một URL) và không thành công nếu không hoạt động. Dựa vào mạng là một ý tưởng tồi nó làm cho các bài kiểm tra chậm hơn và dễ vỡ hơn; nhưng cố gắng ít mong manh hơn không và tự động nhận (và lưu trữ cục bộ) dữ liệu đúng sẽ nhanh hơn đọc tài liệu / nhận xét thủ công, nhận dữ liệu và đặt nó vào vị trí.
Warbo

7

Nếu đó là dữ liệu tĩnh, thì có, hãy đặt nó trong kiểm soát phiên bản. Những tệp đó sẽ không thực sự thay đổi khi chúng được kiểm tra; họ sẽ bị xóa nếu chức năng đó không còn cần thiết hoặc các tệp thử nghiệm mới sẽ được thêm vào cùng. Dù bằng cách nào, bạn không cần phải lo lắng về sự khác biệt nhị phân nghèo chiếm không gian.

Nếu bạn đang tạo dữ liệu thử nghiệm, ví dụ: ngẫu nhiên, sau đó bạn nên tự động lưu nó khi kiểm tra thất bại, nhưng loại bỏ nó nếu không. Bất kỳ dữ liệu nào được lưu theo cách này nên được chuyển thành các bài kiểm tra hồi quy thông thường, để các trường hợp cạnh đó chắc chắn được kiểm tra trong tương lai thay vì dựa vào sự may mắn của trận hòa.


2
Nếu bạn đang tạo dữ liệu thử nghiệm một cách ngẫu nhiên, thì bạn thực sự nên ra ngoài và mua một cuốn sách về viết các bài kiểm tra tự động có thể lặp lại.
Dawood nói phục hồi lại

5
@DavidWallace Vì vậy, bạn đang nói toàn bộ các lĩnh vực như kiểm tra fuzz, kiểm tra tài sản và kiểm tra phần mềm thống kê không chỉ sai, mà còn có hại?
Warbo

5
@DavidWallace ngẫu nhiên! = Không thể thực hiện được.
congusbongus

5
@DavidWallace bạn có thể gọi nó là bất cứ điều gì bạn muốn sau đó. Dữ liệu thử nghiệm ngẫu nhiên, ghi lại đầu vào, tái chế nếu cần thiết, có thể tái tạo lại. Không dẫn đến một thế giới bị tổn thương.
congusbongus

2
@DavidWallace "thay vì dừng lại để suy nghĩ về trường hợp thử nghiệm nào thực sự cần thiết" không có nghĩa là "không thử nghiệm ngẫu nhiên", nó có nghĩa là "không chỉ thử nghiệm ngẫu nhiên". Đối với "bạn không thể sao chép dữ liệu tìm thấy lỗi", bạn đã thực sự đọc câu trả lời mà bạn đang bình luận chưa? ;)
Warbo

0

Chắc chắn bao gồm dữ liệu đó với các bài kiểm tra của bạn và mã ứng dụng chính của bạn. Nó giúp có một bộ kiểm tra được tổ chức thực sự tốt - vì vậy nếu bạn đang kiểm tra trích xuất pdf (và bạn có mã được đóng gói độc đáo) thì bạn có thể tạo đường dẫn đến dữ liệu thử nghiệm của mình, dựa trên đường dẫn đến mã ứng dụng - điều đó luôn làm việc cho tôi.

Với git, bạn có thể thiết lập .gitignore để ngăn chặn bất kỳ đầu ra tạm thời hoặc đăng nhập thử nghiệm gây ô nhiễm repo của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.