Verificação e Validação Patrícia Macedo Joaquim Filipe João Ascenso Engenharia de Software 2005/2006 EST, Setúbal Verificação e Validação Verificação Garante que o software cumpre as especificações Consistência interna “Estamos a construir o produto de uma forma adequada ?” Validação Garante que o software vai ao encontro das necessidades do utilizador Consistência externa “Estamos a construir o produto certo ?” Engenharia de Software 1 Garantir a qualidade... Garantir que cada uma das qualidades do software é alcançada: Por vezes fácil, por vezes difícil Portabilidade vs segurança Por vezes imediata, por vezes necessita de mais tempo: Os objectivos são definidos na especificação dos requisitos São alcançados na implementação Compreensão vs evolutibilidade Por vezes fácil de provar, por vezes difícil Dimensão vs correcção Engenharia de Software O processo ideal Especificação formal completa do problema a resolver Transformação que preserva a correção Desenho, em notação formal Transformação que preserva a correção Código, numa linguagem verificável Transformação que preserva a correção Código de máquina executável Transformação que preserva a correção Execução em hardware verificável Engenharia de Software 2 O que realmente se passa... Mistura de especificações formais e informais Transformação manual Desenho, em notação semi-formal Transformação manual Código, em C++, Java, Ada, … Compilação por um compilador comercial Código máquina Pentium Firmware comercial Execução em hardware comercial Engenharia de Software Primeiro problema Necessidades Especificação actual Especificação “correcta” Por muito mais sofisticado que seja o processo de teste, o problema de criar a especificação inicial persiste Engenharia de Software 3 Segundo problema Comunicações de dados complexa Processamento distribuído E.g. Motor de procura www Objectivos de desempenho exigentes E.g. Transferência de fundos electrónica E.g. Sistema de controlo de tráfego aéreo Processamento complexo E.g. Sistema de diagnóstico médico Por vezes, o sistema de software é extremamente complicado, tornando o processo de teste díficil de realizar Engenharia de Software Terceiro Problema Gestão de Projectos Grupo que garante a qualidade Grupo de desenvolvimento É díficil dividir as responsabilidades entre o grupo de desenvolvimento e o grupo que garante a qualidade Engenharia de Software 4 Quarto problema Regras para garantir a qualidade... Garantir a qualidade deve descobrir as falhas Deve-se verificar o código todos os dias Deve-se comentar o código Deve-se … Responsabiliza os programadores Cria uma imagem de “competição” Garantir a qualidade é encarada de uma forma negativa “Deixa-me apenas programar...” Engenharia de Software Teste de software Testar um módulo, uma conjunto de módulos ou um sistema Utilizar entradas predeterminadas (“test case”) Capturar a saída Comparar a saída com a saída esperada Saída actual igual à esperada => sucesso Saída actual diferente da esperada => erro Engenharia de Software 5 Terminologia Fracasso (failure) Falha (fault) Saída incorrecta ou não esperada Sintoma de uma falha Estado de execução inválido Sintoma de um erro Poderá produzir um fracasso (ou não) Erro (error) Defeito ou anomalia do código fonte Também é referido como um “bug” Poderá produzir uma falha (ou não) Engenharia de Software Objectivos da fase de teste Revelar fracassos/falhas/erros Localizar fracassos/falhas/erros Mostrar a correcção do sistema Dentro dos limites de precisão Melhorar a confiança que o sistema possui um comportamento igual ao especificado (verificação) Melhorar a confiança que o sistema faz ou realiza o desejado (validação) A fase de teste pode ser utilizada para mostar a presença de erros, mas nunca a sua ausência [Dijkstra] Engenharia de Software 6 Níveis de Teste e o modelo de desenvolvimento de (reprinted) software Execute acceptance tests Specify Requirements Execute system tests System/acceptance Requirements test plan & test cases review review/audit Specify/Design Code System/acceptance tests Execute integration tests Design Integration Design test plan & test cases review review/audit Specify/Design Code Integration tests Execute unit tests Code Code reviews (revisited) Specify/Design Unit test plan & test cases review/audit Unit tests Code (source: I. Burnstein, pg.15) Engenharia de Software Testes unitários (reprinted) Teste de unidades de programa ou de componentes Usualmente da responsabilidade do programador. Testes são baseados no código e nas especificações das unidades O principal objectivo é detectar defeitos funcionais e estruturais nas unidades Engenharia de Software 7 Teste de Integração Testa grupos de componentes integrados para criar um sub-sistema. Usualmente da responsabilidade de uma equipa independente de testes. Testes são baseados na especificação do sistema (design) O principal objectivo é detectar falhas nas interfaces entre as unidades. Engenharia de Software Teste de sistema Testar o sistema como um todo Usualmente da responsabilidade de uma equipa independente Testes são baseados no documento de especificação de requisitos. O principal objectivo é avaliar os atributos de qualidade. (parte-se do principio que os requisitos funcionais foram testados nos atestes unitarios e de integração) Engenharia de Software 8 Testes de Aceitação Testar o sistema como um todo Usualmente da responsabilidade do cliente Os testes são baseados na especificação de requisitos e no manual do utilizador. O principal objectivo é verificar se o produto desenvolvido vai de encontro às expectativas do utilizador. Engenharia de Software Tarefas da fase de teste Elaborar “test cases” Escolher “test cases” A áreas especifícas do sistema Especificar entradas Criar as saídas desejadas Nem todos precisam de ser executados simultâneamente Executar os “test cases” De uma forma sistemática, repetível, e precisa Engenharia de Software 9 Duas abordagens Teste “White Box” Teste estrutural Desenho e selecção dos “test cases”, execução baseada na estrutura do código fonte Escala: testa os detalhes específicos Desvantagens: necessita do código fonte Teste “Black box” Teste baseado na especificação Desenho e selecção dos “test cases”, execução baseada nas especificações Escala: Testa o comportamento geral do sistema Desvantagem: Menos sistemático Engenharia de Software Planeamento dos testes Software project (management) plan (note: for many authors, QA ≠ V&V) (adapted from: Ilene Burnstein, Practical Software Testing) Engenharia de Software 10 Documentos de Especificação de testes Documento de de Aceitação Documento de Sistema Documento de de Integração Documento de Unitários 1. 2. 3. 4. especificação dos Testes especificação deTestes do especificação de Testes especificação de Testes Engenharia de Software Conteudo do Documento de Especificação de Testes 1. 2. Identificador do plano Introdução (porque) Descrição geral do sistema a ser testado e/ou das suas unidades Descrição geral dos objectivos dos testes e das tecnicas utilziadas 3. Items a serem testados (o quê) Lista de itens a serem testados : procedimentos, classes, modulos, bibliotecas, componentes sistemasetc Incluir referencias para os documentos onde estes items e seus comportamentos são descritos (documento de especificaçaõd e requisitos e de desenho, manuais de utilizador etc) Listar também os items que não são testados Engenharia de Software 11 Conteudo do Documento de Plano de Testes 4. Caracteristicas a serem testadas (o quê) Caracteristicas funcionais e de qulaidade a sere testadas Lista das caracteristicas a não serem testadas 5. Aproximação (como) Descrição dos vários tipos de teste a aplicar Para cada caracteristica indicar que tipo de teste se irá realizar Indicar as ferramentas e técnicas que vãos er aplicadas. Constragimentos (tempo, dinheiro) 6. Ambiente de teste Software e hardware necessários Engenharia de Software Conteúdo do Documento de Plano de Testes 7. Responsabilidades Funções e responsabilidade de cada teste. 8. Escalonamento (scheduling) Duração de cada tarefa e instante de conclusão 9. Riscos e contigencias Os riscos devem ser identificados e avaliados 10. Custos dos testes Custos divididos por tipo de Custos (custos de palneamento, de concepção, de implementação) 11. Aprovações Datas e assinaturas de quem é responsavel por aprovar so testesResponsabilidades Engenharia de Software 12