Tietojärjestelmät 2.0

Automaation myötä työvoimavaltainen tuotanto tehostui: yksitoikkoinen ja virhealtis käsityö korvautui koneellisella työllä. Ohjelmistotuotannossa ohjelmointi on tähän saakka ollut lähes täysin käsityötä, ohjelmointityökalujen kehittymisestä huolimatta. Nyt tilanne on muuttunut: pitkälle menevä automaatio myös ohjelmistotuotannossa on vihdoin tullut mahdolliseksi.

Tietojärjestelmäteollisuuden aikaisemmin ratkaisemattomia ongelmia ovat olleet erittäin korkeat kustannukset, heikko luotettavuus, ja valmiiden tuotteiden huono muunneltavuus. Eri järjestelmien yhteispeli ja liittäminen yhteen on ollut vaikeaa ja kallista, ja siksi se on jäänyt usein puutteelliseksi ja kömpelöksi.

Tietojärjestelmät 2.0 -projektissa on toteutettu käänteentekevää teknologiaa, jolla tietojärjestelmien kehitys saadaan järkevöitettyä: kehitysajat lyhenevät merkittävästi, järjestelmien virheet vähenevät, ja järjestelmiä on huomattavasti aikaisempaa helpompi muuttaa. Järjestelmien toiminnallisuutta voidaan helposti laajentaa, tarvitsematta koskea aikaisemmin toteutettuihin järjestelmän osiin.

Projekti perustuu tekoälyteknologioihin, ja sen keskeisimmät innovaatiot tarjoavat tehokkaita ratkaisuja tietojärjestelmien kehityksen suurimpiin ongelmiin.

Tavanomaisen tietojärjestelmäkehitystyön tehostamisen lisäksi projektin tulokset mahdollistavat aikaisempaa älykkäämmät tietojärjestelmät: tavanomaisia järjestelmiä voidaan laajentaa avustavilla osajärjestelmillä, jotka auttavat käyttäjiä valitsemaan tavoitteitaan parhaiten vastaavia toimenpiteitä ja muutenkin optimoimaan järjestelmien toimintaa, vähentäen käyttäjien työtaakkaa ja helpottaen järjestelmien käyttöä.

Ohjelmoijakeskeisen kehitystyön ongelmat

Tavanomaisessa tietojärjestelmien kehitystyössä järjestelmien suuren koon ja monimutkaisuuden vuoksi niiden toteutustyö joudutaan pilkkomaan pieniin palasiin, ja kukin ohjelmoija joutuu huolehtimaan suuresta määrästä toisistaan riippuvia tietoja ja ohjelmistokomponentteja, mikä lisää järjestelmäkehityksen kognitiivista kuormaa. Järjestelmien kehityksen hajoittaminen palasiin tällä tavalla kehitysprojektien aikaisessa vaiheessa myös tekee ohjelmistoista jäykkiä ja vaikeasti muunneltavia, sekä altistaa ne suunnitteluvirheille, joiden korjaaminen testausvaiheen jälkeen on hyvin kallista ja aikaa vievää.

Tekoäly ohjelmistotuotannossa

Tekoälyä on aikaisemmin ehdotettu helpottamaan ohjelmistotuotantoa, mutta toteutuneet ehdotukset ovat rajoittuneet tietojärjestelmien periferiaan, esimerkiksi verkkopalveluiden synteesi (web service composition), sääntöjärjestelmät (business rule management), ja liiketoimintaprosessien hallinta (business process management).

Tässä projektissa on tekoälyä sovellettu järjestelmien keskeisimpien komponenttien toteuttamiseen, juuri niihin asioihin, joiden vuoksi tietojärjestelmien kehittäminen on erityisen kallista ja aikaavievää. Näihin lukeutuvat tietojärjestelmien sisäinen logiikka tai ohjausvuo (control flow), käyttöliittymien toiminnallisuus, tietokantamallien laadinta ja käyttö, ja etenkin näiden kaikkien osa-alueiden välisten riippuvuuksien hallinta.

