Gerência - Qualidade e Testes

Introdução ao Teste de Software

Este artigo pretende dar um breve descritivo sobre a atividade de testar softwares, faz uma abordagem das dimensões do teste (Como, o Que e Quando testar), o ciclo de vida, papéis e responsabilidades de uma equipe de testes, o processo de testes como o planejamento e controle, e por fim mostra a definição de uma Fábrica de Testes de Software.

por Carla Almeida



1. Visão Geral

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 [1] 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 [2]. 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[3].

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 afirma a regra 10 de Myers.[4]

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 pelo mesmo. 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 está definido e delimitado a partir do 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. [4]

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. [1]

Outros conceitos chaves utilizados em testes são listados a seguir: [4]

è Defeito: É o resultado de um erro encontrado num código ou num documento.

è Erro: É um engano cometido por seres humanos.

è Falha: É o resultado ou manisfestação de um ou mais defeitos.

è Bug: É um erro de lógica na programação de um determinado software.[6]

è Testware: Define toda a documentação de teste.

è Caso de Teste: É uma descrição de um teste a ser executado. Um ou mais casos de teste costumam estar relacionados a um caso de uso.

è Suíte de Testes: Pacote de casos de teste relacionados. Por exemplo: Suíte de cadastro, suíte de consulta.

è Plano de Teste: É o documento de planejamento do projeto de teste é equivalente ao Plano de Projeto definido pelo PMI (Project Management Institute).

è 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. [4]

Logo adiante no item 5 é feita uma abordagem sobre o funcionamento e o ambiente de uma fábrica de testes.

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”. [4] Cada técnica possui tipos de testes específicos que serão listados abaixo.

è Tipos de Testes (O Que Testar?): [4]

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.

2. Técnicas de Teste Estrutural [4]

· 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 contramedidas projetadas, para garantir a confidencialidade das informações e a proteção dos dados contra o acesso não autorizado de terceiros.

è Estágios ou Níveis de Teste (Quando Testar?): É a dimensão do teste que determina a fase do desenvolvimento 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.

2. 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. [4]

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.

3. 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. [7]

è 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. [8]

è 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. [7]

è 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.[8]

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.

4. 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. [5] 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. [4]

A figura abaixo ilustra o processo de teste de software:

Fonte: imasters

5. Fábrica de Testes

A fábrica de teste - FT é um aprimoramento do modelo de fábrica de software, a criação das fábricas de software incrementou a velocidade de desenvolvimento e manutenção de aplicações, mas não resolveu questões relacionadas à qualidade dos produtos entregues. [10]

A FT é uma estrutura independente de profissionais com alta especialização e capacitação em processos e ferramentas de testes de software, tem como objetivo medir e avaliar a qualidade dos sistemas que estão sendo modificados, adaptados e construídos. O papel de um fábrica de testes é aplicar o maior volume de testes simulando os principais cenários de negócios avaliando antecipadamente a conformidade do produto com as especificações do cliente. [9]

Nas figuras abaixo é possível visualizar a redução no prazo quando se utiliza a fábrica de testes com o processo de desenvolvimento de um software em paralelo com o de testes. No modelo de testes tradicionais a equipe de desenvolvimento consome 35 dias implementando novas funcionalidades solicitadas, após este período é liberada uma versão que será submetida aos testes para avaliar o comportamento do sistema em relação aos requisitos. Como existe uma forte pressão para cumprir os prazos, a equipe de desenvolvimento irá liberar uma versão mesmo que não esteja em condições de ser homologada, ou seja, com erros e com funcionalidades não implementadas. [11]

Fonte: imasters [11].

No modelo da figura abaixo a FT concentra-se em reduzir o ciclo de desenvolvimento, atuando em paralelo à equipe de desenvolvimento, participando ativamente do projeto, planejando antecipadamente as atividades gerando resultados positivos. Uma das vantagens deste modelo é a possibilidade de validação do andamento do projeto através de “releases intermediários”, obtendo um real posicionamento sobre a situação do projeto, apontando exatamente quais funcionalidades estão com mais dificuldades de serem implementadas, possibilitando ações gerenciais antecipadas. [11]

Fonte: imasters [11].

Testes bem planejados e automatizados permitem execuções de testes em grande escala, com rapidez e precisão, detectando as não conformidades do software, iniciando as correções pela equipe de desenvolvimento o mais breve possível.

Referências

[1] BSTQB – Brazilian Software Testing Qualifications Board. http://www.bstqb.org.br/uploads/docs/syllabus_2007br.pdf.

[2] INFO Online. “Defeito de Software põe doentes em perigo”. http://info.abril.com.br/aberto/infonews/012009/16012009-19.shl. Publicado em 16/01/2009.

[3] G1. “Show de Madonna: fãs que tiveram cartão debitado terão ingresso”. http://g1.globo.com/Noticias/Musica/0,,MUL749176-7085,00.html. Publicado em 05/09/2008.

[4] Base de Conhecimento em Teste de Software. 2ª Edição. Rios, Emerson; Cristalli, Ricardo; Moreira, Trayahú & Bastos, Aderson. – S. Paulo, Martins Fontes, 2007.

[5] Alexandre Bartie.Processo de Teste de Software – Parte 01”. http://imasters.uol.com.br/artigo/6102/des_de_software/processo_de_teste_de_software_parte_01/. Publicado em 07/05/2007.

[6] Wikipédia. “Problema do Ano 2000”. http://pt.wikipedia.org/wiki/Problema_do_ano_2000.

[7] Wikipédia. “Teste de Software”. http://pt.wikipedia.org/wiki/Teste_de_software.

[8] Gustavo Quezada. “Papéis e Responsabilidades na Equipe de Testes”. http://www.alats.org.br/Default.aspx?tabid=206&mid=1073&ctl=Details&ItemID=109. Publicado em 05/09/2008.

[9] Alexandre Bartie. Fábrica de Testes – Parte 01. http://imasters.uol.com.br/artigo/4435/des_de_software/fabrica_de_testes_parte_01/. Publicado em 26/07/2006.

[10] Roberto Murillo. A evolução do teste de software. http://imasters.uol.com.br/artigo/9369/des_de_software/a_evolucao_do_teste_de_software/. Publicado em 11/07/2008.

[11] Alexandre Bartie. “Fábrica de Testes Orientada a Resultados” http://imasters.uol.com.br/artigo/4665/des_de_software/fabrica_de_testes_e_orientada_a_resultados/ Publicado em 05/09/2006.

Carla Almeida

Carla Almeida - Possui graduação em Sistemas de Informação. Pós graduada em Gerência de Projetos. Atualmente trabalha numa Fábrica de Testes de Software. Possui a Certificação Brasileira de Testes de Software - CBTS.