static program analysis
Főnév
static program analysis (tsz. static program analysises)
- (informatika) A statikus programanalízis (angolul: static program analysis) egy olyan módszer, amely során a program forráskódját vagy binárisát elemzik anélkül, hogy futtatnák azt. A cél az, hogy hibákat, biztonsági réseket, optimalizálási lehetőségeket vagy kódstílus-problémákat tárjanak fel automatikusan.
🧠 Mi az a statikus analízis?
Definíció: Statikus analízis során a szoftverkódot egy elemző eszköz értelmezi, és megpróbál következtetéseket levonni a kód működéséről – még a program futása előtt.
Ez ellentéte a dinamikus elemzésnek, amely a program tényleges futása közben vizsgálja a viselkedést (pl. profilozás, unit tesztek, futásidejű biztonsági monitorozás).
📚 Mire használjuk?
- 📛 Hibák keresése (null pointer, buffer overflow, nem inicializált változó)
- 🔐 Biztonsági rések detektálása (pl. taint analysis, SQL injection mintázatok)
- 🧹 Kódminőség ellenőrzése (használatlan változók, felesleges kód)
- 🔄 Refaktorálási javaslatok
- 📏 Stílus- és szabálykövetés (kód konvenciók)
- 🧠 Formal verification – matematikai modellezés és bizonyítás
🛠️ Típusai
1. Szintaktikai elemzés
- Ellenőrzi, hogy a kód megfelel-e a nyelvtani szabályoknak
- Pl. szintaxisfa (AST – Abstract Syntax Tree) létrehozása
2. Szemantikai elemzés
- Ellenőrzi a típushelyességet, változók deklarációját, elérhetőségét
- Használja a szimbólumtáblát
3. Adatfolyam-elemzés (Data flow analysis)
- Feltérképezi, hogyan áramlik az adat a programon keresztül
- Pl. használat előtti inicializálás, változók hatóköre
4. Vezérlési útvonal elemzés (Control flow analysis)
- Feltérképezi, milyen utakon haladhat a program végrehajtás közben
5. Taint analysis
- Különösen biztonsági elemzésekhez: követi a „szennyezett” (user input) adat útját
- Cél: ne jusson veszélyes módon pl. adatbázis-lekérdezésbe
🧩 Népszerű statikus analízis eszközök
| Nyelv | Eszközök |
|---|---|
| C/C++ | clang-tidy, cppcheck, Coverity, Infer |
| Java | SpotBugs, PMD, Checkstyle, ErrorProne |
| Python | pylint, flake8, mypy, bandit |
| JavaScript | ESLint, Flow, TypeScript |
| Rust | clippy |
| .NET (C#) | FxCop, Roslyn analyzers, SonarQube |
| Multinyelvű | SonarQube, Semgrep, CodeQL, Infer |
⚙️ Példa: clang-tidy (C++)
clang-tidy main.cpp -- -Iinclude/ -std=c++17
Ez a parancs statikus vizsgálatot hajt végre a main.cpp fájlon, és jelzi például:
- Használatlan változók
- Elavult konstrukciók
- Hibás ciklusfeltételek
🛡️ Biztonsági analízis: példák
- SQL injection – adatbázis lekérdezésbe kerülő bemeneti adat
- Path traversal – felhasználói bemenet alapján nyitott fájlok
- Buffer overflow – túlcsorduló tömb
Statikus elemző ezeket jelezi a kódban anélkül, hogy végrehajtaná azt.
🧮 Elméleti háttér: absztrakt interpretáció
Sok fejlett statikus analízis eszköz a „abstract interpretation” elvén alapul:
- A program összes lehetséges futási állapotát nem tudjuk végigvizsgálni
- Ezért abstrakt állapotokat modellezünk (pl. „egy egész szám lehet 0, pozitív vagy negatív”)
- Így „szimuláljuk” a program futását, de nagyon leegyszerűsített formában
🤝 CI/CD integráció
Statikus elemzés gyakran fut a CI-pipeline-ban:
- 🟡 Pre-commit hook (
pre-commit, Git hook) - 🟢 Pull request ellenőrzés (GitHub Actions, GitLab CI)
- 🔴 Build fail, ha súlyos hiba van
🔄 Statikus vs Dinamikus elemzés
| Jellemző | Statikus elemzés | Dinamikus elemzés |
|---|---|---|
| Futtatja a programot | ❌ | ✅ |
| Teljes lefedettség | Elméleti lehetőség | Függ a tesztesetektől |
| Hibák típusa | Szintaktikai, logikai, stílus | Futásidejű, memóriaszivárgás |
| Példák | clang-tidy, pylint |
Valgrind, ASan, gdb |
📌 Összefoglalás
A statikus programanalízis egy elengedhetetlen eszköz a modern szoftverfejlesztésben. Lehetővé teszi a hibák korai észlelését, kódminőség javítását, és a biztonságosabb szoftverek fejlesztését – még azelőtt, hogy a program elindulna. Automatizálható, CI-be integrálható, és jól kiegészíti az egységtesztelést és a kódreview-t.
- static program analysis - Szótár.net (en-hu)
- static program analysis - Sztaki (en-hu)
- static program analysis - Merriam–Webster
- static program analysis - Cambridge
- static program analysis - WordNet
- static program analysis - Яндекс (en-ru)
- static program analysis - Google (en-hu)
- static program analysis - Wikidata
- static program analysis - Wikipédia (angol)