9. Luento: Ohjelmistotyö. Tommi Mikkonen, tommi.mikkonen@tut.fi



Samankaltaiset tiedostot
Arto Salminen,

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

9. Ohjelmistotyö. 9.1 Johdanto

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

2 Konekieli, aliohjelmat, keskeytykset

Testauksen hallinta Testaustyökalut Luento 7 Antti-Pekka Tuovinen

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Tapahtuipa Testaajalle...

OHJ-4301 Sulautettu Ohjelmointi

Convergence of messaging

Sähköpostitilin käyttöönotto. Versio 2.0

14. Luento: Kohti hajautettuja sulautettuja järjestelmiä. Tommi Mikkonen,

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Harjoitustyön testaus. Juha Taina

Simulaattoriavusteinen ohjelmistotestaus työkoneympäristössä. Simo Tauriainen

Rakennusautomaation käytettävyys. Rakennusautomaatioseminaari Sami Karjalainen, VTT

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Tommi Mikkonen,

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Automaattinen regressiotestaus ilman testitapauksia. Pekka Aho, VTT Matias Suarez, F-Secure

MAKING MODERN LIVING POSSIBLE. Danfoss Link SCM Simple Communication Module Asennusohje. Danfoss Heating Solutions

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

Testaus ja säästöt: Ajatuksia testauksen selviämisestä lama-aikana

Käyttöjärjestelmän rakenne

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

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

6. Luento: Skedulointi eli Vuoronnus. Tommi Mikkonen,

Uuden vieritestin käyttöönotto avoterveydenhuollossa

TESTIRAPORTTI - VYM JA KANTA Virtuaaliyhteisöjen muodostaminen Versio 1.0

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

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Automaattinen yksikkötestaus

4. Lausekielinen ohjelmointi 4.1

UML -mallinnus TILAKAAVIO

T Tietojenkäsittelyopin ohjelmatyö. Testisarja Ray tracing. Tietokonegrafiikka-algoritmien visualisointi. Testisarja Ray tracing

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

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

Harjoitus 1 -- Ratkaisut

Arto Salminen,

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

Test-Driven Development

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

Ohjelmiston testaus ja laatu. Testaustasot

Kontrollerin sisäisten komponenttien käytöstä. Vielä vähän asiaa sisäisten lohkojen käytöstä

EXI-1000/RVK EXI-2000/RVK VALVONTAKESKUS ASENNUS- JA KÄYTTÖOHJE

Väylät. Prosessorin tie ulkomaailmaan Pienissä järjestelmissä vain yksi väylä. Osoite, data ja ohjaussignaalit Prosessori ainoa herra (master)

tsoft Tarkastusmenettelyt ja katselmukset Johdanto Vesa Tenhunen

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

Systemaattinen apina ja miten se tehdään fmbt:llä

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

Agenda. Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali Harjoitustyöt Demoharjoitus Tentti ja arvostelu Muuta?

Elektroninen ohjausyksikkö

AS Automaatio ja systeemitekniikan projektityöt A13 10 Radio ohjattavan pienoismallin ohjausjärjestelmän ja käyttöliittymän kehittäminen

SEPA-päiväkirja: Käytettävyystestaus & Heuristinen testaus

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

A4.1 Projektityö, 5 ov.

LIITE. asiakirjaan. komission delegoitu asetus

S11-09 Control System for an. Autonomous Household Robot Platform

OHJ-4301 Sulautettu Ohjelmointi

Robottien etäohjelmointiprojektin toteutus

EUREFin vaikutukset organisaatioiden tietojärjestelmiin

Uudelleenkäytön jako kahteen

Ohjelmointi 1. Kumppanit

KONEAUTOMAATION LAATU JA TURVALLISUUS Marko Varpunen

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

VARASTOINTI / INVENTOINTI

etunimi, sukunimi ja opiskelijanumero ja näillä

Maventa Connector Käyttöohje

Projektisuunnitelma Viulu

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ

Ohjelmistojen mallintaminen, mallintaminen ja UML

3. Luento: Muistin hallinta. Tommi Mikkonen,

@Tampereen Testauspäivät ( )

Rinnakkaistietokoneet luento S

Oodin versiot, havaittujen virheiden korjaus sekä kehitysehdotusten eteneminen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Ohjelmiston testaus ja laatu. Testaus käytettävyys

Onnistunut Vaatimuspohjainen Testaus

T Johdatus käyttäjäkeskeiseen tuotekehitykseen. suunnitteluprosessissa. Käyttäjän huomiointi. Iteroitu versio paljon kirjoitusvirheitä

