Yliopistologo

FL Maarit Harsun tietojenkäsittelytieteen alaan kuuluva väitöskirja

Re-engineering Legacy Software through Language Conversion (Tietokoneohjelmistojen uudistaminen kielikonversion avulla)

tarkastetaan 29.9.2000 klo 12 Tampereen yliopiston Pinnin kiinteistön Paavo Koli -salissa, osoitteessa Kehruukoulunkatu 1.

Vastaväittäjänä on professori Reino Kurki-Suonio (Tampereen teknillinen korkeakoulu). Kustoksena toimii professori Kai Koskimies.

***

Harsu on syntynyt 8.7.1965 Tampereella. Hän on suorittanut ylioppilastutkinnon Messukylän lukiossa Tampereella 1984. Harsu on valmistunut filosofian lisensiaatiksi Tampereen yliopistosta 1996. Hän on toiminut tuntiopettajana 1991-1992, suunnittelijana 1992-1997 ja tutkijana 1997-2000 Tampereen yliopiston tietojenkäsittelytieteiden laitoksella.

Harsun väitöskirja ilmestyy sarjassa Department of Computer and Information Sciences, Series of Publications A, Tampereen yliopisto, Tampere 2000. ISBN 951-44-4867-7, ISSN 1457-2060. Ilmestyy myös sähköisenä sarjassa Acta Electronica Universitatis Tamperensis; 56, Tampereen yliopisto 2000. ISBN 951-44-4899-5, ISSN 1456-954X.

Väitöskirjan tilausosoite: Virtuaalinen kirjakauppa Granum tai Tampereen yliopiston julkaisujen myynti, PL 617, 33101 Tampere, puh. (03) 215 6055, e-mail: taju@uta.fi.

Lisätietoja: Maarit Harsu, (03) 375 3229 (koti), (03) 215 6068 (työ), csnima@cs.uta.fi

TIIVISTELMÄ

Ohjelmistoteollisuudessa on paljon vanhoja tietokoneohjelmia, jotka kaipaavat uudistamista. Nämä ohjelmat ovat tärkeitä yrityksen kannalta, koska huolimatta niiden pitkästä iästä, ne ovat edelleen tuotantokäytössä. Yksi tapa uudistaa tällaisia ohjelmia on kääntää ne uudelle ohjelmointikielelle. Tämä on joskus jopa välttämätöntä, koska ohjelmointikielet voivat vanheta niin, että niille ei ole enää saatavissa kääntäjätukea.

Ohjelmien kääntäminen toiselle korkean tason kielelle on vaikeampaa kuin niiden kääntäminen matalan tason kielelle. Korkean tason kohdekielestä ei useinkaan löydy suoraa vastinetta kaikille lähdekielen rakenteille. Jos kohdekieli on matalan tason kieli, lähdekielen rakennetta vastaava ilmaisu saadaan aikaan liittämällä yhteen useita matalan tason kielen rakenteita. Tämä ei ole mahdollista, jos kohdekieli on korkean tason kieli, vaan joudutaan käyttämään kohdekielen rakenteita usein kömpelöllä tavalla, joka ei muistuta näiden rakenteiden tavanomaista käyttöä. Tällöin tulosohjelmien ymmärrettävyys ja luettavuus kärsivät. Jos taas halutaan, että niin ei käy, ei aina voida tarjota toimivaa käännöstä kaikille lähdekielen rakenteille.

Kun ohjelmia käännetään toiselle korkean tason ohjelmointikielelle, ohjelmointiparadigma voidaan joko muuttaa tai säilyttää samana. Jos ohjelmointiparadigma muuttuu, esimerkiksi proseduraalisesta olioparadigmaan, kääntämisessä tarvitaan laajempaa näkemystä lähdeohjelmasta. Esimerkiksi jos kohdeohjelmista halutaan olioperustaisia, lähdeohjelmasta täytyy ensin etsiä oliopiirteitä kuten luokkia, olioita, olioiden välisiä suhteita, perimistä ja dynaamista sidontaa. Molemmissa tapauksissa, huolimatta siitä, vaihtuuko ohjelmointiparadigma vai ei, tarvitaan tietämystä kielikonversiosta kahden korkean tason kielen välillä.

