Computer-generated code from a specification as a part of a software development process
Loisko, Petteri (2023)
Loisko, Petteri
2023
Johtamisen ja tietotekniikan DI-ohjelma - Master's Programme in Management and Information Technology
Johtamisen ja talouden tiedekunta - Faculty of Management and Business
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2023-01-13
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202212199334
https://urn.fi/URN:NBN:fi:tuni-202212199334
Tiivistelmä
Building software by using machines to create the code automatically is an old idea, and many automated code generation frameworks exist. These implementations are often very context-dependent because of the vast diversity of requirements placed on the desired applications. When the feature set of an application grows, the complexity of the application also grows. Naturally, the more complex the planned software needs to be, the harder it is to automatize its creation.
Over the previous years, the zeitgeist of software architecture has turned towards microservices. Modern cloud service providers offer relatively cheap and robust possibilities for hosting small, special purpose software that communicates over networks. It enables the monolithic software of the past to be split into smaller self-contained, very specialized software. This development opens a door for utilizing more code generation as a part of a software development process as the scope of the generated applications gets more focused.
In the thesis, the existing software development process in a company Peikko Group was observed and a proposal for a new process for creating software was designed to improve on the existing one. The improved process was designed to utilize code generation to form software components from a set of formally written specifications. The main idea behind the improved process was to design an automation pipeline so the Peikko Group's domain experts' knowledge in construction design could be turned into a cloud-hosted calculation engine applications in hopes to shorten the delivery time of the software, lowering the cost of prototyping and free software engineering resources.
The proposed design was tested by creating a calculation engine that can be used to solve a real-life construction design problem. During the implementation phase, the desired calculation engine was specified using definition files that guide the code generation pipeline. The implementation also includes creating the automation pipeline and using it to generate the desired software components based on the specification.
The improved process design and the implementation made based on the design were analyzed and found suitable for future development. Some issues regarding used technologies were identified, but the findings indicate promise and encourage for further improvement iterations. Sovellusten koneavusteinen luominen on teemana vanha ja koneavusteisen ohjelmakoodin luontiin tehtyjä ohjelmistokehyksiä on olemassa useita. Koneavusteinen sovelluskehitys on kuitenkin usein varsin syvästi sidoksissa sovellukseen, jonka kontekstissa koodigenerointi tapahtuu. Tämä on seurausta sovellusten koosta ja haluttujen ominaisuuksien määrästä. Kun sovelluksen ominaisuuksien määrä kasvaa, kasvaa myös sovelluksen kompleksisuus. Mitä monimutkaisempi sovellus on, sitä monimutkaisempia työkaluja tarvitaan sen automaattiseen generointiin.
Ajan henki ohjelmistokehityksessä on kääntynyt kohti mikropalveluarkkitehtuuria. Modernit pilvipalvelualustat mahdollistavat verrattain halpoja ja robusteja mahdollisuuksia isännöidä pieniä kapean erikoisalan sovelluksia, jotka keskustelevat verkon yli. Mikrosovellusten yleistyminen mahdollistaa vanhantyylisten monoliittisovellusten pilkkomisen ja korvaamisen useilla pienillä itsenäisillä sovelluksilla.
Tässä opinnäytetyössä käydään läpi Peikko Group -yhtiön sovelluskehitysprosessia ja suunnitellaan uudenlainen malli parantamaan tätä. Uudistettu sovelluskehitysmalli on suunniteltu hyödyntämään koodigeneraatiota sovelluskomponenttien luomisessa niin, että generointia ohyjaavat formaalit määrittelydokumentit. Uudentyyppisellä prosessilla pyritään tuomaan automaatiota Peikon asiantuntijoiden rakennesuunnitteluosaamisen siirtämiseen laskentapalveluiksi. Tämän toivotaan lyhentävän sovellusten kehitykseen kuluvaa aikaa, madaltavan kynnystä prototyyppien luomiseen sekä vapauttavan ohjelmistokehitysresursseja.
Ohjelmistokehitysprosessiehdotelmaa testattiin luomalla laskentapalvelu, joka kykenee ratkaisemaan käytännön esimerkiksi valitun tosimaailman rakennesuunnitteluongelman. Toteutusvaiheen aikana luotiin määrittelydokumentit laskentasovellukselle ohjaamaan koodigeneraatiota. Toteutusvaiheessa luotiin myös tarvittava koodigenerointiautomaatio ja tätä käyttäen luontiin halutut sovelluskomponentit määrittelydokumenttien mukaisesti.
Parannettu ohjelmistokehitysmalli ja sen toteutus analysoitiin ja todettiin kehityskelpoiseksi. Toteutusvaiheessa ja tuloksia analysoitaessa löydettiin haasteita, jotka juontavat juurensa käytettyihin teknologioihin. Tulokset täyttivät annetut tavoitteet ja olivat kaiken kaikkiaan lupaavia ja rohkaisevat jatkamaan prosessin ja automaation kehitystä seuraavalle kehitysiteraatiolle.
Over the previous years, the zeitgeist of software architecture has turned towards microservices. Modern cloud service providers offer relatively cheap and robust possibilities for hosting small, special purpose software that communicates over networks. It enables the monolithic software of the past to be split into smaller self-contained, very specialized software. This development opens a door for utilizing more code generation as a part of a software development process as the scope of the generated applications gets more focused.
In the thesis, the existing software development process in a company Peikko Group was observed and a proposal for a new process for creating software was designed to improve on the existing one. The improved process was designed to utilize code generation to form software components from a set of formally written specifications. The main idea behind the improved process was to design an automation pipeline so the Peikko Group's domain experts' knowledge in construction design could be turned into a cloud-hosted calculation engine applications in hopes to shorten the delivery time of the software, lowering the cost of prototyping and free software engineering resources.
The proposed design was tested by creating a calculation engine that can be used to solve a real-life construction design problem. During the implementation phase, the desired calculation engine was specified using definition files that guide the code generation pipeline. The implementation also includes creating the automation pipeline and using it to generate the desired software components based on the specification.
The improved process design and the implementation made based on the design were analyzed and found suitable for future development. Some issues regarding used technologies were identified, but the findings indicate promise and encourage for further improvement iterations.
Ajan henki ohjelmistokehityksessä on kääntynyt kohti mikropalveluarkkitehtuuria. Modernit pilvipalvelualustat mahdollistavat verrattain halpoja ja robusteja mahdollisuuksia isännöidä pieniä kapean erikoisalan sovelluksia, jotka keskustelevat verkon yli. Mikrosovellusten yleistyminen mahdollistaa vanhantyylisten monoliittisovellusten pilkkomisen ja korvaamisen useilla pienillä itsenäisillä sovelluksilla.
Tässä opinnäytetyössä käydään läpi Peikko Group -yhtiön sovelluskehitysprosessia ja suunnitellaan uudenlainen malli parantamaan tätä. Uudistettu sovelluskehitysmalli on suunniteltu hyödyntämään koodigeneraatiota sovelluskomponenttien luomisessa niin, että generointia ohyjaavat formaalit määrittelydokumentit. Uudentyyppisellä prosessilla pyritään tuomaan automaatiota Peikon asiantuntijoiden rakennesuunnitteluosaamisen siirtämiseen laskentapalveluiksi. Tämän toivotaan lyhentävän sovellusten kehitykseen kuluvaa aikaa, madaltavan kynnystä prototyyppien luomiseen sekä vapauttavan ohjelmistokehitysresursseja.
Ohjelmistokehitysprosessiehdotelmaa testattiin luomalla laskentapalvelu, joka kykenee ratkaisemaan käytännön esimerkiksi valitun tosimaailman rakennesuunnitteluongelman. Toteutusvaiheen aikana luotiin määrittelydokumentit laskentasovellukselle ohjaamaan koodigeneraatiota. Toteutusvaiheessa luotiin myös tarvittava koodigenerointiautomaatio ja tätä käyttäen luontiin halutut sovelluskomponentit määrittelydokumenttien mukaisesti.
Parannettu ohjelmistokehitysmalli ja sen toteutus analysoitiin ja todettiin kehityskelpoiseksi. Toteutusvaiheessa ja tuloksia analysoitaessa löydettiin haasteita, jotka juontavat juurensa käytettyihin teknologioihin. Tulokset täyttivät annetut tavoitteet ja olivat kaiken kaikkiaan lupaavia ja rohkaisevat jatkamaan prosessin ja automaation kehitystä seuraavalle kehitysiteraatiolle.