Szoftvergyártás: gyártás- vezérlés kód-figyeléssel Előadó: Banai Miklós és Rakyta Péter
Vízió: Szoftvergyártás az EU-ra építve 2004 óta Magyarország tagja az Európai Uniónak Az EU a világ legnagyobb gazdasága EU GDP > USA GDP 27 tagország 500 milliós piac Európai Unió
Közép-Kelet-Európai régió több mint 100 millió lakos relatív elmaradottság ->magasabb növekedési potenciál Piaci anomáliák az IKT területén pl. évi 5 mrd EUR árbevétel, amelynek 2/3-a az adózás előtti eredmény Közép-Kelet Európa
Technológia Kutatási eredmények alkalmazása Kutatás-fejlesztési projektek egyetemi és ipari résztvevőkkel „Fél-automata gyártási eljárás, gyártás- vezérlés” Intelligens szoftverfejlesztési környezet, automatizált tesztelés Magas minőség Minőségbiztosítási eszközök pl. COLUMBUS (FrontEndArt) Columbus rendszer több száz javított hiba folyamatos monitorozás Az ++ projekt
OpenOffice.org kódtisztítása A Szegedi Tudományegyetem által készített hibák jelzése: General Rule Package Checker v3.6 beta 7db modulra (sw, svx, sc, binfilter, vcl, svtools, oox) generált hibák száma A hibák típusaikra való tekintettel sokszínűek, többnyire egyszerű javításokra utalnak. Feladat: a hibák javítását tartalmazó patch fájlok gyártása.
EuroOffice 2010 Kódjavításainkat beépítettük az EuroOffice 2010 irodai programcsomag forráskódjába. Letölthető a oldalról. 7 nyelven telepíthető Az OpenOffice.org kódjára épül.
Egyszerű hibatípusok I Egyszerű hibatípusok eloszlása: 5-6 hibatípus gyakori előfordulással
Egyszerű hibatípusok II GEN1009 the type of the return value should be the same as the return type of the function-53% GEN7023 conditional instructions like 'for' and 'if' should not be in the same line as the dependent instructions – 8.8% GEN1020 data members should be initialized – 9.9% GEN7026 assignment operators should not be used more than once in one instruction – 6.8% GEN7029 empty statements should be used only together with comments %
GEN1009 “the type of the return value should be the same as the return type of the function” Ez a hibatípus 53% gyakorisággal fordul elő. Többnyire azonos típusú csak más nevű változókról van szó. Előfordul azonban különböző osztályokra mutató pointerek konverziója is. Megoldás: az amúgy automatikus konverzió explicit jelölése.
GEN7026,,assignment operators should not be used more than once in one instruction” Ez a hibatípus 6.76% gyakorisággal fordul elő. Megoldás: Megjegyzés: új objektum létrehozásánál ügyelni kell az ugyanarra mutató pointerekre
Egyéb egyszerű hibatípusok GEN1020 data members should be initialized GEN7023 conditional instructions like 'for' and 'if' should not be in the same line as the dependent instructions GEN7025 operators '++' and '- -' should not be used more than once in one instruction GEN7026 assignment operators should not be used more than once in one instruction GEN7029 empty statements should be used only together with comments
Kompatibilitás új verziókkal A javított OpenOffice.org verzója: v3.2 DEV300.52m Az OpenOffice.org v3.2 DEV300.58m verzióján a patch fájlok 97%-a működik Az OpenOffice.org v3.2 DEV300.63m verzióján a patch fájlok 97%-a működik A nem működő patchok többsége egy-egy fájlra korlátozódik ahol változás történt.
Összetett javítások A forráskódot több helyen kell módosítani Nagyobb valószínűséggel kell idomítani a javításokat az újabb verziószámú forrásokhoz. A javítások fejlesztéséhez lényegesen több idő szükséges, mivel meg kell ismerni a forrást a hiba környezetében. A javítások széleskörű tesztelési folyamatokat igényelnek.
GEN7032 „'goto' and C label should not appear because unstructured control flow is dangerous” Megoldás: (a) A funkcionalitás megtartásának érdekében egy inline függvény definiálása a megfelelő címke alatt lévő utasításokkal. (b) A definiált függvény meghívása minden goto utasítás helyett. Az inline definiált függvény csak az érintett fájlban látható. A függvény input változói referencia típusúak, hogy az érintett objektumokkal megfelelően tudjon operálni.
GEN7032
GEN1015 “data members should not be public” Megoldás: az érintett változók tulajdonságának megváltoztatása: public->private ( protected ) Többnyire ezeket a változókat meghívják külső függvények, ezért elérést kell biztosítani számukra. (friend függvények és osztályok deklarálása) Megjegyzés: olykor csak egy másik fájlban látható függvény hívja meg ezeket a változókat.
GEN1015
GEN1001 “the C functions 'malloc' and 'free' should not be used in C++” Lényeges szempont a funkcionalitás megmaradása A new parancs nem hoz létre void* pointert. A C függvények nem hívják meg az osztályok konstruktorát és destruktorát. Megoldás: (a) konstruktor és destruktor definíciók; (b) megfelelő C++ függvények: ::operator new és ::operator delete[ ]
GEN1001–Kiterjedt javítások Adott módon létrehozott objektumot, csak adott módon lehet törölni. A létrehozott objektumok több függvényhíváson keresztül élnek.
GEN1001–Kiterjedt javítások Egész VCL modulra kiterjedő javítás
GEN1001–Kiterjedt javítások Külső memóriakezelést végző függvények alternatívája (pl. strdup függvény) szükséges. static char* my_strdup(const char* ToDuplicate) { int len(0); while ( *ToDuplicate != 0 ) { ToDuplicate++; len++; } ToDuplicate = ToDuplicate - len; char* ret = new (std::nothrow) char [len+1]; assert(ret != 0); while ( *ToDuplicate != 0 ) { *ret = *ToDuplicate; ret++; ToDuplicate++; } ret = ret - len; return ret; }
GEN1001–Kiterjedt javítások Kompatibilitás biztosítása tisztán C-ben írt kódrészekkel. list listNewEmpty(void) { list this = malloc(sizeof(struct _list)); listNewInitializer(this); return this; } void listNewInitializer ( list ptr ) { assert(ptr != 0); ptr->aCount = 0; ptr->eDtor = 0; ptr->head = 0; ptr->tail = 0; ptr->cptr = 0; return; } C++-ben létrehozott objektumok esetében csak a listNewInitializer függvény kerül meghívásra, míg az eredeti funkcionalitás is megmarad.
GEN1001-Kiterjedt javítasok A VCL modul C++ kódrészeiből eltávolítottunk minden C-ben használandó memóriakezelést. Összesen 125 hibajelzés javítása 3 új függvény definiálásával. A javítások az EuroOffice következő verziójában kerülnek alkalmazásra. Az érintett osztályok némelyikében még hiányzik a konstruktor és destruktor definíciója.
Összefoglalás 1500 egyszerű javítást építettünk be az EuroOffice 2010 forráskódjába. A VCL modulban a C++ kódrészleteket mentesítettük a dinamikus memória kezelését végző C függvényektől. A dinamikus memóriakezelés javításait az EuroOffice következő verziójában alkalmazásra kerülnek.