Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…n-squad into 2-manuális-kód-átvizsgálás-statikus-analízis
  • Loading branch information
kalocsaadi committed May 17, 2024
2 parents d433b82 + 13f261d commit e2d0186
Show file tree
Hide file tree
Showing 115 changed files with 2,129 additions and 2 deletions.
33 changes: 33 additions & 0 deletions .github/workflows/maven.yml
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
16 changes: 15 additions & 1 deletion .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

42 changes: 42 additions & 0 deletions docs/Maven_CI.md
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.
Binary file added docs/images/maven_structure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/maven_tests.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/maven_workflow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions out/production/Graphics/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions out/production/Graphics/.idea/Graphics.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions out/production/Graphics/.idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions out/production/Graphics/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

File renamed without changes.
6 changes: 6 additions & 0 deletions out/production/Graphics/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions out/production/Graphics/Prototype.iml
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>
1 change: 1 addition & 0 deletions out/production/Graphics/README.md
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)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes.
42 changes: 42 additions & 0 deletions pom.xml
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>
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion Main.java → src/main/java/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void actionPerformed(ActionEvent e) {
}

private static void setupGame() throws FileNotFoundException {
File loadFile = new File("map.txt");
File loadFile = new File("src/main/resources/map.txt");
Scanner fr = new Scanner(loadFile);
String line;
while(fr.hasNextLine())
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
45 changes: 45 additions & 0 deletions src/main/resources/map.txt
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
Loading

0 comments on commit e2d0186

Please sign in to comment.