C ++의 OpenGL 위에 게임과 함께 제공되는 그래픽 엔진을 작성하고 있습니다. 또한 우수한 코딩 프로세스와 자동화 된 테스트의 팬이기도합니다. 그래픽 코드 + 테스트는 출력이 시각적으로 만 보이거나 매우 시각적으로 지향되기 때문에 매우 비합리적입니다.
예를 들어, 바이트 단위로 화면에 렌더링되는 원시 이미지 스트림을 분석한다고 상상해보십시오. 비교할 테스트 데이터가 필요합니다. 생성 / 구현이 어렵고 렌더링 된 이미지가 동일하지 않은 경우가 많습니다. 다른 시간에 실행될 때 바이트 수준-알고리즘의 작은 변경으로 인해이 접근법이 완전히 망칠 수 있습니다.
기본적으로 다른 테스트 장면을 렌더링하고 그림자 매핑, 애니메이션 등을 표시 할 수있는 시각적 단위 테스트 스위트를 만들려고합니다. CI의 일부로 이러한 장면은 비디오로 렌더링됩니다. 다른 측정 항목을 가진 파일 (또는 실행 파일로 남겨 둘 수도 있음)입니다. 그래도 비디오 파일을 수동으로 검사해야하지만 다소 자동화되고 표준화되어야합니다.
어떻게 생각해? 더 좋은 방법이 있기를 바라고 있습니까?
답변
opencv 이미지 처리 라이브러리는 이미지를 저장하고 참조 이미지와 비교하여 수행합니다 . 근사한 이미지 일치 등을 처리 하는 많은 C ++ 테스트 함수와 매크로 가 있습니다.
답변
테스트 프레임 워크는 테스트 이미지를 버퍼로 렌더링하고 렌더링 된 이미지를 검색하여 해당 목적을 위해 이전에 생성 된 “골든”참조 이미지와 비교할 수 있습니다.
테스트 결과가 정확히 동일 하게 유지되지 않을 경우에는이 방법이 효과적이지 않습니다 . 그러나 테스트 및 참조 이미지의 제곱 차이를 계산하여 임계 값과 비교할 수 있습니다.
성능의 주요 회귀는 또 다른 가능한 실패 모드이므로 성능 데이터 로깅 및 확인을 제공 할 수도 있습니다.
답변
출력 이미지를 비교할 수 없더라도 최소한 렌더링이 적절하게 완료되는지 테스트 할 수 있습니다 (충돌, 대기 시간 등). 물론 이미지를 확인하는 방법을 찾는 것이 더 좋지만, 이미지가없는 경우에도 테스트에서 얻은 것이 있습니다.