Ettevõtte üheks tegevusalaks on töökindlate tootmisseadmete väljatöötamine ning tootmisprotsessi juurutamine. Teine tegevussuund – tarkvaraarendusvahendid – otsib viise tarkvara töökindluse tagamiseks ja arendab selle jaoks tööriistu. Tänu sellele suunale võib IB Kratest nimetada üheks Eesti kosmosefirmaks.

Tarkvaraarendusvahendite suuna juht Tõnu Näks selgitab töö sisu järgmiselt: „Usaldusväärse süsteemi projekteerimisel on võtmeküsimuseks arusaamine, mida süsteem täpselt tegema peab ja milliste kitsendustega ta peab arvestama. Tavapäraste andmetöötlussüsteemide puhul pannakse see teadmine arendajale ja kasutajale arusaadavas keeles kirja ja kontrollimine piirdub subjektiivse hinnanguga.

Kui süsteem võib kellelegi otseselt või kaudselt viga teha, siis peab tema toimimise kirjeldus oluliselt täpsem olema. Kirjelduse alusel peab saama kontrollida, kas kõik käitumise variandid on arvesse võetud ja eri nõuded omavahel kooskõlas. Mida rohkem on süsteemil autonoomiat, seda enam on ka eritingimusi, mida kontrollida. Sellised äärmiselt detailsed kirjeldused kasvavad kiiresti suureks ja eesti või inglise keeles kirja pandud teksti piisav kontrollimine ei ole võimalik.

Siin tulevadki appi erinevad mudelid – süsteemi eeldatav käitumine vormistatakse nii, et teda oleks kontrollimiseks võimalik käivitada (loe testida) või kirjelduse pealt matemaatiliste vahenditega ebakõlasid otsida. Juhtimistarkvara puhul on üks levinumaid vahendeid Simulink, mille abil kirjeldatakse algoritm omavahel ühendatud plokkidena, iga plokk sisaldab endas kindlat arvutust. Seda plokidiagrammi saab simulatsioonis käivitada, süsteemi käitumist erinevate sisendite puhul uurida ning mõningaid omadusi ka matemaatiliselt kontrollida.

Mudeli peal tehtavatele kontrollidele järgneb mudeli programmikoodiks teisendamine. Seda teeb kas programmeerija „käsitsi” või automaatne teisendaja – koodigeneraator. Esimesel juhul võib töömaht kaunis suur olla, samuti võib programmeerija mudelit valesti interpreteerida või lihtsal hooletusvigu teha. Sisuliselt tähendab see, et mudelil kontrollitu tuleb peale programmeerimise lõppu uuesti sama detailselt üle testida. Teisel juhul – automaatse koodigeneraatori kasutamisel – kaob ära töömahu probleem ja hooletusvigu ei saa tekkida, aga valesti interpreteerimise oht jääb. Ehk tulemust kontrollida on ikka vaja.

Suurim kliendi mudel, millega IB Kratese insenerid kokku on puutunud, sisaldas natuke üle 60 000 ploki (arvutuse) ja koodigeneraator teisendas selle ligikaudu 78 tuhandeks koodireaks. COCOMO metoodika järgi hinnates oleks sellise mahuga koodi kirjutamiseks vajalik töömaht 19 inimaastat, koodigeneraator saab hakkama 15-20 minutiga!

Loomulikult eelneb sellele mudeli kokkupanemise töö ja sedavõrd detailse spetsifikatsiooni pealt oleks kodeerimise maht ka kordades väiksem. Siiski on kokkuhoid juba ainuüksi kodeerimiselt märgatav. Kõrvalmärkusena võib mainida, et kogu koodiridade arv ühes tänapäevases lennukis või autos küündib miljonite või isegi sadade miljoniteni".

QGen ja Airbus

Eeltoodud näites viidatud mahuga koodist lihtsalt läbilehitsemisega vigade otsimine on arusaadavalt ebarealistlik. Kood tuleb kas ammendavalt üle testida, või peab olema täielik usaldus teisendaja korrektsuse osas! Siinkohal on üks lahendus IB Kratese ja kopilaatoritootja AdaCore poolt ühiselt välja arendatud koodigeneraator QGen.

