© Jussi Koskinen, 2003-
Department
of Computer Science and Information Systems
http://www.cs.jyu.fi/~koskinen/hsses.htm,
since February 28, 2003
Email: koskinen@cs.jyu.fi
HyperSoft (Automated
Hypertext Support for Software Maintenance) on eräs lähestymistapa
ohjelmistojen ylläpitäjien tietotarpeiden tukeen. HyperSoft:ssa yhdistyvät
automaattinen ohjelma-analyysi (tarvittavan tiedon tuottaminen) ja
hypertekstitekniikat (tietojen esittäminen käyttäjille). HyperSoft:ia on
kehitetty TEKES-projektina. Yritysyhteistyössä ovat olleet mukana Nokia,
TietoEnator, ja Novo Group. HyperSoft:in käytön lähtökohtana ovat ylläpitäjän
tietotarpeet. Käyttäjä spesifioi tarvitsemansa tiedon suoraan osoittamalla
ohjelmatekstin komponentteja. Järjestelmä tuottaa automaattisesti ns.
hakurakenteita, joita käytetään tiedonhaun tuessa. Hakurakenteet esitetään
käyttäjille erilaisten tekstuaalisten-, hyperteksti-, rakenteisten- ja
graafisten näkymien kautta. Tässä dokumentissa kuvataan järjestelmän
perustoimintojen käyttöä.
Työkalun tarkoituksena on
ollut havainnollistaa hypertekstipohjaisten käänteistekniikkatyökalujen
mahdollisuuksia tietokoneohjelmien ylläpidon ja ohjelmien ymmärtämisen tuessa
ja mahdollistaa hypertekstiominaisuuksien systemaattinen empiirinen arviointi
(Koskinen, 2002). Lähtökohtana lähestymistavalle on ollut se, että
ohjelmateksti täyttää hyvin seuraavat, ns. hypertekstin muodostuksen
kultaiset säännöt (Shneiderman, 1989).
·
Kyseessä on
laaja informaatiokokoelma, joka voidaan organisoida lukuisiksi osiksi.
·
Osilla on
keskinäisiä riippuvuuksia.
·
Käyttäjä
tarvitsee vain pientä osaa kokonaisuudesta kerrallaan.
Lähestymistavan noudattamat
periaatteet ovat seuraavat.
·
Ohjelmateksti
esitetään käyttäjälle hypertekstinä (hyperteksti koostuu solmuista ja
linkeistä) (Paakki ym., 1996).
·
Solmut
vastaavat ohjelmanosia (ohjelmointikielen syntaktisia tyyppejä).
·
Linkit
vastaavat ohjelmariippuvuuksia (esim. kutsu-, tietovirta-,
kontrolliriippuvuuksia) (Paakki ym., 1997).
·
Kielioppiperusteisuus,
ohjelmatekstin osituksen perustana on ohjelmointikielen kielioppi ja sen
mukaiset sisäiset esitysmuodot, erityisesti jäsennyspuu.
·
Joustavuus,
tavoitteena on ylläpitäjän tilannekohtaisten tietotarpeiden tyydyttäminen.
·
Muodostettava
hyperteksti on väliaikaista (transient), vrt. Salminen & Watters
(1992). Näin vältetään ohjelmamuutoksiin ja hypertekstirakenteiden ylläpitoon
liittyvät ongelmat.
Järjestelmä perustuu ns.
HyperSoft-malliin (Paakki ym., 1996), jossa erotetaan seuraavat neljä ylläpidon
tuen tasoa.
·
Lähdekooditaso,
ohjelmakoodin lineaarinen esitys ohjelmatiedostoissa.
·
Syntaktinen
taso, jäsennyspuuesitys ja -operaatiot.
·
Hakurakennetaso,
väliaikaiset hypertekstirakenteet ja vastaavat operaatiot.
·
Käyttöliittymätaso,
ohjelmatekstin ja hypertekstin esitys käyttäjälle, hakurakennemääritykset,
käyttäjän ja järjestelmän välinen vuorovaikutus.
HyperSoft (v. 1.0) (Koskinen
ym., 1997) on kokeellinen käänteistekniikkatyökalu, joka tukee ANSI C –kieltä
(tietyin rajoittein) ja ESQL:ää. Tuetut käyttöjärjestelmät ovat MS Windows
3.01/95/NT/2000. Ohjelmiston perusosat ovat seuraavat, ks. Kuva 1.
·
Staattinen
ohjelma-analysaattori (Analyzer).
·
Hypertekstirakenteiden
tuottaja (Generator).
·
Käyttöliittymä
(Interface).
·
Integroitu
tekstieditori (ohjelmamuutosten tekoon) (PFE-Editor).
HyperSoft:in syötteenä
toimivat tiettyyn käyttäjän määrittelemään projektiin kuuluvat lähdekieliset
tiedostot, joille suoritetaan staattinen ohjelma-analyysi. Analyysin tulokset
tallennetaan ohjelmatietokantaan (Program Database). Käyttäjät
kommunikoivat järjestelmän kanssa sen edusta-osan (front-end) välityksellä.
Taustaosa (back-end) (Koskinen, 1997) muodostaa tarvittavat
tietorakenteet. Käyttäjät käynnistävät tilannekohtaisten tietotarpeidensa
perusteella hypertekstihakurakenteiden muodostuksen. Muodostuksen tulokset
esitetään käyttäjille erilaisten näkymien kautta.

