• Ei tuloksia

6 Ehdotetut muutokset

6.5 Muut muutokset testaus-ja kehitysprosessiin

6.5.1 Testattavuus

Testattavuuden parantaminen etenkin hakemusjärjestelmän osalta havaittiin tarpeelliseksi ennen ylläpitovaiheeseen siirtymistä (MEKAUD 2010). Hakemus­

järjestelmän koodi ei noudattanut kaikilta osiltaan monikerrosarkkitehtuuria.

Hakemusjärjestelmän toteutuksen alkaessa siirryttiin iteratiiviseen kehitysmalliin, ja sen alkuvaiheessa vallinneen resurssipulan vuoksi refaktoroinnille ei jäänyt riittävästi aikaa. Tämä on mainittu iteratiivisen mallin haasteeksi (Poimala et ai.

2008).

Koodin refaktorointia on tehty jo tämän työn aikana. Muutosten yhteydessä pyritään kunkin luokan tilannetta parantamaan poistamalla arkkitehtuurikerrosten ohitukset ja siirtämään toiminnallisuuksia oikealle tasolle. Yksikkötestauksen helpottamiseksi poistetaan myös luokkariippuvuuksia. Vastaavaa refaktorointia ja yksikkötestattavuuden parantamista tehdään myös integraatiopalveluiden liiketoimintalogiikkaa suorittaviin luokkiin muutosten yhteydessä. 22

22 http://www.componentsoftware.com/products/CSDiff/index.htm

72

Testattavuuden parantaminen on mainittu edellytyksenä testiautomaation onnistuneelle toteuttamiselle (Berner et ai. 2005; Kaner et ai. 2002; Bach 1999).

Tätä käsiteltiin luvuissa 3.1 ja 3.4.

6.5.2 Testauksen kattavuus ja mittaukset

Yksikkötestausta tulisi laajentaa nykytasosta, jotta ylläpitovaiheessa olisi käytössä riittävän laajat regressiotestipaketit. Yksikkötestaus on kuitenkin helpoin automatisoitava testaustaso, ja sen avulla voidaan ehkäistä turhien regressio- virheiden syntyminen (ks. luvut 3.2, 3.4 ja 3.10). Vaikeasti testattavissa komponenteissa luokkatason yksikkötestaus ei ole tärkein kriteeri (Kaner et ai.

2002; ks. luku 3.4). Näiden kohdalla testaus voidaan toteuttaa myös integraatiotestauksena alustamalla testin alkutilanne tietokantaan ja käyttämällä oikeita mallisanomia tyngissä. Testauksen laadun parantaminen on Bachin (1999) sekä Kaner et ai. (2002) mukaan tärkeämpi tekijä ohjelmiston laadulle kuin testien automatisointi, joten ilman automatisointiakin testien kattavuuden parantaminen on perusteltua.

Projektin testauskriteereistä puuttuu selvä määritelmä testauksen kattavuus- vaatimuksista lukuun ottamatta vaatimusten toiminnallista testaamista. Jälkikäteen kattavuusvaatimuksen asettaminen ei käytännössä onnistu ilman uudelleen- resursointia ja lisätyötä. Uusissa hankkeissa tulisikin määritellä selvä yksikkö- testauksen kattavuustavoite, jotta testit ovat varmasti riittävän kattavia ylläpitoa ajatellen. Näin kehittäjillä olisi tieto vaaditusta testaustasosta ja toisaalta yksikkö- testaukseen tarvittavat resurssit on mahdollista arvioida realistisesti. Kattavuus- tavoitteen asettamista suosittelevat Bumstein (2003) ja EEEE:n yksikkötestausta koskeva standardi (Std 1008-1987), joita käsiteltiin luvuissa 2.3.2, 2.3.3 ja 2.4.2.

Yksikkötestauksen kattavuutta olisi mahdollista parantaa käyttämällä rakenteellisten testitapausten luomiseen Microsoftin Pex-työkalua (ks. luku 3.9).

