Näkökulmia testilähtöiseen ohjelmistokehitykseen yliopisto-opetuksessa

Koko: px
Aloita esitys sivulta:

Download "Näkökulmia testilähtöiseen ohjelmistokehitykseen yliopisto-opetuksessa"

Transkriptio

1 Sami Kollanus Näkökulmia testilähtöiseen ohjelmistokehitykseen yliopisto-opetuksessa Tietotekniikan (Aineenopettajankoulutus) pro gradu -tutkielma 16. helmikuuta 2012 Jyväskylän yliopisto Tietotekniikan laitos Jyväskylä

2 Tekijä: Sami Kollanus Yhteystiedot: Työn nimi: Näkökulmia testilähtöiseen ohjelmistokehitykseen yliopisto-opetuksessa Title in English: Teaching Test-Driven Development in University Context Työ: Tietotekniikan (Aineenopettajankoulutus) pro gradu -tutkielma Sivumäärä: 41 Tiivistelmä: Tässä työssä tarkastellaan testilähtöisen ohjelmistokehityksen opettamista yliopistoympäristössä. Tutkimuksessa toteutettiin kaksi opetuskokeilua Jyväskylän yliopistossa maisteritasoisella ohjelmistotestauksen kurssilla sekä kattava kirjallisuuskatsaus, joka keskittyi aiemmin raportoituihin kokemuksiin testilähtöisen ohjelmistokehityksen opettamisesta. Keskeisenä tuloksena työssä esitetään konkreettisia näkökulmia, jotka on hyvä ottaa huomioon testilähtöisen ohjelmistokehityksen opetuksessa. English abstract: This work is discusses teaching of test-driven software development (TDD) in university context. Two teaching experiments in a master?s level software testing course in the University of Jyväskylä and a comprehensive literature review were conducted. The literature review is focused on the previous reported experiences on teaching TDD. The main results of the work are concrete viewpoints that are useful to take into account in teaching TDD. Avainsanat: Testlähtöinen ohjelmistokehitys, opetus Keywords: Test-driven development, teaching Copyright c 2012 Sami Kollanus All rights reserved.

3 TYÖHÖN SISÄLTYVÄT ARTIKKELIT I Sami Kollanus. Test-driven development - still a promising approach? In Proceedings of the 7th International Conference on the Quality of Information and Communications Technology, pages , II Sami Kollanus and Ville Isomöttönen. Test-driven development in education: experiences with critical viewpoints. In Proceedings of the 13th annual conference on Innovation and technology in computer science education, pages , New York, NY, USA, ACM. III Sami Kollanus and Ville Isomöttönen. Understanding tdd in academic environment: Experiences from two experiments. In Arnold Pears and Lauri Malmi, editors, 8th International Conference on Computing Education Research, Koli Calling 2008, pages 25-31, IV Sami Kollanus. Test-driven development - suggestions for curriculum development. In Proceeding of the International Conference on Computer Science Education: Innovation and Technology (CSEIT 2010), pages 59-64, Phuket, Thailand, December i

4 Sisältö 1 Johdanto Tutkimuskysymykset Työn rakenne Menetelmät Kirjallisuuskatsaus Tietolähteet Tiedonhaku Tiedon kerääminen ja analyysi Kirjallisuuskatsauksen laadun varmistus Opetuskokeilun toteutus Opetuskokeilun rakenne Data-analyysi Testilähtöinen ohjelmistokehitys Testilähtöinen ohjelmistokehitys käsitteenä Empiirinen tutkimus testilähtöisen kehityksen hyödyistä Ulkoinen laatu Sisäinen laatu Tuottavuus Yhteenveto empiirisistä tutkimuksista Kokemuksia testilähtöisen ohjelmistokehityksen opettamisesta Ensimmäinen opetuskokeilu Taustaa ensimmäisestä opetuskokeilusta Kokemuksia ensimmäisestä opetuskokeilusta Toinen opetuskokeilu Taustaa toisesta opetuskokeilusta Kokemuksia toisesta opetuskokeilusta Kirjallisuuskatsaus testilähtöisen ohjelmistokehityksen opettamisesta Opiskelijoiden motivaatio Testilähtöinen kehitys opetusohjelmassa ii

5 4.3.3 Haasteet testilähtöisen kehitykset opettamisessa Ehdotuksia opetusohjelmaan Yhteenveto 26 6 Lähteet 28 Liitteet A Kysely opiskelijoille 36 iii

6 1 Johdanto Testilähtöinen ohjelmointi (test-rst programming) ei ole aivan uusi ajatus. Siitä on keskusteltu ohjelmistotekniikan alalla ainakin 1960-luvulta lähtien [7]. Kuitenkin testilähtöinen menettelytapa on tullut laajasti tunnetuksi nimellä testilähtöinen ohjelmistokehitys (test-driven development ) eräänä extreme programming -menetelmän (XP) [3] käytänteistä. Myöhemmin testilähtöistä kehitystä on kirjallisuudessa käsitelty erillisenä käytänteenä [4][2] ja sitä käsitteleviä tutkimuksia on julkaistu aktiivisesti noin 2000-luvun vaihteesta alkaen. Testilähtöisestä ohjelmistokehityksestä on kirjallisuudessa esitetty olevan monenlaista hyötyä. Sen on väitetty esimerkiksi parantavan ohjelmistotyön tuottavuutta [16][26], ohjelmiston laatua [15][52], testikattavuutta [5][25], ohjelmiston suunnittelua [29][63] ja kehittäjien luottamusta omaan koodiinsa. Kuitenkin empiiriset tutkimustulokset hyödyistä ovat ristiriitaisia. Testilähtöisen kehityksen tultua yleisemmin tunnetuksi sitä ryhdytty soveltamaan myös yliopisto-opetuksessa. Viimeisen vuosikymmenen aikana on raportoitu useista yrityksistä toteuttaa sitä erilaisilla kursseilla. Testilähtöistä kehitystä on sovellettu esimerkiksi osana extreme programming -menetelmää sitä soveltavilla projektikursseilla [23][50]. Erillisenä käytänteenä testilähtöistä kehitystä on sovellettu ohjelmoinnin alkeista [14][43] syventäviin maisteritason kursseihin[34][35]. Useimmista näistä tutkimuksista on raportoitu positiivisia kokemuksia. Tässä tutkimuksessa keskitytään tarkastelemaan testilähtöisen ohjelmistokehityksen yliopistotasoiseen opetukseen liittyviä käytännöllisiä näkökulmia. Seuraavissa kohdissa esitellään tarkemmin työn lähtökohtana olevat tutkimuskysymykset (kohta 1.1) ja työn rakenne (kohta 1.2). 1.1 Tutkimuskysymykset Tämän tutkimuksen tavoite on luoda käytännöllisiä näkökulmia testilähtöisen kehityksen opetukseen yliopistotasolla. Tätä tavoitetta lähestytään tässä tutkimuksessa kolmen eri kysymyksen kautta. Mitä testilähtöisestä ohjelmistokehityksestä ja sen hyödyistä ymmärretään aiemman empiirisen tutkimuksen pohjalta? 1

7 Miten maisteritason opiskelijat kokevat testilähtöisen ohjelmistokehityksen? Millaisia käytännöllisiä suosituksia voidaan aiemman tutkimuksen pohjalta muodostaa testilähtöisen kehittämisen opettamisen tueksi? Ensimmäistä kysymystä lähestytään työssä systemaattisen kirjallisuuskatsauksen avulla. Kirjallisuuskatsauksessa pyritään selvittämään, millaisia johtopäätöksiä voidaan olemassa olevan empiirisen tutkimuksen pohjalta tehdä testilähtöisen kehityksen hyödyistä. Tämä vaihe ei liity suoranaisesti opetukseen, vaan sen tarkoitus luoda aiemman tutkimuksen pohjalta yleisempi käsitys testilähtöisestä ohjelmistokehityksestä menetelmänä. Kirjallisuuskatsauksen toteutus on kuvattu kohdassa 2.1. Toiseen tutkimuskysymykseen pyritään vastaamaan kahteen kertaan toteutetun opetuskokeilun avulla. Opetuskokeilun tarkoitus tässä tutkimuksessa on selvittää, kuinka maisteritasoiset hyvin vähän aiemmin testilähtöistä kehittämistä käyttäneet opiskelijat kokevat menetelmän käytännössä ja millaisia haasteita sen soveltamiseen liittyy. Opetuskokeiluiden toteutus on kuvattu kohdassa 2.2. Kolmanteen kysymykseen pyritään vastaamaan myös kohdassa 2.1 kuvatun systemaattisen kirjallisuuskatsauksen avulla. Tutkimuksen tämän osan tarkoitus on tunnistaa aiemmissa tutkimuksissa raportoiduista opetuskokemuksista sellaisia käytännöllisiä näkökulmia, jotka voivat auttaa suunnittelemaan testilähtöisen kehityksen opetusta. 1.2 Työn rakenne Tämä tutkimus koostuu johdannosta ja neljästä julkaistusta konferenssiartikkelista. Julkaistut artikkelit liittyvät edellisessä alakohdassa esitettyihin tutkimuskysymyksiin seuraavasti. Artikkeli 1 [32]: Mitä testilähtöisestä ohjelmistokehityksestä ja sen hyödyistä ymmärretään aiemman empiirisen tutkimuksen pohjalta? Artikkelit 2 [34] ja 3 [35]: Miten maisteritason opiskelijat kokevat testilähtöisen ohjelmistokehityksen? Artikkeli 4 [33] Millaisia käytännöllisiä suosituksia voidaan aiemman tutkimuksen pohjalta muodostaa testilähtöisen kehittämisen opettamisen tueksi? Näissä artikkeleista 1 ja 4 (([32])[33]) on kirjoitettu yksin. Artikkelit 2 ja 3 ([34][35]) on kirjoitettu yhdessä Isomöttösen kanssa. Näissä yhteisartikkelissa Kollanus vastasi opetuskokeilun toteutuksesta ja omalta osaltaan aineiston analyysista ja kirjoittamisesta. Isomöttönen osallistui aineiston analyysiin ja kirjoittamiseen. 2

8 Työn johdanto-osassa seuraavaksi luvussa 2 esitellään työssä käytetyt menetelmät ja työn osien toteutus. Luvussa 3 on kuvattu testilähtöinen kehitys käsitteenä ja tiivistetty tutkimustulokset sen hyötyjä käsittelevästä kirjallisuuskatsauksesta [32] ja luvussa 4 on esitetty lyhyesti testilähtöistä opetusta käsittelevien julkaisujen [34][35][33] tulokset. Lopuksi luvussa 5 on yhteenveto koko työstä. 3

9 2 Menetelmät Tämä työ jakautuu menetelmien osalta kahteen eri osaan seuraavasti. Artikkelit 1 ja 4 ([32][33]) perustuvat systemaattiseen kirjallisuuskatsaukseen. Artikkelit 2 ja 3 ([34][35]) perustuvat toteutettuun opetuskokeiluun. Seuraavissa alakohdissa kuvataan, kuinka kirjallisuuskatsaus ja opetuskokeilu on toteutettu. 2.1 Kirjallisuuskatsaus Kirjallisuuskatsauksen toteutuksessa on sovellettu ohjelmistotekniikan alalla tunnettuja Kitchenhamin ym. [31] julkaisemia ohjeita systemaattisen kirjallisuuskatsauksen toteuttamiseksi. Kirjallisuuteen perustuvat osat voidaan nähdä oikeastaan kahtena erillisenä systemaattisena kirjallisuuskatsauksena, joissa on erilainen tutkimuskysymys. Kirjallisuuskatsauksen pohjana ovat olleet seuraavat tutkimuskysymykset. Mitä voidaan sanoa testilähtöisen ohjelmistokehityksen hyödyistä empiirisen tutkimuksen pohjalta? (artikkeli 1 [32]) Mitä voidaan sanoa testilähtöisen ohjelmistokehityksen opettamisesta raportoitujen empiiristen kokemusten pohjalta? (artikkeli 4 [33]) Molemmat tutkimuskysymykset on otettu huomioon kirjallisuuskatsauksen toteuttamisessa. Saman prosessin kuluessa on laajasti kartoitettu testilähtöiseen kehitykseen liittyvää tutkimusta sekä kerätty täsmällisesti tietoa kumpaakin mainittua kysymystä varten. Ensimmäistä kysymystä varten on kerätty kirjallisuuskatsausaineistosta kaikki empiiriset tutkimukset, jotka raportoivat jotain testilähtöisen kehityksen hyödyistä. Toiseen kysymykseen liittyen on kerätty systemaattisesti tietoa empiirisistä tutkimuksista, jotka raportoivat jotain testilähtöisen kehityksen opettamista. Aluksi toteutettiin pieni alustava kirjallisuuskatsaus, jonka tarkoituksena oli kartoittaa testilähtöiseen ohjelmistokehitykseen liittyvä käsitteistö ja mahdolliset tietolähteet. Seuraavissa alakohdissa kuvataan, kuinka varsinainen kirjallisuuskatsausprosessi (tietolähteiden valinta, tiedonhaku, tiedon kerääminen ja analysointi) on toteutettu. 4

10 2.1.1 Tietolähteet Tiedonhaku rajoitettiin tieteellisiin aikakausilehtiin (engl. journal, magazine) ja konferenssijulkaisuihin. Ensimmäisessä vaiheessa listattiin aikakausilehdet, jotka arvioitiin todennäköisimmin julkaisevan testilähtöiseen kehitykseen liittyvää tutkimusta. Tämä lista laadittiin alustavan kirjallisuuskatsauksen ja tekijän aiemman kokemuksen pohjalta. Lista sisälsi lopulta 15 julkaisusarjaa ohjelmistotekniikan alalta. Nämä julkaisusarjat käytiin yksitellen läpi käyttäen niiden kotisivuilta löytyviä hakutoimintoja. Toisessa vaiheessa määriteltiin hakukohteet konferenssijulkaisuja varten. Sitä varten valittiin kolme keskeistä elektronista arkistoa: IEEE Explorer, ACM Digital Library ja Springerin julkaisutietokanta. Nämä lähteet valittiin, koska 1) ne kattavat enemmistön potentiaalisista konferenssijulkaisuista, 2) suurin osa niiden sisältämistä julkaisuista on vertaisarvioituja ja 3) ne ovat helposti käytettävissä. Lopuksi tiedonkeräysvaiheessa aineistoon sisällytettyjen artikkelien lähdeviitteistä löytyi joitakin sellaisia tutkimuksia, joita ei sisältynyt alkuperäiseen aineistoon. Nämä uudet artikkelit lisättiin prosessin kuluessa lopulliseen kirjallisuuskatsauksen aineistoon Tiedonhaku Jokaisesta edellä mainitusta tietolähteestä haettiin tietoa kahdella erillisellä hakusanalla: TDD ja test-driven development. Hakuun käytettiin kunkin sivuston tarjoamaa omaa hakutoimintoa. Hakutulokset käytiin manuaalisesti läpi otsikon ja abstraktin perusteella, koska suuri osa niistä ei liittynyt millään lailla testilähtöiseen ohjelmistokehitykseen. Tässä vaiheessa muodostettiin alustava lista kaikista sellaisista julkaisuista, jotka mahdollisesti sisältävät tietoa testilähtöisestä kehityksestä. Tarkempi aineiston rajaus tehtiin myöhemmin Tiedon kerääminen ja analyysi Alustava lista sisälsi yhteensä 229 julkaisua. Tässä vaiheessa koko aineisto käytiin läpi ja siitä karsittiin pois muut kuin testilähtöiseen kehitykseen liittyvät tutkimukset. Aineiston karsimisessa noudatettiin seuraavia periaatteita. Hyväksymistesteihin pohjautuvaa kehitystä (acceptance test-driven development ) ei otettu mukaan tähän tutkimukseen ja sitä käsittelevät artikkelit karsittiin pois aineistosta. Jotkut hakutuloksiin päätyneet extreme programming -menetelmää käsitelleet 5

11 artikkelit eivät lopulta käsitelleet lainkaan testilähtöistä kehitystä. Aineistoon otettiin mukaan vain tutkimusraportteja. Kaikki konferenssijulkaisut laskettiin tutkimuksiksi, mutta esimerkiksi IEEE Software lehdessä julkaistuja lyhyitä asiantuntijoiden kirjoittamia kolumneja ei otettu mukaan aineistoon. Karsinnan jälkeen alustava kirjallisuuskatsauksen aineisto sisälsi 165 tutkimukseen perustuvaa testilähtöistä ohjelmistokehitystä käsittelevää julkaisua. Kaikki nämä artikkelit käytiin läpi, jotta saadaan muodostettua laaja kuva alan tutkimuksesta. Niistä kirjattiin ylös seuraavat tiedot. tutkimuskysymys perustiedot tutkimusmenetelmästä (esim. empiirinen, kontrolloitu koe, kohderyhmä, osallistujien määrä) lyhyt kuvaus tutkimuksesta tutkimuksen tulokset empiiriset tulokset testilähtöisen kehityksen hyödyistä (jos löytyy) mitä sanotaan testilähtöisen kehityksen opettamisesta (jos löytyy) esitetty kritiikki testilähtöisestä kehityksestä (jos löytyy) kuinka testilähtöinen kehitys on esitelty artikkelissa? Tässä vaiheessa tehtyjen muistiinpanojen pohjalta tarkasteltiin aineistoa erikseen eri näkökulmista. Aineistossa oli kaikkiaan 40 artikkelia, jotka sisälsivät empiiristä tutkimustietoa testilähtöisen kehityksen hyödyistä. Tämä osa aineistosta analysoitiin systemaattisesti hyötyjä käsittelevää artikkelia 1 [32] varten. Testilähtöisen ohjelmistokehityksen opetusta käsiteltiin puolestaan 48 artikkelissa, joiden pohjalta on kirjoitettu siihen keskittynyt artikkeli 4 [33] Kirjallisuuskatsauksen laadun varmistus Kirjallisuuskatsauksen laadun varmistamiseksi noudatettiin seuraavia käytänteitä. Ennen systemaattista tiedon hakua toteutettiin pieni alustava kirjallisuuskatsaus. Sen tarkoitus oli varmistaa, kirjallisuuskatsaus on hyvin suunniteltu. 6

