Como a verificação não inclui testes reais?

8

Depois de ler muito sobre esse tópico - como neste site Fundamentos de teste de software sobre verificação e validação e Testes de software e garantia de qualidade: teoria e prática de Naik e Tripathy - ainda não entendi. A verificação deve provar que você está construindo o produto certo, enquanto a validação prova que você construiu o produto certo. Mas apenas técnicas estáticas (revisões de código, verificações de requisitos ...) são mencionadas como métodos de verificação. Como você pode dizer se está implementado corretamente, se você não testá-lo? Diz-se que a verificação garante que o produto atenda aos requisitos especificados. Novamente, se a função for especificada para funcionar de alguma forma, somente testando posso dizer que funciona.

Alguém poderia me explicar isso, por favor?

João V
fonte
1
Onde você está lendo isso? Normalmente, a verificação e validação são tratadas como uma atividade singular que inclui tudo o que se refere à qualidade do produto. As técnicas estáticas e dinâmicas fazem parte do V&V.
Thomas Owens
Informe-se onde você está lendo isso. É simplesmente errado. Veja, por exemplo, este link.
Peter K.
Por exemplo aqui: softwaretestingfundamentals.com/verification-vs-validation também um livro que tenho diz o mesmo, que a verificação é feito apenas pela análise estática, enquanto a validação pela dinâmica (teste real)
John V
1
@ user970696 o livro que você possui - você se importaria em dizer o título e o autor? Além disso, você menciona "Wiki" - o que é isso?
gnat
1
@ user970696 Não tenho o livro, mas tenho os slides deles daqui . Eles não parecem fazer a distinção que você está falando. Por exemplo, o Ch3 dos slides fala sobre "Teste dinâmico de unidade", que certamente é verificação, não validação (porque todo o sistema não está disponível).
Peter K.

Respostas:

14

Como essa pergunta criou alguma controvérsia, permita-me começar esta resposta com meu histórico: além de ser exposto à V&V no trabalho diário do projeto, trabalhei por vários anos no departamento de engenharia de software da minha alma mater e sou professor de engenharia de software. Embora isso não garanta que tudo o que digo esteja correto, espero que pelo menos me dê o benefício da dúvida de que possa haver alguma verdade nessa resposta.

Deixe-me assegurar-lhe que você não está tão confuso quanto pode acreditar. O que você declarou em sua pergunta é tão verdadeiro quanto enganoso. Deixe-me primeiro salientar o que você afirmou corretamente:

  • Verificação = construir o produto certo vs validação = construir o produto certo
  • As técnicas estáticas fazem parte da verificação - principalmente porque elas pegam seu programa e algumas informações formais derivadas dos requisitos e as avaliam umas contra as outras.
  • A verificação garante a implementação correta dos requisitos (ou seja, você a criou da maneira correta)

Agora, deixe-me limpar a confusão sobre os testes . Primeiro, como muitos comentários afirmaram antes, o teste dinâmico de código por meio de testes automatizados (unidade, integração, ...) faz parte da verificação. O que causa a maior parte da confusão, no entanto, é que as pessoas na validação também falarão sobre testes , mas significam algo diferente: na validação, o teste geralmente envolve uma pessoa que usa o aplicativo para a finalidade a que se destina. No caso ideal, este é o próprio cliente.

No entanto, os "erros" [1] encontrados nos testes de verificação e validação diferem fundamentalmente:

  • erros de teste de verificação: são erros que violam seus requisitos de uma maneira ou de outra.
  • erros de teste de validação: são erros com o próprio produto que você construiu, não com a funcionalidade, portanto, eles revelam erros dentro dos requisitos.

Para a maioria das pessoas, é útil examinar exemplos concretos de diferentes casos de V&V. A seguir, exemplos extremos de erros:

  • Você tem um requisito de baixo nível de que os estados "f (x) devem retornar x + 1" e sua implementação de "f" sempre retorna a constante 2. Você pode encontrar esse erro em várias abordagens de verificação diferentes, mas seu cliente provavelmente ganhou ' não o encontre durante a validação, porque você está criando um site de compras eletrônicas e ele não sabe nem se importa com "f".

  • Você tem um requisito que declara "O sistema deve ser capaz de lidar com 1000 solicitações por segundo com uma carga de CPU máxima de 80%". Novamente, a validação terá dificuldades, tanto quanto a maioria das técnicas estáticas. De fato, a maneira mais simples de verificar isso é testar dinamicamente seu aplicativo, martelando-o com solicitações e monitorando a carga da CPU durante esse período.

  • Considere o requisito acima para "f" mais uma vez, desta vez com uma implementação "correta". Todas as suas análises, análises estáticas e testes dinâmicos reportarão um sucesso, mas seu cliente testará seu software e informará que ele sente falta do ícone do carrinho de compras na página da web. Nenhuma quantidade de verificação poderá encontrar esse erro, como você o fez durante a fase de requisitos.

