Engenharia de Software

Verificação e Validação de Software

Pontos principais

  • A verificação foca na conformidade do produto com as especificações técnicas ('construir o produto corretamente').
  • A validação foca na adequação do produto às necessidades do usuário final ('construir o produto certo').
  • A verificação de artefatos permite checar a qualidade do design e da arquitetura sem a necessidade de executar o software.
  • A validação externa requer a participação ativa dos stakeholders e geralmente termina com testes de aceitação.

No contexto da engenharia de software, gestão de projetos e testes, a verificação e validação (V&V) constituem o processo sistemático de assegurar que um sistema de software atenda às especificações técnicas e aos requisitos definidos, garantindo que o produto final cumpra a finalidade para a qual foi concebido. Frequentemente associado ao controle de qualidade de software, esse processo é geralmente conduzido por testadores de software como parte integrante do ciclo de vida de desenvolvimento de software (SDLC).

Diferenças Fundamentais: Verificação vs. Validação

Embora sejam frequentemente utilizados como sinônimos, a verificação e a validação possuem objetivos distintos. Uma das definições mais aceitas na área, atribuída a Barry Boehm, resume a diferença da seguinte forma:

  • Verificação: "Estamos construindo o produto corretamente?"
  • Validação: "Estamos construindo o produto certo?"

A verificação foca na conformidade técnica: checa se as especificações foram implementadas corretamente pelo sistema. Já a validação foca na necessidade do usuário: verifica se o produto final atende às necessidades reais e expectativas dos stakeholders (partes interessadas).

Processo de Verificação de Software

A verificação é um processo orientado a artefatos e especificações. Ela implica que a saída de cada fase do desenvolvimento deve implementar corretamente a entrada da fase anterior. Por exemplo, o processo de design deve implementar a Especificação de Requisitos, e a construção do código deve implementar a Especificação de Design.

Verificação de Artefatos e Especificações

A verificação não ocorre apenas através da execução do software (testes dinâmicos), mas principalmente através da análise de seus artefatos associados. É impossível determinar, apenas executando o programa, se a arquitetura ou o design foram implementados de forma otimizada ou correta segundo as normas técnicas.

Exemplos de verificação de artefatos incluem:

  • Design vs. Requisitos: Avaliar se o design arquitetural, o design detalhado e o modelo lógico de banco de dados implementam corretamente os requisitos funcionais e não funcionais.
  • Construção vs. Design: Verificar se o código-fonte, as interfaces de usuário e o modelo físico de banco de dados estão em conformidade com a especificação de design.

Processo de Validação de Software

A validação assegura que o software satisfaça o uso pretendido e as necessidades de todos os stakeholders, incluindo usuários finais, administradores, gestores e investidores. A validação pode ser dividida em duas abordagens:

Validação Interna

Ocorre quando se assume que os objetivos dos stakeholders foram compreendidos corretamente e expressos de forma precisa nos artefatos de requisitos. Se o software atende rigorosamente à especificação de requisitos, ele é considerado internamente validado.

Validação Externa

Acontece quando os stakeholders são consultados diretamente para confirmar se o software atende às suas necessidades. Dependendo da metodologia de desenvolvimento (Cascata ou Ágil), a validação externa pode ser um evento único ao final do projeto ou um processo contínuo de feedback. O sucesso da validação externa culmina geralmente em um teste de aceitação, que é um teste dinâmico.

Validação de Artefatos

A validação de requisitos deve ocorrer antes que o produto final esteja pronto. Exemplos incluem:

  • Especificação de Requisitos do Usuário: Validar se os documentos de requisitos representam fielmente a vontade dos stakeholders através de entrevistas (testes estáticos) ou protótipos (testes dinâmicos).
  • Validação de Entrada de Usuário: Verificar se os dados inseridos via periféricos (teclado, sensores biométricos, etc.) cumprem as regras de domínio, tipos de dados, intervalos e formatos definidos.

Comparação Sintética

CritérioVerificaçãoValidação
Pergunta PrincipalEstamos construindo o produto corretamente?Estamos construindo o produto certo?
FocoEspecificações e ProcessosNecessidades do Usuário e Stakeholders
Método PrincipalAnálise de artefatos, revisões, inspeçõesTestes de aceitação, prototipagem, feedback
ObjetivoConformidade técnicaSatisfação do usuário final

Perguntas frequentes

Qual a principal diferença entre verificação e validação?

A verificação assegura que o software está sendo desenvolvido de acordo com as especificações técnicas (conformidade), enquanto a validação assegura que o software atende às necessidades reais do usuário final (utilidade).

É possível fazer verificação sem executar o software?

Sim, isso é chamado de verificação estática ou de artefatos, onde se revisam documentos de design, requisitos e o próprio código-fonte para encontrar erros antes da execução.

O que é a validação externa de software?

É o processo de confirmar com os stakeholders e usuários finais se o software realmente resolve o problema para o qual foi criado, frequentemente utilizando protótipos ou testes de aceitação.