Kuutioiden pakkaus - Teoria

Samankaltaiset tiedostot
Kuutioiden pakkaus - Tehtävänanto

Autotallin ovi - Tehtävänanto

Kuumavesitankki - Tehtävä

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

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

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

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

AU Automaatiotekniikka. Toimilohko FB

Hissi - Tehtävä. Pisteytys. Tehtävän kuvaus

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

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Toimilohkojen turvallisuus tulevaisuudessa

Kieliversiointityökalu Java-ohjelmistoon. Ohje

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

Harjoitustyön testaus. Juha Taina

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Testivetoinen ohjelmistokehitys

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Automaattinen yksikkötestaus

58160 Ohjelmoinnin harjoitustyö

Test-Driven Development

Testaaminen ohjelmiston kehitysprosessin aikana

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

8/20: Luokat, oliot ja APIt

TESTIRAPORTTI - VYM JA KANTA Virtuaaliyhteisöjen muodostaminen Versio 1.0

13/20: Kierrätys kannattaa koodaamisessakin

Teknillinen korkeakoulu T Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Moottorin kierrosnopeus Tämän harjoituksen jälkeen:

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

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Dynaaminen analyysi II

Test-Driven Development

Eclipse ja JUnit-ohjelmoijatestit

Testausautomaation mahdollisuudet käyttöliittymän testauksessa. Anssi Pekkarinen

Testaussuunnitelma PULSU. Syksy 2008 Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Dynaaminen analyysi II Luento 4 Antti-Pekka Tuovinen

OHJE Jos Kelaimeen kirjautuminen ei onnistu Mac-koneella Sisällys

CEM DT-3353 Pihtimittari

TTY TKT-1110 Mikroprosessorit TKT. HEW-ohjeet ver 1.0

AU Automaatiotekniikka. Funktio FC

TELIA VIESTINTÄPALVELU VIP

Osa 7: Hahmojen ohjelmointi ja hienosäätö

COTOOL dokumentaatio Testausdokumentit

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

OpeOodi Opiskelijalistojen tulostaminen, opiskelijoiden hallinta ja sähköpostin lähettäminen

Python-ohjelmointi Harjoitus 2

YRITYSTILI KÄYTTÖOHJEET

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

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

Eclipse & WindowBuilder

OPISKELIJAN OPINNOT -NÄYTTÖ. Opiskelijan opintosuoritustietoja katsellaan Opiskelijan opinnot -näytöltä. Näyttö löytyy päävalikosta Opinnot.

Laskuharjoitus 9, tehtävä 6

ILMARI KÄYTTÖOHJE

Digitaalilaitteen signaalit

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

Ohjelmiston testaus ja laatu. Testaustasot

OHJE Jos Kelaimeen kirjautuminen ei onnistu Windows-koneilla

Aloita uusi kartoitus -painikkeesta käynnistyy uuden kartoituksen tekeminen

Järjestelmäarkkitehtuuri (TK081702)

Opiskelijalistojen tulostaminen, opiskelijoiden hallinta ja sähköpostin lähettäminen

Uuden Peda.netin käyttöönotto

UML -mallinnus TILAKAAVIO

Ohjelmointi 1 / syksy /20: IDE

Käyttöohje. Versiohistoria: versio Mari Kommenttien perusteella korjattu versio

Ohjelmistotuotantoprojekti

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

MALLIN RENDERÖINTI KUVAKSI TAI VIDEOKSI SOLIDWORKS 2012 VERSIOLLA

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

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

Dynaaminen analyysi I

Dynaaminen analyysi III

Tietokoneverkot. T Tietokoneverkot (4 op) viimeistä kertaa CSE-C2400 Tietokoneverkot (5 op) ensimmäistä kertaa

Sivu 1 / Viikin kirjasto / Roni Rauramo

TAMK Ohjelmistotekniikka G Graafisten käyttöliittymien ohjelmointi Herkko Noponen Osmo Someroja. Harjoitustehtävä 2: Karttasovellus Kartta

Johdatus ohjelmointiin

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

VSP webmail palvelun ka yttö öhje

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

Dynaaminen analyysi III Luento 5 Antti-Pekka Tuovinen

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

padvisor - pikaohje - työkalu SATRON Smart/Hart dp- ja painelähettimiä varten

Purentafysiologinen status

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

Pikaohje Aplisens APIS type 1X0 ja 2XO

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

OP-eTraderin käyttöopas

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

Toinen harjoitustyö. ASCII-grafiikkaa

ITKP102 Ohjelmointi 1 (6 op)

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

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

