Tilbake til søkeresultatene

IKTPLUSS-IKT og digital innovasjon

Co-Evolution of Software Languages and Language Processors

Alternativ tittel: Koevolusjon av programvarespråk og språkverktøy

Tildelt: kr 6,7 mill.

Programvarespråk er fundamentale for utviklingen av programvare. De brukes til å uttrykke programmer, algoritmer og data på en presis og konsis måte, og brukes for kommunikasjon mellom programmør/datamaskin, datamaskin/datamaskin og programmør/programmør. I tillegg baserer all moderne programutvikling seg på at man bygger lag på lag med APIer (biblioteker eller programmeringsgrensesnitt), som i seg selv er programvarespråk og kan analyseres fra samme perspektiv. Både programvare og språk endrer og utvikler seg over tid, og lever gjerne veldig lenge. Vårt moderne samfunn er fremdeles avhengig av programvare og programvarespråk utviklet på 50- og 60-tallet, og å ikke kunne tilpasse seg endringer kan ha veldig reelle konsekvenser. For å gjøre det enklere å oppnå endring og fleksibilitet er moderne programutvikling stadig mer avhengig av avanserte utviklingsverktøy. Slike språkverktøy håndterer oversetting, formattering, editering, visualisering, analyse, migrasjon og evolusjon av programvare. Både språkene, verktøyene, og bruken av dem utvikler seg over tid, og fører til endringer i den underliggende programvaren. I dette prosjektet har vi sett på problemet med endring av programvare, spesielt koevolusjonær endring av språk/API og verktøy/kode. Vi har prøvd å takle et bredere spekter av endringer (inkludert semantiske endringer i språket), og et bredere spekter av språkimplementasjonsteknologi (blant annet generelle programmeringsspråk), enn det som er «state of the art». For å oppnå dette, trengte vi en radikalt ny tilnærming. I stedet for å satse på full automatisering for veldig begrensede teknologier, har vi sett spesielt på teknikker og verktøy, slik som refaktoreringsverktøy og language workbenches, som kan assistere utvikleren i å utføre endringene. Vi har lagt vekt på ting som kan brukes av utviklere i praksis, og prosjektet har generert både inkrementelle forbedring av slike verktøy og language workbenches, og nye forskningsspørsmål for videre fremtidig forbedring. Et viktig aspekt ved utviklingsverktøy som kan assistere ved programvare(ko)evolusjon er i hvilken grad utviklerne er i stand til å benytte seg av og forstå konsekvensene av assistansen, og i hvilken grad verktøyet faktisk støtter opp om oppgaver som utviklerne trenger å utføre. Vi har derfor, i samarbeid med University of British Columbia, Canada, studert bruken og forståelsen av slike verktøy blant profesjonelle programmører i industrien. Dette har gitt oss viktige resultater om hvordan utviklere klarer å benytte verktøyene i praksis, og ført til utvikling og prototyping av en ny «stepwise» teknikk for endringer i programvare.

Prosjektet har oppnådd: * Én fullført PhD-grad i programutvikling (disputert 22.12.2021), med industrinær kompetanse. * Ti publiserte konferanseartikler med tilhørende presentasjoner, og fem journalartikler. * Ny forståelse om hvordan utviklere i industrien bruker programmeringsverktøy, og ikke minst innsikt i når og hvorfor de *ikke* bruker eksisterende verktøy. * En publisert datapakke med video, transcripts og systematisert data fra undersøkelse av industriutviklere. * Prototyper og forbedringer for refaktoreringsverktøy og language workbenches Prosjektet har generert nye prosjektideer innen verktøy for programvarespråk, blant annet i form av unge-forskertalenter søknader til NFR i 2021 og 2022.

Software languages play a fundamental role in the development of software. They are used to express programs, algorithms and data, and are used to communicate such things precisely and concisely, for both programmer/computer, computer/computer and programmer/programmer. Both software and software languages tend to change or evolve over time, and live for a long time. Modern society still relies on software and software languages developed in the 50s and 60s. As part of the effort to enable change and flexibility, modern software engineering is increasingly reliant on tool support. Such language processors deal with translating, formatting, editing, visualising, analysing, migrating and evolving software. As languages evolve, corresponding co-evolutionary changes must be made to the language processors to keep them up to date. With this project we aim to tackle this problem, by developing techniques and tools for co-evolving software languages and software language processors. We go beyond the state of the art, in tackling a wider range of changes (including semantic changes), and a wider range of implementation technology (including general-purpose languages). To achieve this, a radically new approach is needed. Instead of focusing on achieving full automation for very limited technologies, we will employ a mix of techniques, including automated, preventative and assistive techniques, and base our research on empirical studies of co-evolution in real systems. We will validate our results by building prototypes and applying them to cases, and manage risk through an iterative and incremental research process. The project will have a strong international connection to the leading research groups in software evolution, software language technology and software transformations. The PI has a long track record in language design and engineering, and has practical experience in tackling rapid language evolution.

Publikasjoner hentet fra Cristin

Ingen publikasjoner funnet

Ingen publikasjoner funnet

Budsjettformål:

IKTPLUSS-IKT og digital innovasjon