Escolar Documentos
Profissional Documentos
Cultura Documentos
Departamento de Computação
Bacharelado em Ciência da Computação
Implemente
uma feature
É mais produtivo focar em uma
etapa por vez!
Efetue os
testes
Workflow (iterativo) para testes
efetivos e sistemáticos
O que fazer?
Entender os requisitos (i.e., analisá-
los)
Desenvolver o código-fonte (p.ex.,
apoiado por TDD e refactorings)
Atenção1! Requisitos são, frequentemente, complexos; daí, a necessidade
de considerar unidades (classes e métodos) com diferentes contratos para
atender à funcionalidade requisitada
Workflow (iterativo) para testes
efetivos e sistemáticos
O que fazer?
Entender os requisitos (i.e., analisá-
los)
Desenvolver o código-fonte (p.ex.,
apoiado por TDD e refactorings)
Atenção2! Desenvolver classes com a testabilidade em mente (é
desafiador, mas é essencialmente útil)
Workflow (iterativo) para testes
efetivos e sistemáticos
O que fazer?
Efetue os Teste de domínio (domain testing)
testes
Teste de limite (boundary testing)
Teste estrutural (structural testing)
Teste as
regras de
negócio
Fonte: M. Aniche. Effective Software Testing. A developer’s guide. Manning Publications, 2022
Testes de unidade
Vantagens e desvantagens
●
Vantagens
●
Rapidez. Ttipicamente, executam em poucos milisegundos
●
Controle facilitado. Valores de entrada e resultados esperados são
fáceis de adaptar ou modificar
●
Implementação facilitada. Tipicamente, uma unidade é coesa e
pequena, simples
●
Desvantagens
●
Não representam perfeitamente a execução real do software
(sistemas de software raramente são compostos por uma única
classe)
●
Alguns tipos de bugs podem não ser detectados (p. ex., em um
código multithreaded, tudo pode funcionar corretamente no nível
de unidade; porém, bugs podem aparecer quando as threads
estiverem executando (no nível de integração)
Testes de integração (ou de serviços)
●
Testes que verificam uma funcionalidade ou transação
completa de um sistema, considerando diversas classes (de
pacotes distintos)
●
Testes que podem considerar componentes externos
(bancos de dados, p. ex.)
Teste as
integrações
com os
serviços
externos
Fonte: M. Aniche. Effective Software Testing. A developer’s guide. Manning Publications, 2022
Testes de sistema
Vantagens e desvantagens
●
Vantagens
●
Quanto mais realistas forem os testes, maior a
confiança no sistema como um todo
●
Desvantagens
●
Mais lentos que os testes de unidade
●
Mais difíceis de escrever (p. ex., conexões,
autenticações, …)
●
Mais suscetíveis a flakiness (um teste flaky
apresenta comportamento errático – pode passar
ou falhar para a mesma configuração)
Níveis de teste na prática
Recomendação genérica de proporção
Fonte: J. Whittaker, J. Arbon, and J. Carollo. How Google tests software. Addison-
Wesley Professional, April 2012
10%
20%
70%
●
M. Aniche. Effective Software Testing. A developer’s
guide. Manning Publications, 2022, pp. 1 – 27
●
M. T. Valente. Engenharia de Software Moderna.
Independente, 2022
Disponível em https://engsoftmoderna.info/cap8.html