Ylläpitoon liittyvät työkalut Käyttötarkoituksia ohjelman ymmärtäminen visualisointi etsintä dokumentointi muutosten hallinta koodin muotoilu (pretty printer) erikoistuneet editorit metriikkoihin liittyvät työkalut Muita työkaluja tuotteenhallinta versionhallinta testaus virheenetsintä (debuggeri) Järjestelmä ja sen dokumentit Työkalujen yleinen arkkitehtuuri Jäsennys, semanttinen analyysi Kerätyt tiedot Näkymien kokoonpano Uudet näkymät järjestelmästä muotoilu grafiikka dokumentti metriikka logiikka raportti Ylläpitotehtävien mukaiset työkalut Työkalujen jaotteluperusteita Testaus, virheen etsintä 8 % 5 % Kääntäminen, konvertointi Tuotteenhallinta, versionhallinta Uudelleenrakentaminen Takaisinmallinnus 47 % Ymmärtäminen Muutoksen toteuttaminen Testaus Tehtävän mukaan takaisinmallinnus uudelleenrakentaminen muutosten hallinta Staattiset ja dynaamiset työkalut utomaattiset ja käyttäjän ohjaamat Selaamiseen ja jäsentämiseen perustuvat 4 Staattiset vs. dynaamiset työkalut Esim. muutosten hallinnassa mihin ohjelman kohtiin muutos vaikuttaa Staattiset työkalut perustuvat kontrollivuohon ja aliohjelmien kutsusuhteisiin ynaamiset työkalut perustuvat testiajoihin (tiedustelut) jako herättäviin ja poissulkeviin testeihin tutkitaan, mitkä koodikomponentit tulivat suoritettua herättävillä testiajoilla mutta ei poissulkevilla Ohjelmien ylläpidon työkalut Monissa ylläpitotyökaluissa tarvitaan kääntäjätekniikkaa Kääntäjät korkeamman tason kieleltä siirrytään matalamman tason toteutukseen Ylläpitotyökalut (takaisinmallinnustyökalut) matalamman tason toteutuksesta siirrytään korkeammalle abstraktiotasolle 5 6
Yhteisiä toimintoja Selaaminen, leksikaalianalyysi (scanning) Jäsentäminen, syntaksianalyysi (parsing) Tyyppitarkistus Tietovuoanalyysi Kontrollivuoanalyysi Viipalointi Selaaminen Kääntäjän leksikaalianalyysi merkkijonosta (ohjelmasta) tuotetaan kielen symboleita (token) Ylläpidossa selaamisen tarkoitus voi olla ohjelman ymmärtäminen voidaan esim. paikallistaa tietyn muuttujan esiintymiä Selaajageneraattorit 7 8 Jäsentäminen Kääntämisen jäsennysvaiheessa tarkistetaan, voiko kielen kielioppi tuottaa annetun symbolijonon (ohjelman) Ylläpidossa ja uudistamisessa käytetään jäsentäjän tuottamia jäsennyspuita ohjelman kompleksisuuden ja muutoskustannusten mittaaminen Jäsentäjägeneraattorit Jäsentämisen ongelmia ylläpidossa Liian tarkat tarkistukset esim. puuttuvat ohjelman osat Ohjelmien erikieliset osat Eri työkalut voivat tuottaa erilaisen jäsennyksen 9 Tyyppitarkistus Kääntämisessä tarkistetaan tyyppien yhteensopivuus kielen sääntöjen mukaisesti esim. sijoituslauseet, parametrien välitys Ylläpidossa ja uudistamisessa tyyppitarkistuksen tulokset voidaan tallentaa jäsennyspuuhun myöhempää tarkastelua varten esim. samaa tyyppiä olevien muuttujien etsiminen Tyyppitarkistuksen määrittelyyn voidaan käyttää syntaksiohjattuja käännösmekanismeja esim. attribuuttikielioppeja Tietovuoanalyysi Kääntämisessä tietovuoanalyysi kertoo muuttujien arvojen muutoksista, arvojen säilymisestä ja muuttujaviittauksista Ylläpidossa saadaan tietoa muuttujien välisistä riippuvuuksista esimerkiksi määrittely-käyttö suhteet voidaan esimerkiksi paikallistaa kaikki muuttujat, jotka ovat riippuvaisia jostakin tietystä muuttujasta
Kontrollivuoanalyysi Kääntämisessä kontrollivuoanalyysi selvittää kontrollin kulkemisen ohjelmassa tarvitaan tietovuon tarkastelussa tarvitaan koodin optimoinnissa Ylläpidossa tukee ohjelman ymmärtämistä, koska ohjelman rakenne saadaan paremmin esiin Viipalointi Etsitään pienin mahdollinen määrä koodia niin, että tietty muuttuja saa arvonsa voidaan määrittää ohjelman osat, jotka riippuvat annetusta muuttujasta Voidaan käyttää virheiden etsinnässä, ohjelmien ymmärtämisessä, koodin rinnakkaistamisessa 4 Toimintojen vertailu Leksikaalianalyysi Syntaksianalyysi identtisiä vaiheita Semanttinen analyysi Koodin generointi erilaista Koodin optimointi perustuu kontrolli- ja tietovuon tarkasteluun ohjelman rakennetta ja muuttujien välisiä riippuvuuksia selvennetään näin tapahtuu myös, kun koodista tehdään ymmärrettävämpää Erilaisia ylläpitotyökaluja Kielestä riippumattomat työkalut eivät tarvitse sisäänrakennettua tietoa mistään ohjelmointikielestä esim. grep Kielestä riippuvat työkalut käyttävät sisäänrakennettua tietoa ohjelmointikielestä esim. -kääntäjä Geneeriset (parametroidut) työkalut ohjelmointikieli annetaan parametrina 5 6 Geneeriset työkalut Työkalut Käyttötarkoituksia: ohjelman analysointi visualisointi uudelleenrakentaminen automaattinen kielikonversio Vanhat ohjelmat voivat olla monikielisiä Tietovuoanalyysi 7 8
Rigi Rigi main listnext mylistprint listid listfirst listinsert listinit main listcreate list 9 oderawler UPLO Esimerkkejä metriikoista: - attribuuttien määrä (leveys) - operaatioiden määrä (korkeus) -LO (väri) Ovation Versioiden väliset erot Tiedosto 7 9 7 ika 4 4
ali - työkalupakki Työkalujen tarpeellisuus Tietojen kerääminen Selaus Yhdistely Jäsennys Profilointi Tietovarasto Ulkoinen manipulointi Visualisointi nalyysi ikaa kuluu: työkalun kehittämiseen työkalun opettelemiseen työkalun räätälöintiin, mukauttamiseen tilanteeseen sopivaksi Toisaalta ilman työkaluja tapahtuva koodin analysointi (ymmärtäminen) on vaikeaa tehtävän alussa 5 6 5