Samassa paketissa on mukana Moles-laajennus kooditason rajapintojen jäljittelyyn. Mikäli Microsoft jatkaa Molesin kehitystä, kannattaa nämä työkalut ottaa käyttöön viimeistään Visual Studio 2010 käyttöönoton yhteydessä.

Pemsteluna tälle on projektin tavoite käyttää mahdollisimman paljon kehitys- työkalujen sisältämiä vakiokomponentteja tai Microsoftin tukemia omia laajennuksia erillisten työkalujen sijaan.

Integraatiopalveluiden testausta voidaan parantaa BizUnitin käyttöä laajentamalla.

Luvussa 6.2.1 mainittujen ominaisuuksien lisäksi se tukee suoraan erilaisia integraatiopa!velun käyttämiä rajapintoja, kuten tiedostojen kopiointia haluttuihin hakemistoihin ja MSMQ-sanomajonon käyttöä. Uudessa versiossa on tuki myös aiemmin vaikeasti testattavien muunnosten ja vastaanotto/lähetyskäsittelyjen (ns.

pipeline) yksikkötestaukselle. BizUnit-testien laatimiseen tarkoitettua graafista BizUnit Designer23 -ilmaistyökalua ei voida ottaa käyttöön, koska sen kehitys näyttää keskeytyneen, eikä se tue enää uusimpia BizUnit-versioita. BizUnitin käyttöönoton yhteydessä on mahdollista arvioida tarkemmin myös Gallio- testiautomaatioalustan24 käyttökelpoisuutta kokeilemalla testien suorittamista sen kautta.

Testien laatua ja kattavuutta voidaan parantaa myös käyttämällä toiminnallisten testitapausten laatimiseen luvussa 3.9 mainittua ACTSia. Sen avulla voidaan luoda nopeasti laajoja tesdjoukkoja, jotka voidaan suorittaa tietopohjaisen

23 http://bud.codeplex.com/

24 http://www.gallio.org/

testiajurin läpi. ACTS in käyttöä pilotoidaan BizUnitin käyttöönoton yhteydessä.

Tätä varten laaditaan muunnostyökalu, joka sijoittaa ACTSilla luodut arvot XML- muotoisten testiaineistojen sisään haluttuihin paikkoihin. Käytännössä tämä tapahtuu erillisellä konfiguraatiotiedostolla, jossa kutakin ACTS-taulukon saraketta kohden voi olla 0...n XPath-lauseketta, joiden osoittamiin paikkoihin arvo sijoitetaan.

XML-aineistojen luomiseksi TAXI-työkalun (Bertolino et ai. 2007) kokeileminen vaikuttaisi mielenkiintoiselta lähestymistavalta, mutta sen lisenssiehtoja ei kerrota selvästi verkkosivuilla, joten nämä pitäisi selvittää ensin. Www-sovellus- palvelujen laajempaan testaamiseen tarkoitetun WS-TAXI-työkalun (ks. luku 4.3) kehitystä kannattaa seurata, sillä tekijät suunnittelevat sen julkaisua verkosta ladattavaksi.

6.5.3 Elinkaaren hallinta

Regressiotestitapausten valinta- ja priorisointimenetelmän mahdollista käyttöön­

ottoa selvittäessä ongelmaksi nousi tiedon puute vaatimusten, vikojen ja testi- tapauksien sekä ohjelmakoodin muutosten yhteyksistä toisiinsa eri ympäristöissä sijaitsevien Rational ClearQuestin ja Team Foundation Serverin välillä.

Integraatio tai tietojen siirto TFS:ään todettiin liian raskaaksi ja riskialttiiksi operaatioksi kehitysprojektin aikana.