12 Tiedonkeräysvaiheessa toteutettiin ensin kokeilu käymällä läpi 10 laadukasta lehtiartikkelia. Kokeilun tarkoitus oli varmistaa, että kaikki tarpeelliset tiedot artikkeleista kirjataan ylös ja muokata tiedonkeräysprotokollaa tarpeen mukaan ennen perusteellista aineiston läpikäyntiä. Tässä tutkimuksessa muokkaukselle ei ollut tarvetta. Tiedonkeräysvaiheessa tutkimuksissa viitatuista lähteistä etsittiin sellaisia aineistoon sopivia artikkeleita, joita ei löytynyt tiedonhakuvaiheessa. Näin saatiin varmistettua, että kirjallisuuskatsauksessa on mahdollisimman kattava aineisto. 2.2 Opetuskokeilun toteutus Osa tästä työstä (artikkelit 2 ja 3 [34][35]) perustuu Jyväskylän yliopistossa toteutettuun opetuskokeiluun. Tässä kohdassa kuvataan, kuinka opetuskokeilu toteutettiin. Kokeilu toteutettiin kaksi kertaa, syksyllä 2006 ja keväällä Kyseessä on maisteritasoinen ohjelmistotestauksen kurssi, jonka osallistujista suurin osa oli suuntautunut opinnoissaan ohjelmistotekniikkaan. Kurssi on suunniteltu noin neljännen vuoden maisteritason kurssiksi, mutta käytännössä opiskelijoiden tausta oli hyvin vaihteleva. Joukossa oli nuoria ja kokemattomia kolmannen vuoden opiskelijoita, mutta monilla osallistujilla oli jo useita vuosia käytännön työkokemusta. Minimivaatimukset kurssin taustatiedoiksi olivat ohjelmoinnin perusteet (vähintään kaksi kurssia) sekä yleinen tuntemus ohjelmistotekniikan käytänteistä ja prosesseista. Useimmilla opiskelijoilla oli kuitenkin ohjelmointiosaamista huomattavasti enemmän kuin parin peruskurssin verran. Testilähtöinen ohjelmistokehitys oli opiskelijoille melko uusi konsepti. Osa opiskelijoista oli vähän kokeillut sitä aiemmin, useimmiten jollain toisella kurssilla. Vain muutama opiskelija oli käyttänyt sitä työssään. Opetuskokeilun lähtökohtana ei ollut mikään tarkkaan määritelty tutkimuskysymys, vaan pyrkimys ymmärtää yleisesti testilähtöistä ohjelmistokehitystä ohjelmistotekniikan yliopisto-opetuksen kontekstissa. Tutkimuksen motivaation kohteina olivat seuraavankaltaiset kysymykset. Kuinka opiskelijat kokevat testilähtöisen ohjelmistokehityksen? Miten menetelmä toimii kurssin kontekstissa? Kuinka testilähtöistä ohjelmistokehitystä tulisi opettaa? Mihin opintojen vaiheeseen testilähtöisen kehityksen opetus sopii? 7

13 2.2.1 Opetuskokeilun rakenne Kumpikin opetuskokeilu sisälsi seuraavat vaiheet. johdantoluento pieni "lämmittelyharjoitus" varsinainen ohjelmointitehtävä kysely Aluksi testilähtöisen ohjelmistokehityksen perusteet esiteltiin yhdellä 90 minuutin mittaisella luentokerralla. Tämä esittely piti sisällään "oppikirjamallin"mukaisen yksinkertaisen johdannon ja lyhyitä esimerkkejä. Luennolla ei käyty läpi laajemmin menetelmää käsittelevää tutkimusta eikä sen esitettyjä hyötyjä kyseenalaistettu. Johdannon lisäksi opiskelijoita kehotettiin itsenäisesti tutustumaan verkosta löytyvään bowling game kata -esimerkkiin [44]. Testilähtöisestä kehityksestä puhuttiin hyvin vähän muun kurssin aikana. Siis opiskelijat muodostivat käsityksensä testilähtöisestä kehityksestä hyvin itsenäisesti perustuen kokemukseensa siihen liittyvästä harjoitustyöstä. Ohjelmointiosuuteen liittyi kaksi tehtävää, jotka opiskelijat saivat oman valintansa mukaan tehdä joko yksin tai pareittain. Ensimmäiseksi opiskelijat tekivät hyvin pienen ja helpon lämmittelytehtävän, jonka tarkoitus oli tutustua testilähtöiseen kehitykseen ja tarvittaviin työkaluihin. Työkaluina olivat Javaa ja JUnit Eclipse-ympäristössä. Varsinainen ohjelmointiharjoitus oli kummallakin opetuskokeilun toteutuskerralla erilainen. Kummallakin tavoite oli laatia sellainen tehtävä, joka on keskiverto-opiskelijalle jonkin verran haastava, mutta ei vaadi kohtuuttoman paljon aikaa (alle 10 h). Opiskelijat saivat tehdä tehtävän halutessaan itsenäisesti, mutta heille oli tarjolla kolme 90 minuutin ohjauskertaa. Lopuksi opiskelijoiden piti raportoida kokemuksiaan testilähtöisestä ohjelmistokehityksestä vastaamalla kyselyyn. Kyselyyn vastaaminen oli siis opiskelijoille pakollinen osa tehtävän suoritusta. Sen vuoksi tutkimusaineistossa on mukana taustaltaan ja motivaatiotasoltaan vaihteleva kirjo osallistujia, ei ainoastaan kaikkein motivoituneimmat opiskelijat. Kyselyn kysymykset on esitetty liitteessä A Data-analyysi Opiskelijoiden vastaukset kyselyihin käsiteltiin laadullisen tutkimuksen keinoin. Oleellista laadullisessa analyysissa olivat opiskelijoiden asenteet testilähtöistä kehitystä kohtaan sekä heidän harjoituksessa kokemansa vaikeudet. Laadullinen analyysi perustui 8

14 Grounded Theory -lähestymistavan mukaisiin periaatteisiin laadullisen tiedon analysoinnissa [21]. On hyvä huomata, että tämä tutkimus ei varsinaisesti edusta Grounded Theory -lähestymistapaa, jonka tavoitteena on teorian muodostus pitkän tutkimusprosessin kuluessa. Periaatteiden noudattaminen rajautuu tässä tutkimuksessa laadullisen aineiston analyysiin. Siinä oleellinen metodi on Grounded Theoryn jatkuvan vertailun (constant comparison) periaate. Siinä tavoitteena on tunnistaa aineistosta erilaisia näkökulmia tai teemoja vertaamalla jatkuvasti uutta tietoa aiemmin tunnistettuihin näkökulmiin. Käytännössä esimerkiksi opiskelijoiden kokemia vaikeuksia ryhmiteltiin seuraavalla tavalla eri teemoihin. 1 Tunnistetaan yhdestä vastauksesta kerrallaan ensin oleelliset siinä mainitut käsitteet, jotka viittaavat opiskelijoiden kokemiin vaikeuksiin. 2 Tunnistetaan jokaisen käsitteen kohdalla erikseen, onko sitä vastaava teema/luokka jo ennestään tunnistettu. 3 Jos sopiva teema on jo ennestään olemassa, merkitään opiskelijan vastaus siihen kuuluvaksi. Jos taas käsite ei sovi mihinkään aiemmin tunnistetuista teemoista, edustaa se uutta näkökulmaa ja sitä varten määritellään aineistoon uusi luokka. 4 Prosessin kuluessa muutetaan luokittelua tarpeen mukaan. Joskus on tarpeen ennemmin muuttaa jonkun olemassa olevan luokan määrittelyä uuteen löydökseen sopivaksi kuin muodostaa sitä varten uusi luokka. Kumpikin artikkelien 2 ja 3 ([34][35]) kirjoittajista teki ensin analyysin itsenäisesti. Sen jälkeen kummankin johtopäätöksiä verrattiin toisiinsa ja niistä muodostettiin yhteinen mielipide. Tämä analyysi tehtiin erikseen kummallakin opetuskokeilun toteutuskerralla. Toisen kierroksen vastausten analysoinnin jälkeen verrattiin lisäksi analyysin tuloksia ensimmäiseen toteutuskertaan. Toista toteutuskertaa varten ohjelmointitehtävä oli määritelty tietoisesti erilaiseksi, minkä odotettiin vaikuttavat opiskelijoiden kokemuksiin. 9

15 3 Testilähtöinen ohjelmistokehitys Tässä luvussa kuvataan testilähtöistä ohjelmistokehitystä yleisesti ohjelmistotuotantomenetelmänä. Seuraavaksi kohdassa 3.1. on esitelty lyhyesti testilähtöinen kehitys käsitteenä. Sen jälkeen kohdassa 3.2 on esitelty empiirisiä tutkimustuloksia testilähtöisen ohjelmistokehityksen hyödyistä. 3.1 Testilähtöinen ohjelmistokehitys käsitteenä Perusidea testilähtöisessä ohjelmistokehityksessä on yksinkertaisesti kirjoittaa hyvin pienissä iteraatioissa testi ennen varsinaista toiminnallisuuden toteuttavaa ohjelmakoodia. Siis koko ohjelmisto tai sen osa kehitetään toistamalla seuraavia vaiheita. 1 Kehittäjä kirjoittaa testitapauksen, joka testaa seuraavaksi koodiin toteutettavan ominaisuuden. Tarkoitus ei ole kirjoittaa tehdä täydellistä ja kattavaa yksikkötestausta, vaan kirjoittaa yksinkertainen testitapaus, jonka suoritus epäonnistuu ennen kuin sen toteuttava koodi on kirjoitettu. 2 Kehittäjä toteuttaa koodiin toiminnallisuuden, joka toteuttaa edellä suoritetun testin. Tässä periaatteena on kirjoittaa toiminnallisuutta kerralla niin vähän kuin minimissään tarvitaan edellä kirjoitetun testin onnistuneeseen suorittamiseen. 3 Refaktoroidaan koodi, jos se on tarpeen. 4 Palataan kohtaan yksi. Näitä vaiheita toistetaan siis pieni pala kerrallaan lyhyissä sykleissä koko kehitysprosessin ajan. Opaskirjojen mukaan keskeistä on huomata, että kyseessä on nimenomaan kehittämismenetelmä, jossa testien kirjoittaminen toimii suunnittelun välineenä. Tarkoitus ei ole kirjoittaa kattavia testejä. [2][4] 3.2 Empiirinen tutkimus testilähtöisen kehityksen hyödyistä Tässä kohdassa esitellään keskeiset tulokset systemaattisesta kirjallisuuskatsauksesta, joka keskittyi testilähtöisen ohjelmistokehityksen hyötyihin (artikkeli 1 [32]). Aineisto 10

16 löytyi kaikkiaan 40 artikkelista, jotka sisälsivät jonkinlaista empiiristä tietoa testilähtöisen kehityksen hyödyistä (ks. kirjallisuuskatsauksen toteutus, kohta 2.1). Nämä tutkimustulokset analysoitiin ja luokiteltiin niiden tyypin ja keskeisten tulosten mukaan. Tutkimukset keskittyivät pääosin kolmeen eri teemaan: 1) ulkoinen laatu, 2) sisäinen laatu ja 3) tuottavuus. Seuraavissa kohdissa käsitellään erikseen näitä kolmea kohtaa Ulkoinen laatu Ulkoista laatua on tutkimuksissa mitattu pääsääntöisesti kahdella eri tavalla. Tyypillisessä koeasetelmassa on hyvin määritelty ohjelmointitehtävä ja joukko tutkijoiden määrittelemiä hyväksymistestejä. Tällaisessa asetelmassa ulkoista laatua mitataan läpäistyjen hyväksymistestien määrällä. Reaalimaailman ohjelmistokehitystä kuvaavissa tapaustutkimuksissa ulkoista laatua mitataan puolestaan tavallisesti asiakkaan raportoimien virheiden tai kehityksessä ennen ohjelmiston toimittamista löydettyjen virheiden määrällä. Kaikkiaan 22 artikkelia piti sisällään tietoa siitä, miten testilähtöinen kehitys vaikuttaa ulkoiseen ohjelman laatuun. Nämä tulokset on esitetty taulukossa 3.1 luokiteltuina esitettyjen johtopäätösten ja tutkimusmenetelmän mukaan. Suurin osa näistä tutkimuksista (16/22) esittää testilähtöisen kehityksen parantavan ulkoista laatua. Kuitenkin tulokset ovat huomattavasti monimutkaisempia tulkita, jos otetaan tarkastelussa huomioon myös tutkimusmenetelmä. Lähes kaikki tapaustutkimukset esittävät testilähtöisen kehityksen parantavan ulkoista laatua, kun taas vain kaksi kontrolloitua koetta on päätynyt samaan tulokseen. Useimmissa kontrolloiduissa kokeissa ei havaittu eroa testilähtöistä kehitystä noudattaneen ryhmän ja kontrolliryhmän välillä. Yhdessä kontrolloidussa kokeessa todettiin, että kontrolliryhmä läpäisi enemmän hyväksymistestejä kuin testilähtöistä kehitystä käyttänyt ryhmä [39]. Yhteenvetona voidaan todeta, että testilähtöinen kehitys saattaa parantaa ohjelman ulkoista laatua, mutta tämänhetkinen empiirinen tutkimustieto tukee vain heikosti tätä johtopäätöstä. Tutkimustulosten ristiriitaisuus herättää kysymyksen siitä, ovatko tutkimuksissa havaitut trendit todellisuudessa seurausta testilähtöisestä kehityksestä vai jostain muusta. Esimerkiksi Huang ja Holcombe [24] totesivat kontrolloidussa kokeessa, että läpäistyjen hyväksymistestien määrä liittyi enemmän yksikkötesteihin käytettyyn aikaan kuin käytettyyn kehittämismenetelmään (testit ennen vs. testit koodin jälkeen) Sisäinen laatu Sisäistä koodin laatua koskevia tutkimustuloksia on vaikeampi tulkita, koska sitä käsittelevissä 16 on käytetty niin monia eri metriikoita, että tutkimustuloksia on vaikea 11

17 Taulukko 3.1: Miten testilähtöinen kehitys vaikuttaa ulkoiseen laatuun? Menetelmä Parantaa laatua Ei eroa Heikentään laatua Kontrolloitu koe [19][22] [16][24][51][53] [39] Tapaustutkimus [5][11][38][45][52] [57][61][69][71] Muut [12][13][15][54][70] [42] Yhteensä verrata keskenään. Eri tutkimuksissa käytettyjä metriikoita ovat esimerkiksi testien kattavuus, testitapausten määrä, metodin koko, syklomaattinen kompleksisuus ja koodin koheesio. Tässä esitetyt tulokset eivät ole siis keskenään täysin vertailukelpoisia, vaan tähän kategoriaan on otettu yleisesti mukaan kaikki sisäistä laatua käsittelevät tulokset, jotka on tiivistetty taulukkoon 3.2. On huomattava, että samassa tutkimuksessa on joissain tapauksissa saatu erilaisia tuloksia eri metriikoista, mikä ei ilmene taulukossa. Esimerkiksi Siniaalto ja Abrahamsson [59] totesivat testilähtöisen kehityksen parantaneen testikattavuutta, mutta heikentävän koheesiota. Heidän tutkimuksensa on taulukossa tulkittu kokonaisuutena ja luokiteltu taulukossa ei eroa -kategoriaan. Yleisesti useimmissa kontrolloiduissa kokeissa ei havaittu testilähtöisen kehityksen vaikuttavan oleellisesti sisäiseen laatuun kontrolliryhmään verrattuna. Esimerkiksi Madeyski [41] toteutti opiskelijakokeen, jossa myös kontrolliryhmä toteutti ohjelmistokehitystä iteratiivisesti ja sitä vaadittiin kirjoittamaan yksikkötestit, mutta vasta toteutuskoodin jälkeen. Tutkimuksessa ei havaittu eroa ryhmien tuottaman koodin sisäisessä laadussa (esim. testikattavuus). Samanlainen havainto testikattavuudesta on tehty myös joissakin muissa tutkimuksissa [53][17]. Kahdessa kontrolloidussa kokeessa puolestaan havaittiin testilähtöisen kehityksen parantaneen kirjoitettujen testitapausten määrää [16][9]. Sisäistä laatua on käsitelty vain muutamassa tapaustutkimuksessa. Madeyski ja Szala [42] totesivat testilähtöisen kehityksen vähentäneen kirjoitetun tuotantokoodin määrää per kehitetty yksikkö, mikä tulkittiin positiiviseksi tulokseksi. Rendel [55] totesi testilähtöisen kehityksen parantaneen koodin koheesiota, kun taas Siniaalto ja Abrahamsson [59][60] raportoivat koheesion heikentyneen ja saivat samalla ristiriitaisia tuloksia muista mitatuista laatumetriikoista. Siniaallon ja Abrahamssonin johtopäätös oli, että testilähtöinen kehitys saattaa tuottaa vähemmän kompleksista koodia, joka on kuitenkin hankalampaa ylläpitää. He esittävät myös kysymyksen siitä, voidaanko testilähtöisen kehityksen esitetyt edut saavuttaa painottamalla yksikkötestien merkitystä riippumatta siitä, kirjoitetaanko testit ennen koodia vai sen jälkeen. 12