Käyttäjäkeskeinen suunnittelu

Algoritmit 1. Luento 10 Ke Timo Männikkö

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut

ZENworks Application Virtualization 11

CUDA. Moniydinohjelmointi Mikko Honkonen

TAMPERE TARJOUSPYYNTÖ 1 (5)

Test-Driven Development

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

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


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

sivu 1 SURFCAM V5 JÄRJESTELMÄN VAATIMUKSET

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

HYDROSET ERK-S ITSEVALVOVA KUIVAKIEHUNTASUOJA

RAPORTTI SUORITETUISTA KÄYTETTÄVYYSTESTEISTÄ Luuppi-projekti

Ohjelmoinnin peruskurssi Y1

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

Uponor GSM-moduuli R-56

Liite 2, Todennetun osaamisen rekisteri, käyttötapausten. Todennetun osaamisen rekisterin kohdearkkitehtuuri

Transkriptio:

9. Luento: Ohjelmistotyö Tommi Mikkonen, tommi.mikkonen@tut.fi

Agenda Johdanto Ristikäännös Testaus ja virheen jäljitys Yleensä Kehitysympäristössä Käyttöympäristössä Laitteiston testaus Iteratiivisesta kehityksestä Yhteenveto

Johdanto Kehitystyö ja usein myös testaus ei yleensä tuotantoympäristössä Paitsi ohjelmiston myös laitteiston oikea toiminta usein varmennettava ohjelmallisesti Useita eri ongelmien lähteitä Eri käyttöjärjestelmäpalvelut, kääntäjät, kirjastot, jne. Usein kätevää rakentaa minimaalinen ohjelmisto, jonka toiminnan voi todentaa, ja käyttää sitä kehitysympäristön, työkaluketjun ja kohdelaitteen toiminnan varmentamiseen

Ristikäännös Ohjelma siis kirjoitetaan eri koneessa kuin mitä ajetaan Yleensä eri käskykannat ja laitteisto Joka tapauksessa kohdekoneelle ei yleensä voi suoraan kehittää ohjelmaa Usein useita kääntäjiä, joista osaa voidaan hyödyntää esim. moduulitestauksessa kehitysympäristössä Ongelmia: Kääntäjien erilaisuudet (virheet, rekisterirakenteen käsittely, jne) Käyttöjärjestelmien rajapinnat Käytettävissä olevat kirjastot

Ristikäännös yksinkertaisimmillaan Kehitystyöasema Laite Lähdekoodi Ristikäännös Laitteelle käännetty Siirto (asennus) Laitteessa suoritettava

Testaus ja virheiden jäljitys Yleensä ei (ainakaan kokonaan) mahdollista suorittaa siinä ympäristössä kuin missä kehitetään Muutokset ajoituksissa voivat aiheuttaa ongelmia joka tapauksessa Ei aina selvää testataanko laitteistoa vai ohjelmistoa Sulautettujen järjestelmien määritelmän mukaan itse asiassa molempien yhteistoimintaa! Virheettömyyteen kova pyrky erilaisin keinoin Cleanroom; työn organisointi; formaalit menetelmät, jne.

Virheiden paikantamisesta Vaikutus ja varsinainen vika eivät välttämättä lähellä toisiaan Jäänneviittaukset, roskaantuminen, fragmentoituminen Moniprosessiympäristö Ajoitus Joskus vikoja ei edes vaivauduta korjaamaan Ei kriittinen Riittävän harvinainen -> ei ilmene ehkä koskaan todellisessa käytössä Ylläpidon kannalta tämä tietysti tuo haasteita!

Pöytätestaus 2 versiota Kevyt: Ohjelman tekijä selittää toiselle ohjelmoijalle (tai jollekin joutilaalle!) mitä ohjelman pitäisi tehdä Kuuntelijan ei edes tarvitse ymmärtää, riittää että tekijä kertoo ja samalla huomaa omat ongelmansa Tyhmät kysymykset usein parhaita Raskas: Käydään ohjelmaa läpi rivi riviltä Ohjelma suoritetaan käsin Löytää usein myös muita ongelmia

Testipedit Ohjelmisto, jolla testattavan ohjelmiston moduuleja voidaan testata Interaktiivisesti käyttäjän ohjaamana Eräajotyyppisesti automaattisesti Muutoksen jälkeen voidaan tehdä regressiotestit koko aineistolla Usein ei päästä lähellekään sataa prosenttia ilman erityistoimenpiteitä Musta/valkoinen laatikko testit eri tilanteissa Usein valmisohjelmisto tai testaustarkoitukseen rakennettu sovelluskehys Usein suositeltavaa myös pöytäkoneissa ajettaville ohjelmille!

