32
Statička analiza programa u XML okruženju Damir Kirasić Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva

Statička analiza programa u XML okruženju

  • Upload
    koko

  • View
    36

  • Download
    0

Embed Size (px)

DESCRIPTION

Statička analiza programa u XML okruženju. Damir Kirasić Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva. Rad objedinjuje. statičku analizu izvornog koda XML okruženje XML format zapisa oruđa za XML (API, parseri, XQuery,...). Cilj rada je. - PowerPoint PPT Presentation

Citation preview

Page 1: Statička analiza programa u XML okruženju

Statička analiza programa u XML okruženju

Damir Kirasić

Sveučilište u ZagrebuFakultet elektrotehnike i računarstva

Page 2: Statička analiza programa u XML okruženju

Rad objedinjuje

• statičku analizu izvornog koda

• XML okruženje– XML format zapisa– oruđa za XML (API, parseri, XQuery,...)

Page 3: Statička analiza programa u XML okruženju

Cilj rada je

• istražiti nove, bolje mehanizme za analizu koda

• napraviti učinkovito oruđe za statičku analizu izvornog koda

• koristiti gotove, provjerene komponente koje su utemeljene na otvorenim standardima (XML)

Page 4: Statička analiza programa u XML okruženju

Zašto analizirati kod?

• Programi su postali VRLO kompleksni

• Editori, deuggeri, source code sustavi - osnovna programerska pomagala - izmišljni su prije 30 godina.

• Oruđa za razvoj programa ne slijede porast kompleksnosti programa.

Page 5: Statička analiza programa u XML okruženju

Analiza koda - općenito

• verifikacija programa

• statička analiza

• dinamička analiza (podvrsta je testiranje)

• provjera modela

• rezanje programa

Page 6: Statička analiza programa u XML okruženju

Statička analiza izvornog koda

Ciljevi:

• odsustvo grešaka (ispravnost)

• logička ispravnost programa

• programska metrika (mjere kompleksnosti)

• razumijevanje (refactoring)

• optimizacija

• uspoređivanje

Page 7: Statička analiza programa u XML okruženju

Ispravnost programa

• ispravnost koja je dublja od one koju kontrolira kompilator

• npr. u SVAKOM putu izvođenja nakon open(“abc”) postiji i close(“abc”)

• npr. niz naredbi obj = null; obj.method(); ne može biti ispravan

• ovakve stvari se zovu: “control flow analysis”

Page 8: Statička analiza programa u XML okruženju

Logička ispravnost

• prepoznavanje značajki programa (eng. features locating)

• povezivanje velikih komponenti sustava

• uključivanje specifičnog znanja o području za koje je napisan program (npr. dead lock analiza za konkurentne programe; matematička logika za sustave upravljanja, ...)

Page 9: Statička analiza programa u XML okruženju

Programska metrika

• Broj: klasa, konstruktora, metoda, varijabli

• Dubina u stablu nasljeđivanja za klase

• Dubina ugnježđenih petlji (npr. ako imamo više od 2 for petlje jedna u drugoj => možda treba razbiti metodu na dvije)

• Broj staza izvođenja unutar metode

• . . .

Page 10: Statička analiza programa u XML okruženju

Razumijevanje programa

• rekonstrukcija logike programa iz gotovog programa (npr. nema nikakve dokumentacije => automatsko generiranje dokumentacije)

• prepoznavanje programskih obrazaca (npr. program koristi Visitor obrazac)

• rekonfiguriranje postojećeg programa prema novom dizajnu

Page 11: Statička analiza programa u XML okruženju

Optimizacija programa

“data flow analysis”a = 1;

... // tu se ne koristi varijabla a

a = 2;

=> a = 1; možemo obrisati

Page 12: Statička analiza programa u XML okruženju

Optimizacija programa

• Kompilatori rade sve bolju optimizaciju i analizu (npr. –Wunreachable-code u gcc-u, javac –Xlint u javac)

• Ne treba se s analizom mješati u njihov posao – treba u analizi raditi ono što oni ne mogu, kompleksnije analize.

• Pojavljuju se kompilatori kojima korisnik može dodati svoj kod.

Page 13: Statička analiza programa u XML okruženju

Uspoređivanje programa

• Automatsko utvrđivanje plagijata

• Pronalaženje razlika

• Sudska vještačenja i sl.

Page 14: Statička analiza programa u XML okruženju

Oruđe za analizu

Analizator

Izvorni kod

Upute, pravila

Izvještaj

Page 15: Statička analiza programa u XML okruženju

Postojeća oruđa za analizu

• lint, splint, LClint• ESC/Java• Purify• PREfix, PREfast• Slam• ESP• Vault. . .

Page 16: Statička analiza programa u XML okruženju

XML tehnologije

• vrlo raširene

• stalno se poboljšavaju

• ima puno oruđa za rad s XML dokumentima:– standardni Xml API u C# i Javi,– XML editori, verifikatori, parseri, translatori,– XML Query Language (XQuery)

Page 17: Statička analiza programa u XML okruženju

XML i programsko inžinjerstvo

• Odlično se slažu

• XML se već naveliko koristi:– kod pisanja build sustava (ant, nant)– inicijalnih vrijednosti aplikacija (C#

prog.exe.config)– opisa velikih komponenti (EJB)– opisa modela (UML)– . . .

Page 18: Statička analiza programa u XML okruženju

