Vamos esclarecer as prioridades primeiro ...
No seu papel de cliente, sua principal preocupação não é o teste de unidade
Se você estiver usando fornecedores que produzem software para você, não deverá se preocupar se eles estão usando uma metodologia ou outra. Sua aposta é adquirir algum tipo de solução que ajude a alcançar seus objetivos. A única coisa com que você deve se preocupar é se essa solução é aceitável ou não. É por isso que temos testes de aceitação , pois é de sua responsabilidade garantir que você obtenha o que deseja. É no momento crucial da aceitação do cliente que o dinheiro será transacionado dos bolsos da sua empresa para o bolso do fornecedor.
Você pode exigir testes de unidade como requisito de entrega, mas há vários problemas herdados com eles, o mais grave é que não há uma maneira segura de determinar previamente as métricas:
- Qual é a quantidade aceitável de testes de unidade?
Deve haver 10 testes? Como cerca de 100 testes? Como cerca de 1000 testes? Na verdade, é bastante difícil determinar no início quantos testes serão necessários. O número real é indeterminável, realmente ... como o problema de parada ... mas não estamos resolvendo esse problema.
Você só quer um software com testes de unidade para poder continuar o desenvolvimento. Os testes de unidade não informam o que você quebrou ainda, mas são incrivelmente adequados para informar quando o código tem um erro de regressão.
- O que é um nível aceitável de cobertura de código?
"100%, é claro!" você pensaria. Infelizmente essa métrica é enganosa; mesmo se você tivesse 100% de cobertura de código, tem certeza de que tudo está funcionando conforme o esperado? É possível ter 100% de cobertura, mas isso não é feito.
O que você realmente precisa fazer é o teste exploratório, ou seja, encontre alguém que seja realmente bom em quebrar coisas e deixe-o fazer o teste. Para encontrar os bugs que nenhum desenvolvedor sequer pensou.
Além disso, às vezes 100% é inatingível com testes de unidade puros, se você tiver alguns hacks de desempenho necessários e usar padrões de design difíceis de testar (pesquise "singleton" e "tdd" em seu mecanismo de pesquisa favorito e você encontrará alguns exemplos).
Você deseja que o software entregue funcione e o documento de especificação é sua única garantia.
Você precisará de um nível mais alto de teste
Seu documento de especificação deve ser verificado de alguma forma. Cada ponto deve ser discutido com seus fornecedores, com metas e critérios de aceitação claros. Uma organização de controle de qualidade que funcione bem (ou um testador impressionante, se você estiver com um orçamento e um escopo limitado) forneceria os casos de teste para verificar esses critérios de aceitação. Você também precisa de alguém para verificar esses critérios de aceitação.
Existem várias maneiras de verificar seus objetivos e, se alguém me disser que você não pode definir metas de qualidade, desempenho e eficiência sãs, acertarei em cheio com livros grandes e pesados sobre testes exploratórios, de desempenho e de usabilidade, respectivamente. Pode ser fácil exagerar nos objetivos, mas o conhecimento e a comunicação o ajudarão a estabelecer objetivos realistas.
Não sou advogado, mas a maioria dos contratos de projeto (que é basicamente a mãe de todas as especificações do projeto) que li geralmente possui um critério de taxa de defeitos que estipula quantos bugs são considerados aceitáveis. Os erros são geralmente determinados por gravidade, os erros de interrupção encontrados pelo controle de qualidade têm uma tolerância baixa, enquanto defeitos menores têm uma tolerância alta. Em projetos reais, é difícil exigir que o software tenha 0 defeitos. Os prazos geralmente acabam com essa prática. É nessas situações que você precisa começar a negociar o escopo.
A maioria dos softwares fornecidos que eu vi geralmente não são entregues com testes de unidade. Você pode argumentar que os fornecedores devem ser profissionais o suficiente para fornecer isso, no entanto, a principal razão pela qual você deseja que os testes de unidade sejam entregues é garantir que você não receba erros de regressão e também habilitar a refatoração. Na vida real, com projetos em prazos apertados, tanto o fornecedor quanto o cliente estarão diminuindo o escopo e os testes de unidade geralmente saem pela janela e são removidos da lista de produtos necessários.
É um pouco triste que o software de código aberto de alto perfil seja fornecido com testes de unidade, mas um desenvolvedor de software profissional não pode, certo?
Então, quando eu, como cliente, me preocupo com o teste de unidade?
Eu diria que a única vez em que você realmente se importaria com o teste de unidade é se o software entregue é um componente auto-suficiente que não é executado como um programa independente, para o qual o teste mais grosseiro que você pode fazer é um teste de unidade . As bibliotecas de classes seriam um tipo de produto que pode ser entregue juntamente com testes de unidade.