Ohjelmien analysointi. ER-kaaviot



Samankaltaiset tiedostot
ER-kaaviot. Ohjelmien analysointi. Tilakaaviot. UML-kaaviot (luokkakaavio) Tietohakemisto. UML-kaaviot (sekvenssikaavio) Kirjasto

Luento 5. Timo Savola. 28. huhtikuuta 2006

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

Ohjelmoinnin perusteet Y Python

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Ohjelmoinnin perusteet Y Python

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Ohjelmoinnin peruskurssien laaja oppimäärä

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Yhteenveto. Menettelytavat

Ohjelmoinnin perusteet Y Python

Käännös, linkitys ja lataus

Olioiden yhteistyön mallintaminen

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

12. Näppäimistöltä lukeminen 12.1

Tutoriaaliläsnäoloista

Ohjelmoinnin perusteet Y Python

Johdantoluento. Ohjelmien ylläpito

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

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

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Makrojen mystinen maailma lyhyt oppimäärä

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmoinnin peruskurssi Y1

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

UML- mallinnus: Tilakaavio

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Visual Case 2. Miika Kasnio (C9767)

MagicDraw-pikaohje (VH5)

ITKP102 Ohjelmointi 1 (6 op)

Tietorakenteet ja algoritmit - syksy

Ohjelmoinnin perusteet Y Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Osoitin ja viittaus C++:ssa

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

1. Omat operaatiot 1.1

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Rajapinta (interface)

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Rinnakkaistietokoneet luento S

Ohjelmistojen mallintaminen Tietovuokaaviot Harri Laine 1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Lähestymistavat - toiminnallinen

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Ohjelmoinnin perusteet Y Python

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

811120P Diskreetit rakenteet

Sisältö. 22. Taulukot. Yleistä. Yleistä

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Luento 4 Aliohjelmien toteutus

Ohjelmistotekniikan menetelmät, UML

Algoritmit 2. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

5. HelloWorld-ohjelma 5.1

Nopea kertolasku, Karatsuban algoritmi

Zeon PDF Driver Trial

Jakso 4 Aliohjelmien toteutus

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmoinnin perusteet Y Python

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

811312A Tietorakenteet ja algoritmit I Johdanto

käyttötapaukset mod. testaus

ITKP102 Ohjelmointi 1 (6 op)

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmistotuotanto, s

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

kontrollivuon analyysejä optimointiensa tueksi ja myös tiettyjen merkitysopillisten

T Datasta tietoon, syksy 2005 Laskuharjoitus 8.12., ratkaisuja Jouni Seppänen

Kielioppia: toisin kuin Javassa

C++11 lambdat: [](){} Matti Rintala

12. Javan toistorakenteet 12.1

Transkriptio:

Ohjelmien analysointi Ohjelmien kuvaaminen kaavioilla ohjelmien ymmärtäminen kaavioiden avulla kaavioiden tuottaminen ohjelmasta Erilaisia kaaviotyyppejä: ER-kaaviot, tilakaaviot, UML-kaaviot tietohakemisto vuokaaviot (tarkemmin) Vuoanalyysi Ohjelma-analyysi Viipalointi TTY Ohjelmistotekniikka 1 ER-kaaviot Kirjasto N 1 asiakas omistus M Lainaaja 1 N lainaus N Kirja TTY Ohjelmistotekniikka 2 1

Kirja varataan Merkitse varatuksi Ei varauksia Merkitse saapuneeksi Poistettu Tilakaaviot Kirja lainataan Merkitse lainatuksi Huonokuntoinen Poista Lainaushyllyssä Palautustiskillä Ota käsiteltäväksi On varauksia Ilmoita saapumisesta Lainassa Merkitse lainatuksi Varattujen hyllyssä TTY Ohjelmistotekniikka 3 UML-kaaviot (luokkakaavio) Aineisto hankintapäivä hinta kopiomäärä hanki ( ) luetteloi ( ) lainaa ( ) Kirjasto Kirja kirjoittaja ISBN lainaa ( ) CD kesto lainaa ( ) Lehti vuosi numero lainaa ( ) TTY Ohjelmistotekniikka 4 2