18 Taulukko 3.2: Miten testilähtöinen kehitys vaikuttaa sisäiseen laatuun? Menetelmä Parantaa laatua Ei eroa Heikentään laatua Kontrolloitu koe [9][16] [8][17][40][41][53] Tapaustutkimus [42][55] [59][60] Muut [20][25] [26][28] [66] Yhteensä Voidaan todeta, että empiirinen aineisto antaa hyvin vähän tukea sille väittämälle, että testilähtöinen kehitys parantaisi koodin sisäistä laatua. Vertailukelpoisia tutkimuksia on vähän ja tulokset ovat kaiken kaikkiaan ristiriitaisia. Näissäkin tuloksissa nostetaan uudelleen esille kysymys todellisista vaikuttavista tekijöistä testilähtöiseen kehitykseen liitettyjen hyötyjen takana Tuottavuus Tuottavuus tarkoittaa tässä yhteydessä hyvin laajasti kaikkea, mikä liittyy jollain tavalla sovelluskehityksen vaatimaan työmäärään. Eri tutkimuksissa on mitattu esimerkiksi kehitykseen kuluvaa kokonaisaikaa [5], tuotettuja koodirivejä per tunti [42] ja toteutettujen käyttäjätarinoiden (user story) määrää [16]. Tuottavuutta käsittelevät tutkimustulokset on tiivistetty taulukkoon 3.2. Taulukosta 3 voidaan todeta, että tutkimustulokset tässäkin kategoriassa ovat ristiriitaisia. Niukka enemmistö kontrolloiduista kokeista kallistuu johtopäätöksissään heikentyneeseen tuottavuuteen. Tapaustutkimukset ovat systemaattisemmin samansuuntaisia raportoidessaan siitä, että testilähtöinen kehitys lisäsi kehitykseen kulunutta aikaa. Kuitenkin jos kaikki tutkimukset otetaan huomioon, enemmistö tutkimuksista päätyi johtopäätöksissään siihen, että testilähtöinen kehitys paransi tuottavuutta tai sillä ei ollut vaikutusta tuottavuuteen. Siis testilähtöisen kehityksen vaikutuksesta tuottavuuteen ei voida tehdä kovin luotettavia johtopäätöksiä. Useat tutkijat (esim. [52]) ovat johtopäätöksissään todenneet, että testilähtöinen kehitys vaikutti lisäävän jonkin verran kehitykseen kuluvaa aikaa, mutta pitävät sitä samalla kannattavana sijoituksena parantuneeseen laatuun. Yhteenvetona tuottavuudesta voidaan sanoa, että senkin kohdalla empiirinen aineisto tarjoaa heikosti tukea luotettaville johtopäätöksille. Olemassa olevien tutkimustulosten perusteella voidaan kuitenkin todeta, että testilähtöinen kehitys saattaa lisätä kehitykseen tarvittavaa työmäärää. 13

19 Taulukko 3.3: Miten testilähtöinen kehitys vaikuttaa tuottavuuteen? Menetelmä Parantaa tuottav. Ei eroa Heikentää tuottav. Kontrolloitu koe [16][22] [17][20][24][51] [8][9][18][19] Tapaustutkimus [42][69] [5][11][45][52][57][71] Muut [26][70][72] [25] [66] Yhteensä Yhteenveto empiirisistä tutkimuksista Edellisissä kohdissa kuvatut tulokset testilähtöisen ohjelmistokehityksen hyötyjä käsittelevästä empiirisestä tutkimuksesta voidaan tiivistää seuraaviin kohtiin. 1 Aineisto tukee heikosti johtopäätöstä parantuneesta ulkoisesta laadusta. 2 Parantuneelle ulkoiselle laadulle on tukea hyvin vähän. 3 Aineisto tukee jonkin verran johtopäätöstä lisääntyneestä työmäärästä. Yleisesti näiden johtopäätösten pohjalta voidaan todeta, että testilähtöinen kehitys saattaa parantaa ulkoista laatua, mutta vaatia samalla suurempaa työmäärää. Tutkimustulokset ovat ristiriitaisia ja useissa tapauksissa heikosti vertailukelpoisia. Useassa kohdassa nousi esiin kysymys siitä, onko keskeisin tutkimustuloksiin vaikuttava tekijä todellisuudessa testilähtöisyys vai jokin aivan muu tekijä. Tarvitaan vielä runsaasti lisää tutkimusta, ennen kuin näistä kysymyksistä voidaan tehdä luotettavia johtopäätöksiä. 14

20 4 Kokemuksia testilähtöisen ohjelmistokehityksen opettamisesta Tässä luvussa on tiivistettynä tutkimustulokset kolmesta artikkelista, jotka käsittelevät testilähtöisen ohjelmistokehityksen opettamista. Kohdassa 4.1 kuvataan keskeiset tulokset ensimmäisestä opetuskokeiluista ja kohdassa 4.2 toisesta opetuskokeilusta saadut tulokset (artikkelit [34]ja [35]). Sen jälkeen kohdassa 4.3 tehdään yhteenveto testilähtöisen kehityksen opettamiseen keskittyneen kirjallisuuskatsauksen tuloksista (artikkeli [33]). 4.1 Ensimmäinen opetuskokeilu Ensimmäinen opetuskokeilu toteutettiin syksyllä Seuraavaksi kuvataan ensin opetuskokeilun taustaa ja sen jälkeen keskeisimmät tulokset Taustaa ensimmäisestä opetuskokeilusta Testilähtöisen ohjelmistokehityksen kokeilu oli osa opiskelijoiden harjoitustyötä, joka muodosti 25 % kurssin arvosanasta. Opiskelijoita ei pakotettu työskentelemään pareina, mutta heitä rohkaistiin vahvasti siihen. Opiskelijoita oli kaikkiaan 52, joista kaksi työskenteli yksin ja loput 50 pareina. Harjoituksia toteutettiin siis kaikkiaan 27, mikä oli myös saatujen vastausten määrä, sillä kukin pari vastasi tällä kierroksella kyselyyn parina. Varsinainen ohjelmointitehtävä ensimmäisellä toteutuskerralla oli toteuttaa yksinkertainen HTTP-palvelin. Tehtävän oli tarkoitus olla useimmille opiskelijoille jonkin verran haastava, jotta sen suorittaminen vastaisi mahdollisimman paljon aitoa ohjelmistotyötä. Pakolliset esitietokurssit eivät sisällä kaikkia tehtävää suorittamiseen tarvittavaa teknistä tietoa, mutta tarjolla oli ohjaussessioissa tukea niille, jotka sitä tarvitsivat. Testilähtöinen ohjelmistokehitys oli melko uutta osallistuneille opiskelijoille. Vain yhdessä parissa molemmat olivat kokeilleet sitä aiemmin. Kymmenessä parissa toinen oli kokeillut sitä aiemmin ja lopuilla 16 (mukaan lukien kaksi yksin tekijää) ei ollut mitään aiempaa kokemusta. Siis kaikkiaan 11/27 oli kokeillut testilähtöistä kehitystä aiemmin. Heidänkin kokemuksensa oli hyvin vähäistä ja se oli tavallisesti peräisin joltain 15

21 toiselta kurssilta. Vain pari opiskelijaa oli käyttänyt testilähtöistä kehitystä työssä. Johtopäätös opiskelijoiden raporttien perusteella oli, että opiskelijat olivat motivoituneita ja yrittivät tosissaan toteuttaa testilähtöistä kehitystä. Kolme paria raportoi, että he toteuttivat sitä hyvin kurinalaisesti. Lisäksi useimmat vastaajat (21/27) raportoivat lipsuneensa siitä vain silloin tällöin Kokemuksia ensimmäisestä opetuskokeilusta Kyselyssä kysyttiin, kuinka vaikealta testilähtöinen kehitys tuntui (asteikko 1-5, 1 = ei lainkaan, 5 = erittäin vaikealta). Vastaukset jakautuivat tasaisesti kummallekin puolelle asteikkoa. Tyypillisimmät vastaukset skaalalla olivat kaksi (9/27) ja neljä (10/27). Opiskelijoilta kysyttiin myös aiempaa kokemusta testilähtöisestä kehityksestä. Ennakoidusti ne, joilla oli aiempaa kokemusta, kokivat tehtävän helpompana. Kuitenkin ero kokemattomiin ei ollut kovin suuri, sillä kokemusta testilähtöisestä kehityksestä on yleensä hyvin vähän. Työn organisoinnin suhde koettuun vaikeuteen oli yllättävä. Ne opiskelijat, jotka tekivät työtä konkreettisesti yhdessä samalla tietokoneella, kokivat testilähtöisen kehityksen vaikeampana kuin itsenäisesti työskennelleet. Itsenäisesti työskennelleillä tarkoitetaan tässä sekä kokonaan ilman paria työskennelleet että niitä pareja, jotka jakoivat työt ja työskentelivät suurimmaksi osaksi itsenäisesti. Syy tähän havaintoon voi olla siinä, että ehkä osaavimmat parit päätyivät useammin jakamaan työt itsenäisesti tehtäväksi ja heikommin osaavat hakivat tukea yhdessä työskentelystä. Opiskelijoiden asenteet testilähtöistä kehitystä kohtaan harjoituksen jälkeen olivat odotettua positiivisempia. Kyselyssä kysyttiin halua käyttää menetelmää jatkossa. Hyvin suuri osa (20/27) vastauksista suhtautui tähän positiivisesti, kolme tulkittiin neutraaliksi ja ainoastaan neljä otti kielteisen kannan testilähtöisen kehityksen käyttämiseen jatkossa. Mielenkiintoisin havainto tässä oli huomata, miten moni uskoi testilähtöisen kehityksen olevan hyödyllistä, vaikka moni koki suuria vaikeuksia harjoituksen aikana sen toteutuksessa. Heidän mielestään testilähtöinen kehitys vaatii enemmän aikaa, mutta he uskovat sen tuottavan parempaa laatua ja se auttavan luottamaan paremmin omaan koodiin. Useat parit kommentoivat kuitenkin, että tarvitsevat lisää koulutusta ja harjoitusta, jotta voisivat hyödyntää menetelmää tehokkaasti. Suuri osa opiskelijoista vaikutti siis uskovan testilähtöisen kehityksen hyödyllisyyteen teoriassa, vaikka eivät kokeneet hyötyjä konkreettisesti harjoitusta tehdessä. Kyselyssä pyydettiin opiskelijoita kuvaamaan, mitkä asiat olivat harjoituksessa kaikkein vaikeimpia. Vastauksissa mainitut vaikeudet jaettiin analyysin pohjalta seuraavaan viiteen luokkaan. 16

22 1 tekninen toteutus 2 testien kirjoittaminen 3 testien sopiva abstraktiotaso 4 kurinalaisuus/asenne 5 muut Tekninen toteutus. Palvelimen toteutus vaikutti olevan opiskelijoille haastavaa. Tyypillisesti opiskelijat raportoivat jääneensä toteutuksessa jumiin joihinkin pieniin teknisiin yksityiskohtiin. Useat koetut ongelmat liittyivät ennemmin testeihin kuin itse palvelimen toteuttavaan koodiin. Palvelimen testaus JUnit-ympäristössä vaikutti olevan monille odottamattoman haastavaa. Useat turhautuivat siihen, että haastavaksi koettu testien kirjoittaminen vei enemmän aikaa kuin varsinainen ohjelman toteutus. Joidenkin kohdalla vaikeutena mainittiin yleisesti heikko ohjelmointitaito, uusi ohjelmointikieli tai uudet työkalut, joihin totuttelu vei aikaa. Testien kirjoittaminen. Useissa vastauksissa tuotiin esiin vaikeus hahmottaa, millaisia testejä tulisi kirjoittaa. Osa kommenteista liittyy yleisesti siihen, millaisia ovat sopivat testit testilähtöisessä kehityksessä. Tällöin pohdinnan kohteena on testin sopiva koko (kuinka pieni asia kannattaa testata?) ja testin kattavuus (mahdollisimman yksinkertainen testitapaus vai kattava testaus?). Vaikutti siltä, että opiskelijat pyrkivät usein intuitiivisesti kirjoittamaan (vastoin testilähtöisen kehityksen periaatetta) kattavia testitapauksia, jossa otetaan huomioon kaikki mahdolliset tarkistukset. Toinen näkökulma testien kirjoittamisen vaikeuteen liittyi työkaluihin. Jotkut opiskelijat raportoivat vaikeuksista hahmottaa testien kirjoittamista JUnit-ympäristössä. Nämä kokemukset liittyvät siihen, että harjoituksessa tuli heikomman teknisen taustan omaaville opiskelijoille aika monta uutta asiaa samalla kertaa. He olisivat kaivanneet enemmän tukea ja konkreettisia esimerkkejä, joita tässä kokeilussa tarjottiin niukasti. Testien sopiva abstraktiotaso. Useat parit raportoivat vaikeudesta testata palvelinkoodia. Useinmiten opiskelijat päätyivät testaamaan vain palvelimen ulkoista rajapintaa integraatiotasolla. He eivät hahmottaneet, kuinka tässä tapauksessa olisi voitu testata palvelinkoodia yksikkötasolla. Tästä johtuen he eivät voineet edetä pienin askelin testilähtöisen kehityksen periaatteiden mukaisesti. Tämä havainto liittyy enemmän testilähtöiseen kehitykseen yleensä kuin opiskelijoiden kokemiin vaikeuksiin. Opiskelijat kyseenalaistivat näiden kommenttien yhteydessä sen, kannattaako hyvin yksinkertaisia toiminnallisuuksia varten yleensäkään kirjoittaa testejä. Ja kannattaako se varsinkaan tällaisessa tapauksessa, kun testien kirjoittaminen koetaan työn sujumisen kannalta 17

23 kohtuuttoman työlääksi? Tämä nostaa esiin yleisen kysymyksen siitä, millä tasolla testit kannattaa testilähtöisessä kehityksessä kirjoittaa. Kurinalaisuus. Useat parit raportoivat myös vaikeudesta noudattaa kurinalaisesti testilähtöistä lähestymistapaa. Useimmat tähän liittyneet kommentit viittasivat siihen, että oli vaikeaa oppia pois vanhoista tottumuksista. Lisäksi jotkut kommentoivat kommenteissa, että olisi helpompaa kirjoittaa testit samaan tapaan pienissä iteraatioissa toteutuskoodin jälkeen. Muut. Vastauksissa tuotiin lisäksi esiin joitakin yksittäisiä mielenkiintoisia näkökulmia. Joidenkin niistä tulkittiin liittyvän esimerkiksi suunnittelun puutteeseen. Testilähtöinen kehittäminen oppikirjamallin mukaan etenee pieni palanen kerrallaan koostavan (bottom-up) lähestymistavan mukaisesti ilman perusteellista suunnittelua. Useille opiskelijoille olisi ollut selvästi hyötyä käyttää jonkin verran aikaa ohjelman rakenteen suunnitteluun ennen toteutuksen aloitusta. 4.2 Toinen opetuskokeilu Toinen opetuskokeilu toteutettiin keväällä Keuraavassa kuvataan ensin opetuskokeilun taustaa ja sen jälkeen oleellisimmat tulokset Taustaa toisesta opetuskokeilusta Suunnitellussa toteutuksessa ja kokeilun käytännön toteutumisessa oli jonkin verran pieniä eroja. Suurin muutos oli erilainen ohjelmointitehtävä. Useilla opiskelijoilla oli ensimmäisellä toteutuskerralla suunniteltua enemmän vaikeuksia tehtävän teknisen toteutuksen kanssa. Siitä syystä toisella toteutuskerralla tehtävän teknistä haastavuutta pyrittiin laskemaan, jotta opiskelijat voivat keskittyä paremmin testilähtöisen ohjelmistokehityksen kokeiluun. Toisella toteutuskerralla opiskelijoiden tehtävänä oli toteuttaa ohjelmakomponentti, jota voidaan käyttää käsittelemään muutamalla eri tavalla tietyn tyyppistä tekstiä. Toisella toteutuskerralla oli 27 osallistujaa. Harjoitus oli edelleen pakollinen osa kurssia, mutta tällä kertaa se ei vaikuttanut millään lailla kurssin arvosanaan, eikä kurssilla ei ollut muuta harjoitustyötä. Ehkä kurssin järjestelyistä johtuen opiskelijat eivät olleet aivan yhtä innokkaita työskentelemään parin kanssa kuin ensimmäisellä kerralla. Harjoituksen suoritti 7 paria ja 13 yksin työskennellyttä. Vastausten tulkinnan helpottamiseksi toisella kerralla pyydettiin jokaista opiskelijaa vastaamaan kyselyyn erikseen (ei pareina). Opiskelijoilta kysyttiin toisella kerralla heidän työkokemustaan IT-alalla. Useimmat 18

