Testaus Korppi-kehityksessä. Panu Suominen THK / JYU

Samankaltaiset tiedostot
Test-Driven Development

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Test-Driven Development

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

Automaattinen yksikkötestaus

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi

4. Luokan testaus ja käyttö olion kautta 4.1

1 Tehtävän kuvaus ja analysointi

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

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

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

JUnit ja EasyMock (TilaustenKäsittely)

Työkalut ohjelmistokehityksen tukena

Advanced Test Automation for Complex Software-Intensive Systems

Harjoitustyön testaus. Juha Taina

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Testivetoinen ohjelmistokehitys

Tekniikka ja kehittäminen Minna Hillebrand Pauli Kujala

Avointen ohjelmistojen käyttö ohjelmistokehityksessä

Tapahtuipa Testaajalle...

Olio-ohjelmointi Javalla

UCOT-Sovellusprojekti. Testausraportti

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

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

58160 Ohjelmoinnin harjoitustyö

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Mikä yhteyssuhde on?

Lohtu-projekti. Testaussuunnitelma

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

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

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Onnistunut SAP-projekti laadunvarmistuksen keinoin

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

@Tampereen Testauspäivät ( )

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

Yhteisöllisen tuotekehyksen avoin verkkolaboratorio. Asta Bäck

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Tutkittua tietoa. Tutkittua tietoa 1

P e d a c o d e ohjelmointikoulutus verkossa

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

5. HelloWorld-ohjelma 5.1

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

Tietokannat II -kurssin harjoitustyö

Jyväskylän yliopisto, Sovellusprojektien kokoustila AgC Alasalmi Teija (puheenjohtaja)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

KÄYTETTÄVYYSTESTAUS OSANA KETTERÄÄ KEHITYSTÄ

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

Testidatan generointi

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Sisällys. 15. Lohkot. Lohkot. Lohkot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Ohjelmointi 2, välikoe

T Projektikatselmus

Testauksen hallinta Testaustyökalut Luento 7 Antti-Pekka Tuovinen

Ohjelmointi 2 / 2011 Välikoe / 25.3

T Projektikatselmus

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

Luku 8 Rakennusvaihe. Detailed Design. Programming. Moduulisuunnittelu. Ohjelmointi

Testauksen hallintaa teekkareille (ja muille kiinnostuneille) Arto Stenberg

Javan perusteita. Janne Käki

Ohjelmoinnin perusteet, syksy 2006

5. HelloWorld-ohjelma 5.1

Rajapinta (interface)

Uusilla konsepteilla oikeanlaisia palveluita Helsinkiin

Luokat ja oliot. Ville Sundberg

Scrumin käyttö ketterässä sovelluskehityksessä

Metodien tekeminen Javalla

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat

T Projektikatselmus

Eclipse ja JUnit-ohjelmoijatestit

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Tietokannat II -kurssin harjoitustyö

Mihin kaikkeen voit törmätä testauspäällikön saappaissa?

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Lakki. Lisää ot sik k o osoit t am alla. Nöyrästi vain lakki kourassa... Jussi Vänskä Espotel Oy. vierailuluentosarja OTM kurssi 2010

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

KADA (Drupal 7) migraatio uuteen (versioon) webiin

Testauksen tuki nopealle tuotekehitykselle. Antti Jääskeläinen Matti Vuori

Java ja grafiikka. Ville Sundberg

Arkkitehtuurien tutkimus Outi Räihä. OHJ-3200 Ohjelmistoarkkitehtuurit. Darwin-projekti. Johdanto

Interaktiivinen tarinankerronta

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Pakkauksen kokoaminen

15. Ohjelmoinnin tekniikkaa 15.1

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

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

Transkriptio:

Testaus Korppi-kehityksessä Panu Suominen THK / JYU

Sisältö Käydään lävitse Korpin testaukseen ja laatuun vaikuttavia tekijöitä.

Mikä ihmeen Korppi? Jyväskylän yliopiston opintotietojärjestelmä Käytännössä kehittynyt opiskeluun liittyvien asioiden portaaliksi. Java Servlet -tekniikkaa käyttävä isohko www-sovellus. 3 133 luokkaa, 265 056 riviä koodia. Noin 800 jsp-sivua, 140 000 riviä tekstiä. Kehittäminen aloitettu vuonna 2000. Kehittäminen on ollut pitkälti opiskelijaprojektien vastuulla.

Organisaation kehittyminen 1. Opiskelijaprojektit jatkoivat siitä, mihin edellinen jäi. Tietotaidon nollaantuminen puolivuosittain. 2. Eri rahoista palkatut tekijät toteuttivat aikalailla itsenäisesti palkanmaksajiensa toiveita. Yhteistyö hankalaa. 3. Kehittäminen siirtyi THK:lle. Epäselvää kuka päättää, mitä kehitetään. 4. Tilaaja-tuottaja -mallia otetaan THK:ssa käyttöön.

