Núcleo de Excelência em Testes de Sistemas Fundamentos de Teste de Software Módulo 2- Teste Estático e Teste Dinâmico Aula 3 Teste Estático
SUMÁRIO INTRODUÇÃO... 3 1. Definição... 3 2. Custo Versus Benefício... 4 3. Tipos... 4 REVISÃO... 5 1. Processo de revisão... 7 2. Tipos de Revisão... 8 Informal... 9 Walkthrough Passo a passo... 9 Revisão técnica...... 11 Inspeção...... 12 ANÁLISE ESTÁTICA... 15 CONCLUSÃO... 17 2
INTRODUÇÃO O segundo módulo do curso apresenta com maior detalhamento os procedimentos que estão relacionados ao Teste Estático e ao Teste Dinâmico. Este capítulo irá focar o Teste Estático, tico, contemplando sua definição, objetivos, benefícios e técnicas associadas. 1. Definição As técnicas de teste estático avaliam o software sem executá-lo, com o intuito de encontrar erros e defeitos o quanto antes no ciclo de vida de um projeto e fornecer informação sobre a qualidade do que está sendo produzido. Teste Estático, ou Revisão, traz o sentido de ter uma segunda pessoa avaliando algo que foi produzido, como um processo para buscar defeitos e eliminá-los antes que os mesmos se tornem um problema, gerando atrasos no cronograma e orçamento do projeto. Nesse caso, a correção se torna mais fácil e mais barata de ser realizada do que se ocorresse durante a execução do teste. O teste estático pode ser executado em qualquer artefato que possa ser lido como, por exemplo, os documentos organizacionais: políticas, estratégias, planos e processos. Além disso, também pode ser feito nos planos de projeto de garantia da qualidade e de gerência de configuração. Especificação de requisitos e documentos relativos ao processo de teste podem, ainda, ser considerados. Figura 1 Características da Revisão Estática 3
As revisões estão presentes nos modelos de maturidade CMMI, ISO 15504 (SPICE), ISO 9000, TMMI e no MPT.Br onde observamos a relevância dessa prática para o desenvolvimento maduro e otimizado do software. 2. Custo Versus Benefício Existe um custo associado às atividades de teste estático, haja vista que se gasta tempo para executá-las. Há uma regra de mercado que sugere dedicação de 15% do orçamento na fase de desenvolvimento, para as atividades de teste estático. Essas atividades incluem definição, execução, coleta de dados, análise das métricas e melhoria do processo. Por outro lado, os benefícios são identificados através do gráfico, visto que o quanto antes os erros são identificados, menos custosa será a correção dos mesmos. 3. Tipos Figura 2 Custo para correção do erro VS. Fase em que o erro foi encontrado Existem diversos tipos de teste estático encontrados na literatura, e variam de acordo com o autor. No entanto, iremos focar a Revisão e a Análise Estática. A Revisão é usada para remover erros e ambigüidades nos documentos, antes de serem utilizados no processo de desenvolvimento. Já a Análise Estática permite que o 4
código seja avaliado em termos de defeitos estruturais ou fraquezas sistemáticas que possam gerar defeitos. Figura 3 Tipos de Teste Estático A escolha de quando se utilizar uma determinada técnica vai depender do nível de formalidade requerido, custo e time disponível para realizá-lo, e deve ser feita para atender os objetivos do negócio diante do retorno sobre investimento esperado. Os dois tipos de teste estático serão explicados em detalhes a seguir. REVISÃO A revisão é um exame sistemático de um documento por uma ou mais pessoas com o objetivo de encontrar e remover erros. Pode ser vista como a primeira forma de teste no ciclo de vida do software, por exemplo: Quando você entrega um documento não finalizado para que um colega possa revisar, estamos falando de uma revisão simples. A revisão de um código, tomando como base padrões, pode prevenir a presença de defeitos durante a execução de teste, e também pode ser considerada como uma revisão. 5
Figura 4 Exemplos de revisão Pode ser usada para testar qualquer coisa que foi escrita ou digitada, incluindo documentos como especificação de requisitos, projetos, código, planos e casos de teste. Além disso, prioriza encontrar defeitos e uniformizar a compreensão do time para um determinado artefato. Como benefícios da revisão, podemos citar: Aumento da produtividade do desenvolvimento porque a correção antecipada de defeitos vai ajudar a garantir que os produtos de trabalho estejam claros e sem ambigüidades, fazendo com que o desenvolvedor gaste o menor tempo possível na escrita do código. Haja vista que alguns defeitos foram removidos antes da execução do código, será encontrada durante a execução do código menor quantidade de defeitos. Redução do tempo e custo do teste através da remoção dos atrasos da execução do teste, que aumentam quando os defeitos são encontrados após se tornarem falhas e o testador tem que esperar pelos ajustes antes de entregar o software. Redução do custo de suporte pelo fato de que menos defeitos no produto final irão garantir menor custo para mantê-lo. Melhoria na comunicação, visto que autores e pares discutem e refinam o produto de trabalho em questão para garantir que todos tenham o mesmo entendimento do projeto, a clareza e a ausência de ambigüidade. 6
1. Processo de revisão Figura 5 Benefícios da Revisão O processo de revisão pode variar de acordo com o nível de formalidade que está relacionado com a maturidade do processo, a necessidade de de auditorias ou regulamentos específicos de um projeto. Todas as revisões, das formais às informais, apresentam os mesmos elementos básicos de um processo de revisão, que compreende: Primeiramente, o fato de que o documento a ser revisado é estudado pelos revisores. Depois, os revisores identificam problemas e questões relacionados, informando ao autor verbalmente ou através de um documento, contemplando o relatório consolidado. Finalmente, o autor decide a ação a ser tomada para cada comentário feito pelo revisor e atualiza o relatório. 7
Figura 6 Elementos básicos do processo de revisão No processo de revisão formal, passos adicionais são incluídos e mais atenção é dada para a documentação e métricas relativas à revisão. 2. Tipos de Revisão O tipo de revisão a ser escolhido pode variar de acordo com os objetivos do projeto, e pode ser informal, passo a passo, revisão técnica ou inspeção. A pirâmide a seguir está estruturada de forma que os níveis de maior formalidade estão na parte mais baixa da pirâmide, apresentando: 8
Figura 7 Tipos de revisão e sua formalidade Cada tipo será descrito detalhadamente, a seguir. Informal Revisão informal é um tipo de revisão estática com menor grau de formalidade e seu objetivo pode variar de acordo com a necessidade do autor. Pode focar a revisão da escrita e gramática de um determinado artefato, revisão da estrutura de um produto ou até mesmo o conteúdo profissional do mesmo. Não há restrições sobre o momento em que a mesma será realizada e o autor define o melhor momento, podendo acontecer quando o artefato ainda está em rascunho, para garantir que sua estrutura está e será desenvolvida de forma correta, ou no artefato já finalizado. Figura 8 Características da revisão informal Não existe um processo formal que determine os passos, e esta revisão pode ser documentada, mas não é obrigatória. O feedback da revisão para o autor pode ser verbal ou através de notas no próprio documento. Os resultados desse tipo de revisão variam de acordo com o revisor, haja vista que a contribuição está diretamente ligada às habilidades da pessoa que realiza a revisão, podendo ou não possuir o conhecimento necessário para analisar o artefato em questão. Uma desvantagem observada é que normalmente não se faz registro sobre a revisão informal, ficando difícil de analisar a efetividade da mesma no projeto. É uma forma de baixo custo e pode ser feita em par. Walkthrough Passo a passo É a apresentação feita pelo autor, passo a passo, ou seja, linha por linha, de um documento durante a reunião. 9
Tem o objetivo primário de encontrar defeitos e, como objetivo secundário, podemos citar a uniformização de um determinado conhecimento refletido no conteúdo do documento revisado. Podem acontecer em fases específicas do projeto como, por exemplo, nas etapas iniciais do processo de desenvolvimento para garantir que o autor está seguindo o caminho esperado pelo projeto. Figura 8 Características da revisão Passo a Passo Qualquer documento pode ser objeto dessa revisão e seu processo de condução, normalmente, não é muito formal, mas geralmente planejado. O processo se inicia com a convocação dos participantes que, por sua vez, podem receber os documentos antes da reunião para que se preparem. No entanto, uma preparação formal não é obrigatória. A reunião faz parte do processo onde, nesse momento, o autor age como o apresentador do documento e o restante do grupo atua como revisor do mesmo. Em caso de conflitos, um facilitador natural pode estar presente. Durante a reunião, o autor passa, linha a linha, pelo documento, e os defeitos, omissões, possibilidades de mudanças, sugestões de melhorias e alternativas são levantadas e discutidas. A reunião não deve ultrapassar 2 horas e, após a mesma, um relatório informal deve ser produzido sumarizando os itens levantados para que as correções no documento sejam realizadas pelo autor. 10
Figura 9 Papéis e duração da revisão informal Revisão técnica Revisão técnica é uma atividade de discussão que tem como foco alcançar consenso para um determinado documento técnico, ou seja, não gerencial, e também é conhecida como revisão por pares. Pares, nesse contexto, são pessoas que possuem o mesmo papel no processo de desenvolvimento de software, com perfis análogos que possam atuar e avaliar o artefato com perspectivas similar a do autor. O objetivo primário da revisão técnica é encontrar defeitos e deve ser planejada para acontecer algumas vezes no ciclo de vida de desenvolvimento do software. Seu processo é razoavelmente formal, assim como a definição dos papéis que a compõe, onde são necessários: moderador, apresentador, revisor, autor e redator. 11
Figura 10 Características da Revisão Técnica O gerente, inicialmente, agenda a preparação e reunião de revisão, informando qual artefato será analisado. A presença de um gerente, para decidir se o documento está apto para ser revisado, é indispensável nesse processo. Os revisores, em seguida, precisam analisar o material em busca de defeitos, antes da reunião iniciar e podem, opcionalmente, fazer o uso de checklists para essa preparação, consolidando uma lista do que foi encontrado. Durante a revisão o moderador apresenta os objetivos da reunião e folheia, página por página, o documento revisado. Nesse momento são levantadas e discutidas as questões e dúvidas do artefato. Ao final, deve haver um consenso sobre o que deve ser ajustado no documento e as decisões ficam registradas em um relatório. A presença do autor nessa reunião deve ser para esclarecimento de dúvidas e não deve atuar como um defensor do documento. A desvantagem do método está relacionada com o fato de que o resultado depende dos revisores e suas habilidades técnicas. Além disso, se nenhum relatório de métricas for definido, não será possível a análise quantitativa dos resultados. Inspeção A inspeção é um tipo formal e bem definido de teste estático e essa técnica foi introduzida em 1972 pela IBM com dois objetivos claros: a melhoria do produto e a do processo. O principal objetivo da inspeção é encontrar defeitos e assim contribuir para a melhoria, e possui algumas características: 12
Figura 11 Histórico e objetivos da Inspeção O processo seguido deve ser formalmente descrito. Deve possuir todos os papéis esperados para uma inspeção. Material de consulta deve ser sempre utilizado. O revisor deve buscar tipos específicos de erros. Métricas devem ser definidas e coletadas. A melhoria do processo é parte integrante do processo. O moderador e os revisores devem ser treinados. O processo de inspeção contempla atividades de: Planejamento, devendo considerar a natureza do documento (tamanho e complexidade), as pessoas envolvidas e seus respectivos papéis, as métricas que serão coletadas e o cronograma para a realização da inspeção. Visão Geral contempla a introdução ao material que será revisado, apresentação do cronograma da inspeção, definição dos papéis e entrega do documento e referência para revisão do mesmo. Preparação é a atividade em que cada revisor realiza a verificação do artefato e deve apontar o tempo gasto e os incidentes encontrados. Reunião da inspeção é conduzida pelo moderador cujo objetivo é registrar os incidentes encontrados durante a preparação e no momento da reunião. Retrabalho foca a resolução dos itens levantados durante a reunião de inspeção. Acompanhamento realizado pelo líder da inspeção garantindo a correção do documento e a consolidação das métricas e análise das mesmas. 13
Figura 12 Processo de Inspeção Os papéis envolvidos na inspeção são: Líder da inspeção Autor Revisor Moderador Redator As inspeções devem ser lideradas por um moderador experiente que não é o autor do documento. É um procedimento formal baseado em regras e checklists utilizando critérios de entrada e saída. Também é necessária a preparação antes da reunião para a leitura do material. Ao final, um relatório é produzido contemplando os pontos observados pelos revisores, além das métricas relacionadas. Após a revisão, também é realizado um acompanhamento para garantir que a revisão esteja finalizada. 14
Figura 13 Características da Inspeção ANÁLISE ESTÁTICA Ao contrário da revisão, a análise estática é realizada a partir da escrita do código e tem o objetivo de encontrar defeitos no código e nos modelos gerados. Figura 14 Análise Estática Entende-se que código fonte é qualquer seqüência de declarações escritas em uma linguagem de programação, e este busca achar defeitos que são difíceis de ser encontrados durante a execução do teste. 15
Como benefícios, podemos citar: Detecção antecipada de defeitos, antes da execução do teste e, conseqüentemente, menor custo para corrigi-los. Aviso prévio sobre aspectos suspeitos do código ou projeto, através do cálculo de métricas como, por exemplo, medida de complexidade do código. Identificação de defeitos que não são facilmente encontrados pelo teste dinâmico, como detecção de dependências e inconsistências nos modelos de software. Melhoria na manutenibilidade do código e projeto. Prevenção de defeitos. Figura 15 Características da Análise Estática Alguns exemplos de erros encontrados durante a análise estática: Referenciamento de uma variável sem valor definido. Interfaces inconsistentes entre módulos e componentes. Variáveis que nunca foram utilizadas. Código morto, que são linhas de código que não podem ser executadas devido à lógica do programa. Violação a padrões de programação. Vulnerabilidades de segurança. Violação de sintaxe do código e dos modelos. A análise estática apresenta maior efetividade durante os testes de integração (componentes) e deve envolver os desenvolvedores para verificar padrões, fazendo uso de ferramentas para consolidar os defeitos encontrados e relatório gerado. 16
CONCLUSÃO Este capítulo apresentou como o teste estático pode auxiliar o desenvolvimento de software, não apenas antecipando os erros, mas também através de técnicas que buscam a uniformização do conhecimento entre os participantes do que está sendo desenvolvido. Existem diversas técnicas de revisão estática e a tabela abaixo apresenta um resumo, considerando questões como: objetivos, formalidade, necessidade de preparação e saídas esperadas pelo processo. Tabela 1 Comparação das Técnicas de Revisão Passo a Revisão Passo Técnica Objetivo Primário Encontrar defeitos Encontrar defeitos Objetivo Secundário Compartilhar conhecimento Tomar decisões Preparação Normalmente nenhuma Familiarização Liderança durante a reunião Processo formal Coleta de métricas Autor Não há Usualmente não há Qualquer papel apropriado Algumas vezes Algumas vezes Saída Algumas Relatório vezes um relatório informal Inspeção Encontrar defeitos Melhoria do processo Preparação formal Moderador treinado Sempre Sempre Lista de defeitos, métricas e relatório formal 17