-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
…n-squad into 2-manuális-kód-átvizsgálás-statikus-analízis
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time | ||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven | ||
|
||
# This workflow uses actions that are not certified by GitHub. | ||
# They are provided by a third-party and are governed by | ||
# separate terms of service, privacy policy, and support | ||
# documentation. | ||
|
||
name: Java CI with Maven | ||
|
||
on: | ||
push: | ||
branches: | ||
- '*' | ||
pull_request: | ||
branches: | ||
- '*' | ||
|
||
jobs: | ||
build: | ||
|
||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Set up JDK 20 | ||
uses: actions/setup-java@v3 | ||
with: | ||
java-version: '20' | ||
distribution: 'temurin' | ||
cache: maven | ||
- name: Build with Maven | ||
run: mvn -B package --file pom.xml |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# Maven build keretrendszer, CI (GitHub Actions) beüzemelése | ||
|
||
## A feladat részei | ||
A megvalósítandó feladat az alábbi részekre lett felbontva: | ||
- Maven keretrendszer hozzáadása a projekthez | ||
- Teszteléshez szükséges osztály hozzáadása a projekthez, osztály modernizálása | ||
- Tesztesetek létrehozása | ||
- Github workflow létrehozása, tesztelése | ||
|
||
## Maven keretrendszer hozzáadása a projekthez | ||
A keretrendszer hozzáadása egy meglehetősen zökkenőmentes folyamat volt. A projekt forrásfájljai átrendezésre kerültek, a gyökérbe ömlesztett java fájlok áthelyezésre kerültek a (src/) main/java, illetve test/java mappákba. A pályát és a tesztpályát generáló szöveges fájlok a (src/) main/resources és test/resources mappákba lettek elkülönítve a forrásfájloktól. A Main osztály pálya elérése frissítve az új struktúrának megfelelően. | ||
|
||
![Fájlstruktúra a maven keretrendszer alapján](images/maven_structure.png) | ||
|
||
## Teszteléshez szükséges osztály hozzáadása a projekthez, osztály modernizálása | ||
Ezen feladatrész megvalósítása az elképzelésekkel ellentétben meglehetősen komplikált volt. A projekt egy korábbi verziója rendelkezett egy tesztelést elősegítő, utasítást interpretáló osztállyal, amelynek segítségével lehetőség volt szöveges parancsokkal teszteket végrehajtani, amelynek eredménye a standard kimeneten jelent meg. Annak érdekében, hogy a projekt minden részét könnyedén lehessen tesztelni, ismét implementáltam a **CmdInterpreter** osztályt. Ez az osztály sajnos számos hibával rendelkezett az elavultsága miatt. Ennek következtében számos parancson belül konstruktorokat kellett újraparaméterezni, függvényeket kiegészíteni, hibákat javítani. Ezen felül az osztály a **Main** osztály statikus tagváltozóira referált, mivel az interpreter még a projekt egy olyan verziójában lett kialakítva, ahol még nem létezett grafikus felület, a **Main** osztály volt a tesztosztály. Ezen probléma feloldása érdekében a statikus tagváltozók a **CmdInterpreter** osztály privát tagváltozói lettek. | ||
|
||
## Tesztesetek létrehozása | ||
A tesztelés a **JUnit** keretrendszer segítségével lett megvalósítva. A szükséges függőségek beimportálása után létrehoztam a **Tests** osztályt, amelyben az egységtesztek kerültek elhelyezésre. A tesztek logikai alapját a projekt korábbi verziója adta, ahol felhasználó vezérelt, manuális "tesztelésre" volt lehetőség (a program a futás eredményét szövegesen a standard kimenetre írta ki). Ezen tesztlehetőség alapján alakítottam ki az aktuális projekt automatizált tesztjeit, amelyek **Assertions** segítségével ellenőrzik a futás eredményét. | ||
|
||
> A teszesetek létrehozása és kiértékelése során kiderült, hogy a | ||
> projekt tesztpályája hibásan lett kialakítva, rosszul voltak az összeköttetések megadva. | ||
Ezen hibák javítása után a tesztesetek ellenőrzése a **SureFire** plugin segítségével is megvalósult. | ||
|
||
![Tesztek futtatása a SureFire plugin segítségével](images/maven_tests.png) | ||
|
||
## Github workflow létrehozása, tesztelése | ||
A Github CI a **Java CI with Maven** sablon alapján lett kialakítva. A sablon módosításva lett két helyen: | ||
|
||
- A main ág helyett minden ág eseményei során le fog futni az automatizált ellenőrzés | ||
- Az opcionális függőségi gráf frissítő szolgáltatás törlésre került | ||
|
||
A munkafolyamat legnagyobb problémáját a fentiekben említett main osztályra történő referálás miatti hibaüzenetek okozták. | ||
|
||
![Workflow futások](images/maven_workflow.png) | ||
|
||
## Eredmény | ||
A feladatnak köszönhetően a projekt a **Maven keretrendszert** implementálja, ezzel lehetővé téve a projekt hatékony tesztelését. A **Github Workflow** megvalósításával megkönnyítettem a többi feladat megvalósítását (és a jövőbeli fejlesztések implementálását), a módosítások végrehajtása után nem kell mindenkinek manuálisan tesztelnie, a tesztesetek automatikusan kiértékelődnek **push** és **pull request** események során. | ||
|
||
## Tanulság | ||
A feladat megvalósítása során egyértelművé vált, hogy a projekt elején érdemes lett volna a **Maven** keretrendszert bevezetni, ezzel megkönnyítve a későbbi munkákat. A projekt fejlesztése során mindig naprakészen kellett volna tartani a **CmdInterpreter** osztályt és a teszteket, hogy elkerüljük az elavulásból eredő jövőbeli problémákat. |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<module type="JAVA_MODULE" version="4"> | ||
<component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
<exclude-output /> | ||
<content url="file://$MODULE_DIR$"> | ||
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" /> | ||
</content> | ||
<orderEntry type="inheritedJdk" /> | ||
<orderEntry type="sourceFolder" forTests="false" /> | ||
</component> | ||
</module> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-24ddc0f5d75046c5622901739e7c5dd533143b0c8e959d652212380cedb1ea36.svg)](https://classroom.github.com/a/XwNCTfYP) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<groupId>goon_squad</groupId> | ||
<artifactId>hf</artifactId> | ||
<version>1.0-SNAPSHOT</version> | ||
|
||
<properties> | ||
<maven.compiler.source>20</maven.compiler.source> | ||
<maven.compiler.target>20</maven.compiler.target> | ||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
</properties> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.junit.jupiter</groupId> | ||
<artifactId>junit-jupiter-api</artifactId> | ||
<version>5.7.0</version> | ||
<scope>test</scope> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.junit.jupiter</groupId> | ||
<artifactId>junit-jupiter-engine</artifactId> | ||
<version>5.7.0</version> | ||
<scope>test</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.apache.maven.plugins</groupId> | ||
<artifactId>maven-surefire-plugin</artifactId> | ||
<version>3.0.0-M7</version> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
CreateComponent:sp1,Spring,10,40 | ||
CreateComponent:sp2,Spring,114,200 | ||
CreateComponent:sp3,Spring,45,400 | ||
CreateComponent:pu1,Pump,330,70 | ||
CreateComponent:pu2,Pump,560,270 | ||
CreateComponent:pu3,Pump,320,560 | ||
CreateComponent:pu4,Pump,630,420 | ||
CreateComponent:pi1,Pipe,150,40 | ||
CreateComponent:pi2,Pipe,240,170 | ||
CreateComponent:pi3,Pipe,600,60 | ||
CreateComponent:pi4,Pipe,450,180 | ||
CreateComponent:pi5,Pipe,210,400 | ||
CreateComponent:pi6,Pipe,790,230 | ||
CreateComponent:pi7,Pipe,310,450 | ||
CreateComponent:pi8,Pipe,490,530 | ||
CreateComponent:pi9,Pipe,780,470 | ||
CreateComponent:ci1,Cistern,860,100 | ||
CreateComponent:ci2,Cistern,900,250 | ||
CreateComponent:ci3,Cistern,910,475 | ||
CreatePlayer:me1,Mechanic,sp2 | ||
CreatePlayer:sa1,Saboteur,ci1 | ||
CreatePlayer:me2,Mechanic,sp3 | ||
CreatePlayer:sa2,Saboteur,ci3 | ||
ConnectComponents:sp1,2,pi1,2 | ||
ConnectComponents:pi1,1,pu1,1 | ||
ConnectComponents:pu1,2,pi3,2 | ||
ConnectComponents:pu1,3,pi4,2 | ||
ConnectComponents:pu1,4,pi2,1 | ||
ConnectComponents:pi3,1,ci1,4 | ||
ConnectComponents:pi2,2,sp2,2 | ||
ConnectComponents:pi4,1,pu2,1 | ||
ConnectComponents:pu2,2,pi6,2 | ||
ConnectComponents:pi6,1,ci2,4 | ||
ConnectComponents:pu2,3,pi7,1 | ||
ConnectComponents:pu2,4,pi5,1 | ||
ConnectComponents:pi5,2,sp3,2 | ||
ConnectComponents:pi7,2,pu3,4 | ||
ConnectComponents:pu3,2,pi8,2 | ||
ConnectComponents:pi8,1,pu4,4 | ||
ConnectComponents:pu4,2,pi9,2 | ||
ConnectComponents:pi9,1,ci3,4 | ||
SetPump:pu1,4,2 | ||
SetPump:pu3,4,2 | ||
SetPump:pu2,3,2 | ||
SetPump:pu4,4,2 |