Väitöskirjan konstruktiivisena osana on toteutettu kielikonvertteri, joka kääntää PL/M-ohjelmia C-kielisiksi. Tässä tapauksessa ohjelmointiparadigma säilyy samana. Konvertteria on kuitenkin lisäksi laajennettu niin, että se tunnistaa PL/M-ohjelmista oliopiirteitä. Tätä varten tutkimuksessa on kehitetty uusia menetelmiä olio-ominaisuuksien havaitsemiseksi. Näiden piirteiden tunnistaminen on ensimmäinen askel konvertterin toteuttamiseksi proseduraaliselta kieleltä oliokielelle. Toteutettu PL/M-C-konvertteri on todellisessa käytössä ohjelmistoteollisuudessa.

Kun ohjelmia käännetään toiselta ohjelmointikieleltä toiselle, ne täytyy esittää jotenkin. Tällainen esitysmuoto voi olla esimerkiksi ohjelman jäsennyksen tuloksena syntyvä jäsennyspuu. Vanhat ohjelmat voivat olla todella suuria, joten silloin myös jäsennyspuusta tulee suuri. Suuret jäsennyspuut vaativat paljon tilaa, mikä voi tuottaa ongelmia tietokoneen muistinhallinnalle. Kielestä toiseen kääntämisessä jäsennyspuu voidaan kuitenkin rakentaa paloittain, esimerkiksi aliohjelma kerrallaan, koska yhtä aliohjelmaa käännettäessä ohjelman muista aliohjelmista ei tarvitse tietää mitään. Tällaisessa paloittain kääntämisessä rakennetaan ensin yhtä aliohjelmaa vastaava jäsennyspuun osa, sitten aliohjelma käännetään kohdeohjelmointikielelle rakennetun osan mukaisesti, ja lopuksi rakennettu osa tuhotaan. Tämän jälkeen siirrytään käsittelemään seuraavaa aliohjelmaa samaan tapaan.

Jotkut ohjelmointikielet mahdollistavat ehdollisen kääntämisen. Tällaisia ohjelmointikieliä ovat esimerkiksi juuri PL/M ja C. Tällöin ohjelma tavallaan sisältää useita vaihtoehtoja lopulliseksi ohjelmaksi. Lähdeohjelma ei silloin olekaan jono kielen syntaksin mukaisia osia, vaan jotkut ohjelman osat voivat olla vaihtoehtoja toisilleen. Kun ohjelma käännetään matalan tason kielelle, esimerkiksi konekielelle, kääntämisen ehdollisuus ei aiheuta ongelmia, koska sopiva vaihtoehto määrätään kääntämisen yhteydessä. Kun ohjelma käännetään toiselle korkean tason kielelle, tarkoitus on saada kaikki vaihtoehdot mukaan myös kohdeohjelmaan. Silloin tavanomainen jäsentäminen ei ole mahdollista. Sen vuoksi tutkimuksessa on kehitetty uusi jäsennystapa, jossa kääntämisen ehdollisuus on otettu huomioon.

Väitöskirjatutkimuksessa on tuotu esiin uusia menetelmiä ohjelmien uudistamiseksi ja kääntämiseksi uudelle ohjelmointikielelle. Tällaisten menetelmien kehittäminen on tärkeää, koska ohjelmat vanhenevat koko ajan. Ohjelmat, jotka nyt ovat uusia, ovat jo muutaman vuoden kuluttua vanhoja ja saattavat tarvita uudistamista. Uudistamismenetelmiä voidaan aina kehittää eteenpäin. Myös PL/M-C-konvertteria voidaan kehittää, esimerkiksi niin että kohdekieleksi C:n sijasta tuleekin olioparadigman kieli C++.


Väitökset    Tampereen yliopiston kirjasto   Tampereen yliopisto