ORGANISAATION KIRJAUTUMINEN TURVASIRU.FI-PALVELUUN

Opinto-oppaan tekeminen

erasmartcardkortinlukijaohjelmiston


Testaussuunnitelma Labra

Transkriptio:

Kuutioiden pakkaus - Teoria Oppimistavoitteet SFC (Sequential Flow Chart) kielen perusteet Opitaan analysoimaan sovellusta siten, että yleistajuisen tekstin ja/tai kuvien avulla jäsennetään ratkaistava ongelma sellaisiin kokonaisuuksiin, joista löytyy suoraviivainen yhteys ohjelmoijan käsitteisiin. (Tämä on keskeinen taito kaikessa ohjelmistotuotannossa, eikä vain PLC ohjelmoinnissa.) Mitä ohjelmistosuunnittelulla tavoitellaan ja minkälainen on hyvin suunniteltu ohjelmisto? Yleisiä tavoitteita on luettavuus, ylläpidettävyys, testattavuus, skaalattavuus. Keskeisin suunnittelukeino tavoitteiden saavuttamiseksi on modularisointi. Harjoituksessa suoritetaan ohjelmiston modularisointi siten, että useammassa paikassa toistuva toiminnallisuus paketoidaan toimilohkoon (function block). (Sovelluksessa on 2 samalla tavalla toimivaa liukuhihnaa). Toisin sanoen, luodaan oma toimilohkotyyppi. Tämä parantaa useita ohjelmiston laatuominaisuuksia: luettavuus, ylläpidettävyys, testattavuus, skaalattavuus. Saavutettua modularisointia ja testattavuutta hyödynnetään suorittamalla toimilohkon yksikkötestaus. Ohjelmistosuunnittelu suoritetaan vähemmän yksityiskohtaisten ohjeiden mukaan kuin edellisessä harjoituksessa. Lisäksi harjoitellaan valvomo-ohjelmointia. (Varsinaista valvomosuunnittelua tehdään vasta kuumavesitankki sovelluksen yhteydessä.) SFC-kielen perusteet Ohjelmistotuotannossa pyritään ensin yleistajuisen tekstin ja/tai kuvien avulla jäsentämään ratkaistava ongelma sellaisiin kokonaisuuksiin, joista löytyy suoraviivainen yhteys ohjelmoijan käsitteisiin. Yksi tällainen käsite on tila (state). Tilojen avulla mallinnettu järjestelmä on vain yhdessä tilassa kullakin ajanhetkellä kyseistä tilaa nimitetään aktiiviseksi tilaksi. Jokaisessa tilassa on oma toiminnallisuus ja sitä vastaava ohjelmakoodi ( state active koodi), jota suoritetaan vain silloin kun kyseinen tila on aktiivinen. PLC

ohjelmistojen tapauksessa kyseinen koodi suoritetaan alusta loppuun jokaisella PLC syklillä. Tämän lisäksi voidaan määritellä koodinpätkiä, jotka suoritetaan vain kerran silloin kun kyseiseen tilaan tullaan ( state entry koodi) tai kun kyseisestä tilasta poistutaan ( state exit koodi). Geneerinen tilakone ( state machine tai state chart ) määrittelee transitiot tilojen välillä. Transitiolla on alkutila A ja lopputila B ja transitioehto (guard condition). Jos tila A on aktiivinen ja ehto toteutuu, suoritetaan tilan A mahdollinen exit koodi, vaihdetaan B aktiiviseksi tilaksi ja suoritetaan mahdollinen tilan B entry koodi. Ehto voi olla mikä tahansa lauseke, jonka työkalu pystyy evaluoimaan tosi/epätosi. SFC on rajoitettu tilakone, jossa oletetaan että tilat ovat peräkkäisiä vaiheita, eli transitio on aina seuraavaan tilaan. (Tämän lisäksi SFCssä voi olla rinnakkaisia haaroja, joita ei käsitellä tässä harjoituksessa.) Tämän takia SFC tiloja kutsutaan askeliksi (step). Step entry/active/exit toiminnallisuus voidaan kirjoittaa millä tahansa IEC 61131-3 standardin PLC ohjelmointikielellä, mukaan lukien SFC:llä. Alapuolella olevassa kuvassa näytetään miten aliohjelma luodaan. Kuva 1: Aliohjelma luodaan kuvan mukaisella tavalla. Tätä aliohjelmaa voidaan käyttää sitten SFC kielen lohkoissa. Kuva 2 näyttää askelen nimeltä Init, siirtymäehdon (TRUE) ja siirtymän (pieni palkki TRUE tekstin vasemmalla puolella.) Uuden askelen ja siirtymän voi lisätä kuvassa kuvatulla tavalla kun klikkaa siirtymää oikealla.

Kuva 2 Transitioehtoa voidaan editoida tuplaklikkaamalla. Easyveep moduuli Lamppu voidaan jakaa kahteen tilaan: LamppuPäällä ja LamppuSammutettu. LamppuPäällä tilasta poistutaan kun käyttäjä painaa nappia (Kuva 3). Button muuttuja pitää siis luoda ja kytkeä oikeaan PLC inputtiin. Kuva 3

Kuva 3 oikealla puolella on Properties-ikkuna, joka näyttää valitun askelen (punaisella korostettu LightOn) ominaisuuksia. Step active toiminnallisuuden voi lisätä tuplaklikkaamalla tilaa, jolloin myös valitaan millä kielellä se toteutetaan. Exit ja entry voi lisätä valitsemalla valikosta, kun klikkaa tilaa oikealla. Toiminnallisuus on koodinpätkä, jolla on nimi. LightOn tilan step active nimi on lights_on (etsi se Properties ikkunasta, kts. Kuva 3). Tätä koodinpätkää voidaan nyt käyttää myös muissa tiloissa. Kyseisen askeleen step active-propertya klikkaamalla ilmestyy pieni laatikko jossa on kaksi pistettä (katso esimerkkiä Kuva 3:sta). Tätä laatikkoa klikkaamalla voidaan valita joku olemassa oleva koodinpätkä. Jos tähän koodinpätkään tehdään muutoksia tai korjauksia, ne vaikuttaa kaikkiin tiloihin, jossa sitä on käytetty, eli muutokset tehdään vain yhteen paikkaan. SFC ohjelman alin osa on oikealle osoittava nuoli eli hyppykäsky (jump). Nyt hyppy tapahtuu LightsOff askeleeseen. LightsOff sijaan voi kirjoittaa minkä tahansa muun askelen nimen. Sovelluksen analysointi Moduuli (module) on ohjelmistosuunnittelun perusyksikkö. Termi on löyhästi määritelty, koska eri ohjelmointikielet tukevat modularisointia eri tavoin. Esimerkiksi oliokielet kuten Java ja C++ tarjoavat luokan modularisoinnin välineeksi. Moduulin keskeisiä ominaisuuksia ovat seuraavat: Moduulilla on hyvin määritellyt riippuvuudet (dependency) muiden ohjelmiston osien välillä. Jos moduulina on toimilohko, nämä riippuvuudet ovat moduulin sisään- ja ulostulot, jotka pitää osata kytkeä ennen kuin moduulia voidaan käyttää. Moduuli yleensä erittelee rajapinnan (interface) ja toteutuksen (implementation). Toimilohkon tapauksessa rajapinta ja sen dokumentaatio (kuten Nopasta löytyvän toimilohko-ohjelmointioppaan luku 4) riittävät siihen, että joku muu voi käyttää lohkoa omissa sovelluksissaan. Vain moduulin ohjelmoijan tarvitsee tuntea sovellus. Tämä periaate on keskeinen, jotta satojen tai tuhansien ohjelmoijien aikaansaannoksia voidaan tehokkaasti hyödyntää jonkun ohjelmistosovelluksen tuottamiseksi. Esimerkiksi yllämainitut luvun 4 toimilohkot, jotka löytyvät Codesysin kirjastosta, ovat lukuisien ohjelmoijien ja testaajien työn tulos. Firma yleensä kehittää omia toimilohkokirjastoja oman sovellusalueensa erityistarpeisiin. Mitä paremmin rajapinta ja riippuvuudet on kuvattu, sitä helpompaa on tehdä sovellukseen muutoksia tai laajennuksia. Ylläpidettävyys (maintainability) tarkoittaa sitä, että muutosten tekeminen (testaus mukaan lukien) on helppoa.

Skaalautuvuus (scalability) tarkoittaa sitä että ohjelmiston kasvattaminen on helppoa, jos ohjelmiston tehtäviä lisätään Testattavuus (testability) tarkoittaa sitä, että ohjelmiston osia on helppo testata erikseen (vikojen paikantaminen on huomattavasti helpompaa jos testattava kohde on pieni). Testattavuus koostuu kahdesta tekijästä, joihin moduulisuunnittelu vaikuttaa (HUOM: termeille ei ole vakiintuneita käännöksiä, joten termien suomennetut versiot ovat vapaita käännöksiä): ohjattavuus (controllability): kuinka helposti voidaan asettaa testattavan moduulin sisääntulot tarkkailtavuus (observability): kuinka helposti moduulin ulostuloja voidaan havainnoida ja tarkkailla Luettavuus (readability) tarkoittaa sitä, että ihminen pystyy helposti hahmottamaan mitä ohjelma tekee. Esimerkiksi monimutkaisen sekvenssiohjauksen pystyy kyllä tekemään siten että kaikki koodi on yhdessä pitkässä tekstitiedostossa, mutta vaiheiden ja vaiheesta toiseen siirtymislogiikan hahmottaminen on huomattavasti vaikeampaa kuin SFC koodista. Yksikkötestaus (unit test) tarkoittaa moduulin testaamista erikseen (vastakohtana sille että testataan ajamalla koko sovellus). Jos sovellus on iso, yksikkötestauksella saavutetaan 2 suurta etua: vikojen paikantaminen on helpompaa, kun testattu koodi on pieni (esim helpompi etsiä vikaa moduulista, jossa on 100 riviä koodia, kuin koko sovelluksesta, jossa on 10000 riviä koodia helpompi testata moduuli kattavasti, kun testit voidaan laatia huomioiden moduulin rajapinnan kautta tulevien syötteiden kaikki mahdolliset kombinaatiot. Kaupallisen kokoisissa sovelluksissa täydellinen testikattavuus on mahdotonta. Niiltä osin kuin testit eivät kata toiminnallisuutta, loppu testauksesta jää asiakkaalle. On viime kädessä bisnespäätös että kuinka kattavaan testaukseen pyritään. Teollisuusautomaation sovellukset ovat usein turvallisuuskriittisiä, joten ohjelmistotestauksen kattavuuden osoittaminen on olennaista. Yksikkötestaus aiheuttaa lisätyötä: Pitää luoda ympäristö, jossa voidaan muuttaa moduulin sisääntuloja siten, että testit voidaan suorittaa. Ympäristön pitää myös havainnollistaa moduulin ulostuloja siten, että testaaja voi päätellä menikö testit läpi.

Monessa tapauksessa yksikkötestauksen hyödyt ovat suurempia kuin sen vaatima ylimääräinen työ. Ylimääräisen työn suuruus riippuu puolestaan siitä, miten testattavaa koodia on tehty Ohjelmistotestaus on ammattitaitoa: AUT koulutusohjelmasta on viime vuosina tehty firmoihin lukuisia diplomitöitä ohjelmistotestaukseen liittyen. Testisuunnitelma koostuu joukosta testitapauksia. Testitapauksen tulee täyttää seuraavat kriteerit: Kuka tahansa pätevä ohjelmistoinsinööri voi ohjeiden mukaan suorittaa testin yksikäsitteisesti Testitapauksessa on määritelty haluttu lopputulos, jolloin testaajalle ei jää tulkinnanvaraa siihen, että menikö testi läpi vai ei Tapauksia luodaan kattamaan sekä normaali toiminta että poikkeustilanteet Ohjelmiston suunnittelu Huomataan että molemmat liukuhihnat suorittavat täsmälleen samanlaista toiminnallisuutta, mutta hyödyntävät eri laatikon havaitsemisanturia ja liukuhihnan käynnistys/pysäytys toimilaitetta. Hyvä yleisperiaate on että pätevästi modularisoidussa ohjelmistossa ei ole tarpeen kopioida samaa koodia useampaan paikkaan. Tässä tapauksessa luodaan uusi toimilohko nimeltä HihnanOhjaus, joka pudottaa N kpl kuutioita laatikkoon ja sitten pysäyttää hihnan kunnes se saa uudelleenkäynnistä signaalin, jolloin laskuri nollataan ja liukuhihna käynnistetään. Jotta toimilohkoa voidaan käyttää molempiin hihnoihin, siitä pitää luoda kaksi instanssia yksi ylempää hihnaa varten ja toinen alempaa. Lisäksi oikea anturi ja toimilaite pitää kytkeä oikean toimilohkon input/output muuttujiin. Myös N on parametri joka on lohkon input. Laatikon vaihtaminen ja hihnojen uudelleenkäynnistäminen eivät aiheuta tarvetta kopioida samaa koodia useampaan paikkaan, joten tämä toiminnallisuus voidaan hoitaa ohjelmassa (program). (Vinkki: perehdy Toolbox/Function block alla oleviin lohkoihin ja käytä Nopasta löytyvän toimilohko-ohjelmointioppaan lukua 4. Tehtävä ratkeaa helposti kun keksii mitä valmiita lohkoja kannattaa käyttää).