Lasse Seppänen
Tämä on kertomus ensimmäisen ohjelmistorobottini synnystä. Tein sen Robot Frameworkilla, joka on avoimen lähdekoodin robottialusta. Se on alun perin tarkoitettu automaatiotestaukseen, mikä näkyy selvästi järjestelmän ohjelmointikielen komennoissa. (Robot Framework n.d.)
Ohjelmistorobotti käyttää tietojärjestelmiä samoin kuin ihminen. Robotti pystyy hakemaan tietoa ja myös kirjoittamaan järjestelmiin. Eri roboteilla on erilaiset käyttöliittymät kehitysjärjestelmissä, mutta periaatteessa niillä kaikilla pystyy tekemään samat asiat. Usein robotteja käytetään toistuviin tarkistuksiin, jolloin ihmisaikaa vapautuu tuottavampiin tekemisiin. Erilaiset taloushallintoon liittyvät tarkastukset ovat tällaisia. Pankeissa esimerkiksi opintolainapäätökset saatetaan tehdä roboteilla. (Fischer 2017.)
Oma tarpeeni oli saada nopeasti tietoa opiskelijoiden tekemien tehtävien palautuksista ja niiden arvioinneista Moodlesta. Moodle ja siihen liittyvä klikkausprosessi ei ollut mieleeni. Päätin tehdä robotin, joka tutkisi palautuksia puolestani.
Robotin ohjelmoinnin oppiminen
Ensin latasin verkosta Robot Frameworkin community-version kehitysjärjestelmän PyCharmin. Asennus toimi helposti.
Ostin udemy.com:sta kolme Robot Framework -kurssia:
- Robot Framework Level 1 ja 2
- Backend API Testing with Python.
Kahta ensimmäistä kurssia käytin robottini tekemiseen. Katselin videoita ja samanaikaisesti koodasin robottia ohjeistuksen mukaisesti. Yritin samalla jäsentää, miten robotti pitäisi tehdä, jotta sitä voisi joku muukin käyttää ja myös erilaisten moduulien kanssa. Aluksi teinkin kaksi erilaista robottia, jotka sittemmin yhdistin yhdeksi robotiksi.
Käytetty ohjelmointikieli on varsin ohjelmoijaepäystävällinen. Pitää olla erittäin tarkka siitä, onko sanojen välissä yksi vai kaksi välilyöntiä. Useat kohdat oppii helposti, mutta monimutkaisemmissa kohdissa pitää usein vain kokeilla eri vaihtoehtoja. Kun kokeilu tapahtuu ajamalla robottia, joskus kehitys on pienenkin asian takia hyvin hidasta.
Kolmannen sukupolven ohjelmointikieliin tottunut saattaa hämmentyä tämän kielen syntaksista. Kun esimerkiksi C-kielessä ehtolause koodataan if () ja silmukka for (), nyt pitää kirjoittaa Run Keyword If ja :FOR. Verkossa olevat Robotin koodausmanuaalit olivat kovassa käytössä. Yritin löytää esimerkkejä, mutta en löytänyt niin paljon ja monipuolisia kuin olisin kaivannut. (Robot Framework n.d.)
Robotin rakenne
Ensin tein kaksi erilaista robottia siten, että niissä oli kummassakin ”veturiosa”, jossa vetureilla oli sama ohjelmointirajapinta (API). Vaihtamalla veturia robotit toimivat eri tavoin. Näin robotit oli helppo testata toimiviksi, mutta toiminta oli kömpelöä. (Webopedia n.d.)
Päätin ottaa käyttöön globaalin muuttujan, joka kertoo toiminnan laadun:
- listatyyppinen tulostus
- taulukkotulostus
- vielä keskeneräinen nollien käsittely.
Päätin tehdä tämän vaihtoehdon valitsemisen sellaiseksi, että sitä kysytään käyttäjältä robotin käynnistyksen yhteydessä (kuva 1). Näin selvitään mahdollisimman pienellä robottimäärällä ja yksinkertaisella koodilla. Toimintojen lisääminen on myös helppoa tällä tavalla.
Väliaikaistiedostot ja tietosuoja
Eri tulostuksia varten käytetään erilaisia väliaikaistiedostoja. Listamuotoon (kuva 2) käytetään yhtä HTML-kielellä kirjoitettua tiedostoa, joka samalla on kokonaisuudessaan koko tulostussivu. Ajon loppuvaiheessa käytetty selain kaadetaan. Robotti käynnistää uuden selaimen näyttämään väliaikaistiedostoa, minkä jälkeen robotti poistaa väliaikaistiedoston. Siten ei jää tietosuojajätettä. Jos käyttäjä yrittää päivittää tulostaan, selain ilmoittaa virheestä.
Taulukkomuotoinen tulostus (kuva 3) vaatii monimutkaisempaa toimintaa, jossa käytetään sekä pohjatiedostoa että opiskelijakohtaisia väliaikaistiedostoja. Jälkimmäiset vastaavat kukin yhtä taulukon riviä, joista sitten lopputulos kootaan. Kaikki nämä väliaikaistiedostot poistetaan ajon aikana.
Ongelmat
Ohjelmointiongelmien lisäksi on ollut kaksi tapausta, joissa olen joutunut tekemään jotain korjaavia toimenpiteitä ulkoisista syistä johtuen.
Chromen versiomuutos teki roboteista täysin toimimattomia. Chromen käyttäminen selaimena tarvitsee Chromedriver.exe-nimistä ohjelmaa, joka sijaitsee C:\Python27\Scripts-kansiossa. Chrome päivittyy hyvin itsenäisesti, mutta koska se ei automaattisesti päivitä chromedriveriä, epäyhteensopivuuden on nyt ainakin kerran todettu tapahtuneen. Onneksi siitä selvittiin Chromedriverin etsimisellä netistä ja asentamisella oikeaan paikkaan.
Moodlen sisäänloggaus muuttui. Käytettyjen kenttien id-attribuutit muuttuivat ja lisäksi tuli sivu, jonka alalaidasta piti klikata accept-painiketta. Tämä oli onneksi varsin yksinkertainen korjata muutamassa minuutissa.
Kokemukset robottien käyttämisestä
FUNrobotit ovat osoittautuneet omaan työskentelyyni hyvin sopivilta. Robotin ajon aikana ehdin tehdä jotain muuta, kuten käsittelemään sähköposteja. Robotin ajoa on mielestäni hauska seurata, mistä nimikin tulee. Sama ei onnistuisi, jos joutuisin kirjautumaan ja klikkailemaan Moodleen sisään vastaavassa määrin. Koska tulostus on kompakti, on helppo havaita kulloinkin tarpeelliset asiat.
Tietokoneen työpöydältä on helppo löytää robotit (kuva 4), ja ne lähtevät siitä klikkaamalla liikkeelle. Nyt robottikuvakkeita on kymmenkunta. Niitä tulee vuosittain lisää, joten jatkossa nähdään, miten työpöytä täyttyy.
Yleisesti ottaen robotit ovat sekä helpottaneet että yksinkertaistaneet työtäni. Koska uuden robotin tekeminen on hyvin nopeaa, olen tehnyt robotin aina, kun olen joutunut kaivamaan tietoja.
Artikkeli on kirjoitettu Hämeen ELY-keskuksen rahoittamassa DigiReWork-hankkeessa (ESR).
Kirjoittaja
Tietojenkäsittelyn yliopettaja Lasse Seppänen vastaa tietojenkäsittelyn opinnäytetöistä ja kansainvälisestä toiminnasta, opettaa sekä luokassa että verkossa ja osallistuu erilaisiin projekteihin ja hankkeisiin.
Lähteet
Fischer, M. (2017). Ohjelmistorobotiikka haastaa organisaatiot – robotit osana työyhteisöä. Haettu 18.4.2018 osoitteesta http://www.staria.fi/fi/ohjelmistorobotit-osana-tyoyhteisoa
Robot Framework (n.d.). Haettu 18.4.2018 osoitteesta http://robotframework.org
Webopedia (n.d.). Haettu 18.4.2018 osoitteesta https://www.webopedia.com/TERM/A/API.html