Principais Tipos de Teste de Software
Os testes de software são uma maneira de garantir a qualidade de um software. Com isso existem diversas maneiras de se testar um sistema, que podem variar de acordo com a sua natureza ou seu objetivo. Podemos classificar em:
- Testes estruturais ou caixa-branca (white-box testing)
- Testes funcionais ou caixa-preta (black-box testing)
- Testes não-funcionais
- Testes de relacionados à mudança
Os testes estruturais ou caixa-branca são realizados diretamente no código e geralmente são feitos pelo desenvolvedor do sistema nos níveis de: testes de unidade e testes de integração. No teste de unidade, cada função do sistema é testada a fim de garantir que elas funcionam independente da interação com as outras partes do sistema. Já o teste de integração tem o objetivo de verificar se cada parte, ao ser integrada com outras, funcionam corretamente.
Por outro lado, os testes funcionais ou caixa-preta geralmente são feitos pelos testador, cliente ou usuários, nos níveis de teste de sistema e teste de aceitação. Pois eles não têm contato direto com o código-fonte do sistema. Entende-se o sistema como uma caixa, onde ao inserir valores de entrada, retorna valores de saída. Em cada um desses níveis de teste, os testes funcionais mudam de objetivo.
Os testes de sistema são realizados por uma equipe específica de teste, que utiliza a especificação dada pelo cliente para fazer o roteiro de casos de teste. Já o teste de aceitação difere do teste de sistema, pois pode ser executado pelo cliente ou pelos usuários, cuja finalidade do teste é verificar se o sistema está de acordo com o que foi solicitado e se atende as necessidades dos usuários.
Os testes não-funcionais têm esse nome por se tratar de testes que verificam aspectos gerais da aplicação, independente das regras de negócio que há nele. Nesse caso, pode-se realizar testes de desempenho, testes de segurança, testes de usabilidade, entre outros.
Já os testes de relacionados à mudança são realizados quando o sistema sofrem alterações consideráveis, que podem gerar bugs. Geralmente é necessário re-executar o roteiro de teste criado para o teste funcional, nesse caso chamamos de teste de regressão. Para uma melhor eficiência nesse tipo de teste, uma estratégia seria automatizar para reduzir o custo de re-execução e conseguir realizar uma verificação mais rápida.
Uma ferramenta que pode ser usada para testes de regressão funcional é o Selenium WebDriver. Contudo, eles também podem ser feitos com técnicas estruturais (caixa-branca), pois qualquer execução de teste que valide se o sistema continua funcionando é um teste de regressão.
Uma métrica importante, que deve ser levada em consideração, é a cobertura dos testes, que tem a finalidade de verificar qual o percentual do sistema está sendo testada. No caso dos testes estruturais, seria analisado a cobertura de testes do código-fonte e no teste funcional, a métrica seria com relação à cobertura de requisitos. Há ferramentas que auxiliam na verificação dessa métrica, como por exemplo:
Geralmente é definido um critério aceitável de cobertura, por exemplo, testes que cobrem 95% do código. Não existe técnica melhor, existe sim a melhor estratégia de teste. Cada técnica tem sua finalidade e pode ser executada de forma manual ou automática. A partir do entendimento mais aprofundado sobre cada tipo de teste, é que se pode obter uma forma mais prática de testar cada parte do sistema, a fim de garantir uma maior qualidade no software.
Referência:
WILLIAMS, M., SUCCI, G. e MARCHESI, L. Traditional and Agile Software Engineering. Ch 8 — Black Box Testing. Ed. Addison-Wesley, 2003
Syllabus Foundation Level — BSTQB — https://www.bstqb.org.br/uploads/syllabus/syllabus_ctfl_2018br.pdf
Vídeo sobre o tema:
Anne Caroline Rocha é autora do livro “Simplificando Teste de Software”, que aborda o tema de Teste de Software utilizando uma linguagem simples e didática, ideal para quem está começando na área. Em 2020, escreveu o ebook “Investir ou não em teste de software?”. Clique aqui para adquirir o livro!
Ela acredita que compartilhar conhecimentos é a chave para um mundo melhor.