Software
Testes de Software
Professor: Charles Leite
Definição de Teste
⚫
Os engenheiros de software tentam construir um software através um modelo conceitual abstrato, tentando obter um produto tangível
⚫
Oportunidades para muitíssimas falhas humanas.
⚫
Com isto surge a necessidade de se
testar!!!Definição de Teste
Testes são atividades
desempenhadas para avaliar a
qualidade do produto e melhorá-lo
depois da identificação dos
defeitos e problemas
Teste de Software
⚫
O processo de teste tem que ter a
intençãode achar erros;
⚫
Um bom caso de teste é aquele que tem grandes probabilidades de achar um erro antes não descoberto;
⚫
Um teste que obtenha sucesso é aquele que consegue descobrir erros;
⚫
Um teste não pode ser simples nem complexo;
⚫
Um teste não pode ser redundante.
Objetivos do Teste de Software
1 / 2 0 1
8 ⚫
Demonstrar ao desenvolvedor e ao cliente que a implementação do software coincide com os requisitos.
• Deve existir pelo menos um teste para cada requisito do usuário
⚫
Descobrir erros ou defeitos no
software onde o comportamento do
software está incorreto, indesejado
ou não está conforme as
especificações.
Só para esclarecer
1 / 2 0 1
8 ⚫ DEFEITO → quando o comportamento do software é indesejado, como interações não desejadas, computações incorretas, ocorrência de dados corrompidos
⚫ ERRO → quando o software deixa de funcionar por causa de alguma falha, que podem ser na implementação, no acesso a banco de dados, na execução do programa, etc
O Grande PROBLEMA:
1 / 2 0 1
8
Apesar dos testes auxiliarem a demonstração de um software está livre de defeitos, não é possível afirmar que o mesmo está completamente correto, sem defeitos em 100% dos casos.
(Dijkstra et al., 1972) “Os testes
só podem mostrar a presença
de erros, não a sua ausência”.
Princípios do Teste de Software
1 / 2 0 1
8 ⚫
Todos os testes tem que ser rastreados pelos requisitos do cliente.
⚫
Os testes tem que ser planejados muito antes de terem sua execução iniciada.
⚫
Os testes devem começar pequenos e depois crescer ao longo processo de testes.
⚫
Testes exaustivos não são possíveis!!!
Testabilidade
1 / 2 0 1
8 ⚫ A capacidade de checar o quão o software é facil de ser testado.
⚫ Está relacionado com as seguintes características:
• Operabilidade
• Observasionalidade
• Controlabilidade
• Decompositividade
• Simplicidade
• Estabilidade
Tipos de Teste
1 / 2 0 1
8 ⚫ Para entendermos as classificações adotadas na literatura sobre Testes de Software consideremos os seguintes tipos de testes:
• Teste de Caixa Branca
• Teste de Caixa Preta
• Teste de Caixa Cinza
Tipos de Teste – Caixa Branca
1 / 2 0 1 8
⚫ Testam PARTE da solução, são escritos e mantidos pelo programador e devem sempre estar atualizados.
⚫ Esta técnica trabalha diretamente sobre o código fonte do componente de software.
⚫ O testador tem acesso ao código fonte da aplicação e pode construir bibliotecas de testes.
⚫ Exs.:Teste de Condição, Teste de Unidade, Teste de Integração, Teste de Componentes, etc.
Tipos de Teste – Caixa Preta
1 / 2 0 1 8
⚫ É ocultado os detalhes do comportamento das partes testadas.
⚫ São testes funcionais e de aceitação, integração.
Ou seja, testam a solução completa.
⚫ Avalia o comportamento EXTERNO do componente de software.
⚫ São fornecidos dados de entrada, o teste é executado, e o resultado é comparada com o resultado PREVIAMENTE CONHECIDO.
• Ex.: Teste de GUIs, Teste de Documentação, Teste de Sistema, Teste de Integração, Teste Unitário.
Tipos de Teste – Caixa Cinza
1 / 2 0 1
8 ⚫ É a mesclagem do uso das duas técnicas.
⚫ Isto envolve ter acesso às
ESTRUTURAS dos dados e
ALGORITMOS a fim de desenvolver casos de testes.
⚫ Também é utilizada para Engenharia Reversa.
Testes Não-funcionais
1 / 2 0 1
8 ⚫
Técnicas existentes para testar aspectos não funcionais.
⚫
É uma forma de testar tolerância e robustez do sistema.
⚫
Exs.: Teste de Desempenho, Teste
de Carga, Teste de Usabilidade e
Teste de Recuperação.
Teste de Unidade
1 / 2 0 1
8 ⚫
Também conhecido com Teste Unitário é a fase em que se testam as MENORES partes do software (Classes, métodos, interfaces).
⚫
Objetivo é encontrar pequenas
falhas no funcionamento dentro de
uma pequena parte do sistema
funcionando, independente do
todo.
Teste de Integração
1 / 2 0 1 8
⚫
Nesta fase o objetivo é encontrar falhas provenientes da integração interna dos componentes.
⚫
Geralmente o tipo de falhas
encontradas são as de transmissão
de dados.
Teste de Sistema
1 / 2 0 1
8 ⚫
Nesta fase o objetivo é executar o sistema sob ponto de vista do usuário final.
⚫
Suas funcionalidades são varridas em busca de se achar falhas em relação ao seu objetivo original.
⚫
Os teste são executados em
condições similares ao dia-a-dia do
usuário final.
Teste de Operação
1 / 2 0 1 8
⚫ O teste é conduzido pelos administradores do ambiente final em que o sistema ou software entrará em ambiente produtivo.
⚫ Nessa fase de teste devem ser feitas simulações para garantir que a entrada em produção do sistema será bem sucedida.
⚫ Envolve testes de instalação, simulações com cópia de segurança dos bancos de dados por exemplo.
Teste de Aceitação
1 / 2 0 1 8
⚫ Também conhecido como Teste de Validação do Sistema.
⚫ São realizados por um grupo restrito de usuários finais do sistema, que simulam operações de rotina do sistema de modo a verificar se seu comportamento está de acordo com o solicitado.
⚫ Teste formal conduzido para determinar se um sistema satisfaz ou não seus critérios de aceitação e para permitir ao cliente determinar se aceita ou não.
Testes
1 / 2 0 1
8 ⚫ Mais 1/3 das falhas poderiam ser evitadas se mais testes fossem feitos.
⚫ Cerca de 50% das falhas são descobertas com o software já em produção.
⚫ Há um prejuízo anual de mais de 60 bilhões de dólares só nos EUA.
→ Com teste de software, este números podiam reduzir DRASTICAMENTE!!!!
processo de teste?
1 / 2 0 1
8 ⚫ O código deve ser SEMPRE verificado.
⚫ É necessário garantir que os requisitos foram implementados de forma correta.
⚫ É necessário que haja segurança na hora de evoluir os sistemas.
⚫ Os testes tem que ser feitos de maneira rápida para entregar rápido o sistema.
⚫ A criatividade é extremamente necessária para explorar o máximo possível com os testes, não usar testes mentirosos.
Ferramentas para Testes
1 / 2 0 1
8 ⚫
JUnit
• Um framework de teste altamente usado e eficaz na criação e execução de testes unitários de código.
• Facilita a criação automática de testes de unidade com apresentação dos resultados, podendo ser verificado se cada método de uma classe funciona da forma esperada, exibindo uma possível falha
Ferramentas para Testes
1 / 2 0 1 8
⚫
JUnit
Ferramentas para Testes
1 / 2 0 1
8 ⚫
JUnit (Vantagens do JUnit)
• Permite a escrita de código rapidamente aumentando a qualidade.
• É elegante e simples.
• O próprio framework checa os resultados dos testes e fornece uma resposta imediata.
• Tudo criado no JUnit é escrito puramente em Java.
• JUnit é uma ferramenta livre.
Ferramentas para Testes
1 / 2 0 1 8
⚫ JUnit (Exemplo Código Java → a ser testado)
Ferramentas para Testes
1 / 2 0 1 8
⚫ JUnit (Exemplo Código Java → O TESTE)
Ferramentas para Testes
1 / 2 0 1 8
⚫ JUnit (Resultado → Plugging Eclipse)
Ferramentas para Testes
1 / 2 0 1
8 ⚫ JUnit (Resultado 2 → Plugging Eclipse)
1 / 2 0 1 8
⚫ IBM Rational Functional Tester (RFT)
• Ferramenta de testes para desenvolvedores e testadores que necessitam de controle para testar aplicações baseadas em Java, Microsoft Visual Studio .NET e Web.
• A ferramenta grava as interações do usuário com a aplicação em teste, assim um script de teste é criado.
• Durante o playback, estes pontos de verificação são utilizados para comparar a informação gravada com a informação em tempo real para assegurar a consistência.
Ferramentas para Testes
1 / 2 0 1 8
⚫ IBM Rational Functional Tester (RFT)
Ferramentas para Testes
1 / 2 0 1
8 ⚫
DBUnit
• Ferramenta prove a configuração de um banco de dados num estado conhecido entre as execuções dos teste.
• Este é um meio excelente de se livrar dos problemas que ocorrem quando um caso de teste corrompe um banco de dados ou causa a falha subsequente de outros testes
1 / 2 0 1 8
⚫
DBUnit (Exemplo JAVA)
public class SampleTest extends DBTestCase { public SampleTest(String name)
{ super(name); }
... // Implementação dos métodos de configuração aqui public void testMe() throws Exception
{ ... // Executa o código testado que modifica o banco aqui // Cria a conexão e pega a tabela
IDataSet databaseDataSet = getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("TABLE_NAME");
// Carrega os valores esperados no Banco por um arquivo XML
IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(new File("expectedDataSet.xml"));
ITable expectedTable =
expectedDataSet.getTable("TABLE_NAME");
// Checa se os valores da Tabela estão coincidindo Assertion.assertEquals(expectedTable, actualTable);
} }
1 / 2 0 1 8
⚫
DBUnit
Ferramentas para Testes
1 / 2 0 1
8 ⚫
Jmeter
• O propósito principal para testes de carga e stress de aplicações.
• Com ela, é possível construir o acesso a um fluxo pré-definido de páginas WEB para simular o acesso por diversos usuários concorrentes.
Ferramentas para Testes
1 / 2 0 1 8
⚫
JMeter
Benefícios de usar testes
1 / 2 0 1 8
⚫
Maior eficiência e testes mais rápidos
⚫
Melhor tomada de decisão
⚫
Alavanque investimentos de
sistemas legados
(para automação de testes)
1 / 2 0 1
8 ⚫ Os testes automatizados não substituem os testes manuais.
⚫ Testes manuais tendem a encontrar mais defeitos do que testes automatizados.
⚫ Testes manuais inspiram mais confiança em relação à qualidade dos testes.
⚫ A automação de testes pode limitar o desenvolvimento de software.