Liknande kod kan finnas i stora programvaruprojekt på grund av vissa vanliga programvarutekniska metoder, såsom kopiering och pastering kod och n-version programmering. Även om tidigare arbete har studerat syntaktisk ekvivalens och småskalig, grovkornig programnivå och funktionsnivå semantisk ekvivalens, är det inte känt om det finns betydande finkorniga, kodlika semantiska dubbletter. Att upptäcka sådan semantisk likvärdighet är också önskvärt eftersom det kan möjliggöra många tillämpningar såsom kodförståelse, underhåll och optimering. I detta dokument introducerar vi den första algoritmen för att automatiskt bryta funktionellt likvärdiga kodfragment av godtycklig storlek ner till ett körbart uttalande. Vår uppfattning om funktionell ekvivalens bygger på input och output beteende. Inspirerad av Schwartz randomiserade polynomidentitetstestning utvecklar vi vår kärnalgoritm med hjälp av automatiserad slumpmässig testning: (1) kandidatkodfragment extraheras automatiskt från inmatningsprogrammet; och (2) slumpmässiga ingångar genereras för att partitionera kodfragmenten baserat på deras utdatavärden på de genererade ingångarna. Vi implementerade algoritmen och genomförde en storskalig empirisk utvärdering av den på Linuxkärnan 2.6.24. Våra resultat visar att det finns många funktionellt likvärdiga kodfragment som är syntaktiskt olika (dvs. de är osannolika på grund av kopiering och klistrande kod). Algoritmen skalas också till million-line-program; den kunde analysera Linuxkärnan med flera dagars parallellbehandling.
Jiang m.fl. REF identifierar semantiskt ekvivalenta kodfragment, baserade på input/output ekvivalens.
Automatic mining of functionally equivalent code fragments via random testing
{'venue': 'ISSTA', 'journal': None, 'mag_field_of_study': ['Computer Science']}