keskiviikkona, heinäkuuta 26, 2006

Ohjelmistotuotanto, Mitä välii. [ot]

Carnegie-Mellon Universityn (CMU) HCI-instituutin tutkijan Andrew Ko:n mukaan tällä hetkellä Yhdysvalloissa noin kolme miljoonaa työntekijää työskentelee ainakin osittain eri tasoisten ohjelmointitehtävien parissa. Arvion mukaan vuonna 2010 jopa 30% Yhdysvalloissa syntyvistä uusista työpaikoista vaatii jonkinasteista ohjelmointitaitoa.

Vastoin erityisesti monien alan vanhempien partojen (ns. Dijkstran saunakavereiden) näkemystä, ohjelmistotuotannon alueella suurin osa (taloudellisessa ja pragmaattisessa mielessä) relevanteista ongelmista ei tuntuisi johtuvan esimerkiksi formaalien menetelmien puutteesta ja niitä käyttävien ihmisten matemaattisen koulutuksen ohuudesta. Suurin osa näistä ongelmista eivät tuntuisi olevan luonteeltaan teknisiä vaan liittyvän pikemminkin ns. pehmeisiin asioihin kuten ihmisten keskinäiseen kommunikaatioon ja organisaation toimintaan. Valitettavasti ohjelmistotuotannon tutkimus keskittyy edelleen aivan liian vähän ratkaisemaan tällaisia "pehmeitä" asioita.

Olen joskus muotoillut, että ohjelmistotieteen tutkimus tuottaa oikeaa tiedettä leluesimerkeillä, kun taas ohjelmistotuotannon tutkimus tuottaa lelutiedettä oikeilla esimerkeillä. Vaikkei tilanne näin karu olekaan, siinä on ripaus totuutta mukana.

Yksi ongelma johon olen törmännyt ohjelmistotuotannon tutkimuksen kanssa on tutkimuksen muotoilussa. Rakennetut työkalut tuntuvat ratkaisevan intuitiivisesti ajatellen merkityksellisiä ongelmia mutta tutkimuspaperit tyytyvät esittämään nämä työkalut itsessään alan tutkimustuloksina. Välillä tuntuu siltä, että ohjelmistotuotannon tutkijat häpeävät tutkimuksen formaalin (lue: matemaattisen) osuuden vähäisyyttä ja välttääkseen vertailut käytettävyysihmisiin he keinuvat peukaloa imien sikiöasennossa ja toistelevat "meillä on työkalu, meillä on työkalu". Työkalujen rakentamisen ohella pitäisi kuitenkin esittää joukko hypoteeseja, käyttötutkimukset ja pyrkiä analysoimaan saavutettuja tuloksia.

Yleinen ongelma ohjelmistotuotannon tutkimuksessa on se, että esitettyjen hypoteesien todentaminen on tyypillisesti erittäin hankalaa. Oli tutkittava järjestelmä mikä tahansa, voidaan aina kyseenalaistaa voidaanko sen perusteella yleistää kaikkia järjestelmiä koskevia väitteitä. Tyypillisimmillään laadukas käyttötutkimus rakennetaan valitsemalla kohdejärjestelmäksi joku hyvin tunnettu, avoimen lähdekoodin ohjelmisto, jolloin tutkimuksen kohde on yleisesti saatavilla. Suoritettavaksi tehtäväksi valitaan järjestelmän piirteen muokkaaminen, korjaaminen tai lisääminen. Koehenkilöiksi valitaan mielellään erilaisen kokemuksen omaavia koehenkilöitä, 1. vuoden opiskelijoista teollisuudessa työskenteleviin ammattilaisiin. Henkilöiden suoritus kirjataan ylös, mahdollisesti kuvataan ja analysoidaan, ja sitä verrataan referenssitoteutukseen.

Jos halutaan tutkia yksittäisten ohjelmointityökalujen, kuten ohjelmiston ymmärtämistä tai navigointia helpottavien työkalujen sijaan korkeamman tason mallinnustyökaluja, menetelmiä tai prosesseja, mielekkään testauskokonaisuuden rakentaminen on jo lähes mahdotonta ilman erittäin suuria panostuksia. Käytännössä tällaiset tutkimuset suoritetaan upottamalla ne osaksi jotain opiskelijoille pakollista kurssia.

Tässä kirjoituksessa ei ollut mitään erityistä sisältöä. Kun kerran aloin kirjoittamaan, jätän sen tänne ja jatkan myöhemmin hieman konkreettisemmalla tasolla.