Arto Salminen,

Samankaltaiset tiedostot
9. Luento: Ohjelmistotyö. Tommi Mikkonen,

9. Ohjelmistotyö. 9.1 Johdanto

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

OHJ-4301 Sulautettu Ohjelmointi

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Testauksen hallinta Testaustyökalut Luento 7 Antti-Pekka Tuovinen

OHJ-4301 Sulautettu Ohjelmointi

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

WINE API ja Virtualisointiohjelmistot

Ohjelmiston testaus ja laatu. Testaustasot

Convergence of messaging

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

2 Konekieli, aliohjelmat, keskeytykset

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Test-Driven Development

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

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

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

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

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

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

Uudelleenkäytön jako kahteen

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

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

4. Lausekielinen ohjelmointi 4.1

Algoritmit 1. Luento 3 Ti Timo Männikkö

1. Keskusyksikön rakenne

Palomuurit. Palomuuri. Teoriaa. Pakettitason palomuuri. Sovellustason palomuuri

Tapahtuipa Testaajalle...

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

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

58160 Ohjelmoinnin harjoitustyö

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

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

Ohjelmointi 1. Kumppanit

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

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

Test-Driven Development

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

A4.1 Projektityö, 5 ov.

CT60A4150 OHJELMISTOTESTAUKSEN PERUSTEET. Jussi Kasurinen Kevät 2016

Työkalut ohjelmistokehityksen tukena

Tietokoneen toiminta (Computer Organization I)

Kontrollipolkujen määrä

TKT224 KOODIN KOON OPTIMOINTI

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

Scratchbox ja Maemo. Nokia 770 Internet Tablet-ohjelmistokehitys. Timo Savola. Movial Oy. FUUG:in kevätristeily

3. Luento: Muistin hallinta. Tommi Mikkonen,

OP-POHJOLAN WEB SERVICES YHTEYDEN KÄYTTÖÖNOTTO

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

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

Turvakriittisen projektin menetelmät ja työkalut

Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä

T Testiraportti - järjestelmätestaus

Väylään liitettävä laite: Pheonix Contact ILB PB DI8 DIO8

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

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

KONEAUTOMAATION LAATU JA TURVALLISUUS Marko Varpunen

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

5. HelloWorld-ohjelma 5.1

Simulaattorin asennus- ja käyttöohje

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

Harjoitustyön testaus. Juha Taina

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

Tietokoneen toiminta (Computer Organization I)

Tietokoneen toiminta (Computer Organization I)

Automaattinen yksikkötestaus

Ohjelmistojen suunnittelu

Käyttöjärjestelmän rakenne

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

Sähköpostitilin käyttöönotto

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

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

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

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka

Kurssin tavoitteista uennot. 4.1 Projektityö, 5 ov. Esitietovaatimukset

Tietokoneen toiminta (Computer Organization I)

Onnistunut Vaatimuspohjainen Testaus

Software product lines

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

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

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

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

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

S Elektroniikan häiriökysymykset. Laboratoriotyö, kevät 2010

Jouko Nielsen. Ubuntu Linux

NORDEAN WEB SERVICES YHTEYDEN KÄYTTÖÖNOTTO

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

Transkriptio:

9. Luento: Ohjelmistotyö Arto Salminen, arto.salminen@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 Ajoitukset Nyrkkisääntö: Looginen toiminta kuntoon kehitysympäristössä; toisaalta ajastuksien takia kannattaa jo varhaisessa vaiheessa tutustua myös oikeaan laitteistoon

Järjestelmän simulointi Ohjelma käännetään kohdekoneen ymmärtämään muotoon, mutta kohdelaitteen sijasta sitä suoritetaan kehitysympäristössä simulaattorissa (yleensä ohjelma); myös laitteiston tila kuvataan 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 laitteiston suhteen ollaan vähemmän tarkkoja; lopputulema on tärkeämpää kuin järjestelmän tila Suorituskyky lähellä natiivia; pyritään käyttämään alla olevaa laitteistoa Usein soveltuu myös kehitysympäristöksi Tavallinen ratkaisu sulautettujen Linux-ohjelmistojen kehityksessä Virtuaali-imageja + koneita ladattavissa suoraan Webistä eri tarkoituksiin mutta kannattaa kumminkin varautua säätämään oma ympäristö kuntoon (esim. näppäinkartta 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 Esimerkkejä: http://www.lauterbach.com/

Logiikka-analysaattori Analysaattori Kohdejärjestelmä CPU osoiteväylä Oheislaite dataväylä

Emulaattori Esim. suorittimen paikalle asennetaan välikannan avulla piirikortti, joka toimii ulkoisesti kuten suoritin Suoritus tyypillisesti mahdollista askelittain Muuttujien arvojen tarkastelut Vaikka alun perin vain HW, nykyisin myös SW toteutus (esim QEMU) Ero virtualisointiin alkaa häilyä; esim QEMUa voidaan käyttää virtualisointiinkin Monessa mielessä kuten järjestelmätason debuggeri ohjelmiston ja laitteiston rajanpinnan kannalta

Emulaattori ei 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; samaten suojaukset voivat olla ongelmien lähde)

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

JTAG-luentotehtävä itseopiskeltavaksi Minkä tyyppinen debuggausmenetelmä on JTAG (IEEE 1149.1)? Mitkä ovat JTAG:in tavalliset käyttötarkoitukset (ainakin 3 kpl)? Miten sitä käytetään näihin tarkoituksiin? IEEE 1149.1 määrittelee seitsemän JTAG-käskyä (boundary scan instructions). Mitkä nämä käskyt ovat ja mihin niitä käytetään? Miten JTAG-liityntä on toteutettu käytännössä sitä tukevissa laitteistoissa? Mitä avoimia JTAG-yhteensopivia työkaluja on saatavilla? Mitä etuja JTAG:lla on muihin debuggausmenetelmiin nähden? Entä puutteita tai haittoja?

Reaaliaikajärjestelmän debuggauksesta Debuggaaminen breakpointien avulla ei onnistu reaaliaikajärjestelmien tapauksessa Debuggaukseen voi käyttää aiemmin kuvattuja logiikkaanalysaattoreita tai emulaattoria Joissakin prosessoreissa on sisäänrakennettu laitteistotuki ajonaikaisen tiedon tallentamiseen (real-time trace) Real-time trace menetelmässä prosessorin suoritus tallennetaan ja analysoidaan myöhemmin Kun laitteistotuki on sisäänrakennetu prosessoriin, välimuistin käyttö tai out of order execution eivät ole ongelma Sopii hyvin myös keskeytysaliohjelman tutkimiseen ja profilointiin

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ä