Re-engineering Legacy Software through Language Conversion
Harsu, Maarit (2000)
Harsu, Maarit
Tampere University Press Tampereen yliopisto
2000
Tietojenkäsittelyoppi - Computer Science
Taloudellis-hallinnollinen tiedekunta - Faculty of Economics and Administration
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Väitöspäivä
2000-09-29
Julkaisun pysyvä osoite on
https://urn.fi/urn:isbn:951-44-4899-5
https://urn.fi/urn:isbn:951-44-4899-5
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++.
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++.
Kokoelmat
- Väitöskirjat [4943]