·

Análise e Desenvolvimento de Sistemas ·

Qualidade de Software

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Qualidade e teste de software\nAula 4: Principais Conceitos do Processo de Teste de Software\nI Apresentação\nNesta aula, você irá responder a perguntas como: o que é testar? O que é teste de software? Como melhorar seus testes? Quando terminar os testes?\nVocê conhecerá os papéis e responsabilidades do teste de software, o processo do teste e seus princípios. Saberá ainda como planejar o teste e qual a sua importância.\nI Objetivos\n• Definir o que deve ser testado no software e quando se deve parar de testar;\n• Identificar os processos de teste de software e os princípios do teste;\n• Avaliar como planejar os testes e a importância desse planejamento. O que é testar?\nO teste de software visa garantir a qualidade, minimizando as incertezas e sistematizando os critérios de aceitação. Por meio dele, pode-se avaliar se o software está fazendo o que deveria fazer, de acordo com os seus requisitos, e se não está fazendo o que não deveria fazer.\nEle ajuda a validar se:\n• As expectativas de todas as pessoas envolvidas estão sendo atendidas (e se estão alinhadas);\n• O software apresenta um bom funcionamento (parte disso está relacionada às expectativas implícitas – aquilo que é inerente ao produto).\nAlgumas definições:\n\"Teste é uma parte inevitável de qualquer esforço necessário para desenvolver um sistema de software. \"\n- Howden, 1987.\n\"O teste de software é um conjunto de atividades que podem ser planejadas com antecedência e executadas sistematicamente. \"\n- PRESSMAN, 1985.\n\"Qualquer atividade que, a partir da avaliação de um atributo ou capacidade de um programa ou sistema, seja possível determinar se alcança os resultados desejados. \"\n- Hetzel, 1988.\n\"Processo de executar um programa ou sistema com a intenção de encontrar defeitos. \"\n- Myers, 1979. O teste deve ser utilizado para confirmar a qualidade oriunda de aplicação de um processo de Engenharia de Software.\nEstratégia de teste\nPor que precisamos de uma estratégia de teste de software? O que ela deve incorporar? Essas perguntas são facilmente respondidas assim:\nA Engenharia de Software nos auxilia em muitas situações. Uma delas é a atividade de teste, que é um passo do processo de que visa encontrar ou corrigir erros durante toda a construção do software.\nDevemos incorporar dois tipos de testes:\n1\nTeste de baixo nível\nUtilizado para verificar um pequeno fragmento de código-fonte.\nNesse caso, saberemos se ele foi implementado corretamente.\n2\nTeste de alto nível\nTem a característica de validar as principais funções do sistema com base nos requisitos definidos pelo cliente.\nOs testes podem ser usados para descobrir a presença de erros nos softwares, mas infelizmente não mostram a sua ausência.\nI Processo de teste de software\nNão podemos ter um teste de software sem uma metodologia que seja favorável a esse processo de desenvolvimento, utilizando pessoal técnico qualificado, ambiente e, quando possível, todas as ferramentas adequadas.\nO documento básico para organizar a atividade de testar, aplicada no contexto da empresa, tem que ser uma metodologia de teste.\nTanto o processo de desenvolvimento de software quanto o teste de software tem um ciclo de vida. Vejamos a seguir um exemplo do ciclo de vida para o teste e a especificação de cada um deles. Planejamento: é a parte inicial. Sem planejamento, não se deve realizar o teste. Nesta fase, é feita a elaboração e revisão da estratégia de teste e do plano de teste;\n\nPreparação: paralelamente ao planejamento, precisamos fazer a preparação do ambiente de teste. Para tanto, precisamos incluir equipamentos, rede, pessoal, software e ferramentas.\n\nFases internas do ciclo\n\nProcedimentos iniciais: é nesta fase que efetivamente se faz a elaboração do documento. Nela, estabelece-se um acordo entre as partes envolvidas no projeto de teste (as partes envolvidas são usuários e técnicos). Esse acordo deve conter:\n\n• Objetivo do projeto de teste;\n\n• Pessoal a ser envolvido;\n\n• As responsabilidades de cada um;\n\n• O plano preliminar de trabalho;\n\n• A avaliação dos riscos;\n\n• Os níveis de serviços acordados.\n\nEspecificação: nessa fase, realizamos a elaboração e revisão dos seguintes itens: casos de teste, scripts (para o caso de ferramentas de automação de testes), roteiros de teste e execução dos testes de verificação da documentação do sistema (testes estáticos) que veremos na próxima aula).\n\nExecução: aqui executamos os testes planejados conforme os casos de teste; scripts; roteiros de teste com os correspondentes registros dos resultados obtidos.\n\nEntrega: chegamos à última fase do processo. É aqui que fazemos a entrega do sistema para o ambiente de produção. Como se dá a interação entre os ciclos de vida?\n\nNo nosso exemplo, ficaria assim:\n\nGerência de Requisitos\n\nTeste\n\nEspecificação\n\nExecução\n\nTeste Unitário\n\nExecução\n\nTeste de sistema\n\nTeste de Integração\n\nEntrega\n\nDesenvolvimento\n\nVerificação\n\nDesenho Lógico e específico\n\nConstrução\n\nImplantação\n\nEntrega\n\n1\nTeste das unidades individuais de programa.\n\n2\nTestes destinados a facilitar a integração de unidades.\n\n3\nTestes que usam o sistema concluído. Teste de verificação\n\nDeve garantir a qualidade de todas as etapas dos desenvolvimentos de sistemas. Nesta etapa, são realizadas inspeções (auditorias com foco nas atividades) e revisões (com foco nas documentações) sobre os produtos gerados.\n\nTestes unitários\n\nCada programa ou componente é testado isoladamente para testar sua resposta aos requisitos definidos. Esses testes são realizados no estágio mais baixo da escala de testes e são aplicados nos menores componentes de códigos criados.\n\nTestes de integração\n\nOs programas e componentes são integrados pouco a pouco para testar suas interfaces. São executados em uma combinação de componentes para verificar se eles funcionam corretamente juntos, conforme foram especificados, e também normalmente podem ser feitos desenvolvedores.\n\nTestes de sistema\n\nNesse momento, todos os programas e componentes estão totalmente integrados, formando um sistema. Esses testes visam a execução do sistema como um todo ou um subsistema (parte de um sistema), dentro de um ambiente operacional controlado, o mais próximo possível do ambiente de produção, para validar a exatidão e perfeição na execução de suas funções.\n\nTeste de aceitação\n\nO ambiente é o mesmo ou muito semelhante ao utilizado nos testes de sistema. São os testes finais de execução do sistema, realizados pelos usuários.\n\nNesses testes é verificado se a solução atende aos objetivos do negócio e aos seus requisitos definidos inicialmente, no que diz respeito à funcionalidade e dentro de características de usabilidade, preocupando-se também com a interação humano/computador, antes da sua utilização no ambiente de produção. Atenção\n\nÉ importante lembrar que, conforme vimos na aula anterior, segundo Myers, o custo de correção de defeitos tende a aumentar quanto mais tarde o defeito é detectado.\n\nDefeitos encontrados durante a produção tendem a custar muito mais que defeitos encontrados em modelos de dados e em outros documentos do projeto do software.\n\nQuais os benefícios que cada um desses testes pode trazer?\n\nTestes unitários\nPodem remover entre 30% e 50% dos defeitos dos programas.\n\nTestes de sistemas\nPodem remover entre 30% e 50% dos defeitos remanescentes, mas mesmo assim, os sistemas poderão ir a produtividade com aproximadamente 49% de defeitos.\n\nRevisões de códigos\nPodem reduzir entre 20% e 30% dos defeitos. Princípios de teste de software\n\nPensando no teste como parte fundamental do ciclo de vida de um software, vamos mostrar os sete princípios fundamentais que envolvem o processo de teste que devem servir como um guia geral, tanto para testadores quanto para desenvolvedores.\n\nVeremos mais adiante que ambos participam efetivamente do processo de amadurecimento do sistema. 1º Princípio: teste demonstra a presença de defeitos\nOs testes conseguem identificar a existência de falhas, mas não podem garantir a ausência delas.\n\nMesmo se nenhum erro for identificado em uma bateria de testes, não é possível afirmar que o software está livre de falhas.\n\n2º Princípio: teste exaustivo é impossível\nDeve-se calcular o esforço dos testes baseando-se nos riscos e prioridades.\n\n3º Princípio: teste antecipado\nAo desenvolver um software, as atividades de teste devem começar o mais cedo possível no ciclo de vida do desenvolvimento do software. Assim diminuímos o custo das correções e possibilitamos que erros de design, requisitos e arquitetura sejam encontrados no momento ideal.\n\nLogo que os requisitos ou modelagem do sistema estiverem prontos, é possível começar o trabalho de modelagem do plano de testes.\n\nQuanto antes uma falha for identificada no ciclo de vida de um sistema, mais barata e mais simples será a correção.\n\n4º Princípio: agrupamento de defeitos\nA maioria das falhas encontradas durante a execução dos testes está concentrada em um número pequeno de módulos. Sempre existe uma área do software que é responsável pelo maior número de erros.\n\n5º Princípio: paradoxo do pesticida\nUm conjunto de testes, se executado várias vezes, pode não mais detectar novas falhas. Para contornar esse problema, os testes devem ser frequentemente revistos e atualizados.\n\nEles devem ser reformulados para abordar novas áreas do sistema e assim aumentar a chance de detectar novas falhas.\n\nOs testes precisam ser revisitados com frequência.\n\n6º Princípio: teste é dependente do contexto\nDiferentes tipos de aplicações exigem a aplicação de técnicas diferentes de teste.\n\nPor exemplo: um sistema bancário deve ser testado de maneira diferente de uma rede social. Há questões de segurança que devem ser mais precisamente abordadas no primeiro caso.\n\nDa mesma forma, testes web são elaborados com foco diferente dos testes de aplicações desktop.\n\n7º Princípio: a ilusão da ausência de defeitos\nIdentificar e corrigir os problemas de um software não garante que ele está pronto. Questões a serem respondidas:\n• Os testes foram elaborados para identificar todas as possíveis falhas?\n• O sistema atende às necessidades e expectativas dos usuários?\n\nOu seja, existem outros fatores que devem ser considerados para garantir a qualidade do sistema.\n\nNão adianta o sistema ser correto funcionalmente, mas não atender à real necessidade do usuário.\n\nTodos os princípios são importantes, porém entre os princípios listados, podemos citar que os números 3 e 7 representam os principais aspectos da atividade de teste. A busca por antecipar cada vez mais as possíveis falhas da aplicação e assegurar que o sistema entregue atenda às reais necessidades do cliente, agregando valor ao seu negócio, é constante.