Eng. de Software: Teste

1 - Visão Geral - Teste de Softwares/Sistemas

Cada vez mais os softwares estão presentes na vida das pessoas, seja em celulares, bancos, aviões, cirurgias, entre outros. Conseqüentemente os mesmos estão se tornando cada vez mais complexos, devido ao surgimento de novas tecnologias. A maioria das pessoas passam por alguma experiência com um software que não funciona como o esperado, softwares que não funcionam corretamente podem levar a muitos problemas e não inspiram confiança aos usuários. Existem vários exemplos de softwares que geraram problemas na fase de produção, trazendo custos altos, má reputação nos negócios e até mesmo colocou em risco a vida de seres humanos como foi o caso de pacientes de um centro médico para veteranos em Washington que receberam doses incorretas de medicamentos devido as informações incorretas exibidas pelo sistema eletrônico de registros. Um outro exemplo foi a pane no sistema do site “ticketsforfun.com.br”, na venda de ingressos do show da Madonna no Brasil, devido ao grande número de acessos simultâneos causando atraso nas respostas e gerando informações múltiplas que o sistema não conseguiu interpretar.

Para evitar problemas como os citados acima é necessário investir em testes, pois, testes em sistemas e em documentações reduzem os riscos da ocorrência de defeitos do software no ambiente de produção onde são encontrados pelo cliente, contribuindo assim para a qualidade dos sistemas, pois, quanto mais cedo os defeitos forem encontrados antes da implantação do sistema o custo de correção é menor em relação ao encontrado da fase de produção. O grande desafio das empresas é produzir softwares com qualidade, em um curto espaço de tempo, com baixo custo e atender as expectativas do cliente com o produto desenvolvido, ou seja, atender aos requisitos impostos. Realizar testes dentro de um processo com metodologia própria é o grande “X” da questão. Os testes têm por finalidade agregar qualidade ao produto podendo também fazer uma medição desta qualidade em relação aos defeitos encontrados, pois, caso sejam encontrados poucos defeitos, o software será mais confiável, com os testes é possível também antecipar a descoberta de falhas e incompatibilidades, reduzindo assim o custo do projeto.

Devido ao projeto de testes estar definido e delimitado de acordo com o cronograma do projeto de desenvolvimento para se obter um nível de cobertura aceitável (Número de Requisitos Mapeados X Número de Requisitos Totais) dos testes é importante que seja dado foco aos pontos críticos do sistema, os quais são de grande importância para o negócio e que caso não sejam tratados adequadamente, podem gerar prejuízos inestimáveis quando o software estiver na fase de produção. A falta de controle ou excesso de preciosismo por parte da equipe de teste pode tornar os testes custosos para o projeto, num momento em que o "custo x benefício" dos testes não compensa mais para a empresa podendo considerar o momento ideal para interrupção dos testes ou interrupção do desenvolvimento do sistema

Testar software não é somente executá-lo com a intenção de encontrar erros, existem várias atividades como: planejamento e controle, escolha das condições de teste, modelagem dos casos de teste, checagem dos resultados, avaliação de conclusão dos testes, geração de relatórios como também a revisão dos documentos. Algumas pessoas confundem a atividade de depuração (debbuging) com a atividade de teste, mas elas diferem. Pois, a atividade de teste pode demonstrar falhas que são causadas por defeitos enquanto a depuração é uma atividade de desenvolvimento que repara o código e checa se os defeitos foram corrigidos corretamente para então ser feito um teste de confirmação por um testador com a intenção de certificar se o mesmo foi eliminado. Então temos o debug para "ver" o código e o "teste" para ver o sistema como um todo, desde o usuário e seu comportamento como o ambiente de uso do sistema e suas variáveis.

Veja outros conceitos chaves utilizados em testes são listados a seguir:

  • Defeito: É o resultado de um erro encontrado num código ou num documento.
  • Erro: É um engano cometido por seres humanos.
  • Falha: É o resultado ou manifestação de um ou mais defeitos.
  • Bug: É um erro de lógica na programação de um determinado software.
  • Testware: Define toda a documentação de teste.
  • Caso de Teste: É uma descrição de um teste a ser executado.
  • Suíte de Testes: Pacote de casos de teste relacionados.
  • Plano de Teste: É o documento de planejamento do projeto de teste.
  • Script de Teste: É uma automação da execução de um caso de teste.



