Figyelem: A gyakorlatok során törekedjen mindenki
arra, hogy professzionális jellegű munkát végezzen, pl. kerüljük az
asdfg commit megjegyzéseket, nem sokkal több idő azt írni
helyette, hogy Add acceleration feature vagy Fix #5
(további tanácsok: How to Write a Git
Commit Message, Git Style Guide).
Környezet
- A gyakorlat során az előző alkalommal elkészített GitHub tárhelyből
induljon ki. Ha a helyi gépén nincs meg, akkor klónozza le (lásd a
GYAK4-et).
- A gyakorlat második felében valakivel együtt kell dolgozni (ehhez
vagy egy ismerőssel kell dolgozni vagy a tárgy Teams csoportjának 5.
gyakorlat csatornáján lehet párt keresni).
Statikus analízis
Az első részfeladat célja, hogy az előadáson megismert Sonar eszközcsalád segítségével
statikus analízist végezzen a saját Git tárolójában lévő projekten.
- A SonarLint egy IDE
kiegészítés, ami a kód írása közben futtatja a háttérben a Sonar
statikus analízis eszközeit és ad azonnal figyelmeztetéseket.
- A SonarCloud egy komplett
kódminőséget menedzselő platform, amely több mint 20 nyelvet támogat
(például Java, C, C++, C#). Képes ellenőrizni kódolási konvenciókat,
duplikált kódot, teszt fedettséget, kód komplexitást, potenciális
hibákat és sebezhetőségeket. Az analízisek eredményét a felhőben
tárolja, amely lehetővé teszi jelentések generálását és a változások
követését. Publikus GitHub tárhelyekre ingyenes.
- A SonarQube egy
helyileg telepíthető ("on-premise") változat a kódminőség platformból,
ezen a gyakorlaton nem használjuk.
A részfeladat menete a következő:
- Először megismerkedünk a SonarLint eszközzel, és megnézzük, hogy
milyen jellegű hibákat tud egy statikus analízis eszköz megtalálni.
- Utána beállítjuk, hogy a GitHub tárhelyet tudja vizsgálni a
SonarCloud.
- Végül módosítjuk az előző laboron létrehozott GitHub Actions CI
beállításokat, hogy a fordítás mellett a statikus analízis eszköz
futtatását is végezze el.
SonarLint
A SonarLint egyszerűen telepíthető a gyakran használt IDE-kbe. A
mostani gyakorlaton a Visual
Studio Code fejlesztőkörnyezetben fogjuk használni.
- A Visual Studio Code-ban ellenőrizze a bal oldali sávról elérhető
Extensions fülön megkeresve, hogy telepítve van-e a
SonarLint kiegészítés.
- Ha nincs, telepítse a Code-ban a SonarLint kiegészítést (lásd itt). Indítsa újra a Code
IDE-t.
- Nyissa meg utána a saját
ivt-lab
projekt lokális
változatának könyvtárát.
- Nyissa meg valamelyik Java fájlt, hogy biztos elinduljon a háttérben
a Java kiegészítés és felolvassa és lefordítsa a projektet. Ha minden
működik, akkor a View / Problems ablakot megnyitva
látszanak a fordítás eredményei és a figyelmeztetések.
- Az Output ablakban a jobb oldali legördülő listából
válassza ki a SonarLint elemet, és így követni lehet, hogy melyik fájlon
dolgozik a statikus analízis.
- Nyissa meg a
TorpedoStore.java
fájlt. Három hibát talál
a SonarLint. Vizsgálja meg ezeket, de még ne javítsa ki!
- A hiba felé húzva az egeret egy rövid leírást olvashat az
azonosított problémáról. Ha kijelöli a hibást sort, akkor a sor elején
lévő égőre kattintva az Open description of SonarLint rule ...
opcióra megnyílik az ellenőrzési szabály részletes leírása. Minden egyes
hibához tartozik egy rövid leírás és helyes/helytelen példák.
- Tanulmányozzon minden egyes hibát és a hozzájuk tartozó hibát. Valós
problémákat azonosított a statikus analízis eszköz?
- Végezetül a bal sávban a SonarLint / Rules részét lenyitva
böngészhető az összes aktív szabály. Nézzen meg egy-két szabályt, hogy
mi mindenre tud figyelni a statikus analízis eszköz.
SonarCloud
összekötése a GitHub tárhellyel
A következő lépésként a SonarCloud felhő alapú kódminőség platformba
fogjuk bekötni a saját, nyilvános GitHub tárhelyet.
- Nyissa meg a SonarCloud oldalt,
és Log in / GitHub linkre kattintva lépjen be a GitHub
felhasználójával.
- Nézze meg, hogy a SonarCloud mikhez szeretne hozzáférni, majd
engedélyezze.
- A Welcome to SonarCloud oldalon a jobb felső sarokban a
saját profilképünk melletti
+
ikonnal megjelenő listán
kattintsunk a Create new organization linkre. A megjelenő
listából válasszuk a saját felhasználónkhoz tartozó személyes
szervezetünket (organization), majd telepítsük ide a SonarCloud
integrációt.
- A SonarCloud oldalára visszakerülve fejezzük be a SonarCloud
szervezet létrehozását, és válasszuk a Free plan opciót.
- A kezdőképernyőről ezután válasszuk az Analyze new project
linket, és válasszuk ki a saját
ivt-lab
tárhelyünket.
- Amennyiben a SonarCloud megkérdezi, a Set up project for Clean
as You Code kérdésnél válasszuk az első (Previous version)
lehetőséget
- A következő oldalon a bal oldali menüben a Main Branch
opciót választva egy automatikus analízis eredménye fog megjelenni. Ez a
SonarCloud egy új szolgáltatása, ami csak korlátozott eredményt ad, így
most ezt nem fogjuk használni.
- Kattintsunk ehelyett a Setup CI-based analysis gombra (ha
nem jelenne meg, akkor bal alul az Administration pontra
kattintva megjelenő menüben az Analysis Method linkre kell
kattintani). A felajánlott analízis módszerekből válasszuk ki a
Analyze with a GitHub Action lehetőséget. A megjelenő oldalon
válasszuk ki a Maven opciót, valamint kapcsoljuk ki az
automatikus analízist.
- Az itt leírt módon egészítsük ki a
pom.xml
fájlt a két
darab sonar.*
tulajdonsággal, hozzuk létre a GitHub
felületén a Secrets fülön a SONAR_TOKEN
nevű
titkot, és egészítsük ki a GitHub Actions YAML konfigurációt a
SonarCloud-hoz tartozó lépésekkel (ügyelve a szóközök számára).
- Tipp: a konfigurációk összehasonlításához másoljuk be a javasolt
konfigurációt egy új fájlba (File / New Text File), majd
hasonlítsuk össze a saját YAML fájlunkkal (View / Command Palette /
Compare Active File With...).
- Ellenőrizzük az új GitHub Actions fordítást. Ha sikeresen lefutott,
akkor a SonarCloud felületén hamarosan látjuk is az analízis
eredményét.
- A bal oldali menüben kiválasztva tudjuk megnézni a Main ágat vagy
később a pull request-ek eredményeit. Válasszuk ki a Main
Branch opciót most.
- Ismerkedjünk meg a SonarCloud felületével az analízis megnyitása
után. Az áttekintő képernyőn a legfontosabb információkat jeleníti meg.
A részleteket a felső menüben találjuk:
- Summary: áttekintés a legfontosabb eredményekről és
metrikákról
- Issues: az egyes problémákat részletei a hozzájuk tartozó
forráskódokkal és szabályokkal.
- Measures: az áttekintő lapon ismertetett metrikák
részletei
- Code: a teljes kódbázis böngészhető itt
- Activity: az egyes futtatások eredményei és a trendek
láthatók itt
- Bővebben az egyes oldalak leírását lásd a dokumentációban.
- Ha minden sikeres volt eddig, akkor nézzük meg a SonarCloud oldalán,
hogy Activity fülön látjuk-e az új futtatást is.
Ezekkel a beállításokkal most már minden egyes új commit-kor le fog
futni a Sonar ellenőrzés is a CI kiszolgálón.
Kód felülvizsgálat (Code
review)
A második részfeladat célja, hogy a SonarLint által megtalált hibák
közül néhányat kijavítson, majd párokat alkotva egymás javításait
felülvizsgálják a GitHub
Pull Request Review szolgáltatásával. A PR Review szolgáltatás
célja, hogy olyan funkciókat nyújtson, amelyek a kézi átvizsgálás
folyamatát támogatják és hatékonyabbá teszik (pl. megjegyzések fűzése
kódsorokhoz).
Hibák javítása
- [local] Váltson egy új ágra
(
git checkout -b <új ág neve>
).
- [local] Javítsa ki a TorpedoStore.java
fájlban a SonarLint által jelzett 3 darab hibát. Mindegyiket egy-egy
külön commit-ban javítsa. Ügyeljen rá, hogy az újonnan
létrehozott ágon dolgozzon.
- [local] Küldje át az új tartalmat a GitHub-on lévő
tárhelyre (push).
- Az új ágnak még nincs megfelelője a GitHub tárhelyen, ezért
a
git push --set-upstream origin <új ág neve>
parancs
kiadása szükséges a feltöltéshez.
Átvizsgálás
- [web] Az átvizsgáláshoz alkossanak párokat. Adja
hozzá a saját GitHub tárhelyéhez a társát. Ezt a webes felületen a
Settings / Collaborators lapon teheti meg.
- [web] Amennyiben a társa is hasonlóan elvégezte az
előző lépést, kapott egy e-mail-t. A View invitation linkre
kattintva fogadja el a meghívást.
- [web] Hozzon létre egy pull request-et
(PR) a saját tárhelyén az alábbi lépések alapján.
- [web] A webes felületen a Pull requests
fülön a New pull request gombbal kezdje a létrehozást.
- [web] A base branch maradjon az
alapértelmezett master, a compare branch-nek pedig
válassza ki az újonnan létrehozott ágat. Ennek hatására egy
Able to merge. feliratnak kell megjelennie és látnia kell az
előbb létrehozott commit-okat. A Create pull request
gombbal folytassa a létrehozás folyamatát.
- [web] A megjelenő új felületen lehet megadni a
pull request adatait, beállításait. Nevezze el a pull
request-et és írjon hozzá rövid megjegyzést. Jobb oldalt állítsa be
önmagát felelősnek (Assignees) és kérjen átvizsgálást a
társától (Reviewers).
- [web] Véglegesítse a pull request-et a
Create pull request gombbal. A társa értesítést fog kapni az
átvizsgálás kéréséről.
- A PR Checks lapján követhető, hogy a háttérben a CI
folyamat is elindult. Ha lefut sikeresen, akkor az ellenőrzések
eredményei is megtekinthetők a pull request Conversation
oldalán is.
- [web] Amennyiben a társa is hasonlóan elvégezte az
előző lépéseket, kapott egy értesítést az átvizsgálás kéréséről. Keresse
fel a webes felületen a társa GitHub tárhelyét, azon belül pedig a társa
által létrehozott pull request-et.
- [web] Végezze el az átvizsgálást az alábbi lépések
alapján.
- [web] Váltson át a Files changed fülre.
Itt látja a megváltozott fájlokat. Vizsgálja át a változásokat és fűzzön
megjegyzéseket a sorokra kattintva. Fontos, hogy a kommentet ne az
Add single comment, hanem a Start a review gombbal
adja hozzá.
- [web] Az átvizsgálás végén jobb felül kattintson a
Review changes gombra. A lenyíló felületen írjon egy rövid
összefoglaló kommentet és kérjen változtatásokat a Request
changes opció kiválasztásával.
- [web] Küldje be az átvizsgálás eredményét a
Submit review gombbal.
- [local] Várja meg amíg a társa is elvégzi az
átvizsgálást, majd a társától kapott kommentek alapján végezze el a
szükséges módosításokat a saját kódján. A változások továbbra is az
új ágon kerüljenek egy vagy több commit-ba. Küldje át
a változásokat a GitHub-on lévő tárhelyre (push).
- [web] Várja meg amíg a társa is elvégzi saját
tárhelyén a javítást, majd keresse meg a társa által létrehozott
pull request-et. A Files changed fülön látja a
változásokat. Fogadja el a javításokat a Review changes gomb
alatt lenyíló felületen az Approve lehetőség
választásával.
Javítások ellenőrzése
- [web] Ellenőrizze a SonarCloud felületen, hogy
valóban sikerült-e megoldani a választott problémákat.
- [web] Látni lehet, hogy a SonarCloud felületén még
maradt egy megoldatlan Security típusú hiba, ami a
Random
osztály használatával kapcsolatos. Olvassa
el és értelmezze a hiba leírását és a kockázatbesorolást.
- [web] Mivel jelen esetben nincs biztonsági
aspektusa a szoftvernek, jelezzük a SonarCloud oldalán, hogy ez nem
probléma (Safe). Ezt követően futassuk újra az ellenőrzést a
GitHub oldaláról.
- [web] Amennyiben a társa is elfogadta a javításokat
és a CI build is sikeresen lefutott, és az összes ellenőrzés sikeres
(zöld), merge-elje a saját tárhelyéhez tartozó pull
request-et (Conversation fülön alul).