Kihagyás

Végső riport

Dokumentum száma: VR-001

Tesztelt szoftver

docker-java - https://github.com/docker-java/docker-java

Csapattagok

  • Kiss Pista István - tesztelő
  • Metil Ibolya - tesztelő
  • II. Derivált - vezető tesztelő

Verziótörténet

Verzió Kiadás dátuma Leírás
1.0 2025.11.10. Végső riportként leadásra kerülő jelentés

Tartalomjegyzék

Összefoglaló

Ez a dokumentum a docker-java projekt tesztelési folyamatának eredményeit mutatja be, részletezve a teszttervben foglalt tesztmegközelítést, és a köztes riport által feltárt hibákat.

Továbbá bemutatjuk a véleménykutatás céljából készített kérdőívet és eredményét.

Tesztelt projekt

A tesztelt projekt a docker-java, egy nyílt forráskódú Java könyvtár, amely lehetővé teszi a Docker API-jával való kommunikációt és konténerek kezelését.

Tesztterv

A tesztterv áttekintést nyújt a projekt során alkalmazott tesztelési stratégiáról, beleértve a célzott tesztszinteket, a tesztelési típusokat, az alkalmazott technikákat, a belépési és kilépési feltételeket, valamint a teszteléshez szükséges környezetet.

Tesztmegközelítés

A projekt tesztelési stratégiája két fő tesztszintet ölel fel, különböző teszttípusok és technikák alkalmazásával:

Tesztszint Leírás
Modulszintű tesztelés Forráskód alapos tesztelése automatizáltan és manuálisan.
Rendszerszintű tesztelés Felhasználói vélemények gyűjtése kérdőívek segítségével.
Teszttípus Leírás
Statikus tesztelés A docker-java kódjának teljes és részleges elemzése
statikus kódelemző eszközökkel és kézi áttekintéssel.
Használhatósági tesztelés Felhasználói élmények és visszajelzések
gyűjtése kérdőíves felmérések segítségével.
Teszttechnika Leírás
Statikus tesztelés Fehérdoboz technika alkalmazása a forráskód
vizsgálatához, automatizált és manuális módszerekkel.
Használhatósági tesztelés Feketedoboz/experience technikák használata a
felhasználói tapasztalatok és vélemények gyűjtésére.

Megjegyzés: A tesztelés során elsősorban nem funkcionális hibák (például kódminőségi, biztonsági és használhatósági problémák) azonosítása volt a cél.

Teszttermékek

A tesztelés folyamán az alábbiak készültek:

  • Tesztterv: a tesztelési folyamat alapjául szolgáló dokumentum.
  • A köztes és végső riportok: jelentések a tesztelés előrehaladásáról és eredményeiről.
  • Kérdőív és a rájuk érkezett válaszok: felhasználói visszajelzések gyűjtése.

Belépési és Kilépési Feltételek

A tesztelési típusokhoz tartozó belépési és kilépési feltételek biztosítják a tesztelés szisztematikus végrehajtását és értékelését:

Teszttípus Belépési Feltételek Kilépési Feltételek
Statikus tesztelés Tesztterv jóváhagyása,
Java és Maven konfigurációk,
IntelliJ IDE és kódelemzők beállítása.
Szabálysértések dokumentálása és javítása.
Használhatósági tesztelés Kérdőív elkészítése és dokumentálása. Kérdőívre érkezett válaszok dokumentálása.

Tesztkörnyezet

A tesztelési folyamat során használt eszközök és technológiák részletezése:

  • Statikus teszteléshez szükséges eszközök:
  • Desktop környezet (Windows/Linux).
  • Java 8+, Maven, IntelliJ IDEA.
  • SpotBugs (Lombok függőséggel), CheckStyle, PMD.
  • Használhatósági teszteléshez szükséges eszközök:
  • Desktop környezet (Windows/Linux).
  • Tetszőleges böngésző és Google Forms.

Köztes riport

A tesztelés során különféle statikus kódelemző eszközöket alkalmaztunk a kódhibák azonosítása, a kódolási szabványok betartásának ellenőrzése és az esetleges sebezhetőségek feltárása érdekében.

Használt eszközökhöz ld. Teszkörnyezet - Statikus teszteléshez szükséges eszközök.

