Statikus analízis használata a szoftver minőségének biztosítására

Slides:



Advertisements
Hasonló előadás
T ESZTELÉS. C ÉLJA Minél több hibát találjunk meg! Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot az összes lehetséges bemenő.
Advertisements

Összefoglalás Hardver,szoftver,perifériák Memóriák fajtái
Winbelépő - Munkaidő nyilvántartás
Programozási tételek, és „négyzetes” rendezések
© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
Valós idejű tesztlefedettség- monitorozás JEE környezetben Dr. Ferenc Rudolf, Szegedi Tudományegyetem Bakota Tibor, FrontEndART Szoftver Kft.
Hatékonyságvizsgálat, dokumentálás
Készítette: Bátori Béla 12.k
C++ programozási nyelv Gyakorlat hét
Rendszerfejlesztés.
Többfelhasználós és internetes térkép kezelés, megjelenítés.
3. A programozás eszközei, programozás-technikai alapismeretek
A webes tesztelés jövője
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozási alapismeretek 9. előadás. ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás2/
Fájlkezelés, IO Kivételkezelés Belső osztályok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 1. gyakorlat.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
C A C nyelv utasításai.
Mutatók, tömbök, függvények
Algoritmizálás Göncziné Kapros Katalin humaninformatika.ektf.hu.
Szoftver bonyolultsági mértékek alkalmazási területei Király Roland 2011.
SZÁMÍTÓGÉP ARCHITEKTÚRÁK
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
CISC - RISC processzor jellemzők
Kivételkezelés a C++ nyelvben Bevezetés
Dr. Surján György és munkatársai IMEA TEA március 30. IMEA TEA Az Internetes Magyar Egészségügyi Adattár egyéves fejlődése.
Objektum Vezérelt Szoftverek Analízise Ferenc Rudolf és Beszédes Árpád Szegedi Tudományegyetem FrontEndART.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Programtesztelés. Hibák keletkezésének okai nem egyértelmű vagy hiányos kommunikáció fejlesztés közben maga a szoftver bonyolultsága programozói (kódolási)
Rendezések és szövegkezelő függvények
Szintaktikai, szemantikai szabályok
Összetett adattípusok
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
3.2. A program készítés folyamata Adatelemzés, adatszerkezetek felépítése Típus, változó, konstans fogalma, szerepe, deklarációja.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
Műszer vezérlő - kezelő program GPI-745A teszterhez.
Java programozási nyelv Metódusok
Objektum orientált programozás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
Az elvben figyelembe veendő kapcsolási rendek számáról képet kaphatunk, ha felmérjük az adott N és M áramok és egy-egy fűtő- és hűtőközeg.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Programozás III KIVÉTEL.
Információs rendszer fejlesztése 4. előadás
Programozás, programtervezés
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Algoritmizálás, adatmodellezés
DLL használata és készítése Feladat
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
PÁRHUZAMOS ARCHITEKTÚRÁK – 13 INFORMÁCIÓFELDOLGOZÓ HÁLÓZATOK TUDÁS ALAPÚ MODELLEZÉSE Németh Gábor.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS SZEGEDI TUDOMÁNYEGYETEM S zoftverfejlesztés Tanszék Programrendszerek tanúsítása – szoftverminőség mérése Dr. Gyimóthy.
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
Adatstruktúrák Algoritmusok Objektumok
Programozási nyelvek típusossága.
Az első lépés a C++ végtelen és izgalmas útján
Az első lépés a C++ végtelen és izgalmas útján
Informatikai rendszerek lassulása - a tervszerű archiválás hiánya?
Szoftvermetrikák és minőségmenedzsment Péter Előd
MINŐSÉG BS 4778 "Egy termék vagy szolgáltatás jellemzőinek és sajátosságainak összessége, amelyek együttesen egy adott szükséglet kielégítésére képesek".
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

