24.04.2009, päivitetty 28.6.2022

FT Vesa Lappalainen 
Jyväskylän Yliopisto
Tietotekniikan laitos
PL 35
40014 AGORA
puh: 014-2602722
vesal@jyu.fi

UPJ-vaativuustasolle 7 vaadittava toimintani ohjelmistotuotannon piirissä

Koetan tässä kirjoituksessani lyhentää kirjoitukseni Tuotantoni sulautettujen järjestelmien, ohjelmistotekniikan ja opetustekniikan piirissä sisältöä. Tuossa kirjoituksessa olen tarkastellut toimintaani aikaperspektiivistä. Tässä yritän vetää yhteen tuotantoni yleisiä lähtökohtia. Katson että ohjelmistotuotantoni korvaa sen eron, mitä minulla on muihin verrattuna julkaisuissa. Seuraavassa on suluissa mainittu henkilö/henkilöt jotka ovat ohjauksessani jonkin ominaisuuden kehittäneet.

1. Muunneltavuus

Osaksi ehkä tappioksenikin on koitunut tavoita parametrisoida ohjelmat mahdollisimman pitkälle. Tämän seurauksena asiakkaan vaatima muutos on saattanut toteutua hyvin pienellä työmäärällä ja näin asiakasta ei pääse laskuttamaan. Oleellista on kuitenkin ollut pyrkimys siihen että tuotteessa pärjättäisiin aina yhdellä varsinaisella ylläpidettävällä ohjelmalla ja asiakaskohtaiset muutokset asuvat parametreissa ja erilaisissa skriptikielisissä tiedostoissa. Tähän samaan liittyy myös monikielistämisen tutkimukseni.

Jotta parametrisointi olisi äärimmäisen helppoa, olen kehittänyt komponentteja, jotka itse huolehtivat arvoistaan. Näin tuotteissani päästään tilanteeseen, jossa uuden parametrin lisääminen on komponentin vetäminen hiirellä lomakkeelle ja komponentin arvon kysyminen kohdepaikassaan. Pohja tälle työlle tuli jo Kave 9 assembler-koodissa ja parhaiten se on nyt käytössä Kave 2000-järjestelmässä. Itse komponentit on annettu myös opiskelijoiden käyttöön KaveOpt-paketissa.

Ohjelmointi 2 -kurssi huipentuu siihen, että todetaan melkein kaikki harjoitustyöt mahdolliseksi tehdä yhdellä koodipohjalla ja tai ainakin samoja komponentteja käyttäen.

Joskus asiakaskaskohtaiset erot ovat niin suuria, että ei enää riitä pelkkien parametrien määritteleminen. Tällöin tarvitaan erilaisia skriptikieliä. Ensimmäinen merkittävä kehitettiin PrnToCom-ohjelmaa varten. Kave 9 sisälsi myös täysin rinnakkaisen ohjelmoitavan skriptikielen. Kave 2000-järjestelmässä skriptikieli perustuu olioihin. Jokainen ohjelma-askel on oma olio, jolloin uusien ohjelmakäskyjen määritteleminen on varsin helppoa perimällä niitä sopivista kantaluokista. Kieli koostuu ohjelmaolioista, joista jokainen voi sisältää useita ohjelma-askel olioita. Kukin ohjelmaolio on oma säikeensä ja näin saadaan aikaan erittäin rinnakkainen mutta silti yksinkertainen kieli.

Myös Korppiin on rakennettu (samoin kuin Kurki-järjestelmään sitä ennen, Pauli Kujala) JavaScript-pohjainen tapa tehdä funktioita kurssin tulosten laskemiseksi sekä erilaisten jonotusarvojen hallitsemiseksi (Kirsi Koponen).

Osa muunneltavuutta on myös oikeuksien jakaminen. Olen kehittänyt erillisen komponentin, joka käy läpi kaikki ohjelman graafiset komponentit ja antaa niille käyttäjätason mukaisen käyttöoikeuden (mm. komponentin näkyvyyden). Tätä pitäisin ehkä eräänä merkittävimmistä saavutuksistani muokattaessa ohjelmaa eri käyttäjäryhmille.

2. Ohjelmien monikielistäminen (localizing)

Yksi merkittävä yhteinen nimittäjä kaikille kehittämilleni ohjelmistoille on se, että ne tulisi olla mahdollisimman helppo kääntää muillekin käyttäjien kielille, kuin alkuperäinen ohjelma on kirjoitettu. Pohjan mallille loin Matka-ohjelmassa ja tämän idean julkaisin "Windows-ohjelmointi C-kielellä" -monisteessani. Tavoitteena oli luoda tapa kirjoittaa koodia niin, että tulevasta käyttökielestä (suomi/englanti jne.) ei tarvitsisi huolehtia ohjelmointivaiheessa. Valmiitakin ratkaisuja oli, mutta ne olivat aina työläitä käyttää. Käyttämääni mallia kehitettiin vielä yhteistyössä Multilizer-yhtiön kansallistamistuotteessa. Malli on nykyisin käytössä mm. Korppi-järjestelmässä (Kirsi Koponen) ja Kave 2000-järjestelmässä.

