OBJEKTUM VEZÉRELT SZOFTVEREK ANALÍZISE

Hasonló dokumentumok
Objektum Vezérelt Szoftverek Analízise

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

Software Engineering Babeş-Bolyai Tudományegyetem Kolozsvár

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Szoftver-technológia II. Tervezési minták. Irodalom. Szoftver-technológia II.

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

Szoftver újrafelhasználás

Metamodellezés. Simon Balázs BME IIT, 2011.

Közösség, projektek, IDE

Nyílt forráskódú szoftverek minőségi vizsgálata szoftver metrikák alapján

A TANTÁRGY ADATLAPJA

SZTE Nyílt Forrású Szoftverfejlesztő és Minősítő Kompetencia Központ

Forráskód minőségbiztosítás

Vizuális, eseményvezérelt programozás XI.

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Projektmunka és tehetséggondozás az informatikában

Informatika szigorlati témakörök gazdasági informatika egyetemi képzés hallgatói részére

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

01. gyakorlat - Projektalapítás

Verifikáció és validáció Általános bevezető

UML (Unified Modelling Language)

Programrendszerek tanúsítása szoftverminőség mérése

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E

Iman 3.0 szoftverdokumentáció

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus

Felhasználói kézikönyv. Verzió: 1.01

Webes alkalmazások fejlesztése

A dokumentáció felépítése

A TANTÁRGY ADATLAPJA

A CAN mint ipari kommunikációs protokoll CAN as industrial communication protocol

Számlázás-házipénztár. (SZAMLA) verzió. Kezelési leírás

4. Használati útmutatás

Széchenyi István Egyetem

Programozási alapismeretek 4.

A Debreceni Egyetem és a Nagyváradi Egyetem WiFi alapú helymeghatározó rendszere

Adatbázis rendszerek 7. előadás State of the art

Név: Neptun kód: Pontszám:

ISA szimulátor objektum-orientált modell (C++)

Készletnyilvántartó program. (KESZLET) verzió. Kezelési leírás

Verziókövető rendszerek használata a szoftverfejlesztésben

JavaScript Web AppBuilder használata

Ismeretanyag Záróvizsgára való felkészüléshez

OOP és UML Áttekintés

Eseményvezérelt alkalmazások

A szoftverfejlesztés eszközei

Hardver és szoftver követelmények

Clang Static Analyzer belülről

A szoftverfejlesztés eszközei

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Programozási nyelvek JAVA EA+GY 1. gyakolat

Models are not right or wrong; they are more or less useful.

Objektum orientált kiterjesztés A+ programozási nyelvhez

Ingrid Signo Felhasználói kézikönyv. Pénztári használatra

SZET GYAK1: Követelmények ellenőrzése

Szoftver-technológia I.

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

III. OOP (objektumok, osztályok)

Informatika szigorlati témakörök gazdasági informatika egyetemi képzés hallgatói részére

Vállalati információs rendszerek I, MIN5B6IN, 5 kredit, K. 4. A meghirdetés ideje (mintatanterv szerint vagy keresztfélében):

10. EGYSZERŰ HÁLÓZATOK TERVEZÉSE A FEJLESZTŐLAPON Ennél a tervezésnél egy olyan hardvert hozunk létre, amely a Basys2 fejlesztőlap két bemeneti

CMDB architektúra megjelenítése SAMU-val Rugalmas megoldás. ITSMF Bekk Nándor Magyar Telekom / IT szolgáltatás menedzsment központ

Programozás III. - NGB_IN001_3

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

S01-8 Komponens alapú szoftverfejlesztés 2

A szoftver-folyamat. Szoftver életciklus modellek. Szoftver-technológia I. Irodalom

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

OOP. Alapelvek Elek Tibor

A modern e-learning lehetőségei a tűzoltók oktatásának fejlesztésében. Dicse Jenő üzletfejlesztési igazgató

Mi is volt ez? és hogy is volt ez?