Töövahendi põhifunktsionaalsus on lihtne – sisendiks võetakse Simulinki mudel, välja tuleb C või Ada kood, mida kasutatakse süsteemi juhtarvuti tarkvaras. Sarnaseid tooteid on turul mitmeid. Eriliseks teeb QGen’i tema arendusprotsess ning tootega kaasa tulev dokumentatsioon – niinimetatud kvalifitseerimispakett – mis tõestab, et koodigeneraatori arenduse käigus on kõik toetatud mudelikonstruktsioonide teisendused piisavas mahus kontrollitud ning genereeritud koodi käitumine vastab mudeli käitumisele. See aga tähendab juba suurusjärgu võrra suuremat kokkuhoidu, kui lihtsalt kodeerimise aja vähendamine.

Kuna koodigeneraator tagab koodi vastavuse mudelile, siis funktsionaalseid (mooduli)teste genereeritud koodil enam teha pole tarvis. Kui siia juurde lisada veel ühilduvus teiste AdaCore tööriistadega, mis võimaldavad mudeli matemaatilist analüüsi (CodePeer) ning koodi sammukaupa käivitamist nii, et programmi tööd on võimalik mudelil jälgida (Qgen Debugger), siis teist samasugust toodet turul preagu ei ole.

QGeni algne idee tekkis Airbusi soovist oma tööprotsessis kasutusel olevaid spetsiifiliste alamsüsteemide jaoks mõeldud koodigeneraatoreid üldistada ja kogemust teiste sarnaste ettevõtetega jagada. Koostöös Continental’iga panid nad 2006. aastal kokku konsortsiumi lennunduse, kosmose- ja autotööstuse valdkonna ettevõtetest universaalse avatud lähtekoodiga Simulinki koodigeneraatori arendamiseks.

Eesti väikefirma IB Krates kutsuti meeskonda üheks arenduspartneriks, kuivõrd ettevõtte töötajad olid varem selle valdkonna uurimisprojektides edukalt osalenud ja oma tegevusega silma jäänud. Sellele järgnes juba uus arendusprojekt, kus osales ka AdaCore ja ühise tooteni jõuti aastaks 2016. Praeguseks on tootel kasutajaid USA’s, mitmes Euroopa riigis ja Jaapanis.

Mis sel kõigel kosmosega pistmist on?

Eelpool sai rõhutatud, et kirjeldatud protsess kehtib esmajärjekorras süsteemidele, mis võivad kellelegi viga teha. Ülalmainitud kvalifitseerimispakett on konkreetselt nõutud tsiviillennunduses kasutatavate lennumasinate ohutusstandardites. Kosmoseprojektidest lõviosa on küll mehitamata, st oht inimeludele ei ole suur, aga tarkvaravea hind on sellegipoolest väga kõrge – peamiselt seetõttu, et „rikkiläinud” satelliiti ei ole võimalik tagasi kutsuda või talle uue programmi laadimiseks „külla sõita“.

QGeni eelkäija Gene-Auto üheks esimeseks kasutajaks oli Euroopa satelliiditootja EADS Astrium (praegune Airbus Defence and Space). Hetkel on seos kosmoseprojektidega peamiselt läbi Euroopa Kosmoseagentuuri (ESA). IB Kratese esimene leping ESAga oli PECS programmi raames 2014-2016 ning selle eesmärgiks oli IB Kratese ja AdaCore koodigeneraatori QGen sobitamine ESA poolt arendatavasse tarkvaraarenduse töövahendite raamistikku. Projekti tulemusena sai QGen ESA demoplatvormil kättesaadavaks ja muutus oluliselt lihtsamaks QGeni abil genereeritud tarkvaramoodulite integreerimine lõppseadmesse. Tööprotsessi demonstreerimiseks tehti katseülesanne Belgia kosmoseettevõtte SABCA tehtud servomootorite juhtimise algoritmil.

Teine ESA koostööprojekt on hetkel pooleli. See tegeleb QGeni koodigeneraatori laiendamisega, et toetada lisaks Simulinkile ja SDL ja VDM-SL mudeleid. Projekti olulisim lõpptulemus on tugi formaalsete lepingute (matemaatiliste spetsifikatsioonide) teisendamiseks ja läbi selle süsteemide lihtsamaks verifitseerimiseks. Katseülesannetena on juba töös TTÜ Mektory satelliidi projekti sideprotokoll ja plaanitud on testida ka ESA Mars Rover'i juhtimisalgoritmi. Kas sellest töövahendist Eesti ettevõtetel ka abi võiks olla? Kindlasti, kui arendatava süsteemi juhtimisosa on piisavalt keeruline, et tema modelleerimine põhjendatud on. Mudelite korrektsuse kontrolliks ja realiseerimise automatiseerimiseks tasub QGeni igal juhul kaaluda.

Loe ettevõtte kohta lisa: www.krates.ee
QGeni tootetutvustus: www.adacore.com/qgen