TIMissä on myös meneillään monikilistäminen. Yksi TIMin erikoispiirteistä on se, että voidaan tehdä dokumentteja joista tuotetaan toisen kielisiä dokumentteja. Jos alkuperäinen dokumentti muuttuu, niin toisenkieliseen dokumenttiin tulee tästä huomautus ja käännöstä ylläpitävä voi heit tehdä tarvittavat korjaukset. Keväällä 2022 valmistuneen TimTra-projektin jälkeen käännösdokumentti voidaan jopa luoda automaattisesti tekoälykääntäjän (DeepL) avulla. Toki tekoälyn tekemä käännös täytyy aian ihmisen tarkistaa. Ominaisuutta käytettiin hyväksi mm. kevään 2022 valintakokeiden eri kilisiä versioita tehtäessä.

3. Testaaminen

Oikeastaan lähes kaikkiin kehittämiini järjestelmiin ja ohjelmistoihin on kuulunut, että tuote pitää pystyä testaamaan mahdollisimman pitkälle etukäteen. Tämä on vaatinut omien mittalaitteiden ja simulaattoreiden kehittämistä, logituksen ja sen analysoinnin kehittämistä sekä tiukkaa asennetta siihen, että kirjoitettavat moduulit testataan. Nykyisin tälle on nimikin "Test First" tai jopa "TDD" (Test Driven Development). Itselläni yksi oleellinen komponentti jo hyvin alusta asti on ollut huippuunsa viety debuggerin käyttö. Jatkotavoitteena on yksikkötestaamisen oleellinen helpottaminen.

Melkoinen osa Korpin luotettavasta toiminnasta ja mahdollisten virheiden nopeasta korjaamisesta kuuluu Korpin logitusjärjestelmälle ja sen analysoinnille (yhdessä Pauli Kujalan kanssa).

Yksi kehitystyö tähän liittyen on ComTest, jossa tarkoituksena on yksinkertaistaa yksikkötestaamista ja yksiköiden dokumentointia. Näin testaamista voidaan opettaa jo ensimmäisestä kurssista alkaen.

TIM kehityksessä testaaminen on viety varsin pitkälle ja koodin laittaminen versionhallintaan ajaa sille satoja testejä. Tosin mikään automatiikka ei täysin korvaa ihmistestausta.

4. Järjestelmien välinen yhteistyö

Kaikille hyville tietojärjestelmille on tyypillistä, että niiden tulisi voida kommunikoida muiden järjestelmien kanssa. Jokainen ohjelmisto suorittaa sen tehtävän, jossa se on parhaimmillaan ja antaa tiedon seuraavan järjestelmän käsiteltäväksi. Näistä järjestelmistä esimerkkejä on Korppi (Pauli Kujala/M-määritykset ja Jore, Kirsi Koponen/Acta, Panu Suominen/LDAP, Minna Hillebrand/Info), InSitu, Riippuliito, Kave 8 (Timo Lappalainen), Kave 2000, Versa ja PrnToCom. Oleellista on luoda protokollia tiedonsiirtoon ja käyttää standardeja silloin kun niitä on helposti käytettävissä.

Korpin poistuttua TIMin on pitänyt ottaa iso kuorma Korpin toimintoja. Osin tämä onnistuu sen ansiosta, että Sisuun on tehty rajapintoja, joiden avulla kurssilaisten tiedot saadaan TIMiin ja toisaalta valmiit kurssisuoritukset lopulta Sisuun. Tätä voidaankin pitää Sisun toimivimpana osana.

5. Tietoliikenne

Ohjelmistotuotteeni perustuvat merkittävissä määrin myös tiedonsiirtoon. Kave 8 oli varsin hajautettu järjestelmä. VT200:ssa oli sarjamuotoista siirtoa hiottuna äärimmilleen sarjapiirin vastaanottomahdollisuudet. Samoista palasista koostui PrnToCom. Myös Versa perustui vankaan tietoliikenne- ja protokollaosaamiseen. Matka-ohjelma kommunikoi digitointipöydän kanssa samoja komponentteja käyttäen. Riippuliito kommunikoi vastaavasti GPS-laitteiden kanssa. InSitun ensimmäinen versio käytti omaa radioprotokollaa asiakaspäätteisiin kommunikoidessaan (Rami Lehtiniemi). Nykyinen InSitu-kehitysversio käyttää hyväkseen BlueTooth ja TCP/IP-pohjaista kommunikointia. InSitussa on ylempien verkkokerrosten protokollat suunniteltu erikseen tarkoitusta varten. Samoin kättelyvaiheen mekanismit on suunniteltu erikseen tarkoitusta varten (Tuukka Puranen, Mikko Tyrväinen).

