Làm thế nào bạn sẽ kiểm tra đơn vị hoặc thực hiện kiểm tra tự động hiệu quả nhất về mã đồ họa cho OpenGL?


17

Tôi đang viết một trò chơi và công cụ đồ họa đi kèm trên OpenGL trong C ++. Tôi cũng là một fan hâm mộ của quá trình mã hóa tốt và thử nghiệm tự động. Mã đồ họa + kiểm tra dường như khá bất khả xâm phạm, vì đầu ra thường chỉ trực quan hoặc rất nặng về định hướng trực quan.

Ví dụ, hãy tưởng tượng phân tích luồng hình ảnh thô được hiển thị theo từng byte màn hình - bạn cần dữ liệu thử nghiệm để so sánh, rất khó để tạo / thu được và thường các hình ảnh được hiển thị không giống nhau trên một mức byte khi chạy ở các thời điểm khác nhau - những thay đổi nhỏ trong thuật toán sẽ phá hỏng hoàn toàn phương pháp này.

Tôi đang nghĩ đến việc tạo ra một bộ thử nghiệm đơn vị trực quan, trong đó về cơ bản tôi có thể hiển thị các cảnh thử nghiệm khác nhau, hiển thị các nội dung như ánh xạ bóng, hoạt hình, v.v. Là một phần của CI, những cảnh này sau đó sẽ được hiển thị thành video tập tin (hoặc có thể để nó dưới dạng thực thi) với các số liệu khác nhau. Điều này vẫn sẽ yêu cầu kiểm tra thủ công tệp video, nhưng ít nhất nó sẽ được tự động hóa và chuẩn hóa.

Bạn nghĩ sao? Tôi hy vọng có những cách tốt hơn?


2
Đây là một câu hỏi hay, tôi tự hỏi liệu bạn có nhận được câu trả lời tốt hơn tại gamedev.stackexchange.com không vì có nhiều người đã xử lý vấn đề này trước đây.
Thất vọngWithFormsDesigner

3
Vì bạn sử dụng OpenGL, hãy xem xét nghiên cứu cách nhóm Khronos thực hiện kiểm tra sự phù hợp cho API này. Các đồng nghiệp trong dự án cũ của tôi đã xử lý nó nói với tôi rằng thử nghiệm đồ họa của Khronos gần hoàn hảo như nó đạt được
gnat

@FrustratedWithFormsDesigner Cảm ơn, tôi hoàn toàn quên mất gamedev.stackexchange ... Tôi đã tìm kiếm các lập trình viên khá kỹ lưỡng, nhưng không phải cái đó. Dường như hầu hết các câu trả lời về kiểm tra đơn vị ở đó tập trung vào những thứ thường được kiểm tra, vì vậy có lẽ đây không phải là một bản sao. Sẽ kiểm tra thêm một chút nữa, cảm ơn :)
Tối đa

Câu trả lời:


8

Thư viện xử lý hình ảnh opencv thực hiện điều đó bằng cách lưu hình ảnh và so sánh nó với hình ảnh tham chiếu - nó có một loạt các chức năng kiểm tra và macro c ++ để xử lý kết hợp hình ảnh gần đúng, v.v.


Tôi sẽ cố gắng tự kiểm tra sâu hơn, nhưng trang đó không nói gì về việc khớp hình ảnh gần đúng. Bạn có biết nếu nó sẽ làm việc để kiểm tra hồi quy trong trường hợp so sánh các khung? Sau đó, tôi có thể kiểm tra trực quan lần đầu tiên khi một cảnh được hiển thị, lưu ý nó như một tài liệu tham khảo. OpenCV có sẵn sàng cho các chức năng này không? : p
Tối đa

@max thường có phiên bản 'vàng' của chức năng kiểm tra tạo khung tham chiếu và được chạy một lần khi tạo thử nghiệm. Trong bản phân phối có một vài macro "so sánh hình ảnh thử nghiệm". Tôi không nghĩ có bất cứ điều gì cụ thể để đọc lại bộ đệm openGL cho một hình ảnh nhưng điều đó đủ dễ dàng
Martin Beckett

4

Khung thử nghiệm của bạn có thể hiển thị hình ảnh thử nghiệm của nó vào bộ đệm, truy xuất hình ảnh được hiển thị và so sánh nó với hình ảnh tham chiếu "vàng" đã được tạo trước đó cho mục đích đó.

Điều này sẽ không hoạt động tốt đối với trường hợp trong đó các kết quả thử nghiệm của bạn không được dự kiến sẽ vẫn chính xác như vậy. Tuy nhiên, bạn có thể tính toán sự khác biệt bình phương của hình ảnh thử nghiệm và tham chiếu và so sánh nó với ngưỡng.

Bạn cũng có thể muốn cung cấp để ghi nhật ký và kiểm tra dữ liệu hiệu suất, vì hồi quy chính trong hiệu suất là một chế độ thất bại có thể khác.


4

Ngay cả khi bạn không thể so sánh các hình ảnh đầu ra, ít nhất bạn sẽ có thể kiểm tra xem kết xuất của mình có hoàn thành phù hợp không (không gặp sự cố, chờ đợi lâu, v.v.). Tất nhiên, tìm cách kiểm tra hình ảnh sẽ tốt hơn, nhưng ngay cả khi không có nó, bạn sẽ đạt được điều gì đó từ các bài kiểm tra.


2
Chính xác: Tôi chuẩn bị trả lời một cái gì đó tương tự ("Ngay cả khi bạn có một bài kiểm tra đơn vị chỉ tạo ra tệp video một cách mù quáng và thực hiện một số bài kiểm tra tầm thường (ví dụ: có độ dài phù hợp, không hoàn toàn đen, không hoàn toàn trắng), nó có thể là đủ để bắt được nhiều lỗi hồi quy. Đặc biệt là các lỗi đơn giản khiến các hàm của bạn đưa ra một ngoại lệ. ") nhưng không cần câu trả lời tương tự thứ hai, vì vậy tôi để nó như một nhận xét ở đây.
user281377
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.