Qual é a diferença entre teste e verificação?

15

Todo livro didático que eu vi mostra muito o fato de que teste e verificação são dois conceitos diferentes. No entanto, nenhum deles fornece uma distinção clara (ou suficientemente clara para mim, finalmente).

Para fornecer algum contexto, estou interessado na verificação de projetos de hardware digital usando HDLs (linguagens de design de hardware).

Eu já vi algumas explicações que recorrem a uma diferença "física" ou "tangível": se trata de um dispositivo fabricado, está testando. Essa é a história toda? Se sim, por que a palavra "teste" aparece com tanta frequência na verificação (especialmente na verificação funcional, falamos de casos de teste, bancos de teste, DUT (dispositivo em teste), testes direcionados, testes aleatórios, etc ...)

Viciado em VHDL
fonte

Respostas:

21

Foi engenheiro de verificação de projeto ASIC na Qualcomm. Da maneira mais simples, posso explicar:

Teste: verifique se um produto funciona depois de criar o produto (pense no controle de qualidade).

Verificação: garantir que um produto funcione ANTES de criá-lo.

Ambos estão testando, apenas que a verificação é mais complicada porque você precisa descobrir uma maneira de testar o produto antes que ele exista e ter a capacidade de garantir que ele funcione conforme projetado e especificar quando ele realmente sai.

Por exemplo, a Intel está projetando seu próximo processador, eles têm as especificações, os esquemas e as simulações. Eles gastam US $ 1 bilhão em fabricação e fabricação. Então o chip volta e eles o testam e descobrem que não funciona. Eles jogaram muito dinheiro pela janela.

Ative a verificação. Os engenheiros de verificação criam modelos que simulam o comportamento do chip, eles criam o banco de testes que testará esses modelos específicos. Eles obtêm os resultados desses modelos e depois os comparam com os resultados de RTL (modelo de gravação de circuitos em uma linguagem de design de hardware). Se eles corresponderem, as coisas estão (normalmente) OK.

Existem várias metodologias diferentes para o processo de verificação, uma popular é a Universal Verification Methodology (UVM) .

Há muita profundidade no campo e as pessoas podem passar toda a sua carreira nele.

Outro detalhe aleatório das informações: geralmente você precisa de 3 engenheiros de verificação para 1 engenheiro de projeto. É o que todo mundo no campo diz de qualquer maneira.

EDIT: Muitas pessoas pensam na verificação como uma função de teste, mas não é; é uma função de design por si só, porque você precisa entender todos os meandros do seu IC como um designer e, em seguida, você deve saber como projetar modelos, bancos de teste e todos os casos de teste que cobrirão todas as funcionalidades do seu IC , além de tentar atingir todas as linhas do código RTL para todas as combinações de bits possíveis. Lembre-se de que hoje em dia um processador possui bilhões de transistores devido ao processo de fabricação que permite cada vez menor (agora 14nm).

Além disso, em grandes empresas como Intel, AMD, Qualcomm, etc, os designers não projetam o chip. Normalmente, o arquiteto define todas as especificações, faz o layout dos tipos de peças que precisam ser combinadas para obter uma função específica com um requisito específico (por exemplo, velocidade, resolução etc.) e, em seguida, o designer codifica isso em RTL. Não é um trabalho fácil, mas não é tanto o design quanto muitos engenheiros que saem da escola pensam. O que todo mundo quer ser é um arquiteto, mas é preciso muita educação e experiência para chegar a esse ponto. Muitos arquitetos têm doutorado e têm entre 15 e 20 anos de experiência no campo como designer. São pessoas brilhantes (e às vezes loucas) que merecem estar fazendo o que estão fazendo e são boas nisso. O arquiteto do primeiro chip em que trabalhei era um pouco estranho e realmente não seguia algumas normas sociais, mas ele podia resolver qualquer coisa com a qual você estivesse atento em relação ao chip, e às vezes ele o resolvia na cabeça e dizia a você olhar para um sinal e você ficaria tipo "como diabos ele fez isso?". Então você pede que ele explique, e ele explica e isso vai além da sua cabeça. Na verdade, me inspirou a ler livros, apesar de já ter me formado.