UML-kaaviot (sekvenssikaavio) : Lainaaja : Luettelo : Aineisto : Asiakasrekisteri hae(aineisto) lainaa(asiakas) tarkista(asiakas) TTY Ohjelmistotekniikka 5 Tietohakemisto Sisältö: nimi tietoalkion, tietovaraston tai ulkoisen olion pääasiallinen nimi alias käyttökohta ja tapa tietoalkiota käyttävät prosessit käyttötapa (syötteenä, tulosteena, tietovarastona) sisällön kuvaus (käytetty notaatio) lisätietoja Nimi Puhelinnumero Alias Käyttökohta ja -tapa Kuvaus AssessAgainstSet-up (tuloste) DialPhone (syöte) puhelinnumero = ( suuntanumero ) + varsinainen numero suuntanumero = * nollalla alkava 2-3-numeroinen luku * varsinainen numero = * 6-8-numeroinen luku * TTY Ohjelmistotekniikka 6 3

Tieto- ja kontrollivuo Vuokaaviot flow graph liittyy kääntäjätekniikkaan käytetään esim. optimoinnissa flow chart (kulkukaavio) kontrollin kulku esitetään algoritmin tasolla flow diagram abstraktimpi esitys kuin edelliset käytetään ohjelmien suunnittelussa (takaisinmallinnuksessa) Tieto ja kontrolli voidaan esittää samassa kaaviossa TTY Ohjelmistotekniikka 7 Kääntäjiin liittyvät vuokaaviot Peruslohko (basic block) koostuu peräkkäisistä ohjelman lauseista Kontrollivuo ei saa haarautua kesken peruslohkon Peruslohkon voi aloittaa: ohjelman (lauselistan) 1. lause hypyn kohteena oleva lause hyppykäskyn jälkeen tuleva lause TTY Ohjelmistotekniikka 8 4

Peruslohkot prod := 0; i := 1; do begin prod := prod + a [ i ] * b [ i ]; i := i + 1; end while i <= 20 Optimointi TTY Ohjelmistotekniikka 9 Algoritmin esittäminen (kulkukaavio) S1 t E f S1 S2 S1 S2 t E f S1; S2 if E then S1 else S2 do S1 while E TTY Ohjelmistotekniikka 10 5

Merkinnät: Abstraktit tietovuokaaviot Data 1 Muutos 1 Data 2 Muutos Data 5 2 Muutos 3 Data 6 Data 3 Data 4 Olio 1 Olio 2 Tietovarasto Järjestelmän ulkoinen olio esim. syöte tai tuloste Muutos tai prosessi Tietovuo (tai tietovirta) Tietovarasto TTY Ohjelmistotekniikka 11 Esimerkki tietovuokaaviosta Lainaaja Kirjastokortti Kirjan viivakoodi Lue kortti Merkitse lainatuksi Kuitti Kirja Asiakastietokanta Aineistotietokanta TTY Ohjelmistotekniikka 12 6

Tietovuokaavion tarkentaminen Puheääni Puhelin- Kuultu puhe Soittaja Vastaaja Valittu numero soitto Puheääni Valittu numero Ääniaallon muuttaminen signaaliksi Näppäimistön elektroniikka Elektroninen signaali Taajuudet Puhelun kytkentä Elektroninen signaali Signaalin muuttaminen ääniaalloksi Kuultu puhe TTY Ohjelmistotekniikka 13 Tarkennuksen merkinnät A f B A f1 V W f2 f3 Y X f4 Z f5 Z1 f6 Z3 Z2 f7 B X Y f41 f42 1 y1 f43 f44 2 y2 f45 Z TTY Ohjelmistotekniikka 14 7