24 opiskelijoista olivat töissä kurssin aikana. Vain kahdeksalla (8/27) opiskelijalla ei ollut minkäänlaista alan työkokemusta. Muiden työkokemus vaihteli kuudesta kuukaudesta 12 vuoteen (mediaani 26 kk). Ensimmäisellä toteutuskerralla tätä ei kysytty kyselyssä, mutta tämä kysely vahvisti aiemman arvioin opiskelijoiden taustasta. Kurssin opiskelijat ovat todella kokeneita verrattuna koehenkilöihin useimmissa ohjelmistotekniikan alalla julkaistuissa opiskelijakokeissa. Testilähtöinen kehitys oli edelleen melko uusi lähestymistapa opiskelijoille. Tällä kerralla melkein puolet (13/27) oli kokeillut sitä aiemmin, mutta vain yksi oli käyttänyt sitä systemaattisesti omassa työssään. Useimmat opiskelijat yrittivät noudattaa testilähtöistä lähestymistapaa kurinalaisesti. Vain yksi opiskelija raportoi kirjoittaneensa säännöllisesti koodin ennen testejä ja kolme opiskelijaa raportoi lipsuneensa menetelmästä usein. Enemmistö kuvasi lipsuneensa menetelmästä vain silloin tällöin. Siis toisellakin toteutuskerralla opiskelijat vaikuttivat motivoituneilta kokeilemaan testilähtöistä kehitystä tosissaan Kokemuksia toisesta opetuskokeilusta Toisen toteutuskerran aiempaa helpompi ohjelmointitehtävä vaikutti muuttavan opiskelijoiden kokemusta testilähtöisestä kehityksestä. Kun tehtävä oli teknisesti helpompi, myös testilähtöinen kehitys koettiin jonkin verran helpompana. Tämä havainto on luonnollista ja odotusten mukainen. Tehtävän teknisen vaativuuden helpottaessa opiskelijoilla jäi enemmän kognitiivista kapasiteettia keskittyä testilähtöisen kehityksen omaksumiseen. Edelleen aiemmalla kokemuksella oli vain vähän merkitystä koettuun vaikeuteen. Testilähtöisen kehityksen kokivat hiukan helpommaksi ne, joilla oli siitä aiempaa kokemusta. Eroa ensimmäiseen toteutuskertaan verrattuna havaittiin sen sijaan työn organisoinnissa. Ensimmäisellä kerralla todettiin, että parin kanssa työskennelleet kokivat testilähtöisen kehityksen vaikeampana. Toisella toteutuskerralla havainto oli päinvastainen. Tällä kerralla yksin työskennelleen kokivat sen vaikeampana. Tähän ei tunnistettu selvää syytä, mutta sillä saattaa olla jotain tekemistä kurssin organisoinnin kanssa. Vaikuttaa, että jostain syystä osaavimmat opiskelijat päättivät ensimmäisellä toteutuskerralla työskennellä mieluummin yksin ja toisella toteutuskerralla parin kanssa. Toisella toteutuskerralla kysyttiin myös aiemman IT-alan työkokemuksen määrää. Odotetusti enemmän työkokemusta omaavat kokivat testilähtöisen kehityksen vähemmän vaikeana, mutta ero kokemattomien ryhmään ei ollut kovin suuri. Myös toisen toteutuskerran jälkeen opiskelijoiden asenteet testilähtöistä ohjelmis- 19

25 tokehitystä kohtaan olivat odotettua positiivisempia. Vain muutama (4/27) opiskelija raportoi, että ei haluaisi käyttää menetelmää jatkossa. Tämä vahvisti ensimmäisellä kerralla tehdyn havainnon. Tällaisessa pienessä harjoituksessa opiskelijoilla ei ole mahdollista saada henkilökohtaisesti kokemusta testilähtöisen kehityksen esitetyistä hyödyistä. Lisäksi monet kokevat suuria vaikeuksia sitä kokeillessa. Tästä huolimatta he olivat innokkaita uskomaan esitettyihin testilähtöisen kehityksen hyötyihin ja käyttämään sitä jatkossa. Tavallisin perustelu positiiviseen asenteeseen oli kokemus paremmasta luottamuksesta omaan koodin. Testilähtöinen kehitys nähdään eräänlaisena turvaverkkona ohjelmistokehittäjälle. Jotkut opiskelijat pitivät lähestymistavasta, koska se ohjaa pieniin askeliin ohjelmointityössä. Negatiiviset kommentit liittyivät lähinnä testilähtöisen kehityksen vaatimaan lisätyöhön tai siihen, että se vaatii muutosta totuttuihin rutiineihin. Jotkut opiskelijat eivät pitäneet testilähtöisestä kehityksestä, koska he kokivat jatkuvan siirtymisen testien ja koodin välillä häiritsevän heidän ajatusprosessiaan. Kun kysyttiin vaikeimmaksi koettuja asioita testilähtöisessä ohjelmistokehityksessä, opiskelijat toivat esiin hyvin samanlaisia asioita kuin ensimmäisellä toteutuskerralla. Vastauksissa nousi esiin kolme selvää teemaa. Joidenkin oli yksinkertaisesti vaikea tottua testilähtöiseen ajattelutapaan. Useat opiskelijat raportoivat vaikeuksista kehittää sopivia testejä, erityisesti testilähtöisen kehittämisen vaatimissa lyhyissä sykleissä. Lisäksi tälläkin kerralla joillakin opiskelijoilla oli vaikeuksia teknisen toteutuksen kanssa. Jotkut eivät olleet ohjelmoineet mitään useaan vuoteen tai heillä ei ollut ennestään kokemusta Javasta. Myös JUnit-ympäristön kanssa koettiin jonkin verran vaikeuksia. Toisella toteutuskerralla opiskelijoiden vastauksista nousi esiin myös joitakin kiinnostavia uusia asioita. Testilähtöisen kehityksen koettiin tällä kerralla tukevan ohjelman suunnittelua. Ensimmäisellä kerralla tällaista ei noussut esiin teknisesti haastavamman tehtävän kanssa, jolloin opiskelijat olisivat kaivanneet etukäteen suunnittelua kokonaisuuden hahmottamista varten. Toisella toteutuskerralla koettiin motivoivana testilähtöisen kehityksen eteneminen pienin askelin, sillä siinä saa nopeasti palautetta omasta työstä. Ensimmäisellä kerralla opiskelijoiden oli haastavamman tehtävän luonteesta johtuen oleellisesti vaikeampi edetä niin pienin askelin menetelmän mukaisesti. Yleinen havainto opiskelijoiden kommenteista oli, että toinen toteutuskerta ei nostanut opiskelijoiden vastauksissa esiin niin rikasta keskustelua kuin ensimmäisellä kerralla. Toisella kerralla opiskelijoiden kommentit noudattelivat enemmän johdantoluennolla esiin tuotuja "oppikirjamallin"mukaisia ajatuksia testilähtöisestä kehityksestä ja sen hyödyistä. Ensimmäisellä kerralla opiskelijat kokivat enemmän vaikeuksia haastavamman tehtävän kanssa ja ilmeisesti se sai heidät pohtimaan testilähtöistä kehitystä monipuolisemmin ja kriittisemmin. 20

26 4.3 Kirjallisuuskatsaus testilähtöisen ohjelmistokehityksen opettamisesta Tässä kohdassa kuvataan tulokset testilähtöisen ohjelmistokehityksen opetusta käsittelevästä kirjallisuuskatsauksesta (artikkeli [33]). Edellä kuvatut opetuskokeilut toteutettiin maisteritasoisella ylioopistokurssilla ennen laajan kirjallisuuskatsauksen toteutusta. Kirjallisuuskatsauksen tarkoitus oli luoda laajempi kuva testilähtöisen ohjelmistokehityksen opettamiseen liittyvistä kysymyksistä. Erityinen tavoite oli tunnistaa kirjallisuudesta raportoituja käytännöllisiä kokemuksia, jotka voivat auttaa suunnittelemaan testilähtöisen kehityksen opetusta osana tietojenkäsittelyn yliopisto-opetusohjelmaa. Lopullinen kirjallisuuskatsauksen aineisto sisälsi 48 artikkelia, jotka liittyvät jollain lailla testilähtöisen kehityksen opettamiseen. Seuraavissa alakohdissa on tiivistetty kolme keskeisintä teemaa, jotka nousivat esiin aineistossa. Lopuksi esitetään vielä löydösten pohjalta joitakin ajatuksia testilähtöisen kehityksen sisällyttämisestä opetusohjelmaan Opiskelijoiden motivaatio Opiskelijoiden asenteita testilähtöistä ohjelmistokehitystä kohtaan käsiteltiin useissa tutkimuksissa. Niissä voidaan nähdä pari selvää trendiä. Kokeneemmilla opiskelijoilla vaikuttaa olevan positiivisempi asenne testilähtöistä kehitystä kohtaan kuin aivan aloittelijoilla. Toiseksi, esitettyjen asenteiden ja todellisen toiminnan välillä on ero. Kurssilla vaikuttaa aina olevan joukko opiskelijoita, jotka uskovat testilähtöisen kehityksen olevan hyödyllistä, mutta he eivät kuitenkaan halua käyttää sitä omassa työssään. Janzen ja Saiedian [25] raportoivat kokemuksistaan testilähtöisen kehityksen käytöstä ohjelmoinnin peruskursseilla. Useimmat opiskelijat eivät halunneet käyttää testilähtöistä kehitystä yliopiston ensimmäisen ohjelmointikurssin jälkeen ja hyvin harva käytti sitä toisella ohjelmointikurssilla. Toisessa tutkimuksessa Janzen ja Saiedian [27] totesivat, että kokeneemmilla ohjelmoijilla oli huomattavasti positiivisempi asenne testilähtöiseen kehitykseen kuin aloittelijoilla. Samanlaisia tuloksia ovat raportoineet myös Melnik ja Maurer [46]. Siis erityisesti aloittelijoiden motivointi testilähtöiseen ohjelmistokehitykseen vaikuttaa olevan haastavaa. Janzen ja Saiedian [27] havaitsivat tutkimuksessaan eron raportoitujen asenteiden ja käytännön välillä. Heidän tutkimuksessaan vastaajat olivat kaikissa kohderyhmissä halukkaampia uskomaan testilähtöisen kehityksen hyötyihin kuin käyttämään sitä itse käytännössä. Esimerkiksi melkein 40 % aloittelijoista uskoi testilähtöisen kehityksen johtavan virheiden vähenemiseen, mutta vain 10 % heistä käyttäisi sitä itse jatkossa. 21

27 Useat muut tutkimukset ovat havainneet heikosta opiskelijan motivaatiosta silloin, kun testilähtöistä kehitystä ei ole pakko käyttää [37][43][46][62]. Abrahamsson ym. [1] tekivät tapaustutkimuksessaan samanlaisen havainnon. Jopa kokeneilla ohjelmoijilla, joilla oli positiivinen asenne testilähtöiseen kehitykseen, oli heikko motivaatio käyttää sitä käytännössä. Yhteenvetona voidaan todeta, että useimmat opiskelijat vaikuttavat kokevan testilähtöisen kehityksen lisätyönä, eivätkä he ole motivoituneita käyttämään sitä vapaaehtoisesti. Siis jos sen opettaminen asetetaan tavoitteeksi, siitä täytyy tehdä pakollinen osa kurssia ja sen huomioiminen kurssin arvioinnissa voi olla järkevää Testilähtöinen kehitys opetusohjelmassa Testilähtöistä kehitystä on sisällytetty opetukseen erilaisilla yliopistokursseilla ja opetusohjelman eri tasoilla. Jopa ensimmäiseltä ohjelmointikurssilta on raportoitu positiivisia kokemuksia testilähtöisen kehityksen käytöstä [15][25][64][68][58][12]. Testilähtöisen kehityksen sisällyttäminen opetukseen alusta asti on järkevää siinä mielessä, että jo toisen vuoden opiskelijat saattavat olla tottuneita erilaiseen ohjelmointityyliin [48]. Positiivisia kokemuksia testilähtöistä ohjelmistokehityksestä on raportoitu myös kolmannen vuoden ohjelmistotekniikan kurssilta [6], sulautettujen järjestelmien ohjelmoinnin kurssilta [47] ja haastavaksi koetulta ohjelmointikielten kääntäjiä käsittelevältä kurssilta. Testilähtöistä kehitystä on siis pidetty tärkeänä aiheena opetusohjelman eri tasoilla. Eri lähteissä on raportoitu myös ristiriitaisia kokemuksia testilähtöisen kehityksen opettamisesta. Marrero ja Settle [43] yrittivät sisällyttää testilähtöistä kehitystä yliopiston ensimmäiselle ohjelmointikurssille, mutta totesivat sillä olleen negatiivista vaikutusta opiskelijoiden tuloksiin. Useat tutkijat ovat raportoineet kokemuksia eri extereme Programming -menetelmän käytänteiden opetuksesta ja todenneet, että testilähtöinen kehitys oli käytänteistä opiskelijoille kaikkein vaikeinta omaksua [23][30][46][49][67]. Kokeneilla maisteriopiskelijoilla [34][35][56] ja jopa kokeneilla ammattilaisilla [61] on todettu olleen vaikeuksia testilähtöisen kehityksen omaksumisessa. Yleisesti hyväksytty ajatus vaikuttaa olevan, että testilähtöisen kehityksen opetus on hyvä aloittaa mahdollisimman aikaisessa vaiheessa, mutta se on samalla selvästi haastava tehtävä. Ydinkysymys onkin se, millä tavalla testilähtöinen kehitys olisi hyvä ottaa mukaan opetusohjelman eri tasoille. Aloittelijat eivät kykene omaksumaan testilähtöistä kehitystä kokonaisuudessaan, mutta jonkinlaista testilähtöistä ohjelmointia voidaan sisällyttää jo aivan ohjelmoinnin perusteisiin. 22

28 4.3.3 Haasteet testilähtöisen kehitykset opettamisessa Testilähtöisen ohjelmistokehityksen opetukseen sisältyy monenlaisia haasteita. Tässä on tiivistetty joitakin käytännöllisiä näkökulmia, joihin tutkimuksissa on viitattu. Testilähtöiseen kehitykseen tottuminen vie aikaa [30][34][49]. Edes aloittelijoille testilähtöinen kehitys ei ole välttämättä kaikkein luonnollisimmaksi koettu tapa työskennellä. Ja kokeneemmilta ohjelmoijilta vaatii luonnollisesti jonkin verran vaivaa oppia pois erilaisesta ohjelmointitavasta [34][48]. Testilähtöinen kehitys vaatii kykyä jakaa ohjelmaa pieniin osiin, mikä on haastavaa monille opiskelijoille [48]. Ja lisäksi tällainen pieniin osiin jakaminen vaatii samalla kykyä hahmottaa kokonaisuus, jota ollaan kehittämässä. Useat tutkijat ovat raportoineet opiskelijoiden vaikeuksista kirjoittaa hyviä yksikkötestejä [23][34][65]. Testien kirjoittaminen vaikuttaa olevan ohjelmoinnista erillinen taito. On todettu, että kokeneillakin ohjelmointikokemusta omaavilla opiskelijoilla voi olla vaikeuksia hyvien testitapausten kirjoittamisessa [34][65]. Testilähtöinen kehitys vaatii siis useita erilaisia taitoja, jotka opiskelijoiden täytyy hallita samaan aikaan. Mugridge [48] pitää tätä keskeisimpänä haasteena kokemuksissaan testilähtöisen kehityksen opettamisesta toisen vuoden opiskelijoille. Liian monta haastavaa asiaa samanaikaisesti estää opiskelijoita keskittymästä testilähtöiseen kehitykseen. Esimerkiksi Carlson [10] piti tästä syystä JUnitia liian monimutkaisena ensimmäiselle ohjelmointikurssille. Tässä tutkimuksessa (artikkeli [34]) todettiin, että kokeneet maisteritason opiskelijat kokivat vaikeana keskittyä testilähtöiseen kehitykseen, kun heille annettiin teknisesti haastava tehtävä. Siis testilähtöinen kehitys vaatii useita eri taitoja ja kaikkien niiden oppiminen samalla kurssilla ei ole realistista. Ennemmin täytyy löytää keino sisällyttää testilähtöinen kehitys useaan kohtaan opetusohjelman eri tasoille Ehdotuksia opetusohjelmaan Edellä kuvattujen kokemusten perusteella voidaan todeta, että testilähtöisen ohjelmistokehityksen oppiminen ei ole yksinkerta. Jos asetetaan oppimisen tavoitteeksi, että opiskelija ymmärtää testilähtöistä kehitystä ohjelmistotuotannon osana ja osaa soveltaa sitä käytännössä, oppimisen ei voida odottaa tapahtuvan yhdellä kurssilla. Seuraavassa on kuvattu kirjallisuuskatsauksesta syntyneiden ajatusten pohjalta ehdotus testilähtöisen kehityksen sisällyttämiseksi opetusohjelman kolmelle eri tasolle: ohjelmoinnin perusteet, projektiopinnot, syventävä maisteritaso. Ohjelmoinnin perusteet. Testilähtöinen kehitys on hyvä aloittaa mahdollisimman varhain ennen kuin opiskelijat ehtivät tottumaan toisenlaisiin ohjelmointirutiineihin. 23

