Statikus kódelemzés
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. augusztus 13-án felülvizsgált
verziótól ; az ellenőrzések 6 szerkesztést igényelnek .
A statikus kódelemzés egy szoftverelemzés , amelyet a vizsgált programok tényleges végrehajtása nélkül hajtanak végre (a dinamikus elemzéssel ellentétben ) . A legtöbb esetben az elemzést a forráskód valamely verzióján hajtják végre , bár időnként valamilyen objektumkódot, például P-kódot vagy MSIL -kódot elemeznek . A kifejezést általában speciális szoftverrel (szoftverrel) végzett elemzésre alkalmazzák, míg a kézi elemzést "program megértésének", "program megértésének" (program megértésének vagy megértésének ) nevezik.
A használt eszköztől függően az elemzés mélysége az egyes utasítások viselkedésének meghatározásától az összes elérhető forráskódot tartalmazó elemzésig változhat. Az elemzés során kapott információk felhasználási módjai is eltérőek – a hibákat tartalmazó helyek azonosításától (segédprogramok, mint például a Lint ), a formális módszerekig, amelyek lehetővé teszik a program bármely tulajdonságának matematikai bizonyítását (például a viselkedés megfelelőségét a specifikáció).
Vannak, akik a szoftvermetrikát és a visszafejtést a statikus elemzés formáinak tekintik. A mérőszámok megszerzését ( angol szoftverminőségi célkitűzések ) és a statikus elemzést gyakran kombinálják, különösen beágyazott rendszerek létrehozásakor. [egy]
A statikus elemzés alapelvei
A legtöbb fordító (például a GNU C Compiler ) „ figyelmeztetéseket ” ( angol figyelmeztetések ) jelenít meg – olyan üzeneteket, amelyek szerint a kód, mivel szintaktikailag helyes, valószínűleg hibát tartalmaz. Például:
int x ;
int y = x + 2 ; // Az x változó nincs inicializálva!
Ez a legegyszerűbb statikus elemzés. A fordító számos más fontos tulajdonsággal rendelkezik - mindenekelőtt a munka sebessége és a gépi kód minősége, ezért a fordítók csak a nyilvánvaló hibákat ellenőrzik a kódban. A statikus analizátorokat részletesebb kódelemzésre tervezték.
A statikus analizátorok által észlelt hibák típusai
- Meghatározatlan viselkedés – inicializálatlan változók, hozzáférés a NULL mutatókhoz. A fordítók a legegyszerűbb eseteket is jelzik.
- A könyvtárhasználati algoritmus megsértése. Például mindegyiknek fopenszüksége van fclose. És ha a fájlváltozó a fájl bezárása előtt elveszik, az elemző hibát jelezhet.
- Gyakori forgatókönyvek, amelyek a következőhöz vezetnek : . A C szabványkönyvtár számos technikai hibájáról híres. Egyes funkciók, mint például a gets, eredendően nem biztonságosak. sprintfés strcpycsak bizonyos feltételek mellett biztonságos.
- Puffertúlcsordulásról akkor beszélünk , amikor egy számítógépes program a memóriában lefoglalt puffer határain túlmutató adatokat ír.
void doSomething ( const char * x )
{
karakterek [ 40 ] ;
sprintf ( s , "[%s]" , x ); // sprintf a helyi pufferbe, túlcsordulás lehetséges ....
}
Object * p = getObject ();
int pNum = reinterpret_cast < int > ( p ); // igaz x86-32-n, x64-en a mutató egy része elveszik; intptr_t kell
- Hibák az ismétlődő kódban. Sok program ugyanazt a dolgot többször is végrehajtja különböző argumentumokkal. Általában az ismétlődő töredékeket nem a semmiből írják, hanem sokszorosítják és javítják.
dest . x = src . x + dx ;
dest . y = src . y + dx ; // Hiba, kell dy!
- Formázási karakterlánc hibák – az ehhez hasonló függvényekben előfordulhatnak printfolyan hibák, amelyekben a formátum karakterlánc nem egyezik a paraméterek tényleges típusával.
std :: wstrings ; _
printf ( "s az %s" , s );
- A függvénynek átadott változatlan paraméter a programmal szembeni megváltozott követelmények jele. Egyszer a paraméter engedélyezve volt, de most már nincs rá szükség. Ebben az esetben a programozó teljesen megszabadulhat ettől a paramétertől - és a hozzá kapcsolódó logikától.
void doSomething ( int n , bool flag ) // flag mindig igaz {
ha ( zászló )
{
// némi logika
} más
{
// kód van, de nem használt
}
}
doSomething ( n , igaz );
...
doSomething ( 10 , igaz );
...
doSomething ( x.size ( ) , true );
- Memória és egyéb források szivárgása. Az igazságosság kedvéért meg kell jegyezni, hogy a statikus analizátorok általában alulmaradnak a dinamikus kódelemzőkkel szemben a szivárgásészlelés területén. [2]
Traverser * t = new Traverser ( Név );
ha ( ! t -> Érvényes ())
{
return HAMIS ; // Véletlenül a törlés előtt írta a return parancsot. törölje t ;
}
- Egyéb hibák - a szabványos könyvtárak számos funkciójának nincs mellékhatása , és nincs értelme eljárásként hívni őket.
std :: karakterláncok ; _
...
s . üres (); // a kód nem csinál semmit; valószínűleg s.clear()-re gondoltál?
Alkalmazás
Az utóbbi időben a statikus elemzést egyre gyakrabban alkalmazzák a rendkívül megbízható számítógépes rendszerekben használt szoftverek tulajdonságainak ellenőrzésére , különösen az életkritikus ( biztonságkritikus). Arra is használják, hogy olyan kódot találjanak, amely potenciálisan sebezhetőséget tartalmaz (néha statikus alkalmazásbiztonsági tesztelésnek , SAST-nak hívják). [3]
A statikus elemzést folyamatosan használják a kritikus szoftverekhez a következő területeken:
- Szoftver orvosi eszközökhöz. [négy]
- Szoftver atomerőművekhez és reaktorvédelmi rendszerekhez ( Reactor Protection Systems ) [5]
- Repülési szoftver (dinamikus elemzéssel kombinálva) [6]
- Szoftver a közúti vagy vasúti közlekedésben [7]
A VDC 2012-es adatai szerint a beágyazott szoftverfejlesztők hozzávetőleg 28%-a használ statikus elemző eszközöket, és 39%-uk 2 éven belül elkezdi használni őket. [nyolc]
Formális metódusok
Statikus elemző eszközök
Elemző nyelvi eszközök, amelyek közül néhányat a CISO CLUB [9] emel ki :
C/C++:
C#:
Jáva:
JavaScript:
.HÁLÓ:
- A .NET Compiler Platform ( Roslyn ) egy C# és VB.NET fordítói keretrendszer, amely interfészt biztosít az elemző számára.
- fxcop
- Microsoft FxCop
- NDepend
- PVS Stúdió
- ReSharper
- stíluszsaru
- YASCA
PHP:
- Graudit
- RIPS
- Solar appScreener
- YASCA
- Visual Code Grappler
- Code Warrior
Python: [11] [12]
- Flake8
- Graudit
- Pychecker
- Pylint
- McCabe
- Pyflakes
- pycodestyle
- Solar appScreener
- YASCA
rubin:
Egyéb:
- A T-SQL Analyzer egy olyan eszköz, amely meg tudja tekinteni a Microsoft SQL Server 2005 vagy 2008 rendszert futtató adatbázisok programmoduljait, és észleli a rossz kódminőséggel kapcsolatos lehetséges problémákat.
- AK-VS 2 a CJSC NPO Echelontól (NDV keresése, veszélyes minták azonosítása a CWE által[13] )
- A SonarQube egy kódelemző és minőségirányítási platform, amely különféle programozási nyelveket támogat egy bővítményrendszeren keresztül.
- Az AppChecker az NPO ESHELON kereskedelmi forgalomba hozott statikus kódelemzője, amelyet a C#, C/C++, Java, PHP nyelven fejlesztett alkalmazások forráskódjában található hibák automatikus keresésére terveztek.
- A Svace egy statikus elemző eszköz, amelyet az ISP RAS fejlesztett ki . Támogatja a C/C++, Java, C# programozási nyelveket. [tizennégy]
Lásd még
Jegyzetek
- ↑ Szoftverminőségi célkitűzések a forráskódhoz. Proceedings Embedded Real Time Software and Systems 2010 Conference , ERTS2, Toulouse, Franciaország: Patrick Briand, Martin Brochet, Thierry Cambois, Emmanuel Coutenceau, Olivier Guetta, Daniel Mainberte, Frederic Mondot, Patrick Munier, Loic Noury, Philippe Repozio, Frederic //www.erts2010.org/Site/0ANDGY78/Fichier/PAPIERS%20ERTS%202010/ERTS2010_0035_final.pdf Archiválva : 2012. március 12. a Wayback Machine -nél
- ↑ Igen, a PVS-Studio képes észlelni a memóriaszivárgást . Archiválva : 2018. május 15., a Wayback Machine / PVS Studio Blog
- ↑ Szoftverbiztonság javítása precíz statikus és futásidejű elemzéssel, Benjamin Livshits, 7.3 „Static Techniques for Security” szakasz, Stanford doktori tézis, 2006. http://research.microsoft.com/en-us/um/people/livshits/papers /pdf/thesis.pdf Archiválva : 2011. június 5. a Wayback Machine -nél
- ↑ FDA infúziós pumpa szoftverbiztonsági kutatása az FDA-nál . Élelmiszer- és Gyógyszerügyi Hatóság (2010. szeptember 8.). Letöltve: 2010. szeptember 9. Az eredetiből archiválva : 2010. szeptember 1.. (határozatlan)
- ↑ Számítógép alapú biztonsági rendszerek – műszaki útmutató a digitális számítógépes védelmi rendszerek szoftveres szempontjainak értékeléséhez, http://www.hse.gov.uk/nuclear/operational/tech_asst_guides/tast046.pdf Archiválva : 2012. október 9. a Wayback Machine -nél
- ↑ Helyezze el a papírt CAST-9. Megfontolások a Software Assurance biztonságtechnikai megközelítéseinek értékeléséhez, archiválva : 2013. október 6., a Wayback Machine // FAA, Certification Authorities Software Team (CAST), 2002. január: „Ellenőrzés. A statikus és dinamikus elemzések kombinációját a kérelmezőnek/fejlesztőnek kell meghatároznia, és alkalmaznia kell a szoftverre.”
- ↑ Bill Graham. Statikus elemzés, biztonsági szempontból kritikus vasúti szoftver és EN 50128 . Letöltve: 2016. szeptember 2. Az eredetiből archiválva : 2016. augusztus 25.. (határozatlan)
- ↑ VDC kutatási automatizált hibamegelőzés a beágyazott szoftverek minőségéért . VDC Research (2012. február 1.). Letöltve: 2012. április 10. Az eredetiből archiválva : 2012. április 7.. (határozatlan)
- ↑ A legjobb ingyenes eszközök statikus kódelemzéshez (orosz) ? . cisoclub.ru (2021. február 11.). Letöltve: 2021. november 19. Az eredetiből archiválva : 2021. szeptember 19. (határozatlan)
- ↑ Clang Static Analyzer . clang-analyzer.llvm.org. Letöltve: 2016. május 14. Az eredetiből archiválva : 2011. október 8.. (határozatlan)
- ↑ Anand Balachandran Pillai. Szoftverarchitektúra Python segítségével. - Packt Kiadó Kft., 2017. - P. 63-64.
- ↑ Adam Goucher, Tim Riley. Gyönyörű tesztelés: A vezető szakemberek megmutatják, hogyan fejlesztik a szoftvert . - O'Reilly Media, Inc., 2009. - 126. o .
- ↑ A programkód ellenőrzése a biztonsági követelményekhez - Információbiztonság, audit, programkód, biztonság, Alexey Markov, Valentin Tsirlov, CISSP, biztonsági kód ... Archív másolat 2016. május 27-én a Wayback Machine -nél , NPO Echelon CJSC
- ↑ Svace statikus analizátor. Kritikus hibák ipari keresése a biztonságos szoftverfejlesztési ciklusban . Letöltve: 2017. november 10. Az eredetiből archiválva : 2018. június 21. (határozatlan)
Linkek