A TANTÁRGY ADATLAPJA

Az ErdaGIS térinformatikai keretrendszer

Cloud computing Dr. Bakonyi Péter.

Informatikai Tesztek Katalógus

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

Van-e ingyen-ebéd? Avagy mire elég a nyílt forráskodú Pentaho? Fekszi Csaba Ügyvezető október 4.

Programozás alapjai Bevezetés

Web Services. (webszolgáltatások): egy osztott alkalmazásfejlesztési plattform

LÉTRADIAGRAM FORDÍTÓK ELMÉLETE PLC VEZÉRLÉSEK SZÁMÁRA II.

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Tartalom. Szoftverfejlesztési. Szoftver = Termék. módszertan. la Rational XDE CASE eszköz. Az előállításához technológiára van szükség

ALKALMAZÁS KERETRENDSZER

Flex tutorial. Dévai Gergely

Programozási technológia

Időkönyvelő Projektfeladat specifikáció

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Programozás I gyakorlat

Az egyetemi publikációs adatbázis

Multimédiás adatbázisok

Böngészők, böngészőmotorok

Kód átvizsgálás. Irodalom. (Code review) code review,smart Bear Inc., ! Jason Cohen: Best kept secrets of peer

Okos gyógyszeres doboz Projektfeladat specifikáció

Utolsó módosítás:

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

Folyamatmodellezés és eszközei. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Átírás:

OBJEKTUM VEZÉRELT SZOFTVEREK ANALÍZISE Ferenc Rudolf, ferenc@cc.u-szeged.hu Beszédes Árpád, beszedes@cc.u-szeged.hu Szegedi Tudományegyetem Abstract A korszer objektum orientált szoftvertermékek a piaci igények kielégítése végett egyre nagyobbak és komplexebbek lesznek. Ráadásul a szoros határid k miatt elmaradó dokumentációk és tervek hiánya még inkább megnehezíti a rendszerek megértését. A forráskód megértésére a legnagyobb szükség a szoftver életciklus karbantartási szakaszában van, amikor különböz módosításokat kell eszközölni rajta, mint például a hibajavítások vagy új funkcionalitások hozzáadása. Ez a problémakör hozta létre a szoftverfejlesztés tudományon belül a létez rendszerek modellezését kutató (reverse engineering) irányzatot. A célja az, hogy egy bizonyos szint szoftverspecifikációból egy magasabb szint leírást hozzon létre, például esetünkben a programkódból a tervezési dokumentációt. Manapság a modellezésre leginkább a szabványos UML jelölésrendszert alkalmazzák. Természetes tehát az igény, hogy a visszanyert tervezési dokumentáció is UML diagramokra épüljön. Ezen túl egyéb, különböz szempontok szerinti vizualizációk is rendkívül fel tudják gyorsítani a forráskód megértését (pl. hívási gráfok). A legújabb kutatási témák közé tartozik a tervezési minták felismerése a forráskódból, melynek segítségével még magasabb szintr l lehet megközelíteni szoftverrendszert. Egy másik nagy kutatási terület a szoftvermin ség mérése, melyben a különböz metrikáknak nagy szerepük van. A Szegedi Tudományegyetem Informatika Tanszékcsoportjának dolgozói a helsinki Nokia Research Center-rel és a FrontEndART Kft.-vel együttm ködve a fenti problémakört megcélozva egy Columbus nev reverse engineering eszközt fejlesztettek ki, mely segítséget nyújt a forráskód megértésében és dokumentálásában. Az eszköz analizáló motorját felhasználva elkészült egy CPPAudit nev program is, ami ellen rizni tud különböz kódolási konvenciók betartását, illetve figyelmeztet veszélyes kód konstrukcióra. Modern object oriented software systems, to meet the continuously growing expectations of the market, are getting more and more complex. Additionally, the lack of documentation and plans, which is missing because of tight deadlines, makes it even more difficult to understand the systems. The biggest need in comprehending the source code is in the maintenance phase of the software lifecycle, when different modifications need to be done, like bug-fixing and adding new functionality. This originated the reverse engineering research within the science of software engineering. The aim is to produce a higher level description from a given specification, for instance the design documentation from the source code in our case. Nowadays, standard UML notation is used in most cases for designs. So it is an obvious need to present the recovered design documentation with UML diagrams. Additional visualizations based on different aspects can also remarkably improve source code comprehension (e.g. call graphs). Among the newest research activities is the recognition of design patterns from source code, with which the software system can be approached from an even higher level. Another large research area is the measuring of software quality, where different metrics have a big role. The staff at the University of Szeged Informatics Department in cooperation with the Nokia Research Center in Helsinki and FrontEndART Ltd. developed a reverse engineering tool called Columbus, which helps in source code comprehension and documentation. Using its analyzer engine another tool called CPPAudit was made as well, which checks different coding conventions and gives warnings on dangerous code constructs.

