1 / 32

Statička analiza programa u XML okruženju

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.

koko
Download Presentation

Statička analiza programa u XML okruženju

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Rad objedinjuje • statičku analizu izvornog koda • XML okruženje • XML format zapisa • oruđa za XML (API, parseri, XQuery,...)

  3. 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)

  4. 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.

  5. Analiza koda - općenito • verifikacija programa • statička analiza • dinamička analiza (podvrsta je testiranje) • provjera modela • rezanje programa

  6. Statička analiza izvornog koda Ciljevi: • odsustvo grešaka (ispravnost) • logička ispravnost programa • programska metrika (mjere kompleksnosti) • razumijevanje (refactoring) • optimizacija • uspoređivanje

  7. 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”

  8. 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, ...)

  9. 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 • . . .

  10. 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

  11. Optimizacija programa “data flow analysis” a = 1; ... // tu se ne koristi varijabla a a = 2; => a = 1; možemo obrisati

  12. 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.

  13. Uspoređivanje programa • Automatsko utvrđivanje plagijata • Pronalaženje razlika • Sudska vještačenja i sl.

  14. Oruđe za analizu Izvorni kod Analizator Upute, pravila Izvještaj

  15. Postojeća oruđa za analizu • lint, splint, LClint • ESC/Java • Purify • PREfix, PREfast • Slam • ESP • Vault . . .

  16. 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)

  17. 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) • . . .

  18. 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.

  19. 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>

  20. 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

  21. 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>

  22. 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//variable return if ( not(starts-with(string($v/@name), "m")) ) then <wrongMemberName> { $v/@name, $v/../../location } </wrongMemberName> else () } </report>

  23. Oruđe za analizu Izvorni kod Parser stvara AST Prevodilac AST u XML XQuery engine Upute, pravila Formatiranje izvještaja Izvještaj

  24. 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

  25. 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

  26. Glavne komponente oruđa (trenutno) • Glavni program (povezuje sve komponente) • Korisničko sučelje (GUI, line, nemam plug-in) • Izvorni kod -> XML prevodilac • XQuery stroj • Formater izvještaja (izlaz je goli XML)

  27. Glavne komponente GUI sučelje line sučelje plug-in sučelje Cs2Xml previdilac Glavni program XQuera Upute Pravila XQuery stroj Izvještaj Formatiranje izvještaja

  28. 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

  29. Što dalje? • Jasno definirati API između pojedinih komponenti. Time dobivamo modularnost i proširivost – oruđe postaje “framework”. • C++ u XML prevodilac (pronaći gotovo?) • C++ XQuery stroj (pronaći gotovo?) • Biblioteka XQuery funkcija za uobičajene poslove u analizi programa.

  30. Što dalje? 5. Ulaz bi mogao biti “makefile, “ant file”, MS Visual Studio projekt file, ... • Plug-in za Eclipse, Sharpdevelop, ... • Transformacija XML izvještaja u • tekst • HTML • drugačiji XML (XSLT) • PDF

  31. Š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).

  32. 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”.

More Related