Construímos um número substancial de testes de unidade para o nosso programa principal ao longo dos anos. Vários milhares. O problema é que não temos uma ideia clara de quais testes temos, porque existem muitos. E isso é um problema, porque não sabemos onde somos fracos nos testes (ou onde temos duplicatas).
Nosso aplicativo é um mecanismo de relatórios. Assim, você pode ter um modelo usado para testar a análise (lemos todas as propriedades da tabela), mesclando dados (mantivemos as propriedades corretas da tabela na mesclagem), formatando a página final (a tabela é colocada corretamente na página) ) e / ou o formato de saída (o arquivo DOCX criado está correto).
Adicione a isso o que precisamos testar. Pegue o preenchimento em torno de uma célula da tabela (usamos Word, Excel e PowerPoint para o design do relatório). Temos que testar o preenchimento na quebra de página, para uma tabela dentro de uma célula, células mescladas verticalmente, células mescladas horizontalmente, uma célula mesclada vertical e horizontalmente que contém uma tabela com células mescladas vertical e horizontalmente na tabela interna, onde essa tabela quebra em uma página.
Então, em que categoria esse teste entra? Preenchimento de tabela, quebras de página, células aninhadas, células mescladas verticalmente, células mescladas horizontalmente ou algo mais?
E como documentamos essas categorias, nomeamos os testes de unidade etc.?
Atualização: várias pessoas sugeriram o uso de ferramentas de cobertura para verificar se temos cobertura total. Infelizmente, isso é de uso limitado no nosso caso, porque os bugs tendem a ser devidos a combinações específicas, por isso é o código que foi todo testado, mas não nessa combinação.
Por exemplo, ontem tivemos um cliente que iniciou um marcador do Word no final de um loop forEach em seu modelo (um documento do Word) e o finalizou no início do próximo loop forEach. Todo esse código foi usado com testes de unidade, mas não tínhamos pensado na combinação de um modelo expandindo um início de marcador para ser iniciado 25 vezes e depois terminado 10 vezes (os dois loops forEach tinham um número diferente de linhas).