Kuva 1. HyperSoft –järjestelmän yleisarkkitehtuuri (Koskinen,
2000, s. 29).
HyperSoft:in tukemia
hakurakennetyyppejä ovat seuraavat.
·
Esiintymälistat
(Occurrence list) muuttujille, funktioille ja käyttäjän määrittelemille
tyypeille.
·
Kutsukaaviot
(Call graphs) (eteen- ja taaksepäin suuntautuen) (ks. Kuvat 4, 5 ja 6).
·
Ohjelmaviipaleet
(Program slices) (Weiser, 1982) (eteen- ja taaksepäin suuntautuvaan
analyysiin perustuen).
HyperSoft:in tukemat
näkymätyypit ovat seuraavat (näkymä on aina hakurakennekohtainen).
·
Normaali
ohjelmatekstin lineaarinen esitys.
·
Hypertekstinäkymä,
jossa hypertekstitoiminnallisuus on sulautettu ohjelmatekstiesitykseen
(mahdollistavat oleellisten osien tutkimisen niiden välittömässä kontekstissa)
(ks. Kuvat 4 ja 5).
·
Rakenteinen
karttanäkymä (Structured map view) (näyttää hakurakenteen sisällön
hierarkkisesti) (ks. Kuva 6, yläosa).
·
Graafinen
funktio/moduuliriippuvuusnäkymä (Function dependency view) (tämän näkymän
kautta nähdään myös aktiivisen moduulin kytkökset) (ks. Kuva 6, alaosa).
HyperSoft:in
(perusasennuksessa ja esim. Agoranet:ssä: c:\hsoft\hyper.exe) käyttö edellyttää
seuraavat valmistelevat toimenpiteet.
·
Asetetaan ‘File/Project Manager/Project files’
-kohdasta esimerkkiprojektiksi esim. ‘hsoft
example’.
·
Asetetaan ‘File/Project Manager/Include definition’
-kohdasta ensimmäinen osa polkumäärittelystä muotoon: ‘c:\hsoft\include;...’.
·
Asetetaan
‘File/Preferences/Font/Dependencies’
-kohtaan ‘Times New Roman 10 pts.’ (tms., jos oletusarvot eivät sovellu käytettävälle
monitorille).
Järjestelmän varsinaiseen
käyttöön liittyviä keskeisiä seikkoja ovat seuraavat.
·
Kerralla
tutkittavat (ja analysoitavat) ohjelmatiedostot kuuluvat ns. projektiin (project),
joka määritellään komennolla: ‘File/Project
Manager’.
·
Aktiivisen
projektin sisältö näkyy tiedostoluettelossa: ‘View/Project file’.
·
Projektille
täytyy aina ensimmäisessä vaiheessa muodostaa ns. staattinen ohjelmatietokanta:
‘File/Analyze project’.
·
Staattinen
analyysi sisältää ohjelman jäsentämisen,
jos virheitä esiintyy, ne täytyy korjata, samaan tapaan kuin
ohjelmointikielten kääntäjien käytön tapauksessa, ennenkuin voidaan edetä.
·
Tilannekohtaisesti
tarvittavien, HyperSoft:in muodostamien väliaikaisten,
hypertekstihakurakenteiden generointipyynnöt ja niissä navigointi tapahtuu
suorakäyttöperiaatteita noudattaen.
·
Yksittäinen
hakurakenne muodostetaan osoittamalla tekstikohdistimella rakenteen
alkukriteeriä ja valitsemalla tarvittava hakurakennetyyppi (‘Query’ -valikko).
·
Huomaa,
että alkukriteerin täytyy olla laillisen tyyppinen ohjelmaosa ko.
hakurakennetyypille (tarkka määrittely on annettu ohjetiedostossa: ‘c:\hsoft\help\hsoft.txt’).
·
Tiettyä
hakurakennetta voidaan tarkastella halutun näkymän kautta: (‘View’ -valikko).
·
Hakurakenteita
voidaan generoida useita istunnon aikana, hakurakenteet säilyvät istunnon ajan
muistissa ja niitä voidaan noutaa etualalle (‘View/Select access structure’).
·
Rakenteen
alkusolmuun (home node) päästään vastaavalla ikonilla tai F5:llä.
·
Navigointivalintojen
peruutustoiminto (backtrack) on F6.
·
Historialista
(käyttäjän valitsemat polut): Navigation/History
list.
·
Linkkien
graafinen esitys ohjelmatekstin päällä asetetaan seuraavasti ‘Navigation/Show all links’ (tämä näyttötapa
on havainnollinen, mutta hidastaa näytön päivitystä, joten se kannattaa kytkeä
päälle vain väliaikaisesti).
·
HyperSoft
on integroitu PFE:hen (Programmer’s File Editor), ohjelmakoodimuutokset
ajatellaan tehtävän integroidusti käyttäen rakenteista karttanäkymää: ‘View/Structured Map for Editor’.
·
Järjestelmän
käyttöä on ohjeistettu ja sen toiminnallisuudet ja rajoitteet eritelty
tiedostossa: ‘c:\hsoft\help\hsoft.txt’.
Tyypillistä käyttösessiota on
havainnollistettu oheisissa kuvissa (Koskinen, 2000). Ensin muodostetaan
staattinen ohjelmatietokanta aktiiviselle projektille (‘Project Files’
-ikkunassa näkyville lähdekielisille tiedostoille). Staattisen
ohjelmatietokannan muodostaa DOS-ohjelma, joka näkyy erillisessä ikkunassa.
Staattisen ohjelmatietokannan muodostus on valmis Kuvassa 2. Analyysin aikana
mahdollisesti kohdatut jäsennysvirhetiedot tallentuvat lokitiedostoon. Kun
analyysi on valmis ko. ikkunaan ilmestyy (Agoranet:ssä) viesti ’Press ENTER to
continue…’, joka kuitataan ko. ikkunassa.

