Unidade VI Validação e Verificação de Software Teste de Software Profa. Dra. Sandra Fabbri Conteúdo Técnicas de Teste Funcional Estrutural Baseada em Erros Estratégias de Teste Teste de Unidade Teste de Integração Teste de Validação Teste de Sistema Depuração 2 1
Garantia de Qualidade de Software É um conjunto de atividades técnicas aplicadas durante todo o processo de desenvolvimento. O objetivo é garantir que tanto o processo de desenvolvimento quanto o produto de software atinjam níveis de qualidade especificados. VV&T - Verificação, Validação e Teste 3 Qualidade de Software Conformidade com requisitos funcionais e de desempenho, padrões de desenvolvimento documentados, e características implícitas esperadas de todo software profissionalmente desenvolvido Corretitude Confiabilidade Testabilidade 4 2
Garantia de Qualidade de Software Validação: Assegurar que o produto final corresponda aos requisitos do software. Estamos construindo o produto certo? Verificação: Assegurar consistência, completitude e corretitude do produto em cada fase e entre fases consecutivas do ciclo de vida do software. Estamos construindo corretamente o produto? Teste: Examina o comportamento do produto através de sua execução 5 Definições Defeito Erro Falha Defeito: deficiência mecânica ou algorítmica que se ativada pode levar a uma falha Erro: item de informação ou estado de execução inconsistente Falha: evento notável onde o sistema viola suas especificações 6 3
Defeitos no Processo de Desenvolvimento A maior parte é de origem humana São gerados na comunicação e na transformação de informações Permanecem presentes nos diversos produtos de software produzidos e liberados. (10 defeitos a cada 1000 linhas de código) A maioria encontram-se em partes do código raramente executadas Quanto antes a presença do defeito for revelada, menor o custo de correção do defeito e maior a probabilidade de corrigi-lo corretamente Principal causa: tradução incorreta de informações Solução: introduzir atividades de VV&T ao longo de todo o ciclo de desenvolvimento 7 Teste e Depuração Teste: Processo de executar um programa com o objetivo de revelar a presença de defeitos; ou, falhando nesse objetivo, aumentar a confiança sobre o programa Depuração: é uma conseqüência não previsível do teste. Após revelada a presença do defeito ele deve ser encontrado e corrigido 8 4
Teste de Software Principal Objetivo: refutar a assertiva de que o produto está correto Determinar entradas que façam as saídas obtidas diferirem das saídas esperadas segundo a especificação (busca de um contra-exemplo) É um processo destrutivo, sob o ponto de vista psicológico, contrariamente às demais fases da Engenharia de Software, onde constrói-se um produto 9 Teste de Software Uma das atividades mais onerosas do desenvolvimento de software Atividade essencial para ascensão ao nível 3 do Modelo CMM/SEI Atividade relevante para avaliação de produtos de software (ISO 9126, ISO 14598-5) 10 5
Teste de Software Defeitos e erros "emboscados" no software e não revelados Falhas a se manifestarem na utilização pelos usuários e erros corrigidos durante a manutenção. CUSTOS ALTÍSSIMOS! 11 Teste de Software Atividades de Teste Planejamento Projeto de Casos de Teste Execução de Casos de Teste Análise de Resultados 12 6
Teste de Software Domínio de entrada do programa D Programa em teste P Conjunto de casos de teste? T Quando terminar a atividade de teste? O que significa não encontrar defeito durante a atividade de teste? Software é de alta Qualidade? T é de baixa Qualidade? 13 Teste de Software Quando parar a atividade de teste? Quando terminar o tempo definido para essa atividade Quando terminar o recurso financeiro alocado para essa atividade Quando o que foi definido durante o Planejamento da atividade de teste tiver sido realizado (ou seja, quando as técnicas e critérios de teste planejados tiverem sido aplicados) 14 7
Teste de Software Depois de realizada a atividade de teste pode-se garantir que o software esteja correto? Porque? NÃO!! Isso só poderia ser garantido se fosse aplicado o Teste Exaustivo 15 Teste de Software E o que é o Teste Exaustivo? É aplicar ao programa em teste TODAS as possíveis entradas! Exemplo: suponha um programa que leia o valor de duas notas (inteiras) e calcule a média aritmética. O que significa aplicar o teste exaustivo a esse programa? Significa rodar o programa com todas as possíveis entradas: (0,0); (0,1); (0,2);..(1,0); (1,1); (1,2).. (10,0); (10,1);.(10,10) Ou seja, 121 dados de entrada!!! Pense se a nota fosse um número real de uma casa decimal. Quantos seriam os dados de entrada? 16 8
Teste de Software O Teste Exaustivo sempre pode ser aplicado? Porque não? NÃO!! Pelo exemplo dado, é fácil notar que basta o domínio de entrada ser infinito (por exemplo, o domínio dos números reais), para não conseguirmos aplicar o Teste Exaustivo!! 17 Teste de Software Então, como fazer se o Teste Exaustivo não pode ser aplicado sempre? Temos que criar casos de teste, de forma que saibamos o que estamos testando E como fazemos isso? Aplicando Critérios de Teste 18 9
Projeto de Casos de Teste O Projeto de teste pode ser tão difícil quanto o projeto do próprio produto a ser testado Poucos programadores/analistas gostam de teste; menos ainda de projeto de casos de teste Técnicas de Projeto de Casos de Teste Maneira sistemática e planejada para conduzir os testes Critérios de Teste Quais as características desejáveis que um Conjunto de Casos de Teste T deve possuir? deve ser finito o custo de aplicação deve ser razoável 19 Projeto de Casos de Teste Critério de Teste C Objetivo: Obter, de maneira sistemática, um conjunto T de casos de teste efetivo quanto à meta principal do teste, que é revelar a presença de erros no programa Existem vários critérios de teste que compõem as Técnicas de Teste 20 10
Técnicas de Teste Funcional Estrutural Baseada em Erros A diferença está na fonte utilizada para estabelecer os requisitos de teste O importante não é definir qual usar, mas saber usá-las de forma complementar 21 Técnicas de Teste Funcional ou Teste Caixa Preta baseada na especificação do software Estrutural ou Teste Caixa Branca baseada numa implementação em particular Esses dois serão abordados neste material Baseada em Erros baseada nos erros típicos e comuns cometidos durante o desenvolvimento 22 11
Estratégias de Teste Aspectos genéricos das Estratégias de Teste a atividade de teste inicia-se no nível de módulos e caminha na direção da integração de todo o sistema diferentes técnicas de teste são apropriadas para diferentes situações a atividade de teste, em geral, é realizada pela equipe de desenvolvimento e, no caso de grandes projetos, por um grupo de teste independente as atividades de teste e depuração são atividades diferentes, mas a depuração é necessária em qualquer estratégia de teste 23 Estratégias de Teste Relação entre o processo de desenvolvimento e uma estratégia de teste Engenharia de Sistema Requisitos Projeto Código S R P C U I V TS Teste de Unidade Teste de Integração Teste de Validação Teste de Sistema 24 12
Pontos-Chaves o objetivo do teste é encontrar erros e se eles não forem detectados, o teste não pode afirmar sua ausência testar tudo é impossível as técnicas de teste são complementares, isto é, devem aplicadas conjuntamente a execução do teste é criativa e difícil, pois para testar com eficiência é preciso conhecer o software a fundo 25 13