Mittaaminen. Metriikat. Mitta-asteikkoja. Mielekkyys (meaningfulness) Mitta-asteikkojen eroja. Mittaamisen merkitys ohjelmistotuotannossa



Samankaltaiset tiedostot
ITK130 Ohjelmistojen luonne

Sytyke ry:n laivaseminaari Software Technology Transfer Pekka Forselius

Työkalujen yleinen arkkitehtuuri. Ylläpitoon liittyvät työkalut. Ylläpitotehtävien mukaiset työkalut. Työkalujen jaotteluperusteita

Luotettavuuden mittaamisesta. Ilkka Norros ja Urho Pulkkinen

RAKENTEEN ELI SUUNNITTELUN MITTAREITA

Laatukustannukset. Laadun hallinta. Laadun kustannuksista

8. Laadunvalvonta. Mitä laatu on? Eräs laadun määritelmä. Laadun hallinta. Laatuvaatimukset. Prosessin ja tuotteen laatu

Laadun hallinta. Laatukustannukset. Laadun kustannuksista. Sami Kollanus TJTA330 Ohjelmistotuotanto

Laadun hallinta. Laatukustannukset. Sami Kollanus TJTA330 Ohjelmistotuotanto

Ohjelmoinnin perusteet Y Python

arviointi edellyttää historiatietoja, esim. mittareiden kalibroimiseksi

OHJELMISTOJEN LAADUN JA KOON MITTAAMINEN

Algoritmit 1. Luento 3 Ti Timo Männikkö

etunimi, sukunimi ja opiskelijanumero ja näillä

Laadunvarmistuksesta. Luennon tavoitteista. Motivointia. Sommerville, Software Engineering (6th ed.)

Ohjelmoinnin perusteet Y Python


HELIA 1 (19) Outi Virkki Käyttöliittymät ja ohjelman suunnittelu

Ohjelmoinnin peruskurssi Y1

Metriikat JOT Ohjelmistometriikat. Arvioidaan joko ohjelmistoa tai ohjelmistoty!t".

ISO/IEC sarja (SQUARE)

Muistutus aikatauluista

Ohjelmoinnin perusteet Y Python

Ehto- ja toistolauseet

Käytettävyyslaatumallin rakentaminen verkkosivustolle

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

OHJELMISTOJEN LAADUN JA KOON MITTAAMINEN

Ohjelmiston testaus ja laatu. Testaus yleistä

Java-kielen perusteet

Työmäärän arviointi. Vaihtoehtoja. Sami Kollanus TJTA330 Ohjelmistotuotanto

Työmäärän arviointi. Vaihtoehtoja. Arviointiprosessi. Sami Kollanus TJTA330 Ohjelmistotuotanto

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Mittaaminen menettely (sääntö), jolla tilastoyksikköön liitetään tiettyä ominaisuutta kuvaava luku, mittaluku.

Rajapinta (interface)

Numeeriset menetelmät

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

8. Laadunvalvonta. Mitä laatu on?

Sisällys. 12. Monimuotoisuus. Johdanto. Alityypitys. Johdanto. Periytymismekanismi määrittää alityypityksen.

1. Olio-ohjelmointi 1.1

SPSS-pikaohje. Jukka Jauhiainen OAMK / Tekniikan yksikkö

ITKP102 Ohjelmointi 1 (6 op)

Toimintopisteet. Toimintopisteiden laskenta 1

Veto-visualisointityökalu

IV-kuntotutkimushanke_tutkijat

POHJOIS-POHJANMAAN SAIRAANHOITOPIIRI. Laatutyö - laadukas toiminta terveydenhuollossa

Darwin: Tutkimusprojektin esittely

OHJ-3010 Ohjelmistotuotannon perusteet. Ohjelmistoprojektin hallinta

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Yleinen malliprediktiivinen säädin. Funktiolohko Siemens PLC. SoftControl Oy

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Toimialan ja yritysten uudistuminen

Johdatus diskreettiin matematiikkaan Harjoitus 7,

TILASTOLLINEN LAADUNVALVONTA

- Kommentoi koodisi. Koodin kommentointiin kuuluu kuvata metodien toiminta ja pääohjelmassa tapahtuvat tärkeimmät toiminnat. Esim.

Algoritmit 1. Demot Timo Männikkö

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

1. Omat operaatiot 1.1

Lisää segmenttipuusta

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmistokoodin laadulliset metriikat ohjelmistoyrityksessä. Ville-Veikko Kalkkila

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

OHJ-1151 Ohjelmointi IIe

Johdantoluento. Ohjelmien ylläpito

