Introdução: Testes de Software

A qualidade de software é adquirida com a aplicação de técnicas de verificação e validação durante todo o processo de desenvolvimento de um software. São necessárias diversas técnicas para definir e medir a qualidade do software, como também é importante verificar a qualidade do processo de teste adotado. Quanto antes for aplicado um processo de teste no ciclo de desenvolvimento de um sistema, menor será o custo para corrigir os defeitos encontrados. Para isso o ideal é que haja um processo de teste independente, porém que seja altamente integrado ao processo de desenvolvimento.

Os casos de teste devem ser criados tomando o cuidado de verificar se todos os requisitos levantados foram abordados, pois sua finalidade é garantir que o software está fazendo o que ele deve fazer. As técnicas de teste de unidade e de integração geralmente são utilizadas na fase de codificação. Há também as técnicas “walk-through”, inspeções, revisões, prova de corretude e simulação. As técnicas de “walk-through” e inspeções verificam também as especificações a fim de detectar problemas até mesmo na fase de design. 

Os tipos de teste são divididos em testes de caixa-branca, caixa-preta, não-funcionais e regressão. Para minimizar o número de entradas para os casos de teste, é necessário extrair algumas características do domínio, as quais irão representar o domínio como um todo, isso pode ser feito com a técnica de análise do valor limite.

Para verificar a qualidade dos casos de teste criados existem técnicas de análise estatística, análise de mutação, análise estática, análise de fluxo e análise dinâmica. A técnica de análise estatística utiliza a métrica de cobertura dos testes, que determinam o percentual de abrangência dos casos de teste ao executar o programa no momento do teste. Na técnica de mutação são gerados programas mutantes, onde neles são introduzidos diferentes defeitos, com a intenção de verificar se os casos de teste executados conseguem detectar tais falhas previamente conhecidas.

A aplicação de teste de software é importante durante todo o desenvolvimento do sistema. No entanto, a prática de testes nas indústrias de software ainda precisa melhorar. Além disso, as ferramentas que poderiam auxiliar com testes automáticos, ainda não estão prontas para determinados tipos de sistemas. Outra problemática é que o custo para garantir que o sistema está de acordo com a especificação é muito alto e fica mais alto ainda quanto mais tarde os testes forem realizados. O que impossibilita para uma melhor qualidade do sistema é a falta de formalização das especificações. 

Segundo Dijkstra, o teste pode ser usado para mostrar a presença de defeitos, mas nunca para mostrar que eles não existem. Uma coisa é importante, quanto mais riscos aquele sistema apresentar para a sociedade, mais tem que se investir na sua qualidade.

O interesse pela atividade de testes de software aumenta à medida que a falta destes de testes influenciam diretamente no custo final de um software produzido. Com isso, as exigências por softwares com maior qualidade têm motivado a definição de métodos e técnicas para o desenvolvimento de softwares que atinjam os padrões de qualidade impostos. Vários pesquisadores têm investigado os diferentes critérios de teste, buscando obter uma estratégia de teste com baixo custo de aplicação, mas ao mesmo tempo, com grande capacidade em revelar erros.

Há diversar técnicas de teste, que podem ser automáticos ou manuais: teste de sistema, testes de unidade (Unit Testing), testes de aceitação (Aceptance Testing), testes de integridade, testes de desempenho, testes de segurança, testes de interface, etc.

Para os testes manuais, há muitas técnicas e padrões que devem ser seguidas para garantir uma melhor qualidade dos testes, e para os testes automáticos, existem várias ferramentas que auxiliam na automatização deles.

Referências:



Vídeo sobre o tema: