Abstrakt. Call graf konstruktion för objektorienterade program är ofta svårt och dyrt. De flesta ljud och exakta algoritmer analyserar hela programmet inklusive alla biblioteksberoenden. Den separata sammanställning antagande gör det möjligt att generera ljud och någorlunda exakta samtal grafer utan att analysera bibliotek. Vi undersöker om den separata sammanställning antagande kan kodas universellt i Java bytecode, så att alla befintliga hel-program analysramar kan enkelt dra nytta av det. Vi presenterar och utvärderar Averroes, ett verktyg som genererar ett platsinnehavarbibliotek som överskattar det möjliga beteendet hos ett originalbibliotek. Placeholder biblioteket kan byggas snabbt utan att analysera hela programmet, och är typiskt i storleksordningen 80 kB klassfiler (jämfört med Java standard bibliotek är 25 MB). Alla befintliga hela program call graf konstruktion ram kan använda platshållarbiblioteket som en ersättning för de faktiska biblioteken för att effektivt konstruera ett ljud och exakt program call graf. Averroes förbättrar analystiden för hela program anropsgraf konstruktion med en faktor på 4,3x till 12x, och minskar minneskraven med en faktor på 8,4x till 13x. Dessutom gör Averroes det lättare för hela programramar att hantera reflektion på två sätt: det bygger på ett konservativt antagande om allt beteende inom biblioteket, inklusive reflektion, och det ger analyser och verktyg för att modellera reflektion i applikationen. Anropsgraferna byggda med Averroes och befintliga helprogramramar är lika exakta och ljudsamma som de byggda med Cgc. Medan Cgc är ett specifikt genomförande av den separata sammanställning antagande i Doop ramverket, Averroes är universell för alla Java program analysramar.
Dessutom möjliggör REF ljud callgraph analys med hjälp av endast information som finns tillgänglig i bibliotekets gränssnitt genom att använda den separata sammanställning antagande, som säger att biblioteket kan sammanställas separat från programmet.
Averroes: Whole-Program Analysis without the Whole Program
{'venue': 'ECOOP', 'journal': None, 'mag_field_of_study': ['Computer Science']}