29 Tärkein asia tällä tasolla on totuttaa opiskelijat siihen ajatukseen, että yksikkötestien kirjoittaminen on kiinteä osa ohjelmointityötä, ei saavuttaa syvällistä ymmärrystä testilähtöisestä kehityksestä. Aivan alussa opiskelijaa ei voi kaikkien muiden uusien asioiden lisäksi kuormittaa kovin paljon. Tässä on joitakin konkreettisia suosituksia ohjelmoinnin perusopetukseen. Aloita testilähtöinen kehitys jo ensimmäisellä ohjelmointikurssilla. Ensimmäisellä kurssilla sen täytyy olla hyvin yksinkertaista. Voi olla järkevää tässä vaiheessa käyttää jotain vielä yksinkertaisempaa tapaa kuin xunit-tyypistä työkalua (esim. [36]). Toinen ohjelmointikurssi on ehkä sopiva taso aloittaa systemaattinen testilähtöisen kehityksen ja siihen sopivien työkalujen käyttäminen. Muista alusta asti motivoida opiskelijoita kirjoittamaan testejä! Opiskelijoille on hyvä perustella testien merkitys, vaikka peruskurssien tasolla opiskelijat eivät pienissä harjoituksissa itse koe niitä hyödyllisiksi. Projektikurssit. Useissa yliopistoissa tietojenkäsittelyn opetusohjelmaan sisältyy selvästi tavallista kurssin harjoitustyötä suuremman sovelluksen toteuttaminen. Kurssien toteutus vaihtelee paljon, mutta tavallisesti tällainen kurssi vastaa kuitenkin enemmän realistista ja ammattimaista ohjelmointityötä kuin mikään muu osa opintoja. Tässä vaiheessa keskeistä on se, että opiskelijat saavat käytännön kokemusta testilähtöisestä kehityksestä laajemmassa mittakaavassa. Seuraavissa kohdissa on tiivistettynä avainajatuksen testilähtöisen opetuksen sisällyttämisestä projektikurssille. Tässä vaiheessa opintoja opiskelijoilla on jo tyypillisesti joukko tarvittavia teknisiä taitoja ja he ovat aiempaa valmiimpia oppimaan ja ymmärtämään laajemmin ohjelmistotekniikan hyviä käytänteitä. Esimerkiksi hyvien testitapausten kirjoittaminen voi olla järkevä opetukselle asetettava tavoite tässä vaiheessa. Ohjelmointitehtävä on riittävän suuri, jotta siinä konkretisoituu opiskelijalle ainakin osa (ei varmasti kaikki!) testilähtöisen kehityksen odotetuista hyödyistä ja rajoitteista. Projektityöskentely auttaa opiskelijoita saamaan laajemman kuvan ohjelmistokehityksestä ja samalla testilähtöisen kehityksen roolista sen osana. Riittävän suuri tehtävä voi tehdä hyvien käytänteiden merkityksen konkreettiseksi. Lisäksi useissa tapauksissa toteutuvat todelliset asiakaskontaktit konkretisoivat laadun merkityksen. 24

30 Syventävä maisteritaso. Aluksi opiskelijat oppivat siis testilähtöisen kehityksen perusteita ohjelmoinnin peruskursseilla ja sitten saavat projektikurssilla käytännöllisen kokemuksen siitä laajemman kontekstissa. Näiden kokemusten jälkeen opiskelijat ovat aiempaa valmiimpia muodostamaan kattavan kuvan testilähtöisestä kehityksestä kehitysmenetelmänä. Tällä tasolla keskeistä on nähdä ohjelmistotuotantoon liittyvät käytänteet kokonaisuutena, hahmottaa testilähtöisen kehityksen rooli osana kokonaisuutta sekä pohtia kriittisesti menetelmän hyötyjä ja rajoitteita. Seuraavissa kohdissa on listattu kysymyksiä, jotka sopivat tällä tasolla pohdittaviksi. Mitkä ovat todelliset testilähtöisen kehityksen hyödyt? Millaisia rajoitteita ja haasteita testilähtöiseen kehitykseen liittyy? Mikä on testilähtöisen kehityksen ja testauksen suhde? Mikä on testilähtöisen kehityksen rooli ohjelmistotuotannossa ja miten se liittyy muhin käytänteisiin (esim. jatkuvaan integraatioon)? 25

31 5 Yhteenveto Tässä työssä on käsitelty testilähtöisen ohjelmistokehityksen opettamista yliopistotasolla. Työ koostuu neljästä julkaistusta konferenssiartikkelista, joista yksi käsittelee testilähtöisen kehityksen hyötyjä yleensä, kaksi kuvaa kokemuksia Jyväskylän yliopistossa toteutetuista opetuskokeiluista ja yksi artikkeli keskittyy laajemmin kirjallisuudessa raportoituihin kokemuksiin testilähtöisen kehityksen opettamisesta. Ensimmäinen artikkeli [32] on luonteeltaan taustatietoa tämän tutkimuksen kannalta. Siinä pyritään vastaamaan kysymykseen: Mitä testilähtöisestä ohjelmistokehityksestä ja sen hyödyistä ymmärretään aiemman empiirisen tutkimuksen pohjalta? Toteutetun kirjallisuuskatsauksen pohjalta voidaan todeta, että empiirisiin tutkimustuloksiin sisältyy monenlaisia ongelmia. Tulokset ovat heikosti vertailukelpoisia ja keskenään ristiriitaisia. Tuloksista voidaan päätellä, että testilähtöinen kehitys saattaa parantaa ohjelmiston ulkoista laatua, mutta vaatia samalla jonkin verran enemmän työtä. Eräs useaan kertaan esiin noussut näkökulma oli kysymys siitä, ovatko nämä havaitut tulokset todellisuudessa seurausta testilähtöisyydestä vai jostain aivan muusta. Vahvojen johtopäätösten tekemiseen tarvitaan kuitenkin vielä runsaasti lisätutkimusta. Artikkelit 2 [34] ja 3 [35] keskittyvät Jyväskylän yliopistossa toteutettuihin opetuskokeiluihin, joiden pohjalta pyrittiin vastaamaan kysymykseen: Miten maisteritason opiskelijat kokevat testilähtöisen ohjelmistokehityksen? Opetuskokeilut toteutettiin pienenä harjoitustyönä maisteritasoisella ohjelmistotestauksen kurssilla. Pääosa opetuskokeilun tuloksista keskittyi opiskelijoiden kokemiin vaikeuksiin testilähtöisessä kehityksessä. Kokeilun molemmilla toteutuskerroilla todettiin vaikeuksien liittyneen kolmeen keskeiseen teemaan: 1) testilähtöiseen kehitykseen sopeutuminen, 2) hyvien testien kirjoittaminen ja 3) vaikeudet teknisessä toteutuksessa. Opetuskokeiluissa tehtiin joitakin mielenkiintoisia opetukseen liittyviä käytännöllisiä havaintoja. Ensimmäisellä toteutuskerralla selvästi haastavampi ohjelmointitehtävä sai opiskelijoissa aikaan monipuolisempaa pohdintaa, mutta samalla teknisiltä taidoiltaan heikommat opiskelijat eivät kyenneet kunnolla keskittymään testilähtöisen kehityksen oppimiseen. Toisella toteutuskerralla helpompi tehtävä puolestaan tuki teknisiltä taidoiltaan heikompien käytännön harjoittelua, mutta oli samalla aivan liian helppo osaavimmille opiskelijoille. Lisäksi havaittiin, että opiskelijat olivat yllättävän herkkiä uskomaan testilähtöisen kehityksen esitettyihin etuihin, vaikka he eivät pienen harjoituksen aikana saaneet niistä henkilökohtaista kokemusta. Oppimisen kannalta opiske- 26

32 lijoita olisi pitänyt harjoituksen jälkeen ohjata selvemmin kriittiseen pohdintaan. Neljännessä artikkelissa [33] käsitellään laajemmin kirjallisuudessa raportoituja kokemuksia testilähtöisen kehityksen opettamisesta. Siinä pyrittiin vastaamaan kysymykseen: Millaisia käytännöllisiä suosituksia voidaan aiemman tutkimuksen pohjalta muodostaa testilähtöisen kehittämisen opettamisen tueksi? Kirjallisuudessa esitetyt kokemukset liittyivät pääasiassa kolmeen kategoriaan: 1) opiskelijoiden motivaatio testilähtöiseen kehitykseen, 2) testilähtöisen kehityksen rooli tietojenkäsittelyn opetusohjelmassa ja 3) käytännölliset haasteet testilähtöisen kehityksen opetuksessa. Keskeisin johtopäätös oli, että testilähtöisen ohjelmistokehityksen oppiminen on haastavaa, eikä sen voida olettaa tapahtuvan kattavasti yhdellä kurssilla. Sen sijaan testilähtöinen kehitys tulisi sisällyttää vaiheittain opetusohjelman eri tasoille. Työssä esitettiin kirjallisuuskatsauksen pohjalta seuraavaan kolmeen vaiheeseen perustuva mahdollinen malli opetuksen toteuttamiseen kolmessa eri vaiheessa seuraavia ajatuksia noudatellen. 1 Aloitetaan testilähtöinen kehitys käytännössä ensimmäiseltä ohjelmointikurssilta alkaen. 2 Proktikurssit tarjoavat realistisemman kontekstin havaita testilähtöisen kehityksen hyödyt ja rajoitteet käytännössä. 3 Syventävillä kursseilla voidaan muodostaa laajempi käsitys testilähtöisestä kehityksestä osana ohjelmistotuotantoa. Myös testilähtöisen kehityksen opetukseen liittyen kirjallisuudesta löytyy toistaiseksi vielä rajallisesti tutkimustuloksia. Tarvitaan vielä paljon lisää tutkimusta, jotta voidaan paremmin ymmärtää sekä testilähtöistä kehitystä yleisesti että sen opettamista. Tässä on hyvä huomata, että nämä ovat kaksi erillistä näkökulmaa. Jotkut tutkijat ovat pitäneet testilähtöistä kehitystä hyödyllisenä opetusmenetelmänä riippumatta siitä, kuinka hyödylliseksi menetelmä havaitaan ohjelmistotuotannossa yleensä. 27

33 6 Lähteet [1] Pekka Abrahamsson, Antti Hanhineva, and Juho Jäälinoja. Improving business agility through technical solutions: A case study on test-driven development in mobile software development. In Business Agility and Information Technology Diffusion, volume 180/2005 of IFIP International Federation for Information Processing, pages Springer Boston, [2] David Astels. Test Driven Development: A Practical Guide. Prentice Hall, Upper Saddle River, New Jersey, [3] Kent Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley Professional, 1st edition, October [4] Kent Beck. Test-Driven Development: By Example. The Addison-Wesley Signature Series. Addison-Wesley, [5] Thirumalesh Bhat and Nachiappan Nagappan. Evaluating the ecacy of testdriven development: industrial case studies. In ISESE '06: Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering, pages , New York, NY, USA, ACM. [6] Jon Bowyer and Janet Hughes. Assessing undergraduate experience of continuous integration and test-driven development. In ICSE '06: Proceedings of the 28th international conference on Software engineering, pages , New York, NY, USA, ACM. [7] Larman C. and Basili V.R. Iterative and incremental developments. a brief history. Computer, 36(6):4756, [8] Gerardo Canfora, Aniello Cimitile, Felix Garcia, Mario Piattini, and Corrado Aaron Visaggio. Evaluating advantages of test driven development: a controlled experiment with professionals. In ISESE '06: Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering, pages , New York, NY, USA, ACM. [9] Gerardo Canfora, Aniello Cimitile, Felix Garcia, Mario Piattini, and Corrado Aaron Visaggio. Productivity of test driven development: A controlled experiment 28

34 with professionals. In Product-Focused Software Process Improvement, volume 4034 of LNCS, pages , [10] B. Carlson. An agile classroom experience: Teaching tdd and refactoring. In Agile, AGILE '08. Conference, pages , Aug [11] Lars-Ola Damm and Lars Lundberg. Quality impact of introducing componentlevel test automation and test-driven development. In EuroSPI 2007, volume 4764 of LNCS, pages , [12] Chetan Desai, David S. Janzen, and John Clements. Implications of integrating test-driven development into cs1/cs2 curricula. In SIGCSE '09: Proceedings of the 40th ACM technical symposium on Computer science education, pages , New York, NY, USA, ACM. [13] S. H. Edwards. Using test-driven development in the classroom: Providing students with automatic, concrete feedback on performance. In Proc. Int"l Conf. Education and Information Systems: Technologies and Applications (EISTA 03), [14] Stephen H. Edwards. Improving student performance by evaluating how well students test their own programs. Journal on Educational Resources in Computing, 3(3):1, [15] Stephen H. Edwards. Using software testing to move students from trial-and-error to reection-in-action. In SIGCSE '04: Proceedings of the 35th SIGCSE technical symposium on Computer science education, pages 2630, New York, NY, USA, ACM. [16] H. Erdogmus, M. Morisio, and M. Torchiano. On the eectiveness of the test- rst approach to programming. Software Engineering, IEEE Transactions on, 31(3):226237, March [17] T. Flohr and T. Schneider. Lessons learned from an xp experiment with students: Test-rst needs more teachings. In Product Focused Software Process Improvement, volume 4034 of LNCS, page 305?318, [18] Boby George and Laurie Williams. An initial investigation of test driven development in industry. In SAC '03: Proceedings of the 2003 ACM symposium on Applied computing, pages , New York, NY, USA, ACM. [19] Boby George and Laurie Williams. A structured experiment of test-driven development. Information and Software Technology, 46(5):337342,

35 [20] A. Geras, M. Smith, and J. Miller. A prototype empirical evaluation of test driven development. In METRICS '04: Proceedings of the Software Metrics, 10th International Symposium, pages , Washington, DC, USA, IEEE Computer Society. [21] Barney G. Glaser and Anselm L. Strauss. The Discovery of Grounded Theory: Strategies for Qualitative Research. Aldine de Gruyter, New York, [22] A. Gupta and P. Jalote. An experimental evaluation of the eectiveness and eciency of the test driven development. In Empirical Software Engineering and Measurement, ESEM First International Symposium on, pages , sept [23] Görel Hedin, Lars Bendix, and Boris Magnusson. Teaching extreme programming to large groups of students. Journal of Systems and Software, 74(2):133146, [24] Liang Huang and Mike Holcombe. Empirical investigation towards the eectiveness of test rst programming. Information and Software Technology, 51(1): , [25] David Janzen and Hossein Saiedian. Does test-driven development really improve software design quality? IEEE Software, 25(2):7784, [26] David S. Janzen and Hossein Saiedian. On the inuence of test-driven development on software design. In CSEET '06: Proceedings of the 19th Conference on Software Engineering Education & Training, pages , Washington, DC, USA, IEEE Computer Society. [27] D.S. Janzen and H. Saiedian. A leveled examination of test-driven development acceptance. In Software Engineering, ICSE th International Conference on, pages , May [28] D.S. Janzen, C.S. Turner, and H. Saiedian. Empirical software engineering in industry short courses. In Software Engineering Education Training, CSEET '07. 20th Conference on, pages 89 96, july [29] Reid Kaufmann and David Janzen. Implications of test-driven development: a pilot study. In OOPSLA '03: Companion of the 18th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, pages , New York, NY, USA, ACM. 30

36 [30] Karen Keefe, Judithe Sheard, and Martin Dick. Adopting xp practices for teaching object oriented programming. In ACE '06: Proceedings of the 8th Austalian conference on Computing education, pages 91100, Darlinghurst, Australia, Australia, Australian Computer Society, Inc. [31] Barbara Kitchenham and Stuart Charters. Guidelines for performing systematic literature reviews in software engineering. Technical Report EBSE , Keele University and Durham University Joint Report, [32] Sami Kollanus. Test-driven development - still a promising approach? In Proceedings of the 7th International Conference on the Quality of Information and Communications Technology, pages , [33] Sami Kollanus. Test-driven development - suggestions for curriculum development. In Proceeding of the International Conference on Computer Science Education: Innovation and Technology (CSEIT 2010), pages 5964, Phuket, Thailand, December [34] Sami Kollanus and Ville Isomöttönen. Test-driven development in education: experiences with critical viewpoints. In Proceedings of the 13th annual conference on Innovation and technology in computer science education, pages , New York, NY, USA, ACM. [35] Sami Kollanus and Ville Isomöttönen. Understanding tdd in academic environment: Experiences from two experiments. In Arnold Pears and Lauri Malmi, editors, 8th International Conference on Computing Education Research, Koli Calling 2008, pages 2531, [36] Vesa Lappalainen, Jonne Itkonen, Ville Isomöttönen, and Sami Kollanus. Comtest: a tool to impart tdd and unit testing to introductory level programming. In ITiCSE '10: Proceedings of the fteenth annual conference on Innovation and technology in computer science education, pages 6367, New York, NY, USA, ACM. [37] Andreas Leitner, Ilinca Ciupa, Manuel Oriol, Bertrand Meyer, and Arno Fiva. Contract driven development = test driven development - writing test cases. In ESEC-FSE '07: Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering, pages , New York, NY, USA, ACM. 31

37 [38] Kim Man Lui and Keith C.C. Chan. Test driven development and software process improvement in china. In Extreme Programming and Agile Processes in Software Engineering, pages , [39] Lech Madeyski. Preliminary analysis of the eects of pair programming and testdriven development on the external code quality. In Proceeding of the 2005 conference on Software Engineering: Evolution and Emerging Technologies, pages , Amsterdam, The Netherlands, The Netherlands, IOS Press. [40] Lech Madeyski. The impact of pair programming and test-driven development on package dependencies in object-oriented design an experiment. In Product- Focused Software Process Improvement, volume 4034 of LNCS, pages , [41] Lech Madeyski. The impact of test-rst programming on branch coverage and mutation score indicator of unit tests: An experiment. Inf. Softw. Technol., 52(2): , [42] Lech Madeyski and Lukasz Szala. The impact of test-driven development on software development productivity an empirical study. In EuroSPI 2007, volume 4764 of LNCS, pages , [43] Will Marrero and Amber Settle. Testing rst: emphasizing testing in early programming courses. In ITiCSE '05: Proceedings of the 10th annual SIGCSE conference on Innovation and technology in computer science education, pages 48, New York, NY, USA, ACM. [44] R. Martin. Bowling game kata, [45] E.M. Maximilien and L. Williams. Assessing test-driven development at ibm. Software Engineering, Proceedings. 25th International Conference on, pages , May [46] Grigori Melnik and Frank Maurer. A cross-program investigation of students' perceptions of agile methods. In ICSE '05: Proceedings of the 27th international conference on Software engineering, pages , New York, NY, USA, ACM. [47] James Miller and Michael Smith. A tdd approach to introducing students to embedded programming. In ITiCSE '07: Proceedings of the 12th annual SIGCSE conference on Innovation and technology in computer science education, pages 33 37, New York, NY, USA, ACM. 32