JHS 180 Paikkatiedon sisältöpalvelut Liite 4 INSPIRE-palvelujen laadun testaus

Algoritmit 1. Demot Timo Männikkö

Verkkokaupan perustaminen - CASE NANSO GROUP OY. Thea Forstén

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

3. Muuttujat ja operaatiot 3.1

Hyvä vesihuoltohanke, suunnittelijan näkökulma

MONISTE 2 Kirjoittanut Elina Katainen

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Tutoriaaliläsnäoloista

Koekysymyksiä. Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistojen suorituskyky

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tietotyypit ja operaattorit

Tietokannan rakenteen suunnittelu

Ohjelmistotuotanto, laadunvalvonta Syksy Laadunvalvonta. Mitä laatu on? Laadun komponentit. Laatuvaatimukset.

Induktio kaavan pituuden suhteen

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Väli- ja loppuraportointi

Johdatus tilastotieteeseen Tilastollisten aineistojen kerääminen ja mittaaminen. TKK (c) Ilkka Mellin (2005) 1

Yleiskuvaus - LVpalvelukerroksen. laadulliset vaatimukset Jari Kokko & Vesa Mettovaara LUVAT JA VALVONTA -KÄRKIHANKE

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Oleelliset vaikeudet OT:ssa 1/2

Transkriptio:

Metriikat Metrics mittari (ei laite) Measure mitata, mitta, mittayksikkö, mittausväline Mittaaminen Mittaaminen ja mitta-asteikot Laatu ja laatutekijät Mittausprosessi Esimerkkejä metriikoista Koodirivien määrä on ylläpidettävyyden mittari. kompleksisuus oliometriikat kloonimetriikat (muita) ylläpidettävyyden mittareita esim. HP-MAS, ylläpidettävyyden kypsyysindeksi Metriikoiden vaatimuksia Prosessi, jossa numerot tai symbolit liitetään reaalimaailman olioiden (kohteiden) ominaisuuksiin, niin että numerot kuvaavat ominaisuuksia selvästi määriteltyjen sääntöjen mukaan Mittaaminen antaa viitteitä mitattavan kohteen ominaisuuksista 1 2 Mitta-asteikkoja Nominaali- eli luokitteluasteikko esim. ohjelmassa käytetty ohjelmointikieli ei järjestystä Ordinaali- eli järjestysasteikko esim. ohjelmien jakaminen pieniin, keskikokoisiin ja suuriin järjestäminen mahdollista, mutta laskutoimitukset eivät Intervalli- eli välimatka-asteikko asteikko esim. ohjelmistoprojektin eri vaiheiden kestojen vertailu yhteen- ja vähennyslasku (ei absoluuttista nollapistettä) Suhdeasteikko esim. ohjelmalohkojen pituuksien vertailu kaikki laskutoimitukset mahdollisia (absoluuttinen nollapiste) Absoluuttinen asteikko mittaus voi tapahtua vain tiettyä mittayksikköä käyttäen esim. lukumäärien mittaaminen, LOC 3 Mielekkyys (meaningfulness) Mielekäs lause (väite) mittaamista koskeva lause on mielekäs, jos lauseen totuusarvo pysyy yy samana, vaikka mittayksikkö vaihtuu mielekäs: ei mielekäs: Kalle on kaksi kertaa niin pitkä kuin Maija. Lämpötila Tokiossa on tänään kaksi kertaa niin paljon kuin se on Lontoossa. 4 Mitta-asteikkojen eroja Ohjelma A Ohjelma B Suorituskyky + - Ylläpidettävyys - + Ohjelma A Ohjelma B Suorituskyky 50 t/s 45 t/s Ylläpidettävyys 1 M /v 500 k /v Ohjelma A Ohjelma B Teoreettinen max/min Suorituskyky 50 t/s 45 t/s 100 t/s Ylläpidettävyys 1 M /v 500 k /v 450 k /v 5 Mittaamisen merkitys ohjelmistotuotannossa Ylläpidon kannalta muutettavan ohjelman mittaaminen muutostyön hyödyllisyyden arviointi Ohjelmistotuotannon tavoitteena on tuottaa korkealaatuisia ohjelmia määrättyjen kustannusten ja aikataulun mukaisesti ohjelmien kehitysprosessin kontrollointi kustannusten ja aikataulun kontrollointi ohjelmistotuotteen laadun kontrollointi 6 1

