Estratégias de Teste de Software Uma estratégia de teste de software integra métodos de projeto de casos de teste numa série bem planejada de passos, que resultam na construção de um software bem sucedido A estratégia de teste fornece um roteiro que descreve os passos a serem conduzidos como parte do teste Estratégias de Teste de Software Planejamento de teste Passos a serem executados Esforço Tempo Recursos necessários Projeto de casos de teste Execução de teste Coleta e avaliação de dados Estratégias de Teste de Software Quem faz? Gerente de projeto Analistas de software Especialistas em teste Porque é importante? Se é conduzido ao acaso, tempo é desperdiçado, esforço desnecessário é despendido e erros se infiltram sem serem descobertos. Estratégias de Teste de Software Qual é o produto do trabalho? Uma especificação de teste que documenta abordagem da equipe de software para o teste, definindo um plano que define estratégias e passos específicos de testes e os testes que serão conduzidos Como garanto que fiz corretamente? Revisando a especificação de teste antes do mesmo, avaliando a completeza dos casos e das tarefas de teste Características Genéricas de uma Estratégia de Teste O teste começa em um nível de componente e prossegue para fora, em direção à integração de todo o sistema baseado em computador. Diferentes técnicas de testes são adequadas em diferentes momentos. O teste é conduzido pelo desenvolvedor do software e, para grandes projetos, por um grupo independente. O teste e a depuração são atividades diferentes, mas a depuração deve ser acomodada em qualquer estratégia de teste. Verificação e Validação (V&V) Verificação Conjunto de atividades que garante que o software implementa corretamente uma função específica. “Estamos construindo o produto corretamente?” Validação Conjunto de atividades diferente que garante que o software construído corresponde aos requisitos do cliente. “Estamos construindo o produto certo? Verificação e Validação (V&V) verificação e validação abrangem um amplo conjunto de atividades SQA( garantia da qualidade de SW), que inclui: Revisões técnicas formais; Auditoria de qualidade; Monitoramento de desempenho, Simulação, Estudo de viabilidade, Revisões, Análises e Testes. Estágios do Teste Teste de Unidade: É aplicado para validar os menores elementos testáveis do software, as classes básicas e os componentes, no modelo de implementação. Verifica se os fluxos de dados e de controle estão funcionando como esperado. Estágios do Teste Teste de Integração: É executado para garantir que os componentes do modelo de implementação funcionam apropriadamente quando combinados. O teste de integração revela partes incompletas ou erros na interface entre os pacotes. Estágios do Teste Teste de validação:Os requisitos estabelecidos como parte da análise de requisitos são validados em contraste com o software que acabou de ser construído. Estágios do Teste Teste de sistema: O software os outros elementos do sistema são testados como um todo. Teste de Unidade São testadas : Interfaces Estruturas lógicas de dados Condições limite Caminhos independentes Caminhos de manipulação de erros Teste de Unidade Erros mais comuns: Precedência aritmética incorreta Operações em modo misto Inicialização incorreta Falta de precisão Representação incorreta de uma expressão simbólica Teste de Unidade Problemas quanto a manipulação de erros: 1- a descrição do erro é ininteligível 2- o erro mencionado não corresponde ao erro encontrado. 3- a condição de erro provoca a intervenção do sistema antes da manipulação do erro. 4- o processamento da condição de exceção está incorreto. 5- a descrição do erro não fornece informação suficiente para ajudar na localização da causa do erro. Procedimentos de Teste de Unidade Elaborar um componente pseudocontrolador, ou Pseudocontrolado Pseudocontrolador Programa que aceita dados do caso de teste e passa tais dados ao componente (a ser testado) e imprime resultados relevantes. Pseudocontrolado Substituem módulos que são subordinados (chamados pelo) componente a ser testado. Teste de Integração “Se todos os módulos funcionam individualmente, porque você duvida que vão funcionar, quando colocados em conjunto?” O problema é exatamente esta interface entre os módulos pois: Um módulo pode ter um efeito imprevisto ou adverso sobre o outro; Subfunções quando combinadas podem não produzir a função principal desejada; Teste de integração é necessário pois conduz testes para descobrir erros associados a esta interface. Abordagens do Teste de Integração Big-Bang Integração descendente ( top_down) Integração ascendente (botom_up) Big-Bang: O programa inteiro é testado de uma só vez. Normalmente resulta em caos! Integração descendente ( top_down) É uma abordagem incremental para a construção da estrutura de um programa. Os módulos são integrados movendose descendentemente pela hierarquia de controle, começando com o módulo principal. Os módulos subordinados podem ser incorporados à estrutura primeiro-emprofundidade ou primeiro-em-largura. Integração ascendente (botom_up) Começa a construção e testes com módulos atômicos. Os componentes são integrados de baixo para cima. A necessidade de pseudocontrolados é eliminada Teste de regressão Cada vez que um módulo novo é adicionado como parte do teste de integração, o software se modifica. Estas modificações podem causar problemas em funções que antes funcionavam sem problemas. O teste de regressão é a re-execução de um subconjunto de testes que já foram conduzidos para garantir que as modificações não produzam efeitos indesejáveis Teste de Validação Verifica se o software funciona como esperado pelo cliente. Formas de se validar: Teste da caixa-preta: demonstra conformidade com os requisitos ( definir classes de testes, casos de teste) Revisão da configuração: certificar-se de que todos os elementos da configuração do software tenham sido adequadamente desenvolvidos e catalogados e tenham detalhes que permitam apoiar a fase de suporte ao ciclo de vida. Teste Alfa e Beta: conduzidos pelo cliente. - No teste alfa o desenvolver está presente. - O teste Beta é conduzido pelo cliente em seu ambiente, sem o desenvolvedor estar presente. Teste de Sistema É um série de diferentes testes cuja finalidade principal é exercitar por completo o sistema baseado em computador. Teste de recuperação Força o software a falhar e verifica se a recuperação é adequadamente realizada. Teste de segurança Verifica se os mecanismos de proteção incorporados a um sistema vão protegê-lo de invasão imprópria. Teste de estresse Executa um sistema de modo que demanda recursos em quantidade, freqüência e volumes anormais. Teste de desempenho Testa o desempenho do software durante a execução, no contexto de um sistema integrado. Outras categorias de Teste Tipos de Teste Teste de Funcionalidade: Enfatiza a validação das funcionalidades requeridas nos serviços, métodos e use cases. Teste de Integridade: Avalia a robustez (resistência à falhas) do sistema, a flexibilidade da linguagem, a sintaxe e a usabilidade do código. Tipos de Teste Teste de Carga: Avalia a resposta do sistema em condições extremas de carga de informações. Um teste de carga é, na verdade, um teste de performance voltado para a avaliação do sistema em condições extremas ou de limite. Teste de Performance: Monitora o perfil do tempo, incluindo execução de fluxo, acesso a dados, funcionalidade e chamadas ao sistema para identificar o gargalo e processos ineficazes. Tipos de Teste Teste de Configuração: Assegura as funcionalidades pretendidas dos diferentes hardwares e/ou softwares de configuração. Tipos de Teste Teste de Ciclo de Negócios - Garante que o sistema funciona apropriadamente durante um ciclo de atividades relativas ao negócio e que ao final desse ciclo todos os resultados esperados foram obtidos. Teste de Interfaces do Usuário - Assegura que o comportamento, requisitos, projeto gráfico e navegacional definidos Teste de Recuperação de Falhas Garante que o sistema atende aos requisitos definidos para recuperação de falhas. Normalmente as seguintes situações são abordadas: Falta de energia no cliente; Falta de energia no servidor; Perda da comunicação cliente-servidor; Problemas no sistema operacional; Problemas de endereçamento de memória; Ou qualquer outro erro que faça com que o sistema aborte de forma abrupta sua execução. Tipos de Teste Teste de Instalação: Assegura a instalação, como desejada, nos diferentes hardwares e/ou softwares de configuração e sob diferentes condições como, por exemplo, espaço em disco insuficiente. Teste de Estrutura: Focaliza a avaliação do design. Normalmente é realizado para aplicações voltadas para a Web, garantindo que todos os links estejam conectados. Tipos de Teste Teste de Concorrência: Valida a capacidade do sistema de lidar com múltiplos atores requisitando recursos (dados, memória) ao mesmo tempo Teste de Usabilidade: Focaliza nos fatores humanos, estética, consistência da interface com o usuário, help on-line e agentes, manual e material de treinamento