Ketkä tekevät? Kehitys tapahtuuu tietohallintokeskuksen kehittämispalveluiden alaisuudessa. Projektipäällikko Petri Heinonen 7 kehittäjää / 2 asiakaspalvelussa: Teija Alasalmi Antti Hedlund Kirsi Koponen Pauli Kujala Ilari Liukko Kari Patana Harri Pitkänen Panu Suominen

Miten tehdään? Ketterää kehitystä Scrum on pyrkimyksenä Käytössä 1 viikon iteraatot. Asiakaspalveluvuorojen vaihtaminen viikoittain Kehittämisvuorossa oleville työrauha. Kosketus käyttäjiin säilyy kaikilla. Myös kehittäjät joutuvat käyttämään järjestelmää.

Entäs se testaus? Automaattiset yksikkötestit TDD n. 3 300 kattavat noin 10% koodista Testataan käsin Päivityksen yhteydessä (2 kk välein) Vie vajaan viikon koko ryhmältä

Miten tähän on tultu? Ohjelmiston kehityksessä on tehty iso liuta vääriä valintoja. Organisaatiolla on iso merkitys siihen kuinka testaus onnistuu. Korpin tapauksessa testausta on alettu huomioimaan vasta viimeaikoina.

Organisatio luo puitteet testaukselle

Tilaaja-tuottaja -malli Tilaaja tulee rahojen ja vaatimusten kanssa. Tuottaja vie rahat ja tuottaa asiakkaan tilaaman järjestelmän. Koska tilaaja on tarkka rahoistaan tuotoksesta ollaan yleensä hyvin kiinnostuneita.

Yliopisto ohjelmiston tilaajana Rahat ovat yhtäaikaa ei kenenkään ja yhteisiä. Raha ei tule suoraan liiketoiminnasta, joten ostoksia ei ohjaa liiketoiminallinen hyöty. Yleensä kunnolla tehty ominaisuus olisi yliopiston kannalta halvempi vaihtoehto, mutta yksittäisen tilaajan kannalta kalliimpi. Rahat tulevat lopulta vain yhdeltä asiakaalta: yliopistolta. Kuka edustaa opiskelijoiden tarpeita? Tilaaja ja loppukäyttäjä voivat olla hyvin erillään toisistaan.

Yliopisto ohjelmiston tuottajana Ohjelmistokehitys ei ole ydinliiketoimintaa Ulkoistamisen tai lopettamisen vaara Lyhyet työsuhteet Tiedon katoaminen työntekijöiden vaihtuessa. Mielenkiinnon puute lopputulosta kohtaan. Johtamiskulttuurin puuteet Kuka vastaa mistäkin? Kuka hyväksyy lopputuloksen? Projektoinnin ongelmat Työntekijöillä monta rautaa tulessa. Oikea käsi ei tiedä, mitä vasen tekee. Resurssien suuntaaminen oikein.

Seurauksia Sekava projektimalli tai sen puuttuminen kokonaan Kuka määrää, mitä tehdään? Ketkä ovat tekemässä samaa asiaa? Milloin pitää olla valmista? Epäselvät vaatimukset Mistä tiedän, kuinka testaan ominaisuuden X? Huonot käytänteet Miten ehdin korjata aikaisemmat töppäykset? Vähäinen mielenkiinto lopputulosta kohtaan Miksi miettisin testejä, jos vähempikin riittää?

Mitä tästä opitaan? Organisaation pitää tukea (vaatia) testausta tai se jää tekemättä. Suunnitteleminen pitää aloittaa testaamisesta. Testauksen vaatiminen on osa kehittäjän ammattitaitoa.

Testejä on monenlaisia

Jos koodi on suunitelma * Perinteinen teollisuus Ohjelmistoteollisuus Suunnittelu Halpaa, yleensä ennustettavaa Kallista, hidasta ja epävarmaa Rakentaminen Kallista, yleensä hidasta. Tehdään kerran. Käytännössä ilmaista, erittäin nopeaa. Tehdään jatkuvasti. Testaaminen Suunnitelmien testaaminen (simulointi, prototyypit) tärkeää. Varmistusvirheiden eliminointi. Testaaminen keskittyy rakennettuihin osiin. Koodia itsessään harvemmin testataan. Rakennusvaiheen valmistusvirheet erittäin harvinaisia.

Miksi kannattaa testata? Auton rakentamisen jälkeen tiedetään: Auto näyttää siltä, miltä suunniteltiin (tai ei näytä) Ohjelman kääntämisen jälkeen tiedetään: Suunnitelmassa ei ollut syntaksivirheitä.? Testaaminen on ainoa tapa tunnustella, että ohjelmassa on kaikki paikallaan.

Testaaminen käsin Mahdollisuus löytää aivan uusia virheitä. Ainoita tapoja testata käytettävyyttä. Jos olisi vaihtoehtoja, emme käyttäisi. Esiintyneitä ongelmia: Vaikea toteuttaa kerta toisensa jälkeen samanlaisena. Jos virheitä ei sada korjattua, motivaatio katoaa. Vie tolkuttomasti aikaa.