1.1 Ambiente de Testes

O ambiente de testes deve ser definido pelo nível de testes a ser executado, ou seja, quanto maior o nível, mas, o ambiente de teste deverá ser capaz de reproduzir as características do ambiente de produção. O ambiente de testes deve ser isolado, com processamento independente e características similares ao ambiente de desenvolvimento e produção e deve ser restrito à equipe de testes para garantir a integridade dos testes realizados. 


1.2 Dimensões do Teste

Técnica de Teste (Como Testar?): Técnica é o processo que assegura o funcionamento correto de alguns aspectos do software ou de uma unidade do software. Existem dois tipos de técnicas de teste de software: A Estrutural que tende a revelar erros que ocorrem durante a codificação do programa, é conhecida também como técnica de “Caixa Branca” essa técnica não determina o funcionamento correto da aplicação e sim da estrutura. E a Técnica de Teste Funcional que garante o cumprimento dos requisitos pelo sistema essa técnica é conhecida também como técnica de “Caixa Preta”. Cada técnica possui tipos de testes específicos que serão listados abaixo.

  1. 1.2.1 Técnica de Teste Funcional

  • Teste de Requisitos: Verifica se o sistema é executado conforme o que foi especificado. São realizados através da criação de condições de testes e cheklists de funcionalidades.

  • Teste de Regressão: Testa se algo mudou em relação ao que já estava funcionando corretamente, ou seja, é voltar a testar segmentos já testados após uma mudança em outra parte do software. Os testes de regressão devem ser feitos tanto no software quanto na documentação.

  • Teste de Tratamento de Erros: Determina a capacidade do software de tratar transações incorretas. Esse tipo de teste requer que o testador pense negativamente e conduza testes como: entrar com dados cadastrais impróprios, tais como preços, salários, etc., para determinar o comportamento do software na gestão desses erros. Produzir um conjunto de transações contendo erros e introduzi-los no sistema para determinar se este administra os problemas.

  • Teste de Suporte Manual: Verifica se os procedimentos de suporte manual estão documentados e completos, determina se as responsabilidades pelo suporte manual foram estabelecidas.

  • Teste de Interconexão: Garante que a interconexão entre os softwares de aplicação funcione corretamente. Pois, softwares de aplicação costumam estar conectados com outros softwares de mesmo tipo.

  • Teste de Controle: Assegura que o processamento seja realizado conforme sua intenção. Entre os controles estão a validação de dados, a integridade dos arquivos, as trilhas de auditoria, o backup e a recuperação, a documentação, entre outros.

  • Teste Paralelo: Comparar os resultados do sistema atual com a versão anterior determinando se os resultados do novo sistema são consistentes com o processamento do antigo sistema ou da antiga versão. O teste paralelo exige que os mesmos dados de entrada rodem em duas versões da mesma aplicação. Por exemplo: caso a versão mude e os requisitos não, os dados de saída das duas versões devem ser iguais.


  1. 1.2.2 Técnicas de Teste Estrutural

  • Teste de Execução: Verifica os tempos de resposta, de processamento e o desempenho (performance), avaliando o comportamento do software no ambiente de produção e verificando se as premissas de desempenho são atendidas. Em um sistema que possui dez módulos diferentes e que foi desenvolvido por equipes diferentes, o teste de execução avalia o sistema como um todo, é como se o teste de execução fosse um “play” no sistema.

  • Teste de Estresse: Avalia o comportamento do software sob condições críticas, tais como restrições significativas de memória, espaço em disco, etc., ou seja, coloca o software sob condições mínimas de operação.

  • Teste de Recuperação: A recuperação é a capacidade de reiniciar operações após a perda da integridade de uma aplicação como, por exemplo: Ao desligar o computador, queda de energia elétrica, entre outros. O teste de recuperação garante a continuidade das operações após um desastre.

  • Teste de Operação: Avalia o processo e sua execução, são desenhados para estabelecer se o sistema é executável durante a operação normal, é um tipo de teste muito específico, depende do software a ser testado um exemplo é o software de “Call Center”.

  • Teste de Conformidade: Verifica se o software foi desenvolvido de acordo com padrões, normas, procedimentos e guias de TI.

  • Teste de Segurança: Avalia a adequação dos procedimentos de proteção e as contra medidas projetadas, para garantir a confidencialidade das informações e a proteção dos dados contra o acesso não autorizado de terceiros.