1. Bevezetés Az egyik legnagyobb probléma a nagy szoftverrendszerek fejlesztésénél és karbantartásnál a forráskód gyorsan növekv mérete és komplexitása. Ennek eredményeképpen nagy szükség van a rendszer különböz részeinek és ezek összefüggéseinek megértésére [1, 2]. A nagy mennyiség örökölt kód és a fejlesztésben részt vev nagyszámú kódoló is szükségessé teszi a reverse engineering eszközök használatát [16]. A fordított irányú tervezés egy szoftverrendszer elemzésének folyamata, melynek célja, hogy: (a) beazonosítsa a rendszer komponenseit és ezek kölcsönhatásait és (b) egy magasabb szint leírást hozzon létre egy más formában [4]. A cikkben bemutatjuk a Columbus nev eszközt [7], ami képes nagy, C++ programozási nyelven [12] írt szoftverrendszereket elemezni. Az eredményt egy szabványos formában prezentálja, melynek a neve Columbus Séma a C++-hoz [6]. Ez a séma leírja, hogy a különböz nyelvi elemek és kapcsolataik hogyan legyenek ábrázolva. Egy valódi szoftverkarbantartás sikeres lebonyolításához egy megfelel en összeválogatott eszközkészletre van szükség (pl. elemz k, kódgenerátorok, metrikaszámítók, dokumentáló eszközök). Ahhoz, hogy ezen eszközök kommunikálni tudjanak egymással, szükség van egy közös sémára és egy elemz re, ami a sémának megfelel adatokat el állítja. Megfogalmazunk néhány követelményt, melyeknek meg kell felelni, amikor sémát, elemz t és az eszközök integrációját el segít keretrendszert tervezünk. Követelmények a keretrendszerrel kapcsolatban: Mivel a valós projektek általában több fájlból állnak és azok több könyvtárba vannak rendezve, nagyon fontos a projektkezelés. Ahhoz, hogy ténylegesen össze tudjon fogni több eszközt, fontos a b víthet ség. Mivel a kinyert információ mennyisége nagy rendszereknél óriási, ezért szükség van valamilyen sz résre. Ezen kívül nagyon fontos még a vizualizáció, hogy a kinyert információt minél könnyebb legyen átlátni. Követelmények a C++ elemz vel kapcsolatban: A legfontosabb követelmény a helyesség és a teljesség, hogy megbízható információkat kapjunk. Mivel a C++ nyelvnek sok dialektusa van, fontos ezeknek a kezelése. Ide tartozik a hibat rés igénye is, vagyis ha ismeretlen kulcsszóba vagy szintaktikus hibába fut az elemz, akkor ne álljon le, hanem lépjen túl a hibán, és gy jtsön össze lehet lég minél több információt. Fontos még a sebesség is és az el feldolgozás képessége. Ahhoz, hogy be lehessen integrálni az elemz t a szokásos fordítási folyamatokba (makefile), szükség van parancssori végrehajtásra. Követelmények a C++ sémával kapcsolatban: Az els és legfontosabb elvárás a részletesség, vagyis hogy minden nyelvi elemet kényelmesen ábrázolni lehessen benne. Fontos követelmény a modularitás/b víthet ség is, hogy a logikailag összetartozó nyelvi elemek külön csomagokban legyenek, és ezek szükség esetén lecserélhet ek legyenek például egy másik dialektusra. Ebben a cikkben bemutatjuk a Columbus keretrendszert, elemz t és sémát a C++ nyelvhez, amik kielégítik a legtöbb fenti követelményt. Az eszköz ingyenesen használható tudományos és oktatási célokra és letölthet a FrontEndART honlapjáról [10]. 2

