Ciência da Computação ENGENHARIA DE SOFTWARE Teste de Software Prof. Claudinei Dias email: [email protected] Engenharia de Software 2011-2 Introdução • Teste é um conjunto de atividades que pode ser planejado antecipadamente e realizado sistematicamente. • É possível definir um “template” (esqueleto), ou seja um conjunto de passos ao qual é possível alocar técnicas de projeto de casos de teste e estratégias de teste específicos. Engenharia de Software 2011-2 2/31 Fluxo de informações de teste Configuração de Software Resultados de Teste Atividades de Teste Configuração de Teste • Avaliação Depuração Dados da Taxa de Erros Resultados Esperados Modelo de Confiabilidade O processo de depuração é a parte mais imprevisível do processo de teste. Um erro que indique uma discrepância de 0,01% entre resultados esperados e reais pode demorar uma hora, um dia ou um mês para ser diagnosticado e corrigido. Engenharia de Software Erros 2011-2 Confiabilidade Prevista 3/31 Técnicas de Teste de Software • Conhecendo-se a função específica que um produto projetado deve executar, testes podem ser realizados para demonstrar que cada função é totalmente operacional (teste de caixa preta - “black box”) • Conhecendo-se o funcionamento interno de um produto, testes podem ser realizados para garantir que “todas as engrenagens”, ou seja, que a operação interna de um produto tem um desempenho de acordo com as especificações e que os componentes internos foram adequadamente postos à prova (teste de caixa branca - “white box”) Engenharia de Software 2011-2 4/31 Teste de Caixa Preta • Teste de caixa preta refere-se aos testes realizados nas interfaces do SW (a entrada é adequadamente aceita e a saída é corretamente produzida com a integridade das informações externas mantida). Engenharia de Software 2011-2 5/31 Teste de Caixa Branca Teste de caixa branca baseia-se num minucioso exame dos detalhes procedimentais, através da definição de todos os caminhos lógicos possíveis. Infelizmente estes testes apresentam problemas logísticos, uma vez que o número destes possíveis caminhos lógicos pode ser muito grande, o que levaria a um tempo infinito. Entretanto este tipo de teste não pode ser desprezado como pouco prático, podendo-se optar por um número limitado de opções Engenharia de Software 2011-2 6/31 Teste de caminho básico • É uma técnica de teste de caixa branca que possibilita que o projetista do caso de teste derive uma medida de complexidade lógica de um projeto procedimental e use essa medida como guia para definir um conjunto básico de caminhos de execução. Notação de grafo de fluxo: – notação simples para representação do fluxo de controle, que descreve o fluxo lógico: Seqüência while if Engenharia de Software 2011-2 case 7/31 Visão da Qualidade • Teste x Verificação x Validação – Verificação: “Estamos construindo certo o produto?” – Validação: “Estamos construindo o produto certo?” • Teste x Qualidade – Qualidade é um conceito mais amplo – Teste gera informação sobre qualidade do produto Engenharia de Software 2011-2 8/31 Estratégias de Teste de Software Engenharia de sistemas Requisitos Projeto Código S R D C U I • • • • Estratégia de teste Teste de unidade Teste de integração V Teste de validação ST Teste de sistema Teste de Unidade Teste de Integração Teste de Validação Teste de Sistema Engenharia de Software 2011-2 9/31 Testes de Unidade • Concentra-se no esforço de verificação da menor unidade de projeto de SW - o módulo. Baseia-se quase sempre na técnica de caixa branca (com menor incidência na O.O.) e pode ser realizado em paralelo para múltiplos módulos. Engenharia de Software 2011-2 10/31 Testes de Integração • O objetivo é, a partir dos módulos testados no nível de unidade, construir a estrutura de programa que foi determinada pelo projeto realizando-se ao mesmo tempo, testes para descobrir erros associados a interfaces (entradas e saídas entre módulos devem se compatibilizar). Engenharia de Software 2011-2 11/31 Testes de Validação • São definidas expectativas razoáveis na Especificação de Requisitos de SW, que descreve todos os atributos do SW visíveis ao usuário. • A validação é bem-sucedida quando o SW funciona de uma maneira razoavelmente esperada pelo cliente. Engenharia de Software 2011-2 12/31 Testes de Sistema • É uma série de diferentes testes, cujo propósito primordial é pôr completamente à prova o sistema baseado em computador. Engenharia de Software 2011-2 13/31 Teste de Sistema • Teste de recuperação: é um teste de sistema que força o SW a falhar de diversas maneiras e verifica se a recuperação é adequadamente executada. • Teste de segurança: tenta verificar se todos os mecanismos de proteção embutidos em um sistema o protegerão, de fato, de acessos indevidos. • Teste de estresse: executa o sistema de uma forma que exige recursos em quantidade. Essencialmente o analista tenta destruir o programa. • Teste de desempenho: é idealizado para testar o desempenho de “runtime” do SW dentro do contexto de um sistema integrado. Engenharia de Software 2011-2 14/31 Test-Driven Development (TDD) • Desenvolvimento guiado pelos testes – Só escreva código novo se um teste falhar – Refatore até que o teste funcione – Alternância: "red/green/refactor" - nunca passe mais de 10 minutos sem que a barra do JUnit fique verde. • Técnicas – "Fake It Til You Make It": faça um teste rodar simplesmente fazendo método retornar constante – Implementação óbvia: se operações são simples, implementeas e faça que os testes rodem Engenharia de Software 2011-2 15/31 Plugin JUnit (BlueJ) Engenharia de Software 2011-2 16/31 Plugin JUnit (Eclipse) Engenharia de Software 2011-2 17/31 Ferramentas para Testes Caso específico: resposta de servidores Web Verificar se uma página HTML ou XML contém determinado texto ou determinado elemento Verificar se resposta está de acordo com dados passados na requisição: testes funcionais tipo "caixa-preta“ Soluções (extensões do JUnit) HttpUnit e ServletUnit: permite testar dados de árvore DOM HTML gerada JXWeb (combinação do JXUnit com HttpUnit) permite especificar os dados de teste em arquivos XML arquivos de teste Java são gerados a partir do XML XMLUnit extensão simples para testar árvores XML Onde encontrar: (httpunit|jxunit|xmlunit).sourceforge.net Outras: Cactus, JUnitPerf, JUnitEE… Engenharia de Software 2011-2 18/31 Ferramenta para Testes de Performance JUnitPerf (www.clarkware.com) Coleção de decoradores para medir performance e escalabilidade em testes JUnit existentes TimedTest Executa um teste e mede o tempo transcorrido Define um tempo máximo para a execução. Teste falha se execução durar mais que o tempo estabelecido LoadTest Executa um teste com uma carga simulada Utiliza timers para distribuir as cargas usando distribuições randômicas Combinado com TimerTest para medir tempo com carga ThreadedTest Executa o teste em um thread separado Engenharia de Software 2011-2 19/31 Processo de Teste de Software na visão do RUP Engenharia de Software 2011-2 20/31 Planejamento de Testes • Definição de uma proposta de testes baseada nas expectativas do Cliente em relação à : – prazos, – custos – qualidade esperada • Possibilidade de dimensionar a equipe e estabelecer um esforço de acordo com as necessidades apontadas pelo Cliente. Engenharia de Software 2011-2 21/31 Especificação dos Testes • Identificação dos casos de testes que deverão ser construídos e/ou modificados em função das mudanças solicitadas pelo Cliente. Engenharia de Software 2011-2 22/31 Especificação dos Testes (Categorias) Engenharia de Software 2011-2 23/31 Modelagem dos Testes • Identificação de todos os elementos necessários para a implementação de cada caso de teste especificado: – modelagem das massas de testes – definição dos critérios de tratamento de arquivos (descaracterização e comparação de resultados). Engenharia de Software 2011-2 24/31 Preparação do Ambiente • Conjunto de atividades que visa a disponibilização física de um ambiente de testes para sofrer a bateria de testes planejadas nas etapas anteriores de forma contínua e automatizada (sem intervenção humana). Engenharia de Software 2011-2 25/31 Execução dos Testes • Execução e conferência dos testes planejados, de forma a garantir que o comportamento do aplicativo permanece em "conformidade" com os requisitos contratados pelo Cliente. Engenharia de Software 2011-2 26/31 Análise dos Resultados • Análise e confirmação dos resultados relatados durante a fase de execução dos testes. • Os resultados em "não-conformidade" deverão ser "confirmados" e "detalhados" para que a Fábrica de Software realize as correções necessárias. • Já os em "conformidade" deverão ter seu resultado "POSITIVO" reconfirmado. Engenharia de Software 2011-2 27/31 Equipes de Teste Engenharia de Software 2011-2 28/31 Norma IEEE 829-1998 • A norma IEEE 829-1998 descreve um conjunto de documentos para as atividades de teste de um produto de software. Os documentos cobrem as tarefas de planejamento, especificação e relato de testes. Engenharia de Software 2011-2 29/31 Bibliografia http://msoo.pbworks.com BIBLIOGRAFIA BÁSICA: PRESSMAN, R.S. Engenharia de Software. Mc Graw Hill, 5ª Edição 2001. SOMMERVILLE,I. Engenharia de Software. Addison Wesley, 6ª Edição 2003. REZENDE,D.A. Engenharia de Software e Sistemas de Informação. Brasport, 2ª edição. BIBLIOGRAFIA COMPLEMENTAR: WEBER,K.C. et all. Qualidade e produtividade em Software. Makron Books, 1999. ROCHA,A.R.C et all; Qualidade de Software. Editora Linarth, 1999. Anais do SBES - Simpósio Brasileiro de Engenharia de Software. SEI. SOFTWARE ENGINEERING INSTITUTE. CMMI for Development (CMMI-DEV), Version 1.2, Technical report CMU/SEI-2006-TR-008. Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2006. SOFTEX. MPS.BR - Melhoria de Processo do Software Brasileiro. Guia Geral, versão 1.2. 2007. ABNT – ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR ISO/IEC 12207 – Tecnologia de informação Processos de ciclo de vida de software. Rio de Janeiro, 1998. ISO/IEC - The International Organization for Standardization and The International Electrotechnical Commission, ISO/IEC TR 15504 Software Process Assessment. 1998. Engenharia de Software 2011-2 30/31 Ciência da Computação ENGENHARIA DE SOFTWARE Teste de Software Prof. Claudinei Dias email: [email protected] Engenharia de Software 2011-2