Testes de Software Testes de Software O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do software tem como objetivo mostrar que um sistema encontra-se conforme sua especificação e satisfaz os requisitos do cliente Testes de Software Relação com Outras Disciplinas A disciplina Teste relaciona-se a outras disciplinas. A disciplina Requisitos captura os requisitos do software, que representam uma das bases principais para a identificação dos testes que devem ser executados. A disciplina Análise e Design determina o design adequado para o software. Essa é outra base importante para a identificação dos testes que devem ser executados. A disciplina Implementação produz builds do software que são validados pela disciplina Teste. Em uma iteração, vários builds são testados, geralmente um por ciclo de teste. A disciplina Ambiente desenvolve e mantém os artefatos de suporte usados durante o teste, como o Guia de Teste e o Ambiente de Teste. A disciplina Gerenciamento planeja o projeto e o trabalho necessário em cada iteração. Descrito em um Plano de Iteração, esse artefato é uma base importante para definir a missão de avaliação correta para o esforço de teste. A disciplina Gerenciamento de Configuração e Mudança controla a mudança dentro da equipe de projeto. O esforço de teste verifica se cada mudança foi efetuada corretamente. Testes de Software Objetivos para a realização de testes Encontrar falhas que comprometam a confiabilidade Encontrar diferenças da especificação original Analisar se o sistema está adequado ao uso Analisar se o desempenho do sistema é satisfatório Encontrar problemas nas interfaces com outros sistemas Encontrar problemas nas interfaces com equipamentos Testes de Software Exemplos de tipos de falhas Especificação Especificação dos requisitos Especificação do projeto e da arquitetura Projeto Interface com o usuário Interface com outros sistemas ou hardwares Interfaces entre módulos e classes Modelos de dados Comunicação de dados Validação de dados Testes de Software Exemplos de tipos de falhas Sincronização em processos distribuídos Conformidade com padrões Código Lógica Cálculo Manipulação de dados Implementação de interfaces Documentação incompleta ou incompreensível Documentação inconsistente Testes de Software Base dos processos de testes Formular um caso de teste segundo um critério estabelecido Determinar os resultados esperados dos casos de teste Rever os casos de teste e seus resultados esperados Comparar os resultados do teste com o resultado esperado Explicar os problemas encontrados de forma que possam ser corrigidos no sistema Testes de Software Técnicas de Testes Caixa-Branca: Técnica de teste que avalia o comportamento interno do componente de software. Essa técnica trabalha diretamente sobre o código-fonte do componente de software para avaliar aspectos tais como: teste de condição, teste de fluxo de dados, teste de ciclos e teste de caminhos lógicos. Os aspectos avaliados nesta técnica de teste dependerão da complexidade e da tecnologia que determinarem a construção do componente de software. A técnica de teste de Caixa-Branca é recomendada para as fases de Teste da Unidade e Teste da Integração, cuja responsabilidade principal fica a cargo dos desenvolvedores do software, que por sua vez conhecem bem o código-fonte produzido. Testes de Software Técnicas de Testes Caixa-Preta: Técnica de teste em que o componente de software a ser testado é abordado como se fosse uma caixa-preta, ou seja, não se considera o comportamento interno do mesmo (código-fonte). Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido. O componente de software a ser testado pode ser um método, uma função interna, um programa, um componente, um conjunto de programas ou componentes ou mesmo uma funcionalidade. A técnica de teste de Caixa-preta é aplicável a todas as fases de teste: teste de unidade (ou teste unitário), teste de integração, teste de sistema e teste de aceitação. Testes de Software Categorias Estrutural baseada no código Funcional (Caixa-branca) (Caixa-preta) baseada na especificação Estatístico Desempenho (performance) enfoque na confiabilidade enfoque na medição de parâmetros de eficiência Stress enfoque nos parâmetros de sobrecarga Testes de Software Estratégias Teste de Unidade Teste de Integração Teste de Sistema (aceitação) Unidade Estrutural Funcional Performance Stress Estatístico Integração Sistema Testes de Software Estratégias Teste de Unidade: Também conhecida como Teste Unitário. É a fase do processo de teste em que se testam as menores unidades de software desenvolvidas( pequenas partes ou unidades do sistema). Os alvos desse tipo de teste são os métodos dos objetos ou mesmo pequenos trechos de código. Assim, o objetivo é encontrar falhas de funcionamento dentro de uma pequena parte do sistema funcionando independentemente do todo. Cada parte do programa é isolada e testada afim de mostrar que funciona individualmente. O teste de unidade não detecta todos os erros de um programa, como por exemplo, erros de integração e problemas de performance. Além disso, pode não ser fácil antecipar todos os casos especiais de input que a “unidade” do programa pode vir a receber. Esse tipo de teste é eficaz apenas se for usado conjuntamente com outras atividades de teste do software. Testes de Software Estratégias Teste de Integração: Na fase de teste de integração, o objetivo é encontrar falhas provenientes da integração interna das unidades de um sistema. Geralmente os tipos de falhas encontradas são de envio e recebimento de dados. Por exemplo, um objeto A pode estar aguardando o retorno de um valor X ao executar um método do objeto B, porém este objeto B pode retornar um valor Y, gerando uma falha. Não faz parte do escopo dessa fase de teste o tratamento de interfaces com outros sistemas (integração entre sistemas). Essas interfaces são testadas na fase de teste de sistema, apesar de, a critério do gerente de projeto, estas interfaces poderem ser testadas mesmo antes de o sistema estar plenamente construído. Testes de Software Estratégias Teste de Sistema: Na fase de Teste de Sistema o objetivo é executar o sistema sob o ponto de vista do seu usuário final, varrendo as funcionalidades em busca de falhas. Os testes são executados em condições similares de ambiente, interfaces sistêmicas e massas de dados àquelas que um usuário utilizará no seu dia-a-dia de manipulação do sistema. De acordo com a política de uma organização, podem ser utilizadas condições reais de ambiente, interfaces sistemáticas e massas de dados. Testes de Software Teste de Aceitação O teste de aceitação do "Usuário" normalmente é a ação de teste final anterior à implantação do software. O objetivo do teste de aceitação é verificar se o software está pronto e pode ser usado pelos usuários finais para executar as funções e as tarefas para as quais o software foi criado. Há outras noções de teste de "aceitação", geralmente caracterizadas por uma entrega de um grupo ou equipe para outro. Por exemplo, um teste de aceitação de build é o teste realizado para aceitar o encaminhamento de um novo build de software do desenvolvimento para o teste independente. Testes de Software O Ciclo de Vida do Teste No ciclo de vida do desenvolvimento de software do RUP, o software é refinado através de iterações. Nesse ambiente de processo, o ciclo de vida do teste tira proveito de uma abordagem iterativa equivalente. Em cada iteração, a equipe de desenvolvimento de software produzirá um ou mais Builds, cada um deles representando uma possível sugestão a ser testada. Testes de Software Fluxo de Trabalho Testes de Software Visão geral das Atividades Testes de Software Artefatos Os artefatos desenvolvidos como produtos das atividades de teste e avaliação agrupados por papel de responsabilidade.