Toda a corporação presta serviços de missão crítica através de suas aplicações, ou seja, não podem sofrer qualquer interrupção no seu funcionamento. Para esse efeito, os testes de software têm a responsabilidade de otimizar a gestão destes recursos, de forma a antecipar possíveis falhas que possam surgir para os usuários finais, podendo ser realizados pelos developers ou por profissionais especializados, os Quality Assurance (QA) specialists.
Vamos descobrir mais sobre os testes de software e o seu papel no sucesso de um produto.
Níveis de testes de software
Segundo a International Software Testing Qualifications Board (ISTQB), os níveis de testes correspondem a grupos de atividades de testes organizados e gerenciados juntos, sendo que cada nível equivale a uma instância do processo de teste.
Existem os seguintes níveis de testes:
- Testes unitários
Verificam o comportamento da menor parte de um código testável de uma aplicação, independentemente da interação entre outras partes; - Testes de integração
Testam a interação entre as unidades, como elas trabalham juntas, e normalmente testam uma funcionalidade inteira, incluindo a persistência de dados; - Testes de sistema
Focam-se no comportamento e na capacidade do sistema ou produto. Envolvem a execução de testes end-to-end, engloblando desde a interação com as interfaces de usuário até ao processamento dos dados no back-end.
Também abrangem comportamentos não funcionais. Os testes de User Interface (UI) podem testar tanto cenários negativos, quanto positivos. Nos negativos, algumas vezes param somente na camada da interface, não interagindo com o processamento no back-end. Nos positivos, a interação pode acontecer com dados “mockados” ou simulados do back-end, focando mais nas interfaces. Caso a interação ocorra, caracterizam-se por end-to-end, ou seja, de ponta-a-ponta; - Testes de aceitação
Também consideram o comportamento do sistema como um todo e produzem informações para validar a situação do sistema que está sendo implementado e utilizado pelo usuário final. Podem ainda satisfazer padrões legais e regulatórios. Este tipo de testes subdivide-se em:
- User Acceptance Test (UAT): uma versão do sistema é disponibilizada em um ambiente para o usuário executar os processos de negócio e verificar se é possível executá-los com o mínimo de dificuldade, custo e risco;
- Operation Acceptance Test (OAT): é realizado em um ambiente controlado pela equipa de administração e cobre testes de backup e recovery, gerenciamento de usuários, manutenção de tarefas, vulnerabilidade, segurança e performance;
- Testes de aceitação regulatórios e de contrato: baseados em critérios de aceitação de contrato para desenvolvimento de softwares específicos.
- Testes alfa e beta
São similares aos teste de aceitação e também coletam informações sobre a situação do sistema, mas não são planejados.
Tipos de testes de software
Os tipos de testes representam um grupo de atividades de teste focado em testar características específicas do sistema, ou parte do sistema baseado nos seus objetivos. Subdividem-se em:
- Testes funcionais
Testam se o sistema faz o que deve fazer (regras de negócio), ou seja, testa as funcionalidades do software. Os requisitos podem ser escritos sob a forma de documentos, user stories, casos de uso, ou não serem documentados no pior dos cenários; - Testes não funcionais
São mais amplos e válidos para todos os sistemas, pois baseiam-se na norma ISO-25010 que trata da usabilidade, performance, eficiência e segurança; - Testes de caixa branca
São baseados na estrutura interna e têm acesso ao código fonte. Os testes unitários são testes de caixa branca; - Testes de caixa preta
Baseiam-se nos requisitos básicos do software e focam-se nas ações que esses requisitos devem desempenhar. Testes de sistema, aceitação, alfa e beta são do tipo caixa preta. Este tipo de testes verifica os dados da saída sem se preocupar como eles são gerados internamente – por exemplo: campo de data de nascimento preenchido com datas futuras e campos obrigatórios sem validação.
Quanto maior a visibilidade do código, maior a visibilidade de como a funcionalidade é feita, menores as quantidades de requisitos e regras de negócio testadas, e maior é a transparência do teste, aproximando-se de um teste de caixa branca. Em contrapartida, quanto menor é a visibilidade do código, menor a visibilidade de como a funcionalidade é feita, maiores as quantidades de requisitos e regras de negócio, e menor é a transparência do código, aproximando-se gradualmente de um teste de caixa preta. A imagem abaixo ilustra esta ideia.
Transparência dos testes de caixa preta e de caixa branca
Formas de execução de testes de software
Qualquer um dos níveis e tipos de testes de software mencionados acima pode ser executado de duas formas:
- Testes manuais
São testados manualmente por um humano (Quality Assurance Specialist) com o intuito de cobrir testes exploratórios (encontrar erros aleatoriamente), testes de usabilidade, ou casos de testes escritos nos critérios de aceitação de uma user story, por exemplo.
Este forma de execução tem vantagens e desvantagens:- Prós
- As condições destes testes são similares quando o sistema está em ambiente produtivo;
- Podem identificar falhas visuais;
- Baixo custo;
- Menor conhecimento técnico para serem executados.
- As condições destes testes são similares quando o sistema está em ambiente produtivo;
- Contras
- Lentidão para serem executados;
- Chances maiores de não detetarem uma falha, pelo fato de não serem automatizados.
- Lentidão para serem executados;
- Prós
- Testes automatizados
São escritos para serem processados automaticamente. Necessitam de ferramentas, scripts e softwares para serem implementados e executados.- Prós
- Maior confiabilidade;
- Execução mais rápida do que os testes manuais;
- Excelentes para testes de carga e testes de performance.
- Maior confiabilidade;
- Contras
- Desenvolvimento demorado;
- Necessitam de ferramentas específicas em cada fase de teste;
- Podem não detetar problemas de usabilidade;
- Pode ser necessário investimento extra de infraestrutura em alguns casos.
- Desenvolvimento demorado;
- Prós
Fluxo de testes de software
Cada tipo de teste pode ser aplicado em ambientes diferentes, onde as aplicações estão instaladas, e em fases de desenvolvimento diferentes de acordo com a infraestrutura, necessidade e budget de cada projeto/aplicação, tal como demonstra a figura abaixo.
Exemplo de fluxo de testes
Pirâmide de testes de software
Normalmente, a quantidade de testes unitários desenvolvida é relativamente maior do que a de testes de integração (também denominados testes de serviço) e a de testes de UI (englobados no nível de testes de sistema), pois têm um custo menor, são menos específicos e mais rápidos de desenvolver.
Esta lógica é ilustrada pela pirâmide de testes de software:
Pirâmide de testes de software: tempo x custo x quantidade
Conclusões
Entre os mais comuns testes de software desenvolvidos estão os testes unitários, os testes de integração e, por vezes, os testes de UI. São criados diferentes níveis de testes, considerando as suas particularidades:
- Testes unitários com o intuito de garantir o comportamento esperado das menores unidades do sistema;
- Testes de integração com o intuito de garantir o comportamento de uma funcionalidade inteira;
- Testes de UI, sendo mais próximos da experiência do usuário final, fazem com que a aplicação aumente sua confiabilidade, qualidade e estabilidade nos ambientes produtivos, e diminuem os custos causados por falhas que podem ser detetados antes da instalação em ambiente produtivo.