Popis: |
Erkki Laitila tutki väitöskirjassaan tietokoneohjelmien lähdekoodin automaattista tulkintaa. Hän kehitti ohjelmistojen ymmärtämistä palvelemaan symbolisen analyysin, jossa koodia simuloidaan haluttuina paloina ja tuloksena saadaan sen muuttamista tukevaa perustelutietoa.Laitilan kuvaama symbolinen analyysi on atomistisella mallilla, abstraktilla koneella ja tietämyksen keruulla täydennettynä yhtenäinen, usean automaatin muodostama ketju.- Syntynyt kokonaisuus on uusi mahdollisuus analysointiin, jossa ohjelman alustavaa tarkastelua, testausta ja oikeellisuuden arviointia voidaan tehdä aina niissä paloissa ja portaissa, jotka kulloinkin tuntuvat järkeviltä ja ovat kussakin ohjelmisto-organisaatiossa jo valmiiksi olemassa, Laitila havainnollistaa.Hän osoitti Java-kielelle tarkoitetulla JavaMaster-työkalullaan, että koodin kulku kaikissa vaiheissaan voidaan kuvata joukolla automaatteja, joilla kullakin on täsmällinen formalisminsa. Menetelmä on laajennettavissa kaikille ohjelmointikielille ja soveltuu kaupallistettavaksi. Perinteiset analysointitavat, kuten staattinen ja dynaaminen analyysi, eivät vastaa modernin ohjelmistokehityksen haasteisiin, missä olemassa olevien ohjelmistototeutusten varaan on pystyttävä kehittämään uusia kilpailukykyisiä ratkaisuja. Tunnusomaisia piirteitä ohjelmistokehitykselle ovat nykyisin kansainvälinen yhteistyö, töiden ulkoistaminen ja muuttuvat tiimit, jotka edellyttävät joustavaa tapaa päästä perille toisten henkilöiden luomasta lähdekoodista.Tietojärjestelmätyössä spesifikaatio vanhenee. Sen takia joudutaan usein tilanteeseen, jossa ainoa virheetön toiminnan standardi löytyy ohjelmakoodista. Laitilan tutkimuksen kannalta oleellista on, että tietojärjestelmän toiminnan, sitä suorittavan tietokoneen ja koodin välinen suhde on formaali ja siten automaattisesti tulkittavissa, jos vain koodin purkamiseen olisi sopiva menetelmä.Lähtökohtana tutkimukselle oli Laitilan muodostama ennakkokäsitys koodin ymmärtämisen interaktiiviseksi metodologiaksi, joka perustui hänen pitkälliseen kokemukseensa tekoälysovelluksista ja ohjelmoinnista.Ratkaisu koodin ymmärtämisprosessille syntyi vaiheittain. Ensiksi Laitila kehitti symbolisen kielen abstrahoimaan alkuperäisen koodin semantiikkaa. Seuraavaksi kehittyi reduktionistinen malli, johon symboliset rakenteet muunnetaan itsenäisiksi olioiksi. Laitila kutsuu niitä atomeiksi, koska kunkin määrittelynä on vain yksi atomistinen sääntö, sillä alasäännöt on purettu omiksi atomeikseen. Atomistisen mallin simulointi vaati oman tarkastelunsa. Näin syntyi simulointiin soveltuva atomistisen semantiikan teoria, jossa kullekin atomityypille on oma formalisminsa tila-automaattina. Sen tuloksena erilliset atomit mahdollistavat alkuperäisen koodin interaktiivisen simuloinnin Turing-koneen tapaan yhtenäisenä abstraktina koneena, sillä molemmille ovat ominaista tilaformalismi sekä syötenauha ja tulosnauha, joihin tallennetaan suoritettavat symbolit tuloksineen.Toisin kuin alkuperäisessä Turingin koneessa syntyneessä abstraktissa koneessa logiikka on upotettu kunkin atomin sisään siten, että minkään atomin ei tarvitse tuntea edes naapuriatomiensa piirteitä. Tämä mahdollistaa sen, että semantiikka on voitu ohjelmoida Prologilla JavaMaster-työkalussa kullekin tyypille erikseen. Juuri tämä äärimmäisen modulaarinen rakenne mahdollistaa joustavan fokusoidun tarkastelun, sillä tyypistä riippumaton, atomistinen ajattelu on ominaista ihmiselle ja siten koodintarkastelutyöllekin. Research on program comprehension (PC) is important, because the amount of source code in mission-critical applications is increasing world-wide. Software maintenance takes more than one half of all software development time and the effort to understand code about a half of this. Although of great importance, research on program comprehension is not yet very advanced because of the new complex program semantics.As a solution an information flow structure with four stages is introduced for obtaining new knowledge from the code. The first stage, GrammarWare, transforms the program into a symbolic form to function as a construction for the model, as the second stage, ModelWare. In the research the smallest possible structure, was selected to be used for modeling. This gave the idea of an "atom" in the source code. It is implemented as a so-called hybrid object, combining, in an ideal manner, object based abstraction and expressiveness of a logic language in a symbolic form.The third stage, SimulationWare, implements a symbolic abstract machine, comparable with traditional Turing machine. With its computation model it enables symbolic analysis, which is comparable with dynamic analysis, but is rather flexible and modular. The last stage, KnowledgeWare, is aimed for collecting knowledge: the user constructs, stage by stage, the most suitable representations for the current tasks, which include code inspection, error detection and verification of current operations.The methodology is programmed with Visual Prolog and implemented in the JavaMaster tool, which enables the handling of Java code in accordance with the main stages. The formalism of the resulting implementation architecture combines the main functions in program development: reverse engineering, system maintenance, and design of new code. The unifying factor in this is the interactive support for the evaluating and proofing the relevant situation with the help of the tool |