38 [48] Rick Mugridge. Challenges in teaching test driven development. In Extreme Programming and Agile Processes in Software Engineering, volume 2675 of Lecture Notes in Computer Science, page 1015, Berlin / Heidelberg, Springer. [49] Matthias M. Müller, Johannes Link, Roland Sand, and Guido Malpohl. Extreme programming in curriculum: Experiences from academia and industry. In Extreme Programming and Agile Processes in Software Engineering, volume 3092 of Lecture Notes in Computer Science, Berlin / Heidelberg, Springer. [50] Matthias M. Müller and Walter F. Tichy. Case study: Extreme programming in a university environment. In 23rd International Conference on Software Engineering, pages IEEE Computer Society, [51] M.M. Muller and O. Hagner. Experiment about test-rst programming. Software, IEE Proceedings -, 149(5):131136, October [52] Nachiappan Nagappan, E. Michael Maximilien, Thirumalesh Bhat, and Laurie Williams. Realizing quality improvement through test driven development: results and experiences of four industrial teams. Empirical Softw. Engg., 13(3):289302, [53] M. Pancur, M. Ciglaric, M. Trampus, and T. Vidmar. Towards empirical evaluation of test-driven development in a university environment. In EUROCON Computer as a Tool. The IEEE Region 8, volume 2, pages 8386 vol.2, Sept [54] S.M. Rahman. Applying the tbc method in introductory programming courses. In Frontiers In Education Conference - Global Engineering: Knowledge Without Borders, Opportunities Without Passports, FIE '07. 37th Annual, pages T1E20 T1E21, oct [55] A. Rendell. Eective and pragmatic test driven development. In Agile, AGILE '08. Conference, pages , aug [56] Outi Salo, Kari Kolehmainen, Pekka Kyllönen, Jani Löthman, Sanna Salmijärvi, and Pekka Abrahamsson. Self-adaptability of agile software processes: A case study on post-iteration workshops. In Extreme Programming and Agile Processes in Software Engineering, number 3092 in Lecture Notes on Computer Science, pages , Berlin / Heidelberg, Springer. [57] J.C. Sanchez, L. Williams, and E.M. Maximilien. On the sustained use of a testdriven development practice at ibm. In AGILE 2007, pages 5 14, aug

39 [58] Stephen Schaub. Teaching cs1 with web applications and test-driven development. SIGCSE Bull., 41(2):113117, [59] M. Siniaalto and P. Abrahamsson. A comparative case study on the impact of testdriven development on program design and test coverage. In Empirical Software Engineering and Measurement, ESEM First International Symposium on, pages , sept [60] Maria Siniaalto and Pekka Abahamsson. Does test-driven development improve the program code? alarming results from a comparative case study. In Balancing Agility and Formalism in Software Engineering: Second IFIP TC 2 Central and East European Conference on Software Engineering Techniques, CEE-SET 2007, pages , Berlin, Heidelberg, [61] Odd Petter N. Slyngstad, Jingyue Li, Reidar Conradi, Harald Rønneberg, Einar Landre, and Harald Wesenberg. The impact of test driven development on the evolution of a reusable framework of components - an industrial case study. In ICSEA '08: Proceedings of the 2008 The Third International Conference on Software Engineering Advances, pages , Washington, DC, USA, IEEE Computer Society. [62] Jaime Spacco and William Pugh. Helping students appreciate test-driven development (tdd). In OOPSLA '06: Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, pages , New York, NY, USA, ACM. [63] Daniel H. Steinberg. The eect of unit tests on entry points, coupling and cohesion in an introductory java programming course. In XP Universe Conference'01, [64] Matthew Thornton, Stephen H. Edwards, Roy P. Tan, and Manuel A. Pérez-Qui Supporting student-written tests of gui programs. In SIGCSE '08: Proceedings of the 39th SIGCSE technical symposium on Computer science education, pages , New York, NY, USA, ACM. [65] Andy Tinkham and Cem Kaner. Experiences teaching a course in programmer testing. In ADC '05: Proceedings of the Agile Development Conference, pages , Washington, DC, USA, IEEE Computer Society. [66] J.H. Vu, N. Frojd, C. Shenkel-Therolf, and D.S. Janzen. Evaluating test-driven development in an industry-sponsored capstone project. In Information Techno- 34

40 logy: New Generations, ITNG '09. Sixth International Conference on, pages , april [67] C.A. Wellington. Managing a project course using extreme programming. In Frontiers in Education, FIE '05. Proceedings 35th Annual Conference, pages T3G1, Oct [68] Carol A. Wellington, Thomas H. Briggs, and C. Dudley Girard. Experiences using automated 4ests and 4est driven development in computer 9cience i. In AGILE '07: Proceedings of the AGILE 2007, pages , Washington, DC, USA, IEEE Computer Society. [69] L. Williams, E.M. Maximilien, and M. Vouk. Test-driven development as a defectreduction practice. Software Reliability Engineering, ISSRE th International Symposium on, pages 3445, Nov [70] Shaochun Xu and Tong Li. Evaluation of test-driven development: An academic case study. In Software Engineering Research, Management and Applications 2009, volume 253 of Studies in Computational Intelligence, pages , [71] R.A. Ynchausti. Integrating unit testing into a software development team?s process. In Intl. Conf. extreme Programming and Flexible Processes in Software Engineering, pages 7983, [72] Lei Zhang, Shunsuke Akifuji, Katsumi Kawai, and Tsuyoshi Morioka. Comparison between test driven development and waterfall development in a small-scale project. In Extreme Programming and Agile Processes in Software Engineering, volume 4044 of LNCS, pages ,

41 A Kysely opiskelijoille 1. Kuinka paljon sinulla on IT-alan työkokemusta? (Tätä ei kysytty ensimmäisellä toteutuskerralla.) vuotta ja kuukautta 2. Olitko kokeillut testipohjaista kehittämistä aiemmin? 1 Kyllä (kuvaile myös, kuinka paljon kokemusta on) 2 En Jos vastasit kyllä, missä yhteydessä olet sitä käyttänyt Valitse vaihtoehto. 1 Työssä 2 Toisella kurssilla 3 Muu, kerro mikä 3. Tuntuiko testipohjainen kehittäminen vaikealta? Valitse asteikosta 1-5. (1 = ei lainkaan, 5 = erittäin vaikealta)? 4. Kuinka kurinalaisesti toteutitte harjoitustyöparina (tai toteutit yksin työskennellessäsi) testipohjaista ohjelmistokehitystä? Valitse parhaiten sopiva vastaus. 1 Erittäin kurinalaisesti, aina kirjoitettiin ensin testi ja sitten vasta koodi. 2 Muutaman kerran lipsuttiin 3 Lipsuttiin silloin tällöin 4 Lipsuttiin usein 5 Kirjoitettiin ensin koodi ja sitten vasta testit 5. Jos sinulla oli pari, kuinka organisoitte työn? Valitse parhaiten sopiva vastaus. 1 Tehtiin koodia yhdessä samalla koneella 2 Jaettiin työ ja koottiin lopussa tulokset yhteen 3 Tehtiin osittain kumpaakin edellisistä 4 Vain toinen teki työn 6. Haluaisitko tämän kokemuksen jälkeen toteuttaa testipohjaista kehitystä työelämässä? Perustele vastauksesi. 7. Mikä harjoituksen tekemisessä oli vaikeinta? Mainitse ainakin kaksi asiaa ja perustele ne ymmärrettävästi. 36

42 2010 Seventh International Conference on the Quality of Information and Communications Technology Test-Driven Development - Still a Promising Approach? Sami Kollanus Faculty of Information Technology University of Jyväskylä Jyväskylä, Finland sami.kollanus@jyu.fi Abstract Test-Driven Development (TDD) has been regarded as a useful practice during the last decade as well in industry as in academia. It has been suggested to have several benefits in software development process. This paper is focused on the reported empirical research on TDD. A systematic literature review was conducted in order to analyze the current empirical evidence. Based on the review data, TDD may improve external code quality, but it also leads to increase in development time. However, there are a lot of contradictory results and it raises a question about the actual factors behind them. More systematic research, specifically controlled experiments and well reported case studies, is needed in order to better understand TDD. I. INTRODUCTION Test-first programming has been practiced at least from the 1960s [1]. However, these ideas have become well known in the software engineering community just during the last decade in the form of Test-Driven development (TDD). TDD was first popularized as one of the key practices in extreme Programming (XP) [2], but later it has also been discussed as a stand alone process [3][4]. The basic idea of TDD is simply to write tests before code in small iterations. First, developer writes a test case that is just enough to define the next functionality. The next step is to write code that is just enough to pass the test. Finally, the code is refactored, if needed. These steps are iterated in short cycles through the whole development process. Originally TDD was introduced as a development, not a testing, method. [3][4] In several studies, TDD has been suggested to provide a variety of different benefits, such as better productivity [5][6], better quality [7][8] and high test coverage [9][10]. Some studies also suggest that TDD may improve program design [11][12] and developers confidence on their code[7][11]. However, the current empirical evidence on TDD includes many contradictory results. This study is focused on the reported experiences on TDD. A systematic literature review was conducted in order to analyze the current empirical evidence. The nmain research question for the survey was: Is there empirical evidence on the suggested benefits of TDD?. The paper includes the main results of the survey, which are used in making some suggestions for the future research. The following section 2 will introduce how the literature review was conducted. The main results are presented in section 3 and finally, sections 4 and 5 include discussion and the main conclusions. II. LITERATURE SURVEY The purpose of the literature survey was to evaluate the current evidence on TDD. A systematic literature review was conducted in order to do this. The review process was designed using the well known guidelines for systematic literature review [13]. In the beginning, a small preliminary review was conducted in order to identify the typical terminology and the potential sources of TDD related research. The following subsections will describe how the actual review process (search, data extraction, analysis) was conducted. A. Sources The search was limited to scientific journals, magazines and conference proceedings. The first step was to list the potential journals and magazines that could possibly publish TDD. The list was created based on the preliminary review and author s earlier experience on software engineering research. The final list included 15 publication series focused on software engineering. The electronic archives of each journal were searched by using their own search engines. The next step was to find the relevant conference proceedings. Three important electronic databases (IEEE Explorer, ACM Digital library, Springer database) were included in the search. They were selected, because 1) they cover most of the relevant conference proceedings, 2) most of the publications are peer reviewed, and 3) they were easy to access. Finally, the data extraction phase revealed several referred studies that were not found in the original search. All possibly relevant new references were included in the initial review data. B. Search procedure Two searches were done for each of the sources using different keywords: TDD and test-driven development. The search results were manually checked based on tittles and abstracts, because the search results had nothing to do with TDD. At this stage, all the potentially relevant articles that are related to TDD were listed. The papers including empirical evidence were identified later /10 $ IEEE DOI /QUATIC

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen. Luento 11, 7.12. Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,

Lisätiedot

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op)

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op) 581361 Ohjelmistoprosessit ja ohjelmistojen laatu (4op) Ohjelmistojärjestelmien syventävien opintojen kurssi Myös ohjelmistotekniikan profiilin pakollinen kurssi eli ohjelmistotekniikka-aiheisen gradun

Lisätiedot

Tutkittua tietoa. Tutkittua tietoa 1

Tutkittua tietoa. Tutkittua tietoa 1 Tutkittua tietoa T. Dybå, T. Dingsøyr: Empirical Studies of Agile Software Development : A Systematic Review. Information and Software Technology 50, 2008, 833-859. J.E. Hannay, T. Dybå, E. Arisholm, D.I.K.

Lisätiedot

SEPA päiväkirja. BetaTeam. Juho Mäkinen, 57796V, Jari Leppä, 42710V, Versio Pvm Tekijä Kuvaus

SEPA päiväkirja. BetaTeam. Juho Mäkinen, 57796V, Jari Leppä, 42710V, Versio Pvm Tekijä Kuvaus SEPA päiväkirja BetaTeam Juho Mäkinen, 57796V, jvmakine@cc.hut.fi Jari Leppä, 42710V, jleppa@cc.hut.fi Versio Pvm Tekijä Kuvaus 0.1 10.11.2005 Juho Mäkinen Johdanto 1. 0.2 11.11.2005 J.Mäkinen, Käytäntöön

Lisätiedot

Tausta tutkimukselle

Tausta tutkimukselle Näin on aina tehty Näyttöön perustuvan toiminnan nykytilanne hoitotyöntekijöiden toiminnassa Vaasan keskussairaalassa Eeva Pohjanniemi ja Kirsi Vaaranmaa 1 Tausta tutkimukselle Suomessa on aktiivisesti

Lisätiedot

Test-Driven Development

Test-Driven Development Test-Driven Development Ohjelmistotuotanto syksy 2006 Jyväskylän yliopisto Test-Driven Development Testilähtöinen ohjelmistojen kehitystapa. Tehdään ensin testi, sitten vasta koodi. Tarkoituksena ei ole

Lisätiedot

Automaattinen yksikkötestaus

Automaattinen yksikkötestaus Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Automaattinen yksikkötestaus Ryhmä Rajoitteiset Versio Päivämäärä Tekijä

Lisätiedot

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen Tarjolla tänää: Ohjelmiston toteutuksesta JOT2007 CRC-kortit Testilähtöinen kehittäminen Uudelleenrakentaminen Voisiko ohjelmointi olla sittenkin suunnittelua? Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit

Lisätiedot

Test-Driven Development

Test-Driven Development Test-Driven Development Syksy 2006 Jyväskylän yliopisto Test-Driven Development Testilähtöinen ohjelmistojen kehitystapa. Tehdään ensin testi, sitten vasta koodi. Tarkoituksena ei ole keksiä kaikkia mahdollisia

Lisätiedot

Harjoittelu omassa opetustyössä ammatillisen koulutuksen parissa

Harjoittelu omassa opetustyössä ammatillisen koulutuksen parissa Harjoittelu omassa opetustyössä ammatillisen koulutuksen parissa Ohjeet opiskelijalle Opiskelija harjoittelee omassa opetustyössään ammatillisessa koulutuksessa. Opetusharjoittelussa keskeisenä tavoitteena

Lisätiedot

Tietotekniikan opintojen aktivointi

Tietotekniikan opintojen aktivointi Tietotekniikan opintojen aktivointi 8.6.2011 Auri Kaihlavirta Päivän agenda HOPSien käsittelyä Päättötyön kirjoittamisen keinoja Opponoinnista Kirjoitustehtävä 1 1 Ryhmätehtävä: HOPSin jälkeen Kirjaa paperille

Lisätiedot

VERSIONHALLINTA. PARIOHJELMOINTI Lari Ahti, 62634M Antti Kauppinen, 58390D

VERSIONHALLINTA. PARIOHJELMOINTI Lari Ahti, 62634M Antti Kauppinen, 58390D VERSIONHALLINTA PARIOHJELMOINTI Lari Ahti, 62634M Antti Kauppinen, 58390D Versio Päivä Tekijä Kuvaus 0.1 26.10.2005 Kaarlo Lahtela Ensimmäinen versio 0.2 10.12.2006 Lauri Kiiski Suomennettu 3 (8 ) SISÄLLYS

Lisätiedot

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3 AgilElephant SEPA Diary Petri Kalsi 55347A Heikki Salminen 51137K Tekijä: Petri Kalsi Omistaja: ElectricSeven Aihe: PK&HS Sivu 1 / 7 Dokumenttihistoria Revisiohistoria Revision päiväys: 29.11.2004 Seuraavan

Lisätiedot

MONOGRAFIAN KIRJOITTAMINEN. Pertti Alasuutari

MONOGRAFIAN KIRJOITTAMINEN. Pertti Alasuutari MONOGRAFIAN KIRJOITTAMINEN Pertti Alasuutari Lyhyt kuvaus Monografia koostuu kolmesta pääosasta: 1. Johdantoluku 2. Sisältöluvut 3. Päätäntäluku Lyhyt kuvaus Yksittäinen luku koostuu kolmesta osasta

Lisätiedot

Väitöskirjan kirjoittaminen ja viimeistely

Väitöskirjan kirjoittaminen ja viimeistely 1 Väitöskirjan kirjoittaminen ja viimeistely Pekka Kohti tohtorin tutkintoa 19.4.2017 UniOGS 2 Ensimmäinen versio väitöskirjasta Käytä Acta -kirjoituspohjaa Aloita väitöskirjan / yhteenvedon tekeminen

Lisätiedot

Tanja Saarenpää Pro gradu-tutkielma Lapin yliopisto, sosiaalityön laitos Syksy 2012

Tanja Saarenpää Pro gradu-tutkielma Lapin yliopisto, sosiaalityön laitos Syksy 2012 Se on vähän niin kuin pallo, johon jokaisella on oma kosketuspinta, vaikka se on se sama pallo Sosiaalityön, varhaiskasvatuksen ja perheen kokemuksia päiväkodissa tapahtuvasta moniammatillisesta yhteistyöstä

Lisätiedot

Hypermedian jatko-opintoseminaari

Hypermedian jatko-opintoseminaari Hypermedian jatko-opintoseminaari Tutkimusmenetelmät, kun tutkimuskohteena on ihminen ja tekniikka I, 1-4 ov Kirsi Silius 26.11.2004 Seminaarin aikataulu pe 26.11.04 Kirsi Silius: Seminaarin yleisesittely,

Lisätiedot

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi Testilähtöinen ohjelmistokehitys Kevät 2008 Jonne Itkonen Jyväskylän yliopisto Testilähtöinen ohjelmistokehitys Test-Driven Development, TDD Tehdään ensin testi, sitten vasta koodi. TDD Testilähtöinen

Lisätiedot

AHOT- käytäntöjen jalkauttaminen ja jalkautuminen Savoniaammattikorkeakoulussa

AHOT- käytäntöjen jalkauttaminen ja jalkautuminen Savoniaammattikorkeakoulussa AHOT- käytäntöjen jalkauttaminen ja jalkautuminen Savoniaammattikorkeakoulussa Anna-Leena Ruotsalainen AHOT:lla eli aiemmin hankitun osaamisen tunnistamisella ja tunnustamisella tarkoitetaan opiskelijan