Como você pode ver, "testar" - se não for definido com mais precisão - faz parte da verificação e validação e, de fato, "testar" deve ser realizado para ambos.

[1] "erro" é usado coloquialmente aqui, para evitar a distinção entre erro, falha, erro, falha, ...

Frank
fonte
Isso foi realmente ótimo! Saindo do cinema, eu realmente esclareceria: também os testes baseados em caixa preta ou em caso de teste fazem parte dos processos de verificação, além dos testes UAT pelos usuários. Estou bem aqui?
João V
Mas devo acrescentar que a ISO 12207: 2008 declara apenas técnicas estáticas para verificação: /
John V
Infelizmente, muitos (a maioria) dos desenvolvedores não trabalham com os requisitos, por isso ficam confusos com a diferença entre Verificação e Validação; portanto, o V&V difundido é o mesmo e, pior ainda, o Teste == QA.
mattnz
@Frank: Bem, na ISO que mencionei, ela menciona especificamente que o teste é realizado como parte da validação (7.2.5.3.2.1 e ..2). Como é que há muito de disputa :(
John V
1
@ user970696: Claro, essas seções mencionam explicitamente os testes de acordo com as necessidades do usuário . As duas seções que mencionei (implicitamente: 7.2.4.3.2.3 e 7.2.4.3.2.4) afirmam The code implements proper event sequence, consistent interfaces, correct data and control flow, completeness, appropriate allocation timing and sizing budgets, and error definition, isolation, and recovery.e The software components and units of each software item have been completely and correctly integrated into the software item--- como você faria uma dessas coisas sem testar?
Peter K.
0

De fato: a verificação prova que você está criando o produto certo, enquanto a validação cria o produto certo.

Portanto

  • A verificação está provando o processo ... de que você seguiu os padrões e procedimentos exigidos, geralmente verificados por análise estática e revisão de código.
  • a validação está provando o produto resultante ... que o código faz o que é necessário, geralmente verificado por análise e teste dinâmicos, para mostrar que entradas especificadas resultam em saídas especificadas

Normalmente não cito a Wikipedia , mas, neste caso, é útil ...

Uma explicação mais detalhada dos dois processos pode ser encontrada nos Processos do Ciclo de Vida do Software ISO 12207 (uma das outras respostas publica um link para uma cópia não controlada):

7.2.4.3.2 Tarefas de verificação

  • Verificação de Requisitos
  • Verificação de projeto
  • Verificação de código
  • Verificação de integração
  • Verificação da documentação

7.2.5.3.2 Tarefas de validação

  • Preparar Requisitos, Casos e Especificações de Teste
  • Realizar os testes

Agora, a pergunta inicial perguntou por que a verificação não inclui testes. E, apesar de algumas das outras respostas, dos membros da P.SE de alta reputação, afirmo que esse não é o objetivo da atividade de verificação , mas da atividade de validação .

Algumas respostas sugerem que você precisa testar para verificar o código ou a integração. Não - essa atividade é provar a modularidade e as interfaces, etc., não a execução.

Em última análise, o que essa discussão mostra é que há muita confusão sobre o que é verificação e o que é validação , e isso não é ajudado pelo fato de o limite ser uma área cinzenta e definido de maneira ligeiramente diferente em diferentes padrões.

O importante é que ambas as partes de V&V sejam cobertas e, desde que seja esse o caso, semanticamente, não importa realmente se é V ou V ... apenas V e V.

Andrew
fonte
Obrigado, mas agora estou realmente confuso. Os comentários à pergunta mostram que a verificação é a fase de teste, você diz o contrário.
John V
Vejo que agora tenho dois votos negativos ... ficaria curioso para saber por que as pessoas pensam que minha resposta está errada?
Andrew
Bem, IMHO, como indicado nos comentários, a verificação é o teste real, enquanto a avaliação é mais sobre a aceitação do produto final pelo usuário.
João V
Eu absolutamente não concordar com esse resumo. De fato, isso está totalmente errado. A verificação é nada a ver com o teste
Andrew
Bem, veja os links fornecidos nos comentários. Parece que é comum aceitar o que eu disse, mas também leio opiniões diferentes. Mas a leitura de textos universitários, há por exemplo .: Verificação aproxima tentativa de falhas ou erros de produtos Idenfity .."
João V