Automatisoidussa, tekoälyteknologioihin perustuvassa ohjelmistosynteesissä ohjelmoijien kognitiivista kuormaa aiheuttavat asiat automatisoidaan täysin, eikä kehitystyön vaikeimpien asioiden hallitseminen ohjelmallisesti ole nykyteknologioilla enää ylitsepääsemätön ongelma. Järjestelmien kehitystyössä työtaakka painottuu vaatimusmäärittelyjen laadintaan. Näiden määrittelyjen koko ja niihin liittyvä kognitiivinen monimutkaisuus on paljon alhaisempi kuin perinteisten ohjelmistomäärittelyjen, puhumattakaan ohjelmoijien koodaaman ohjelmakoodin koosta ja monimutkaisuudesta.

Miksi nyt?

Automaattista ohjelmistosynteesiä on tutkittu jo 1960-luvulta saakka, ja tunnetuimpiin varhaisiin menetelmiin lukeutuvat Dijkstran ja Hoaren ohjelmalogiikat. Tärkein ero projektissa kehitettyjen menetelmien ja perinteisen ohjelmasynteesin välillä on aivan eri abstraktiotaso. Tekoälymenetelmissä keskitytään tietojärjestelmien (ja muiden ohjelmistojen) sisältämään tietoon ja siitä päättelemiseen, ja siihen kohdistuvien toimenpiteiden suunnitteluun, kun taas perinteisessä ohjelmistosynteesissä ohjelmia katsotaan samalla (alhaisella) abstraktiotasolla kuin ihmisohjelmoijakin niitä katsoo.

Tämä abstraktiotason nosto tekoälyn menetelmin mahdollistaa tehokkaan ja skaalautuvan ohjelmasynteesin. Vaikka ohjelmasynteesi yleisesti onkin tietojenkäsittelytieteen termein ei-laskettava ja rajoitetuissa tapauksissakin NP-kova ongelma, ja siksi vaatii pahimmassa tapauksissa hyvin suuren (eksponentiaalisen) laskentaresurssin, korkean abstraktiotason ja älykkäiden hakumenetelmien avulla tämä laskennallinen vaativuus kyetään pitämään niin alhaalla, että hyvinkin suurien ohjelmistojärjestelmien synteesi on käytännössä tehokasta: pienet järjestelmät pystytään syntetisoimaan sekunneissa, keskisuuret kymmenissä sekunneissa tai minuuteissa, ja suuret järjestelmät kymmenissä minuuteissa. Tuloksena saatavat ohjelmistot ovat tehokkuudeltaan samaa luokkaa kuin tavanomaisilla menetelmillä kehitetyt, mutta näitä luotettavampia ja paljon helpommin muunneltavia.

Projektin on mahdollistanut viimeisten 10-15 vuoden läpimurrot tekoälytutkimuksen keskeisillä osa-alueilla, etenkin symbolisessa tiedon ja tietämyksen esittämisessä sekä automaattisessa suunnittelussa ja päätöksenteossa.

Asema tekoälytutkimuksessa

Projekti perustuu Aalto-yliopistoon kansainvälisesti johtavaan asiantuntemukseen symbolisen tekoälyn keskeisimmillä osa-alueilla. Vaikka projektin keskeisimmät tulokset perustuvatkin symbolisiin menetelmiin (päättely, haku, suunnittelu), projektin tarkoituksena on vastaisuudessa ottaa käyttöön myös ei-symbolisen tekoälyn menetelmiä (koneoppiminen, data-analytiikka, tiedon louhinta) niiden sovellusalueilla, mm. järjestelmien osakomponenttien toiminnan optimointiin, ja tietojärjestelmän korkeimman tason tavoitteiden onnistumisen arviointiin.

Lisätiedot

Projekti toimii Aalto-yliopiston tietojenkäsittelytieteen laitoksella.

Yhteydenotot: Jussi Rintanen