Abstrakt. Vi tar itu med problemet med att beräkna semantiska skillnader mellan ett program och en lappad version av programmet. Vårt mål är att få en exakt karakterisering av skillnaden mellan programversioner, eller fastställa deras likvärdighet när ingen skillnad finns. Vi fokuserar på att beräkna semantiska skillnader i numeriska program där värdena av variabler inte har några a-prioriterade gränser, och använder abstrakt tolkning för att beräkna en över-uppskattning av programskillnader. Dataskillnader och fastställande av likvärdighet under abstraktion kräver abstraktion samband mellan variabler i de två programmen. I detta syfte konstruerar vi först ett korrelerande program där dessa relationer kan spåras och sedan använda en korrelerande abstrakt domän för att beräkna en sund approximation av dessa relationer. För att bättre fastställa likvärdighet mellan korrelerade variabler och exakt fånga skillnader, måste vår domän representera icke-konvex information med hjälp av en delvis disjunktiv abstrakt domän. För att balansera precision och kostnad för denna representation överskattar vår domän numerisk information samtidigt som den bevarar likvärdigheten mellan korrelerade variabler genom att dynamiskt dela upp det diskonterande tillståndet enligt ekvivalenskriterier. Vi har implementerat vår strategi i ett verktyg som heter DIZY, och tillämpat den på ett antal verkliga exempel, inklusive program från GNU-kärnverktygen, Mozilla Firefox och Linuxkärnan. Vår utvärdering visar att DIZY ofta lyckas etablera likvärdighet, beskriver exakt approximation av semantiska skillnader när det finns skillnader, och rapporterar bara några få falska skillnader.
REF använder abstrakt tolkning för att bevisa program ekvivalens för numeriska program.
Abstract semantic differencing for numerical programs
{'venue': 'In SAS', 'journal': None, 'mag_field_of_study': ['Computer Science']}