Talvez as palavras-chave para entendimento da Pirâmide de Testes sejam equilíbrio e organização. Isso porque o modelo visual da pirâmide permite identificar com clareza os tipos de testes necessários em cada etapa do processo. Na camada mais básica da pirâmide estão os testes unitários; na intermediária os testes de integração e no topo os testes de interface do usuário (UI). Esse agrupamento torna todo o conjunto de testes mais confiáveis, pois ajuda desenvolvedores, QAs e demais profissionais de controle de qualidade a encontrar as causas de bugs mais facilmente.
De baixo para cima, a Pirâmide de Testes funciona da seguinte forma:
Testes unitários
Os testes de unidade estão na base da pirâmide e costumam ser em maior quantidade. São testes mais simples, com escopo pequeno. Testes unitários devem garantir que as menores unidades testáveis de um aplicativo funcionem corretamente. Também não testam mais do que uma variável e não possuem dependências externas.
Para execução de testes unitários são usados simuladores e emuladores. Nesses casos, os testes em dispositivos virtuais conseguem fornecer as informações necessárias, como feedback e depuração/log. Ao invés de colaboradores reais, nos testes de unidades são usados objetos “falsos” que imitam o comportamento do objeto real.
Como testam unidades pequenas e independentes, os testes unitários são rápidos e simples. Assim, quando os testes de unidade falham, a origem do problema é facilmente detectada.
Testes de integração
Ao sair da base em direção ao topo da pirâmide estão os testes de integração. São testes acionados por CI e estão relacionados a mais de um sistema, como o próprio nome sugere. Nessa camada, não apenas há diferentes tipos de testes (aceitação, desempenho, segurança, acessibilidade etc), mas também será necessário dosar dispositivos reais e virtuais.
Nessa camada intermediária da pirâmide há integrações de mais de um sistema. Neste estágio, há mais recursos para cobrir e mais tipos de teste para conduzir. Os testes serão realizados com adição de configurações reais de dispositivo/SO, pois estes estão relacionados à análise de uso do cliente e às tendências de mercado.
Testes de interface do usuário
Ao contrário dos testes de unidade e de integração, os testes exploratórios e de interface do usuário têm mais dependências. Nesta camada no topo da pirâmide os testes devem ser realizados em dispositivos reais com simulação de usuários também reais, além de serem em número bem menor se comparados às camadas inferiores.
Vale ressaltar que os testes de interface do usuário podem e devem ser acelerados com automação. Já os testes exploratórios geralmente são realizados manualmente e por isso demandam mais tempo da equipe.
Conclusão
Se você leu até aqui, já deve ter percebido que fatores como a distância do código, tempo de execução e custo para realização dos testes são ampliados à medida que se avança nas camadas da pirâmide, de baixo para cima.
Na base os testes são mais simples, rápidos e baratos. Os testes unitários são a primeira linha de defesa para se detectar bugs o mais próximo da causa raiz. O tempo de execução dos testes mais básicos é infinitamente menor, na casa dos milissegundos, se comparados aos testes de ponta a ponta no topo da pirâmide.
Por outro lado, os testes de interface do usuário são mais difíceis, longos e complexos para serem escritos, cobrem mais aspectos, usam mais recursos e dependências. Portanto, o custo de desenvolvimento é maior. Por isso na ponta da pirâmide a quantidade de testes é menor.
Apesar de toda a lógica por detrás da Pirâmide de Teste, não a trate com rigidez. As equipes de teste devem usá-la como uma diretriz e não uma regra na qual as proporções de testes em cada camada não possam ser alteradas. Avaliar, por exemplo, se há lacunas na sua estratégia de teste é mais importante que tentar seguir um modelo à risca