Estou escrevendo um jogo e o mecanismo gráfico que acompanha o OpenGL em C ++. Também sou fã de bons processos de codificação e testes automatizados. O código gráfico + o teste parecem bastante imiscíveis, pois a saída geralmente é apenas visual ou muito orientada para o visual.
Por exemplo, imagine analisar o fluxo de imagem bruto processado na tela, byte a byte - você precisa comparar os dados de teste, o que é difícil de criar / obter, e geralmente as imagens renderizadas não são idênticas em um nível de bytes ao executar em momentos diferentes - pequenas alterações nos algoritmos prejudicarão completamente essa abordagem.
Estou pensando em criar uma suíte visual de teste de unidade, na qual eu possa renderizar diferentes cenas de teste, mostrando coisas como mapeamento de sombras, animação, etc etc etc. Como parte do CI, essas cenas serão renderizadas em um vídeo arquivo (ou possivelmente deixá-lo como um executável) com diferentes métricas. Isso ainda exigiria inspeção manual do arquivo de vídeo, mas, pelo menos, seria um pouco automatizado e padronizado.
O que você acha? Espero que haja maneiras melhores?
Respostas:
A biblioteca de processamento de imagem opencv faz isso salvando a imagem e comparando-a com uma imagem de referência - possui várias funções e macros de teste em c ++ para lidar com a correspondência aproximada de imagens, etc.
fonte
Sua estrutura de teste pode renderizar sua imagem de teste em um buffer, recuperar a imagem renderizada e compará-la com uma imagem de referência "dourada" que foi gerada anteriormente para esse fim.
Isso não funcionará tão bem nos casos em que não se espera que os resultados do seu teste permaneçam exatamente os mesmos. No entanto, você pode calcular a diferença ao quadrado das imagens de teste e de referência e compará-la com um limite.
Você também pode fornecer dados de log e verificação de desempenho, pois uma grande regressão no desempenho é outro modo de falha possível.
fonte
Mesmo que você não consiga comparar as imagens de saída, pelo menos você poderá testar se suas renderizações são concluídas adequadamente (sem falhas, longas esperas, etc.). Encontrar uma maneira de verificar as imagens é melhor, é claro, mas mesmo sem ela você terá ganho algo com os testes.
fonte