O teste incremental no teste de software é uma metodologia que permite às equipas dividir módulos individuais, testá-los isoladamente e integrá-los por fases. Ajuda a encontrar defeitos numa fase inicial, reduz a complexidade e aumenta a cobertura dos testes.
Este artigo vai mergulhar fundo nos testes incrementais, explicar o que são e explorar os diferentes tipos, processos, abordagens, ferramentas e muito mais que estão associados a esta metodologia útil.
O que é um teste incremental?
O teste é uma das fases mais importantes do ciclo de vida de desenvolvimento de software (SDLC). Tal como no SDLC, os testes são divididos em diferentes etapas lógicas. O teste incremental é uma dessas fases e ocorre normalmente durante
teste de integração
e logo após
testes unitários
.
Testes incrementais é uma abordagem pragmática de teste de software que divide programas grandes ou complexos em partes gerenciáveis, do tamanho de uma mordida. Em vez de integrar e testar todo um sistema de software de uma só vez, o teste incremental analisa os módulos e implementa um processo de verificação faseado.
Os módulos de software são normalmente unidades de código autónomas que executam tarefas ou funções específicas. A granularidade destes módulos depende de vários factores, como as práticas de codificação, as metodologias de desenvolvimento ou mesmo a linguagem de programação que utiliza.
Os módulos são testados de forma independente durante os testes unitários. Depois, durante o teste de integração, cada módulo é integrado peça por peça – ou em incrementos. Este processo garante que cada módulo funciona bem em conjunto. No entanto, para verificar completamente cada módulo, os testadores precisam de simular componentes que ainda não foram implementados ou sistemas externos. Para o efeito, necessitam da ajuda de stubs e drivers.
O que são stubs e drivers em testes incrementais?
Os stubs e drivers são ferramentas de teste de software essenciais. Estas peças temporárias de código são utilizadas durante os testes de integração porque oferecem às equipas a capacidade de imitar os comportamentos e as interfaces de vários módulos ou componentes.
1. Stubs:
Os stubs imitam módulos que ainda não foram desenvolvidos e, como tal, não estão disponíveis para testes. Permitem que o módulo em teste (MUT) recorra a módulos incompletos. O resultado é que o MUT pode ser testado isoladamente, mesmo quando os módulos relacionados não estão disponíveis.
2. Condutores:
Os drivers, por outro lado, simulam o comportamento dos módulos que chamam o MUT. No ambiente de teste, estes controladores podem enviar os dados de teste MUT. Mais uma vez, isto facilita o teste de módulos isolados sem a necessidade de dependências externas.
A utilização de stubs ou drivers reduz o tempo de desenvolvimento, melhora a qualidade do código e aumenta a produtividade da equipa. No entanto, a decisão de qual deles utilizar depende da metodologia de teste mais adequada. Este aspeto será aprofundado na secção seguinte, que aborda os diferentes tipos de testes de integração incremental.
Diferentes tipos de incrementais
ensaios de integração
Os tipos de testes incrementais podem ser divididos em três categorias. Vamos explorar cada uma delas.
1. Integração incremental descendente
A integração incremental descendente começa por testar os módulos de ordem mais elevada de um sistema. A partir daí, integra e testa gradualmente os módulos de ordem inferior.Existem dois cenários principais em que é utilizada a integração incremental descendente. São eles:
- Quando um sistema é muito grande ou altamente complexo
- Quando a equipa de desenvolvimento está a trabalhar em vários módulos ao mesmo tempo.
Passos para integrações incrementais do topo para a base
- Identificar os módulos críticos
- Criar stubs para imitar módulos de ordem inferior
- Desenvolver controladores para interagir com os módulos de ordem superior para lhes enviar dados e interpretar os resultados do módulo
- Teste unitário de módulos críticos com drivers e stubs
- Integrar módulos de ordem inferior e substituir gradualmente os stubs por implementações reais
- Refactorizar os controladores para acomodar os novos módulos
- Repetir até que todos os módulos de ordem inferior estejam integrados e testados.
2. Integração incremental ascendente
As integrações incrementais ascendentes vão na direção oposta. Com esta abordagem, são testados os módulos de ordem inferior (ou menos críticos) do sistema, sendo gradualmente adicionados os módulos de ordem superior. Esta abordagem é adequada em diferentes cenários, tais como:
- Quando se lida com sistemas mais pequenos
- Quando um sistema é modularizado
- Quando tiver dúvidas sobre a exatidão ou a exaustividade dos esboços.
Passos para integrações incrementais ascendentes
- Identificar os módulos de ordem inferior
- Testes unitários de módulos de ordem inferior para verificar a sua funcionalidade individual
- Desenvolver controladores para actuarem como intermediários com módulos de ordem inferior
- Criar stubs para simular o comportamento de módulos de ordem superior
- Integrar os módulos seguintes, de ordem inferior para superior, e substituir gradualmente os stubs por implementações reais
- Refactorizar os controladores para acomodar os novos módulos
- Repetir até que todos os módulos de ordem superior estejam integrados e testados.
3. Integração incremental funcional
Os testes de integração incremental de funções são o tipo mais comum de testes incrementais nos testes de software. Enquanto os dois tipos anteriores se centravam nos módulos de ordem superior e inferior, o teste incremental funcional baseia-se na funcionalidade de um módulo específico.
A integração incremental funcional é utilizada em
metodologias Agile/DevOps
e é uma excelente escolha para aplicações com dependências complexas entre módulos ou componentes.
Passos para a integração incremental funcional
- Identificar módulos e componentes individuais com interfaces bem definidas
- Verificar a funcionalidade de cada módulo através de testes unitários
- Integrar os módulos principais mais mínimos do sistema e garantir o seu funcionamento
- Adicionar gradualmente módulos individuais, testando a funcionalidade em cada passo
- Refactorizar o código à medida que cada módulo é adicionado
- Quando todos os módulos forem adicionados, testar a funcionalidade e o desempenho
Prós e contras de uma abordagem de teste incremental
Neste momento, já deve ter uma ideia da razão pela qual os testes incrementais são uma abordagem popular. No entanto, como todas as metodologias de teste de software, tem as suas vantagens e desvantagens. Vamos explorar alguns destes prós e contras.
Vantagens de uma abordagem de teste incremental
1. Flexibilidade
Como todos os programadores e testadores de software sabem muito bem, os requisitos podem mudar e evoluir durante o SDLC, por vezes de forma bastante dramática. Os testes incrementais são suficientemente dinâmicos para permitir que as equipas se adaptem durante o processo de teste e incorporem novos planos e orientações.
2. Deteção precoce de erros
A melhor altura para detetar um erro ou defeito é o mais cedo possível. Quando os programadores verificam individualmente módulos de pequenas dimensões, é muito mais fácil identificar e corrigir problemas. Além disso, ajuda a reduzir a probabilidade de ocorrência de grandes problemas numa fase tardia do desenvolvimento.
3. Simplicidade
O teste de software pode ser um processo altamente complexo. Um dos aspectos mais interessantes dos testes incrementais é a forma como dividem a cidade dos testes em partes funcionais. Em vez de lidarem com uma complexidade avassaladora, os testadores podem concentrar-se e até dar prioridade a módulos específicos. Esta vantagem é uma dádiva de Deus para aplicações grandes e complexas.
4. Menor risco de regressão
A regressão é uma questão complexa e morosa no âmbito do desenvolvimento de software. Os testes incrementais podem atenuar a frequência e os riscos causados pela regressão, uma vez que permitem às equipas testar os módulos individualmente e resolver os problemas à medida que estes ocorrem. Quando utilizado com
testes de regressão
as equipas podem poupar muito tempo e dores de cabeça.
5. Oportunidades de feedback
Uma vantagem frequentemente negligenciada dos testes incrementais é o facto de permitirem às equipas a liberdade de criar protótipos e MVPs. A partir daí, as partes interessadas e os investidores podem avaliar a funcionalidade básica do processo e fornecer um feedback valioso. Esta situação pode poupar muito tempo e dinheiro e conduzir a produtos mais robustos.
Contras de uma abordagem de teste incremental
1. Questões de integração
Testar os módulos separadamente é desejável porque divide uma aplicação complexa em partes geríveis. No entanto, a integração destes módulos pode dar origem a erros novos e inesperados. Como tal, uma abordagem de teste incremental deve ser planeada de forma cuidadosa e deliberada.
2. Complexidade do conjunto de testes
Com vários casos de teste para cada módulo e a respectiva interação entre eles, os conjuntos de testes podem tornar-se complexos de seguir e gerir. Para aplicações grandes e complicadas, isto torna a documentação completa ou as ferramentas de gestão de testes uma necessidade.
3. Mais trabalho
Os testes monolíticos, embora mais complexos, exigem menos testes. Ao testar muitos módulos separadamente, os testes incrementais exigem mais trabalho. No entanto, os benefícios dos testes incrementais, como a descoberta precoce de erros, significam que o esforço extra é um investimento que poupa tempo. Claro que sim,
automatização dos testes de software
pode ajudar a reduzir estes esforços.
4. Aumento das exigências de gestão
Os testes incrementais requerem o trabalho conjunto de várias equipas. Por exemplo, as equipas de desenvolvimento, teste e DevOps terão de trabalhar em conjunto. Esta situação cria uma exigência de gestão adicional e requer uma boa comunicação entre estas equipas para garantir que estão concentradas e a trabalhar para os mesmos objectivos.
Exemplo de teste incremental
Talvez a maneira mais fácil de entender uma abordagem de teste incremental seja pensar num exemplo. Segue-se uma situação simples para ajudar a visualizar o processo.
1. Exemplo de teste incremental para uma aplicação bancária móvel
Cenário: Uma equipa está a criar uma aplicação bancária móvel. A aplicação é composta por vários módulos diferentes que permitem:
- 2FA e verificação biométrica do utilizador
- Processamento de transacções
- Painel de gestão de dados financeiros
Objetivo: A equipa pretende testar a integração de cada módulo e determinar se funcionam bem em conjunto. Como resultado, constroem três casos de teste.
Caso de teste 1
No primeiro caso de teste, a equipa pretende garantir que, ao introduzir os dados biométricos ou a palavra-passe, o utilizador terá acesso ao processamento de transacções e ao painel de gestão de dados financeiros.
A aplicação passará no teste se o utilizador conseguir introduzir os seus dados e aceder às transacções.
Caso de teste 2
O próximo caso de teste foi concebido para ver como a aplicação lida com transacções não autorizadas.
A aplicação passa no teste se uma tentativa de efetuar uma transação não autorizada for bloqueada e a aplicação produzir uma mensagem de erro.
Caso de teste 3
O teste de integração final envolve validar se a aplicação pode efetuar transacções em simultâneo.
A aplicação passará no teste se o utilizador puder iniciar uma transação e aceder às suas informações financeiras ao mesmo tempo, sem quaisquer inconsistências ou problemas de dados.
Uma abordagem de teste de incrementalidade é a
o mesmo que testes incrementais?
Não. O teste de incrementalidade refere-se a um método estatístico de marketing que é talvez mais conhecido como modelo de atribuição. Em suma, ajuda as equipas de marketing a compreender o impacto das campanhas publicitárias, dos canais de marketing ou de estratégias específicas.
Embora o interesse por este tipo de modelação tenha crescido nos últimos anos graças à “morte” dos cookies e dos dados de terceiros, a única relação que tem com os testes incrementais é uma palavra partilhada.
As 3 principais ferramentas para testes incrementais
#1. ZAPTEST
Para além de fornecer serviços de
RPA
a ZAPTEST oferece uma gama de ferramentas de automatização de testes de software que são perfeitas para testes incrementais. Algumas das características incluem:
Gestão de dados de teste
: Reduzir a quantidade de tempo e esforço envolvidos nos testes incrementais, permitindo que as equipas reutilizem os dados de teste- Gravação e reprodução de guiões: Esta ferramenta sem código permite às equipas gravar e executar scripts e poupar muito tempo durante os testes incrementais
- Módulos de teste reutilizáveis: O ZAPTEST é altamente modular e permite que as equipas criem e reutilizem módulos de teste, reduzindo significativamente o tempo do processo de teste.
Em suma, o ZAPTEST oferece um conjunto de automatização de testes poderoso e variado, adequado para qualquer tipo de teste, incluindo testes incrementais.
#2. Selénio
O Selenium é uma plataforma de automatização de testes de código aberto criada para facilitar os testes de aplicações móveis. As ferramentas suportam várias plataformas móveis (Android, iOS, Windows) e utilizam stubs e drivers para simular módulos.
#3. Testesigma
O Testsigma é uma plataforma de automatização de testes baseada na nuvem. Pode ser utilizado para testar aplicações Web e móveis e é adequado para testes incrementais graças à criação de testes sem código e à integração com pipelines CI/CD.
Considerações finais
Os testes incrementais nos testes de software são uma parte importante dos testes de integração. Permite que as equipas dividam os módulos em partes facilmente testáveis antes de os integrarem lentamente. A vantagem é que cada módulo pode ser verificado quanto a erros e, em seguida, quanto à forma como se integra com as partes que lhe estão associadas.
Juntamente com a nossa melhor
RPA
o ZAPTEST oferece automação de teste de software sem código que é multiplataforma e multiaplicação. Além disso, o nosso conjunto de testes inclui funcionalidades como a integração CI/CD, relatórios e análises robustos, bem como apoio e serviço ao cliente de primeira classe.