Szabálysértések

SpotBugs

Fájl Sor Hiba Típusa Leírás
NetworkAttachmentConfig.java - Biztonsági sebezhetőség Az osztály közvetlenül hivatkozik az aliases mezőre, ami belső reprezentáció felfedéséhez vezethet.
FiltersBuilder.java 112 NullPointerException kockázat Non-short-circuit logikai művelet használata, ami NullPointerException-t eredményezhet.
NettyDockerCmdExecFactory.java 198 Felesleges változó Használatlan lokális változó, amely kikommentezett kód miatt jött létre.
  • Általános szabálysértések
  • Olvasatlan mezők: 14 eset
  • Mutábilis objektum hivatkozások tárolása: 124 eset
  • Mutábilis statikus mezők (final hiányában): 7 eset
  • Platformfüggetlen konverziók hiánya

CheckStyle

  • Általános szabálysértések
  • Hiányzó Javadoc kommentek
  • Több sor hosszabb, mint 80 karakter
  • Hiányzó final paraméterek

PMD

Fájl Sor Hiba Típusa Leírás
Bind.java 104 Switch Density Violation A switch utasításban a címkékhez képest túl magas állítási arány, ami nehezíti a kód karbantarthatóságát és olvashatóságát.

Elvégzett feladatok

SpotBugs elemzés

A tesztforrásokkal együtt történő elemzést választottuk, a tesztforrások nélküli elemzést figyelmen kívül hagytuk.

  • Analyze Project Files Including Test Sources:
  • Kattintson a jobb egérgombbal a projekt gyökérkönyvtárára
  • SpotBugs > Analyze Project Files Including Test Sources

Az Analyze Module Files ... opciót kihagytuk, mivel a modulok nem fordulnak le. Az Analyze Scope Files opciót kihagytuk, mert ugyanazt az eredményt adja, mint az Analyze Project Files Including Test Sources

PMD elemzés

  1. Kattintson jobb egérgombbal a projekt gyökérkönyvtárára
  2. Run PMD > Pre Defined > All

CheckStyle elemzés

Adott checkstyle-config.xml konfigurációs fájl csatolása.

Amennyiben ez nem működik, akkor Google Checks és Sun Checks használata

Elért eredmények

SpotBugs Elemzési Eredmények

Analyze Project Files Including Test Sources:

Category Total Issues
Malicious Code Vulnerability 316
Dodgy Code 148
Internationalization 20
Performance 19
Bad Practice 36
Correctness 3
Total 542
Priority Level Total Issues
Medium 496
High 46
Total 542
Severity Level Total Issues
Of Concern 398
Troubling 139
Scary 3
Total 542

CheckStyle Elemzési Eredmények

Rules Found items File(s)
Sun Checks 12,314 533
Google Checks 24,542 538

PMD Elemzési Eredmények

Violation Category Total Violations Notes
bestpractices 2,219 1 suppressed violation
codestyle 5,762
design 3,183
documentation 4,095
errorprone 408
multithreading 91
performance 148
Total 15,906 Across 695 files, 8 rule sets

Statikus kézi kódelemzés eredményei

Az elemzés során a docker-java-core és a docker-java-api kódokat elemeztük részletesebben, de kitértünk a forráskód más részeire is.

Konkrét szabálysértések

HijackingInterceptor.java

Package: com.github.dockerjava.okhttp

1
2
3
4
if (originalRequest == null) {
    // ?
    return response;
}

BuildImageCmdExec.java

Package: com.github.dockerjava.core.exec

NullPointerException-t dobhat

1
2
3
if (command.hasRemoveEnabled() == null || !command.hasRemoveEnabled()) {
            webTarget = webTarget.queryParam("rm", "false");
        }

CommitCmd.java

Package: com.github.dockerjava.api.command

Interface, amelyben rengeteg használatlan metódus van. Implementálásnál pedig ezek csökkentik majd a kód átláthatóságát és összezavarodást kelthetnek.

CommitCmdImpl.java

Package: com.github.dockerjava.core.command

Több felesleges változó, ami nem kerül felhasználásra.

Javadoc helytelen használata

Elemzés során a projektben több Javadoc hibát azonosítottunk. Az alábbi példa a ContainerDiffCmdImpl.java fájlban található, a helytelen Javadoc használatot illusztrálja:

1
2
3
4
5
6
7
8
/**
 * Inspect changes on a container's filesystem
 *
 * @param containerId
 *            - Id of the container
 *
 */
public class ContainerDiffCmdImpl extends AbstrDockerCmd<ContainerDiffCmd, List<ChangeLog>> implements ContainerDiffCmd {

Példa elemzése

A @param tag nem alkalmazható osztály Javadoc-jában, mivel az annotáció kizárólag metódusok vagy konstruktorok dokumentációjára szolgál.

További hasonló hibák

  • com.github.dockerjava.core.command:
  • ContainerDiffCmdImpl.java
  • PushImageCmdImpl.java
  • RemoveContainerCmdImpl.java
  • RestartContainerCmdImpl.java
  • SearchImagesCmdImpl.java
  • StopContainerCmdImpl.java
  • TagImageCmdImpl.java
  • UnpauseContainerCmdImpl.java
  • LogContainerCmdImpl.java

Felhasználatlan osztályok

  • com.github.dockerjava.core.command:
  • InspectSwarmNodeCmdImpl.java
  • com.github.dockerjava.core:
  • KeystoreSSLConfig.java
  • GoLangMatchFileFilter.java

Kérdőív és eredményei

Elkészítettük a projektünkhöz kapcsolódó kérdőívet: [...]

Eredményei

A kérdőívet 15 programozással foglalkozó személy töltötte ki.

Grafinok az eredményről!

Összegzés, javítási javaslatok

A tesztelés során az alábbi kulcspontokat azonosítottuk:

  • Statikus tesztelés fő eredményei:
  • Jelentős számú kódhibát és sebezhetőséget azonosítottunk a SpotBugs, CheckStyle és PMD eszközökkel. Ezek a problémák jelentős kockázatot jelentenek a kód fenntarthatóságára, teljesítményére és biztonságára nézve.
  • Használhatósági tesztelés eredményei:
  • Az elkészített kérdőív rálátást ad különböző felhasználók véleményére a docker-java használhatóságával és működésével kapcsolatban.
  • Manuális kézi kódelemzés eredményei:
  • Több helyen nem megfelelő Javadoc használat. Számos metódus, osztály és mező funkciója nem egyértelmű vagy nincs használva, ami hosszú távon csökkentheti a kód karbantarthatóságát.

Tényleges ráfordítások mértéke

Köztes riportra

  • 2.1. Feature set felkutatása: 2 óra
  • 2.2. Toolok felkutatása és beüzemelése: 4 óra
  • 2.3. Szcenáriók megalkotása: 2 óra
  • 2.4. Kérdőív megírása: 3 óra
  • 2.5. Statikus elemző tool futtatása: 10 óra
  • 2.6. Szabálysértések listájának szerializált formára alaítása: 4 óra
  • 2.7. Szabálysértések kategorizálása: 3 óra
  • 2.8. Általános szabálysértések riportjának készítése: 3 óra
  • 2.9. Köztes riport készítése: 6 óra
  • Meetingek: 8 óra
  • Meeting memo-k megírása: 2 óra
  • Feladatok Issue-ra bontása/becslése: 2 óra
  • docker-java setup-olása: 4 óra

Végső riportra

  • 3.1. Kérdőívek kitöltése: 4 óra
  • 3.2. Statikus kézi kódelemzés: 12 óra
  • 3.3. Kérdőívek kiértékelése: 3 óra
  • 3.4. Szabálysértések mély elemzése: 8 óra
  • 3.5. Kiemelt és elemzett szabálysértések riportjának készítése: 7 óra
  • 3.6. Használhatósági tesztriport készítése: 8 óra
  • 3.7. Statikus tesztriport készítése: 8 óra
  • 3.8. Használhatósági tesztriport ellenőrzése: 2 óra
  • 3.9. Statikus tesztriport ellenőrzése: 3 óra
  • 3.10. Végső riport készítése: 10 óra
  • Meetingek: 10 óra
  • Meeting memo-k megírása: 3 óra
  • Feladatok Issue-ra bontása/becslése: 2 óra

Jóváhagyó

Dátum: 2025.12.04.
Jóváhagyó:


Utolsó frissítés: 2025-11-07 09:15:53