MiPoFUI oli idea täysin uudenlaisen kännykkäkäyttöliittymän toteuttamisesta. Siinä yhdistettiin mobiililaitteen paikantamiseksi useita eri järjestelmiä ja tekniikoita (Panu Ojala, Tuomas Räsänen).

Tietoliikenne on automaattisesti mukana, kun TIMin käynnistyy, eli tietoliikenteestä on tullut nykyisin arkipäivää normaalissa työskentelyssä.

6. Anturitekniikka

Lähes kaikkien tekemieni sulautettujen järjestelmien kriittisin komponentti on pulssianturitieto (Kave 1, Kave 2 (Timo Lappalainen, Olli Hiltunen), Kave 3, Kave 9, Kave 2000). Oleellista on, että pystytään havaitsemaan pyörimissuunta ja kalibroimaan erilaista virhelähteistä tulevat virheet. Alkuaikoina tätä tehtiin erilaisilla jakaja/kertoja –piirikokonaisuuksilla, nykyisin tietysti ohjelmallisesti. Viimeisimmissäkin ratkaisuissa (Kave 2000) pulssitieto käsitellään omalla piirikortilla (Timo Lappalainen) reaaliaikaisuuden saavuttamiseksi.

Samoin merkittävä osa järjestelmiä on ollut kosketintiedon käsittelyä. Koskettimissa esiintyy aina kytkeytymishetkellä kytkinvärähtelyä, jonka poistamiseksi signaalia täytyy viivästyttää. Viivästyttämistä ei kuitenkaan saa tehdä liikaa, jotta signaalin aiheuttamaan ilmiöön ehditään ajoissa reagoida. Joissakin nopeasti liikkuvissa kohteissa tämä aiheuttaa jopa sen, että signaalin tulohetken tulkintaa pitää suorittaa suhteessa liikkeen nopeuteen.

MiPoFUI projekti voidaan laskea myös tähän kategoriaan, sillä siinä käytettiin vahvasti hyväksi mobiililaitteiden uusinta anturitekniikkaa.

Mobiililaitteiden myötä tuli paljon esimerkiksi GPS:ään liittyvää teknologiaa, jota on hyödynnetty.

7. Havainnollistaminen

Asioiden havainnollistaminen on aina ollut lähellä sydäntäni. VT200:ssa oli grafiikkaominaisuudet, samoin erittäin yksikertainen tapa valita siirrettäviä tiedostoja. Preview oli tehty näyttämään mitä paperilta tulee aikanaan ulos. Versa oli tehty tietokoneen näytön sisällön havainnollistamiseksi näkövammaisille. 3D-grafiikkakirjasto (Pirjo Prosi) auttoi opiskelijoita tuottamaan kuvia 2-ulotteisista funktioista. Marker auttaa havainnollistamaan ja korostamaan luennolla ruudulla näytettävää asiaa. Sivutuotteena on syntynyt WinAapinen, jonka tarkoitus on opettaa 2+ vuotiaita lapsia lukemaan.

Tähän liittyy myös Ohjelmointi 1-kurssille kehitetty Graphics-kirjasto (Markus Kivioja). Perus-Javan tekniikoilla yksinkertaisenkin graafisen kuvan tekeminen vaatii kohtuuttomasti ohjelmakoodia. Graphicsin avulla jo muutamalla rivillä saadaan aikaiseksi kohtuullisen näyttäviä graafisia kuvaajia.

Osa havainnollistamista on myös kursseilla käytettävät näytelmät, joissa ihmiset leikkivät osaa "tietokoneesta" ja pyritään näin osoittamaan kommunikoinnin merkitystä.

8. Tekstinkäsittely

Alusta asti minulla on ollut myös pyrkimys mahdollisimman ylläpidettävään tekstinkäsittelyyn. Tavoitteena on että yksi asia tehdään vain yhden kerran. Aluksi tavoitteena oli vain kirjoituskoneen korvike, tällaisella kirjoitin mm. matematiikan väitöskirjani. Sittemmin TeXin yleistyessä jatkokehitin siihen sen ajan koneilla nopeasti toimivaa esikatseluohjelmaa (Preview, fonttien osalta Ari Lehtonen).

Wysiwyg-editorien alkuaikoina samasta materiaalista julkaisin automaattisesti luentokalvot ja luentomonisteen. Kalvoihin kerättiin oleelliset esimerkit ja yhteenvedot. Luentomoniste luonnollisesti sisälsi tarkemmat tiedot, kuitenkin niin että kalvolle saattoi mennä myös asiaa, joka ei tullut luentomonisteeseen. Tekniikkaa sovelsin aluksi Sprint-tekstinkäsittelyohjelmaan (Borland) ja myöhemmin Word-ohjelmaan (MicroSoft).