Lisätiedot

Aseta kaupunginosanne identiteetin kannalta annetut vaihtoehdot tärkeysjärjestykseen 26 % 0 % 10 % 20 % 30 % 40 % 50 % 60 %

Aseta kaupunginosanne identiteetin kannalta annetut vaihtoehdot tärkeysjärjestykseen 26 % 0 % 10 % 20 % 30 % 40 % 50 % 60 % Kaupunginosakyselyn vastaukset: Kyselyjä lähetettiin 74 kpl ja vastauksia saatiin 44 kpl. Kyselyn vastausprosentiksi muodostui 59%. Kyselyt lähetettiin Tampereen asukas- ja omakotiyhdistysten puheenjohtajille.

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

Eläinlääketieteen lisensiaatin tutkielma Seminaarityöskentelyohjeet

Eläinlääketieteen lisensiaatin tutkielma Seminaarityöskentelyohjeet Eläinlääketieteen lisensiaatin tutkielma Seminaarityöskentelyohjeet Eläinlääketieteellinen tiedekunta Helsingin yliopisto 2017 1 Yleistä Eläinlääketieteen lisensiaatin tutkielman seminaarityöskentelyyn

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

KARTTAPAIKANNUKSEN AVULLA TEHTY KYSELYTUTKIMUS TOIMISTOTILOJEN ÄÄNIYMPÄRISTÖSTÄ. Tiivistelmä

KARTTAPAIKANNUKSEN AVULLA TEHTY KYSELYTUTKIMUS TOIMISTOTILOJEN ÄÄNIYMPÄRISTÖSTÄ. Tiivistelmä KARTTAPAIKANNUKSEN AVULLA TEHTY KYSELYTUTKIMUS TOIMISTOTILOJEN ÄÄNIYMPÄRISTÖSTÄ Arto Rauta 1, Maarit Kahila 2 1 Ecophon Strömberginkuja 2 00380 Helsinki arto.rauta@saint-gobain.com 2 Mapita Oy Kanavaranta

Lisätiedot

Jyväskylän yliopiston kauppakorkeakoulu Syventävien opintojen tutkielman arviointi

Jyväskylän yliopiston kauppakorkeakoulu Syventävien opintojen tutkielman arviointi Jyväskylän yliopiston kauppakorkeakoulu Syventävien opintojen tutkielman arviointi Syventävien opintojen tutkielmat arvioidaan 5-portaisella asteikolla arvosanoilla (1) välttävä, (2) tyydyttävä, (3) hyvä,

Lisätiedot

SP 11: METODOLOGIAN TYÖPAJA Kevät Yliopistonlehtori, dosentti Inga Jasinskaja-Lahti

SP 11: METODOLOGIAN TYÖPAJA Kevät Yliopistonlehtori, dosentti Inga Jasinskaja-Lahti SP 11: METODOLOGIAN TYÖPAJA Kevät 2010 Yliopistonlehtori, dosentti Inga Jasinskaja-Lahti Työpajan tavoitteet 1. Johdattaa sosiaalipsykologian metodologisiin peruskysymyksiin, niiden pohtimiseen ja niistä

Lisätiedot

Tietokoneavusteinen arviointi kurssilla Diskreetin matematiikan perusteet. Helle Majander Aalto-yliopiston teknillinen korkeakoulu

Tietokoneavusteinen arviointi kurssilla Diskreetin matematiikan perusteet. Helle Majander Aalto-yliopiston teknillinen korkeakoulu Tietokoneavusteinen arviointi kurssilla Diskreetin matematiikan perusteet Helle Majander Aalto-yliopiston teknillinen korkeakoulu Oppimisen arviointi matematiikan kursseilla Arvioinnin tulisi olla luotettavaa

Lisätiedot

LÄHI- JA VERKKO- OPETUKSEEN OSALLISTUNEIDEN KOKEMUKSIA OPETUKSESTA

LÄHI- JA VERKKO- OPETUKSEEN OSALLISTUNEIDEN KOKEMUKSIA OPETUKSESTA LÄHI- JA VERKKO- OPETUKSEEN OSALLISTUNEIDEN KOKEMUKSIA OPETUKSESTA Tarja Tuononen, KM, tohtorikoulutettava Yliopistopedagogiikan keskus Jenni Krapu, Yliopisto-opettaja, Avoin yliopisto Risto Uro, Yliopistonlehtori,

Lisätiedot

UCOT-Sovellusprojekti. Testausraportti

UCOT-Sovellusprojekti. Testausraportti UCOT-Sovellusprojekti Testausraportti Ilari Liukko Tuomo Pieniluoma Vesa Pikki Panu Suominen Versio: 0.02 Julkinen 11. lokakuuta 2006 Jyväskylän yliopisto Tietotekniikan laitos Jyväskylä Hyväksyjä Päivämäärä

Lisätiedot

Tehostettu kisällioppiminen tietojenkäsittelytieteen ja matematiikan opetuksessa yliopistossa Thomas Vikberg

Tehostettu kisällioppiminen tietojenkäsittelytieteen ja matematiikan opetuksessa yliopistossa Thomas Vikberg Tehostettu kisällioppiminen tietojenkäsittelytieteen ja matematiikan opetuksessa yliopistossa Thomas Vikberg Matematiikan ja tilastotieteen laitos Tietojenkäsittelytieteen laitos Kisällioppiminen = oppipoikamestari

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009

Tähtitieteen käytännön menetelmiä Kevät 2009 Tähtitieteen käytännön menetelmiä Kevät 2009 2009-01-12 Yleistä Luennot Luennoija hannu.p.parviainen@helsinki.fi Aikataulu Observatoriolla Maanantaisin 10.00-12.00 Ohjattua harjoittelua maanantaisin 9.00-10.00

Lisätiedot

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus: Dokumentaatio, osa 1 Tehtävämäärittely Kirjoitetaan lyhyt kuvaus toteutettavasta ohjelmasta. Kuvaus tarkentuu myöhemmin, aluksi dokumentoidaan vain ideat, joiden pohjalta työtä lähdetään tekemään. Kuvaus

Lisätiedot

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } } Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin testattaviin toiminnallisuuksiin, kuten olion tarjoamiin metodeihin.

Lisätiedot

Raportti Tapahtumia kaikille! -oppaasta tehdystä kyselystä

Raportti Tapahtumia kaikille! -oppaasta tehdystä kyselystä Raportti Tapahtumia kaikille! -oppaasta tehdystä kyselystä Kulttuuria kaikille -palvelu 4.1.2017 2 / 6 Johdanto Tapahtumia kaikille! Opas saavutettavan kulttuurifestivaalin järjestämiseen on Kulttuuria

Lisätiedot

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,

Lisätiedot

TUKIMATERIAALI: Arvosanan kahdeksan alle jäävä osaaminen

TUKIMATERIAALI: Arvosanan kahdeksan alle jäävä osaaminen 1 FYSIIKKA Fysiikan päättöarvioinnin kriteerit arvosanalle 8 ja niitä täydentävä tukimateriaali Opetuksen tavoite Merkitys, arvot ja asenteet T1 kannustaa ja innostaa oppilasta fysiikan opiskeluun T2 ohjata

Lisätiedot

Virheraportoijien virhemäärien jakaumat virhetietokannassa

Virheraportoijien virhemäärien jakaumat virhetietokannassa Virheraportoijien virhemäärien jakaumat virhetietokannassa (Valmiin työn esittely) 13.9.2010 Ohjaaja: TkT Mika Mäntylä Valvoja: prof. Harri Ehtamo Yleistä ohjelmistoissa virheitä, jotka estävät ohjelmistojen

Lisätiedot

Flippausta 3 korkeakoulun opiskelijoille

Flippausta 3 korkeakoulun opiskelijoille Pedaforum 2018 16.8.2018 Erkki Pesonen, yliopistonlehtori, Erkko Sointu tutkijatohtori Flippausta 3 korkeakoulun opiskelijoille UEF // University of Eastern Finland What is coming? Opintojakson sisältö

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

Käytettävyyslaatumallin rakentaminen web-sivustolle. Oulun yliopisto tietojenkäsittelytieteiden laitos pro gradu -suunnitelma Timo Laapotti 28.9.

Käytettävyyslaatumallin rakentaminen web-sivustolle. Oulun yliopisto tietojenkäsittelytieteiden laitos pro gradu -suunnitelma Timo Laapotti 28.9. Käytettävyyslaatumallin rakentaminen web-sivustolle Tapaus kirjoittajan ABC-kortti Oulun yliopisto tietojenkäsittelytieteiden laitos pro gradu -suunnitelma Timo Laapotti 28.9.2005 Kirjoittajan ABC-kortti

Lisätiedot

Pro gradu - tutkielma. Kasvatustieteiden tiedekunta, Oulun yliopisto KT HANNU Heikkinen

Pro gradu - tutkielma. Kasvatustieteiden tiedekunta, Oulun yliopisto KT HANNU Heikkinen Pro gradu - tutkielma Kasvatustieteiden tiedekunta, Oulun yliopisto KT HANNU Heikkinen Usein kysyttyjä kysymyksiä infon teemat Pro gradu-tutkielman lähtökohdat Kandista graduun vai uusi tutkielma? Yksin

Lisätiedot

Työkalut ohjelmistokehityksen tukena

Työkalut ohjelmistokehityksen tukena 1 Työkalut ohjelmistokehityksen tukena Johdanto 2 Työkaluja eli ohjelmistotyötä tukevia ohjelmistoja käytetään ohjelmistoalan yrityksissä nykypäivänä paljon. Työkalut auttavat ohjelmistoalan ihmisiä suunnittelemaan

Lisätiedot

Yleistä kanditutkielmista

Yleistä kanditutkielmista Aineenopettajankoulutuksen opinnäytteet Leena Hiltunen 21.1.2009 Yleistä kanditutkielmista Tyypillisesti teoreettisia kirjallisuusanalyysejä, joissa luodaan taustaa ja viitekehystä tietylle aiheelle Pääsääntöisesti

Lisätiedot

Testaaminen ohjelmiston kehitysprosessin aikana

Testaaminen ohjelmiston kehitysprosessin aikana Testaaminen ohjelmiston kehitysprosessin aikana 04.02.2004 http://cs.joensuu.fi/tsoft/ Sisällys 1. Johdanto 2. Yksikkö- ja integrointitestaus 3. Järjestelmätestaus 4. Hyväksymistestaus http://cs.joensuu.fi/tsoft/

Lisätiedot

Cover letter and responses to reviewers

Cover letter and responses to reviewers Cover letter and responses to reviewers David E. Laaksonen, MD, PhD, MPH Department of Medicine Kuopio University Hospital Kuopio, Finland Luennon sisältö Peer review Vinkit vastineiden kirjoittamista

Lisätiedot

Aikuisopiskelijan viikko - Viitekehys alueellisten verkostojen yhteistyöhön

Aikuisopiskelijan viikko - Viitekehys alueellisten verkostojen yhteistyöhön Aikuisopiskelijan viikko - Viitekehys alueellisten verkostojen yhteistyöhön Aikuisopiskelijan viikko tarjoaa mainion tilaisuuden toteuttaa tapahtumia yhteistyössä oman alueen eri organisaatioiden kanssa.

Lisätiedot

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari Alkuraportti Avoimen lähdekoodin käyttö WWW-sovelluspalvelujen toteutuksessa Lappeenranta, 30.3.2008,

Lisätiedot

Taidekasvatuksen tutkimusmenetelmät

Taidekasvatuksen tutkimusmenetelmät Taidekasvatuksen tutkimusmenetelmät Tiina Pusa 12.9.2015 Aalto-yliopisto Taiteiden ja suunnittelun korkeakoulu Kurssiohjelma 12.9. Orientaatio. Kurssin sisällöt, tavoitteet ja tehtävät. 19.9. Arkistotutkimuksen

Lisätiedot

Kliininen arviointi ja kliininen tieto mikä riittää?

Kliininen arviointi ja kliininen tieto mikä riittää? Kliininen arviointi ja kliininen tieto mikä riittää? Riittävä tutkimuksen otoskoko ja tulos Timo Partonen LT, psykiatrian dosentti, Helsingin yliopisto Ylilääkäri, Terveyden ja hyvinvoinnin laitos Tutkimuksen

Lisätiedot

Kenelle tutkimusetiikan koulutus kuuluu? Heidi Hyytinen ja Iina Kohonen TENK 29.10.2014

Kenelle tutkimusetiikan koulutus kuuluu? Heidi Hyytinen ja Iina Kohonen TENK 29.10.2014 Kenelle tutkimusetiikan koulutus kuuluu? Heidi Hyytinen ja Iina Kohonen TENK 29.10.2014 Johdannoksi Yliopisto-opintojen tavoitteena on tukea opiskelijoiden oman alan akateemisen asiantuntijuuden rakentumista

Lisätiedot

TYÖELÄMÄTAITOJEN OPPIMISTA YLIOPISTOSSA TUTKIMUSTULOKSIA JA KEHITTÄMISTARPEITA

TYÖELÄMÄTAITOJEN OPPIMISTA YLIOPISTOSSA TUTKIMUSTULOKSIA JA KEHITTÄMISTARPEITA TYÖELÄMÄTAITOJEN OPPIMISTA YLIOPISTOSSA TUTKIMUSTULOKSIA JA KEHITTÄMISTARPEITA Tarja Tuononen ja Auli Toom Yliopistopedagogiikan keskus (HYPE) Tuononen & Toom 22/03/2018 1 JOHDANTO Erilaisten työelämätaitojen,

Lisätiedot

Pro gradu -tutkielmien arvostelu maantieteessä

Pro gradu -tutkielmien arvostelu maantieteessä Pro gradu -tutkielmien arvostelu maantieteessä Tutkielman arvostelussa on käytössä viisiportainen asteikko (1-5): o Ykkönen (1) merkitsee, että työ on hyväksyttävissä, mutta siinä on huomattavia puutteita.

Lisätiedot

Kysely seksuaalirikosten uhrien läheisille 2018

Kysely seksuaalirikosten uhrien läheisille 2018 Kysely seksuaalirikosten uhrien läheisille 2018 Vastanneita yhteensä 27 Ikäsi Kyselyn osallistuneita oli kaikissa ikäluokissa. 35% 30% 30,00% 25% 22,00% 20% 15% 10% 15,00% 11,00% 11,00% 11,00% 5% 0% -20

Lisätiedot

SELVITYS PRO GRADUJEN KÄYTÖSTÄ TAIDEKIRJASTOSSA

SELVITYS PRO GRADUJEN KÄYTÖSTÄ TAIDEKIRJASTOSSA SELVITYS PRO GRADUJEN KÄYTÖSTÄ TAIDEKIRJASTOSSA Tapani Takalo Lapin korkeakoulukirjasto, yliopisto, taide 17.11.2011 1. Johdanto Lapin yliopiston taidekirjastossa on selvitetty taidekirjaston kokoelmiin

Lisätiedot

Tutkielman rakenne. Tellervo Korhonen. Tutki Hjelt-instituutti Kansanterveystieteen osasto Helsingin yliopisto

Tutkielman rakenne. Tellervo Korhonen. Tutki Hjelt-instituutti Kansanterveystieteen osasto Helsingin yliopisto Tutkielman rakenne Hjelt-instituutti Kansanterveystieteen osasto Helsingin yliopisto Tutki 2 30.10.2013 1 Periaatteet tieteellisessä tekstissä Tieteellä omat traditionsa Esitystavassa Rakenteessa Perusajatus

Lisätiedot

Kandiaikataulu ja -ohjeita

Kandiaikataulu ja -ohjeita Kandiaikataulu ja -ohjeita Kandin tavoitteet Opinto-opas LuK-tutkielma: kirjallinen työ, osoittaa perehtyneisyyttä tutkielman kohteena olevaan aihepiiriin, kykyä tieteelliseen kirjoittamiseen ja tieteellisten

Lisätiedot

Lukio ja sähköiset ylioppilaskirjoitukset Tieto- ja viestintätekniikka selvitys 2014

Lukio ja sähköiset ylioppilaskirjoitukset Tieto- ja viestintätekniikka selvitys 2014 Lukio ja sähköiset ylioppilaskirjoitukset Tieto- ja viestintätekniikka selvitys 2014 Kurt Torsell Kartoituksen toteutus Suomen Kuntaliitto toteutti syksyllä 2013 ensimmäistä kertaa kouluille suunnatun

Lisätiedot

PÄIVI PORTAANKORVA-KOIVISTO

PÄIVI PORTAANKORVA-KOIVISTO 7.4.2013 PÄIVI PORTAANKORVA-KOIVISTO HARRY SILFVERBERG: Matematiikka kouluaineena yläkoulun oppilaiden tekemien oppiainevertailujen paljastamia matematiikkakäsityksiä Juho Oikarinen 7.4.2013 PÄIVI PORTAANKORVA-KOIVISTO

Lisätiedot

Please note! This is a self-archived version of the original article. Huom! Tämä on rinnakkaistallenne.

Please note! This is a self-archived version of the original article. Huom! Tämä on rinnakkaistallenne. Please note! This is a self-archived version of the original article. Huom! Tämä on rinnakkaistallenne. To cite this Article / Käytä viittauksessa alkuperäistä lähdettä: Lehto, T. 2017. Korkeakoulujen

Lisätiedot

YHTEENVETO VERKKO-OPETUKSEN PERUSTEET (VOP) -KOULUTUKSESTA syksyllä 2003 SAADUSTA PALAUTTEESTA

