Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Www.4dsoft.hu © 4D SOFT Kft. Minden jog fenntartva. Statikus analízis használata a szoftver minőségének biztosítására EG Forgács István 4D SOFT Kft."— Előadás másolata:

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

2 © 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ó

3 © 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

4 © 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

5 © 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

6 © 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

7 © 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ő soros GNU go programban az utak becsült száma 2 200,000

8 © 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

9 © 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

10 © 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)

11 © 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

12 © 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

13 © 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

14 © 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

15 © 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

16 © 4D SOFT Kft. Minden jog fenntartva. Néhány statikus analizátor TermékCoverity Prevent Klock- work K7 PolySpace Client FindBugsCode- Sonar Deeptest GyártóCoverityKlockworkPolySpaceUniv 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 javaC/C++java

17 © 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)

18 © 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)

19 © 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)

20 © 4D SOFT Kft. Minden jog fenntartva. 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. Statikus analizátorok funkcionalitása

21 © 4D SOFT Kft. Minden jog fenntartva. 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) Statikus analizátorok funkcionalitása

22 © 4D SOFT Kft. Minden jog fenntartva. 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 Statikus analizátorok funkcionalitása

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

24 © 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

25 © 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

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


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

Hasonló előadás


Google Hirdetések