Szoftvergyártás: gyártásvezérlés kód-figyeléssel Előadó: Banai Miklós és Rakyta Péter
Pályázatok: TECH_08-A2/2-2008-0089-SZOMIN08; KMOP-1.1.1-08/1-2008-0019; KMOP-1.1.2-08/1-2008-0002
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 Európai Unió 27 tagország 500 milliós piac
Közép-Kelet Európa 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ásvezérlés” Intelligens szoftverfejlesztési környezet, automatizált tesztelés
Magas minőség Minőségbiztosítási eszközök
Az projekt
pl. COLUMBUS (FrontEndArt) Columbus rendszer több száz javított hiba folyamatos monitorozás
++
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 42080. 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 www.multiracio.com oldalról.
7 nyelven telepíthető
Az OpenOffice.org 3.2.1 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 - 10.7%
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.