A resposta de David Hammen está muito bem colocada, embora não seja exatamente o que eu teria dito. Concordo que a verificação responda "Criamos este corretamente?". Qualquer coisa produzida por um processo pode ser verificada. A fabricação envolve verificação constante de que a coisa que está sendo produzida foi produzida corretamente.
Ele então define Validação, que concordamos ser diferente, como "Construímos a coisa certa?" Eu diria que a validação se move na direção oposta, para confirmar exaustivamente o correto funcionamento correto de um projeto. Mais como "Demonstre objetivamente que a solução foi projetada corretamente". Os graus certos de parafusos, os tamanhos certos de variáveis internas. As peças estão à altura do trabalho.
Valide de David: "Construímos a coisa certa?" é uma pergunta de alto nível que não pode ser executada na compilação diária, com polegares para cima ou para baixo. É um julgamento dos requisitos e, em menor grau, do design. Não é uma pergunta sensata dirigida a uma caixa de texto em uma tela ou a um parâmetro em uma API. Não sabe ao certo qual é o nome de uma palavra para correção de requisitos, talvez Validação de Requisitos. Prova exaustiva de que os requisitos correspondem às necessidades do usuário final.
Por outro lado, minha definição para Validar é a prova da exatidão de um design, testes objetivos que mostram as peças selecionadas farão o trabalho. O software Ariane IV que não era adequado para o Ariane V falharia aqui, porque o Ariane IV tinha um intervalo limitado de alterações na taxa de ângulo. O código foi otimizado para esse intervalo limitado e o Ariane V foi capaz de um intervalo maior de taxas de ângulo, o que causou o estouro. Quando os dois computadores de bordo falharam durante o estouro e o fizeram novamente após a reinicialização automática, o sistema de destruição foi acionado.
Como disse Dykstra, "a otimização prematura é a raiz de todo mal".
Nas minhas definições, presume-se que os requisitos sejam corretos e aceitos, validados pelo teste de Requisitos. A validação de design ou código prova que o design, talvez um pouco da implementação, está correto. Ele ainda precisa ser executado corretamente, mas confirmando que é Verificação, teste baseado em Requisitos aceitos e um Design aceito.
Você notará que isso se aproxima dolorosamente do modelo de desenvolvimento Waterfall, que parece prejudicial se acredita-se que descreva sistemas complexos. Não obstante, os Requisitos são diferentes de Design e o Código é uma terceira coisa inteiramente. Acho que meu argumento é que os elementos na Cachoeira são descrições úteis, mas que 'completo' é enganoso, então mudei para 'aceito', o que sugere contingência e mutabilidade.