V&V - Verificação, Fazendo do Jeito Correto && Validação, Fazendo a Coisa Certa.
Na minha última postagem, discuti o mito dos testes unitários e a importância de requisitos claros para garantir a qualidade do software. Hoje, gostaria de expandir essa discussão explorando dois conceitos fundamentais em engenharia de software: verificação e validação.
A IEEE define esses termos como:
-
Verificação: A avaliação se um produto, serviço ou sistema cumpre uma regulamentação, exigência, especificação ou condição imposta. É frequentemente um processo interno.
-
Validação: A garantia que um produto, serviço ou sistema atende às necessidades do cliente e outros stakeholders identificados. Envolve aceitação e adequação com clientes externos.
Estas definições parecem bastante diretas, mas há muita confusão sobre suas diferenças no mundo real. O pesquisador Barry Boehm resumiu estas definições da seguinte forma: "Verificação é garantir que estamos construindo o produto corretamente; Validação é confirmar que estamos construindo o produto correto."
Mas o que isso realmente significa? Vamos desmembrar cada conceito.
A verificação é o processo de checagem que garante que o software alcança seu objetivo sem error. Em outras palavras, ela verifica se o produto desenvolvido está correto ou não – isto é, se ele preenche os requisitos estabelecidos inicialmente. Para fazer essa checagem, associamos a verificação ao teste dinâmico. Nessa etapa são executados diversos tipos de testes no SUT, incluindo Black box testing, White box testing, Unit testing e Integration testing. Vale lembrar que todo esse processo ocorre internamente.
Já a validação tem a ver com reuniões junto aos stakeholders, demonstrações do produto aos clientes e desk-checking. No final das contas somente o cliente pode validar verdadeiramente o software. Isto porque enquanto a verificação assegura que estamos construindo corretamente o produto (do ponto de vista técnico), a validação confirma se estamos construindo o produto certo (do ponto de vista do usuário).
Ambos estão diretamente relacionados aos seguintes conceitos:
-
Falha (Failure): Comportamento inesperado ou indesejável de um sistema. Uma falha é observável por usuários finais.
-
Erro (Error): É a discrepância entre o estado atual e o estado desejado do sistema, que pode se manifestar como uma falha.
-
Defeito (Fault): Defeito são as condições que podem levar a uma erro. Um defeito pode ser um problema de hardware, um problema de software ou um problema de ambiente.
-
Bug: O termo "bug" é comumente usado para se referir a qualquer tipo de falha em um programa de computador ou sistema. Enquanto as definições anteriores (falha, erro e defeito) têm denifições precisas. O termo "bug" apesar de ter sido originamente usado por Grece Hopper, para descrever uma falta não tem definição formal na comunidade de V&V.
De acordo com estudos publicados na Springer e ScopeMaster, mais falhas são causados por requisitos ruins, arquitetura ruim ou design ruim do que código ruim. Isso significa que os defeitos não surgem apenas durante a fase de codificação (verificação), mas também podem ocorrer nas fases anteriores quando as funcionalidades desejadas pelo usuário final estão sendo definidas (validação).
Então qual seria a melhor maneira de evitar bugs? Precisamos pensar holisticamente sobre a qualidade e focar tanto na verificação quanto na validação.
Aqui vão algumas dicas:
-
Para uma boa verificação: Tenha uma suíte de testes completa e utilize ferramentas automatizadas para ajudar neste processo sempre que possível. Faça revisão de codígo frequentemente. Não menospreze os teste unitários.
-
Para uma boa validação: Trabalhe em colaboração proxíma com os stakeholders em todas as fases do projeto. Faça protótipos toscos para validar ideias antes de gastar muito tempo implementando-as e testando-as.
Lembre-se que a verificação sem validação pode resultar em um produto tecnicamente perfeito...mas completamente inútil, tal como o relógio apresentado! Ter todas as funções certas num produto cheio de bugs, talvez seja um pouco menos inútil, mas fará sua base de usuários fugir para sempre!