Kuva 2. Staattisen ohjelmatietokannan muodostus.
Näiden toimenpiteiden jälkeen
voidaan spesifioida hakurakenteita, jotka HyperSoft:in on tarkoitus tuottaa.
Kuvassa 3 on esitetty hakurakenteen spesifiointitapa, hakurakennetyyppinä on
tässä kutsukaavio (Forward Calls) ja lähtökohtana C-kielisen asennuksen
mukana tulevan esimerkkiohjelman pääohjelma (main). Tekstikohdistimen
(välkkyvä, kapea pystypalkki) tulee olla lähtökohtana toimivan ohjelmarakenteen
nimen päällä käynnistettäessä hakurakenteen muodostus. Hakurakennetyyppi siis
valitaan Query-valikosta.

Kuva 3. Hakurakenteen spesifiointi.
Kuvassa 4 on esitetty
hakurakenteen muodostus ja hakurakenne valmiina. Hakurakenteen
muodostushistoria näkyy ‘Debug Messages’ –ikkunassa (joka saadaan
näkyville ALT+TAB:lla). Hakurakenteeseen kuuluvat ohjelmanosat (nodes,
anchors) on korostettu näytöillä käänteisesti. Järjestelmä käyttää värejä
(jotka eivät näy mustavalkokuvissa) osoittamaan lähteekö tietystä solmusta
linkkejä. Tummansinisistä solmuista lähtee linkkejä, joita voidaan seurata
naksauttamalla hiiren kohdistimella ko. solmua. Jos tietystä solmusta lähtee
useita linkkejä, valitsee käyttäjä linkin HyperSoft:in putkahdusikkunassa
esittämästä listasta (Target node list). Ko. lista voidaan myös ns.
jäädyttää näytölle naksauttamalla sen vasenta ylänurkkaa. Tämä mahdollistaa
vaihtoehtoisten riippuvuuspolkujen systemaattisen läpikäynnin.