Laatu Metriikoiden avulla voidaan mitata järjestelmän tai prosessin laatua Laatuun liittyviä myyttejä: laatu tarkoittaisi hyvyyttä korkeaa varustetasoa, ylellisyyttä, kiiltoa laatua ei voisi mitata Laatu on yhdenmukaisuutta vaatimusten kanssa asiakkaan vaatimukset vs. kehittäjien vaatimukset laatutekijöiden sisältöä on vaikea määritellä vaatimusmäärittelystä on vaikea saada kattavaa Laadun hallinta 1. Laadun varmistus (quality assurance) menettelytapojen ja standardien vakiinnuttaminen 2. Laadun suunnittelu (quality planning) menettelytapojen ja standardien valinta 3. Laatukontrolli (quality control) varmistuminen siitä, että valittuja menettelytapoja ja standardeja on käytetty 7 8 Laatutekijät Quality factors Ohjelmistolta vaadittavia ominaisuuksia usein uus - ja yys -loppuisia sanoja engl. ility, ilities Ulkoiset laatutekijät käyttäjän havaitsemia ominaisuuksia esim. nopeus, luotettavuus, käytettävyys Sisäiset laatutekijät ohjelmistosuunnittelijoiden kannalta oleellisia ominaisuuksia esim. modulaarisuus, ylläpidettävyys 9 Analysoitavuus Muunneltavuus Vakaus Testattavuus Liitettävyys Asennettavuus Yhteensopivuus Korvattavuus Ylläpidettävyys Siirrettävyys ISO 9126 Ajan käyttö Resurssien käyttö Tehokkuus Toiminnallisuus ISO 9126 Ulkoinen ja sisäinen laatu Luotettavuus Käytettävyys Sopivuus Tarkkuus Yhteentoimivuus Tietoturva Kypsyys Vikasietoisuus Virheistä toipuminen Ymmärrettävyys Opittavuus Toimivuus Miellyttävyys 10 Analyzability Changeability Stability Testability Adaptability Installability Co-existence Replaceability Maintainability Portability ISO 9126 Time behavior Resource utilization Efficiency Functionality ISO 9126 External and internal quality Reliability Usability Suitability Accuracy Interoperability Security Maturity Fault tolerance Recoverability Understandability Learnability Operability Attractiveness 11 Laatutekijöiden väliset riippuvuudet Uud.käytettävyys Ylläpidettävyys Luotettavuus tt - + + Tehokkuus - - - Käytettävyys + Ylläpidettävyys + Uudelleenkäytettävyys Käytettävyys Tehokkuus Luotettavuus 12 2

Ylläpidettävyyteen vaikuttavia tekijöitä Ylläpidettävyys Analysoitavuus Muunneltavuus Vakaus Testattavuus Koko Kompleksisuus Liittymät 13 Laatutekijät vs. Ylläpidettävyys Luotettavuus Siirrettävyys Käytettävyys Mitattavat ominaisuudet Aliohjelman parametrien määrä Kompleksisuus Koodirivien määrä Virheilmoitusten määrä Käyttöohjeen pituus 14 Käytettävyyden laatutekijät Toimivuus Tehtävän suorittamiseen kulunut aika Tehtävän suorittamiseen tarvittujen toimintojen määrä Tietojen etsimiseen kulunut aika On-line avusteiden käyttämiseen kulunut aika Virheiden käsittelyyn kulunut aika Miellyttävyys Käyttäjän asenteet järjestelmää kohtaan ( 1-5 ) Opittavuus Aloittelijan käyttämä aika tehtävien suorittamiseen Järjestelmän ä oppimiseen i tarvittava aika Tietyn suoritustason saavuttamiseen tarvittava aika Taitojen hankkimisessa kohdatut vaikeudet (lkm) Tietojen etsimiseen kulunut aika On-line avusteiden käyttämiseen kulunut aika On-line avusteiden käyttötaajuus Virheiden käsittelyyn kulunut aika Tietämyksen ylläpitoon tarvittava aika Uudelleen opetteluun tarvittava aika Virheilmoitusten esiintymistaajuus Tiettyjen virheilmoitusten esiintymistaajuus 15 Avun tarpeen esiintymistiheys Tavoitteet Valitse mitattavat ominaisuudet Mittausprosessi Valitse mitattavat kohdat Mittaa valitut kohdat Tulkitse mittaustulokset Metriikkaohjelma Valmistaudu parannustoimenpiteisiin 16 Tavoitteita ylläpidettävyyden mittaamiselle Muutosten ja uudistamisen vaikutusten selvittäminen Huonorakenteisten ohjelman osien tunnistaminen Virhealttiiden ohjelman osien tunnistaminen Laadun muuttuminen järjestelmän eri versioiden välillä Tavoitteisiin vaikuttavia asioita Mittaamisen kohde esim. järjestelmän määrittely, testausprosessi Mittaamisen tarkoitus esim. luonnehdinta, arviointi, ennustaminen, korjaaminen, vertailu Näkökulma esim. suunnittelija, testaaja, käyttäjä Ympäristö esim. projekti, jonka tuotoksia mitataan 17 18 3