2. A Columbus keretrendszer 1. ábra. A Columbus felhasználói interfésze A Columbus (lásd az 1. ábrát) egy reverse engineering keretrendszer, melyet a Szegedi Tudományegyetem Informatika Tanszékcsoportjának dolgozói készítettek együttm ködve a helsinki Nokia Research Center-rel és a FrontEndART Kft.-vel. Az eszköz képes nagy C/C++ projektek elemzésére és a Columbus Sémának megfelel formátumú adatok kigy jtésére. A rendszer kifejlesztésének f motivációja az volt, hogy létrehozzunk egy általános keretrendszert, amivel sokféle reverse engineering feladatot el lehet végezni egy általános felhasználói interfészen keresztül. Ennélfogva a Columbus egy olyan keretrendszer, ami támogatja a projektkezelést, adatkinyerést, adat ábrázolást, adattárolást és sz rést. Mindezen alapvet feladatokat a rendszer különálló moduljai (plug-in-jei) végzik el. A rendszerhez sok el re elkészített modul tartozik, de tetsz legesen b víthet küls modulokkal is. Az eszköz funkcióinak többségét parancssorból is el lehet érni (a CAN, CANLink, és ExportCPP nev programok által, lásd a 2. ábrát), így beépíthet a szokásos programfordítási folyamatokba (pl. makefile-okba). Ezáltal naprakész dokumentációt kaphatunk a rendszerünkr l. 2.1 A Columbus rendszer áttekintése A Columbus rendszer m ködését három különböz modul típus valósítja meg (lásd a 2. ábrát): Extraktáló modul: feladata, hogy leelemezzen egy adott input fájlt és készítsen bel le egy kimen fájlt, ami tartalmazza a kinyert információt. Linkel modul: feladata, hogy összefésülje az extraktáló modul által készített fájlokat és felépítse a projekt teljes reprezentációját. Ez a modul felel s a kinyert információ sz réséért is. Exportáló modul: feladata, hogy feldolgozza és elmentse a linkel modul által felépített és megsz rt bels reprezentációt valamilyen kimen formátumba. A jelenleg 3