YHTEENVETO VERKKO-OPETUKSEN PERUSTEET (VOP) -KOULUTUKSESTA syksyllä 2003 SAADUSTA PALAUTTEESTA 1 Itä-Suomen virtuaaliyliopisto YHTEENVETO VERKKO-OPETUKSEN PERUSTEET (VOP) -KOULUTUKSESTA syksyllä 23 SAADUSTA PALAUTTEESTA Henkilöstökoulutushankkeessa järjestettiin Verkko-opetuksen perusteet (VOP)

Lisätiedot

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti Kivireki Helsinki 17.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anu Kontio Ilmari

Lisätiedot

TUKIMATERIAALI: Arvosanan kahdeksan alle jäävä osaaminen

TUKIMATERIAALI: Arvosanan kahdeksan alle jäävä osaaminen KEMIA Kemian päättöarvioinnin kriteerit arvosanalle 8 ja niitä täydentävä tukimateriaali Opetuksen tavoite Merkitys, arvot ja asenteet T1 kannustaa ja innostaa oppilasta kemian opiskeluun T2 ohjata ja

Lisätiedot

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää

Lisätiedot

Vaihtoehto A. Harjoittelu Oulun seudun harjoitteluverkostossa Vaihtoehto B. Harjoittelu Rovaniemen seudun harjoitteluverkostossa

Vaihtoehto A. Harjoittelu Oulun seudun harjoitteluverkostossa Vaihtoehto B. Harjoittelu Rovaniemen seudun harjoitteluverkostossa Vaihtoehto A. Harjoittelu Oulun seudun harjoitteluverkostossa Vaihtoehto B. Harjoittelu Rovaniemen seudun harjoitteluverkostossa Ohjeet opiskelijalle Vaihtoehdoissa A ja B opiskelija harjoittelee joko

Lisätiedot

Jyväskylän yliopiston Koulutuksen tutkimuslaitos, IEA sekä opetus- ja kulttuuriministeriö

Jyväskylän yliopiston Koulutuksen tutkimuslaitos, IEA sekä opetus- ja kulttuuriministeriö Jyväskylän yliopiston Koulutuksen tutkimuslaitos, IEA sekä opetus- ja kulttuuriministeriö 2018 Tieto- ja viestintäteknologia sekä monilukutaito ovat merkittävässä asemassa opiskelussa, työelämässä kuin

Lisätiedot

PSY181 Psykologisen tutkimuksen perusteet, kirjallinen harjoitustyö ja kirjatentti

PSY181 Psykologisen tutkimuksen perusteet, kirjallinen harjoitustyö ja kirjatentti PSY181 Psykologisen tutkimuksen perusteet, kirjallinen harjoitustyö ja kirjatentti Harjoitustyön ohje Tehtävänäsi on laatia tutkimussuunnitelma. Itse tutkimusta ei toteuteta, mutta suunnitelman tulisi

Lisätiedot

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausraportti Orava Helsinki 5.5.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Juhani Bergström Peter

Lisätiedot

Kandidaatintutkielma, ryhmän ohjaus Teemu Kerola. Referaatti

Kandidaatintutkielma, ryhmän ohjaus Teemu Kerola. Referaatti Teemu Kerola Kandidaatintutkielma Ryhmä 3, kevät 2013 (Tieteellisen kirjoittamisen kurssi, tiki) Referaatti, aine, tutkielma Kypsyysnäyte Esitelmä Arvostelu Kirjoittaminen Aiheiden valinta 1 Referaatti

Lisätiedot

Yleistä OPE-linjan kanditutkielmista

Yleistä OPE-linjan kanditutkielmista Aineenopettajankoulutuksen opinnäytteet Leena Hiltunen 10.9.2009 Yleistä OPE-linjan kanditutkielmista Tyypillisesti teoreettisia kirjallisuusanalyysejä, joissa luodaan taustaa ja viitekehystä tietylle

Lisätiedot

Tietotekniikan kandidaattiseminaari

Tietotekniikan kandidaattiseminaari Tietotekniikan kandidaattiseminaari Luento 1 14.9.2011 1 Luennon sisältö Seminaarin tavoitteet Seminaarin suoritus (tehtävät) Kandidaatintutkielman aiheen valinta Seminaarin aikataulu 2 2011 Timo Männikkö

Lisätiedot

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS Ti Kandidaatintyö ja seminaari

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS Ti Kandidaatintyö ja seminaari LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS Ti5004000 - Kandidaatintyö ja seminaari Alkuraportti Avoimen lähdekoodin käyttö WWW-sovelluspalvelujen toteutuksessa Lappeenranta, 4.6.2007,

Lisätiedot

T Käyttäjäkeskeisen tuotekehityksen harjoitustyö kevät 2005

T Käyttäjäkeskeisen tuotekehityksen harjoitustyö kevät 2005 T-121.110 Käyttäjäkeskeisen tuotekehityksen harjoitustyö kevät 2005 Kurssin tavoitteet Muodostaa näkemys käyttäjäkeskeisestä tuotesuunnittelusta Kasvattaa ymmärrystä prosessin vaiheista Tutustua käyttäjäkeskeisen

Lisätiedot

LASKENTATOIMEN PRO GRADU INFO

LASKENTATOIMEN PRO GRADU INFO LASKENTATOIMEN PRO GRADU INFO Sisältö 1. Tutkielmatyöskentelyn käytännönjärjestelyt Hyödyllisiä nettisivuja ja ohjeita Ohjaajat ja tutkielmaryhmät Kirjoitusohjeet 2. Miten teen gradun? Aiheen etsiminen

Lisätiedot

Kandityön kirjoittaminen. Opinnäyteseminaari

Kandityön kirjoittaminen. Opinnäyteseminaari Kandityön kirjoittaminen Opinnäyteseminaari Lue ja kirjoita Ajatukset eivät kasva tyhjästä. Ruoki niitä lukemalla ja kirjoittamalla lukemastasi. Älä luota muistiisi Merkitse alusta asti muistiinpanoihin

Lisätiedot

Scrum-käytännöt ja käyttäjäkokemustyö ohjelmistoalan yrityksessä. Marie-Elise Kontro

Scrum-käytännöt ja käyttäjäkokemustyö ohjelmistoalan yrityksessä. Marie-Elise Kontro Scrum-käytännöt ja käyttäjäkokemustyö ohjelmistoalan yrityksessä Marie-Elise Kontro 25.03.2015 Sisältö 1. Tutkimuskysymykset 2. Scrum ja käyttäjäkokemustyö 3. Tutkimusmenetelmä 4. Tulokset 5. Luotettavuuden

Lisätiedot

6 TARKASTELU. 6.1 Vastaukset tutkimusongelmiin

6 TARKASTELU. 6.1 Vastaukset tutkimusongelmiin 173 6 TARKASTELU Hahmottavassa lähestymistavassa (H-ryhmä) käsitteen muodostamisen lähtökohtana ovat havainnot ja kokeet, mallintavassa (M-ryhmä) käsitteet, teoriat sekä teoreettiset mallit. Edellinen

Lisätiedot

Mitä arvioitiin?

Mitä arvioitiin? Mira Huusko ja Juha Vettenniemi, Musiikkitalo 3.12.2018 Mitä arvioitiin? Miten opiskelijat kokivat oppineensa yrittäjyyttä nykyisten opintojensa aikana? Miten yrittäjyyttä opetettiin? Miten ammatillisen

Lisätiedot

Vertaisvuorovaikutus tekee tiedon eläväksi Avoimen opiskelijoiden kokemuksia hyvästä opetuksesta

Vertaisvuorovaikutus tekee tiedon eläväksi Avoimen opiskelijoiden kokemuksia hyvästä opetuksesta Vertaisvuorovaikutus tekee tiedon eläväksi Avoimen opiskelijoiden kokemuksia hyvästä opetuksesta Avoimen yliopiston pedagoginen kahvila 3.3.2010 Saara Repo Tutkimusaineisto Avoimen yliopiston opiskelijat,

Lisätiedot

Mielipidetutkimus liikennejärjestelysuunnitelmasta

Mielipidetutkimus liikennejärjestelysuunnitelmasta Mielipidetutkimus liikennejärjestelysuunnitelmasta Tanja Vaski, Anne Virtanen, Sanni Pitkänen 5/11/2012 Laurea P2P Projektimuotoista työskentelyä yritysten toimeksiannoista Vaatii itsenäistä ja omatoimista

Lisätiedot

Kandi/Gradu Tieteellinen (systemaattinen) kirjallisuuskatsaus. Perinteisen kirjallisuuskatsauksen sudenkuopat:

Kandi/Gradu Tieteellinen (systemaattinen) kirjallisuuskatsaus. Perinteisen kirjallisuuskatsauksen sudenkuopat: Kandi/Gradu 2016 Risto Hotulainen OKL/Helsingin yliopisto Risto.Hotulainen@Helsinki.fi 3.2.2016 1 Tieteellinen (systemaattinen) kirjallisuuskatsaus Perinteisen kirjallisuuskatsauksen sudenkuopat: 1. Lähteiden

Lisätiedot

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Sisäänrakennettu tietosuoja ja ohjelmistokehitys Sisäänrakennettu tietosuoja ja ohjelmistokehitys Petri Strandén 8. kesäkuuta, 2018 Agenda Ohjelmistokehitys Ohjelmistokehitys vs. konsultointi Vaatimukset Tietosuoja Tietosuoja ohjelmistokehityksessä kiteytettynä

Lisätiedot

Sulautuvan opetuksen seminaari, Helsingin yliopisto, Saara Repo, HY, Avoin yliopisto Paavo Pylkkänen, Filosofian laitos, HY ja Skövden

Sulautuvan opetuksen seminaari, Helsingin yliopisto, Saara Repo, HY, Avoin yliopisto Paavo Pylkkänen, Filosofian laitos, HY ja Skövden Sulautuvan opetuksen seminaari, Helsingin yliopisto, 8.3.2012 Saara Repo, HY, Avoin yliopisto Paavo Pylkkänen, Filosofian laitos, HY ja Skövden korkeakoulu, Ruotsi Kurssin esittely Opiskelijapalautteen

Lisätiedot

Hyvin suunniteltu on puoliksi tehty. Tutkimussuunnitelma. Miten se tehdään?

Hyvin suunniteltu on puoliksi tehty. Tutkimussuunnitelma. Miten se tehdään? Hyvin suunniteltu on puoliksi tehty Tutkimussuunnitelma Miten se tehdään? 2016 Tutkimussuunnitelma Tutkimussuunnitelma on käsikirjoitus, joka kuvaa tutkimuksen olennaisimmat asiat. Sitä seuraamalla tutkija

Lisätiedot

MTTTS2 Pro gradu -tutkielma ja seminaari. Kevät 2014, 40op Jaakko Peltonen

MTTTS2 Pro gradu -tutkielma ja seminaari. Kevät 2014, 40op Jaakko Peltonen MTTTS2 Pro gradu -tutkielma ja seminaari Kevät 2014, 40op Jaakko Peltonen Osaamistavoitteet Opiskelija osaa tehdä itsenäisesti tilastollista tutkimustyötä ja osaa raportoida sekä käyttämiensä menetelmien

Lisätiedot

Aktivoiva matematiikan opetus Aalto-yliopistossa

Aktivoiva matematiikan opetus Aalto-yliopistossa Aalto-yliopistossa Helle Majander ja Linda Havola Matematiikan ja systeemianalyysin laitos Aalto-yliopisto, Perustieteiden korkeakoulu helle.majander@aalto.fi 23. elokuuta 2011 Johdanto Esittelemme kaksi

Lisätiedot

Teoriasta käytäntöön- Ongelmalähtöinen oppiminen verkossa

Teoriasta käytäntöön- Ongelmalähtöinen oppiminen verkossa Teoriasta käytäntöön- Ongelmalähtöinen oppiminen verkossa TieVie (5 ov) 24.9.2004 Minna Pesonen, Kasvatustieteiden tiedekunta Oulun yliopisto Mistä kaikki alkoi? Idea PBL:n soveltamisesta syntyi Ongelmalähtöisen

Lisätiedot

Työhyvinvoinnin vuosikymmenet

Työhyvinvoinnin vuosikymmenet kuntoutuksen ja työhyvinvoinnin erikoislehti Työhyvinvoinnin vuosikymmenet Työyhteisö keskeisessä roolissa: SAIRAUSPOISSAOLOT PUOLITTUIVAT VERVE 1965-2015 Palvelujärjestelmän MONIMUTKAISUUS HÄMMENTÄÄ TYÖKYKYJOHTAMINEN

Lisätiedot

Pro gradu - tutkielma KASVATUSTIETEIDEN TIEDEKUNTA, OULUN YLIOPISTO KT HANNU HEIKKINEN

Pro gradu - tutkielma KASVATUSTIETEIDEN TIEDEKUNTA, OULUN YLIOPISTO KT HANNU HEIKKINEN Pro gradu - tutkielma KASVATUSTIETEIDEN TIEDEKUNTA, OULUN YLIOPISTO KT HANNU HEIKKINEN Luennon teemat Pro gradu-tutkielman lähtökohdat Osaamistavoitteet lyhyesti Pro gradu-seminaarin opintopisteiden jakautuminen

Lisätiedot

Tutkimussuunnitelmaseminaari. Kevät 2011 Inga Jasinskaja-Lahti

Tutkimussuunnitelmaseminaari. Kevät 2011 Inga Jasinskaja-Lahti Tutkimussuunnitelmaseminaari Kevät 2011 Inga Jasinskaja-Lahti Osa II Tämän kurssin tutkimussuunnitelma Tehdään gradun toteuttamista varten Kohderyhmänä kurssin osanottajat, kurssin vetäjä ja gradun ohjaaja

Lisätiedot

Yhteisöllistä oppimista edistävät ja vaikeuttavat tekijät verkkokurssilla

Yhteisöllistä oppimista edistävät ja vaikeuttavat tekijät verkkokurssilla Yhteisöllistä oppimista edistävät ja vaikeuttavat tekijät verkkokurssilla Essi Vuopala, Oulun yliopisto Oppimisen ja koulutusteknologian tutkimusyksikkö / Tutkimuksen tavoite Väitöskirjatutkimuksen tavoitteena

Lisätiedot

Kirjoittamisen vaikeus ja ihanuus erään tutkijan kokemuksia

Kirjoittamisen vaikeus ja ihanuus erään tutkijan kokemuksia TEKNOLOGIAN TUTKIMUSKESKUS VTT OY Kuvapaikka (ei kehyksiä kuviin) Kirjoittamisen vaikeus ja ihanuus erään tutkijan kokemuksia 25.1.2016 Sanni Siltanen, erikoistutkija VTT, TkT sanni.siltanen@vtt.fi Kuka

Lisätiedot

Sisällönanalyysi. Sisältö

Sisällönanalyysi. Sisältö Sisällönanalyysi Kirsi Silius 14.4.2005 Sisältö Sisällönanalyysin kohde Aineistolähtöinen sisällönanalyysi Teoriaohjaava ja teorialähtöinen sisällönanalyysi Sisällönanalyysi kirjallisuuskatsauksessa 1

Lisätiedot

Tutkielman rakenne. Tellervo Korhonen. Tutki Hjelt-instituutti Kansanterveystieteen osasto

Tutkielman rakenne. Tellervo Korhonen. Tutki Hjelt-instituutti Kansanterveystieteen osasto Tutkielman rakenne Hjelt-instituutti Kansanterveystieteen osasto Tutki 2 12.3.2014 1 Periaatteet tieteellisessä tekstissä Tieteellä omat traditionsa Esitystavassa Rakenteessa Perusajatus tieteellisen raportin

Lisätiedot

Tutkimuspäiväkirja ja tutkimussuunnitelma Eeva Jokinen

Tutkimuspäiväkirja ja tutkimussuunnitelma Eeva Jokinen Tutkimuspäiväkirja ja tutkimussuunnitelma Eeva Jokinen Kääk!??? Idea! TUTKIMUSPÄIVÄKIRJA Empiirisessä tutkimuksessa tutkimustulokset saadaan tekemällä konkreettisia havaintoja tutkimuskohteesta ja analysoimalla

Lisätiedot

Sosiaalisen median käyttö viestinnän tukena suomalaisissa yliopistokirjastoissa

Sosiaalisen median käyttö viestinnän tukena suomalaisissa yliopistokirjastoissa Sosiaalisen median käyttö viestinnän tukena suomalaisissa yliopistokirjastoissa 1.7.2011 Suomen yliopistokirjastojen neuvosto lähetti huhti-toukokuussa 2011 yliopistokirjastoille kyselyn Sosiaalisen median

Lisätiedot

Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto

Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Mäkinen / Ohjelmistojen laadun parantaminen / Ohjelmistoprosessit ja ohjelmistojen laatu

Lisätiedot

Johdatus tutkimustyöhön (811393A)

Johdatus tutkimustyöhön (811393A) Johdatus tutkimustyöhön (811393A) 5 op eli 128 h opiskelijan työtä 6. luento 4.10.2016 Tutkimuksen lähestymistapa osa 3 Kertausta... Miksi tutkimusta tehdään? Tuotetaan uutta tietoa Luodaan uusia käsitteitä

Lisätiedot

Arvo- ja terveyskasvatus

Arvo- ja terveyskasvatus Opettajien perehdytyksen merkitys Arvo- ja terveyskasvatus v15.2.2018 Toimintamallin perusta Sosiaalipedagogiikka Seikkailupedagogiikka Kokemusoppiminen Positiivinen mielenterveys (SWEMWBS) 1 Opettajien

Lisätiedot

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu TESTIRAPORTTI LiKe Liiketoiminnan kehityksen tukiprojekti Versio: 1.1 Tila: hyväksytty Päivämäärä: 13.2.2001 Tekijä:

Lisätiedot