Testaus teoriassa ja käytännössä Jukka Paakki Helsingin yliopisto Tietojenkäsittelytieteen laitos
Teoria = tutkimus IEEE Transactions on Software Engineering, 2000-2002 Software Testing, Verification & Reliability, 2000-2002 International Symposium on Software Testing and Analysis, 1998-2000
virhetiheyden arviointi capture-recapture-menetelmällä virhetiheyden ennustaminen ohjelmiston muutoshistorian avulla virhehajonnan ja suoritushahmojen yhteisvaikutuksen simulointi vikojen välisten riippuvuuksien teoretisointi testikattavuuden salattu osoittaminen salakirjoitustekniikoilla optimaalinen tietovuokattavuus rinnakkaisohjelmien all-du-polkukattavuus optimaalinen ekvivalenssiluokitus rajapintojen mutaatiotestaus olioperustaisten testausmenetelmien tehokkuuden arviointi mutaatiomenetelmällä mutaatio-operaattorien tehokkuus C-ohjelmien yksikkö- ja integrointitestaus mutaatiomenetelmin C-ohjelmille riittävät mutaatio-operaattorit
GUI-testitapausten automaattinen generointi source-to-source-kääntäjien testitapausten generointi testitapausten automaattinen generointi rajapintavirheitä varten testitapausten automaattinen generointi geneettisillä algoritmeilla testitapausten automaattinen generointi rajoitelaskennalla testitapausten automaattinen generointi rajoitelogiikkaohjelmoinnilla ja symbolisella laskennalla testijonojen generointi propositiologiikalla parametrijoukon kattavien testitapausten automaattinen generointi testiaineiston generointi Z-spesifikaatiosta luokkien testiajureiden generointi testitapausten valinta ja generointi spesifikaation avulla tilakoneiden testitapausten valinta testitapausten satunnaisvalinnan ja ekvivalenssiluokituksen vertailu testiaineiston ja testitapausten minimointi
regressiotestauksen tehokkuuden ennustaminen regressiotestauksen testitapausten priorisointi regressiotestitapausten automaattinen generointi kontrollivuomenetelmien rajoitukset regressiotestitapausten valinnassa regressiotestausvirheiden ja ohjelmistoversioiden välisten erojen empiirinen vertailu C++-ohjelmien regressiotestitapausten valinta rinnakkaisohjelmien viipalointi ehdollinen viipalointi ekvivalenssiluokkien testaamiseen ekvivalenttien mutanttien tunnistaminen viipaloinnilla (Javan) poikkeusmekanismien testaus osoittimien tietovuoanalyysi
GUI-järjestelmien visuaalinen testausympäristö testauksen hallinta bayeslaisilla graafisilla malleilla luokkien automatisoitu testaaminen UML-pohjainen automatisoitu integrointitestaus automaattinen virheidenetsintä simuloidulla jäähdytyksellä haara- ja tietovuokattavuustestauksen sekä mustalaatikkotestauksen vertailu suhteessa luotettavuuteen spesifikaation ja toteutuksen välisen vastaavuuden formaali tarkistaminen onko todistaminen edullisempaa kuin testaaminen? formaalin spesifioinnin ja testaamisen yhdistäminen virheiden löytäminen rajoitelaskennalla eri virheenpaljastusmenetelmien yhdistetty malli
Käytäntö = teollisuus (Yrityksissä tehdyt) pro gradu tutkielmat, Helsingin yliopisto, tietojenkäsittelytieteen laitos, 1999-2002
ohjelmistojen luotettavuuden mittaaminen hajautettujen järjestelmien suorituskyvyn mallintaminen ja analysointi hajautetujen sovellusten suorituskyvyn testaus lokianalyysi osana hajautettujen järjestelmien virheenhallintaprosessia Web-sovellusten suorituskykymittaukset
DX 200 puhelinkeskuksen suorituskyvyn mittaaminen puhelinkeskuksen reaaliaikatietokannan kapasiteettitestaus IPv6-protokollan toimintotestaus DX 200 puhelinkeskuksessa OSPF:n protokollatestaus DX 200 järjestelmässä TTCN ja ASN.1 protokollien testauksessa eräiden sulautettujen järjestelmien vikadiagnostiikka testauksen automatisoinnin prosessi automatisoitu testaus XP-menetelmässä + olio-ohjelmien automaattinen testaaminen ohjelmiston kompleksisuuden ja ylläpidettävyyden välisen korrelaation analysointi virhetietokannan avulla
Teoria (tutkimus) käytäntö (teollisuus) Tutkimus tieteelliset ongelmat uudet tieteelliset tulokset syvällisyys, yleisyys, teoreettinen perusta radikaalisti uudet menetelmät malli / menetelmä ratkaiseva, ei toteutus tiedeyhteisö itse päättää laadusta sisäisesti Teollisuus liiketoiminta uudet myytävät tuotteet nopeus, toimivuus, peritty kohdeympäristö konservatiivisesti varmat menetelmät toteutus ratkaiseva, ei malli / menetelmä ulkoinen asiakaskunta päättää laadusta
Miksi yliopistoissa ei tutkita mitään järkevää (käytännöllistä)? käytännöllisyys kuuluu yrityksille, ei yliopistoille käytännön toteutuksia (tuotteita) kehittävä yliopisto olisi normaali yritysalihankkija eikä tutkimuslaitos ja tekisi siten väärää työtä käytännön ongelmat liian lyhytnäköisiä, suppeita, teknispainotteisia ja vain tiettyyn järjestelmään sidottuja (eli melko tylsiä) kelvatakseen tutkijoille tieteellisiksi tutkimuskohteiksi kukapa muukaan sitten tuottaisi suuria ideoita?
Kokemuksia teorian käytännöstä yritykset odottavat tutkijoiden ratkaisevan joko mahdottomia ongelmia tai niiden itsensä ongelmia usein ongelma on oikea, mutta ratkaisu väärä (esimerkkinä formaalit ohjelmistomenetelmät) usein ratkaisu on ok, mutta ei se toimi meidän ympäristössä (esimerkkeinä kaikki CASE-työkalujen prototyypit) yritykset haluavat tutkijoilta sekä ongelman ratkaisun että sen käytännössä toimivan toteutuksen ja lisäksi molempien viemisen yritysten liiketoimintaprojekteihin, mikä on mahdoton tehtävä käytännön ihmiset eivät tunne tutkimustyön tieteellisiä taustoja ja tavoitteita, jolloin lopputulostakaan ei oikein ymmärretä teorian saaminen teollisuuden hyötykäyttöön kestää vähintään 20 vuotta (eikä hyödyistä ole sitä ennen täyttä varmuutta) D.L. Parnas: On ICSE s Most Influential Papers. ACM SIGSOFT Software Engineering Notes 20, 3, 1995, 29-32.
Teoria (opetus) = käytäntö (teollisuus) pyritään opettamaan, miten asiat pitäisi tehdä (eikä, miten ne teollisuudessa tehdään) materiaali oppikirjoista, joihin se on suodatettu tieteellisistä artikkeleista ei tuoreimpia tutkimustuloksia, vaan kypsempiä ja paremmin tunnettuja käytäntöjä vähän käytännön oppikirjoja ei voida opettaa yritysten tapoja, vaan se jää niiden omalle vastuulle teollisilla luennoijavierailla useimmiten suppea näkökulma, mikä ei miellytä opiskelijoita?
Esimerkki 1: Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistotuotanto prosessina Ohjelmiston laatu ja sen mittaaminen laadun komponentit sisäisten attribuuttien mittaaminen ulkoisten attribuuttien mittaaminen resurssien käytön mittaaminen Ohjelmistotuotannon prosessimalleja ISO 9000 SPICE (Software Process Improvement and Capability determination) CMM (Capability Maturity Model) PSP (Personal Software Process) TSP (Team Software Process) Kevytprosessit (Extreme Programming) PSP-harjoituksia
Esimerkki 2: Ohjelmistojen testaus Ohjelmistojen laatukäsite Tarkastukset Testauksen ominaispiirteet ja rooli ohjelmistokehityksessä, V-malli Testausprosessi ja työkalut Toiminnallinen mustalaatikkotestaus (black-box) Rakenteellinen lasilaatikkotestaus (white-box) Integrointitestaus Regressiotestaus Tilastollinen testaus Testauksen käytännön ongelmia Laaja harjoitustyö
Teoria + käytäntö = Empiirinen (testaus)tutkimus tutkitaan, miten tietty prosessi, menetelmä tai työkalu toimii käytännön projekteissa tutkitaan : käytetään tieteellisiä menetelmiä käytännön projekteissa : kohteena jonkin tietyn yrityksen normaali projekti tai ohjelmistotuote tutkijat joko yrityksen omaa väkeä tai yliopistosta tulleita ulkopuolisia tarkkailijoita ja asiantuntijoita projektin läpivienti yrityksen toimesta, lisänä tutkimusosuus + teollisuus saa uskottavaa faktaa kehitystyönsä tueksi + tutkijat saavat validoitua (omia) tutkimustuloksia vaatii panostusta yritykseltä tulosten julkistaminen saattaa paljastaa liikesalaisuuksia
Teoria + käytäntö = Empiirinen (testaus)tutkimus Esimerkki 1: Yrityksen työntekijän pro gradu Satu Antikainen (Tellabs): The Effect of Internal Product Metrics on the Maintainability of Complex Software Products. Pro gradu C- 2002-10, Helsingin yliopisto, tietojenkäsittelytieteen laitos, 2002. Esimerkki 2: Tieteellinen empiirinen (kooste)artikkeli S.C. Ntafos: On Comparisons of Random, Partition, and Proportional Partition Testing. IEEE Transactions on Software Engineering 27, 10, 2001, 949-960.