Aspectos de bons testes de unidade

Este artigo é uma sinopse do livro " Unit Testing Principles ".





Vamos começar listando as propriedades de bons testes de unidade.





Primeiro. Integrado ao ciclo de desenvolvimento. Apenas os testes que você usa ativamente são úteis; caso contrário, não faz sentido escrevê-los.





Segundo. Apenas as partes mais importantes do seu código são testadas. Nem todo código funcional merece a mesma atenção.





Terceiro. Fornece proteção máxima contra bugs com custos de manutenção mínimos. Para fazer isso, você precisa ser capaz de reconhecer testes eficazes e escrevê-los.





No entanto, reconhecer e escrever um teste eficaz são duas habilidades diferentes. E para adquirir a segunda habilidade, você deve primeiro dominar a primeira. O restante deste artigo mostrará como reconhecer um teste eficaz. A pirâmide de teste e teste de acordo com o princípio "caixa preta" / "caixa branca" também será considerada.





Quatro aspectos de bons testes de unidade

Um bom teste de unidade deve ter os seguintes atributos: proteção contra bugs, resistência à refatoração, feedback rápido e facilidade de manutenção.





Esses quatro atributos são fundamentais. Eles podem ser usados ​​para analisar qualquer teste automatizado, seja de unidade, integração ou testes de ponta a ponta.





Vamos começar com o primeiro atributo de um bom teste de unidade: proteção contra bug. Um bug (ou regressão) é um bug de software. Como regra, esses erros ocorrem após fazer alterações no código.





Quanto mais funcionalidade, maior a probabilidade de adicionar um bug à nova versão. É por isso que é tão importante desenvolver uma boa proteção contra bugs. Sem essa proteção, será impossível ou muito difícil garantir o crescimento do projeto no longo prazo devido ao número cada vez maior de erros.





Para avaliar o desempenho de um teste em termos de proteção contra bugs, considere o seguinte:





  • a quantidade de código executado pelo teste;





  • a complexidade deste código;





  • a importância deste código em termos de lógica de negócios.





, ,  . ,   (assertions).





, -. , -, —  .





, .   - -.





- — . ,   .





.   : . —   .





. :  , , . , , . , .





?   .  - .   ,     .





:





  • ,   .   .   .





  •   . -,   . , .





?

, , .  , .  :  . — ,  , .





— , . , ,   . — ,   .





FIG.  1 - O teste à esquerda está relacionado ao comportamento observado do SUT, não aos detalhes de implementação.  Esse teste é mais resistente à refatoração do que o teste à direita.
. 1 – SUT, . ,

- ( ) .   , . - :   ,   .





, .   ( ),   , ( ).





, , , :   ( ).





FIG.  2 - Relação entre proteção de bug e resistência à refatoração
. 2 -

, , .   : . .     — II .





, :  , . . .





: , . :





  • ( , );





  • ( , ).





. 3,   . — (),   . —  (), .





FIG.  3 - Fórmula de precisão do teste
. 3 –

:  

  -. ,   .  . , ,   ,  .





. :





  • . .   , .





  • . , , .





.   «» :   , .





  , .   , .





? , . , —  , —  . :   .





, . ,   . ,  , .





— (end-to-end) . .  ,  , .





, . , , ,  .  - , .





: . ,   , . .





—  . ,  .





FIG.  4 - Teste trivial cobrindo um pedaço simples de código
. 4 - ,

, . , ,   .   - ,   .





-  , , . :   , .





FIG.  5 - Lugares que os testes tomam em relação uns aos outros
. 5 – ,

— — , (end-to-end) . - ,   .   . ,  .





.   ; . , .  , ,   . .





,   ; .   .





FIG.  6 - Compensações entre atributos de um bom teste
. 6 –

?  :   , .  . ,   . ,   .





- CAP. ,   : (consistency) , (availability), (partition tolerance).





:





1. CAP ;





2.   . —  , , - Amazon — .     .





  : -, , .





.   . , . , .   .   ,   .





FIG.  7 - A pirâmide de teste prescreve uma certa proporção de testes de unidade, integração e ponta a ponta
. 7 - -,
FIG.  8 - Diferentes tipos de testes na pirâmide tomam decisões diferentes sobre feedback rápido e proteção contra bugs
. 8 -

. :   ; - — ;   - .





, –  . :   . ,   .





. - ,   -, — .   ;   , ,  (, ). CRUD-  - .





— API, (, ).   . , .   ,   — .





« » « »

« » .   . , , , .





« »  . . ,   .





FIG.  9 - Vantagens e desvantagens dos testes de caixa preta e caixa branca
. 9 - « » « »

,   : , .   « ». — , -, — « »  , -.   -, .





  • -





  • Aspectos de bons testes de unidade





  • Para que serve o teste de integração?








All Articles