megvalósított formátumok: négy XML formátum (CPPML, GXL, UML XMI és Famix XMI), RSF, HTML, tervezési minták és metrikák (CSV). 100243,&'%5 768') *+9-. / (ACB!#"$ %&(') *,+&-. / 3&. />65') *+&-. / A4B3&. /9>? @13,,',%5 6'&) *+-7. / :(;<=,5'% 6&') *,+&-. / E(F&2 3=,5'% 6&') *,+&-. / <$A424G @H@(2 G,,',%& 6'&) *+-7. / I23@12=G,,',%& 6'&) *+&-7. / 2F&: G (;J,5'%5 6&5') *,+&-. / K6L. +/09! 67/ 9&'%5 6&') *+9-. / &'% D050 2. ábra. A keretrendszer felépítése Az alaprendszerben jelenlév modulok mellé a felhasználó szabadon írhat saját modulokat is a Columbus API-t használva, melyekkel b vítheti a keretrendszer tudását. 2.2 Az adatkinyerés folyamata jwk lwmm nwk o œ &ˆ ŠC HŒ ˆ 1ŠC Ž 9ˆ 1ŠC W S 8 š W Wž$š $ $Ÿ$ # žwš MN M&OO P QSR T UWVXR YWT MN M&OO P QSR T UWVXR YWT p W swlsqj p W swlsqn MN MOO \ ] ^W_ PWT ] ^ R PWT ^ U \ T PWaWT bxc YWT MN M9OO dse f MN M9OO PSQWà Y$T R PWT gwh iwm,n M&O$O PSQ`aWYT R P`T q Wt $s q o ƒ sj q Wt $s q o ƒ sn jk pwq r#swt Z R [WPWT P QSR T UWVXR YWT p W swlsq Z R [`PWT \ ] ^W_ PWT u9v w$x`y z {Sv xwy { W} y x~wy Z R [WPT PSQWà Y$T R PWT q Wt $s q o ƒ s 3. ábra. Az adatkinyerés folyamata Az adatkinyerés folyamata a Columbus projekten alapul. Egy projekt tárolja a bemen fájlokat (és a beállításaikat: el fordított fejléc, el feldolgozás, kimen könyvtárak, stb.) melyek egy fa-nézetben vannak megjelenítve. Egy projekt egy valós szoftverrendszert ábrázol és tartalmazhat különböz nyelv forráskódokat is. A teljes kinyerési folyamat a 3. ábrán van ábrázolva. Az eljárás nagyon hasonló a hagyományos fordítóprogramoknál megszokottakhoz. Az els fázis az adatkinyerés. A Columbus fogja az input fájlokat, és egyenként átadja ket a megfelel extraktáló modulnak, ami leelemzi és létrehozza a megfelel kimen fájlokat. A második fázisban a linkel modul automatikusan meghívódik, hogy összefésülje az els fázisban létrehozott fájlokat. Ebben a fázisban lehet ség van sz rni is az információt. A harmadik fázisban, miután kiválasztottuk a megfelel formátumot, az információ feldolgozása és exportálása kerül végrehajtásra. 4

Mindhárom fázis paraméterezhet különböz modul specifikus opciókkal. Egy fontos el nye még a Columbus rendszernek, hogy a fenti lépéseket inkrementálisan is el tudja végezni, vagyis ha egy adott lépés eredménye már rendelkezésre áll, akkor azt nem futtatja le újból. 2.3 Sz rés Az analizált forráskód óriási mennyiség információt eredményezhet, amit nehéz használható formában prezentálni a felhasználónak (a felhasználót általában egyszerre csak egy része érdekli a teljes rendszernek). A Columbus-ban jelen lev különböz sz rési mechanizmusok segíthetnek ennek a problémának a megoldásában. Három különböz módszer áll rendelkezésre: C++ elemkategóriák szerinti sz rés (pl. osztályok, sablonok, felsorolás típusok, stb.). Ezzel az opcióval azok az elemek, amik nem taroznak bele a kiválasztott kategóriákba, ki lesznek sz rve. Bemen fájlok szerinti sz rés. Azok a C++ elemek, amik a nem kijelölt bemen fájlokból származnak ki lesznek sz rve. Ezzel a módszerrel minden olyan elemet, ami nem része szorosan a projektnek (pl. ami rendszerkönyvtárakból származik) könnyedén el lehet távolítani. A megmaradó C++ elemek egyenként ki/bekapcsolhatóak a projekt fanézetben. Hatáskör szerinti sz rés. A különböz C++ elemek, mint pl. az osztályok és névterek ki/bekapcsolhatók egy fanézetben, ami a rendszer hatáskör szerinti struktúráját ábrázolja. 2.4 Exportálás A kinyert információt különböz formátumokba lehet kiexportálni. Ezek között vannak általánosak (CPPML, GXL, UML XMI, HTML, Metrikák, tervezési minták) és eszközfügg k (pl. Famix XMI, RSF). Az exportáló modulok száma folyamatosa növekszik. Az aktuálisan rendelkezésre állóak a következ k: CPPML. Ez az exportáló modul egy XML dokumentumot készít (a neve CPPML C++ Markup Language) aminek a struktúrája a Columbus Sémát követi, vagyis lényegében a memóriában lev bels reprezentáció tükörképe. GXL. Ez az exportáló modul egy GXL dokumentumot készít. A GXL (Graph exchange Language) [11] egy XML alapú gráf leíró formátum. Mivel a Columbus Séma alapvet en egy gráfot definiál, ebben a formában kényelmesen lehet ábrázolni. Ezen kívül lehet ség van még a függvényhívási gráfot is ebben a formában elkészíteni. UML XMI. Ezzel a modullal szabványos UML XMI (Unified Modeling Language XML Metadata Interchange) dokumentumok készíthet k. Ezek a dokumentumok ezután betölthet k tetsz leges UML tervez eszközökbe, amik támogatják az XMI-t (pl. Rational Rose, Together) így megkapjuk az elemzett rendszer UML-ben ábrázolt terveit. Tervezési Minták (Design Patterns). Ez a modul képes felismerni a Gamma-féle tervezési minták [9] nagy részét az elemzett szoftverrendszerben [3] (a minták tetsz legesen módosíthatók és b víthet k). Ezzel lehet ség nyílik tovább finomítani a visszanyert 5

dokumentációt. Hasznos lehet még szoftverfejlesztés közben is, mivel le lehet vele ellen rizni, hogy jól lett-e implementálva az adott tervezési minta. RSF rigi. Háromféle gráfot lehet készíteni a rigi eszközhöz [15]: (1) Columbus Séma gráf, (2) függvényhívási gráf és (3) UML osztálydiagram. A 4. ábrán látható egy Columbus által kinyert örökl dési hierarchia vizualizálása rigi-ben. 4. ábra. Vizualizáció rigi-ben HTML dokumentáció. Ezzel a modullal hipertext dokumentáció készíthet HTML formátumban. A generált dokumentáció böngészhet, felhasználóbarát formában prezentálja az elemzett projektet. Minden fontos információ megtalálható az osztályokról strukturált módon. A dokumentációban háromféleképpen lehet gyorsan mozogni: (1) osztálynevek szerint, (2) hatáskör szerint és (3) örökl dés szerint. Az 5. ábrán látható egy Columbus által kinyert dokumentáció böngész ben megjelenítve. 5. ábra. A Vizualizáció böngész ben 6

Famix XMI CodeCrawler. Ezzel az exportáló modullal Famix [5] XMI formátumú fájl készíthet, amit a CodeCrawler eszközzel lehet tovább feldolgozni (pl. megjeleníteni, metrikákat számítani). A 6. ábrán látható egy Columbus által kinyert örökl dési hierarchia vizualizálása CodeCrawler-ben. 6. ábra. Vizualizáció CodeCrawler-ben Metrikák CSV. Ez az exportáló modul 88 különböz metrikát számít ki az elemzett szoftverrendszerr l, amit utána CSV (Comma Separated Value) formában ment el. Ez a fájl szinte minden ismert táblázatkezel be betölthet (pl. Microsoft Excel) és feldolgozható. 3. A Columbus Séma A reverse engineering eszközök között létfontosságú a sikeres adatcsere. Ehhez azonban szükség van egy közös formátumra, amit alkalmazni lehet különböz eszközökben, mint pl. elemz kben és metrikát számító programokban. Lennie kell egy szabványos sémának, ami leírja az adatok formátumát [8]. Ebben a cikkben ajánlunk egy sémát a C++ nyelvhez, amit Columbus Sémának nevezünk [6]. A Columbus Séma alacsony szinten (AST Absztrakt Szintaxis Fa) ábrázolja a C++ nyelvet, de tartalmaz magasabb szint elemeket is (pl. a típusok szemantikáját). Maga a séma UML osztálydiagramokkal van leírva, ezáltal könny implementálni és a példányait könny fizikailag reprezentálni (pl. GXL-lel). A séma moduláris, ami további rugalmasságot biztosít a jöv beni b vítésekhez és módosításokhoz. 4. A CPPAudit eszköz A Columbus analizáló motorját felhasználva elkészült egy CPPAudit nev program is, ami ellen rizni tud különböz kódolási konvenciók betartását, illetve figyelmeztet veszélyes kód konstrukcióra. Az eszköz beépül a Visual Studio fejleszt környezetbe (lásd a 7. ábrát), ahonnan rendkívül kényelmesen használható. Egy egyszer eszközsávon keresztül lehet indítani hasonlóan a 7

szokásos programfordításhoz. A futtatás eredményei különböz figyelmeztet üzenetek lehetnek, amik az alsó ablakban jelennek meg. Ezekre az üzenetekre kett t kattintva a szerkeszt ben megjelenik a kérdéses programsor. 7. ábra. CPPAudit ellen rzés közben Jelenleg 72 különböz szabályt ellen riz, amik segítenek a hibák megel zésében és az egységes kódolási stílus betartásában. Ilyen szabályok például: 'new' and 'delete' should correspond to each other (a 'new' és 'delete' utasítások feleljenek meg egymásnak) do not return address of non-static local objects (ne adja vissza nem statikus lokális objektum címét) public data members should be avoided (ne használjon publikus adattagokat) data members should be initialized (az adattagokat inicializálni kell) data members should be initialized in the constructor initializer list (az adattagokat a konstruktor inicializációs listában kell inicializálni) operators '++' and '--' should not be used more than once in one instruction (a '++' and '--'operátorokat ne használja többször egy utasításban) stb. Az eszközt parancssorból is lehet futtatni, így beépíthet a szokásos programfordítási folyamatokba (pl. makefile-okba). Ezáltal akár rá is lehet kényszeríteni a programozókat a szabályok betartására. 5. Kísérletek Ebben a fejezetben bemutatunk néhány kísérletet a Columbus analizáló képességeivel kapcsolatban. Három különböz, valós világból vett projektet elemeztünk: 8

IBM Jikes fordítóprogram [13]. Ezzel a projekttel figyeltük a rendszer képességeit összetett osztályhierarchiák kezelésére. Leda graph library [14]. Ezzel a projekttel demonstráltuk az elemz képességeit bonyolult sablonok (template-k) kezelésére. StarOffice Writer [17]. Ez egy nagy C++ projekt, ami 9 449 darab forrásállományból áll (több mint 1.7 millió nem el feldolgozott programsor!). Ezzel a projekttel ellen riztük az elemz képességeit valós méret, nagy projektek kezelésére. A következ táblázat tartalmazza a projektek méreteit: Projekt Fájlok száma Méret Sorok száma Jikes 77 3,5MB 94 611 Leda 508 2,9MB 116 752 Writer 9 449 66,5MB 1 764 574 A következ táblázat tartalmazza az elemzési id t (minden teszt egy Intel PIII-800 gépen lett elvégezve 384MB RAM memóriával Windows 2000 operációs rendszer alatt): Extrakció Id Memória Jikes 00:01:02 19MB Leda 00:05:50 49MB Writer 01:55:09 139MB A következ táblázat tartalmazza a beazonosított C++ elemek számát: Projekt Osztályok Névterek Függvények Attribútumok Jikes 275 1 3 471 1 643 Leda 1 563 1 10 802 8 287 Writer 4 988 99 61 533 23 862 Látható, hogy a memóriafogyasztás körülbelül arányos a bemenet komplexitásával (vagyis a bemenet különböz elemeinek számával, mint pl. az osztályok és függvények számával). Ebb l és a StarOffice Writer sikeres elemzéséb l következik, hogy a rendszer képes nagy, valós méret projektek kezelésére. 6. Összegzés A cikkben bemutattunk egy sémát a C++-hoz és egy reverse engineering eszközt, ami a séma szerint állít el adatokat a forráskód elemzéséb l. Az eszköz ingyenes kutatási és oktatási célokra. Célunk, hogy segítsük a kutatókat a munkájukban. A keretrendszert használva nem kell minden kutatónak magának megvalósítania a megfelel elemz t, hanem a Columbus-t használva jobban koncentrálhat a saját konkrét kutatási területére. A munkának f el nye a moduláris, közös séma, a hatékony elemz, ami a sémának megfelel adatokat állít el, valamint a b víthet keretrendszer, ami egybefog mindent. A 9

keretrendszer több népszer eszközzel is együttm ködik (pl. Rational Rose, Together, rigi, CodeCrawler), és könnyedén b víthet, hogy még több programot támogasson. A jöv ben szeretnénk a támogatott eszközök számát növelni, valamint hozzáadni a Java programozási nyelvet is. Ez persze egy Java Sémát is igényel. Hivatkozások [1] M. Armstrong and C. Trudeau. Evaluating Architectural Extractors. In Proceedings of WCRE'98, pages 30-39, Oct. 1998. [2] B. Bellay and H. Gall. An Evaluation of Reverse Engineering Tool Capabilities. In Software Maintenance: Research and Practice 10, pages 305-331, Oct. 1998. [3] Zs. Balanyi and R. Ferenc. Mining Design Patterns from C++ Source Code. In Proceedings of the 7th International Conference on Software Maintenance (ICSM 2003), to appear. IEEE Computer Society, Sept. 2003. [4] E. J. Chikofsky and J. H. Cross II. Reverse Engineering and Design Recovery: A Taxonomy. In IEEE Software 7, pages 13-17, Jan. 1990. [5] S. Demeyer, S. Ducasse, and M. Lanza. A Hybrid Reverse Engineering Platform Combining Metrics and Program Visualization. In Proceedings of WCRE'99, 1999. [6] R. Ferenc and Á. Beszédes. Data Exchange with the Columbus Schema for C++. In Proceedings of CSMR 2002, pages 59-66, Mar. 2002. [7] R. Ferenc, Á. Beszédes, M. Tarkiainen, and T. Gyimóthy. Columbus Reverse Engineering Tool and Schema for C++. In Proceedings of the 6th International Conference on Software Maintenance (ICSM 2002), pages 172-181. IEEE Computer Society, Oct. 2002. [8] R. Ferenc, S.E. Sim, R. C. Holt, R. Koschke, and T. Gyimóthy. Towards a Standard Schema for C/C++. In Proceedings of WCRE'01, pages 49-58. IEEE Computer Society, Oct. 2001. [9] E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns : Elements of Reusable Object-Oriented Software. Addison-Wesley Pub Co, 1995. [10] Homepage of FrontEndART Software Ltd. http://www.frontendart.com [11] R. Holt, A. Winter, and A. Schürr. GXL: Towards a Standard Exchange Format. In Proceedings of WCRE'00, pages 162-171, Nov. 2000. [12] International Standards Organization. Programming languages C++, ISO/IEC 14882:1998(E) edition, 1998. [13] IBM Jikes Project. http://oss.software.ibm.com/developerworks/opensource/jikes [14] K. Mehlhorn and S. Naeher. Leda: A platform for combinatorial and geometric computing. In Cambridge University Press, 1997. [15] H. A. Müller, K. Wong, and S. R. Tilley. Understanding Software Systems Using Reverse Engineering Technology. In Proceedings of ACFAS, 1994. [16] A. Quilici. Reverse Engineering of Legacy Systems: A Path Toward Success. In Proceedings of ICSE'95, pages 333-336, 1995. [17] The StarOffice Homepage. http://www.sun.com/software/star/staroffice 10