Izvorni kod i XML

• Izvorni kod (Java, C#, C++) se može prevesi u XML.

• Struktura XML dokumenta (stablo) je potpuno prikladna za prikaz strukture programa (stablo).

• Postojeća XML oruđa bi se mogla koristiti za obradu prevedenog izvornog koda.

Page 19: Statička analiza programa u XML okruženju

Izvorni kod u XML-u

<class name=“A”>

<field> <variable type=“in” name=“x”/> </field>

<constructor name=“A”>

<block> . . . </block>

</constructor>

<method name=“m1” access=“public>

<block> . . . </block>

</method>

</class>

Page 20: Statička analiza programa u XML okruženju

XQuery

• Ono što je SQL za relacione baze podataka to je XQuery za XML dokumente

• XQuery standard definira matična organizacija za XML w3c.org

http://www.w3.org/TR/xquery/

• Standard još nije potpuno dovršen.

• Postoji već puno implementacija za “XQuery engine” – interpreter za XQuery

Page 21: Statička analiza programa u XML okruženju

XQuery – 3 primjera

doc(“prog.xml”)//class/method[@access = “public”] (: public metode sa sadržajem :)

count(doc(“prog.xml”)//class/method[@access = “public”]) (: broj public metoda :)

<possibleSingletonClasses> { (: moguće klase tipa Singleton :)

for $c in doc("singleton.cs")//class

return

if ( fn:empty($c/constructor[@access = "public"]) and

not(fn:empty($c/constructor[@access = "private"])) and

not(fn:empty($c/method[@type = string($c/@name) and @access = "public" and @modifiers = "static"])))

then

<class> { $c/@name} </class>

else ()

} </possibleSingletonClasses>

Page 22: Statička analiza programa u XML okruženju

XQuery – 1 primjer(: mStyle.xquery DK

Reports fields that does not start with "m“ :)

<report>{for $v in doc("E:\code\ipsi\ddir\location.xml")//field//variablereturn

if ( not(starts-with(string($v/@name), "m")) )then

<wrongMemberName> { $v/@name, $v/../../location }</wrongMemberName>else ()

}</report>

Page 23: Statička analiza programa u XML okruženju

Oruđe za analizu

Parser stvara AST

Izvorni kod

Upute, pravila

Izvještaj

Prevodilac AST u XML

XQuery engine

Formatiranjeizvještaja

Page 24: Statička analiza programa u XML okruženju

Problemi

• XQueri jezik nije završren

• MS implementacija XQuery-a nije kompletna – radim s MS Visual C# Express beta - (npr. naredba “let” uopće nije implementirana)

• za C++ nisam našao XQuery stroj

Page 25: Statička analiza programa u XML okruženju

Interna struktura oruđa (trenutno)

• Analizator za C# koristi komponente (parser i XQuery) pisane u C#

• Analizator za Javu koristi komponente (parser i XQuery) pisane u Javi

• Moguće je mješati komponente pisane u različitim jezicima

Page 26: Statička analiza programa u XML okruženju

Glavne komponente oruđa (trenutno)

1. Glavni program (povezuje sve komponente)

2. Korisničko sučelje (GUI, line, nemam plug-in)

3. Izvorni kod -> XML prevodilac

4. XQuery stroj5. Formater izvještaja (izlaz je goli XML)

Page 27: Statička analiza programa u XML okruženju

Glavne komponente

GUI sučelje line sučelje plug-in sučelje

Cs2Xml previdilac

XQuery stroj

Formatiranjeizvještaja

Izvještaj

XQuera UputePravila

Glavni program

Page 28: Statička analiza programa u XML okruženju

Interna struktura oruđa

• Parseri nisu pisani iz nule, koriste se generatori (sharpdevelop, CoCo/R za C#, ANTLR za Javu)

• Nakon previđenja XML se NE sprema u datoteku već se drži kao XML DOM u memoriji, a XQuery stroj radi s DOM-om

Page 29: Statička analiza programa u XML okruženju

Što dalje?

1. Jasno definirati API između pojedinih komponenti. Time dobivamo modularnost i proširivost – oruđe postaje “framework”.

2. C++ u XML prevodilac (pronaći gotovo?)

3. C++ XQuery stroj (pronaći gotovo?)

4. Biblioteka XQuery funkcija za uobičajene poslove u analizi programa.

Page 30: Statička analiza programa u XML okruženju

Što dalje?

5. Ulaz bi mogao biti “makefile, “ant file”, MS Visual Studio projekt file, ...

6. Plug-in za Eclipse, Sharpdevelop, ...

7. Transformacija XML izvještaja u• tekst• HTML• drugačiji XML (XSLT)• PDF

Page 31: Statička analiza programa u XML okruženju

Što dalje?

8. Napraviti novi XQuery interpreter i dodati mu stvari koje su potrebne za analizu (ovo je teško).

9. Napraviti Web stranice i započeti “Open source” projekt (ovo ako hoćemo biti svjetski).

Page 32: Statička analiza programa u XML okruženju

Sažetak

• Rad objedinjuje područje statičke analize programa i XML tehnologije.

• Donosi novu metodologiju, novi mehanizam za statičku analizu.

• Omogućuje:– prenosivost, usporedivost mehanizma analize– prenosivost rezultata analize

• I mehanizmi i rezultati su dosad bili “zatvoreni” i “proprietary”.