TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) J

Suurus: px
Alustada lehe näitamist:

Download "TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) J"

Väljavõte

1 TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) Juhendaja: Juhendaja: Kalmer Apinis, PhD Vesal Vojdani, PhD Tartu 2019

2 Nõrgima eeltingimuse staatiline analüüs pinukeeltele Lühikokkuvõte: Staatiline analüüs on üks viis programmide uurimiseks. Vastandina dünaaamilisele analüüsile ei pea staatilise analüüsi jaoks analüüsitavat koodi käivitama. Seetõttu võimaldab staatiline analüüs ohutumat ning üldisemat analüüsi kui dünaamiline. Käesolevas töös keskendutakse nõrgima eeltingimuse staatilisele analüüsile alt üles meetodil. Selle meetodi korrektsuse näitamiseks kasutatakse analüüsitavate programmide abstraksete mäluga pinumasinatena mudelleerimist. Alt-üles lähenemise eeliseks traditsiooniliste ülalt-alla meetodi ees on programmi semantika ebaoluliste osade analüüsi vältimine. Töö väljundina teostatakse staatilise analüüsi raamistikus Põder nõrgima eeltingimuse alt üles leidmise analüüs. Võtmesõnad: staatiline analüüs, nõrgim eeltingimus, pinumasin, Java baitkood CERCS: P170 Arvutiteadus, arvutusmeetodid, süsteemid, juhtimine (automaatjuhtimisteooria) 2

3 Weakest precondition static analysis for stack machines Abstract: Static analysis is a way to inspect software. As opposed to dynamic analysis, code does not need to be executed in order to be analysed. This property allows for safer and more general analysis than dynamic analysis. This thesis focuses on weakest precondition computation through a backwards static analysis. To show the soundness of this approach, the programs to be analysed are modelled as memory-augmented stack machines. The advangate of the backwards method compared to traditional forward analyses is avoiding analysing inconsequential properties of the program s semantics during verification. As a practical contrubition of this thesis, the weakest precondition analysis is implemented in the Põder static analyisis framework. Keywords: static analysis, weakest precondition, stack machine, Java bytecode CERCS: P170 Computer science, numerical analysis, systems, control 3

4 Sisukord 1 Sissejuhatus 6 2 Pinukeeled Pinu Mäluga pinukeeled Staatiline analüüs Staatilise analüüsi eelised Staatilise analüüsi liigid Andmevooanalüüs Tüübikontroll Programmide verifitseerimine Alt-üles ning ülalt-alla meetodi võrdlus Nõrgima eeltingimuse leidmine Eeltingimuse tuletamine Omistuslaused Tingimuslaused Tsüklilause Nõrgim eeltingimus mäluga pinukeeltele Lihtsad muutused pinus Mälu mõjutavad üleminekud Pinuindeksite nihe Funktsioonikutsed Teostusdetailid Implementatsioonikoodi näited Tsüklitega programmide analüüs Kokkuvõte 30 Viidatud kirjandus 31 Lisad 32 4

5 I. Litsents

6 1. Sissejuhatus Nõrgima eeltingimuse staatiline analüüs on üks oluline viis programmide analüüsimiseks. See võimaldab programme analüüsida neid käivitamata ning üleliigseid osasid analüüsimata jättes. Nõrgima eeltingimuse leidmiseks kasutatakse alt-üles meetodit. Käesolevas töös implementeeritakse alt-üles meetod staatilise analüüsi raamistikus Põder, mis tugineb juhtimisvoograafi analüüsil. Üldiselt on levinumad teised staatilised analüüsid, kus programme uuritakse nende käitlusjärjekorras (näiteks intervallanalüüs). Ka alt üles meetodi valimise puhul on tavaline valik nõrgima eeltingimuste tuletamine kõrgemal abstraktsioonitasemel. Käesoleva töö raames koostatud analüüsi praktiline osa käsitleb aga tavalisi Java baitkoodi instruktsioone. Töö eesmärk implementeerida nõrgima eeltingimuse analüsaator lihtsustatud Java baitkoodile [11], anda ülevaade pinukeeltest ja staatilisest analüüsist ning näidata, et programmi korrektsust võib olla mõistlik hinnata nõrgima eeltingimuse leidmisega meetodil. Programmi korrektsust on võimalik hinnata sobivalt valitud programmispetsiifiliste omaduste kehtimise kontrollimisega. Otsitakse minimaalseid eeldusi, mis peavad programmi alguses kehtima, et programmi lõpus kehtiks tingimus ψ. Neid eeldusi nimetatakse nõrgimaks eeltingimuseks. Kui nõrgimaks eeltingimuseks on samaselt tõene väide, siis tingimus ψ kehtib alati ning programm on korrektne. Staatiline analüüs on programmide analüüsimine ilma neid käivitamata [3]. Pinukeeled on arvutusmudelid, kus vahetulemusi säilitatakse pinus [5]. Käesolevas töös uuritakse täpsemalt nõrgima eeltingimuse staatilist analüüsi mäluga pinukeeltel. Töö esimeses sissejuhatavas peatükis antakse üldine ülevaade käsitletavatest teemadest. Teises peatükis tehakse ülevaade pinukeeltest ning spetsialiseerutakse mäluga pinukeeltele, millele antakse ka abstraktne definitsioon. Kolmandas peatükis kirjeldatakse lühidalt erinevaid staatilisi analüüse ning võrreldakse ülalt-alla ning alt-üles meetodeid. Neljandas peatükis keskendutakse alt-üles meetodile ehk leitakse nõrgimat eeltingimust. Esialgu vaadeldakse eeltingimusi abstraksetel kõrgkeeltel, edasi minnakse defineeritud pinukeelte ning Java baitkoodi analüüsimise juurde. Viiendas peatükis antakse tuuakse näiteid implementatsioonikoodist ning selgitatakse, kuidas analüüsitakse programme nõrgima eeltingimuse analüsaatoriga. Lõpetuseks tuuakse välja, mis õnnestus teostada. 6

