Il rilevamento degli errori del software è uno dei problemi più impegnativi per la garanzia della qualità nei produttori di software. Gli errori del software possono essere rilevati prima o dopo il suo rilascio. Tuttavia, esistono risorse limitate per il rilevamento e la correzione degli errori [1]. Gli errori rientrano generalmente in due categorie generali: errori di sintassi ed errori semantici. Poiché esistono così tanti potenti strumenti automatizzati per il rilevamento degli errori di sintassi, è molto improbabile che tali errori vengano rilevati al momento del rilascio. Gli errori semantici sono quelli che si verificano come risultato di problemi diversi dagli errori di sintassi e dagli errori umani tangibili e sono solitamente causati da incongruenze in diverse parti del codice, a volte molto intangibili. In questi casi, tali errori non possono essere facilmente rilevati dalla revisione del codice. Ciò non è vero per gli errori semantici, perché molti fattori possono contribuire al verificarsi di tali errori