Statikus analízis használata a szoftver minőségének biztosítására EG Forgács István 4D SOFT Kft. www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Áttekintés mi a statikus analízis felhasználási lehetőségei előnyei, hátrányai kis elméleti áttekintés statikus analízis során megvalósítható funkcionalitás esettanulmány konklúzió www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Bevezetés, amely amely akár konklúzió is lehetne Utóbbi években nagy a fejlődés, a statikus analizá-torok tudományból átmentek a használható eszközök közé Használata bizonyos szoftverek esetén szinte kötelező - nem csupán egy lehetőség Az eddigi karbantartási szintről át kell térni a fej-lesztési szintre, vagyis az teljes életciklus során való használatra www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Mi a statikus analízis A statikus analízis a program futása során keletkező információkat szolgáltat a program tényleges futta-tása nélkül Ilyen információ a program idő előtti terminálása például a null pointer dereference esetén, de ilyen információ egy adott pontban meghívott függvények, vagy egy értékadás hatásainak listája A statikus analízis nem lehet tökéletes, hiszen akkor nem is kellene futtatnunk a programot A statikus analízis csak csökkenti a hibák számát, de nem helyettesíti a tesztelést www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Miért jó a statikus analízis A fejlesztés korai szakaszában találja meg a hibákat – ez 10-30X olcsóbb Mivel minden programutat bejárunk, ezért, ha jó az analízis teljes információt nyerünk, míg teszteléssel csak pár út fedhető le – más módszerrel nehezen megtalálható problémák felfedése Nincs szükség egy nehezen karbantartható tesztadatbázisra, minden információ megtalálható a forrásban – módosítás esetén nincsen probléma Máshonnan nem „beszerezhető” információkat nyerünk, amely segít a fejlesztés bármely szakaszában www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Mire használhatjuk a statikus analizátorokat? Programozási hibák egy csoportjának megtalálása Kód megértésének elősegítése Teszteléssel megtalált hibajelenség alapján a hiba megtalálása Karbantarás során felmerülő munkamennyiség pontosabb előrejelzése Automatikus tesztadat-generálás Kódoptimalizálás Kódolási szabályok betartatása www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Kis elméleti áttekintés A legtöbb statikus analízisbeli probléma eldönthe-tetlen A statikus analizis valamilyen gráfreprezentáción történik, információ terjed csomópontról csomó-pontra, amíg az összes információ változatlan nem lesz A problémák jól kezelhető része, amikor az információ megegyezik a MOP megoldással – ebben az esetben kis befektetéssel a lehetséges összes információ kinyerhető 40 000 soros GNU go programban az utak becsült száma 2200,000 www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analízis folyamata Analizálandó kód lefordítása – tárgykód helyett szimbólumfa, vezérlési gráfok, hívási gráf, egész egy programgráffá összekötve Alapanalízis elvégzése – PTA (points to analysis), GMOD, GREF, stb. Kapunk egy adatbázist, amit a további analízishez, lekérdezéshez használunk Globális lekérdezések, pl. Null pointer dereference Lekérdezéskor a vonatkozó algoritmusok, pl. hatásanalízis egy adott pontból www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

PTA algoritmus Ez az objektumorientált nyelvek esetén a legnehe-zebb feladat Azt kell kideríteni, hogy mely pointerek, referenciaváltozók mutathatnak azonos objektumokra Sok cikk, legtöbb nem eléggé pontos, ha pontos, akkor lassú Probléma a többszörös referenciák esetén van Inkrementális módszerek nem nagyon ismertek www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Hatásanalízis A hatásanalizis (szeletelés) esetén kiindulunk egy adott utasításból és az abban használt változókból, és azt vizsgáljuk, hogy erre az utasításra mely más utasítások hathatnak Vizsgálhatjuk azt is, hogy egy értékadó utasítás mely más utasításokra hathat Leszűkíthetjük a vizsgálatot csak adathatásra (változókon létrejövő hatáslánc) vagy kontrolhatásra (vezérlésen keresztüli hatás) www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Hatásanalízis Eredetileg M. Weiser azért találta ki, mert „a programozók szeletelnek, amikor hibát keresnek Azóta számos felhasználási területe van, programmegértés, statikus regressziós teszt, karbantartási munka ütemezése Imperatív nyelvek esetén is nehéz, objektumorintált nyelvek esetén vissza lehet vezetni a feladatot, hiszen kell a pontos hívási gráf és az értékadás-felhasználás információ, ehhez kell a PTA algoritmus www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analízis pontossága Az analízis lehet Folyamérzékeny (flow sensitive) és nem folyamérzékeny Intra és interprocedurális Kontextusérzékeny (context sensitive) és nem kontextusérzékeny Útérzékeny (path sensitive) és nem útérzékeny Biztonságos (safe) vagyis nincs „false negative” és nem biztonságos Támogatja a párhuzamos szálakat, nem támogatja www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Milyen pontos legyen a statikus analízis Két nagy probléma: false positive (vaklárma) és false negative (hiba meg nem találása) Minél pontatlanabb az algoritmus, annál több lesz a false positive, de annál gyorsabb az algoritmus Minél pontosabb az algoritmus, annál lassabb, de kevés lesz a vaklárma Találni kell egy optimumot a kettő között Egy megoldás: sok pontossági szint megadhatósága Ha az algoritmus nem biztonságos, akkor nem találjuk meg a létező hibákat, az analízis nem teljes www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Hogyan javíthatunk, anélkül hogy rontanánk Új hatékonyabb mószerek kidolgozása Inkrementális megoldás: Első lépés – teljes analízis, ami lehet lassú, pl. Este 8-tól reggel 8-ig További lépések – csak a módosítást analizáljuk csak egy fejlesztő módosítását figyeljük egy adott kliens gépen – cél JIT analízis Fordításnál ez megoldható, PTA algoritmusnál elég nehéz www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

