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
Statička analiza programa u XML okruženju
Damir Kirasić
Sveučilište u ZagrebuFakultet 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
• 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)
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.
Analiza koda - općenito
• verifikacija programa
• statička analiza
• dinamička analiza (podvrsta je testiranje)
• provjera modela
• rezanje programa
Statička analiza izvornog koda
Ciljevi:
• odsustvo grešaka (ispravnost)
• logička ispravnost programa
• programska metrika (mjere kompleksnosti)
• razumijevanje (refactoring)
• optimizacija
• uspoređivanje
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”
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, ...)
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
• . . .
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
Optimizacija programa
“data flow analysis”a = 1;
... // tu se ne koristi varijabla a
a = 2;
=> a = 1; možemo obrisati
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.
Uspoređivanje programa
• Automatsko utvrđivanje plagijata
• Pronalaženje razlika
• Sudska vještačenja i sl.
Oruđe za analizu
Analizator
Izvorni kod
Upute, pravila
Izvještaj
Postojeća oruđa za analizu
• lint, splint, LClint• ESC/Java• Purify• PREfix, PREfast• Slam• ESP• Vault. . .
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)
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)– . . .
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.
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>
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
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>
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>
Oruđe za analizu
Parser stvara AST
Izvorni kod
Upute, pravila
Izvještaj
Prevodilac AST u XML
XQuery engine
Formatiranjeizvještaja
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
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
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)
Glavne komponente
GUI sučelje line sučelje plug-in sučelje
Cs2Xml previdilac
XQuery stroj
Formatiranjeizvještaja
Izvještaj
XQuera UputePravila
Glavni program
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
Š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.
Š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
Š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).
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”.