1.2.3 Estágios ou Níveis de Teste

É a dimensão do teste que determina a fase do desenvolvimento que se aplica um determinado teste. Esses testes são listados a seguir:

  • Teste de Unidade: É aplicado aos menores componentes de código, é feito pelos programadores e testa as unidades individuais: funções, objetos e componentes.

  • Teste de Integração ou Iteração: É feito ao término de cada iteração para validar a execução das funções referentes aos casos de uso, é feito normalmente pelo analista de sistemas.

  • Teste de Sistema: Executa o sistema como um todo para validar a execução das funções acompanhando cenários elaborados (casos de teste) por um analista de testes em um ambiente de testes.

  • Teste de Aceitação: É feito antes da implantação do software, o cliente é quem executa este tipo de teste no ambiente de homologação, tem como objetivo verificar se o software está pronto para ser utilizado pelos usuários finais.



  1. 1.3 Ciclo de Vida de Testes

O ciclo de vida de testes é composto pelas seguintes etapas: 

Planejamento que é a etapa onde se estabelece o que vai ser testado, em quanto tempo e em que momento os testes serão interrompidos. 

Preparação onde o objetivo é preparar toda a estrutura do ambiente de testes como: equipamentos, configuração de hardware e softwares usados (sistemas operacionais, browsers, etc.), criação da massa de dados de teste, pessoal, ferramentas de automação, entre outros. 

Na etapa de Especificação a atividade principal é elaborar e revisar os cenários e roteiros de testes. 

Na Execução executa-se os testes planejados e registrar os resultados obtidos e por fim na 

Entrega é onde arquiva-se toda a documentação e descreve-se todas as ocorrências do projeto relevantes para a melhoria do processo.

Para se obter resultados positivos nos projetos de testes é necessário que o mesmo inicie desde a especificação dos requisitos do sistema a ser implementado, ou seja, tão logo comece o projeto de desenvolvimento do software inicia-se também em conjunto o projeto de testes de software.

  
  1. 1.4 Papéis e Responsabilidades

Os principais participantes no processo de testes são:
  • Gerente de Teste: Tem como papel defender a qualidade dos testes, planejar e gerenciar os recursos e resolver os problemas que representam obstáculos ao esforço de teste.
  • Líder de Teste: Pessoa responsável pela liderança de um projeto de teste específico, normalmente relacionado a um projeto de desenvolvimento, seja um projeto novo ou uma manutenção.
  • Analista de Teste: Elabora e modela os casos e roteiros de testes. Deve focar seu trabalho nas técnicas de teste adequadas à fase de teste trabalhada.
  • Arquiteto de Teste: É responsável por montar a infra-estrutura de testes como: ambiente, ferramentas, capacitação da equipe, entre outros.
  • Testador: Executa os testes, o mesmo deve observar as condições de teste e respectivos passos de teste documentados pelo analista de teste e evidenciar os resultados de execução.
  • Automatizador: Tem como papel automatizar as situações de teste em ferramentas observando as condições de teste documentadas pelo analista de teste e automatizar a execução desses testes na ferramenta utilizada. Normalmente são gerados scripts de teste que permitam a execução de ciclos de teste sempre que se julgar necessário.

Uma pessoa pode assumir mais de um dos papéis citados acima como, por exemplo, um testador pode exercer o papel de um automatizador de testes também.

  1. 1.5 O Processo de Teste

O Processo de Testes de Software representa uma estrutura das etapas, atividades, artefatos, papéis e responsabilidades buscando padronizar os trabalhos para um melhor controle dos projetos de testes. O objetivo de um processo de teste (com metodologia própria, ciclo de vida, etc.) é minimizar os riscos causados por defeitos provenientes do processo de desenvolvimento como também a redução de custos de correção de defeitos, pois, o custo do software (desenvolvimento + manutenção) tendem a ser memor quando o software é bem testado.


fonte:imaster, puc, imep.

Pronto ! Pronto !
Fechou!







Nenhum comentário: