Plano Verificação e Validação


O propósito do processo Verificação é confirmar que cada serviço e/ou produto de trabalho do processo ou do projeto atende apropriadamente os requisitos especificados [Pressman, 1995].

O objetivo da validação é validar que um produto de software atenderá a seu objetivo quando colocado no ambiente para o qual foi desenvolvido [Sommerville, 2007].

De forma geral o processo de validação tem seu foco em como avaliar a qualidade de um produto ou componente de produto, assegurando que os objetivos e ou necessidades dos clientes sejam atendidas quando colocado em seu ambiente de produção, ou seja, o objetivo da validação é garantir que o produto correto está sendo desenvolvido [SOFTEX, 2011].


1. Processo


vev


2. Técnicas estáticas


São métodos usados para garantir a qualidade do software que não necessita de uma versão executável do programa. Por este motivo podem ser utilizadas em todas as fases do desenvolvimento do software, pode verificar tanto o produto quanto o processo de software.

As técnicas estáticas são utilizadas para Verificação de software, pois revelam se há correspondência entre o produto final e suas especificações, mas não são úteis para avaliar um software operacionalmente.

2.1 Método que será utilizado nesse projeto (Peer-Review)

É uma técnica formal de inspeção de código realizada em pares de programadores com mesmo nível de conhecimento. O objetivo desta técnica é obter pontos de vista diferentes do desenvolvedor e revisar o material, a fim de encontrar problemas de qualidade.

Apenas um programa ou algumas funcionalidades/documentos são revisados de cada vez. Os resultados obtidos vão para um relatório para a revisão e se forem pertinentes passam para o relatório final oficial. Deve ser analisado o produto não o desenvolvedor.

No caso será utilizado apenas um membro para avaliar possíveis falhas ou atualizações na documentação.


3. Técnicas dinâmicas (plano de teste)


3.1 Introdução

Testes têm como objetivo verificar dinamicamente o comportamento de um programa, usando um conjunto de casos de teste adequadamente selecionados, em relação ao seu comportamento esperado [IEEE, 2004].

Este documento tem como objetivo dar a base para a criação dos casos de teste, definindo conceitos e estabelecendo ferramentas para a criação e execução dos casos de teste. Entre os conceitos temos: níveis de testes, tipos de testes, os recursos necessários e o ambiente.

3.2 Níveis de teste

Definem o momento do ciclo de vida do software em que são realizados testes.

Teste de unidade: Cada unidade do programa é testada, isolada das demais unidades. Esse teste, conhecido como teste de unidade, verifica se a unidade funciona de forma adequada aos tipos de entrada esperados. Normalmente na orientação a objeto são as classes ou modelos. Ele a testa de maneira isolada geralmente simulando as prováveis dependências que aquela unidade tem. (Myers et al. 2004)

Teste de Integração: Quando todas as unidades já tiverem sido testadas, a próxima fase é realizar o teste de integração, para assegurar que as interfaces entre as unidades foram definidas e tratadas adequadamente. É aquele que testa a integração entre duas partes do seu sistema. Os testes das controladora, por exemplo, onde seu teste vai até o banco de dados, é um teste de integração. Afinal, você está testando a integração do seu sistema com o sistema externo, que é o banco de dados. Testes que garantem que suas classes comunicam-se bem com serviços web, escrevem arquivos texto, ou mesmo mandam mensagens via socket são considerados testes de integração. (Myers et al. 2004)

Teste de Sistema: Funcionamento do sistema como um todo, com todas as unidades trabalhando juntas. De acordo com o MPS.BR o teste do sistema envolve: teste funcional (verifica se o sistema integrado realiza as funções especificadas nos requisitos); teste de desempenho (avalia como o sistema se comporta em relação aos requisitos não-funcionais especificados, tais como tempo de resposta, uso do processador, segurança, dentre outros); teste de aceitação (Verificar a iteração de um usuário com o software, documentação do usuário, treinamento e etc); e teste de instalação (São testes de scripts de instalação para verificar se o software é instalado sem nenhum problema no host dos clientes). (Myers et al. 2004)

3.3 Tipos de testes

Segue abaixo os tipos de testes a serem aplicados ao projeto.

  • Funcional: Teste baseado em requisitos funcionais, ou seja, funcionalidades do software.

  • Não funcional: Teste baseado em requisitos não funcionais, no caso, qualidade de código.

Ambos os testes serão automatizados utilizando as ferramentas descritas na sessão 4.4.2

3.4 Recursos necessários e Técnicas

Técnica é o processo que vai assegurar perfeito funcionamento de alguns aspectos de software ou de sua unidade.

3.4.1 Técnicas

Caixa preta: Aborda o software de um ponto de vista macroscópico e estabelece os requisitos de teste a partir da especificação do produto. Esse teste é baseado na analise funcional do software ele garante que os requisitos funcionem conforme o especificado, ele não se preocupa na forma como ele foi implementado, é inseridos alguns dados e espera-se na saída o resultado de como foi projetado os requisitos. Tal tipo de teste é indicado para detectar erros de interface, de comportamento e/ou desempenho, podendo ser aplicada em todas as fases de testes (unidade, integração, sistema e aceitação). Esta técnica também é chamada de “comportamental” ou “funcional”; (Myers et al. 2004)