Profilointi Pyrkii löytämään ohjelman osat, joissa vietetään eniten aikaa Ei varsinaisesti testausta, mutta usein käyttökelpoinen menettelytapa sulautettujen ohjelmistojen yhteydessä Ei kuitenkaan kannata ylioptimoida tarpeettomasti Yleensä tehdään kehitysympäristössä (profilointitiedon keruu laitteella voi olla vaikeaa; muistinkulutus voi olla liika; jne) Ei siis välttämättä sama tulos kohdeympäristössä Profilointioperaatiot voivat myös siirtää pullonkaulaa (esim. profilointitulosten tiedostoonkirjoittamiseen!)

Kehitysympäristön työkaluista Yleensä kannattaa aloittaa näillä Nopeampaa (prosessori nopeampi, ei tarvita siirtoja) Työkalut monipuolisempia Ei kuitenkaan voi olla ainoa vaihtoehto Eroavaisuuksia joka tasolla Kääntäjä Kirjastot Käyttöjärjestelmä Prosessorin käskykanta Muistiavaruus Nyrkkisääntö: Looginen toiminta kuntoon kehitysympäristössä

Järjestelmän simulointi Ohjelma käännetään kohdekoneen ymmärtämään muotoon, mutta kohdelaitteen sijasta sitä suoritetaan kehitysympäristössä simulaattorissa Simulaattorissa mahdollista kuvata myös oheislaitteet, joten niihinkin liittyviä ominaisuuksia voidaan simuloida Ongelma: Jos monimutkainen kokonaisuus, simulaatioympäristö ei aina pysty tuottamaan tarpeeksi aitoja reaktioita Sopii kuitenkin perustestaukseen ennen varsinaiseen kohdelaitteeseen siirtoa

Virtualisointi Kuten simulointi, mutta yleensä pidemmälle vietynä Taustalla esim. järjestelmä joka toimii kuten kohdejärjestelmä (riittävällä tarkkuudella) Usein soveltuu myös kehitysympäristöksi Tavallinen ratkaisu sulautettujen Linuxohjelmistojen kehityksessä Virtuaali-imageja ladattavissa suoraan Webistä eri tarkoituksiin Ongelmiakin on, esim. näppäimistön lokalisointi jne.

Testaus ja jäljitys kohdejärjestelmässä Peräkkäisohjelman debuggaustyyli ei toimi kovin hyvin sulautetussa ympäristössä Ideana ei laskea inputista sopivaa outputtia Rivi kerrallaan eteneminen paljastaa vain osan totuudesta (yleensä rinnakkaisia suorituksia) Tarvitaan erilaisia apulaitteita Logiikka-analysaattorit, emulaattorit, seurannan apuvälineet ja erilliset testijärjestelmät, jopa led-valot

Logiikka-analysaattori Voidaan tutkia suorittimen tai väylän liikennettä Kopio väyläliikenteestä ja askelittainen tulkinta Jotkut laitteet jopa muuntavat bittivirran symboliseen konekoodimuotoon Muistikartta auttaa! Kaikkea ei kuitenkaan voi nauhoittaa; erilaiset nauhoitusehdot usein tarpeen Välimuistin käyttö voi aiheuttaa ongelmia

Emulaattori Esim. suorittimen paikalle asennetaan välikannan avulla piirikortti, joka toimii ulkoisesti kuten suoritin Suoritus tyypillisesti mahdollista askelittain Muuttujien arvojen tarkastelut Monessa mielessä kuten järjestelmätason debuggeri Ei kuitenkaan pure kaikkeen Ajastusongelmat Muistinkulutukseen liittyvät asiat (emulaattorissa on usein enemmän muistia kuin kohdejärjestelmässä) Joskus ohjelma voi toimia kohdelaitteessa mutta ei emulaattorissa (esim. lukumuistin korvaaminen luku-kirjoitusmuistilla voi aiheuttaa tällaisia ongelmia)

Erillinen testijärjestelmä Muistuttaa ohjelmistotuotannon V-mallin ideaa Laitekohtainen vs. yleiskäyttöinen testijärjestelmä Edellinen usein mahdollista vain kaikkien kalleimpien järjestelmien yhteydessä, sillä Vaatii pahimmassa tapauksessa oman projektinsa, jossa järjestelmälle rakennetaan sitä täysin vastaava testiympäristö Tyypillisesti myös testijärjestelmä on itse asiassa sulautettu järjestelmä Toteutus ja testijärjestelmä siis verifioivat toistensa oikean toiminnan!