Metriikkaohjelma Tunnista tavoitteet (Goal) Muotoile kysymykset (Question) jotka ovat oleellisia valituille tavoitteille Valitse metriikat (Metric) jotka vastaavat valittuihin kysymyksiin GQM Esimerkkejä tavoitteista: käyttäjätyytyväisyyden maksimointi tarvittavan työmäärän ja työhön kuluvan ajan minimointi puutteiden minimointi 19 Tavoitteet Kysymykset Metriikat Käyttäjätyytyväisyyden maksimointi Työmäärän ja ajan minimointi Puutteiden minimointi Mitkä asiat koskettavat käyttäjää? Missä ovat pullonkaulat? Mihin resurssit kuluvat? Kuinka helppo järjestelmää on ylläpitää? Miten tehokkaasti järjestelmää voidaan kehittää? Vian ratkaisuun kuluva aika Järjestelmän luotettavuus Todettujen vikojen suhde korjattuihin Henkilöstöresurssien hyödyntäminen Laitteistoresurssien hyödyntäminen Henkilöstöresurssien hyödyntäminen Ratkaisujen aikataulutus Vikatyyppien jakauma Laitteistoresurssien hyödyntäminen Järjestelmän koko Vikataajuus Ohjelmiston epävakaisuus Ohjelmiston kompleksisuus Vikataajuus Todettujen vikojen suhde korjattuihin Järjestelmän luotettavuus GQM 20 Metriikkaohjelman onnistuminen Epäonnistumisen syitä tietoja kerätään valtavat määrät analysointia tehdään hyvin vähän tuloksia ei raportoida lainkaan johtoporras ei tue metriikkaohjelmaa Onnistumisen edellytyksiä selkeä tavoite kerättyjen tietojen analysointi johtoportaan tuki Ylläpidettävyyteen vaikuttavat tekijät tarkemmin Ylläpidettävyys Analysoitavuus Muunneltavuus Vakaus Testattavuus Koko Kompleksisuus Liittymät 21 22 Koko (koodirivien määrä) Lines of code (LOC) Lasketaanko tyhjät rivit vai ei? Lasketaanko kommenttirivit vai ei? Lasketaanko vain suoritettavat lauseet? a [ i ] = getchar ( ); while ( a [ i ]!= \n ) { i++; a [ i ] = getchar ( ); a [ i ] = \0 ; while ( ( a [ i++ ] = getchar ( ) )!= \n ); a [ --i ] = \0 ; Ohjelmointityyli vaikuttaa koodirivien määrään 23 Kompleksisuus Määritelmiä: vaikeus ylläpitää, muuttaa tai ymmärtää ohjelmaa henkisen ponnistuksen määrä, joka tarvitaan ohjelman ymmärtämiseksi i Kompleksisuuden mittaaminen McCaben syklomaattinen kompleksisuus Halsteadin teoria toimintopisteet 24 4

McCabe s cyclomatic complexity Syklomaattinen kompleksisuus Kompleksisuuden mittaamisessa otetaan huomioon ohjelmassa esiintyvät kontrollirakenteet ohjelma on sitä kompleksisempi mitä enemmän siinä on kontrollirakenteita (silmukoita, ehtolauseita ym.) Ohjelma esitetään verkkona, jolle lasketaan syklomaattinen numero G: Syklomaattinen numero 7 3 V ( G ) = 6 8 1 2 12 4 5 6 9 10 V ( G ) = e n + 2 * p jos haarautumat binaarisia: V ( G ) = 1 + π 11 25 26 G1: Syklomaattisten numeroiden vertailu 1 2 3 4 5 6 G2: 7 V ( G1 ) = 3 V ( G2 ) = 3 2 1 7 4 3 6 5 27 Syklomaattisen kompleksisuuden ominaisuuksia V(G) 1 V(G) = 1, jos verkossa G on vain yksi polku Lauseiden lisääminen tai poistaminen ei vaikuta V(G):n arvoon Jos lisätään yksi haarautuma, niin V(G):n arvo kasvaa yhdellä V(G) riippuu vain verkon G haarautumista (valintarakenteesta) Suositus: kullekin aliohjelmalle: V(G) 10 28 Aliohjelmien kompleksisuus Halsteadin teoria Primitiivisiä mittoja: P: C C F1: F2: V ( P U F1 U F2 ) = 12 13 + 2 * 3 =5 V ( P ) = 1 V ( F1 ) = 2 V ( F2 ) = 2 n1 = erilaisten operaattoreiden määrä n2 = erilaisten operandien määrä N1 = operaattoreiden esiintymien kokonaismäärä N2 = operandien esiintymien kokonaismäärä joiden avulla voidaan laskea ohjelman pituus algoritmin vähimmäislaajuus (volume) ohjelman todellinen laajuus ohjelman taso (kuvaa kompleksisuutta) kielen taso (vakio kullekin kielelle) 29 30 5

Toimintopisteet (function points, FP) Kompleksisuuden lisäksi mittaa myös tuottavuutta Tuottavuutta (tai kustannuksia) ei aina kannata sitoa koodirivien määrään tuottavuus on erilainen eri ohjelmointikielille mittaustuloksia voidaan tarvita jo ennen koodin kirjoittamista Toiminnon tyyppi Toimintopistelomake Yksinkertainen Keskimääräinen Monimutkainen Syöttötoiminnot 3 * 4 * 6 * Tulostustoiminnot 4 * 5 * 7 * Kyselyt 3 * 4 * 6 * Sisäiset tiedostot 7 * 10 * 15 * Ulkoiset rajapinnat 5 * 7 * 10 * Toimintojen määrä (function counts, FC) Yht. 31 32 Järjestelmän ominaisuudet 1. Tarvitaanko järjestelmässä tietojen välistä kommunikointia? 2. Kuuluuko järjestelmään hajautettuja prosesseja? 3. Onko suorituskyky yykriittisessä asemassa? 4. Ajetaanko järjestelmää kuormitetussa ympäristössä? 5. Tarvitaanko reaaliaikaisia tietoja? 6. Vaatiiko reaaliaikaisten tietojen lukeminen useita ikkunoita tai operaatioita? 7. Päivitetäänkö kantatiedostot (master file) reaaliajassa? Vastataan asteikolla 0-5 33 Järjestelmän ominaisuudet (jatkuu) 8. Ovatko syötteet, tulosteet, tiedostot ja kyselyt monimutkaisia? 9. Onko järjestelmän sisäinen prosessointi monimutkaista? as a 10. Onko koodi suunniteltu uudelleenkäytettäväksi? 11. Sisältyvätkö konversio- ja asennussuunnitelmat järjestelmän suunnitteluun? 12. Onko järjestelmä suunniteltu helppokäyttöiseksi? 13. Tarvitaanko eri asennuspaketit eri käyttäjiä varten? 14. Onko järjestelmä suunniteltu mukautuvaksi käyttäjän mukaan? 34 Ominaisuuksien vaikutus Vaikutusaste Arvo Ei ollenkaan 0 Vähäinen vaikutus 1 Kohtalainen vaikutus 2 Keskimääräinen vaikutus 3 Merkittävä vaikutus 4 Vahva vaikutus 5 Kokonaisvaikutus (total degree of influence, TDI) Kokonaisvaikutus (TDI) Tietojen välinen kommunikointi Hajautetut funktiot Suorituskyky Kuormitettu ympäristö Reaaliaikatietojen siirtonopeus Reaaliaikatietojen syöttäminen Käytön tehokkuus Rajapintojen monimutkaisuus Prosessoinnin monimutkaisuus Uudelleenkäytettävyys Asennuksen helppous Käytön helppous Erilaiset asennuspaketit Joustavuus 35 36 6

Toimintopisteiden laskeminen Ominaisuuksien kokonaisvaikutus (TDI) maksimi = 5 * 14 = 70 keskimääräinen arvo = 35 Toimintojen määrä (FC) Toimintopisteet (FP) FP = FC * ( 0.65 + 0.01 * TDI ) Toimintopisteet eri kielissä Ohjelmointikieli LOC/FP (keskimäärin) assembly 320 C 128 Cobol 106 Fortran 106 Pascal 90 C++ 64 Ada95 53 Visual Basic 32 Smalltalk 22 SQL 12 37 38 Muita kompleksisuusmetriikoita Kokonaiskompleksisuus ohjelman kompleksisuus mitataan laskemalla yhteen aliohjelmien kompleksisuus k Aliohjelmien tai operaatioiden keskimääräinen kompleksisuus Aliohjelmien tai operaatioiden määrä LOC Kompleksisuusmetriikoiden vaatimuksia/ominaisuuksia Metriikalla täytyy olla riittävä erotuskyky esim. yksi tai kaksi arvoa eivät riitä Erotuskyky ei saa olla liian suuri esim. jokaiselle ohjelmalle tulee eri arvo Sama toiminnallisuus i voidaan kirjoittaa itt eri ohjelmiin, niin että ohjelmilla on eri kompleksisuus Ohjelman osan kompleksisuus ei voi olla suurempi kuin koko ohjelman kompleksisuus Ohjelman lauseiden järjestyksen vaihtaminen voi vaikuttaa kompleksisuuteen Muuttujan nimen vaihtaminen ei saa vaikuttaa kompleksisuuteen 39 40 Oliometriikat Luokkien väliset ja sisäiset yhteydet Yhteenkuuluvuus (cohesion) luokan/moduulin sisäinen yhtenäisyys Sidonnat (coupling) luokan/moduulin sidonnat toisiin luokkiin/moduuleihin Luokkahierarkiaan liittyvät metriikat Suositeltava: high cohesion low coupling 41 Hyväksyttä äviä Yhteenkuuluvuuden (koheesion) tasot (1/2) Toiminnallinen GetCustomerName ( ) operaatiolla on yksi, hyvin määritelty toiminto (tehtävä) Peräkkäinen toiminnot täytyy suorittaa tietyssä järjestyksessä DoStep1 ( ); toiminnot tarvitsevat samaa dataa DoStep2 ( ); mutta toiminnot eivät muodosta kokonaista tehtävää Viestintään perustuva toiminnot tarvitsevat samaa dataa mutta toiminnot eivät muuten liity toisiinsa Ajallinen GetNameAndChangePhoneNumber ( ) toiminnot suoritetaan samaan aikaan Startup ( ) 42 7

Vältettäv viä Yhteenkuuluvuuden (koheesion) tasot (2/2) Menettelytapoihin perustuva toiminnot suoritetaan tietyssä järjestyksessä mutta toiminnot eivät käytä samaa dataa /* get name */ /* get address */ /* get phone */ Looginen haluttu toiminto valitaan kontrollilipun perusteella ComputeAll ( ) Sattumanvarainen toiminnot eivät mitenkään liity toisiinsa Arviointikriteerit koko/määrä läheisyys Sidontojen arviointi Tiedon kulku parametrien välityksellä vs. globaalien muuttujien kautta näkyvyys joustavuus Tasot: operaatio välittää dataa toiselle operaatiolle operaatio kertoo toiselle, mitä pitää tehdä operaatiot käsittelevät samaa globaalia dataa 43 44 Esimerkkejä yksinkertaisista oliometriikoista Attribuuttien määrä Operaatioiden määrä julkisten operaatioiden määrä yksityisten operaatioiden määrä Sellaisten operaatioiden id määrä, ä jotka korvataan aliluokissa Aliluokkien lisäämien operaatioiden määrä Aliluokkien määrä Luokkahierarkian syvyys Luokan kompleksisuus operaatioiden kompleksisuuksien summa Lisää oliometriikoita Lyhenne Metriikka Tarkoitus LCOM Lack of cohesion in methods Yhteenkuuluvuus TCC Tight class cohesion Yhteenkuuluvuus DAC Data abstraction coupling Sidonnat CBO Coupling between object classes Sidonnat RFC Response for a class Sidonnat, kompleksisuus MPC Message passing coupling Sidonnat 45 46 attribuutti = jäsenmuuttuja, ilmentymämuuttuja operaatio = jäsenfunktio, metodi Yhteenkuuluvuuden mittaaminen LCOM Lack of Cohesion in Methods tarkastellaan luokan operaatioita ja niissä esiintyviä luokan attribuutteja operaatiot, t joissa viitataan t samaan attribuuttiin, ttii kuuluvat samaan joukkoon lasketaan, kuinka monta erillistä em. joukkoa löytyi LCOM = 1 LCOM = 1 Yhteenkuuluvuuden mittaaminen TCC Tight Class Cohesion toisiinsa yhteydessä olevien operaatioiden suhteellinen määrä operaatiot t ovat yhteydessä toisiinsa: ii jos ne viittaavat samaan attribuuttiin jos toinen kutsuu toista (suoraan tai epäsuorasti) näin saatu operaatioparien määrä (OP lkm ) suhteutetaan yhteyksien maksimimäärään (OP max ) OP max = n ( n 1 ) 2 TCC = OP lkm / OP max 47 48 8

Sidontojen mittaaminen DAC (data abstraction coupling) luokat voivat olla sidoksissa toisiinsa attribuuttien kautta sellaisten attribuuttien määrä, jotka ovat jonkin toisen luokan ilmentymiä iä (abstraktit tietotyypit) t t it) CBO (coupling between object classes) luokat voivat olla sidoksissa toisiinsa operaatioiden välityksellä luokan operaatiossa viitataan toisen luokan operaatioon tai attribuuttiin niiden luokkien määrä, joihin tarkasteltava luokka on sidoksissa 49 Sidontojen mittaaminen RFC (response for a class) niiden operaatioiden määrä, joita voidaan kutsua kutsuttaessa luokan operaatioita operaatioiden id kutsuketjuun k tj kuuluvat operaatiot t (sekä luokan sisäiset että ulkoiset) mittaa myös kompleksisuutta MPC (message passing coupling) operaatiokutsujen määrä luokassa Kuuluuko periytyminen sidontoihin? 50 Aliohjelmien väliset sidonnat Fan-in tarkastellaan aliohjelmaan tulevia kutsuja niiden aliohjelmien määrä, jotka kutsuvat jotakin tiettyä aliohjelmaa Fan-out tarkastellaan aliohjelmasta lähteviä kutsuja niiden aliohjelmien määrä, joita jokin tietty aliohjelma kutsuu Erottaminen (MPC ja fan-out) Fan-out = 1 MPC = 2 Fan-in = 2 A B C Fan-out = 1 MPC = 1 Fan-out moduulitasolla 51 52 Luokkahierarkiaan liittyviä metriikoita Luokkien välisten periytymissuhteiden mittaaminen Vanhimmat metriikat DIT (Depth of Inheritance Tree) NOC (Number of Children) Erikoistaminen ja uudelleenkäyttö Luokkahierarkia DIT (Depth of Inheritance Tree) pisimmän periytymispolun pituus luokasta sen kantaluokkaan (kantaluokkiin) kertoo, millä tasolla luokka on periytymishierarkiassa jos luokka on hyvin syvällä (DIT > 5), on vaikea nähdä, mitä attribuutteja ja operaatioita luokalla on huonontaa ylläpidettävyyttä 53 54 9