Caixa branca: Estabelece os requisitos de teste com base na implementação do código. Esse teste tem por objetivo testar o código fonte e elaborando casos de teste que cubram as funcionalidades do componente de software, ele testa cada linha de código possível, testar os fluxos básicos e os alternativos. Esta técnica também é chamada de “caixa-de-vidro” ou “estrutural”; (Myers et al. 2004)

Particionamento de equivalência: É uma técnica que agrupa e otimiza casos de testes, afim de fazer a maior cobertura possível do sistema, é uma técnica caixa preta. Ela propõe a separação das possíveis entradas em categorias diferentes. O objetivo dessa técnica é eliminar os casos de testes redundante, por exemplo, valores entre 1990 e 2000, podemos pegar um único representante para todos esses casos, 1993 por exemplo e pegamos representantes para dados invalidos, como dados negativos ou fora do intervalor proposto, por exemplo, -10, 1980, 2001 e etc... Os casos de teste devem ser construídos a partir das partições criadas. (Myers et al. 2004)

Análise de valor limite: Também é uma técnica caixa preta que visa identificar o comportamento nos limites de uma partição de equivalência, ou seja, seus máximus e mínimus, que é onde existe maior probabilidade de estar incorreto. Os limites são áreas onde testes estão mais propensos a indicar defeitos. Análise do valor limite pode ser aplicada em todos os níveis de teste. Por exemplo, os valores limites de 1900 a 2004 são 1899, 1900, 2004, 2005. Ela complementa o particionamento de equivalência. (Myers et al. 2004)

3.4.2 Ferramentas

Ferramenta Definição Aplicação
Pytest do django pytest é uma ferramenta de teste de Python com todas as características que ajuda a escrever melhores programas Testes funcionais unitários
Codacy Ferramenta de revisão de código e monitoramento de qualidade de código Análise estática

3.5 Ambiente de teste

É uma organização específica de configurações de hardware, software e ambiente associadas necessárias à condução de testes precisos que permitam a avaliação dos Itens de Teste-alvo.

Ambiente de desenvolvimento: É o ambiente que os desenvolvedores utilizam para construir o software, pode ser a sua máquina ou uma máquina virtual que você utilize para programar, normalmente executam teste unitários e de integração.

Ambiente de teste: Normalmente utilizado para testar novas versões do produto, é uma infra-estrutura de testes integrados na qual versões estáveis dos componentes ou rotinas comuns em desenvolvimento ou não são instaladas e testadas. Por exemplo, ao atualizar um componente é necessário ter uma ideia do impacto desta alteração nos produtos dela dependentes.

Ambiente de homologação: Ambiente de homologação: É uma replica do ambiente de produção, seu objetivo é oferecer aos futuros usuários do sistema a possibilidade de testar as funcionalidades dos novos produtos de desenvolvimento e encontrar possíveis incorreções de resultados ou comportamentos, usado para testes de performance, estresse e de aceitação, entre outros. Devem esta sob a gestão da equipe de gestão e suporte, os desenvolvedores não devem possuis acesso privilegiado a esse ambiente, isso permite com que os desenvolvedores possar ter a mesma experiência dos usuários finais.

Ambiente de produção: É onde os usuários finais acessarão o software, normalmente é um host na nuvem, como a AWS, Digital Ocean entre outros.

Nível de teste Volume de dados Origem dos dados Ambiente
Teste Unitário Volume pequeno Criação manual Ambiente de Teste
Teste de Integração Volume pequeno Criação manual Ambiente de Teste
Teste de Aceitação Volume grande Criação manual, dados reais Ambiente de Teste e Homologação

Os testes deverão ser feitos utilizando máquinas virtuais (dockers) para simular os ambientes.

3.6 Produtos gerados

  • Relatório: Relatório técnico das revisões dentro de cada sprint.
  • Teste automatizados: Teste automatizados utilizando código como documentação.

Referências


  • Codacy. Disponível em: https://www.codacy.com/. Acesso em: 15 de Outubro de 2017
  • IEEE 2004;
  • MELO, Silvana M. . Inspeção de software. Instituto de Computação e Matemática Computacional – Universidade de São Paulo, São Carlos;
  • MYERS, Glendford J. .The Art Of Software Testing. 2ª Edição 2004;
  • SOMMERVILLE, Ian. Engenharia de Software - 8ª Edição 2007;
  • PRESSMAN, Roger s. Engenharia de Software – 1995;
  • Pytest. Disponível em: https://docs.pytest.org/en/latest/#. Acesso em: 15 de Outubro de 2017
  • SOFTEX. Guia de Implementação – Parte 9: Implementação do MR-MPS - 2011;