szó jelentését keresi. A DICTIOUS-ban nem csak a
szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a
szót egyes és többes számban mondani. Minden, amit a
szóról tudni kell, itt található. A
szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. A
és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.
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.