7 2. Pinukeeled Pinukeel on arvutusmudel, kus vahetulemusi salvestatakse pinus. 2.1 Pinu Pinuks nimetatakse tühipinu või paari (s, ξ), kus s S ning ξ Ξ, kus S on pinusümbolite hulk ning Ξ kõigi pinude hulk. Saab defineerida pinusse elemendi lisamise tehte : S Ξ Ξ, kus s ξ := (s, ξ), mistahes s S ja ξ Ξ korral. Vastupidiselt, pinust pealmise elemendi võtmiseks on tehe : Ξ (S { ) Ξ, kus := (, ), (s, ξ) := (s, ξ). Tehe annab üldjuhul tulemuseks paari võetud elemendist ning alles jäänud pinust. Tühipinust elementi võtta ei saa, sel juhul on vastusepaari esimeseks elemendiks vaikeelement, mis väljendab pinusümboli puudumist. Matemaatiliselt on mugav vaadelda pinu paarina pinusümbolist ja sabapinust, kuid tegemist on siiski mudeliga tavalisest pinust, kus pinusümbolid on üksteise peal pinus. Kusjuures paari esimene element on pinu pealmine, alumised pinusümbolid on sabapinus. Üldiselt pinu kasutavad arvutusmudelid ei luba pinu teisiti mõjutada kui vaid pinusse peale elementi lisades või sealt pealt elementi võttes. Teisit öeldes, lubatud on vaid tehted ning, sabapinu elementide mõjutamine pole lubatud. 7

8 2.2 Mäluga pinukeeled Pinukeele arvutusmudelit kasutavates programmeerimiskeeltes kirjutatud programmid on pinumasinad. Tuntuim keel, mis pinukeele mudelit kasutab, on Forth [7]. Vaid pinukeele mudeli kasutamisel on probleem, et samu pinuelemente on tihti vaja pinus hoida mitmes kohas. Mäluga pinukeeled on sellised pinukeeled, kus arvutuste vahetulemusi saab lisaks pinule hoida ka mälus. Selline arvutusmudel aitab vähendada andmete dubleerimist. Java baitkood, mida analüüsib käesoleva töö praktiline osa, kasutab samuti mäluga pinukeele arvutusmudelit. Lähtudes Greibach i [5] artiklis antud pinumasina definitsioonist, vaadeldakse antud töös Java baitkoodi mäluga pinukeelna, mille programmid on järgnevalt defineeritud mäluga pinumasinad: Definition 1. Mäluga pinumasin on kaheksik (Q, Σ, S, δ, ξ 0, q 0, λ 0, Q F ), kus Q on olekute hulk; Σ on sisendsümbolite hulk; S on pinusümbolite hulk; δ : Q Ξ (N S) Σ Q Ξ (N S) {0, 1 on üleminekufunktsioon 1, kus 0 tähistab, et sisendsümbolit ei kasutatud ära ning 1 tähistab, et sisendsümbol kasutati ära; ξ 0 Ξ on algpinu; q 0 Q on algolek; λ 0 (N S) on mälu algolekfunktsioon; Q F Q on lõppolekute hulk. Antud töös ei keskenduta avaldiste tüüpidele, seega saab võtta pinusümboliteks ning sisendsümboliteks täisarvud. Neid kitsendusi arvestades on joonisel 1 kujutatud funktsioon võrdne mäluga pinumasinaga P = (Q, Z, Z, δ,, START, λ 0, {RETURN), kus 1 Käesolevas töös käsitletakse arvu 0 naturaalarvuna, st. N {0, 1, 2, 3, 4,... 8

9 Q = {START, ILOAD(0), ICONST_2, ISUB, ICONST_2, IADD, ISTORE(1), ILOAD(0), ILOAD(1), IF_ICMP, CONST_0, CONST_1, PÕDER, RETURN ; a, kui x = 0, λ 0 (x) = 0, muidu; ning δ on defineeritud parajasti järgnevate sisenditega: δ( START, ξ, λ 0, σ) = ( ILOAD(0), ξ, λ 0, 0); δ( ILOAD(1), ξ, λ 0, σ) = ( ICONST_2, (λ 0 (0), ξ), λ 0, 0); δ( ICONST_2, ξ, λ 0, σ) = ( ISUB, (2, ξ), λ 0, 0); δ( ISUB, (s 0, (s 1, ξ)), λ 0, σ) = ( ICONST_2, (s 1 s 0, ξ), λ 0, 0); δ( ICONST_2, ξ, λ 0, σ) = ( IADD, (2, ξ), λ 0, 0); δ( IADD, (s 0, (s 1, ξ)), λ 0, σ) = ( ISTORE(1), (s 1 + s 0, ξ), λ 0, 0); δ( ISTORE(1), (s 0, ξ), λ 0, σ) = ( ILOAD(0), ξ, λ 1, 0), s 0, kui x = 1, kus λ 1 (x) = λ 0 (x), muidu; δ( ILOAD(0), ξ, λ 1, σ) = ( ILOAD(1), (λ 1 (0), ξ), λ 1, 0); δ( ILOAD(1), ξ, λ 1, σ) = ( IF_ICMP, (λ 1 (1), ξ), λ 1, 0); δ( IF_ICMP, (s 0, (s 1, ξ)), λ 1, σ) = ( q, ξ, λ 1, 0); ICONST_1,, kui s 0 = s 1, kus q = ICONST_0,, kui s 0 s 1 ; δ( CONST_0, ξ, λ 1, σ) = ( PÕDER, (0, ξ), λ 1, 0); δ( CONST_1, ξ, λ 1, σ) = ( PÕDER, (1, ξ), λ 1, 0); δ( PÕDER, (s 0, ξ), λ 1, σ) = ( RETURN, ξ, λ 1, 0). public static void f( int a) { int b = a assert ( a == b) Joonis 1. Lihtne analüüsitav Java funktsioon. 9

10 (a) Põdra analüüsi väljundi juures kujutatud instruktsioonide graaf. (b) Pinumasina olekud. Joonis 2. Joonisel 1 2 kujutatud programmi graafid. Joonisel 2b on toodud mäluga pinumasina P olekuteskeem. Olekuskeemil olekutele kirjutatud IADD, ICONST_2, jt on pinumasina kontekstis vaid olekute tähised, masina töö 2 Põdraga analüüsides kastuatakse tingimuse c kehtimise kontrollimiseks assert(c) asemel P6der.check(c) 10

11 ei muutuks kuidagi, kui olekute nimed oleks abstraksed A, B, C jt. Sellised nimed on valitud, et aidata lugejal näha funktsiooni δ poolt defineeritud muutuste seost joonisel 2a kujutatud Põdra analüüsi väljundi juures oleva instruktsioonigraafiga. Edaspidi käsitletakse olekut M pinumasina kontekstis ning instruktsiooni M Java baitkoodi kontekstis samaväärsena, järgnevalt on kirjeldatud nendevaheline seos. Kui δ(m, ξ, λ, σ) = (M, ξ, λ, b), siis sisuliselt funktsioon δ väljendab, et kui rakendada instruksiooni M pinule ξ ja mälule λ saaksime sisendsümbol σ korral tulemuseks pinu ξ ning mälu λ. Vastuseneliku komponent b {0, 1 väljendab sisendsümboli σ säilimist sisendis. Vastuseneliku olek M ei ole otseselt instruktsiooni M täitmisega seotud, vaid väljendab, et instruktsiooni M täitmisele järgneb instruktsiooni M täitmine. Lisaks on oluline märgata, et näiteks olekud ICONST_2 ja ICONST_2 ei ole samad olekud, küll aga väljendab funktsioon δ sama instruktsiooni ICONST_2 täitmist, olenemata sellest, kas esimene argument on ICONST_2 või ICONST_2. Sama instruksiooni jaoks mitme oleku loomine on vajalik eelnevalt mainitud järjestusseose jaoks. Selle meetodi puuduseks on, et peame samade instruktsioonide tegevust pinu ja mäluga mitmekordselt kajastama, kuid seeeest pääseme instruktsioonide järjekorra eraldi hoidmisest. Definitsioonis 1 kirjeldatud mäluga pinumasin on õigusega pinumasin: kõik arvutused toimuvad pinus, mälu on vaid pinuelementide hoidmiseks. Kuigi funktsioon δ kirjeldab vaid enne ja peale instruktsiooni olevat pinu, opereeritakse pinuga sisuliselt siiski vaid tehete ning abil. Kui funktsiooni δ teine argument on ξ 0 ning tulemusneliku teine element on ξ f, siis mistahes teiste argumentide korral, on võimalik pinu ξ 0 teisendada tehete ning mingis kombinatsioonis rakendamisel pinuks ξ f, kus eismene argument on mingi sobivalt valitud pinusümbol. Näiteks kui funktsiooni δ esimene argument on IADD, siis rakendatakse argumentpinule ξ kaks korda tehet, väljavõetud elemendid liidetakse ning seejärel rakendatakse liitmise tulemusele ja viimasele tulemuspinule tehet. Seega tulemusneliku teine argument ξ 4 = (s 1 + s 0 ) ξ 3, kus (s 1, ξ 3 ) = ξ 2 ning (s 0, ξ 2 ) = ξ, kus ξ on funksiooni δ teine argument. 11

12 3. Staatiline analüüs Programmi staatiline analüüs on programmi valitud omaduste analüüsimine programmi käivitamata [3]. Vastandina, dünaamilist analüüsi tehakse analüüsitava programmi käitlusajal. 3.1 Staatilise analüüsi eelised Staatilisel analüüsil on dünaamilise ees mitmeid eeliseid [14]: Välisest allikast pärit koodi käivitamisel on alati risk, et see teeb midagi ohtlikku. Staatilist analüüsi saab kasutada nende ohtude ehk turvaaukude leidmiseks [9]. Testida saab vaid lõpliku hulga sisendparameetritega, staatilise analüüsita pole garantiid, et kood on korrektne. Soovitakse kontrollida joonisel 1 kujutatud lihtsa Java funktsiooni lõpus olevat tingimust a = b abstrakse sisendparameetri a korral. Tingimuse, mida staatilise analüüsiga võib saada vähese hulga teisendustega täielikult kontrollida, dünaamilise analüüsiga kontrollimine tähendaks selle tingimuse kehtimise kontrollimist mitme konktreetse a väärtuse korral. Olenevalt sisenditüübist võib programmide kõikvõimalike sisenditega testimine olla kulukas või võimatu. Antud näite dünaamiliselt täielikuks kontrollimiseks tuleks seda katsetada 2 32 parameetri a väärtuse korral, samas kui staatilise analüüsiga piisab järgnevast lihtsustusest: a = b a = a a = a Programmi käitumine võib sõltuda käivituskeskkonnast. See võib tekitada nii juhuslikke erisusi programmi kasutajate vahel kui ka anda pahatahtlikule programmile võimaluse oma tegevust testkeskkonnas peita. Kompilleerimisaegse staatilise analüüsi käigus leitud infot saame kasutada koodi optimeerimiseks. 12

13 Staatilisi analüüse tehakse programmi erinevate omaduste kontrollimiseks. Analüüsist saadud kasu sõltub suuresti sellest, mida täpsemalt analüüsime. 3.2 Staatilise analüüsi liigid Programmikoodis võib üritada analüüsida kõike, näiteks, kas a-tähti on rohkem muutujanimedes või võtmesõnades. Järgnevalt on lühidalt kirjeldatud levinumaid staatilisi analüüse Andmevooanalüüs Andmevooanalüüs (data-flow analysis) on staatiline analüüs, kus programmi igal täitmise sammu järel vaadeldakse võimalikke programmiseisundeid, milleks lihtsatel programmidel on programmiseisunditeks kõigi kasutatud muutujate väärtused, kuid seisunditeks võivad olla ka mistahes konkreetsele analüüsile olulised tunnused [12]. Andmevooanalüüsimisel käsitletakse analüüsitavat programmi suunatud graafina, kus programmi igal täitmise sammul liigutakse mööda kaart uude tippu (või mõnikord tsükli puhul juba külastatusse), tippudes toimub võimalike seisundite analüüs; seda graafi nimetatakse juhtimisvoograafiks (control-flow graph) [12] Tüübikontroll Tüübikontroll on staatilise analüüsi meetod, kus enne programmi käivitamist kontrollitakse tüüpide korrektsust. Programmeerimiskeelt nimetatakse tüübitud keeleks, kui igale muutujale on antud mittetriviaalne tüüp, vastasel juhul on tegemist tüüpimata keelga [2]. Vaid tüübitud keelte puhul on võimalik rääkida staatilisest tüübikontrollist. Selliste programmide korral saab tüübikontrolliga ennetada paljusid käivitusaegseid tüübivigu. Tüübitud keeli, mis läbivaid tüübikontrolli, nimetakse hästitüübituks, neid, mis tüübikontrollis põruvad, nimetatakse halvastitüübituks [2]. Tüübikontrollijate puhul on oluline, et nad lõpetaks töö mistahes programmi korral ning ei loeks korrektseks ühtki programmi, mis pole tegelikult tüübikorrektne, see aga toob Turingi-täielike programmeerimiskeelte puhul paratamatult kaasa mõningate tüübikorrektsete programmide mittelubamise [10]. Tüübikontrolli läbinud programm ei tähenda veel, et kogu programm oleks korrektne, viimase kindlustamiseks on vaja staatilisest tüübikontrollist tugevamaid vahendeid. 13

14 3.2.3 Programmide verifitseerimine Programmide verifitseerimine on staatilise analüüsi erijuht, kus üritatakse tõestada, et kehtivad valitud programmispetsiifilised omadused, mis moodustavad programmi spetsifikatsiooni [1, 8]. Programmide verifitseerija annab garantiisid programmi spetsifikatsioonide kehtimise kohta [4]. Programmide korrektsust saab uurida erinevatel viisidel, järgnevalt kirjeldatakse kahte levinumat võimalust programmide verifitseerimiseks. Ülalt-alla meetod Selle meetodi puhul hakatakse programmi tööd algusest analüüsima, ning vaadatakse lõpus, mida saab nende eeldustega garanteerida. Selle meetodi rakendamisel võib olla probleemiks, kui on vaja arvestada paljude erinevate eeldustega. Eelnevalt kirjeldatakse, et joonisel 1 toodud programmi analüüsimiseks on vaja sisuliselt läbi vaadata 2 32 erinevat a väärtust. Selle probleemi vältimiseks kasutatakse ülalt-alla analüüsi puhul intervallanalüüsi, programmi igas punktis vaadatakse iga täisarvulise muutuja kohta, mis on tema minimaalne ning maksimaalne võimalik väärtus [3]. Intervallanalüüs võimaldab suure hulga väärtusi korraga analüüsida, kuid võime kaotada täpsust, kui näiteks x saab olla väiksem kui 2 või suurem kui 2 (sel juhul saame intrevalliks kõik täisarvud, kuigi tegelikult 0, 1 ja 1 pole võimalikud). Alt-üles meetod Vastandina, alt-üles meetodi puhul otsutatakse, milles soovitakse programmi mingis punktis kindel olla ning uuritakse, mida on selle garanteerimiseks vaja eeldada. Neid eeldusi nimetatakse nõrgimaiks eeltingimuseks, kui nad garanteerivad parajasti soovitut, mitte rohkemat. Seda meetodit käsitletakse pikemalt nõrgima eeltingimuse peatükis Alt-üles ning ülalt-alla meetodi võrdlus Üks küllaltki selge alt-üles meetodi eelis on mittehuvitava sisu analüüsimise vältimine, kui lihtsustame tõestamist vajavaid tingimusi piisavalt agressiivselt. Näiteks joonisel 3 kujutatud koodi puhul vajab alt-üles analüüs vaid kolme viimast rida peameetodist, et teada, et funktsiooni lõpus kontrollitav tingimus ei kehti, sest siis oleks see kehtinud juba tingimuslause, mille kehas a omale tingimust a < 0 mitterahuldava väärtuse saab, juures. See lihtsustab edasist analüüsi, sest edasi ülespoole minnes vajame vaid, et eksisteeriks tulemus, pole oluline milline. 14

15 public static int f( int arv ) { return 2 * arv - 100; public static void main ( String [] args ) { int a = 10; int b = a * 15; b = 2 * b * b; b = f(f(b)); if (a < 10) { a = 100; assert (a < 10) ; Joonis 3. Osaliselt analüüsimiseks mitteolulise sisuga Java kood. Vähem selgena kehtib sama eelis ka ilma tingimuste lihtsustamiseta. Kuigi lihtsustamisega pääsetakse joonisel 3 toodud koodi analüüsides kolme reaga, saab ka ilma lihtsustamiseta vältida b kohta käivaid ridu, sest need ei mõjuta a kohta käiva tingimuse kehtimist. Selle eelise väljatoomine on oluline, sest lihtsustamisel on oma hind. Seetõttu on võimalik, et on vaja otsustada, kas ja millistes vahesammudes lihtsustamisega tegeleda. Üleliigse info analüüsi vältimise tõttu võimaldab alt-üles meetod kitsamat anaüüsi kui ülalt-alla meetod, sest saab kontrollida täpselt parasjagu huvitavate tingimuste kehtimist. Vastandina, ülalt-alla analüüsi puhul peab arvestama kõikvõimalike sisenditaga, kuid boonusena saab mõnikord allajõudes rohkem infot. Seega tuleb valida olukorrale vastav meetod analüüsimiseks, kui võimalikke sisendeid on vähe, kuid on vaja kontrollida paljude tingimuste kehtimist, on ülalt-alla meetod mõistlikum. Kui huvi pakub vaid üks tingimus, kuid võimalikke sisendeid on palju, tasub valida alt-üles meetod. Üks alt-üles meetodi puudus on keerukus võrreldes ülalt-alla meetodiga. Ülalt alla analüüsides saab lihtsalt liikuda järjest mööda programmiinstruktsioone ning nende tegevust modelleerida, alt üles meetodil aga on vaja iga instruktsioon nii-öelda ümber pöörata, et saada vastavale instruktsioonile eelnev seis. Tavaliste instruktsioonide puhul on see lihtsasti ületatav probleem, kuid näiteks tsüklitega on keerulisem. 15

16 public static void main ( String [] args ) { int a = sala (3) ; while (a < 10) { a = suurenda (a); assert (a!= 10) ; Joonis 4. Tsükliga Java programm. Joonisel 4 kujutatud programmi ülalt alla analüüsimisel saame kindlalt ilma tsükli sisu vaatamata öelda, et pärast tsükli läbimist tingimus a < 10 enam ei kehti, sest muidu ei oleks tsüklist väljutud. Vastupidiselt, alt üles analüüsides ei saa kuigi palju öelda muutuja a väärtuse kohta enne tsüklit. Näiteks, kui soovitakse kontrollida, kas tsükli järel kehtib tingimus a 10, siis on ainult teada, et kui a > 10, siis tsüklisse üldse ei minda ja kontrollitav tingimus a 10 kehtib. Nende juhtude, kus tsükli keha täitma minnakse, analüüsimine on keerukam. 16

17 4. Nõrgima eeltingimuse leidmine Programme alt üles meetodil uurides valitakse, milline tingimus või tingimused peavad programmi punktis x kindlasti kehtima ning otsitakse, mis on vähim, mida selle tingimuse kehtimiseks on vaja programmi punktis x, kusjuures programmi peab käivitamisel jõudma punkti x enne kui punkti x. 4.1 Eeltingimuse tuletamine Enne kui alapeatükis 4.2 vaadeldakse eeltingimusi pinukeeltel, käsitletakse siinkohal eeltingimuste tuletamist lihtsatel kõrgema taseme programmeerimiskeelte lausetel. Kui on teada, et lause B täitmise järel peab kehtima tingimus ψ, siis eeltingimuseks ψ nimetatakse sellist tingimust, mille kehtimisel vahetult enne lauset B, peab lause B täitmise järel alati kehtima tingimus ψ. Eeltingimuste moodustamisel kasutatakse tavalisi loogilisi sümboleid (eitus), (konjunktsioon ehk loogiline ja ), (disjunktsioon ehk loogiline või ), (implikatsioon) ning (ekvivalents). Lisaks on vaja tingimusi kujul α[q/r], mis tähistab tingimuse α struktuuriga tingimust erisusega, et kasutame avaldist Q kohtades, kus tingimuses α on avaldis R. Eeltingimusi saab leida ka mitmele lausele korraga. Moodustagu laused C 1, C 2, C 3,..., C n, kus n on mistahes naturaalarv, lausetejada C = {C 1, C 2, C 3,..., C n. Soovitakse leida eeltingimust ψ, mille kehtimisel vahetult enne lausetejada C kehtiks lausetejada C täitmise järel kindlasti teadaolev tingimus ψ n. Selleks tuleb leida tingimuse ψ n kehtimist garanteeriv eeltingimus ψ n 1 lausele C n. Edasi tuleb leida tingimust ψ n 1 garanteeriv eeltingimus lausele C n 1. Selliselt jätkates saab lõpuks leida lausele C 1 eeltingimuse ψ 0, mis on ka kogu lausetejada eeltingimus ψ. Lausetejada käsitletakse edaspidi ühe võimaliku lausena, lausetejada eeltingimust oskame leida eelkirjeldatud meetodil. Arvestades, et programmid on lausetejadad, on vaja programmi nõrgima eeltingimuse leidmiseks osata vaid üksikute lausete nõrgimaid eeltingimusi leida. Klassikaline loogika ütleb, et kui tingimusest α saab järeldada tingimuse γ, siis ka tingimusest α β saab järeldada tingimuse γ kehtimise. Selleks, et mitte lisada eeltingimusse ebaolulist infot, räägitakse nõrgimast eeltingimusest. Deterministlike keelte (ehk keelte, mille puhul sisendit teades on alati vaid üks võimalik programmiläbimistee) puhul on 17

18 nõrgimaks eeltingimuseks selline eeltingimus ψ, mille kehtimine on garanteeritud, kui teame, et kehtib järeltingimus ψ [15]. Tuginedes Huth jt [6] raamatule on järgnevalt analüüsitud erinevate lausete puhul, milline eeltingimus peab kehtima, et selle lause järel kehtiks tingimus ψ Omistuslaused Olgu lause B kujul x := A tähenduses, et muutujale x omistatakse avaldise A väärtus. Teame, et selle omistamise toimumise järel on muutuja x väärtus avaldise A väärtus. Seega kui tingimuses ψ öeldakse midagi muutuja x väärtuse kohta, peab see enne kehtima avaldise A kohta. Samas muutuja x kohta vahetult enne avaldist B nõudmisi pole, sest muutujale x antakse avaldises B uus väärtus. Järelikult sobib nõrgimaks eeltingimuseks ψ[a/x], mida on kujutatud ka joonisel 5a. ψ[a/x] x := A ψ (a) Üldkuju. y > 0 x := y x > 0 (b) Lihtne näide. y 9 > 0 y > 9 x = y 9 x > 0 (c) Lihtsustamisega näide. Joonis 5. Omistamise eeltingimus. Lihtsatel näidete puhul (vt joonis 5b) piisab lihtsalt asendamisest, kuid joonisel 5c omistatakse muutujale x keerulisem avaldis, sel juhul on võimalik ka lihtsustada. Edasises ei tooda eraldi välja võimalikke lihtsustusi, leitakse lihtsalt mingi korrektse nõrgim eeltingimus Tingimuslaused Tingimuslausetele nõrgima eeltingimuse leidmisel tuleb arvestada, et programmi täitmisel läbitakse olenevalt tingimuslause tingimusavaldise kehtimisest erinevaid lauseosasid. Tingimuslaused on kujul if A then C 1 else C 2, kus A on avaldis ning C 1 ja C 2 on laused. Soovitakse leida nõrgimat eeltingimust, mille korral selle tingimuslause järel kehtiks tingimus ψ. Joonistel 6a ja 6b on kujutatud eeldused, et lausete C 1 ja C 2 nõrgimad eeltingimused, mis garanteerivad vastavalt C 1 või C 2 täitmise järel tingimuse ψ kehtimise, on vastavalt φ 1 ja φ 2. 18

19 φ 1 C 1 ψ (a) C 1 eeldus. φ 2 C 2 ψ (b) C 2 eeldus. (A φ 1 ) ( A φ 2 ) if A then else ψ φ 1 C 1 ψ φ 2 C 2 ψ (c) Üldkuju. (b > 0 8 > 10) (b 0 a + 3 > 10) if b > 0 then 8 > 10 a = 8 a > 10 b = a 3 a > 10 else a + 3 > 10 a = a + 3 a > 10 a > 10 (d) Näide. Joonis 6. Tingimuslause nõrgim eeltingimus. Vastavalt sellele, kas avaldis A on tõene või mitte, on vaja tingimuslause eeldusse lisada eeldusi φ 1 ja φ 2, vt. joonis 6c. Terveks tingimuslause joonisel 6 kujutatud nõrgimaks eeltingimuseks on φ 1 C 1 ψ φ 2 C 2 ψ, (A φ 1 ) ( A φ 2 ) if A then C 1 else C 2 ψ kus joone all on lause ja selle nõrgim eeltingimus, kui on vaja järeltingimuse ψ kehtimist, ning joone peal on selle eeltingimuse kehtimiseks vajalikud eeldused. Joonisel 6d kujutatud näites on eeldused täidetud, sest tingimuslause harudes olevate lausete nõrgimaid eeltingimusi saab lihtsalt leida. Viimane tingimuslause nõrgima eeltingimuse kuju on toodud eelmainitud Huth jt [6] raamatu järgi. Käesoleva töö praktilises osas kasutatakse nõrgima eeltingimusena siintoodud eeltingimusega (A φ 1 ) ( A φ 2 ) samaväärset tingimust (A φ 1 ) ( A φ 2 ). Samaväärsus kehtib, sest tingimustest A ja A peab alati üks kehtima. Viimast tingimust kasutatakse, sest see ühildub paremini kasutatava staatilise analüüsi raamistikuga Põder. 19

20 4.1.3 Tsüklilause Olgu tsüklilause kujul while (A) C. Sarnaselt tingimuslause analüüsile saab teha eelduse, et φ C ψ. Kui avaldis A on väär, siis selleks, et tsükli järel kehtiks tingimus ψ, on vaja, et see kehtiks ka enne tsüklilauset, sest tsükli kehasse ei minda ning mingeid muutusi ei toimu. Kui avaldis A on tõene, siis tsükli viimase läbimise alguses kehtib eelduse järgi nõrgim eeltingimus φ. Olenevalt sellest, kas ka siis avaldis A on tõene, läbitakse tsüklit uuesti või mitte. Terveks nõrgimaks eeltingimuseks tuleb seega φ C ψ ξ while (A) C φ ( A ψ) (A ξ) while (A) C ψ. Selline eeltingimus pole kuigi hea, sest eeldused pole lihtsamad kui esialgne küsimus. Sellist meetodit kasutades jääb analüüs alt-üles meetodil enamasti lõpmatusse tsüklisse, sest tsüklitingimus kontrollimise hetkel pole alt poolt tulles eeldusi, mis ütleks, kas tsüklitingimus A kehtib või ei. Selle probleemi vältimiseks kasutatakse tsükliinvariante. Tsükliinvariant on tsükli kohta tehtav oletus, mis kujutab endas tingimust, mis peab kehtima enne tsüklit ning iga tsüklikeha läbimise järel (järelikult ka terve tsüklilause lõpus). µ while (A) { A µ φ C µ A µ ψ (a) Üldjuht. x 10 while (x < 10) { x < 10 x 10 x x := x + 1 x 10 x 10 x 10 x = 10 (b) Näide. Joonis 7. Tsüklilause eeltingimus teadaoleva invariandiga. Oletused, mis võiks olla tsükli invariant, tehakse vaadeldavast nõrgima eeltingimuse leidmise analüüsist väljaspool. Seega olgu leitud üks sobiv analüüsitava tsükli invariant µ. Selleks, et see invariant sobiks tsüklilause eeltingimuseks järeltingimuse ψ kehtimiseks, peab kehtima A µ ψ ning kui kasutada eelnevalt mainitud eeldust φ C ψ, siis peab ka kehtima, A µ φ. Eeltingimust on kirjeldatud joonisel 7. 20

21 Leitud eeltingimus µ on nõrgim, kui kehtivad nii samaväärsus ( A µ) ψ kui ka samaväärsus (A µ) φ (joonisel 7a rohelisega read). Kokkuvõttes, tsüklilause nõrgim eeltingimus järeltingimuse ψ kehtimiseks avaldub kujul: A µ C µ (A µ) ψ µ while (A) C A µ. Joonisel 7b toodud näites kehtivad mõlemad samaväärsused ning x 10 on nõrgim eeltingimus, mis kindlustab, et peale tsüklit on muutuja x väärtus Nõrgim eeltingimus mäluga pinukeeltele Loeckx jt [13] defineerivad nõrgima eeltingimuse vooskeemi (flowchart) keeletele, sellele tuginedes defineeritakse käesolevas töös nõrgim eeltingimus definitsioonis 1 kirjeldatud mäluga pinukeeltele: Definition 2. Nõrgimaks eeltingimuseks mäluga pinumasina P = (Q, Σ, S, δ, ξ 0, q 0, λ 0, Q F ) ja järeltingimuse φ : (Ξ (N S) Bool) korral nimetatakse predikaati ψ : (Ξ (N S) Bool), mille korral kehtib ψ(ξ 0, λ 0 ) φ(ξ f, λ f ), kus ξ f ja λ f on vastavalt pinu ja mälu olekud hetkel kui P (algpinuga ξ 0 ja algmäluga λ 0 ) jõuab (sisendist olenevalt) mingisse lõppolekusse, kusjuures nõrgimaks eeltingimuseks sobivad vaid sellised predikaadid ψ, mille korral mäluga pinumasin P jõuab mistahes sisendiga mingisse lõppolekusse. Eelnevalt toodud näidetes (joonistel 5b, 5c, 6d ja 7b) on tingimustes kasutatud muutujanimesid. Mäluga pinumasina puhul peab arvestama, et tingimustes on nende asemel pinuasukohad ning mäluasukohad. Pinussümbolid on tähistatud s 0, s 1, s 2,..., alustades pinu pealmisest elemendist. Näiteks, kui tingimus on kujul s 1 = 8, siis see tähendab, et pinu pealtpoolt teine element peab olema sellel hetkel Lihtsad muutused pinus Definitsioonis 1 kirjeldatud mäluga pinumasina üleminekufunktsioon δ võib kirjeldada erinevaid lihtsaid pinumodifikatsioone. Java baitkoodi instruktsioon ISUB võtab pinust 21

22 kaks pealmist elementi ning lisab pinusse nende vahe, selle instruktsiooni kirjeldus pinumasina definitsioonis oleks δ(isub, (s 0, (s 1, ξ))), λ, σ) = (M, (s 1 s 0, ξ), λ, 0), kus M on Java baitkoodi instruktsioon, mis järgneb instruktsioonile ISUB. Kui on vaja, et instruktsiooni ISUB järel kehtiks tingimus s 0 = 8, kus s 0 tähistab pinu pealmist elementi. Enne instruktsiooni ISUB toimumist pidi seega pinu kahe pealmise elemendi vahe olema 8. Teostatud nõrgima eeltingimuse leidja teisendab instruktsiooni ISUB alt üles läbides reegli s 0 = 8 reegliks s 1 s 0 = 8. Sarnaselt toimitakse ka teiste lihtsate Java baitkoodi instruktsioonidega Mälu mõjutavad üleminekud Mälu kirjeldab definitsioonis 1 funktsioon λ. Mälu mõjutavad Java baitkoodi instruktsioonid ILOAD(n) ning ISTORE(n), kus n on täisarv, mis näitab millisel indeksil mälu muudetakse. Mõjutatavat mäluvälja saab kirjeldada nimetusega l n. Instruktsioon ISTORE(3) võtab pinu pealmise elemendi ning paigutab selle mällu kohale 3. Vastav kirjeldus pinumasina keeles oleks δ(istore(3), (s 0, ξ)), λ, σ) = (M, ξ, λ 1, 0), s 0, kui a = 3, kus M on järgmine instruktsioon ning λ 1 (a) = λ(a), muidu. Järelikult, element, mis enne instruktsiooni ISTORE(3) oli pinu pealmine, on peale seda instruktsiooni mälus kohal 3, kusjuures pole teada, mis oli mälus kohal 3 enne. Seega, kui peale seda instruktsiooni peab kehtima tingimus ψ, siis enne instruktsiooni oleva tingimuse leidmiseks tuleb kõik mäluindeksi l 3 esinemised asendada pinuindeksiga s 0, tingimuseks saaks ψ[s 0 /l 3 ]. Vastupidiselt instruktsioonile ISTORE(n) lisab instruktsioon ILOAD(n) pinu peale elemendi, mis on mälus kohal n. See instruktsioon mälu ei muuda. Nõrgima eeltingimuse leidmiseks tuleb asendada kõik pinuindeksi s 0 esinemised asendada mäluindeksiga l 0. 22

23 4.2.3 Pinuindeksite nihe Eelnevalt alapeatükkides ja vaadeldi vaid otseselt instruktsioonist mõjutatud muutusi, mis kirjeldab pinu pealmist elementi. Kui aga on reegleid ka pinu teiste elementide kohta, siis peab arvestama sellega, et instruktsioon võib mõjutada (juhul, kui elementide arv pinus muutub) indekseid pinus. Pinu saab muuta vaid tehetega ning, seega pinu alumiste elementide kohta käivaid reegleid saab parandada vaid pinuindeksite nihutamisega, mis kujutab endast kõigi pinuindeksite sama palju suurendamist või vähendamist. Selleke, et instruktsiooni M järel kehtiks reegel α, peab enne M täitmist kehtima β, mis on sama reegliga α, kus on muudetud otseselt instruktsioonist mõjutatud reegliosad ning kus sügavamate pinusümbolite indekseid suurendatud ühe võrra iga instrukstioonis M oleva tehte kohta ning vähendatud ühe võrra iga seal oleva tehte kohta. Eelmises alapeatükis toodud näide, kuidas instruktsioon ISTORE(3) mõjutab reegleid, kehtib mainitud kujul vaid siis, kui reeglites pole ühtegi tingimust pinusümbolite kohta. Kuna ISTORE(3) võttis pinust ühe elemendi ära, siis kõigi reeglites mainitud pinusümbolite indekseid tuleb ühe võrra suurendada, et teha pinu peale ruumi pinusümbolile, mille ISTORE(3) pinust eemaldas, kuid mis seal enne seda instruktsiooni oli. Seega, nõrgimaks eeltingimuseks sobinuks tegelikult (suurenda_pinuindekseid(ψ)) [s 0 /l 3 ] Funktsioonikutsed Java funktsioonid võtavad oma argumendid pinu pealmistest elementidest, kuid funktsioonile tunduvad need kui mälumuutujad. Funktsioon ei näe välise keskkonna mälu ega pinu. Juhul kui funktsioon tagastab midagi, paneb ta selle lõpuks pinu peale, ja see element saab ka välise pinu pealmiseks elemendiks. Vältimaks sama funktsiooni mitmekordset analüüsi (juhul, kui sama funktsiooni kutsutakse välja korduvalt), on mõistlik analüüsida funktsioone kontekstist sõltumatult. Funktsiooni sisse vaadatakse ainult programmiinstruktsioonides tagant ette liikudes esimest korda selle funktsioonini jõudes. Funktsiooni sisenemiseks on samuti vaja arvutada nõrgim eeltingimus ehk tingimus, mis peab kehtima kutsutud meetodi lõpuks, et kehtiks funktsiooni järel olev tingimus. 23

24 Java funktsioonid võivad olla tagastustüübita (void) või tagastustüübiga, selles töös käsitletakse vaid täisarve, seega olgu tagatustüübiga funktsioonid täisarvulise tagastustüübiga. Kui analüüs jõuab programmi lõpu poolt tulles esimest korda mingi funktsioonikutseni, siis tagastustüübiga funktsioonile antakse vaid reegel Ret = s 0. Välist programmi saavad mõjutada vaid tagastatav väärtus ning funktsioonis globaalsete muutujate muutmine. Käesolevas töös arvestatakse, et globaalsed muutujad pole lubatud. Tagastustüübiga funktsiooni sisenemisel on seega nõrgim eeltingimus, et pinu peal on tagastatav väärtus. Tagastustüübita funktsioonile antakse true, sest globaalsete muutujateta süsteemis on selliste funktsioonide puhul oluline vaid termineerumine. Funktsiooni sees toimub analüüs tavapärasel moel, sammhaaval alt üles. Olenemata sellest, kas funktsiooni läbiti parasjagu selleni jõudes või olid funktsioonireeglid juba olemas, on peale funktsioonikutse alt üles läbimist vaja ühendada välise keskkonna ja väljakutsutud funktsiooni reeglid. Tagastustüübita funktsioon välise keskkonna reegleid ei mõjuta, sel juhul jäävad kehtima välised reeglid. Olgu täisarvulise tagastusüübiga funktsiooni reeglid φ ning välised reegilid ψ. Selleks, et saada sama tulemus kui iga kord funktsioonikutsel funktsiooni läbides saanuks, tuleb ühendamisel tekitada reegel φ[ψ[a/s 0 ]/Ret = a] ehk reegel, mille struktuur on funktsioonireegli oma, kuid kõik avaldised kujul Ret = a on asendatud reegli ψ struktuuriga, kus s 0 asemele on pandud avaldis a. Lisaks mainitule tuleb enne ühendamist arvestada ka pinuindeksite nihkega ning sellega, et välise programmi jaoks on funktsioonisisesed mälumuutujad pinus. 24

25 5. Teostusdetailid Käesoleva töö praktiline osa on teostatud staatilise analüüsi keskkonnas Põder [11]. Põder on implementeeritud programmeerimiskeeles Scala, mis on tugevalt tüübitud funktsionaaset paradigma toetav objektorienteeritud Javaga ühilduv programmeerimiskeel. Põder kasutab oma analüüside jaoks andmevooanalüüsi, mida erinevaid programmiseisundeid uurides saab kasutada erinevate analüüside jaoks. Põdras on implementeeritud mitmeid erinevaid analüüse, näiteks ülalpool mainitud intervallanalüüs. Käesoleva töö raames tehakse nõrgima eeltingimuse leidmise analüüsi alt-üles meetodil. Teostus on implementeeritud failis WP.scala. Nõrgima eeltingimuse leidmise analüüs ühildub teiste raamistikus Põder olevate analüüsidega, kuigi selle analüüsi spetsiifilisuse tõttu tuli teha raamistikus mitmeid kohandusi. 5.1 Implementatsioonikoodi näited Analüsaatori koostamise põhiliseks tegevuseks on erinevate instruktsioonidega käitumise implementeerimine. Joonsel 8 on toodud ülalpool mainitud lihtinstruktsioonide implementatsioonid. case xload (_, i) => d : dl => { vs( Logic. repl (Map [Val, dl ]( SVar (0) -> app ( LVar (i.x.get ))))(d)) case xstore (_, i) => d => { Logic. repl (Map [Val, dl ]( LVar (i.x. get ) -> app ( SVar (0))))(sS(d)) case i: ICONST = > d = > { vs( Logic. repl (Map [Val, dl ]( SVar (0) -> app ( IVal (i.n))))(d)) case xadd (x) => d => { Logic. repl (Map [Val, dl ]( SVar (1) -> app ( Ident ("+"), SVar (1), SVar (0) )))(ss(d)) case xsub (x) => d => { Logic. repl (Map [Val, dl ]( SVar (1) -> app ( Ident ("-"), SVar (1), SVar (0) )))(ss(d)) Joonis 8. Mõningate lihtinstruktsioonide implementatsioon. 25

26 Nõrgima eeltingimuse leidmiseks on ette antud instruktsioon ning järeltingimus, mille kehtimist on vaja garanteerida. Esimesel toodud juhul case xload(_, i) => d : dl on instruktsiooniks ILOAD(i) ning järeltingimuseks d, mis on tüüpi dl. Vastavalt peatükkides ja kirjeldatule asentakse nõrgima eeltingimuse saamiseks tingimuses d kõik pinuindeksid SVar(0) ehk s 0 mäluindeksitega LVar(i.x.get) ehk l i ning seejärel vähendatakse (kasutades abifunktsiooni vs), kõiki ülejäänusid pinuindekseid ühe võrra, et täita selle elemendi koht, mis tuleb alles instruktsiooniga ILOAD(i). Vastupidiselt, juhul case xstore(_, i) => d ehk instruktsiooniks ISTORE(i) ning järeltingimuse d korral, suurendatakse kõigepealt abifunktsiooni ss abil kõiki pinuindekseid ühe võrra ning siis täidetakse tühjaks jäänud koht asendusega l i s 0, mis kirjeldab, et enne instruktsiooni ISTORE(i) oli hiljem mälus kohal l i olev element pinu pealmine. Instruktsiooni ICONST(n) väljendab juhtum case i: ICONST => d. Kui pinu peale lisatakse arv n, siis kõik, mida nõutakse pinu pealmise elemendi kohta, peab enne seda instruktsiooni kehtima arvu n kohta. Enne seda instruktsiooni olid teised pinus olevad elemendid kõrgemal, sest lisatavat konstanti veel ei olnud. Seega nõrgima eeltingimuse saamiseks asendatakse reeglis d kõik pinuindeksid s 0 arvuga n ning seejärel vähendatakse kõiki teisi pinuindekseid. Juhtudel case xadd(x) => d ja case xsub(x) => d võtavad instruktsioonid IADD ning ISUB kaks pinu pealmist elementi ja lisavad pinusse vastavalt summa või vahe. Eelnevalt oli seega pinus üks element rohkem, sellele elemendile ruumi tekitamiseks tuleb reeglites kõiki pinuindekseid suurendada ühe võrra, ning seejärel pärast instruktsiooni oleva pinu pealmise elemendi kohta käivaid reegleid muuta. Kuna kõigi pinuindeksite suurendamine tegi ka indeksist s 0 indeksi s 1, on vaja asendust s 1 s 1 ± s 0. Kõik joonisel 8 kujutatud instruktsioonide implementatsioonid kasutavad pinuindeksite nihke abifunktsiooni vs või ss, mis vastavalt vähendavad või suurendavad kõiki reeglites esinevaid pinuindekseid. Joonisel 9 kujutatud funktsioon ss võtab argumendiks reegli, ning tagastab esialgsega sarnase reegli, kus on kõiki pinuindekseid ühe võrra suurendatud. Ehk tehakse asendused SVar(0) SVar(1), SVar(1) SVar(2) jne. Selleks kasutatakse klassi Logic meetodit getatoms, mis teeb reeglist algosad. Neid algosasid läbi mustrisobitusega läbi vaadates leitakse kõik pinusümboleid tähistavad SVar tüüpi algosad. Iga leitud SVar(n) 26

27 kohta tehakse asendusreegel SVar(n) SVar(n + 1). Saadud reeglite järgi teeb klassi Logic meetod repl vajalikud asendused. def ss(a: dl): dl = { def ss(s: Seq [ Val ]): List [( Val, dl)] = s match { case Seq () => List () case SVar (n) +: xs => ( SVar (n), app ( SVar (n + 1))) :: ss(xs) case x +: xs => ss(xs) Logic. repl (ss( Logic. getatoms (a)). tomap )(a) Joonis 9. Pinuindeksite suurendamise funktsioon. Klass Logic on raamistiku Põder klass, mida antud töö raames koostatud analüüs kõige rohkem otseselt kasutab. Kasutatakse nii juba mainitud meetodeid getatoms ning repl kui ka reeglite ühendamiseks sobivaid loogikameetodeid and, or ja not. Joonisel 1 kujutatud programm saab analüüsimisel väljundi, mis on kujutatud joonisel 10. Analüüsi käivitamisel läbitakse alt üles programmi instruktsioone ning muudab kehtima pidavaid tingimusi vastavalt läbitavatele instruktsioonidele. Teostatav implementatsioon ei tegele saadud avaldiste lihtsustamisega vahesammudes. Kui üles jõudes on tingimus samaselt tõene, siis kontrollitav avaldis kehtib, kui ei ole samaselt tõene, siis pole kontrollitava analüüsi kehtivus garanteeritud. Enne kontrolli algust on eeltingimus samaselt tõene, sest pole vaja midagi kontrollida. Põdra analüüsi välja kutsudes tekib tingimus, et pinu peal peab olema 1. Seda väärtust ei saa joonisel vasakust harust tulla, seega seal on tingimus samaselt väär. Hargnemise ühendamisel tekib tingimus, et peab minema parempoolsesse harusse ja seal olev tingimus peab kehtima. Kui mõlemad harud oleks võimalikud, tekiks tingimus kujul (A φ 1 ) ( A φ 2 ), kus A on hargnemistingimus ning φ 1 ja φ 2 on kummagi haru tingimused. Funktsiooni alguses on nõrgim eeltingimus samaselt tõene, seega joonisel 1 kujutatud funktsioon f on korrektne. 27

28 (l 0 (l 0 2) + 2) 1 = 1 ehk (l 0 l 1 ) 1 = 1 ehk l 0 = l 1 (s 1 s 0 ) 1 = 1 ehk s 0 = s = 1 ehk 1 = s = s 0 Joonis 10. Joonisel 1 3 kujutatud programmi analüüs. 3 Põdraga analüüsides kastuatakse tingimuse c kehtimise kontrollimiseks assert(c) asemel P6der.check(c) 28

29 5.2 Tsüklitega programmide analüüs Joonisel 11 on kujutatud tsükliga programmi, mida soovime analüüsida. public class TestWhile { public static void main ( String [] args ) { int x = 5; P6der. invariant ("(<= x 10) "); while (x < 10) { x++; P6der. check (x == 10); Joonis 11. Anaüüsitav tsükliga Java programm. Tsükliga programmi puhul annab kasutaja lisaks kontrollitavale tingimusele kaasa ka tsükliinvariandi. Tsüklilauset analüüsib Põdra raamistikku lisatud nõrgima eeltingimuse leidja sarnaselt peatükis kirjeldatud skeemile. Analüsaator arvestab kasutaja pakutud invariandi kehtimisega, kuid väljastab hoiatuse, kui see invariant ei sobi või kui ta ei suuda nõutud samaväärsusi tõestada. Kuid mistahes juhul antakse see invariant edasi järgmisele instruktsioonile. 29

30 6. Kokkuvõte Staatiline analüüs on üks viis programmide uurimiseks. Vastandina dünaaamilisele analüüsile ei pea staatilise analüüsi jaoks analüüsitavat koodi käivitama. Töö väljundina teostatakse staatilise analüüsi raamistikus Põder nõrgima eeltingimuse alt üles leidmise analüsaator. Töö autori panus on leitav allikast [11] muudatusteajaloost autorinimelistest kehtestustest (commits). Muudatusi tehti failis WP.scala, kus töö autor sobitas Põdra raamistikku erinevate Java baitkoodi instruktsioonide alt-üles analüüsi. Käesolevas töös tuuakse välja et, staatilise analüüsi peamine eelis dünaamilise ees on ohutum anaüüs ning alt-üles lähenemise eeliseks traditsiooniliste ülalt-alla meetodi ees on programmi semantika ebaoluliste osade analüüsi vältimine. Lisaks tuuakse välja, kuidas erinevatel juhtudel nõrgimat eeltingimust leida ning selgitatakse, et tsüklite alt-üles anaüüsimisel tuleb termineeruva analüüsi saamiseks leida tsüklitele invariant ehk tingimus, mis peab kehtima enne tsüklit ning iga tsükliläbimiskorra järel. Käesolevas analüüsis saadakse see invariant väljaspoolt: analüsaatori kasutaja lisab selle tsüklile. Töö praktilisest osast on puudu instruktsioonide vahesammudes avaldiste lihtsustamine. Ühe võimaliku edasiarendusena on võimalik otsustada, kas vahepealne lihtsustamine on mõistlik ning see vajadusel teostada. Lisaks saab praegune analüsaator hakkama vaid lihtsamate Java programmidega. Teise võimaliku edasiarendusena saaks nõrgima eeltingimuse analüsaatorit täiendada nii, et ta aksepteeriks rohkemaid erinevaid programme. 30

31 Viidatud kirjandus [1] Mike Barnett ja K Rustan M Leino. Weakest-Precondition of Unstructured Programs (2005). [2] Luca Cardelli. Type Systems (1996). [3] Patrick Cousot ja Radhia Cousot. Static determination of dynamic properties of programs. Teoses: Proceedings of the 2nd International Symposium on Programming, Paris, France. Dunod [4] Cormac Flanagan et al. Extended static checking for Java. ACM Sigplan Notices 37.5 (2002), lk [5] Sheila Greibach. Checking automata and one-way stack languages. Journal of Computer and System Sciences 3.2 (1969), lk [6] Michael Huth ja Mark Ryan. Logic in Computer Science: Modelling and reasoning about systems. Cambridge university press, [7] Philip Koopman. Stack computers: the new wave (1989). [8] Barbara Liskov, John Guttag et al. Abstraction and specification in program development. Köide 180. MIT press Cambridge, [9] Benjamin Livshits ja Monica S Lam. Finding Security Vulnerabilities in Java Applications with Static Analysis (2005). [10] Benjamin C Pierce ja C Benjamin. Types and programming languages. MIT press, [11] Põder. Lähtekood. URL: https : / / bitbucket. org / kalmera / poder / src / master/. [12] Simmo Saan. Abstraktsete domeenide omaduspõhine testimine. Bakalaureusetöö. Tartu Ülikool, [13] Kurt Sieber. The foundations of program verification. Springer-Verlag, [14] Jiang Zheng et al. On the value of static analysis for fault detection in software. IEEE transactions on software engineering 32.4 (2006), lk [15] D Wood. A note on top-down deterministic languages. BIT Numerical Mathematics 9.4 (1969), lk

32 Lisad I. Litsents Lihtlitsents lõputöö reprodutseerimiseks ja üldsusele kättesaadavaks tegemiseks Mina, Mirjam Iher, 1. annan Tartu Ülikoolile tasuta loa (lihtlitsentsi) minu loodud teose Nõrgima eeltingimuse staatiline analüüs pinukeeltel, mille juhendajad on Kalmer Apinis ja Vesal Vojdani, reprodutseerimiseks eesmärgiga seda säilitada, sealhulgas lisada digitaalarhiivi DSpace kuni autoriõiguse kehtivuse lõppemiseni. 2. Annan Tartu Ülikoolile loa teha punktis 1 nimetatud teos üldsusele kättesaadavaks Tartu Ülikooli veebikeskkonna, sealhulgas digitaalarhiivi DSpace kaudu Creative Commonsi litsentsiga CC BY NC ND 3.0, mis lubab autorile viidates teost reprodutseerida, levitada ja üldsusele suunata ning keelab luua tuletatud teost ja kasutada teost ärieesmärgil, kuni autoriõiguse kehtivuse lõppemiseni. 3. Olen teadlik, et punktides 1 ja 2 nimetatud õigused jäävad alles ka autorile. 4. Kinnitan, et lihtlitsentsi andmisega ei riku ma teiste isikute intellektuaalomandi ega isikuandmete kaitse õigusaktidest tulenevaid õigusi. Mirjam Iher 20. mai a. 32

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi*r^2, Float -> Int Infixoperaatori kasutamiseks prefix-vormis

Rohkem

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06 Andmebaaside projekteerimine Erki Eessaar Esimene trükk Teadaolevate vigade nimekiri seisuga 24. juuni 2013 Lehekülg 37 (viimane lõik, teine lause). Korrektne lause on järgnev. Üheks tänapäeva infosüsteemide

Rohkem

Word Pro - diskmatTUND.lwp

Word Pro - diskmatTUND.lwp Loogikaalgebra ( Boole'i algebra ) George Boole (85 864) Sündinud Inglismaal Lincolnis. 6-aastasena tegutses kooliõpetaja assistendina. Õppis 5 aastat iseseisvalt omal käel matemaatikat, keskendudes hiljem

Rohkem

Word Pro - digiTUNDkaug.lwp

Word Pro - digiTUNDkaug.lwp / näide: \ neeldumisseadusest x w x y = x tuleneb, et neeldumine toimub ka näiteks avaldises x 2 w x 2 x 5 : x 2 w x 2 x 5 = ( x 2 ) w ( x 2 ) [ x 5 ] = x 2 Digitaalskeemide optimeerimine (lihtsustamine)

Rohkem

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Konstruktorile antakse andmed, mis iseloomustavad mingit

Rohkem

loeng7.key

loeng7.key Grammatikate elustamine JFLAPiga Vesal Vojdani (TÜ Arvutiteaduse Instituut) Otse Elust: Java Spec https://docs.oracle.com/javase/specs/jls/se8/html/ jls-14.html#jls-14.9 Kodutöö (2. nädalat) 1. Avaldise

Rohkem

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü DIGITAALTEHNIKA DIGITAALTEHNIKA... 1 1. Arvusüsteemid.... 2 1.1.Kümnendsüsteem....2 1.2.Kahendsüsteem.... 2 1.3.Kaheksandsüsteem.... 2 1.4.Kuueteistkümnendsüsteem....2 1.5.Kahendkodeeritud kümnendsüsteem

Rohkem

Microsoft Word - ref - Romet Piho - Tutorial D.doc

Microsoft Word - ref - Romet Piho - Tutorial D.doc Tartu Ülikool Andmetöötluskeel "Tutorial D" realisatsiooni "Rel" põhjal Referaat aines Tarkvaratehnika Romet Piho Informaatika 2 Juhendaja Indrek Sander Tartu 2005 Sissejuhatus Tänapäeval on niinimetatud

Rohkem

Andmed arvuti mälus Bitid ja baidid

Andmed arvuti mälus Bitid ja baidid Andmed arvuti mälus Bitid ja baidid A bit about bit Bitt, (ingl k bit) on info mõõtmise ühik, tuleb mõistest binary digit nö kahendarv kahe võimaliku väärtusega 0 ja 1. Saab näidata kahte võimalikku olekut

Rohkem

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et Excel2016 - Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et programm suudaks anda tulemusi. Mõisted VALEM - s.o

Rohkem

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimused: faili nimi faili vanus faili tüüp... 1 Failiotsing:

Rohkem

vv05lah.dvi

vv05lah.dvi IMO 05 Eesti võistkonna valikvõistlus 3. 4. aprill 005 Lahendused ja vastused Esimene päev 1. Vastus: π. Vaatleme esiteks juhtu, kus ringjooned c 1 ja c asuvad sirgest l samal pool (joonis 1). Olgu O 1

Rohkem

loeng2

loeng2 Automaadid, keeled, translaatorid Kompilaatori struktuur Leksiline analüüs Regulaaravaldised Leksiline analüüs Süntaks analüüs Semantiline analüüs Analüüs Masinkoodi genereerimine Teisendamine (opt, registrid)

Rohkem

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad 1 / 16 7. loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad 2 / 16 Sisend/väljund vaikimisi: Termid: read, write?-read(x). : 2+3. X = 2+3.?-write(2+3). 2+3 true. Jooksva sisendi vaatamine: seeing?-

Rohkem

(loeng3-ohtlikud_koodiloigud)

(loeng3-ohtlikud_koodiloigud) #include int main (void) uint8_t arr[] = 0x11, 0x22 uint16_t *ptr; ptr = (uint16_t*)&arr[0]; printf ("arr: 0x%02x, 0x%02x\n", arr[0], arr[1]); printf ("ptr: 0x%04x\n", *ptr); /* vigane pointeri

Rohkem

Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni a.

Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni a. Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni 2019. a. 2 Sisukord 1 Matemaatiline loogika 7 1.1 Lausearvutus.................................. 7 1.1.1 Põhimõistete meeldetuletamine....................

Rohkem

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx Tartu Ülikool CVE-2013-7040 Referaat aines Andmeturve Autor: Markko Kasvandik Juhendaja : Meelis Roos Tartu 2015 1.CVE 2013 7040 olemus. CVE 2013 7040 sisu seisneb krüptograafilises nõrkuses. Turvaaugu

Rohkem

raamat5_2013.pdf

raamat5_2013.pdf Peatükk 5 Prognoosiintervall ja Usaldusintervall 5.1 Prognoosiintervall Unustame hetkeks populatsiooni parameetrite hindamise ja pöördume tagasi üksikvaatluste juurde. On raske ennustada, milline on huvipakkuva

Rohkem

Funktsionaalne Programmeerimine

Funktsionaalne Programmeerimine Geomeetrilised kujundid Geomeetriliste kujundite definitsioon: data Shape = Rectangle Side Side Ellipse Radius Radius RtTriangle Side Side Polygon [Vertex] deriving Show type Radius = Float type Side =

Rohkem

PHP

PHP PHP Autorid: Aleksandr Vaskin Aleksandr Bogdanov Keelest Skriptikeel skript teeb oma tööd pärast seda, kui toimus mingi sündmus* Orienteeritud programmeerija eesmärkide saavutamiseks (mugavus on tähtsam

Rohkem

TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit

TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilitavate rakenduste loomiseks Bakalaureusetöö (4 AP) Juhendaja:

Rohkem

Funktsionaalne Programmeerimine

Funktsionaalne Programmeerimine Kõrvalefektid ja Haskell Kõik senised programmid on olnud ilma kõrvalefektideta; so. puhtalt funktsionaalsed. Programmi täitmise ainsaks efektiks on tema väartus. Osade ülesannete jaoks on kõrvalefektid

Rohkem

Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier

Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier 09.02.2019 Miks on ülesannete lahendamise käigu kohta info kogumine oluline? Üha rohkem erinevas eas inimesi õpib programmeerimist.

Rohkem

E-arvete juhend

E-arvete juhend E- arvete seadistamine ja saatmine Omniva kaudu Standard Books 7.2 põhjal Mai 2015 Sisukord Sissejuhatus... 3 Seadistamine... 3 Registreerimine... 4 E- arve konto... 5 Vastuvõtu eelistus... 5 Valik E-

Rohkem

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x 1 5.5. Polünoomi juured 5.5.1. Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n 1 +... + a n 1 x + a n K[x], (1) Definitsioon 1. Olgu c K. Polünoomi

Rohkem

lvk04lah.dvi

lvk04lah.dvi Lahtine matemaatikaülesannete lahendamise võistlus. veebruaril 004. a. Lahendused ja vastused Noorem rühm 1. Vastus: a) jah; b) ei. Lahendus 1. a) Kuna (3m+k) 3 7m 3 +7m k+9mk +k 3 3M +k 3 ning 0 3 0,

Rohkem

Relatsiooniline andmebaaside teooria II. 6. Loeng

Relatsiooniline andmebaaside teooria II. 6. Loeng Relatsiooniline andmebaaside teooria II. 5. Loeng Anne Villems ATI Loengu plaan Sõltuvuste pere Relatsiooni dekompositsioon Kadudeta ühendi omadus Sõltuvuste pere säilitamine Kui jõuame, siis ka normaalkujud

Rohkem

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul üe muutuja funktsioonidelt m muutuja funktsioonidele, kus m, 3,..., kerkib

Rohkem

ITI Loogika arvutiteaduses

ITI Loogika arvutiteaduses Predikaatloogika Predikaatloogika on lauseloogika tugev laiendus. Predikaatloogikas saab nimetada asju ning rääkida nende omadustest. Väljendusvõimsuselt on predikaatloogika seega oluliselt peenekoelisem

Rohkem

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

Programmeerimiskeel APL Raivo Laanemets 17. mai a. Programmeerimiskeel APL Raivo Laanemets 17. mai 2009. a. Sissejuhatus I APL - A Programming Language I Kenneth E. Iverson (1920-2004) I Elukutselt matemaatik I Uuris matemaatilist notatsiooni I 1960 -

Rohkem

Operatsioonisüsteemide ehitus

Operatsioonisüsteemide ehitus Lõimed Ülevaade Lõime mõiste Lõimede mudelid Probleemid lõimedega seoses Pthreads Solarise lõimed Windows 2000 lõimed Linuxi lõimed Java lõimed VARMO VENE & MEELIS ROOS 2 Ühe- ja mitmelõimelised protsessid

Rohkem

Pealkiri

Pealkiri TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Siiri Saar Teek predikaatarvutuse väljendamisülesannete lahenduste kontrollimiseks Bakalaureusetöö (9 EAP) Juhendaja: Reimo Palm Tartu 2017 Teek

Rohkem

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtustamine. 5 Keerulisemad tüübid. 6 Nähtavus, implitsiitsus.

Rohkem

Image segmentation

Image segmentation Image segmentation Mihkel Heidelberg Karl Tarbe Image segmentation Image segmentation Thresholding Watershed Region splitting and merging Motion segmentation Muud meetodid Thresholding Lihtne Intuitiivne

Rohkem

Andmeturve

Andmeturve CORBA Sissejuhatus IDL CORBA struktuur Serveri ehitus Objekti adapter Lisateenused MEELIS ROOS 1 CORBA sissejuhatus CORBA Common Object Request Broker Architecture Üldine Objektipäringute Vahendaja Arhitektuur:)

Rohkem

EUPL v 1 1-all versions _4_

EUPL v 1 1-all versions _4_ Euroopa Liidu tarkvara vaba kasutuse litsents V.1.1 EUPL Euroopa Ühendus 2007 Euroopa Liidu tarkvara vaba kasutuse litsents ("EUPL") 1 kehtib allpool määratletud teose või tarkvara suhtes, mida levitatakse

Rohkem

Microsoft Word - Referaat.docx

Microsoft Word - Referaat.docx Tartu Ülikool Andmeturve Referaat teemal: CVE-2016-1499 Koostaja: Sander Sats Kursus: Informaatika Tartu 2016 Sissejuhatus Käesolev referaat on kirjutatud seoses Tartu Ülikooli kursuse MTAT.03.134 Andmeturve

Rohkem

SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Wind

SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Wind SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016 või Windows

Rohkem

SQL

SQL SQL Kuues loeng 3GL inside 4GL Protseduurid Funktsioonid Tavalised Funktsioonid (üks väljund) Ilma väljundita Protseduurid Viitargumentide kasutamise võimalus Tabel-väljundiga Protseduurid Create function

Rohkem

VL1_praks6_2010k

VL1_praks6_2010k Biomeetria praks 6 Illustreeritud (mittetäielik) tööjuhend Eeltöö 1. Avage MS Excel is oma kursuse ankeedivastuseid sisaldav andmestik, 2. lisage uus tööleht (Insert / Lisa -> Worksheet / Tööleht), nimetage

Rohkem

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND Arvutiteaduse instituut Informaatika õppekava Helen Hendrikson MOOCi Programmeerimise alused ülesannete lahenduste analüüs Bakalaureusetöö (9 EAP) Juhendaja:

Rohkem

Microsoft PowerPoint - loeng.ppt

Microsoft PowerPoint - loeng.ppt Tarkvaraarendusprotsess Lektor Oleg Mürk olegm@webmedia.ee Webmedia AS www.webmedia.ee Teema Mille poolest erineb üksinda programmeerimine mitmekesi tarkvaraarendamisest? Mitmekesi programmeerimine Mitmekesi

Rohkem

Praks 1

Praks 1 Biomeetria praks 6 Illustreeritud (mittetäielik) tööjuhend Eeltöö 1. Avage MS Excel is ankeedivastuseid sisaldav andmestik, 2. lisage uus tööleht, nimetage see ümber leheküljeks Praks6 ja 3. kopeerige

Rohkem

Microsoft Word - EVS_ISO_IEC_27001;2014_et_esilehed.doc

Microsoft Word - EVS_ISO_IEC_27001;2014_et_esilehed.doc EESTI STANDARD EVS-ISO/IEC 27001:2014 INFOTEHNOLOOGIA Turbemeetodid Infoturbe halduse süsteemid Nõuded Information technology Security techniques Information security management systems Requirements (ISO/IEC

Rohkem

Skriptid ja käsud

Skriptid ja käsud TTÜ informaatikainstituut Skriptid ja käsud Skript on Scratchi programmi suhteliselt sõltumatu üksus, mida mõnedes programmeerimiskeeltes nimetatakse protseduurideks või funktsioonideks. Skript on alati

Rohkem

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019 PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019 SISUKORD 1. SLAIDIESITLUS... 3 1.1. Esitlustarkvara... 3 1.2. Slaidiesitluse sisu... 3 1.3. Slaidiesitluse vormistamine... 4 1.3.1 Slaidid...

Rohkem

IFI6083_Algoritmid_ja_andmestruktuurid_IF_3

IFI6083_Algoritmid_ja_andmestruktuurid_IF_3 Kursuseprogramm IFI6083.DT Algoritmid ja andmestruktuurid Maht 4 EAP Kontakttundide maht: 54 Õppesemester: K Eksam Eesmärk: Aine lühikirjeldus: (sh iseseisva töö sisu kirjeldus vastavuses iseseisva töö

Rohkem

Microsoft Word - installation-guide.doc

Microsoft Word - installation-guide.doc Dokumendi ajalugu: Versioon Kuupäev Tegevus Autor 1.0 12.04.2008 Dokumendi loomine Maris Aavik 1.1 13.04.2008 Täiendamine Maris Aavik 1.2 13.04.2008 Täiendamine Andres Kalle 1.3 12.05.2008 Täiendused Kerli

Rohkem

AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeri

AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeri AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeritav AWK kasutusalad raportite genereerimine ühest formaadist

Rohkem

Diskreetne matemaatika I praktikumiülesannete kogu a. kevadsemester

Diskreetne matemaatika I praktikumiülesannete kogu a. kevadsemester Diskreetne matemaatika I praktikumiülesannete kogu 2019. a. kevadsemester Sisukord 1 Tingimuste ja olukordade analüüsimine 3 2 Tõesuspuu meetod 5 3 Valemite teisendamine 7 4 Normaalkujud 7 5 Predikaadid

Rohkem

Antennide vastastikune takistus

Antennide vastastikune takistus Antennide vastastikune takistus Eelmises peatükis leidsime antenni kiirgustakistuse arvestamata antenni lähedal teisi objekte. Teised objektid, näiteks teised antennielemendid, võivad aga mõjutada antenni

Rohkem

Microsoft Word - requirements.doc

Microsoft Word - requirements.doc Dokumendi ajalugu: Versioon Kuupäev Tegevus Autor 1.0 04.03.2008 Dokumendi loomine Madis Abel 1.1 09.03.2008 Kasutuslugude loomine Madis Abel 1.2 12.03.2008 Kasutuslugude täiendused Andres Kalle 1.3 13.03.2008

Rohkem

Tartu Ülikool Loodus- ja täppisteaduste valdkond Arvutiteaduse instituut Sandra Puusepp CVE Referaat Tartu 2018

Tartu Ülikool Loodus- ja täppisteaduste valdkond Arvutiteaduse instituut Sandra Puusepp CVE Referaat Tartu 2018 Tartu Ülikool Loodus- ja täppisteaduste valdkond Arvutiteaduse instituut Sandra Puusepp CVE-2017-9948 Referaat Tartu 2018 Sissejuhatus Microsoft Skype on rakendus, mis võimaldab suhelda Interneti teel.

Rohkem

Praks 1

Praks 1 Biomeetria praks 6 Illustreeritud (mittetäielik) tööjuhend Eeltöö 1. Avage MS Excel is oma kursuse ankeedivastuseid sisaldav andmestik, 2. lisage uus tööleht, nimetage see ümber leheküljeks Praks6 ja 3.

Rohkem

(Microsoft PowerPoint - seminar_6_n\365uded-ainemudel tagasiside.ppt [Compatibility Mode])

(Microsoft PowerPoint - seminar_6_n\365uded-ainemudel tagasiside.ppt [Compatibility Mode]) Tarkvara projekt seminar VI Eelmise iteratsiooni tagasivaade, testimine, installatsioonijuhend, järgmise iteratsiooni näited. Karel Kravik Administratiivset:protestid Probleem: protestide hulk ja kvaliteet

Rohkem

Praks 1

Praks 1 Biomeetria praks 3 Illustreeritud (mittetäielik) tööjuhend Eeltöö 1. Avage MS Excel is oma kursuse ankeedivastuseid sisaldav andmestik, 2. lisage uus tööleht, 3. nimetage see ümber leheküljeks Praks3 ja

Rohkem

G aiasoft Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon ja hilisemad K

G aiasoft Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon ja hilisemad K Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon 6.3.1.51 ja hilisemad Kasutaja juhend 2016 Sisukord 1. Sissejuhatus...3 2. Liidese häälestus...3

Rohkem

VKE definitsioon

VKE definitsioon Väike- ja keskmise suurusega ettevõtete (VKE) definitsioon vastavalt Euroopa Komisjoni määruse 364/2004/EÜ Lisa 1-le. 1. Esiteks tuleb välja selgitada, kas tegemist on ettevõttega. Kõige pealt on VKE-na

Rohkem

untitled

untitled Riistvara kirjelduskeel VHDL L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees 1 Atribuudid Atribuut on väärtus, funktsioon, tüüp, vahemik, signaal või konstant, mida

Rohkem

DVD_8_Klasteranalüüs

DVD_8_Klasteranalüüs Kursus: Mitmemõõtmeline statistika Seminar IX: Objektide grupeerimine hierarhiline klasteranalüüs Õppejõud: Katrin Niglas PhD, dotsent informaatika instituut Objektide grupeerimine Eesmärk (ehk miks objekte

Rohkem

Osakogumite kitsendustega hinnang Kaja Sõstra 1 Eesti Statistikaamet Sissejuhatus Valikuuringute üheks oluliseks ülesandeks on osakogumite hindamine.

Osakogumite kitsendustega hinnang Kaja Sõstra 1 Eesti Statistikaamet Sissejuhatus Valikuuringute üheks oluliseks ülesandeks on osakogumite hindamine. Osakogumite kitsendustega hinnang Kaja Sõstra 1 Eesti Statistikaamet Sissejuhatus Valikuuringute üheks oluliseks ülesandeks on osakogumite hindamine. Kasvanud on nõudmine usaldusväärsete ja kooskõlaliste

Rohkem

PowerPointi esitlus

PowerPointi esitlus Objektorienteeritud programmeerimine 9. loeng 2. aprill Eno Tõnisson 1 Kasutatud H. Heina loengumaterjalid J. Kiho Väike Java leksikon J. Kiho Java Programmeerimise aabits Y. D. Liang Introduction to Java

Rohkem

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k Neurovõrgud. Praktikum 11. 29. aprill 2005. a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust kombinatoorsete optimiseerimisülesannete lahendamiseks.

Rohkem

TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND ARVUTITEADUSE INSTITUUT Lauri Kongas Turvaauk CVE Referaat aines Andmeturve MTAT Õpp

TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND ARVUTITEADUSE INSTITUUT Lauri Kongas Turvaauk CVE Referaat aines Andmeturve MTAT Õpp TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND ARVUTITEADUSE INSTITUUT Lauri Kongas Turvaauk CVE-2016-0778 Referaat aines Andmeturve MTAT.03.134 Õppejõud: Meelis Roos Tartu 2016 OpenSSH OpenSSH hõlmab

Rohkem

Slide 1

Slide 1 Süsteemide sünd, areng ja surm süsteemiinseneri vaatepunktist Leo Mõtus 11.august 2013 Proaktiivtehnoloogiate uurimislabor, TTÜ ja Eesti Teaduste Akadeemia 1 Ettekande fookus Keskendun süsteemidele tehismaailmas,

Rohkem

Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luur

Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luur Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luure, Urmi Tari ja Miriam Nurm. Ka teistel oli edasiminek

Rohkem

IMO 2000 Eesti võistkonna valikvõistlus Tartus, aprillil a. Ülesannete lahendused Esimene päev 1. Olgu vaadeldavad arvud a 1, a 2, a 3,

IMO 2000 Eesti võistkonna valikvõistlus Tartus, aprillil a. Ülesannete lahendused Esimene päev 1. Olgu vaadeldavad arvud a 1, a 2, a 3, IMO 000 Eesti võistkonna valikvõistlus Tartus, 19. 0. aprillil 000. a. Ülesannete lahendused Esimene päev 1. Olgu vaadeldavad arvud a 1, a, a 3, a 4, a 5. Paneme tähele, et (a 1 + a + a 3 a 4 a 5 ) (a

Rohkem

MTAT Operatsioonisüsteemid - Turvalisus

MTAT Operatsioonisüsteemid - Turvalisus Regulaaravaldised ja skriptimine Windows ja UNIX operatsioonisüstemides WINDOWS 1. slaid Windows käsurida Käsureaks nimetan programme: cmd.exe powershell.exe command.com Nendesse saab kirjutada käske,

Rohkem

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust 1011. Kaupmees teeb päringu Pocopayle aadressile https://my.pocopay.com/banklink. Vastuspäring tehakse makse õnnestumise

Rohkem

loogikaYL_netis_2018_NAIDISED.indd

loogikaYL_netis_2018_NAIDISED.indd . Lihtne nagu AB Igas reas ja veerus peavad tähed A, B ja esinema vaid korra. Väljaspool ruudustikku antud tähed näitavad, mis täht on selles suunas esimene. Vastuseks kirjutage ringidesse sattuvad tähed

Rohkem

19. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, Arvridade koonduvustunnused Sisukord 19 Arvridade koonduvustunnused Vahelduvat

19. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, Arvridade koonduvustunnused Sisukord 19 Arvridade koonduvustunnused Vahelduvat 9. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, 203-4. 9 Arvridade koonduvustunnused Sisukord 9 Arvridade koonduvustunnused 23 9. Vahelduvate märkidega read.......................... 24 9.2 Leibniz i

Rohkem

Microsoft PowerPoint - Keskkonnamoju_rus.ppt

Microsoft PowerPoint - Keskkonnamoju_rus.ppt Keskkonnakonverents 07.01.2011 Keskkonnamõju hindamine ja keskkonnamõju strateegiline hindamine on avalik protsess kuidas osaleda? Elar Põldvere (keskkonnaekspert, Alkranel OÜ) Kõik, mis me õpime täna,

Rohkem

prakt8.dvi

prakt8.dvi Diskreetne matemaatika 2012 8. praktikum Reimo Palm Praktikumiülesanded 1. Kas järgmised graafid on tasandilised? a) b) Lahendus. a) Jah. Vahetades kahe parempoolse tipu asukohad, saame graafi joonistada

Rohkem

Microsoft Word - 56ylesanded1415_lõppvoor

Microsoft Word - 56ylesanded1415_lõppvoor 1. 1) Iga tärnike tuleb asendada ühe numbriga nii, et tehe oleks õige. (Kolmekohaline arv on korrutatud ühekohalise arvuga ja tulemuseks on neljakohaline arv.) * * 3 * = 2 * 1 5 Kas on õige, et nii on

Rohkem

Kom igang med Scratch

Kom igang med Scratch Alustame algusest Getting Started versioon 1.4 SCRATCH on uus programmeerimiskeel, mis lubab sul endal luua interaktiivseid annimatsioone, lugusid, mänge, muusikat, taieseid jm Scratch'i saab kasutada

Rohkem

DE_loeng5

DE_loeng5 Digitaalelektroonika V loeng loogikalülitused KMOP transistoridega meeldetuletus loogikalülitused TTL baasil baaslülitus inverteri tunnusjooned ja hilistumine LS lülitus kolme olekuga TTL ja avatud kollektoriga

Rohkem

Hoia oma arvuti turvaline ja kiire 1.Leia start nupust alustades Juhtpaneel 2.Juhtpaneeli aadressiribalt leia Kõik juhtpaneeli üksused 3.Avanenud tööa

Hoia oma arvuti turvaline ja kiire 1.Leia start nupust alustades Juhtpaneel 2.Juhtpaneeli aadressiribalt leia Kõik juhtpaneeli üksused 3.Avanenud tööa Hoia oma arvuti turvaline ja kiire 1.Leia start nupust alustades Juhtpaneel 2.Juhtpaneeli aadressiribalt leia Kõik juhtpaneeli üksused 3.Avanenud tööaknas leia Windows Update 4.Lase arvutil kontrollida

Rohkem

Kursuseprogramm IFI6054 Agiilne tarkvaraarendus 3 EAP Kontakttundide maht: 28 Õppesemester: K Eksam Eesmärk: Aine lühikirjeldus: (sh iseseisva töö sis

Kursuseprogramm IFI6054 Agiilne tarkvaraarendus 3 EAP Kontakttundide maht: 28 Õppesemester: K Eksam Eesmärk: Aine lühikirjeldus: (sh iseseisva töö sis Kursuseprogramm IFI6054 Agiilne tarkvaraarendus 3 EAP Kontakttundide maht: 28 Õppesemester: K Eksam Eesmärk: Aine lühikirjeldus: (sh iseseisva töö sisu kirjeldus vastavuses iseseisva töö mahule) Ülevaate

Rohkem

Microsoft Word - TallinnLV_lihtsustatud_manual_asutuse_juhataja_ doc

Microsoft Word - TallinnLV_lihtsustatud_manual_asutuse_juhataja_ doc Tallinna Linnavalitsuse sõnumisaatja kasutusjuhend asutuse juhatajale Sisukord 1. Süsteemi sisenemine...2 2. Parooli lisamine ja vahetamine...2 3. Ametnike lisamine ametiasutuse juurde...2 4. Saatjanimede

Rohkem

Uudiseid k-meride abil bakterite leidmisest [Compatibility Mode]

Uudiseid k-meride abil bakterite leidmisest [Compatibility Mode] Uudiseid k-meride abil bakterite leidmisest CLARK: fast and accurate classification of metagenomic and genomic sequences using discriminative k-mers(2015) Rachid Ounit, Steve Wanamaker, Timothy J. Close

Rohkem

6 tsooniga keskus WFHC MASTER RF 868MHz & 4 või 6 tsooniga alaseade SLAVE RF KASUTUSJUHEND 6 tsooniga WFHC RF keskus & 4 või 6 tsooniga alaseade SLAVE

6 tsooniga keskus WFHC MASTER RF 868MHz & 4 või 6 tsooniga alaseade SLAVE RF KASUTUSJUHEND 6 tsooniga WFHC RF keskus & 4 või 6 tsooniga alaseade SLAVE 6 tsooniga keskus WFHC MASTER RF 868MHz & 4 või 6 tsooniga alaseade SLAVE RF KASUTUSJUHEND 6 tsooniga WFHC RF keskus & 4 või 6 tsooniga alaseade SLAVE RF 868MHz 3-6 EE 1. KASUTUSJUHEND 6 tsooniga WFHC

Rohkem

FIDE reitingumäärus 1. juuli 2014 Kuremaa, Marek Kolk

FIDE reitingumäärus 1. juuli 2014 Kuremaa, Marek Kolk FIDE reitingumäärus 1. juuli 2014 Kuremaa, 2014. Marek Kolk Artikkel 0. Sissejuhatus Artikkel 0.2 (uus) Millal läheb partii FIDE reitinguarvestusse? Reitinguarvestusse minev turniir tuleb ette registreerida

Rohkem

Microsoft PowerPoint - VKP_VÜFdial_J_AnnikaUettekanne_VKP_ _taiendatudMU.ppt [Compatibility Mode]

Microsoft PowerPoint - VKP_VÜFdial_J_AnnikaUettekanne_VKP_ _taiendatudMU.ppt [Compatibility Mode] Kuidas arendada kohalikke avalikke teenuseid omavalitsuste ja kodanikuühenduste koostöös? Annika Uudelepp Praxise juhatuse liige, Valitsemise ja kodanikeühiskonna programmi direktor 16.09.2009 Tallinnas

Rohkem

Skriptimiskeeli, mida ei käsitletud Perl Python Visual Basic Script Edition (VBScript) MS DOS/cmd skriptid Windows PowerShell midagi eksootilisemat: G

Skriptimiskeeli, mida ei käsitletud Perl Python Visual Basic Script Edition (VBScript) MS DOS/cmd skriptid Windows PowerShell midagi eksootilisemat: G Skriptimiskeeli, mida ei käsitletud Perl Python Visual Basic Script Edition (VBScript) MS DOS/cmd skriptid Windows PowerShell midagi eksootilisemat: GIMP Script-Fu 1 Skriptimiskeeli: Perl v1.0 loodud Larry

Rohkem

LITSENTSILEPING Jõustumise kuupäev: LITSENTSIANDJA Nimi: SinuLab OÜ Registrikood: Aadress: Telefon: E-post:

LITSENTSILEPING Jõustumise kuupäev: LITSENTSIANDJA Nimi: SinuLab OÜ Registrikood: Aadress: Telefon: E-post: LITSENTSILEPING Jõustumise kuupäev: 01.01.2017 1. LITSENTSIANDJA Nimi: SinuLab OÜ Registrikood: 12750143 Aadress: Telefon: 5210194 E-post: kontakt@sinulab.ee Esindaja: juhatuse liige Eesnimi Perekonnanimi

Rohkem

Pintsli otsade juurde tegemine Esiteks Looge pilt suurusega 64x64 ja tema taustaks olgu läbipaistev kiht (Transparent). Teiseks Minge kihtide (Layers)

Pintsli otsade juurde tegemine Esiteks Looge pilt suurusega 64x64 ja tema taustaks olgu läbipaistev kiht (Transparent). Teiseks Minge kihtide (Layers) Pintsli otsade juurde tegemine Esiteks Looge pilt suurusega 64x64 ja tema taustaks olgu läbipaistev kiht (Transparent). Teiseks Minge kihtide (Layers) aknasse ja looge kaks läbipaistvat kihti juurde. Pange

Rohkem

Pealkiri

Pealkiri Andmebaasid (6EAP) I praktikum Mida praktikumides tehakse? Õpitakse SQL i Tehakse andmebaas ope (igas praktikumis natuke, kuni lõpuks saab valmis) Tehakse andmebaas edu (kui ope on valmis, tehakse edu,

Rohkem

PowerPoint Presentation

PowerPoint Presentation Eesti pensionisüsteem võrdluses teiste Euroopa riikidega: olukord, väljakutsed ja kesksed valikud Lauri Leppik 7.06.2019 Pension kui vanadusea sissetulek Pension on ühiskondliku tööjaotuse kaasanne tekkis

Rohkem

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1 Ruutvormid Denitsioon. P n Ütleme, et avaldis i;j= a ijx i x j ; kus a ij = a ji ; a ij K ja K on korus, on ruutvorm üle koruse K muutujate x ;;x n suhtes. Maatriksit =(a ij ) nimetame selle ruutvormi

Rohkem

Sissejuhatus Informaatikasse Margus Niitsoo

Sissejuhatus Informaatikasse Margus Niitsoo Sissejuhatus Informaatikasse Margus Niitsoo Saagem tuttavaks Minu nimi on Margus Niitsoo Informaatika doktorant Teoreetiline krüptograafia 23 Vallaline Hobid: Basskitarr, Taiji, Psühholoogia Saagem tuttavaks

Rohkem

6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril E-TASEMETÖÖ EESMÄRK Tas

6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril E-TASEMETÖÖ EESMÄRK Tas 6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril 2015. E-TASEMETÖÖ EESMÄRK Tasemetööga läbiviimise eesmärk on hinnata riiklike õppekavade

Rohkem

G OSA A VARIANT RESPONDENDILE ISE TÄITMISEKS

G OSA A VARIANT RESPONDENDILE ISE TÄITMISEKS G OSA A VARIANT RESPONDENDILE ISE TÄITMISEKS GS1 Järgnevalt on kirjeldatud lühidalt mõningaid inimesi. Palun lugege iga kirjeldust ja märkige igale reale, kuivõrd Teie see inimene on. Väga Minu Mõnevõrra

Rohkem

Võistlusülesanne Vastutuulelaev Finaal

Võistlusülesanne Vastutuulelaev Finaal Võistlusülesanne Vastutuulelaev Finaal CADrina 2016 võistlusülesannete näol on tegemist tekst-pilt ülesannetega, milliste lahendamiseks ei piisa ainult jooniste ülevaatamisest, vaid lisaks piltidele tuleb

Rohkem

Word Pro - digiTUNDkaug.lwp

Word Pro - digiTUNDkaug.lwp ARVUSÜSTEEMID Kõik olulised arvusüsteemid on positsioonilised ehk arvu numbrid asuvad neile ettenähtud kindlatel asukohtadel arvujärkudes a i : a a a a a a a - a - a - a - a i Ainus üldtuntud mittepositsiooniline

Rohkem

Microsoft PowerPoint - IRZ0020_praktikum4.pptx

Microsoft PowerPoint - IRZ0020_praktikum4.pptx IRZ0020 Kodeerimine i ja krüpteerimine praktikum 4 Julia Berdnikova, julia.berdnikova@ttu.ee www.lr.ttu.ee/~juliad l 1 Infoedastussüsteemi struktuurskeem Saatja Vastuvõtja Infoallikas Kooder Modulaator

Rohkem

Mining Meaningful Patterns

Mining Meaningful Patterns Konstantin Tretjakov (kt@ut.ee) EIO õppesessioon 19. märts, 2011 Nimetuse saladus Vanasti kandis sõna programmeerimine natuke teistsugust tähendust: Linear program (~linear plan) X ülesannet * 10 punkti

Rohkem

my_lauluema

my_lauluema Lauluema Lehiste toomisel A. Annisti tekst rahvaluule õhjal Ester Mägi (1983) Soran Alt q = 144 Oh se da ke na ke va de ta, ae ga i lust üü ri kes ta! üü ri kes ta! 3 Ju ba on leh tis lei na kas ke, hal

Rohkem

TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Age Roosi Thonny logifailide analüüsi automatiseerimine Bakalaureusetöö (9 EAP) Juhendajad

TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Age Roosi Thonny logifailide analüüsi automatiseerimine Bakalaureusetöö (9 EAP) Juhendajad TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Age Roosi Thonny logifailide analüüsi automatiseerimine Bakalaureusetöö (9 EAP) Juhendajad: Eno Tõnisson, PhD Heidi Meier, MSc Tartu 2019 Thonny

Rohkem

TELLIJAD Riigikantselei Eesti Arengufond Majandus- ja Kommunikatsiooniministeerium KOOSTAJAD Olavi Grünvald / Finantsakadeemia OÜ Aivo Lokk / Väärtusi

TELLIJAD Riigikantselei Eesti Arengufond Majandus- ja Kommunikatsiooniministeerium KOOSTAJAD Olavi Grünvald / Finantsakadeemia OÜ Aivo Lokk / Väärtusi TELLIJAD Riigikantselei Eesti Arengufond Majandus- ja Kommunikatsiooniministeerium KOOSTAJAD Olavi Grünvald / Finantsakadeemia OÜ Aivo Lokk / Väärtusinsener OÜ Tallinnas 14.04.2014 Uuring Energiamajanduse

Rohkem