SEPA päiväkirja. Aihe: Staattiset menetelmät Tekijät: Mikko Halttunen 58198B, Mikko Närjänen 58122B Ryhmä: Neptune T Ohjelmistoprojekti I

Samankaltaiset tiedostot
T SEPA - STAATTISET MENETELMÄT Tuomas Tolvanen, 55382U Timo Töyry, 58578B

SEPA diary. Dokumentti: SEPA_diary_PK_RI.doc Päiväys: Projekti : AgileElephant Versio: V0.2

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

SEPA: Staattiset menetelmät Timo Sallinen, 51134F & Risto Kunnas, 50498T. Sisällysluettelo. 1 Johdanto. 2 SEPA harjoittelu käytännössä.

dokumentin aihe Dokumentti: Testausraportti_I1.doc Päiväys: Projekti : AgileElephant

Alkukartoitus Opiskeluvalmiudet

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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

Ohjelmoinnin perusteet Y Python

Menetelmäraportti Ohjelmakoodin tarkastaminen

Testaussuunnitelma. Pizzeria - Pitseria HAAGA-HELIA ammattikorkeakoulu Tietojenkäsittelyn koulutusohjelma. WebPizza

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe T1. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T1

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

T Tietojenkäsittelyopin ohjelmatyö Tietokonegrafiikka-algoritmien visualisointi Vaatimustenhallinta

LAATURAPORTTI Iteraatio 1

Kuopio Testausraportti Asiakkaat-osakokonaisuus

Ohjelmointi 2 / 2010 Välikoe / 26.3

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

SEPA päiväkirja. Dokumentti: SEPA_diary_EM_PV.doc Päiväys: Projekti : AgileElephant Versio: V0.9

T Ohjelmistokehitysprojekti I - Iteraatiosuunnitelma (I2)

Apuja ohjelmointiin» Yleisiä virheitä

Testaussuunnitelma. Koskelo. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

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

Convergence of messaging

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

tsoft Tarkastusmenettelyt ja katselmukset Johdanto Vesa Tenhunen

Test-Driven Development

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

Santeri Saarinen Korjattu testaustasoja ja tehty tarkennuksia I1-testaukseen

Testaus käsite. Sekalaista testausasiaa. Testauksen käsitteestä. Kattavuusmitat. Jos ajatellaan, että testaus = V&V, voidaan erottaa:

1 Sisällysluettelo 2 Johdanto 3 Menetelmän käyttö

ASCII-taidetta. Intro: Python

Laadunvarmistusdokumentti

Project group Tete Work-time Attendance Software. Henkilökohtainen SE harjoitus: loppuraportti

58160 Ohjelmoinnin harjoitustyö

Good Minton Sulkapalloliiton Kilpailujärjestelmä SEPA: Heuristinen arviointi

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

UCOT-Sovellusprojekti. Testausraportti

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

9. Periytyminen Javassa 9.1

Ohjelmoinnin perusteet Y Python

Test-Driven Development

T Software Project Group: Tetrastone Subject: RosettaNET. Personal Software Engineering Assignment: Tetrastone

TARKASTUSMENETTELYT JA NIIDEN APUVÄLINETUKI

Versio Päiväys Tekijä Kuvaus Tikkanen varsinainen versio

Asiointipalvelun ohje

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

Ohjelmoinnin perusteet Y Python

13. Hyvä ohjelmointitapa (osa 1) 13.1

Testaustyökalut. Luento 11 Antti-Pekka Tuovinen. Faculty of Science Department of Computer Science

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmoinnin perusteet, syksy 2006

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

Liite 2 1(20) Tarkastukset Tekla NIS Offline Inspection ohjelmistolla. Käyttöohje asentajille

JHS XXX ICT-palvelujen kehittäminen: Laadunvarmistus Liite 6: Katselmointi

Reilun Pelin työkalupakki: Kiireen vähentäminen

Harjoitus 5 (viikko 41)

PROJEKTIN OHJAUS JA SEURANTA JOUNI HUOTARI

T Tietojenkäsittelyopin ohjelmatyö Tietokonegrafiikka-algoritmien visualisointi Vaatimustenhallinta

Menetelmäraportti - Konfiguraationhallinta

