Yksikkötestauksen käyttöönotto

Slides:



Advertisements
Samankaltaiset esitykset
KEKE-ARVIOINTIA JA TEEMOJEN ÄÄNESTYS Toukokuussa 2013 toteutetun kyselyn tulokset Kuva: Kekepuu elokuussa 2013.
Advertisements

Ajatuksia elämästä .....
Open source testaustyökalut
Testaus ja testausympäristöt
Tunne ja Älyä! ©Mervi veini 2004.
Heijastuksia elämästä
Korjaa lauseet. Alex on myyjä
Kasvaako pääni, kun opin?
Testaus ja testausympäristöt
The Blue Day Book Bradley Trevor Greive (ISBN: )
Ajatuksia elämästä..
NAO/Maija-Leena Haapa-alho
Oodin versiot, havaittujen virheiden korjaus sekä kehitysehdotusten eteneminen Laura Vuorinen Kehittämisosasto / Opiskelijarekisteri.
10 vinkkiä voimaantumiseen
Mä mistä löytäisin sen aiheen?
Mitä nuorille kuuluu? Eveliina Karjalainen.  Toisilla näyttää menevän paremmin kuin koskaan, toisilla huonommin kuin koskaan. Molemmat ryhmät tuntuvat.
Musiikin ryhmäkoulutus
Tietokannan suunnittelu
Valitse sanomapalkissa Ota muokkaus käyttöön,
Visual Studio 2008 ja sovellusten elinkaaren hallinta Matti Antila Jukka Wallasvaara Iikka Paavolainen Microsoft Oy.
Jouni Heikniemi Offbeat Solutions MODERNI WEB-KEHITYS ASP.NETILLÄ.
Kurssilla käytettävät työkalut
Käytännön ohjelmointi ja käytännön ketterä testaus
Ketterä testaus ja testauslähtöinen kehitys
Testaus Tiptopissa draft Mats Lindstedt, Mika Rintala.
Fi.opasnet.org fi.opasnet.org/fi/Ydinvoima Haluamme tietää Sinun mielipiteesi. Äänestikö kansanedustajasi oikein ydinvoimasta? Kansalaisparlamentti ydinvoimasta.
Ketterä kehitys käytännössä – TFS & Meteor
Riskien hallinta ketterissä prosesseissa ja Jämien laatuyhteenveto Team Jämät.
(Joskus puhutaan myös komponenttitestauksesta.) Pienin kokonaisuus, joka on järkevä testata erikseen. ● Perinteisesti yksittäinen aliohjelma. ● Olio-ohjelmien.
TASAPAINON RAKENTAMINEN
VARHAINEN PUUTTUMINEN
Riippuvuus tupakoinnista
T Personal SE assignment Project progress tracking and control.
Kyvykäs kehitysympäristö - työkalut kuntoon! Sami Poimala, Offbeat Solutions.
13. Hyvä ohjelmointitapa (osa 1)
Realisoituuko työvoimapula - välityömarkkinoistako ratkaisu?
Workshop: Test-first approach Pietu Pohjalainen. Testaus perinteisesti Tarkoituksena löytää virheitä ohjelmasta mutta mikä on virhe? Sijoittuu tavallisesti.
Finnish Support Center FSC Oy tietojärjestelmien asiantuntija.
(mukaellen Haikala & Mikkonen 2011, 29)
Ohjelmistotekniikka ja projektinhallinta, 4 op
Pienyritykset ja käytettävyys Ville Juhani Lehtonen, 49515B.
S ysteemianalyysin Laboratorio Teknillinen korkeakoulu Esitelmä 11 - Teemu Mutanen Optimointiopin seminaari - Syksy 2005 / 1 Lisätiedon arvo.
C 1. Testaus on ”sarja toimintoja” Itse asiassa, testaus on vuorovaikutusta, jota rytmittää ohjelmiston arviointi. Vaikka on hyödyllistä tunnistaa sarja.
Pariohjelmointi Personal SE - Vesa Oinonen. Yleistä pariohjelmoinnista kaksi ohjelmoijaa istuu saman koneen ääressä ohjelmoimassa samaa ohjelmaa Tavoitteena.
Testaus Testaus Testauksella pyritään löytämään virheitä, jotka sitten korjataan. Yksittäinen testi on yleensä ohjelman suoritus (tietyillä.
Haastatteluun valmistautuminen
T Personal SE assignment Static Methods Jaakko Nyrölä, ryhmä TeTe
T Henkilökohtainen SE harjoitus
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Palvelun käyttöliittymätasonpalvelun toteutus osaksi TIPTOP portaalia prosessin kulku EduGUI komponenttikirjasto on käytettävissä open sourcena, Eduix.
T /5115 Software Development Project I/II Experience Exchange Session: architects Jari Vanhanen Ohjelmistoliiketoiminnan ja –tuotannon laboratorio.
Ohjelmistotekniikka kevät 2003 CASE-välineet. Ohjelmistotekniikka kevät 2003 Mitä ovat CASE-välineet? Computer Aided Software Engineering Tietokoneavusteinen.
Refaktorointi ”Te olette tehneet tätä ennenkin”. Mitä on refaktorointi? (1/2) prosessi ohjelmakoodin laadun parantamiseksi ohjelman sisäisen rakenteen.
Kesätyöntekijöiden kommentteja Opasnetistä ja ydinvoimatyöstä: ”Kun tulin kesätöihin minulla oli vain jokin suuntaa antava aavistus siitä mitä meinattiin.
1.0 TE DiplomityöEsitelmä/ / JT Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olio- orientoituneeseen ohjelmointiin Jukka.
Yksikkötestaus ● Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin.
Usko ja riippuvuudet Pekka Lund Mistä puhumme, kun puhumme riippuvuuksista? Pekka Lund
Pekka Lund Usko ja riippuvuudet.
18. Testaus.
Onnistuneen tietovarastoprojektin edellytykset
kansanedustajasi oikein ydinvoimasta?
Ykkössuunnitelma ja varasuunnitelmat
Askel askeleelta ohjeita tulla ammattivalokuvaaja
Kierros 4 - OLO Web.
Aikuisen Ajattelu Sami Lu2.
PaikkaOppi Mobiilin käyttöohje
14. Hyvä ohjelmointitapa.
3 Tiedonhaku Sanahakupalvelut.
Vertaisvinkkejä hankkeiden hyvään viestintään
Ergonomia Fyysisesti raskas työ.
Esityksen transkriptio:

Yksikkötestauksen käyttöönotto Jouni Heikniemi, Offbeat Solutions @jouniheikniemi jouni@offbeat.fi

No heippa! Jouni Heikniemi yleisjyrä Offbeat Solutions jouni@offbeat.fi www.heikniemi.net/hardcoded @jouniheikniemi

#td2012fi #tddev

Odotukset kuulijalle Tietää mitä yksikkötestaus on Osaa kirjoittaa perustestin Kehittäjä tai muuten prosessissa tiukasti kiinni Ei vielä aktiivinen yksikkötestaaja

Miksi et yksikkötestaa? Esimieheni ei anna lupaa Minulla ei ole aikaa Softamme on liian monimutkainen (... jolloin testit ovat osa ratkaisua, eivät ongelmaa) Yritin, mutta en osannut ... No mutta siksihän olet täällä!

Esimieheni ei anna lupaa Miksi edes kysyt?

Esimieheni ei anna lupaa Kulttuuri Tulospaine Kvartaali ROI

Esimieheni ei anna lupaa Täysverinen yksikkötestauksen käyttöönotto on organisaatiokysymys. Se, että sinä opettelet testaamaan töitä tehdessäsi, ei ole. Kun olet ensin opetellut, olet paljon vakuuttavampi.

Esimieheni ei anna lupaa Muista: Esimiestäkin voi vaihtaa! www.mol.fi www.monster.fi tyopaikat.oikotie.fi jne. (ilmainen mainos)

Enemmän realismia, vähemmän höpinää tai sitten presentoija kuuseen?

Mitä yksikkötestauksella... saa ei saa Laadukasta koodia  kustannustehokkuutta Dokumentaatiota Luottamusta koodin oikeellisuuteen Bugittomuutta Testaajien tarpeettomuutta (= toimii kuten toteuttaja on aikonut) Yksikkötestaus  ”Koodinvarmistus”

Paljonko se vie aikaa? Testien toteutus + 20 .. 100 % ”Lisäsuunnittelu” Kehitys-työ Kehitys-työ Ilman yksikkötestejä Yksikkötestien kanssa

… “mutta” Paljonko se vie aikaa? Virhe-jahti Testien toteutus Lisä-suunnittelu Ylläpito-koodaus Kehitys-työ Kehitys-työ Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Tiimin refaktorointitaidot ratkaisevat, väheneekö ylläpitovaiva. Paljonko se vie aikaa? Tiimin refaktorointitaidot ratkaisevat, väheneekö ylläpitovaiva. Virhe-jahti Testien toteutus Lisä-suunnittelu Ylläpito-koodaus Kehitys-työ Kehitys-työ Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Testinkirjoitustaidot ratkaisevat, väheneekö virhejahti. Paljonko se vie aikaa? Virhe-jahti Testien toteutus Lisä-suunnittelu Testinkirjoitustaidot ratkaisevat, väheneekö virhejahti. Ylläpito-koodaus Kehitys-työ Kehitys-työ Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Huonot testit ovat myös tuskaisia ylläpitää. Paljonko se vie aikaa? Virhe-jahti Testien toteutus Lisä-suunnittelu Ylläpito-koodaus Huonot testit ovat myös tuskaisia ylläpitää. Kehitys-työ Kehitys-työ Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Vaikuttaako lohduttomalta? Virhe-jahti Testien toteutus Jopa 80 % sovelluksen TCO:sta kohdistuu ylläpitoon. Lisä-suunnittelu Ylläpito-koodaus Kehitys-työ Kehitys-työ Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Elinkaari huomioiden Virhejahti Ylläpitokoodaus Ilman yksikkötestejä Testien toteutus suunnittelu Lisä- Ylläpitokoodaus Kehitystyö Kehitystyö Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Tiimin kehityksen myötä Virhejahti Testien toteutus Ylläpitokoodaus suunnittelu Lisä- Kehitystyö Kehitystyö Testien ylläpito Virhejahti Ylläpito-koodaus Ilman yksikkötestejä Yksikkötestien kanssa

Testauksen aloittamisen työmäärä Siis: Kaikki oikeasti vaikea duuni on omien jälkien siivoamista.

Siis mitkä riippuvuudet?

Logiikkaan sekaantujat, the usual suspects Tiedostojärjestelmä Verkon käyttö Tietokanta Ajoympäristön käsittely

No mitä sit ku? (eli kuinka voitat sen monimutkaisen softan)

Aloita järkevästä vastuksesta

Menestys liian helpossa projektissa johtaa harhaan! (eikä välttämättä edes vakuuta ketään)

Turha myöskään ottaa täysillä turpaan...

Ideaalinen Frankenstein Keskikokoinen projekti tai moduuli Tunnetusti ongelmallinen Jonka tunnet melko hyvin

Uusi on aina uusi? Ehkä parempaa koodia Legacyssa löytyy (tm) Uusissa alustoissa parempi testaustuki Hermoraunio projektipäällikkö niskassa? Legacyssa löytyy (tm) Oma tupa, oma lupa Sekasorron voi kääntää myös voitoksi ”Kukaan ei huomaa”

Mitä kannattaa testata? Kilauta kehittäjälle!

Tehokkuus koodiluokittain Data access (yleensä) Ohjaus-kerrokset Fasadi-kerrokset Riippuvuuksien vaikeus Parserit ym. muuntimet Työkalu-metodit ”Älyttömät” oliot Laskenta ja päättely Testauskelpoisen logiikan määrä

Testaushyöty Logiikan määrä Testaushyöty = Riippuvuuksien määrä Huomioi myös: Koodin bugialttius ja bugien kriittisyys Kuinka usein koodi muuttuu? Kuinka paljon dokumentaatiosta on hyötyä?

Mitä kannattaisi testata? Data access (yleensä) Ohjaus-kerrokset Fasadi-kerrokset Riippuvuuksien vaikeus Parserit ym. muuntimet Työkalu-metodit ”Älyttömät” oliot Laskenta ja päättely Testauskelpoisen logiikan määrä

Miksi testata vaikeita asioita? Testien toteutus Helpot testit Lisä-suunnittelu Vaikeat testit Kehitys-työ Testien ylläpito Virhejahti Ylläpito-koodaus Yksikkötestien työmäärävaikutukset

Helpot vai vaikeat ensin? Data access (yleensä) Ohjaus-kerrokset Fasadi-kerrokset Riippuvuuksien vaikeus Parserit ym. muuntimet Työkalu-metodit ”Älyttömät” oliot Laskenta ja päättely Testauskelpoisen logiikan määrä

Helpot vai vaikeat ensin? Jos haluat hyödyn irti nopeasti, aloita vaikeista ... Mutta sitten pitää oikeasti osata Jos sinä tai tiimisi olette aloittelijoita, lähtekää helposta päästä liikkeelle ... Mutta varaudu olemaan kärsivällinen – osa hyödyistä tulee vasta paljon myöhemmin

”Testaa kun korjaat”-malli Kirjoita testi aina ennen kuin refaktoroit Varmista että testi testaa oikeat asiat – ja menee läpi sekä ennen että jälkeen Kirjoita testi aina ennen kuin korjaat bugin Varmista että testi ei mene läpi ennen korjausta, ja menee sen jälkeen Hyvä, mutta vaikea tehdä organisoidusti aloittelevalla porukalla

Black vs. White box

Elämää mustassa laatikossa Valmis?

Elämää valkeassa laatikossa

Elämää valkeassa laatikossa

Black vs. White box Testit ovat toteutusriippumattomia Lähes aina jotain jää testaamatta Lähes aina on myös turhia testejä ... ja käytännössä mahdotonta tehdä, ellei testejä tee joku muu kuin koodari  unohda tämä

Black vs. White box Testit varmentavat yleensä koodin laadun melko hyvin Testit toimivat myös dokumentaationa Syntyy helposti ”huonoja testejä”: rikkoutuvat koodin rakenteen muuttuessa

Code Coverage

Code Coverage

Code coverage Hyvä apuväline, kun etsit paikkoja, joita testikoodi ei ainakaan testaa Älä käytä peittoprosenttia mittarina tai tavoitteena ”Execution coverage” != ”Assertion coverage”

Mitä voisin mitata? Riippuvuuksien määrän vähenemistä Esim. NDepend-metriikat Regressiobugien määrää Hyvä, mutta usein hidas mittari Uusien koodarien työhönoppimisen nopeus Virheiden korjausnopeus Debuggaukseen käytetty aika

Työkaluja Apua mikä määrä! nUnit, xUnit, Mbunit, Mstest, ... Moq, Typemock Isolator, RhinoMocks, ... Visual Studio, ReSharper, TeamCity, TFS, ... Oikeasti valinnalla ei ole yhtään mitään väliä kun olet aloittamassa Hyvä setti aloittelijalle: xUnit + (TestDriven.net tai ReSharper)

Tarvittavaa osaamista Vähän testauksen filosofiaa Jokin testaustyökalu Refaktorointi Oman softan toimintasäännöt Mock-tekniikat, IoC, testien skriptaus, ...

Test-driven development Ei ole pakko. Sehän on tiiliseinä ---> Harkitse sitten, kun testaus alkaa sujua hyvin.

Miten varmistua testien laadusta? Katselmointi. Erityisesti testien. Loistava tapa saada palautetta myös koodin ajattelusta ja API-suunnittelusta http://bit.ly/katselmointi1 http://bit.ly/katselmointi2

Integraatio- vs. Yksikkötestit? Onko erottelu sinulle oikeasti merkityksellinen? Yksikkötesti = ”testaa vain yhtä luokkaa” ... vai ... Yksikkötesti = ”riittävän nopea ja simppeli, vapaasti toistettavissa oleva testi”

Testien ajoympäristöt Version-hallinta checkin palaute Testien pitää suorittua nopeasti kehittäjän työasemalla Build + test

Kokeile rohkeasti. Kehityt koodaajana.

jouni@offbeat.fi @jouniheikniemi www.heikniemi.net/hardcoded ? jouni@offbeat.fi @jouniheikniemi www.heikniemi.net/hardcoded