Nykyisin on tarvetta julkaista sama dokumentti paperiversiona, PDF-versiona ja verkossa HTML-versiona. Tähän olen aikanaan erilaisten 3-osapuolen ohjelmien avulla kehitellyt itselleni prototyyppejä. Parhaimmillaan monimuotojulkaisu syntyy, kun tallennan dokumenttini. Tekniikan leviämisen esteenä on se, ettei esimerkiksi yliopistossa ole yhteisiä tyylipohjia ja valmiuksia siihen, että kaikki käyttäisivät niitä. Jos prototyypit hiottaisiin valmiiksi saakka, niin säästettäisiin valtavasti ihmisten työaikaa, kun erilaiset julkaisut syntyisivät automaattisesti. Esimerkkeinä tästä on vaikkapa informaatioteknologian tiedekunnan pöytäkirjojen hallintajärjestelmä (en ollut aktiivisesti tässä projektissa mukana) sekä XOO (Xml Opinto-Opas, Miika Nurminen) opinto-oppaan automaattiseen kokoamiseen.

TIMin myötä kaikki edellä mainittu on saatu kerättyä yksiin kuoriin. Yhdellä sovelluksella saadaan tehtyä kaikki kursseilla tarvittava materiaali painetuista luentomonisteista alkaen interaktiivisiin materiaaleihin, kalvoihin, luentokyselyihin ja harjoitustehtäviin, niiden palautukseen ja pisteytykseen.

TIMin ajatus siitä, että kaikki ovat dokumentteja sopii erinomaisesti maailmaan, joka koostuu dokumenteista. TIMillä onnistuu pienien harjoitustehtävien lisäksi kirjojen ja laajojen opinnäytteiden tekeminen.

9. Projektityöskentely ja johtaminen

Korppi-järjestelmän yhteydessä olen ollut käytännön esimiehenä yhteensä 23 henkilölle, noin 360 henkilötyökuukauden osalta. Jos mukaan lasketaan myös Korppia kehittäneet projektit, niin henkilömäärään tulee yli 50 henkilöä ja 240 htkk:ta lisää.

http://www.mit.jyu.fi/vesal/korppi/doc/esittelyt/henkilot.html

Kokonaisuutena projektiin osallistuneesta henkilömäärästä saa käsityksen kiitoksistani:

http://www.mit.jyu.fi/vesal/korppi/doc/esittelyt/korppikiittaa.htm

Insitu-projektin aikana alaisenani on ollut 4 eri yliopiston taholta palkattua henkilöä, joista kaksi on tällä hetkellä projektin töissä.

TIM-kehityksessä on ollut mukana yli 80 henkilöä. Osa palkattuna, osa erilaisissa Jyväskylän ja Tampereen yliopiston sovellusprojekteissa.

10. Rahoituksen hankkiminen

Olen ollut hankkimassa Korppi-projektin henkilöille tarvittavaa rahoitusta laitokselta, tiedekunnalta, virtuaaliyliopistolta, opetuksen laatuhankkeelta, yliopiston tilapalveluilta sekä keskushallinnolta.

Merkittävää on, että laskelmieni mukaan Korppi on säästänyt melkoisesta henkilömäärästään huolimatta (n. miljoona euroa palkkakuluja) toistaiseksi yliopistolta n. 700 000 euroa verrattuna vaikka siihen, että samana aikana (7 vuotta) olisikin ollut käytössä Oodi-järjestelmä. Laskuista on jätetty lisäksi pois se, että olisi tarvittu joku toinen salivarausjärjestelmä, josta olisi tullut lisenssikuluja, merkittävä määrä lisätyötä, koska salivaraustieto olisi pitänyt siirtää järjestelmien välillä sekä eri järjestelmistä koituvat koulutuskustannukset. Em laskelma on tehty vuonna 2008, joten 2020 säästö olisi jo miljoonia.

InSitu-järjestelmän kehittämistä varten olen saanut rahoitusta tietotekniikan laitokselta sekä opetuksen laatuhankkeelta että Jyväskylä Science Parkilta (Johannes Hopiavuori).

MiPoFUI projektiin saatiin Nokialta 30 000 euroa ja siinä työskenteli palkattuna 2 henkilöä.

Nuorten pelikurssien/JyPelin kehitykseen olemme saaneet Teknologiateollisuuden 100-vuotissäätiöltä useina vuosina avustuksia noin 190 000 € edestä.

Nyt TIMin kautta olen mukana kahdessa miljoonahankkeessa: Älyoppi ja DEFA (Digital Education For All). Tästä jyväskylän osuus on yhteensä n. 450 000 €.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.