Projektisuunnitelma. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Laadunvarmistuksen suunnitelma. Ryhmä ExtraTerrestriaLs Aureolis Oy

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Ohjelmoinnin perusteet Y Python

Kelan sähköinen suorakorvaus. Opus Dental -ohje

Työkalujen merkitys mittaamisessa

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

5. HelloWorld-ohjelma 5.1

Automaattinen yksikkötestaus

SEPA diary. Dokumentti: SEPA_diary_PK_RI.doc Päiväys: Projekti : AgileElephant

Tiedote maalausaikaneuvotteluista

Testaus-tietoisku: Tärkeimpiä asioita testauksesta projektityökurssilaisille

T Projektikatselmus

SEPA päiväkirja. Aihe: Suunnittelumallit Tekijät: Tuukka Laakso ja Antti Kettunen Ryhmä: Neptune T Ohjelmistoprojekti I

2.3 Virheitä muunnosten käytössä

Ohjelmoinnin perusteet Y Python

Kuopio Testausraportti Kalenterimoduulin integraatio

KOKONAISARKKITEHTUURIN ARVIOINTI

Project group Tete Work-time Attendance Software

Simulaattorin asennus- ja käyttöohje

Miten löydän Sen Oikean? Senaattoritilaisuus Liisa Paasiala, Senior Consultant

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

PROJEKTIN EDISTYMISRAPORTTI Seurantajakso <jaksonumero, alkupäivä - päättymispäivä>

Katselmoinnin määritelmä. Katselmoinnit osa 1. ja vielä ajatuksia katselmoinneista. Katselmointi. Katselmointi, katselmus (review) IEEE Std

Pistepilvien hyödyntäminen rakennusvalvonnassa

Onnistunut ohjelmistoprojekti

Loppuraportti. Virtuaali-Frami, CAVE-ohjelmisto. Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu. Versio

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ei raportteja roskiin

Sipoon kunta, Tekniikka- ja ympäristöosasto, Toimitilat. PL 7, Sipoo. Sibbo sjärgådsförening r.f.

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Ohjelmistojen virheistä

Figure 1: Projektipäälliköt Juha-Pekka Honkavaara ja Juha Mattila

T Testiraportti - järjestelmätestaus

Hirviö Testausraportti I2

Tutkittua tietoa. Tutkittua tietoa 1

Transkriptio:

SEPA päiväkirja Aihe: Staattiset menetelmät Tekijät: Mikko Halttunen 58198B, Mikko Närjänen 58122B Ryhmä: Neptune T-76.4110 Ohjelmistoprojekti I

Sisällysluettelo Sisällysluettelo...2 1. Johdanto...3 2. Menetelmän käyttö...3 2.1 Yleinen suunnitelma...3 2.1 Käyttöönottosuunnitelma...3 3. Kokemukset ja muutokset...4 3.1 Suunnitteluvaihe...4 3.2 Iteraatio 1...4 3.3 Iteraatio 2...6 3.4 Yhteenveto...7 4. Lähteet...8

