-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from BME-MIT-IET/final
Commit from E1LX0J/kozlegeny repository
- Loading branch information
Showing
439 changed files
with
6,248 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
.gradle | ||
build/ | ||
!gradle/wrapper/gradle-wrapper.jar | ||
!**/src/main/**/build/ | ||
!**/src/test/**/build/ | ||
|
||
### IntelliJ IDEA ### | ||
.idea/modules.xml | ||
.idea/jarRepositories.xml | ||
.idea/compiler.xml | ||
.idea/libraries/ | ||
*.iws | ||
*.iml | ||
*.ipr | ||
out/ | ||
!**/src/main/**/out/ | ||
!**/src/test/**/out/ | ||
|
||
### Eclipse ### | ||
.apt_generated | ||
.classpath | ||
.factorypath | ||
.project | ||
.settings | ||
.springBeans | ||
.sts4-cache | ||
bin/ | ||
!**/src/main/**/bin/ | ||
!**/src/test/**/bin/ | ||
|
||
### NetBeans ### | ||
/nbproject/private/ | ||
/nbbuild/ | ||
/dist/ | ||
/nbdist/ | ||
/.nb-gradle/ | ||
|
||
### VS Code ### | ||
.vscode/ | ||
|
||
### Mac OS ### | ||
.DS_Store |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
plugins { | ||
id 'java' | ||
id 'application' | ||
id 'org.javamodularity.moduleplugin' version '1.8.12' | ||
id 'org.openjfx.javafxplugin' version '0.0.13' | ||
id 'org.beryx.jlink' version '2.25.0' | ||
} | ||
|
||
version '1.0-SNAPSHOT' | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
ext { | ||
junitVersion = '5.9.1' | ||
} | ||
|
||
sourceCompatibility = '17' | ||
targetCompatibility = '17' | ||
|
||
tasks.withType(JavaCompile) { | ||
options.encoding = 'UTF-8' | ||
} | ||
|
||
application { | ||
mainModule = 'com.example.pipeline' | ||
mainClass = 'menu.Main_Menu' | ||
} | ||
|
||
javafx { | ||
version = '17.0.2' | ||
modules = ['javafx.controls', 'javafx.fxml', 'javafx.web', 'javafx.media'] | ||
} | ||
|
||
dependencies { | ||
//testImplementation('junit:junit:4.13') | ||
testImplementation 'io.cucumber:cucumber-java:7.17.0' | ||
testImplementation 'io.cucumber:cucumber-junit:7.17.0' | ||
implementation('org.controlsfx:controlsfx:11.1.2') | ||
implementation('com.dlsc.formsfx:formsfx-core:11.5.0') { | ||
exclude(group: 'org.openjfx') | ||
} | ||
implementation('net.synedra:validatorfx:0.4.0') { | ||
exclude(group: 'org.openjfx') | ||
} | ||
implementation('org.kordamp.ikonli:ikonli-javafx:12.3.1') | ||
implementation('org.kordamp.bootstrapfx:bootstrapfx-core:0.4.0') | ||
/*implementation('eu.hansolo:tilesfx:17.1.15') { | ||
exclude(group: 'org.openjfx') | ||
}*/ | ||
implementation('com.github.almasb:fxgl:17.2') { | ||
exclude(group: 'org.openjfx') | ||
} | ||
|
||
testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}") | ||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}") | ||
} | ||
|
||
|
||
jlink { | ||
imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip") | ||
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages'] | ||
launcher { | ||
name = 'app' | ||
} | ||
} | ||
|
||
jlinkZip { | ||
group = 'distribution' | ||
} | ||
|
||
configurations { | ||
cucumberRuntime { | ||
extendsFrom testImplementation | ||
} | ||
} | ||
|
||
project.ext { | ||
cucumberVersion = '5.6.0' | ||
} | ||
|
||
dependencies { | ||
testImplementation 'io.cucumber:cucumber-java:' + cucumberVersion | ||
} | ||
|
||
task cucumberTest() { | ||
dependsOn assemble, compileTestJava | ||
doLast { | ||
javaexec { | ||
main = "io.cucumber.core.cli.Main" | ||
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output | ||
args = ['--plugin', 'html:reports/test-report', '--plugin', 'pretty', '--glue', 'com.example.pipeline', 'src/test/resources'] | ||
} | ||
} | ||
} | ||
|
||
task junitTest(type: Test) { | ||
useJUnitPlatform() | ||
testLogging { | ||
events "passed", "skipped", "failed" | ||
exceptionFormat "full" | ||
showStandardStreams = true | ||
} | ||
} | ||
|
||
tasks.withType(Test) { | ||
maxParallelForks = Runtime.runtime.availableProcessors() | ||
} | ||
|
||
test.dependsOn 'cucumberTest', 'junitTest' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
### DOKUMENTÁCIÓ - *Madagaszkár Pingvinjei* | ||
|
||
# | ||
|
||
# | ||
|
||
# Cucumber beüzemelése | ||
## Célkitűzés | ||
*BDD tesztek készítése Cucumber-rel, egyszerűbb use-case-ek megfogalmazása.* | ||
|
||
## Leírás | ||
#### Cucumber | ||
A Cucumber egy tesztautomatizálási eszköz, amely támogatja a Behavior Driven Development (BDD) módszertant. Lehetővé teszi a tesztelők és fejlesztők számára, hogy egy természetes nyelvű formátumban írják meg a teszteket, amelyeket a Cucumber képes végrehajtani. | ||
|
||
## Munkafolyamat | ||
A Cucumber használatával különböző teszteseteket definiáltunk, amelyek a projekt különböző funkcióit fedik le. A Cucumber tesztfájlok négy fő csoportba sorolhatók: StepDefinitions, Mechanic Actions, Player Actions és Saboteur Actions. | ||
|
||
### StepDefinitions.java | ||
#### Tesztek leírása | ||
- **Példányok létrehozása:** A különböző típusú játékosok (játékos, szerelő, szabotőr) és konténerek (cső, szivattyú, ciszterna) példányosítása. | ||
- **Inicializálás és bool check:** A szivattyú és a cső szomszédságának beállítása, a játékos pozíciójának meghatározása (cső, szivattyú, ciszterna), valamint a cső állapotának ellenőrzése (sérült, ragadós, csúszós). | ||
- **Action végrehajtása:** A játékos különböző műveleteket hajt végre, mint például a szivattyú javítása, a cső javítása, a szivattyú mozgatása, a cső ragadóssá tétele, vagy a szivattyú átvétele a ciszternából. | ||
|
||
### mechanic_actions.feature | ||
#### Funkciók és tesztesetek | ||
- **Mechanic repairs a pump:** A szerelő megjavít egy sérült szivattyút. | ||
- **Mechanic repairs a pipe:** A szerelő megjavít egy sérült csövet. | ||
|
||
### player_actions.feature | ||
#### Funkciók és tesztesetek | ||
- **Player moves to a pump from a pipe:** A játékos egy csőből mozog egy szivattyúba. | ||
- **Player moves to a pipe from a pump:** A játékos egy szivattyúból mozog egy csőbe. | ||
- **Player moves to a slippery pipe from a pump:** A játékos egy csúszós csőbe mozog egy szivattyúból, de nem marad ott. | ||
- **Player moves to a sticky pipe from a pump:** A játékos egy ragadós csőbe mozog egy szivattyúból, és ragadós lesz. | ||
- **Player tries to move to a pump from a pipe while being sticky:** A játékos ragadós állapotban próbál meg mozogni egy csőből egy szivattyúba, de nem sikerül. | ||
- **Player makes a pipe sticky:** A játékos ragadóssá teszi a csövet. | ||
- **Player takes a pump from the cistern:** A játékos átveszi a szivattyút a ciszternából. | ||
|
||
### saboteur_actions.feature | ||
#### Funkciók és tesztesetek | ||
- **Saboteur makes a pipe slippery:** A szabotőr csúszóssá teszi a csövet. | ||
|
||
## Cucumber tesztek futásának eredménye | ||
|
||
# | ||
|
||
### Mechanic Actions tesztek eredménye | ||
<img src = "res/cu_mec.png" width = "500"> | ||
|
||
# | ||
|
||
### Player Actions tesztek eredménye | ||
<img src = "res/cu_pla.png" width = "600"> | ||
|
||
# | ||
|
||
### Saboteur Actions tesztek eredménye | ||
<img src = "res/cu_sab.png" width = "500"> | ||
|
||
# | ||
|
||
### Teljes teszt eredménye | ||
<img src = "res/cu_all.png" width = "200"> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
### DOKUMENTÁCIÓ - *Madagaszkár Pingvinjei* | ||
|
||
# | ||
|
||
# | ||
|
||
### *Technológia 1* | ||
# Build keretrendszer és CI beüzemelése | ||
## Célkitűzés: | ||
*GitHub Actions és Gradle beüzemelése.* | ||
|
||
## Leírás | ||
#### Gradle | ||
A Gradle-lel a szoftverfejlesztést bizonyos szinten automatizálni tudjuk, ezzel gyorsítva és biztosabbá téve kódunkat. | ||
|
||
#### GitHub Actions | ||
GitHub Actions használatával tudtuk automatizálni folyamatos integrációt, a munkafolyamatok létrehozását közvetlenül a repository-n belül annak minőségének növelésére. | ||
|
||
## Munkafolyamat | ||
Első mérföldként a Gradle beüzemelése mellett döntöttünk, amit sikerült gyorsan implementálnunk. | ||
|
||
A 'build.gradle' file-ban definiáltuk a függőségek, plug-in-ek és konfigurációk listáját, amikkel a projekt működését, sajátosságait írjuk körül. | ||
|
||
A 'gradlew' file szintén külön kiemelést érdemel. Ez a Gradle Wrapper végrehajtható file-ja, amivel tudjuk futtatni a Gradle-t anélkül hogy telepíteni kéne akármiénk gépére, ezzel gyorsítva a feladatok megoldását. | ||
|
||
A Gradle tesztelés egyik kimenetét megtekinthetjük az alábbi ábrán. | ||
|
||
![gradle teszt példa](res/gr_1.png) | ||
|
||
A Gradle megfelelő használatához *@E1LX0J* készített egy útmutatót, amivel el lehetett indítani az alkalmazást a Gradle segítségével. | ||
Ennek legfontosabb részlete volt a megfelelő JDK verzió (*17*) beállítása a környezeti változókon belül, így már a rendszer felismerte a JDK-t és automatikusan használhatta az alkalamzás futtatására. | ||
|
||
Ennek a folyamatnak a képekkel ellátott dokumentációját megtalálható a repository-n belül. | ||
|
||
A csapat tagjainak review-jai után implementálva is lett a Gradle a projektünkbe, így már akármiénk clone-ozhatott a fő branch-ből és a számára kiosztott tesztelési és integrációs feladatokat könnyedén megoldhatta a Gradle segítségével összetett konfigurációk és telepítés nélkül. | ||
|
||
A második lépés a CI (*CI = Continuous Integration*) beüzemelése volt. Itt egyszerűen csak hozzáadtuk a GitHub Actions-höz a "*Java CI with Gradle*"-t, amivel egyszerűen automatizálhattuk a kód tesztelését, építését és telepítését is. | ||
|
||
Itt talán a legfontosabb említésre méltó file a '*Workflow*' file, ami magát a CI-t kezeli. Itt definiáltuk az integráció végrehajtandó feladatait, eseményeit. | ||
|
||
Ez a file a következő fejezetekben is kitüntetett fontossággal szerepel, mivel a további CI/CD szint emelés érdekében használt szoftvereknek a működését is itt definiálhatjuk. | ||
|
||
Ezekkel a lépésekkel felhúztunk az alkalmazás tesztelésére, kezelésére egy közös vázt, amit bárki bármikor egyszerűen elérhet. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
### DOKUMENTÁCIÓ - *Madagaszkár Pingvinjei* | ||
|
||
# | ||
|
||
# | ||
|
||
### *Technológia 2* | ||
# SonarQube beüzemelése | ||
## Célkitűzés | ||
*Statikus hibaanalízis érdekében SonarQube beüzemelése, futtatása.* | ||
|
||
## Leírás | ||
#### SonarQube | ||
A SonarQube fő célja a letisztult, optimális "Clean Code", amit a kódunk automatikus felülvizsgálatával ér el, és amivel támogatni tudja a CI/CD megvalósítását. Ezt különböző tesztelésekkel éri el. Az általa ajánlott változtatások akár a projekt architektúrájára is hatással lehetnek. | ||
|
||
## Munkafolyamat | ||
Ez a szoftver volt csapatunk számára ez egyik leghasznosabb technológia, amit a repository "Issue" logjának megtekintésével egyértelműen észre lehet venni. | ||
|
||
Rengeteg hibát és javaslatot jelzett nekünk a projektben, amik egyszerű átírásoktól akár az osztályok struktúrájának polimorfizmussal történő átépítését is magukkal vonhatták. | ||
|
||
Az első lépés a szoftver hozzáadása volt a repository-hoz. Ezt a letöltése után egy új Git-es "*secret*" létrehozásával tudtuk hozzáadni a repository-hoz, majd pedig a létrejött konfigurációs file-ban a kulcs beállításával véglegesíteni. | ||
|
||
Ezek után korábban említett Workflow file-unkban tudtuk a SonarQube működését definiálni. | ||
|
||
Alább megtekinthető a SonarQube implementációs Workflow file-ra egy példa. | ||
|
||
![workflow példa sq-val](res/sq_2.png) | ||
|
||
A SonarQube összesen 8 különböző osztályban talált eltérő súlyosságú hibát, amik javításával sokkal értelmesebb, átláthatóbb és kezelhetőbb lett az alkalmazás osztály-, és függvénykészlete, illetve maga a szoftverarchitektúra is. | ||
|
||
Ezekből a javításokból szemléltetésképp itt felsorolunk hármat: | ||
|
||
*1: Kasztolás elkerülése megfelelő függvények meghívásával* | ||
|
||
![példa 1](res/sq_ex_1.png) | ||
|
||
*2: Láthatóság korlátozása a biztonság érdekében* | ||
|
||
![példa 2](res/sq_ex_2.png) | ||
|
||
*3: Kódoptimalizálás megfelelő lista struktúra használatával* | ||
|
||
![példa 3.a](res/sq_ex_3a.png) | ||
|
||
![példa 3.b](res/sq_ex_3b.png) | ||
|
||
A SonarQube-os integráció végső kimenetét megtekinthetjük az alábbi képen. | ||
|
||
![sq teszt kimenet](res/sq_1.png) |
Oops, something went wrong.