PGT
fonte
1 Obrigado para a última observação, nos ajuda a ver que o campo é realmente importante (embora RTL e de engenharia de projeto sons mais atraentes para a maioria dos engenheiros, eu acho)
VHDL Addict
Para completar, você se importaria de adicionar o que é um testcase?
VHDL Addict
Eu adicionei um boato sobre o que realmente é a verificação por causa do seu primeiro comentário sobre a função de design ser mais atraente; ambos são bons papéis, só depende do que você gosta. Quanto a um caso de teste, um SoC como o Snapdragon poderia ter dezenas a centenas de milhares de casos de teste, e com testes aleatórios, na casa dos milhões. Para simplificar: você está aplicando um conjunto de bits de entrada e que é alterado ao longo de muitos módulos, e então obtém alguns bits de saída como resultado, comparando com os resultados do seu modelo. Algo tão simples como testar uma imagem aparecer no seu telefone teria ...
PGT
um grande número de casos de teste. Digamos que você queira mostrar um único pixel na tela do seu celular. O que alguém fora do campo pensará é aplicar 1 bit para branco e 0 para preto. No mundo móvel atual, esse pixel pode diferir por tamanho, intensidade, rotação, formato de cor (YUV ###, RGB ###, etc.). E você provavelmente está testando 1 bit em um conjunto de bits que é aplicado à entrada juntos. Os outros bits podem ser 0 porque é preto ou 1 porque está lidando com outras informações, como lidar com o modo de transmissão, CLK, ativa / desativa, aciona, coisas sofisticadas como essa.
PGT 07/11
6

No meu livro, a Verificação é garantir que o que você projetou "faz o trabalho" - ou seja, você tem um conjunto de coisas que o "dispositivo" precisa executar, e a verificação marca essa opção na lista.

Testar, no entanto, é garantir que as coisas que o "dispositivo" faz sejam corretas. Você tem um conjunto de funções e testa cada função, certificando-se de que ela funcione corretamente.

Em poucas palavras, a Verificação está verificando o design e o Teste está verificando o produto.

Majenko
fonte
Acho que estou começando a entender ... Você poderia fornecer alguns exemplos de cada um?
VHDL Addict
Como isso se encaixa em um plano de verificação , que especifica o que deve ser implementado e também como saber se a funcionalidade está correta? Seria pouco útil implementar ou marcar uma função se ela não funcionar.
VHDL Addict
@ Majenko - Então você escreveu um livro sobre verificação? Você gostaria de compartilhar mais alguns detalhes sobre isso?
Michael Karas
4

Vindo de um background de design ASIC (hardware), existem três termos importantes: validação , verificação e teste . As respostas anteriores geralmente falam sobre um ou dois desses termos, mas não contrastam claramente os três da maneira que eu faria. Aqui está a maneira como eu os entendo:

  • Validação: a especificação (geralmente um modelo C) atende aos requisitos do mercado ou do cliente
  • Verificação: a implementação (RTL, netlist ou GDS2) corresponde à especificação
  • Teste: o dispositivo fabricado corresponde à implementação
Winston Smith
fonte
As simulações de netlist e GDS2 podem fornecer resultados diferentes?
Ciro Santilli escreveu
1
@CiroSantilli 法轮功 文件 六四 asking 法轮功, suponho que você esteja perguntando sobre o comportamento de portas versus transistores. Para tensões digitais normais e formas de onda, eu diria que elas fornecerão os mesmos resultados. Mas poderia haver efeitos "analógicos" não considerados pelos portões idealizados, como variações de potência / terra ou compartilhamento de carga de sinal. Se esses efeitos estiverem presentes, o comportamento digital ideal pode não ser verdadeiro.
Winston Smith
1
@CiroSantilli 事件 改造 中心 法轮功 六四 事件 Sim, eles podem dar resultados significativamente diferentes. Estive lá, cometi esse erro.
Elliot Alderson
1

Um teste é projetado para verificar se uma especificação é atendida. A verificação é para ver se o dispositivo atende às entradas de projeto - ou seja, todas as especificações. Suponho que existem muitas outras interpretações, mas é o que eu vi nos documentos de orientação da FIA.

Scott Seidman
fonte
Entendo, mudei um pouco a redação (de teste para teste ) para deixar mais claro que ambos são processos. Concordo com você que, para testes individuais a palavra teste é apropriado (às vezes eu sinto que estou reafirmando o óbvio com estas questões de terminologia ...) :)
VHDL Addict
1

Fazemos uma distinção entre testes de verificação e testes de validação. Digamos que você esteja projetando um ventilador que esfria alguns equipamentos. O teste de verificação é realizado para garantir que o ventilador atenda a todos os requisitos de design. Então você pode testar o fluxo de ar, ciclagem térmica, vibração etc.

O teste de validação garante que os requisitos de design sejam os corretos. As entradas de design que tínhamos para o ventilador realmente nos deram o que queríamos? Por exemplo, você deve garantir que o ventilador resfrie o equipamento como pretendido.

Eric
fonte
É assim que os termos são entendidos pelos livros sobre Engenharia de Software que li. Validação = verifique se os requisitos estão corretos (verifique-os com o cliente, regulamentos, etc.); Verificação = garantir que o produto é direito (testá-lo contra a especificação)
Wouter van Ooijen
1

A ISO9000 fala sobre verificação e validação. No contexto da verificação ISO9000, significa testar um projeto de protótipo para provar que atende às expectativas funcionais e de desempenho. Validação significa que testar a primeira execução da produção também atende às expectativas do projeto. Verifique primeiro, valide depois é o meu pequeno modo de lembrar a ordem das coisas.

Vários padrões de software invertem a ordem de verificação e validação e isso pode realmente causar confusão. Portanto, esteja ciente disso.

O ponto principal é ... Por que você está testando algo - é um projeto de protótipo -, se sim, os padrões de qualidade tendem a chamar essa verificação. Se você estiver testando uma execução de produção pela primeira vez, os responsáveis ​​pelo hardware chamam essa validação.

Apenas minhas experiências pessoais.

Andy aka
fonte
0

Ao ler essas respostas, agora percebo que não há uma definição definida de como o "teste" difere da "verificação" no setor.

Ao trabalhar com o design de HW (design "real" de HW, como coisas no PCB, não programação VHDL), passamos por uma fase de verificação e validação e uma fase de teste de produção (na verdade, apenas projetando os próprios testes de produção e entregando-os ao local de produção). - Verificação - (1) verifique se o protótipo / item produzido em massa atende aos requisitos de HW (2) valida os requisitos de HW contra os requisitos do SYS. - Teste de produção - teste de fumaça e casos de teste de verificação simplificados e rápidos, adaptados para detectar defeitos de produção em massa sem ter que passar por todo o processo de verificação de cada uma das 500000 unidades produzidas por ano.

Portanto, nessa empresa multinacional em particular, "teste" se refere a testes de produção e nada mais.

user3038015
fonte