Vuoanalyysi (flow analysis) Ohjelman ajoaikaisten ominaisuuksien tutkiminen ajamatta ohjelmaa käytetään yksinkertaistettua, symbolista versiota ohjelman datasta Vaihtoehtoisia termejä: symbolinen ajaminen (symbolic eecution) abstrakti tulkinta (abstract interpretation) Tarkoitus: optimointi i ohjelmien todistaminen invarianttien (pysyväisväittämien) generointi ohjelman luotettavuuden parantaminen TTY Ohjelmistotekniikka 15 Esimerkki abstraktista tulkinnasta Yhdeksällä jaollisuus esim. onko luku 25236 jaollinen 9:llä? ratkaisu: 2 + 5 + 2 + 3 + 6 = 18 on jaollinen voidaan soveltaa tarkistuksissa? 123 * 457 + 76543 = 132654 6 7 7 4 3 TTY Ohjelmistotekniikka 16 8

Esimerkkejä vuoanalyysista: muutoksia koodin parantamiseksi Peräkkäinen koodi: lausekkeen toistuvan evaluoinnin eliminointi vakioiden/vakiolausekkeiden korvaaminen niiden arvoilla Silmukat: koodin siirtäminen silmukan ulkopuolelle kalliiden laskutoimitusten välttäminen Muita parannuksia: muuttujan korvaaminen toisella kuolleen koodin eliminointi Tehokkuus TTY Ohjelmistotekniikka 17 Esimerkki kalliiden laskutoimitusten välttämisestä i := 1; while i < 100 do a := i * 5; i = i + 1; od i := 1; t := 5; while i < 100 do a := t; i = i + 1; t := t + 5; od TTY Ohjelmistotekniikka 18 9

Koodin siirtäminen silmukan ulkopuolelle 1 1 Laske A / B 2 Voidaanko siirtää? 2 3 B <- lauseke; Laske A/B Laske A / B 4 3 B <- lauseke; Laske A/B 4 5 A ja B eivät riipu silmukkalaskurista 5 TTY Ohjelmistotekniikka 19 Ohjelma-analyysi Lähdekoodin ja muiden dokumenttien tarkastelu (vrt. koodianalyysi) Analysointia tapahtuu neljällä tasolla: toteutustaso rakenteellinen taso toiminnallinen taso sovellusalueen taso staattinen analyysi dynaaminen analyysi TTY Ohjelmistotekniikka 20 10

Esimerkkejä ohjelmaanalyysista Staattinen analyysi Näytä sen aliohjelman runko, jota kutsutaan tietystä lauseesta. Näytä sen tyypin esittely, jota käytetään tietyn muuttujan esittelyssä. Etsi kaikki muuttujat, jotka ovat näkyviä tietyssä aliohjelmassa ja jotka ovat tiettyä tyyppiä. Dynaaminen analyysi Etsi kaikki lauseet, jotka suoritetaan tietyn muuttujan arvon tuottamiseksi. Etsi kaikki lauseet, jotka käyttävät tietyn muuttujan arvoa. Etsi kaikki muuttujat, joiden arvoa käytetään laskettaessa tietyn muuttujan arvo. TTY Ohjelmistotekniikka 21 Esimerkkejä ohjelmakaavioista Kutsukaavio tai kutsuviittauskaavio (call graph) Yhteenvetokaavio (program summary graph) Aliohjelmien välinen vuokaavio (interprocedural flow graph) Riippuvuuskaavio (system dependency graph) TTY Ohjelmistotekniikka 22 11

( define ( square a ) ( * a a ) ) ( define ( fun y ) ( + ( square ) ( square y ) ) ) Kutsukaavio (kontrollin kulku)?(f fun 35) = 34 fun square square TTY Ohjelmistotekniikka 23 ( define ( square a ) ( * a a ) ) ( define ( fun y ) ( + ( square ) ( square y ) ) )?(f fun 35) = 34 arg1 = 3 arg2 = 5 Tietovuon lisääminen paluuarvo = 9 fun arg = 3 arg = 5 paluuarvo = 25 square paluuarvo = 34 square TTY Ohjelmistotekniikka 24 12

