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

Hasonló dokumentumok
ügyvezető MultiRáció Kft.

Programozás II. 4. Dr. Iványi Péter

Programozás C++ -ban

Bevezetés, a C++ osztályok. Pere László

Java és web programozás

Osztály és objektum fogalma

Objektumok inicializálása

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

C++ programozási nyelv Konstruktorok-destruktorok

Pénzügyi algoritmusok

C++ programozási nyelv Struktúrák a C++ nyelvben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java és web programozás

EuroOffice 2010 sajtókonferencia

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Származtatási mechanizmus a C++ nyelvben

Programozási Nyelvek: C++

OOP #14 (referencia-elv)

Programozás II gyakorlat. 6. Polimorfizmus

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

1. Bevezetés A C++ nem objektumorientált újdonságai 3

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Bevezetés a C++ programozási nyelvbe

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 4. rész Osztályok II.

3. Osztályok II. Programozás II

Java és web programozás

Programozás C++ -ban 2007/4

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

Szoftvertechnolo gia gyakorlat

Programozás módszertan

Mobil Informatikai Rendszerek

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Bevezetés a C++ programozási nyelvbe

A JavaScript főbb tulajdonságai

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

Cekla. Készítette Doxygen Tue Sep :13:44

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Programozás II gyakorlat. 8. Operátor túlterhelés

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Python tanfolyam Python bevezető I. rész

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

Pénzügyi algoritmusok

Bevezetés a programozásba Előadás: A const

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Programozás alapjai II. (4. ea) C++

1. Alapok. Programozás II

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Alprogramok, paraméterátadás

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Pénzügyi algoritmusok

Osztályok. 4. gyakorlat

1. Egyszerű (primitív) típusok. 2. Referencia típusok

500. AA Megoldó Alfréd AA 500.

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Java II. I A Java programozási nyelv alapelemei

Informatika terméktervezőknek

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Objektumorientált programozás C# nyelven

Számítógép és programozás 2

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozás C++ -ban

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

117. AA Megoldó Alfréd AA 117.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Clang Static Analyzer belülről

T Á J É K O Z T A T Ó. A 1108INT számú nyomtatvány a webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el.

Mobil Informatikai Rendszerek

Objektumorientált programozás C# nyelven III.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Mutatók és mutató-aritmetika C-ben március 19.

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Elemi Alkalmazások Fejlesztése II.

Java II. I A Java programozási nyelv alapelemei

OOP: Java 8.Gy: Abstract osztályok, interfészek

Smart Pointer koncepciója

C++ programozási nyelv

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

5. Gyakorlat. struct diak {

ELTE SAP Excellence Center Oktatóanyag 1

Kivételkezelés a C++ nyelvben Bevezetés

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Átírás:

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.