1. Johdanto Staattisilla menetelmillä tarkoitetaan tässä ohjelmiston analyysiä suorittamatta kuitenkaan sitä. Yksi staattinen analysointitapa on esimerkiksi koodin katselmointi, jolla pyritään vähentämään ohjelmistosta löytyvien virheiden ja mahdollisien ongelmakohtien määrää. SEPAmme keskittyy juuri koodista löytyvien ongelmien vähentämiseen ohjelmassa. Valitsimme tämän aiheen koska pääsemme sen kautta tutustumaan kaikkeen projektia varten kirjoitettavaan lähdekoodiin, sekä työkaluihin ja menetelmiin joilla sitä voi analysoida. Näin saamme laajan kokonaiskuvan toteutettavasta ohjelmistosta. Samalla pääsemme tutustumaan toisten ohjelmointityyleihin ja mahdollisesti opimme jotain uutta. Uskomme että staattisten metodien käytöstä voi olla hyötyä tässä projektissa ja että se on kokeilemisen arvoinen tekniikka. 2. Menetelmän käyttö 2.1 Yleinen suunnitelma Kirjoitetun lähdekoodin katselmointia pyritään suorittamaan mahdollisimman pian koodin valmistumisen jälkeen, mutta viimeistään kummankin iteraation loppuvaiheessa pyritään käymään priorisoidusti suurin osa iteraation aikana kirjoitetusta lähdekoodista katselmoimalla (walkthrough, Object-Oriented & Classical Software Engineering, s 142 ->). Katselmoinnin valmistelevat Halttunen ja Närjänen. Siihen osallistuu edellämainittujen lisäksi katselmoitavan lähdekoodin kirjoittanut kehittäjä sekä testaaja. Katselmoinnissa käytetään apuna Borland Togetherin analysointityökaluja potentiaalisesti ongelmallisten luokkien ja metodien tunnistamiseen. Lisäksi mahdollisten ongelmakohtien löytämiseen voidaan käyttää JLint ohjelmaa. Katselmoinneissa vastuun pystyy jakamaan esimerkiksi 4 eri tavalla (Practical Software Testing, s.318): Katselmoinnin vetäjä suunnittelee ja valmistelee katselmoinnin. Kirjuri kirjoittaa ylös löytyneet bugit tai ongelmakohdat. Esittelijä (tässä tapauksessa koodin kirjoittaja) esittelee koodin ja hoitaa koodin korjaamisen, jos siitä löytyy ongelmia. Katselmoija valmistautuu katselmointiin ja arvioi esitettävää koodia (ei kuitenkaan esittelijää). Koska käytettävissä oleva aika on rajattua, voidaa käyttää Borland Togetherin työkaluja sekä JLint ohjelmaa ongelmien etsimiseen kaikesta kirjoitetusta koodista myös "katselmuksien" ulkopuolella. 2.1 Käyttöönottosuunnitelma 2.1.1 Katselmointien valmistelu: Laatuvastaava päättää katsemoitavat koodiosiot. SepaTiimi (Mikko Närjänen ja Mikko Halttunen) tekee suosituksia laatuvastaavalle käyttäen suunnitelmassa mainittuja työkaluja potentiaalisesti ongelmallisten luokkien ja metodien etsimiseen. Esittelijää voidaan myös kuulla päätöksenteossa. Koodiosiot pyritään valitsemaan siten että kaikkien kehittäjien koodia katselmoidaan (vain yhden kehittäjän koodia yhdessä katselmoinnissa). Katselmoinnit pyritään keskittämään monimutkaisiin metodeihin ja luokkiin sekä alueille, joita JUnit-testit eivät kata. SepaTiimi ja Laatuvastaava valitsevat keskuudestaan johtajan. Sen jälkeen päätetään ketkä osallistuvat

katselmointiin ja valitaan kirjuri. Johtaja ja SepaTiimi valmistelevat listat kohdista joita eivät katselmoitavassa koodissa ymmärrä ja kohdista joiden uskovat olevan virheellisiä. 2.1.2 Osallistujien roolit: Johtaja (leader) Laatuvastaava tai SepaTiimin jäsen. Suunnittelee katselmoinnin, valmistelee listat tarkistettavista asioista yhdessä SepaTiimin kanssa, vastaa siitä että kaikki katselmointii osallistuvat ovat valmistautuneet asianmukaisesti, johtaa katselmoinnin, tekee katselmointiraportin (tarvittaessa SepaTiimin avustuksella) ja vastaa siitä että havaitut epäkohdat korjataan. Kirjuri (recorder) Testaaja tai SepaTiimin jäsen. Kirjaa muistiin löydetyt epäkohdat, muut löydöt ja mahdolliset suositukset. Muistiin kirjatut asiat tulee kirjoittaa riittävällä tarkkuudella (esimerkiksi tiedosto, rivi, ja tietoa ongelmasta), että kohtaa korjaava henkilö löytää kohdan nopeasti ja saa selville nopeasti, että mitä kyseisessä kohdassa oli vialla. Esittelijä (reader) Katselmoitavan koodin kirjoittanut henkilö. Esittelee katselmoitavan koodin sekä korjaa havaitut epäkohdat katselmoinnin jälkeen. Katselmoijat (reviewers) Valmistautuvat katselmointiin tutustumalla katselmoitavaan koodiin, osallistuvat katselmointiin, arvioivat katselmoitavan koodin ja tarvittaessa osallistuvat havaittujen epäkohtien korjaamiseen katselmoinnin jälkeen. 2.1.4 Tuloksiin reagointi: Jos katselmoinnissa ei löytynyt mitään korjattavaa, merkitään kyseinen kohta koodista katselmoiduksi ja kyseistä koodipätkää ei katselmoida uudestaan muulloin kuin koodin muuttuessa. Jos katselmoinnin aikana ilmenee korjattavaa, korjaa kyseisen koodin kirjoittanut henkilö koodin mahdollisimman pikaisesti ja lähettää jollekkin katselmoinnista mukana olleista henkilöistä kyseisen koodin kohdan tarkastettavaksi. Jos katselmoijan mielestä koodissa on edelleenkin vikaa, voi hän kutsua uuden täyden katselmoinnin koolle. 3. Kokemukset ja muutokset 3.1 Suunnitteluvaihe Suunnitteluvaiheessa emme käyttäneet staattisi menetelmiä, koska tällöin koodia ei vielä ollut, mitä olisi voinut testata. 3.2 Iteraatio 1 SEPA:n suunnitelma oli kirjoitettu liian korkealla tasolla, joten joduimme tarkentamaan useita kohtia. Lisäksi suunnitelmamme käyttöönotosta ei ollut ehkä paras mahdollinen sillä tavalla, että sysäsimme itsellemme erittäin paljon lisätyötä. Järkevämpää olisi ollut kouluttaa muut ryhmäläiset katselmoimaan ja muuttaa käytäntöä siten, että koodin kirjoittanut ilmoittaa qa:lle, joka määrää 2 muuta henkilöä katselmoimaan koodia. Totesimme että katselmoinnit ovat varsin työläitä toteuttaa. Tämä johtuu suurelta osin siitä että niihin on syytä valmistautua kunnolla tutustumalla katselmoitavaan koodiin, jos aikoo löytää muita kuin ohjelmointityyliin ja kommentointiin liittyviä puutteita.