Luokkahierarkia NOP (Number of Parents) suorien kantaluokkien määrä yksittäisperiytyminen: NOP = 1 NOA (Number of Ancestors) kaikkien kantaluokkien määrä NOC (Number of Children) suorien jälkeläisten määrä NOD (Number of Descendants) kaikkien jälkeläisten määrä Luokkahierarkian indeksit Mittaa luokkien uudelleenkäytön suhdelukua Uudelleenkäyttöindeksi (U) = kantaluokkien määrä / luokkien kokonaismäärä Mittaa, kuinka hyvin kantaluokat kuvaavat järjestelmän abstrakteja ominaisuuksia Erikoistamisindeksi (S) = jälkeläisluokkien määrä / kantaluokkien määrä 55 56 Kloonimetriikat Copy-paste ohjelmoinnin määrän mittaaminen Kopioidun koodin (kloonien) tunnistaminen Esimerkkimetriikoita CC (Clone Coverage) CCL (Clone Classes) CI (Clone Instances) Metriikoita voidaan soveltaa nimiavaruuksiin/pakkauksiin, luokkiin, operaatioihin 57 else if ( instring ) { if ( ContainsSubstring ( line, index, @ \\ ) ) { return 2; else if ( ContainsSubstring ( line, index, \\\ ) ) { return 2; else if ( line [ index ] == ) { instring = false; return 1; else { return 1; Klooniesimerkki else if ( inchar ) { if ( ContainsSubstring ( line, index, @ \\ ) ) { return 2; else if ( ContainsSubstring ( line, index, @ \ ) ) { return 2; else if ( line [ index ] == \ ) { inchar = false; return 1; else { return 1; 58 Kloonimetriikat Tarvittavia parametreja kloonin minimipituus esim. LOC kloonin tunnistaminen täysi vastaavuus osittainen vastaavuus etsinnän laajuus operaatioiden rungot luokkien toteutukset Kloonipeittävyys CC (Clone Coverage) mittaa kopioidun koodin osuutta jossakin kokonaisuudessa (esim. luokassa, operaatiossa) jos operaatio on täysin kopioitu, CC = 1 voidaan tunnistaa eniten kopioidut koodin osat vaikuttaa ylläpidettävyyteen 59 60 10

Klooniluokat ja kloonien esiintymät Kloonin esiintymä (instance) kopioitu koodikatkelma (fragment) Klooniluokka ryhmä (melkein) identtisiä koodikatkelmia klooniluokka sisältää vähintään kaksi klooniesiintymää CI (Number of Clone Instances) CCL (Number of Clone Classes) HP-MAS HP-MAS (maintainability assessment system) arviointimalli ylläpidettävyyden mittaamiseksi Ylläpidettävyyden kolme ulottuvuutta: kontrollirakenne k kompleksisuus, kontrollivuo, modulaarisuus tietoalkioiden rakenne tietotyypit, tietovuo, globaalit muuttujat, I/O koodin ulkoasu tekstin asettelu, nimeämiskäytännöt, kommentointi 61 62 HP-MAS:n soveltaminen Kutakin kolmea ulottuvuutta arvioidaan sopivilla metriikoilla Metriikoilla on usein optimiarvoalue jos mitattu arvo sijoittuu rajojen sisälle, ylläpidettävyys on hyvä jos arvo sijoittuu arvoalueen ulkopuolelle, ylläpidettävyys on huono voidaan mitata suhteellinen poikkeama optimialueesta 63 HP-MAS:n soveltaminen Kunkin kolmen ulottuvuuden ylläpidettävyydelle lasketaan arvo (DM) Lopullinen ylläpidettävyysindeksi (MI) saadaan kolmen DM-arvon keskiarvosta tai tulosta vaihtelee välillä 0 1 (prosentteina 0-100) MI < 65: ylläpidettävyys on huono 65 MI < 85: ylläpidettävyys on keskinkertainen MI 85: ylläpidettävyys on hyvä 64 HPMAS-esimerkki Ennen muutosta Muutoksen jälkeen LOC 1,086.00 1,235.00 13.4 Moduuleiden määrä Kompleksisuus V(G) HPMASindeksi 13.00 15.00 15.4 226.00 255.00 12.8 88.17 88.61 0.4 Ero prosentteina 65 Ylläpidettävyyden kypsyysindeksi Vakaus eli julkistusversioiden väliset erot M T = moduulien nykyinen yy määrä F C = muuttuneiden moduulien määrä F A = lisättyjen moduulien määrä F D = poistettujen moduulien määrä M T ( F A + F C + F D ) SMI (kypsyysindeksi) = M T 66 11

Muita ylläpidettävyyden mittareita MTTR Mean Time to Repair Laskennassa tarvittavat tiedot: ongelman tunnistamiseen kulunut aika hallinnollinen viive ylläpitotyökalujen hankkimiseen kulunut aika ongelman analysointiin kulunut aika tarvittavan muutoksen määrittelyyn kulunut aika muutoksen toteuttamiseen kulunut aika sisältää testaukset ja tarkistukset Vielä lisää ylläpidettävyyden mittareita Muutosten tekemisen kokonaisaika suhteutettuna muutosten määrään Ratkaisemattomien ongelmien määrä Ratkaisemattomiin ongelmiin kulunut aika Sellaisten muutosten osuus prosentteina, jotka ovat aiheuttaneet uusia vikoja Niiden moduulien määrä, joita on jouduttu muuttamaan muutoksen toteuttamiseksi 67 68 Mittausprosessi (yhteenveto) Tavoite muutosten vaikutusten selvittäminen esim. huonorakenteisten ohjelman osien tunnistaminen laadun muuttuminen järjestelmän eri versioiden välillä Tarkentaminen/konkretisointi miten tavoitteet voidaan saavuttaa? miten päästään mitattaviin ominaisuuksiin? Mittaustulokset numeroiden liittäminen ominaisuuksiin tulosten tulkinta ja jatkomenettely Metriikoiden vaatimuksia Yksinkertaisia ja helposti laskettavia Tulokset intuitiivisesti pääteltävissä Yhtenäisiä ja objektiivisia Yksiköiltään yhtenäisiä ja järkeviä Riippumattomia ohjelmointikielistä Mittaaminen antaa viitteitä ominaisuuksista 69 70 Metriikkaetiketti Yksityiset metriikat Julkiset metriikat Käytä mittaustulosten tulkinnassa tervettä järkeä ja ota huomioon yritykselle ominaiset toimintatavat Anna säännöllistä palautetta mittausten suorittajille Älä käytä metriikkoja palkitsemisen perusteena Älä käytä ä metriikkoja uhkailemiseen i Aseta selvät päämäärät ja käytä metriikkoja apuna päämäärien saavuttamiseksi Metriikkoja, jotka paljastavat ongelmia, ei pidä pitää negatiivisina; ne vain osoittavat kohdan, jossa prosessia pitäisi kehittää Älä tukeudu jääräpäisesti yhteen metriikkaan jättämällä muut tärkeät metriikat huomiotta 71 12