Tiedon siirto koneelta toiselle analysoitavaksi Vaatii yleensä erityisen liitynnän Analysointi joko välittömästi (on-line) tai jälkikäteen (off-line) Tiedonkeruu ei välttämättä näkyvää Kerätään tapahtumatietoa väylältä; Usein kuitenkin tarvitaan lisäinfoa (mikä taas vaatii lisäsanomia) Lisäliitynnän avulla tiedonsiirto on kuitenkin usein yksinkertaisempaa Voi vaikuttaa ohjelman toimintaan Ehdollinen kääntäminen mahdollistaa erilliset debug/tuotantoversiot Joskus myös ongelmia sillä suoritettava ohjelma ei ole täysin sama

Laitteiston testaamisesta Tyypillisten laitteistovikojen tuntemus Huonot kontaktit Oikosulut Katkenneet johdot Sähkömagneettisesta induktiosta johtuva signaalin ylikuuluminen Väärät signaalitasot Ajoitusvirheet Työkaluina sähköiset mittalaitteet (esim. oskiloskooppi) Onneksi ohjelmallisestikin voi tehdä yhtä ja toista Nyrkkisääntö: Jos useampi kuin 1 vika, peli usein menetetty!

Muistien testaamisesta Lukumuistin testaus käymällä läpi muistipaikat ja laskemalla tarkistussumma (joka on myös tallennettu lukumuistiin) Luku/kirjoitusmuistin testaus ensin kirjoittamalla ja sitten lukemalla (esim. ensin 5555 hex ja sitten AAAA hex ) Jos väylien johdotus tavallisesta poikkeava, kannattaa pohtia testiarvoja joilla ylikuulumiset voidaan havaita HUOM: Välimuisti kannattaa kytkeä pois päältä!

Oheislaitteiden testaus Monimutkaisissa laitteissa erityisiä testitiloja Yksinkertaisissa piireissä testein voi kokeilla onnistuuko keskeyttäminen, tilarekisterien käsittely jne. Yleensä oheislaitteiden testaus onnistuu parhaassakin tapauksessa vain osittain Nyrkkisääntö: Käynnistyksen yhteydessä aina perustesti; tarvittaessa kattavampi huolto- ja valmiustilatesti

Iteratiivisuudesta Kätevää myös muita ohjelmistoja kehitettäessä, lähes välttämätöntä sulautetussa ympäristössä

Vähän pidempi selitys Yleensä kokonaisjärjestelmälle löytyy perinteinen määrittely Työnjakoon liittyvät syyt; laitteiston valmistustekniikkaan liittyvät syyt Kokonaismäärittely kattaa sekä laitteiston että ohjelmiston yhteistoiminnan Tämän jälkeen on suoritettu jako eri tekniikoin toteutettuihin osiin, jotka toteutetaan erikseen Ensimmäinen yritys yhteistoiminnasta harvoin osuu nappiin! Virheiden jäljitys myös helpompaa kun on pienempi toteutus

Ohjelmiston määrittely Ohjelmiston suunnittelu Ohjelmiston toteutus Kokonaismäärittely Kokonaissuunnittelu Työn jako osiin Laitteiston määrittely Laitteiston suunnittelu Laitteiston toteutus Ohjelmiston testaus Laitteiston testaus Integrointi ja testaus

Suunnittelun etenemisestä Ensimmäinen versio usein yksinkertaisin toteutus joka tekee jotain verifioitavaa Mukana usein myös laitetestit, mutta ei välttämättä Tarkoitus varmentaa työkaluketju Usein jo laitteen henkiin saaminen on melkoinen suoritus, vaikkei se tekisikään vielä mitään Seuraavat iteraatiot lisäävät toiminnallisuutta pieni pala kerrallaan jotta mahdolliset ongelmat on mahdollista korjata osittaen Usein insinöörityön hienous on juuri pienimpien muutosten löytämisessä (ja mahdollisuuksien mukaan erikseen testaamisessa ja toiminnan varmentamisessa!) Henkiin herääminen Laitteiston testaus Algoritmit Laitteiston ongelmien piilottaminen/kiertäminen Onnistunut suoritus ei kuitenkaan ole riittävä ehto ohjelmiston valmistumiselle

Yhteenveto Kehitys- ja käyttöympäristöt eivät ole samat Suuri joukko erilaisia avustavia työkaluja; eivät kuitenkaan voi kokonaan korvata oikean laitteen käyttöä kehityksen aikana Laitteiston testaus on osa ohjelmiston tehtävää oikeastaan lähes aina Iteratiivinen kehitystyyli lähes välttämätöntä ohjelmistotyössä