Kuva 4. Hakurakenteen muodostus.
Kuvassa 5 on esitetty muodostetun hakurakenteen käyttöä epälineaarisessa selauksessa, linkit on tässä havainnollistettu graafisesti nuolina, kyseessä ovat em. kutsusuhteet.

Kuva 5. Hakurakenteen käyttö.
Graafiset näkymät ovat
tärkeitä hypertekstiesitystavan täydentäjiä. Kuvassa 6 on esitetty näistä kaksi
tärkeintä HyperSoft:ssa tuettua muotoa. Ylhäällä: rakenteinen karttanäkymä (Structured
Map View) ja siihen integroitu hypertekstinäkymä, alhaalla: osa
muodostetusta funktioriippuvuusnäkymästä (Function Dependency).
Rakenteisen karttanäkymän vasemmanpuoleinen osa näyttää aktiivisen
hakurakenteen sisältämien solmujen jakauman ohjelmassa: moduuli-, proseduuri-
ja käskytasoilla. Tasoja voidaan sulkea ja avata keltaisista +/- ikoneista.
Oikeanpuoleinen osa näkymästä on synkronoitu vasemmanpuoleisen kanssa.
Funktioriippuvuusnäkymän sisältämät graafiset komponentit on linkitetty
vastaaviin kohtiin ohjelmatekstissä. Järjestelmää on kuvattu myös mm.
teknisessä raportissa Koskinen (1997) ja väitöskirjassa Koskinen (2000).

Kuva 6. Rakenteinen karttanäkymä (yllä) ja
funktioriippuvuusnäkymä (alla).
Koskinen, J. (1997). “HyperSoft:
Backend Components”. Computer Science and Information Systems Reports, Technical Report TR-17.
Koskinen, J. (2000). ”Automated
Transient Hypertext Support for Software Maintenance“
(Diss.). Jyväskylä Studies in Computing 4.
Koskinen, J.
(2002). “Experimental evaluation of hypertext access structures”. Journal of Software Maintenance and
Evolution: Research and Practice 14 (2), 83-108. 2002.
Koskinen, J., Nieminen, M. &
Suominen, T. (1997). HyperSoft system (v. 1.0).
Organization: Department of Computer Science and Information Systems,
Paakki, J.,
Koskinen, J. & Salminen, A. (1997). “From relational program dependencies
to hypertextual access structures”. Nordic
Journal of Computing 4 (1),
3-36. 1997.
Paakki, J., Salminen, A. &
Koskinen, J., (1996). “Automated hypertext support for
software maintenance”. The Computer
Journal 39 (7), 577-597.
Salminen,
A. & Watters, C. (1992). “A two-level structure for textual databases to
support hypertext access”. Journal of the American Society for Information
Sciences 43 (6), 432-447.
Shneiderman,
B. (1989). “Reflections on authoring, editing, and managing hypertext”. Barret, E. (Ed.) The Society of Text,
115-131. MIT Press.
Weiser,
M. (1982). “Programmers use slices when debugging”. Communications of the ACM 25
(7), 446-452.
Updated: October 24, 2008 by Jussi Koskinen.