Toinen esimerkki kutsukaaviosta 1 program Sums 2 read ( n ); 3 i := 1; 4 while ( i <= n ) 5 sum := 0; 6 Acc ( sum, i ); 7 write ( sum, i ); 8 i := i + 1; 9 end while 10 end. Sums 11 procedure Acc (, y ) ref, y 12 j := 1; 13 while ( j <= y ) 14 Add (, j ); 15 Inc ( j ); 16 end while 17 return sum, i Acc 18 procedure Inc ( ) ref 19 Add (, 1 ); 20 return 21 procedure Add ( a, b ) ref a; value b 22 a := a + b; 23 return j, j Inc Add, 1 TTY Ohjelmistotekniikka 25 Sums sum i Acc y j Inc Add a Yhteenvetokaavio todelliset parametrit muodolliset parametrit sum i y j a parametri- liitäntä parametrien tietovuo TTY Ohjelmistotekniikka 26 13

Sums Acc { U 6 } sum i { U 2, U 3, U 5 } y j Inc { U 6 } { U 6 } Add Aliohjelmien välinen vuokaavio a sum i j { U 6 } y a { U 2, U 3 } { U 1, U 4, U 6 } { U 1 } { U 4, U 6 } Käyttöjoukot (use sets): U 1 : sum rivillä 7 U 2: i rivillä 7 U 3 : i rivillä 8 U 4 : j rivillä 13 U 5 : y rivillä 13 U 6 : a rivillä 22 TTY Ohjelmistotekniikka 27 Riippuvuuskaavio Acc y j := 1 while j <= y y j Add j j Inc j Inc Add 1 Add a b a := a + b a b TTY Ohjelmistotekniikka 28 14

Viipalointi (slicing) Ohjelmien ymmärtäminen Virheiden etsintä Ohjelmien rinnakkaistaminen Viipaleen laskenta perustuu ohjelman tieto- ja kontrollivuohon viipaleen lauseet eivät välttämättä peräkkäisiä Viipale määräytyy ohjelmakohdan (rivin) ja tarkasteltavien muuttujien perusteella Alkuperäinen määritelmä: viipale sisältää lauseet, jotka voivat vaikuttaa seuraus tietyn muuttujan arvoon tietyssä ohjelmakohdassa viipaleen ajaminen tuottaa tälle muuttujalle samat arvot kuin alkuperäisen ohjelman ajaminenkin TTY Ohjelmistotekniikka 29 Esimerkkiohjelma 1 Esimerkki (1) (1) begin (2) read (, y ); (3) total := 0.0; (4) sum := 0.0; (5) if <= 1 then (6) sum := y; (7) else begin (8) read ( ); (9) total := * y; (10) end; (11) write ( total, sum ); (12) end; Viipale kriteerin <12, { }> perusteella: (1) begin (2) read (, y ); (5) if <= 1 then (7) else begin (8) read ( ); (10) end; (12) end; TTY Ohjelmistotekniikka 30 15

Esimerkkiohjelma 1 Esimerkki (2) (1) begin (2) read (, y ); (3) total := 0.0; (4) sum := 0.0; (5) if <= 1 then (6) sum := y; (7) else begin (8) read ( ); (9) total := * y; (10) end; (11) write ( total, sum ); (12) end; Viipale kriteerin <12, { }> perusteella: (1) begin (2) read (, y ); (12) end; TTY Ohjelmistotekniikka 31 Esimerkkiohjelma 1 Esimerkki (3) (1) begin (2) read (, y ); (3) total := 0.0; (4) sum := 0.0; (5) if <= 1 then (6) sum := y; (7) else begin (8) read ( ); (9) total := * y; (10) end; (11) write ( total, sum ); (12) end; Viipale kriteerin <12, { total }> perusteella: (1) begin (2) read (, y ); (3) total := 0.0; (5) if <= 1 then (7) else begin (9) total := * y; (10) end; (12) end; Rivi 11? TTY Ohjelmistotekniikka 32 16