3.2.1 Tuloksia Tilastoja ohjelmallisesti löydetyistä ongelmista. Nämä eivät loppujen lopuksi läheskään kaikki olleet virheitä: Ongelma Määrä Selitys Maagisia numeroita 133 Kenttiä, joiden pitäisi olla lokaaleja 26 Koodityyli, turhia puolipisteitä: 2 Hankalia if-lauseita: 5 Turhia lokaaleja muuttujia: 2 Tyhjiä try-catch blokkeja: 3 javadoc-ongelmia: 695 käyttämättömiä muuttujia: 99 JSDK 5.0 spesifisiä ongelmia: 43 Suorituskykyongelmia: 9 Mahdollisia bugeja: 30 Näistä 4 oli oikeasti. (3 nullpointer-ongelmia sekä 1 settermetodi, jossa asetettiin aina false

Tilastoja katselmoinneissa löydetyistä ongelmista. Tilasto on laskettu arvioimalla katselmoinneissa merkityistä ongelmista ja ongelmista, joita ei merkitty. Tällaisia olivat runsaat määrät this-ongelmia sekä javadoc-ongelmia: Ongelma Määrä Selitys Javadoc -ongelmia ja -puutteita: 35% Kommenttiongelmia ja -puutteita: 20% Koodin tyyli (this vittaukset, ja liian pitkät rivit tms.): 15% Maagisia numeroita: 15% Metodeilla ja muuttujilla väärät (puuttuvat tai liian suuret) näkyvyydet: 5% Ongelmia luokkarakenteessa: 5% Oikeita bugeja: 3% Hankalia if-lauseita: 2% Katselmoinneissa siis löytyi erittäin paljon ongelmia ja tuli todistettua, että katselmoinneista on hyötyä. Huonon suunnitelman takia katselmointisepan kirjoittajille tuli paljon työtä tässä vaiheessa, mutta senkin voi laskea opetustilanteeksi sillä, että nyt jokainen henkilö projektiryhmästä on päässyt osallistumaan katselmointehin ja tietää mitä siellä tulisi tapahtua. Tällöin voimme siirtää vastuuta seuraavassa iteraatiossa myös muulle projektiryhmälle. 3.3 Iteraatio 2 Toisessa iteraatiossa katselmointeja suoritettiin koko iteraation ajan, että koodin kirjoittaja muisti hieman paremmin kirjoitetun koodin. Tämä tapa oli selvästi parempi kuin yrittää käydä läpi monen luokan koodia iteraation lopussa. Muutoksena suunnitelmiin toisessa iteraatiossa katselmoinneissa ei enää ollut mukana kuin 3 henkilöä yleensä - koodin kirjoittaja, katselmoinnin kirjuri sekä johtaja. Kirjuri ja johtaja toimivat myös katselmoijina. Koska koodikatselmoinnit olivat tulleet kaikille asianosaisille tutuiksi ensimmäisessä iteraatiossa, ne saatiin toteutettua hiukan epämuodollisemmin ja sujuvammin. Esimerkiksi katselmoitavien luokkien valinta tehtiin katselmoijien kesken johtoryhmän antamien suuntaviivojen mukaisesti. Valinnassa annettiin paljon painoarvoa koodin kirjottaneen kehittäjän näkemyksille. Toisessa iteraatiossa kokeiltiin testinä myös katselmoida vain muuttuneita koodin kohtia, mutta tämä

osoittautui erittäin hankalaksi kun katselmoitavasta koodista ei edes koodin kirjoittaja nähnyt riippuvuuksia ja kokonaisuutta. Tämä menetelmä tiputettiin käytöstä heti seuraavaan katselmointiin. Koodin muuttuneita kohtia pystyy selvästikin käyttämään vain viitteenä siitä, että mitä voisi katselmoida. 3.3.1 Tuloksia Katselmointien tuloksia: Ongelma Määrä Selitys Javadoc -ongelmia ja -puutteita: 10% Kommenttiongelmia ja -puutteita: 11% Koodin tyyli (this vittaukset, ja liian pitkät rivit tms.): 6% Maagisia numeroita: 25% Metodeilla ja muuttujilla väärät (puuttuvat tai liian suuret) näkyvyydet: 3% Ongelmia luokkarakenteessa: 15% Oikeita bugeja: 30% Hankalia if-lauseita: 0% 3.4 Yhteenveto Toisessa iteraatiossa bugeja löytyi: Valpas Virheitä Rivejä 12 786 Simulaattori Virheitä Rivejä 2 424

Analysaattori Virheitä Rivejä 10 535 Mielenkiintoista ensimmäisen ja toisen iteraation tuloksissa on se, että ensimmäisessä iteraatiossa selvästi oli enemmän javadoc ja kommentointiongelmia sekä ongelmia koodin tyylissä. Toisessa iteraatiossa taas löytyi selvästi enemmän "oikeita" bugeja, joihin lasketaan esimerkiksi mahdolliset nullpointer-virheet, ajatusvirheet tai koodi, joka ei olisi toiminut niin, miten sen olisi tarkoitus toimia. Katselmointien tuloksista voisi nopeasti katsoa, että toisen iteraation aikana olisi kirjoitettu huonompilaatuista koodia, mutta uskomme, että saimme selvästi enemmän irti koodikatselmoinneista toisessa iteraatiossa kuin ensimmäisessä, kun katselmointiprosessi oli tuttu ja osallistujat olivat valmistautuneet paremmin katselmointeihin. Uskomme myös, että kehittäjät kirjoittivat toisessa iteraatiossa tyyliltään paremmin projektin vaatimuksia vastaavaa ja paremmin kommentoitua koodia, kun asiaan oli kiinnitetty huomiota ensimmäisessä iteraatiossa. Ilman katselmointeja olisi koodin sekaan jäänyt varmasti ongelmakohtia, jotka olisivat saattaneet tulevaisuudessa aiheuttaa vakaviakin ongelmia. Erityisesti katselmointien hyöty tuli selvästi esille siten, että koodin kirjoittaja esitteli koodia katselmoijille, jolloin koodin kirjoittaja palasi kirjoittamaansa koodiin ja tuli selittäessään miettineeksi, mitä koodissa tehdään tai tulisi tehdä, jolloin virheellisesti toimivat kohdat tulivat esille. 4. Lähteet Schach, Object-oriented and Classical Software Engineering, McGraw Hill 2005, s. 142-147 Ilene Burnstein, Practical Software Testing, Springer 2003, s. 303-345, 310-311 (Walkthrough)