Generation of Program Analysis Tools Frank Tip Samenvatting: Het is een bekend fenomeen dat een programma moeilijker te begrijpen wordt naarmate het “ouder” wordt, en er meerdere malen wijzigingen in zijn aangebracht. Redenen voor dergelijke wijzigingen zijn voor de hand liggend: - Het kan nodig zijn de functionaliteit van een programma uit te breiden. - Programma’s moeten soms worden aangepast wegens overschakeling op een ander type computer of bedrijfssysteem. - Verbetering van het mens/machine interface kan gewenst zijn. Helaas wordt dit soort software-onderhoud niet altijd als een volwaardige activiteit beschouwd, en vindt het plaats onder grote tijdsdruk. Dergelijk programmeerwerk wordt dan ook veelal op een ad-hoc manier uitgevoerd, waarbij de “structuur” die oorspronkelijk in het programma aanwezig was grotendeels verloren gaat. Ook worden het ontwerp en de documentatie die bij het programma horen vaak niet op adequate wijze aangepast. Een programmeur die met een dergelijk programma wordt geconfronteerd, en de opdracht heeft daarin nogmaals een wijziging aan te brengen, kan hierdoor grote moeite hebben met het begrijpen ervan. Dit geldt in het bijzonder als de programmeurs die betrokken zijn geweest bij eerdere versies van het programma niet meer aanwezig zijn voor tekst en uitleg, en de source-tekst de enige beschikbare informatie omtrent het programma is. Dit proefschrift gaat over technieken en hulpmiddelen om programma’s automatisch te analyzeren, met andere woorden, over hulpmiddelen (“tools”) die het begrijpen van programma’s vergemakkelijken. Hierbij ligt de nadruk op het genereren van programma-analyse tools uit algebraı̈sche specificaties, in plaats van deze direct te implementeren in een specifieke programmeertaal. Een belangrijk voordeel van deze aanpak is dat deze grotendeels taal-onafhankelijk is. De nadruk ligt op twee specifieke technieken voor programma-analyse: source-level debugging en program slicing.