További problémák – java esetén Kivételkezelés – elrontja a függvények vezérlési gráfjának kellemes egy belépési és egy kilépési pontját A már említett PTA analízis könyvtárak kódjának figyelmen kívül hagyása Collection-kezelés (beleértve a tömböket) Java technológiák, pl. Apache Struts Szálak Nem java kód alkalmazása, pl. XML és java vegyítése www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Néhány statikus analizátor Termék Coverity Prevent Klock-work K7 PolySpace  Client FindBugs Code-Sonar Deeptest Gyártó Coverity Klockwork PolySpace Univ of Maryland Gramma-tech 4D SOFT Folyam-érzékeny √ Interpro-cedurális Részben Kontextus-érzékeny ― ? Bizton-ságos Inkremen-tális Program-nyelv C/C++ java C/C++ Ada java C/C++ www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analizátorok funkcionalitása Kódolási előírások ellenőrzése (code checker) – ez az eredeti funkcionalitás, ma is a legtöbb statikus analizátor ezt tudja, pl. FindBugs Ez technikailag a legegyszerűbb, a forráskódban szintaktikusan nem kívánatos kódrészleteket keresnek, és ezeket kijelzik A felhasználó maga is definiálhat ilyet Probléma a nagyszámú false positive Az első analizátor ilyen volt (1970, Lint, Stephen Johnson, Bell Laboratories, C nyelvre) www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analizátorok funkcionalitása Az erőforrások hibás menedzselése, ide tartozik a memóriafolyás, a memória lefoglalása után nem lesz felszabadítva, fájlok felszabadításának hiánya használatuk után – C, C++ (CodeSonar, PoliSpace, ClockWork, Coverity) Illegális műveletek: nullával való osztás, aritmetikus függvények illegális értékkel való hívása (negatív értékkel egy log függvényt), túlcsordulás, alulcsordulás, index túlcsordulás, felszabadított memória ismételt felszabadítása (CodeSonar, PolySpace) www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analizátorok funkcionalitása Nem elérhető kód: kód, melyre futás során soha nem kerülhet vezérlés – ez nem feltétlenül hiba, de mindenképpen jelzi a kód minőségét, ha nagyon sok van belőle. Lehet ugyanakkor programhiba is, ha pl. Egy függvény hívása nem történik meg, mert egy leszármazott osztályé hívódik (CodeSonar, Deeptest, PolySpace, KlockWork, Coverity) Nem teljes illetve felesleges kód: nem inicializált változók, függvények nem specifikált visszatérési értékkel, nem használt értékadások (CodeSonar, PolySpace, KlockWork, Coverity) www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analizátorok funkcionalitása Null pointer dereference megtalálása Javában ez az egyik leggyakoribb hiba az indextúlcsordulás mellett Mivel a fejlesztők többnyire lekezelik, ezért a probléma a ravasz lekezelések észrevétele, vagyis a false positive esetek minimalizálása Ugyanakkor erős inteprocedurális hatásanalizis is szükséges, points to analízis megtámogatásával Sok eszköz tudja, (az itt felsorolt hat közül mindegyik) azonban például a FindBugs csekély adatfolyam-analízisének hatására csak a legegyszerűbb eseteket találja meg. www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analizátorok funkcionalitása Pontos futási időbeli hívási gráf – minden hívási pontban a potenciálisan meghívott függvényt adja meg (CodeSonar, Deeptest) Hasznos információt szolgáltat Szükséges a hatásanalízishez Potenciális hibák megtalálása – hibás hívások felderítése Kivételkezelés Throw – catch párok megtalálása (Deeptest) www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Statikus analizátorok funkcionalitása Módosítás nem várt hatásainak megtalálása (Deeptest) Teszteléssel nehéz megtalálni, mert a hiba egészen máshol jelentkezik, mint ahol javítottunk Hatásanalízisen és különbségkeresésen alapul A fejlesztő tudja, hogy a módosítás milyen hatásokat eredményezhet, és ha másra is történik hatás, az hibás lehet, vagy a kód ismeretének hiányosságát tükrözi www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Hatásgráf (Deeptest) www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Kiértékelés Letesztelt, futó kódban is sikerült hibát találni, ezek közül minimális volt a súlyos hibák aránya Ismert kódban a nem biztonságos eszközök különböző hibákat találtak, de az ismert hibát nem, tehát elég sok a false negative Ezek az eszközök viszont kevés false positive eredményt produkáltak A biztonságos eszköz (PolySpace) sok false positive eredményt szolgáltatott, és csak 50k-s modulokat tudott analizálni www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

Konklúzió A statikus analízis egyre jelentősebb szerepet játszik a szoftverek minőségének biztosításában A Google-nál külön szakértő foglalkozik a megjelenő statikus analizátorokkal A kiértékelések alapján kiderült, hogy a statikus analizátorok használhatósága projektfüggő, célszerű olyat választani, amelyik több szintű szűrést alkalmaz, illetve amelyik pontosabb, de nem lassú, mert inkrementális www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.

KÖSZÖNÖM A FIGYELMET! És itt vége... www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva.