@David La risposta di Hammen è molto buona, anche se non esattamente quello che avrei detto. Sono d'accordo che la verifica risponde "L'abbiamo costruita correttamente?". Qualsiasi cosa prodotta da un processo può essere verificata. La produzione implica la costante verifica che la cosa prodotta sia stata prodotta correttamente.
Quindi definisce Validation, che siamo d'accordo è diverso, come "Abbiamo costruito la cosa giusta?" Direi che Validation si muove nella direzione opposta, per confermare in modo esaustivo il corretto funzionamento di un design. Più come "Dimostrare obiettivamente che la soluzione è stata progettata correttamente". I giusti gradi di bulloni, le giuste dimensioni delle variabili interne. I pezzi sono all'altezza del lavoro.
David's Validate, "Abbiamo costruito la cosa giusta?" è una domanda di alto livello che non è qualcosa che puoi eseguire contro la build giornaliera, i pollici in su o i pollici in giù. È un giudizio sui requisiti e, in misura minore, sul design. Non è una domanda sensata indirizzata a una casella di testo su uno schermo o un parametro in un'API. Non sei sicuro di quale sia il nome di una sola parola per la correttezza dei requisiti, magari Validazione dei requisiti. Dimostrando in modo esauriente che i requisiti corrispondono alle esigenze dell'utente finale.
Al contrario, la mia definizione di Validate è la prova della correttezza di un progetto, test oggettivi che mostrano che i pezzi selezionati faranno il lavoro. Il software Ariane IV che era inadatto per Ariane V fallirebbe qui, perché Ariane IV aveva una gamma limitata di cambi angolari. Il codice è stato ottimizzato per questa gamma limitata, e Ariane V era in grado di avere una gamma più ampia di tassi d'angolo, che ha causato l'overflow. Quando entrambi i computer di bordo si sono bloccati in overflow e lo hanno fatto di nuovo dopo il riavvio automatico, il sistema di distruzione è stato attivato.
Come diceva Dykstra, "L'ottimizzazione prematura è la radice di tutto il male."
Nelle mie definizioni, si presume che i requisiti siano corretti e accettati, convalidati dalla verifica dei requisiti. La progettazione o la convalida del codice dimostra che il design, forse un po 'di implementazione, è corretto. Deve comunque essere eseguito correttamente, ma conferma che è Verification, testing basato su Requisiti accettati e Design accettato.
Noterai che questo si avvicina dolorosamente al modello di sviluppo Waterfall, che sembra dannoso se si ritiene che descriva sistemi complessi. Tuttavia, i requisiti sono diversi rispetto a Design e Code è una terza cosa interamente. Credo che il mio motivo sia che gli elementi della cascata sono descrizioni utili, ma che "completo" è fuorviante, quindi l'ho modificato in "accettato" che suggerisce contingenza e mutabilità.