Kahden järjestelmän käyttö projektissa sai alkunsa, kun projektin varhaisessa vaiheessa tehtiin kevyitä mallitoteutuksia siitä, mitä Microsoft-arkkitehtuuriin siirtyminen voisi käytännössä tarkoittaa. Päätoimittajan toimitusmenetelmään kuuluvien Rational-jäijestelmien valinta oli tuolloin loogista. Iteratiiviseen kehitysmalliin siirtymisen jälkeen testattavia versioita julkaistiin selvästi aiempaa useammin ja testauksen kohteena oleva hakemusjärjestelmä oli laajempi kuin aiemmat sovellukset. Vasta tässä yhteydessä havaittiin tarve vaatimusten ja testaustietojen yhdistämiselle versionhallinnassa olevaan ohjelmakoodiin.

Tähän ongelmaan ei esitetä suoraa ratkaisua tässä vaiheessa projektia, mutta asia on tiedostettu tulevia hankkeita varten. Ennen ylläpitovaiheeseen siirtymistä migraatiomahdollisuus selvitetään uudelleen. Tietojen ylläpito kahdessa tai useammassa paikassa ei ole pienemmälle ylläpitotiimille järkevää. Vaihto­

ehtoisesti vanhoja tietoja ei siirretä, mutta jatkokehityksen hallinta siirretään kokonaan TFStile. Tämä keventää ylläpitoprosessia tarvittavien järjestelmien suhteen.

Samankaltaisissa yhteisprojekteissa pyritään jatkossa yhden järjestelmän käyttöön. Tämä edellyttää toimittajien menetelmien ja raportoinnin yhteen­

sovittamista heti projektin alusta alkaen. Siten esimerkiksi vioista kertyy tarkempaa tietoa kooditasolla, jolloin moduulien virheherkkyyttä voidaan analysoida tarkemmin. Tämä tieto auttaisi keskittämään testaamista oikeisiin kohteisiin, koska virheillä on tapana kasautua (ks. luku 2.5.3). Yhden järjestelmän käyttö tuottaisi testaajille myös tarkempaa tietoa uusien versioiden sisältämistä muutoksista, mikä ohjaisi testaamista tarkemmin ja pienentää riskiä siitä, etteivät kehittäjät muista raportoida kaikkia muutoksia esimerkiksi refaktoroinnista testaajille.

6.5.4 Regressiotestien valinta ja priorisointi

Työn aikana pyrittiin löytämään tapoja regressiotestien valinnalle tai priorisoinnille, koska täydellistä uudelleentestausta ei voida ylläpitovaiheessa suorittaa jokaisen muutoksen yhteydessä. Ilman luvussa 6.5.3 käsiteltyä

kehitys-74

järjestelmien tietojen yhdistämistä ainoa käyttökelpoinen priori soi ntimenetelmä olisi Srikanth et ai. (2005, ks. luku 2.5.3) esittämä vaatimuksiin perustuva menetelmä. Testaajat tekevät samankaltaista priorisointia epämuodollisesti jo nyt, joten tämän menetelmän käyttö toisi priorisointiin ainoastaan hieman lisää selkeyttä. Testaajat kaipaisivat testien priorisointipäätösten tueksi enemmän nimenomaan koodimuutoksiin ja virheiden sijaintiin liittyvää tietoa, jota ei siis nykyisin ole helposti saatavilla. Tämän vuoksi myöskään näitä tietoja hyödyntäviä menetelmiä ei voida ottaa käyttöön.

Jatkoprojekteissa kehitystyön hallinta yhdessä järjestelmässä antaisi paremmat edellytykset valinta- ja priorisointimenetelmien käytölle. Testien kattavuus- tietoihin perustuvien menetelmien käyttöönottoa kannattaa harkita vasta, kun tarvittava tieto on saatu keskitettyä.

Myös UML-pohjaisten menetelmien käyttöönottoa kannattaa harkita jatko- hankkeissa, koska UML:ää käytetään muutenkin määrittely- ja suunnittelu­

vaiheissa dokumentointiin. Menetelmien käyttöönotto parantaisi tuotetun dokumentaation tarkkuutta, eikä niiden käyttäminen toisi suurta lisätyömäärää.

Etenkin Chen et ai. (2002, ks. luvut 2.5.2 ja 2.5.3) menetelmä auttaisi sekä testien valinnassa että priorisoinnissa.