Teste de Software
Aula 02 – Definições
Agenda
Teste de Software
Defeito, Erro ou Falha?
Dimensões do Teste
Níveis de Teste
Tipos de Teste
Teste de Software
“Teste de software é o processo de executar uma
aplicação com o objetivo de verificar se ela satisfaz satisfaz
requisitos
requisitos específicos e de detectar erros” - [British detectar erros
Computer Society-SIGST].
Teste de software fornece à equipe do projeto a
sensibilidade
sensibilidade de dizer se o produto está pronto para ser entregue.
Teste de Software
“Teste de software consiste na verificação dinâmicaverificação dinâmica
do comportamento de um programa, por meio de
um conjunto finitoconjunto finito de casos de teste, selecionados a
partir de um conjunto infinito de possibilidades,
contra um comportamento esperadocomportamento esperado especificado.”
Verificação dinâmica:Verificação dinâmica: Os testes serão
realizados com o produto ou componente de software em execução.
Teste de Software
Verificação estática:Verificação estática: Os testes são aplicados
sobre os artefatos, sem a execução do produto ou componente de software.
Conjunto finito:Conjunto finito: Os testes são aplicados a um
conjunto limitado de casos de teste selecionado através do equilíbrio entre os recursos
Teste de Software
Comportamento esperado: Comportamento esperado: É necessário definir
os resultados aceitáveis. O comportamento
observado do produto pode ser comparado com: • Especificação;
• Expectativas do usuário;
• Comportamento antecipado a partir de requisitos implícitos ou expectativas razoáveis.
Defeito, Erro ou falha
Geralmente o termo erro é utilizado de forma
generalizada para definir quaisquer ocorrências de falhas ou até mesmo defeito.
Defeito, Erro ou falha
Defeito: Está associado ao universo físico. É
ocasionado por uma ação inconsistente cometida por um indivíduo ao tentar executar uma tarefa
(resolver um problema, implementar um método ou utilizar uma ferramenta). Por exemplo, uma
instrução ou comando incorreto.
Erro: Está associado ao universo da informação. É
uma manifestação concreta de um defeito gerando um valor obtido diferente do valor esperado. Por consequência de uma falha, o erro acontece
Defeito, Erro ou falha
Falha: Está associado ao universo do usuário. É um
desvio na especificação que ocorre em consequência de um erro gerando um
comportamento operacional do software diferente do esperado pelo usuário. Uma falha pode ter sido causada por diversos erros.
Defeito, Erro ou falha
Um defeito não necessariamente leva a um estado
de erro, pois a linha de código com defeito pode nunca ser executada.
Um erro também não necessariamente leva a um
estado de falha, pois talvez uma informação nunca seja usada.
Dimensões do Teste
1 3 2 Quando testar? Como testar? O que testar? Tipos de Teste Teste de Funcionalidade Teste de Regressão Teste de Interface Teste de Desempenho Teste de Carga Teste de Usabilidade Teste de Volume Teste de Segurança Níveis de Teste Teste de Unidade Teste de Integração Teste de Sistema Teste de Aceitação Técnicas de Teste Teste Estrutural Teste FuncionalNíveis de Teste
1 3 2 Quando testar? Como testar? O que testar? Tipos de Teste Teste de Funcionalidade Teste de Regressão Teste de Interface Teste de Desempenho Teste de Carga Teste de Usabilidade Teste de Volume Teste de Segurança Níveis de Teste Teste de Unidade Teste de Integração Teste de Sistema Teste de Aceitação Técnicas de Teste Teste Estrutural Teste FuncionalNíveis de Teste
Teste de Unidade
Geralmente realizado pelo desenvolvedor
Níveis de Teste
Teste de Unidade (cont.)
Os testes unitários concentram-se em cada
módulo do software, de acordo com o que é implementado no código fonte.
Tem por objetivo explorar a menor unidade do
projeto, procurando provocar falhas
ocasionadas por defeitos de lógica e de implementação em cada módulo,
Níveis de Teste
Teste de Unidade (cont.)
Cada módulo é testado individualmente
garantindo que ele funcione adequadamente.
Utiliza as técnicas de teste de caixa branca.
O universo alvo desse tipo de teste são os
métodos dos objetos ou mesmo pequenos trechos de código.
Níveis de Teste
Teste de Unidade (cont.)
A interface com o módulo é testada para ter a
garantia do fluxo de informações.
A estrutura de dados local é examinada para ter
a garantia de que dados armazenados
temporariamente mantêm sua integridade durante todos os passos de execução
Níveis de Teste
Teste de Unidade (cont.)
Aspectos a serem validados no Teste de
Unidade:
• Exercitar as linhas de código da unidade;
• Exercitar os desvios condicionais da unidade; • Validar os requisitos funcionais da unidade; • Validar os requisitos de usabilidade da
unidade;
• Validar os requisitos de sistema relativos a unidade.
Níveis de Teste
Teste de Integração
Geralmente realizado pelo desenvolvedor
Níveis de Teste
Teste de Integração (cont.)
As unidades são integradas e módulos
montados para formarem um pacote de software.
Visa provocar falhas associadas às interfaces
entre os módulos quando esses são integrados para construir a estrutura do software que foi estabelecida na fase de projeto.
Utiliza principalmente as técnicas de teste de
Níveis de Teste
Teste de Integração (cont.)
É uma técnica sistemática para a construção da
estrutura de programa, realizando-se, ao mesmo tempo, testes para descobrir erros associados a interfaces.
Requer conhecimento da arquitetura do
software.
Verifica-se as dependências, interfaces e
Níveis de Teste
Teste de Integração (cont.)
Abordagens de teste de integração:
• Não Incremental (big-bang):
– O programa completo é testado como um todo e o resultado pode ser o caos.
– Quando erros são encontrados, a
correção é difícil porque o isolamento das causas é complicado pela vasta amplitude do programa inteiro.
Níveis de Teste
Teste de Integração (cont.)
Abordagens de teste de integração (cont.):
• Incremental (bottom-up):
– O programa é construído e testado em pequenos segmentos, onde os erros são mais fáceis de serem isolados e corrigidos. – As interfaces têm maior probabilidade de
serem testadas completamente e uma
abordagem sistemática ao teste pode ser aplicada.
Níveis de Teste
Teste de Sistema
Realizado por uma equipe de teste (arquiteto de
Níveis de Teste
Teste de Sistema (cont.)
Avalia o software em busca de falhas por meio
da utilização do mesmo, como se fosse um usuário final.
Dessa maneira, os testes são executados nos
mesmos ambientes, com as mesmas condições e com os mesmos dados de entrada que um
usuário utilizaria no seu dia-a-dia de manipulação do software.
Níveis de Teste
Teste de Sistema (cont.)
Requer um ambiente muito semelhante ao da
produção.
Verifica se o software satisfaz seus requisitos.
O propósito primordial é colocar completamente
à prova o software e para isso, deve-se validar: • Requisitos funcionais
• Requisitos não funcionais
Níveis de Teste
Teste de Aceitação
Realizados geralmente por um restrito grupo de
Níveis de Teste
Teste de Aceitação (cont.)
A aceitação do software é realizada por meio de
uma série de testes de caixa preta que simulam operações de rotina do sistema de modo a
verificar se seu comportamento está de acordo com os requisitos.
A aceitação é bem sucedida quando o software
funciona de uma maneira razoavelmente esperada pelo cliente.
Níveis de Teste
Teste de Aceitação (cont.)
A Especificação de Requisitos de Software
contém os critérios de validação que formam a base para uma abordagem ao teste de
aceitação.
Deve-se validar:
• Requisitos funcionais
• Requisitos não funcionais
Tipos de Teste
1 3 2 Quando testar? Como testar? O que testar? Tipos de Teste Teste de Funcionalidade Teste de Regressão Teste de Interface Teste de Desempenho Teste de Carga Teste de Usabilidade Teste de Volume Teste de Segurança Níveis de Teste Teste de Unidade Teste de Integração Teste de Sistema Teste de Aceitação Técnicas de Teste Teste Estrutural Teste FuncionalTipos de Teste
Teste de Funcionalidade
Utilizado para verificar se as funções do sistema
são executadas corretamente conforme
especificado na documentação (ex.: casos de uso) e/ou se as regras de negócio estão
aplicadas.
Simula todos os cenários de uso do software e
garante que todos os requisitos funcionais estejam implementados corretamente.
Tipos de Teste
Teste de Funcionalidade (cont.)
Segue um exemplo simples para teste da
funcionalidade de autenticação em um sistema:
Usuário Senha Resultado Esperado
válido válida Login efetuado com sucesso válido inválida Erro: “Senha inválida”
inválido válida Erro: “Usuário inválido”
em branco válida Erro: “Campo Usuário obrigatório” válido em branco Erro: “Campo Senha obrigatório”
Tipos de Teste
Teste de Regressão
É uma estratégia importante para redução de
“efeitos colaterais”.
Testa o software após modificações, com o
objetivo de verificar se as alterações não afetaram outras partes do software.
Consiste em se aplicar, a cada nova versão do
software ou a cada ciclo de entrega, todos os testes que já foram aplicados nas versões ou ciclos de entrega anteriores.
Tipos de Teste
Teste de Regressão (cont.)
Exercita as novas funcionalidades
implementadas bem como as dependências com outras funcionalidades.
Tipos de Teste
Teste de Interface
Verifica se a navegabilidade e os objetos das
telas funcionam conforme especificados.
Particularmente importante para o
desenvolvimento orientado a objeto, uma vez que os objetos são definidos por suas
Tipos de Teste
Teste de Performance
Teste de Desempenho:
• Testa o software nas situações previstas de pico máximo de acesso e concorrência,
conforme os requisitos não funcionais. • O perfil de funcionamento do software é
monitorado, a fim de identificar e lidar com gargalos de desempenho e processos
Tipos de Teste
Teste de Performance (cont.)
Teste de Carga (stress):
• Destinado a avaliar como o sistema responde em condições atípicas simuladas.
• Pode abranger cargas de trabalho extremas, memória insuficiente, hardware e serviços indisponíveis ou recursos compartilhados limitados.
Tipos de Teste
Teste de Volume
Verifica a capacidade do software em lidar com
um grande volume de dados, como entrada e saída ou residente no banco de dados.
Não focaliza oscilações de processamento.
Abrange estratégias de teste, como, a entrada
de dados do volume máximo em cada campo ou a criação de consultas que retornem todo o
conteúdo do banco ou que tenham tantas restrições que não retorne nenhum dado.
Tipos de Teste
Teste de Usabilidade
Analisa o grau de facilidade de utilização
(manuseio e interatividade) do software do ponto de vista do usuário final.
Enfatizam: fatores humanos, estética,
consistência na interface do usuário, ajuda on-line e contextual, assistentes e agentes,
documentação do usuário e material de treinamento.
Tipos de Teste
Teste de Segurança
Testes destinados a garantir que o software e
os seus dados possam ser acessados apenas por determinados atores.
Objetiva detectar as falhas de segurança que
podem comprometer o sigilo e a fidelidade das informações, bem como provocar perdas de dados ou interrupções de processamento.
Tipos de Teste
Teste de Acessibilidade
Teste destinado a garantir que o software pode
ser utilizado por todas as pessoas,
independente de serem portadoras de deficiência ou não.
Técnicas de Teste
1 3 2 Quando testar? Como testar? O que testar? Tipos de Teste Teste de Funcionalidade Teste de Regressão Teste de Interface Teste de Desempenho Teste de Carga Teste de Usabilidade Teste de Volume Teste de Segurança Níveis de Teste Teste de Unidade Teste de Integração Teste de Sistema Teste de Aceitação Técnicas de Teste Teste Estrutural Teste FuncionalTécnicas de Teste
Estabelecem o aspecto do software a ser
considerado para definição dos requisitos de teste a serem satisfeitos.
Direciona a escolha de critérios para geração de
casos de teste
casos de teste que, ao serem executados,
exercitam os elementos requeridos pela abordagem do teste.
Determinam: Como se enfoca o teste; Como serão
conduzidos os procedimentos de teste; Como se minimiza os esforços; Como se amplia as chances de detecção de defeitos.
Técnicas de Teste
Caso de Teste
Conjunto de dados de entrada e os respectivos
resultados esperados da execução.
São fundamentais para o Teste de Software.
Representa um cenário de teste, uma situação
diferenciada e única de comportamento no
software, com o objetivo de identificar defeitos, erros ou falhas ainda não descobertas.
Técnicas de Teste
Caso de Teste (cont.)
Alguns autores consideram que as ações do
usuário, necessárias para execução da função a ser testada, também fazem parte do caso de
teste.
Toda a ênfase está na maneira de como
identificar todos os possíveis cenários de teste.
A maneira de gerar casos de teste estará
Técnicas de Teste
Ponto de Verificação
Critério para decidir se um determinado estado
Técnicas de Teste
Divisão das técnicas de teste:
Teste Estrutural (Teste Caixa Branca)
Teste Funcional (Teste Caixa Preta)
Técnicas de Teste
Teste Estrutural (Teste Caixa Branca)
Tem por objetivo verificar se as
estruturas internas do software operam de maneira adequada.
É necessário ter acesso ao
código fonte.
Deriva os requisitos de teste
com base na implementação da unidade que será testada.
Técnicas de Teste
Teste Estrutural (Teste Caixa Branca) (cont.)
São exercitados os laços e condições existentes
no código.
Requer a execução dos componentes
elementares do programa, ou partes do programa.
Identifica erros gerados por comandos
incorretos, ausência de comandos, estrutras incorretas, variáveis não definidas, e erros de inicialização e finalizações de loops.
Técnicas de Teste
Técnicas de Teste
Teste Funcional (Teste Caixa Preta)
Testa as funcionalidades com
a finalidade de garantir que os requisitos do software
construído são plenamente atendidos.
Permite a realização do teste
do ponto de vista do usuário final do sistema.
Técnicas de Teste
Teste Funcional (Teste Caixa Preta)
Casos de teste são gerados com base nos
requisitos do sistema a ser testado, como se este fosse uma caixa preta.
São fornecidas as entradas e avaliadas as
saídas para verificar se estão em conformidade com os resultados esperados.
É conduzido olhando-se o software através de
Técnicas de Teste
Teste Funcional (Teste Caixa Preta) (cont.)
Não considera a estrutura interna do código.
Pode detectar os seguintes tipos de erros:
• Funções incorretas;
• Funções não implementadas; • Erros de interfaces;
• Erros de desempenho;
Técnicas de Teste
Técnicas de Teste
Teste Caixa Cinza
Une as duas Técnicas de
Teste (Caixa Branca e Caixa Preta): conhecimento interno do produto aliado às saídas esperadas.
O testador tem acesso a
algumas das operações internas do sistema.
Técnicas de Teste
Teste Caixa Cinza (cont.)
“Testes baseados no conhecimento do
algoritmo, estados internos, arquitetura ou outras descrições mais alto-nível do
comportamneto do programa” [Doug Holffman].
O conhecimento interno do funcionamento pode
ser: Modelo de Arquiterura da aplicação, Modelo de Dados, Diagrama UML ou Diagrama ER.
Técnicas de Teste
Teste Caixa Cinza (cont.)
Para aplicar esta estratégia utilizamos como
suporte, por exemplo, consultas no banco de dados para confirmar que a consulta que os dados da consulta ou filtro que executamos na tela está de acordo com os dados existente no banco.
Técnicas de Teste
Teste Caixa Cinza (cont.)
Dois tipos de problemas podem ser econtrados
durante os testes de caixa-cinza:
• O componente encontra uma falha de algum tipo, fazendo com que a operação seja
abortada – A interface com o usuario irá indicar que ocorreu algum problema.
• Os testes executam com sucesso, mas o
conteudo dos resultados está incorreto – Um sistema processando dados incorretos causa erro no resultado. [Elfriede Dustin]