Abstract van het doctoraatsonderzoek De Onderzoeksgroep Software Languages Lab nodigt U graag uit op de openbare verdediging van het proefschrift van Reinout STEVENS ter behaling van de graad van Doctor in de Wetenschappen Titel van het proefschrift: A Declarative Foundation for Querying the History of Software Projects Promotor: Prof. dr. Coen De Roover Prof. Dr. Viviane Jonckers De verdediging heeft plaats op Vrijdag 5 mei 2017 om 17:00h in Auditorium D.0.02 op de Campus Humanities, Sciences en Engineering van de Vrije Universiteit Brussel, Pleinlaan 2 te 1050 Elsene, en zal worden gevolgd door een receptie Samenstelling van de jury Prof. Dr. Em. Theo D’Hondt Prof. Dr. Jan Hidders Prof. Dr. Ann Dooms Prof. Dr. Peter Vranckx Dr. Julia Lawall (Sorbonne Université Paris) Prof. Dr. Xavier Blanc (Université de Bordeaux) Curriculum vitae Reinout Stevens (°1988), behaalde een master in computer-wetenschappen aan de VUB in 2011. Dankzij een IWT beurs verkende hij declaratieve technieken voor het bevragen van de geschiedenis van software projecten. Gedurende deze vier jaar was hij coauteur van 1 journal paper, 2 fulllength conference papers en 5 short conference papers. Hij presenteerde zijn resultaten op verschillende internationale workshops en conferenties. Het afgelopen jaar besteedde hij grotendeels aan het bijdragen van meerdere prototypes aan een IWT SBO project in de context van change-centric quality assurance. Het gebruik van versiebeheersystemen is standaard om softwareprojecten te ontwikkelen en onderhouden. Ze laten ontwikkelaars toe om gemaakte wijzigingen aan de broncode te verdelen onder ontwikkelaars. Als bijproduct bevat een versiebeheersysteem ook de geschiedenis van de broncode van het softwareproject. Deze geschiedenis is interessant voor verscheidene belanghebbenden. Softwareontwikkelaars kunnen deze geschiedenis gebruiken om antwoord te vinden op vragen zoals “Wie heeft deze code geïntroduceerd?” of “Wie heeft er bijgedragen aan deze falende klasse?”. Onderzoekers actief in het domein van mining software repositories gebruiken deze geschiedenis om het ontwikkelingsproces te analyseren, om trends te vinden en toepasbaar advies te verkrijgen. Zulke geschiedenissen zijn te groot en complex om efficiënt manueel te doorzoeken. Er is nood aan een algemene history querying tool die voldoet aan de verschillende noden van de belanghebbenden. Zulk een tool identificeert automatisch de elementen in de geschiedenis van een project die voldoen aan karakteristieken die gespecificeerd zijn in een history query. We identificeren verscheidene criteria voor zulk een algemene history querying tool. History querying tools moeten onder andere de volgende karakteristieken in hun queries ondersteunen: Versiekarakteristieken betreffen de verschillende elementen van een versie. Voorbeelden van zulke elementen zijn de auteur, commit message of de staat van de broncode van een bepaalde versie. Temporele karakteristieken betreffen de temporele quantificatie van elementen van verschillende versies. Voorbeelden zijn “voor elke versie” of “na de eerste versie die . . . ”. Wijzigingskarakteristieken betreffen de wijzigingen tussen twee versies van de broncode. Voorbeelden zijn de toevoeging, verplaatsing, aanpassing of verwijdering van broncode-elementen. Evolutiekarakteristieken betreffen het effect van de toepassing van een sequentie van wijzigen op de broncode. Voorbeelden zijn de verzameling van change sequenties die hetzelfde effect als een gekende refactoring of eerder geziene transformatie van de broncode hebben. We stellen een declaratieve fundering voor om de geschiedenis te bevragen die de verschillende karakteristieken ondersteunt. Karakteristieken worden uitgedrukt in logische queries, terwijl een logic proof procedure de geschiedenis-elementen identificeert die de gespecificeerde karakteristieken omvatten. We ontwikkelen en ontwerpen de algemene history querying tool QwalKeko die de verschillende karakteristieken ondersteunt in een uniforme taal. We valideren de ondersteuning van versie- en temporele karakteristieken door middel van verschillende gebruiksscenarios. We valideren de ondersteuning van wijzigingskarakteristieken door het uitvoeren van een empirische studie die de co-evolutie van functionele testen met het geteste systeem onderzoekt. We implementeren deze studie tweemaal; eenmaal in QwalKeko en eenmaal in een algemene programmeertaal. We evalueren beide implementaties door de verschillende onderdelen van de studie te vergelijken met elkaar. Tot slot valideren we de ondersteuning van evolutiekarakteristieken door verschillende instanties van refactorings te detecteren in verscheidene change sequenties, verkregen van open-source projecten, en te verzekeren dat de verkregen change sequenties correct, minimaal en uitvoerbaar zijn.