Ohjelmiston laatu

**Ohjelmiston laatu** (vrt. laatu) mittaa ohjelmistotuotannossa sitä, kuinka hyvin tietokoneohjelma tai ohjelmisto on suunniteltu (*suunnittelun laatu*), ja kuinka hyvin toteutettu ohjelmisto noudattaa suunnitelmaa (*suunnitelmanmukaisuus*).  Siinä missä *suunnitelmanmukaisuus* keskittyy toteutukseen – siis vastaako ohjelmisto suunnitelmaa – *suunnittelun laatu* mittaa, kuinka kelvollisia suunnitelma ja määrittelydokumentin vaatimukset ovat onnistuneen ohjelmistotuotteen laatimiseen.

Ohjelmiston laatu voi viitata joissakin asiayhteyksissä myös *loppukäyttäjien subjektiiviseen kokemukseen ohjelmiston laadusta*.  Ohjelmistojen loppukäyttäjillä voidaan tarkoittaa yksittäistä ohjelman käyttäjää tai käyttäjäryhmää, jolla on välitön yhteys ohjelmiston tarjoaman käyttöliittymän kautta itse ohjelmistoon. Ohjelmistojen loppukäyttäjällä voidaan tarkoittaa myös institutionaalista loppukäyttäjää, jolloin loppukäyttäjän rooli on yhteisöllinen, kuten esimerkiksi ohjelmiston tilaajaorganisaatio. Ohjelmistoihin liittyvät laatukokemukset voivat vaihdella suuresti riippuen loppukäyttäjän asemasta ja koetut laatuhavainnot voivat poiketa paljon riippuen siitä, käsitelläänkö laatukäsitettä institutionaalisesti tai yksilön näkökulmasta.

Yksilötasolla ohjelmistojen laatukäsite syntyy ohjelmistoon ja sen tuottamiin suoritteisiin tai ohjelmistoon liittyvän palvelutuotannon kautta, jolloin ohjelmistoon välittömässä yhteydessä oleva loppukäyttäjä voi tehdä tarkasteluita ohjelmistoon liittyvien ympäristömuuttujien avulla. Yksilötason loppukäyttäjien laatukäsitteet liittyvät hyvin pitkälle ohjelmiston tuottamiin operatiivisiin suoritteisiin. Institutionaalisella tasolla ohjelmistojen laatukäsite vastaa suurempaa kokonaisuutta, johon liittyvät usein institutionaalisella tasolla ohjelmistoihin sekä niiden taustatekijöihin liittyvät strategiset ja taktiset kysymykset. Näiden laatukäsitteiden tulkitseminen on usein huomattavasti vaikeampaa, koska niihin liittyvää havainnointia ja laatuarviointia ei voida suorittaa välittömien havaintojen perusteella. Strategisella tasolla ohjelmistojen laatukäsite voi liittyä asiakasorganisaation strategian asettamiin tavoitteisiin tai vaatimuksiin, mutta taktisella tasolla ohjelmistojen laatua voidaan arvioida keinona, millaisen keinon tai ratkaisun ohjelmisto pystyy tuottamaan ja millaisia vaatimuksia se asettaa organisaation strategisen tason toteuttamiseksi ja miten ohjelmisto sopii asiakasorganisaation operatiiviseen toimintaan ja vaatimuksiin.

Eräs perinteinen laatumääritelmä niin ohjelmistotuotannossa kuin muussakin teollisuudessa on Philip B. Crosbyn esittämä kuvaus "laatu tarkoittaa yhteensopivuutta vaatimusten kanssa". Toinen yleinen lähtökohta laatuajattelulle on Joseph Juranin määritelmä, jossa laatu kuvataan "sopivuudeksi käyttötarkoitukseensa".

## Ohjelmiston laadun tekijöitä
* Käytettävyys
* Käyttäjäkokemus
* Laajennettavuus
* Luotettavuus
* Oikeellisuus
* Siirrettävyys
* Skaalautuvuus
* Standardinmukaisuus
* Tehokkuus
* Tietoturvallisuus
* Vikasietoisuus
* Virheettömyys
* Ylläpidettävyys

## Lähdekoodin laatu
Tietokone ei tunne käsitettä "hyvinkirjoitettu koodi", mutta ihmisnäkökulmasta katsottuna lähdekoodi voidaan kirjoittaa tavalla, joka helpottaa koodin ymmärrettävyyttä.  Ohjelmointia varten on olemassa lukuisia tyylioppaita: tyypillisesti jokaiselle ohjelmointikielelle on omansa, mutta tyylikäytännöt voivat vaihdella myös ohjelmistoprojektien välillä.  Tyylioppaissa painotetaan usein koodin luettavuutta, joten ohjeiden noudattamisella on vaikutuksensa koodin ylläpidettävyyteen ja uudelleenkäytettävyyteen.

Lähdekoodin laatuun on mahdollista vaikuttaa myös käyttämällä valmiita komponentteja, jotka ovat jo aiemmin käyneet läpi laadun parantamiseen tarkoitetut toimenpiteet. Ohjelmistokehysten avulla koodin uudelleenkäyttö toteutuu helposti. Kehysten käyttö parantaa mm. Changin  mukaan myös järjestelmäarkkitehtuurin laatua.

Koodin laatuun vaikuttavat:
* Luettavuus
* Ylläpidettävyys, testattavuus, siirrettävyys
* Yksinkertaisuus – koodin vähäinen kompleksisuus
* Vähäiset resurssivaatimukset: tietokoneen työmuistin ja prosessointitehon kulutus
* Kääntäjän ilmoittamien varoitusten määrä
* Vahva syötteiden tarkastus ja virheiden käsittely

Tapoja lähdekoodin laadun parantamiseen:
* Koodin katselmointi
* Lähdekoodin dokumentointi
* Modulaarisuus
* Ohjelmistokehysten käyttäminen soveltuvin osin
* Refaktorointi

## Ohjelmiston luotettavuus
Ohjelmiston luotettavuus on tärkeä tekijä, joka tarkoittaa "todennäköisyyttä ohjelmiston virheettömään toimintaan määrätyssä ympäristössä tiettynä aikana".

Ohjelmiston luotettavuuden tunnistettavia piirteitä ovat objektiivisuus, mitattavuus ja estimoitavuus – sen sijaan ohjelmiston laatu on monilta osin subjektiivinen vertailuperuste.

## Laadunhallinta
* Ohjelmiston julkaisuelinkaari
* Laadunvarmistus
* Riskienhallinta
* Tuotteen elinkaaren hallinta

## Katso myös
* ISO 9126
* Ohjelmistotuotanto
* Projektinhallinta
* Tuotekehitys

## Lähteet

## Kirjallisuutta
* 
*  

## Aiheesta muualla
* Global Association for Software Quality.
* [ftp://cs.joensuu.fi/pub/Theses/2005_MSc_Kipponen_Teemu.pdf "Ohjelmiston laadun parantaminen puutemittareiden avulla"], Teemu Kipponen, Pro gradu -tutkielma, 2005 (viitattu 6.9.2009).