Esimerkkiohjelma 2 begin (1) read ( ); (2) if ( < 0 ) then (3) y := f1 ( ); (4) := g1 ( ); else (5) if ( = 0 ) then (6) y := f2 ( ); (7) := g2 ( ); else (8) y := f3 ( ); (9) := g3 ( ); end if; end if; (10) write ( y ); (11) write ( ); end; Viipalointi ja ohjelman riippuvuuskaavio 1 2 3 4 5 datariippuvuudet kontrolliriippuvuudet 6 7 10 8 9 11 Viipale kriteerin <10, { y }> perusteella TTY Ohjelmistotekniikka 33 Viipaloinnin jaottelu (1) Alkuperäinen eli takautuva (backward) viipale sisältää sellaiset lauseet, jotka vaikuttavat muuttujan arvoon Etenevä (forward) viipale sisältää sellaiset lauseet, joihin muuttuja vaikuttaa (joissa viitataan muuttujaan) TTY Ohjelmistotekniikka 34 17

Etenevä viipalointi Esimerkkiohjelma 3 (1) read ( n ); (2) i := 2; (3) c := 0; (4) while i <= ( n div 2 ) do (5) if ( n mod i ) = 0 then (6) write ( i ); (7) c := c + 1; (8) fi; (9) i := i + 1; (10) od; (11) write ( c ); Etenevä viipale kriteerin <2, { c }> perusteella: (3) c := 0; (7) c := c + 1; (11) write ( c ); TTY Ohjelmistotekniikka 35 Viipaloinnin jaottelu (2) Alkuperäinen eli staattinen viipalointi perustuu käännösaikaiseen ohjelman tarkasteluun Dynaaminen viipalointi otetaan mukaan vain ne lauseet, jotka tulee suoritettua viipale sisältää lauseet, jotka vaikuttavat muuttujan arvoon tietyllä ohjelman suorituskerralla dynaamiselle viipaloinnille on hieman erilaisia määritelmiä TTY Ohjelmistotekniikka 36 18

Dynaaminen viipalointi (verrattuna staattiseen) Esimerkkiohjelma 3 (1) read ( n ); (2) i := 2; (3) c := 0; (4) while i <= ( n div 2 ) do (5) if ( n mod i ) = 0 then (6) write ( i ); (7) c := c + 1; (8) fi; (9) i := i + 1; (10) od; (11) write ( c ); Staattinen viipale kriteerin <11, { c } > perusteella: kaikki muut rivit paitsi rivi 6 Dynaaminen viipale kriteerin <11, { c } > perusteella syötearvolla n = 2: (3) c := 0; (11) write ( c ); TTY Ohjelmistotekniikka 37 Dynaamisen viipaloinnin erilaisia määritelmiä Määritelmä 1: osa-ohjelma, joka laskee tarkasteltavien muuttujien arvot tietyllä suorituskerralla Määritelmä 2: kokoelma lauseita, jotka vaikuttavat tarkasteltavien muuttujien arvoihin tietyllä suorituskerralla ei välttämättä ajettava osa-ohjelma TTY Ohjelmistotekniikka 38 19

Määritelmien ero Esimerkkiohjelma 4 (1) i := 0; (2) while i < 10 do (3) if i = 0 then (4) h := 10; (5) i := i + 1; (6) od; (7) write ( h ); Dynaaminen viipale kriteerin < 7, { h } > perusteella: 1. määritelmän mukaan: kaikki rivit 2. määritelmän mukaan: kaikki muut rivit paitsi rivi 5 (7) write ( h ); kaikki muut rivit paitsi rivi 5 TTY Ohjelmistotekniikka 39 20