Do que trata o artigo
Este artigo apresenta noções gerais sobre Qualidade de Software e Testes de Softwares e o processo de aplicação de Teste de Software em projetos de pequeno e médio porte, bem como, em projetos desenvolvidos através de Metodologias Ágeis.
Para que serve
O desenvolvimento de software é hoje uma atividade crítica, considerando a ubiquidade dos mesmos no mundo contemporâneo. Processos críticos dependem de software como o controle de equipamentos em uma usina, em um avião ou em um ambiente de cirurgia remota, por exemplo. Garantir que o software atenda aos padrões de qualidade é primordial para o aceite e aplicação do mesmo.
Em que situação o tema é útil
As atividades de teste de software devem ser aplicadas em todas as atividades do processo de desenvolvimento de software, buscando manter a qualidade do produto gerado através de sua verificação e validação. É importante entender que, apesar de auxiliar nos testes de software não garantem a qualidade no processo de desenvolvimento.
Resumo do DevMan
Neste artigo apresento alguns conceitos básicos sobre teste de software e depois dou ênfase no processo de aplicação de testes para equipes que atuam com número reduzidos de membros ou para equipes que atuam com metodologias ágeis. Para tal, são apresentados conceitos da disciplina de teste aplicada sobre o Processo Unificado Aberto, metodologia ágil proposta pela Organização Eclipse, mas que pode ser aplicada a outras metodologias ágeis como Scrum e XP. Apresento ao final do artigo um modelo específico para a documentação de Casos de Testes e Scripts de Testes, que pode ser utilizado para a aplicação de testes de forma manual ou automatizada. A proposta do artigo é auxiliar na definição das suas ações para a aplicação de testes em seu processo de desenvolvimento.
Apesar de todas as técnicas aplicadas no processo de desenvolvimento de software, como Análise de Negócios e Requisitos, Especificação da Arquitetura, Paradigmas de Orientação a Objetos, Gerência de Requisitos e Mudanças, a Engenharia de Software não garante que erros não ocorram em qualquer uma dessas atividades.
A aplicação da Disciplina de Testes visa mitigar o maior número possível de erros, falhas, defeitos ou enganos e assim, eliminar os riscos que podem ameaçar o sucesso do processo de desenvolvimento de software.
Segundo o Padrão IEEE [IEEE1990] podemos definir os termos acima como:
· Defeito (fault) – passo, processo ou definição de dados incorretos, como por exemplo, uma instrução ou comando incorreto;
· Engano (mistake) – ação humana que produz um resultado incorreto, com, por exemplo, uma ação incorreta tomada pelo programador;
· Erro (error) – diferença entre o valor obtido e o valor esperado, ou seja, qualquer estado intermediário incorreto ou resultado inesperado na execução do programa constitui um erro;
◦ erros computacionais – o erro provoca uma computação incorreta mas o caminho executado (sequencias de comandos) é igual ao caminho esperado;
◦ erros de domínio – o caminho efetivamente executado é diferente do caminho esperado, ou seja, um caminho errado é selecionado;
· Falha (failure) – produção de uma saída incorreta com relação à especificação. Neste texto, os termos engano, defeito e erro serão referenciados como erro (causa) e o termo falha (consequência) a um comportamento incorreto do programa.
Apesar de não ser possível, através de testes, provar que um programa está correto, os testes, se conduzidos sistemática e criteriosamente, contribuem para aumentar a confiança de que o software desempenha as funções especificadas e evidenciar algumas características mínimas do ponto de vista da qualidade do produto [BARBOSA2002].
É importante destacar que, mesmo em metodologias iterativas de desenvolvimento de software, as Disciplinas de Arquitetura e Implementação possuem total dependência dos artefatos gerados na disciplina de Análise de Requisitos. Qualquer erro inerente à especificação de requisitos, se não detectada, irá se propagar pelos artefatos das disciplinas posteriores e, nesse caso, também pela Disciplina de Teste. Isso porque, em geral, os casos de testes funcionais possuem uma dependência muito grande da especificação de requisitos. O software pode ser testado exaustivamente. Se os resultados dos testes corroboram o que está posto na especificação dos requisitos, então o software será tomado como correto.
Nesse ponto é importante destacar que uma das metas da Engenharia de Software é oferecer a possibilidade das equipes de desenvolvimento produzir software com “qualidade”. Segundo a definição de [IBM2005], produzir software com qualidade envolve a equipe de analistas compreenderem corretamente os requisitos, bem como, conseguir identificá-los em sua completude.
Segundo [RUP2007] no decorrer do ciclo de vida do produto, para gerenciar qualidade, são realizadas medidas e avaliações do processo e da qualidade do produto. A avaliação da qualidade pode ser feita quando ocorre um evento mais significativo, como o final de uma fase ou iteração, ou pode ocorrer quando um produto de trabalho é criado, como um ensaio de código.
Os principais objetivos da Disciplina de Teste são:
· Localizar e documentar defeitos na qualidade do software;
· Oferecer “feedback” e sugestões sobre a qualidade do software;
· Validar e provar as suposições feitas nas especificações de projeto e requisitos através de demonstração concreta;
· Validar se o software se comporta conforme o projeto;
· Validar se os requisitos são implementados adequadamente.
Segundo [RUP2007], há uma diferença interessante entre a disciplina Teste e as demais disciplinas no processo de desenvolvimento de software. Em essência, a disciplina Teste possui as tarefas de localizar e expor fraquezas no software e para obter o maior benefício, é necessária uma filosofia geral diferente da que é utilizada nas disciplinas Requisitos, Arquitetura e Implementação. A principal diferença é a de que estas três disciplinas são orientadas para a compleção, sendo que a disciplina Teste é orientada para a incompleção.
Tipos de teste
Diversos são os tipos de testes que podem ser aplicados durante o processo de desenvolvimento de software. Em geral, a equipe escolhe o que melhor se adapta ao processo de desenvolvimento aplicado:
· Teste de Função – Também conhecido como Teste Funcional. O Teste de Função é conhecido como Teste Caixa Preta, pois é executado baseando-se apenas nas suas funcionalidades, sem se preocupar na forma como as mesmas foram implementadas. O Teste de Função trata basicamente os dados de entrada e os resultados gerados pela funcionalidade;
· Teste de Segurança – Os Testes de Segurança buscam garantir que os dados manipulados pela funcionalidade estejam acessíveis apenas a quem é de direito;
· Teste de Volume – Os Testes de Volume buscam verificar a capacidade da funcionalidade testada em manipular quantidades massivas de dados, seja em conexões de rede ou em acessos a sistemas gerenciadores de banco de dados, além de testes de processamento massivo de informações em memória;
· Teste de Usabilidade – Os Testes de Usabilidade se preocupam com questões como ergonomia, facilidade de uso, padrões de interface, estética, documentos de treinamento, manuais do usuário etc.;
· Teste de Integridade – Os Testes de Integridade se preocupam em demonstrar a robustez da funcionalidade em foco, sua capacidade de processamento massivo;
· Teste de Estrutura – São os testes com foco na avaliação da adequação do objetivo do teste em relação ao design e formação. Geralmente, esse teste é feito para aplicativos ativados na Web, assegurando que todos os “links” estão conectados, o conteúdo apropriado é exibido e nenhum conteúdo é órfão;
· Teste de Estresse – Um tipo de teste de confiabilidade que enfatiza a avaliação de como o sistema responde em condições normais. O estresse no sistema pode incluir cargas de trabalho extremas, memória insuficiente, serviços e hardware indisponíveis ou recursos compartilhados limitados. Normalmente, esses testes são executados para compreender melhor como e em quais áreas o sistema será dividido, para que os planos de contingência e a manutenção de atualização possam ser planejados e orçados com bastante antecedência;
...