Automaattiset testit Estää vanhojen vikojen uudelleen syntymisen. Mahdollistaa nopeat muutokset. Vapauttaa rutiinityöstä. Kehittäjän paras kaveri. Vaatii työtapojen ja työkalujen kehittämistä.

Tekniikka ja työkalut

Kääntäminen 1. Koodit alunperin samassa rakenteessa kuin ajettaessakin. Lisäksi epästandardeja käytänteitä (linkkejä). javac WEB-INF/classes <- ei toimi /usr/local/bin/korppi/fixlinks.sh cp -r * /usr/local/tomcat/webapps/korppi rm -Rf /usr/local/tomcat/webapps/korppi/doc cd /usr/local/tomcat/bin./startup.sh

Kääntäminen 2. Koodit eri rakenteeseen kuin ajettaessa Työkalujen parempi tuki ant package jar -xf kotka.war /tmp/korppi /usr/local/bin/korppi/fixlinks.sh /tmp/korppi mv /tmp/korppi /usr/local/tomcat/webapps/korppi cd /usr/local/tomcat/bin./startup.sh

Kääntäminen 3. Siirryttiin standardiin tapaan mvn tomcat:run

Työkalut aluksi CVS Java 1.4 Tomcat 3.2.3 JBuilder?

Työkalut nyt SVN Java 6.0 Tomcat 6.0 Eclipse / Netbeans TestNG (testaus) Maven (kääntäminen ja projektin hallinta) Selenium (selaimen kauko-ohjaus) Hudson (integrointipalvelin) Sonar (metriikoiden tarkkailu työkalu)

Automaattitestien kehittyminen Aluksi satunnaisia testejä joillekin paloille Ei koottua tapaa ajamiseen. Ajoajat hyvin vaihtelevia. Myöhemmin näistä on ollut lähinnä vain haittaa. Nyt Yksikkötestit. Testit pyritään tekemään ennen varsinaista koodia. Ensimmäiset automaattiset käyttöliittymätestit. Ongelmia Tietokantaa käyttävät testit.

Havaintoja automaattitesteistä Testien tulisi olla helposti ajettavia ja nopeita. Lopputuloksen tulisi olla selkeä lopputulos. Testien käyttämiseen ja kirjoittamiseen on oltava käytänteet. Jos muut sivuuttavat testit, niistä ei ole paljoa hyötyä. Testin pitäisi vastata selkeästi kysymykseen, mitä testattava asia tekee. Koodin pitää olla luettavaa. Painostaa hyviin suunnittelumalleihin. Testien vuoksi koodia on jossakin määrin uudelleen käytettävää.

Single Responsibility Principle Yksi olio ohjelmoinnin periaatteista Robert C. Martin mukaan. Luokalla vain yksi vastuu ja syy muuttua. Monta vastuuta altistaa luokan muutoksille useammin.

SRP: Ei vastuita ollenkaan class { private int x; public int getx(){ return x; } public void setx(int newx){ this.x=newx; } } Voidaan käytetään tiedonsiirtoon ohjelman eri osien välillä. Mitä etuja? Ei tarvitse testata? Vähentää metodien parametrien määrää. Selkeyttää koodia... Mitä ongelmia?

SRP: Ei vastuita ollenkaan Luokan sisältämän datan eheyden tarkistaminen siirtyy helposti muiden vastuulle. Copy-paste -koodi Testeissä samat tarkistukset eri luokille. Ajettavissa luokissa samaa koodia. Luokka vuotaa todennäköisesti ulospäin toteutuksen yksityiskohtia. Voidaan yleensä välttää rajapintojen käytöllä.

SRP: Monta vastuuta /* Represents addition of multiple integers. */ class IntegerAddition { Collection<Integer> terms =..; public void addterm(int number){..} public void int dothemath(){..} /* Save to the database */ public void save(){..} } /* Load from the database */ public static IntegerAddition load(int id){..} Etuja? Haittoja?

SRP: Monta vastuuta Lopputuloksena on monimutkainen luokka Useat vastuut lisäävät koodirivien määrää. Samaan asiaan liittyvät osat hajaantuvat helposti ympäriinsä (esim. tietokannan käsittely yhden paikan sijasta monessa) Testaaminen hankalaa. Luokka on riippuvainen tietokanan käsittelyyn liittyvästä koodista.

Muita testauspainajaisia Riippuvuudet luokkien toteutuksista rajapintojen sijaan. Ja kaikki, mikä rikkoo SOLID-sääntöjä. Suorat ulkoisten resurssien käyttämiset, staattiset luokat, muuttujat yms. Moniajoon liittyvät ongelmat.

Lopuksi Testauksen kehittäminen on organisaation, työtapojen, työkalujen sekä koodin kehittämistä. Testaus ei elä yksinään. Testien kirjoittaminen ei käy luonnostaan. Ohjelma ei ole valmis ilman kunnollisia testejä.