Kihagyás

Konzultációs és gyakorló óra

Szerkesztés alatt!

Az oldal további része szerkesztés alatt áll, a tartalma minden további értesítés nélkül többször, gyakran, jelentősen megváltozhat!

Ezen az órán nincs új anyag. Az óra az esetleges hallgatói kérdések megválaszolására való.

Akinek nincs kérdése, úgy érzi, hogy minden eddig, a gyakorlaton elhangzott dolog a kisujjában van, az gyakorlás (és magabiztosság-ellenőrzés) céljából megoldhatja a következő feladatsort.

0. gyakorló feladat: Tavaszi nagytakarítás

Ha a Hallgatói Demonstrációs GitLab Szerveren a gyakorlati csoporthoz tartozó közös folyamatok nevű projektben van hozzád rendelt vagy általad létrehozott nyitott issue, azt zárd le!

Jótanács

Először olvasd el, majd gondold végig a feladatsor további részének feladatait! Az egyes feladatok, tevékenységek szándékosan vannak olyan sorrendben leírva, megfogalmazva, ahogy. Ha ügyes vagy, akkor a feladatok, egyes tevékenységeik más sorrendben elvégzésével sokkal egyszerűbbé teheted a saját munkádat! Ez persze nem azt jelenti, hogy a feladatok tetszőleges sorrendben elvégezése is értelmes! Annak például semmi értelme, hogy merge-eled majd törlöd a branch-ed, és utána lefejleszted azt a feature-t, amiért létrehoztad.

1. gyakorló feladat: Projekt előkészítése

A Hallgatói Demonstrációs GitLab Szerveren a gyakorlati csoporthoz tartozó közös folyamatok nevű projektben vegyél fel egy "Gyakorlás (hxxxxxx)" című issue-t és rendeld is magadhoz és az MS00 - Gyakorlás mérföldkőhöz! Állítsd be határidőnek a mai dátumot!

2. gyakorló feladat: Fejlesztés előkészítése

Klónozd le a Hallgatói Demonstrációs GitLab Szerveren a gyakorlati csoporthoz tartozó közös folyamatok nevű projektet a gépedre! Hozz létre egy branch-et az 1. feladatban létrehozott issue-hoz, ebben kell majd fejlesztened! Ha még nincs, akkor a projekt gyökerében hozz létre egy könyvtárat, melynek neve a saját hxxxxxx azonosítód! Ha már van ilyen könyvtár, akkor első lépésként ebből törölj minden tartalmat! Töltsd le a main.py és geometry.py fájlokat, és tedd őket az előbb létrehozott hxxxxxx könyvtár source nevű almappájába. Készíts egy commit-ot az előbb létrehozott branch-edre a fenti változásokkal.

source/main.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
"""
Szoftverfesztelési folyamatok példaprogram
SZTE TTIK, Informatikai Intézet, Szoftverfejlesztés Tanszék
cc-by-nc-nd
"""

import cowsay
import geometry
import rich

def main():
    l = float(input('A központi sín hossza (méter)? '))
    r = float(input('A kötél hossza (méter)? '))
    h = float(input('A fű magassága (centiméter)? '))
    output = cowsay.get_output_string('cow', f"{geometry.volume(l, r, h):.3f} köbméternyi füvet legeltem!").split('\n')
    words = output[1]
    output[1] = words[:2] + '[green]' + words[2:-2] + '[/green]' + words[-2:]
    rich.print('\n'.join(output))

if __name__ == "__main__":
    main()
source/geometry.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""
Szoftverfesztelési folyamatok példaprogram
SZTE TTIK, Informatikai Intézet, Szoftverfejlesztés Tanszék
cc-by-nc-nd
"""

import math

"""
A függvény feladata kiszámolni egy tehén által lelegelhető fű mennyiségét
köbméterben, ezredre kerekítve. A tehén egy l méter hosszúságú egyenes
sínhez van kikötve egy r méter hosszúságú kötéllel, ennek megfelelő
területen tud legelni. Az egész területen egységesen h centiméter magasra nő
a fű. A tehén csak az 5 cm-nél nagyobb füvet legeli le, de azt úgy, hogy
2 cm-t meghagy belőle. A fű "sűrűsége" 0.1%, azaz 1 köbméter térfogatban
0.001 köbméternyi fű van.
Negatív fűmagasság nincs, ilyenkor a függvény ValueError-t dob.

Ha például l = 10m, r = 5m és h = 20cm, akkor az eredmény 0.032 köbméter.
De ha a fű csak h = 4cm magas, akkor 0.000, mert a tehén nem nyúl hozzá.
"""
def volume(l, r, h):
    if h < 5:
        return 0.0
    return round(area(l, r) * h / 1000.0, 3)

"""
A függvény feladata kiszámolni egy tehén által lelegelhető területet
nagyságát négyzetméterben, ezredre kerekítve. A tehén úgy van kikötve, hogy
egy l méter hosszúságú egyenes sínhez rögzítjük az r méter hosszúságú kötél
egyik, és a tehénhez a másik végét. A kötél egyik vége a sínen elcsúszhat,
így a tehén a síntől legfeljebb r távolságra lévő bármely pontot le tudja
legelni.
Negatív sínhossz, vagy nem pozitív kötélhossz esetén a függvény egy
ValueError-t dob.

Ha például l = 10m, r = 5m, akkor az eredmény 178.540 négyzetméter.
Ha l = 0m, akkor a tehén egyetlen ponthoz van kikötve, és r = 5m kötéllel
78.540 négyzetmétert legel le.
De ha l negatív, vagy r nem pozitív, akkor ValuError-t kell kapnunk.
"""
def area(l, r):
    return round(area_c(r) + area_r(l, r), 3)

"""
A függvény feladata kiszámolni egy r sugarú kör területét (r²π), ezredre
kerekítve.
Ha a sugár nem pozitív, a függvény egy ValueError-t kell, hogy dobjon.
"""
def area_c(r):
    t = r * r * math.pi
    if t <= 0:
        raise ValueError()
    return round(t, 3)

"""
A függvény feladata kiszámolni egy a és b oldalú téglalap területét (a*b),
ezredre kerekítve.
Negatív oldalhossz esetén a függvény egy ValueError-t kell, hogy dobjon.
"""
def area_r(a, b):
    t = a * b
    if t <= 0:
        raise ValueError()
    return round(t, 3)
3. gyakorló feladat: Virtuális környezet

Hozz létre egy virtuális környezetet a Python venv modulja segítségével a hxxxxxx/virtenv mappába. A környezetet ne legyen verziókövetve; érd el, hogy a git ne is foglalkozzon vele akkor se, ha esetleg máshol majd újra klónozod a repository-t! Érd el, hogy a main.py futtatásához szükséges elemek meglegyenek a virtuális környezetben (vagyis a main.py lefusson)! A környezet beállításait mentsd el egy requirements.txt fájlba, ez legyen verziókövetve. Ezekből készíts egy commit-ot!

4. gyakorló feladat: Tesztelés

Ágaztass le a saját branch-edből egy hxxxxxx-testing nevű branch-et! Készíts teszteket a hxxxxxx/test mappába, amik a geometry.py függvényeit tesztelik. Minden függvényhez készíts legalább két pytest tesztesetet a függvény valamely két funkciójára. A teszteknek a hxxxxxx könyvtárból a python3 -m pytest parancs hatására futniuk kell. A modulban vannak hibák, így elképzelhető, hogy a tesztek buknak, de ez természetes. Amikor készen vagy, készíts a projekt gyökerébe egy timestamp nevű fájlt, melynek tartalma az aktuális időpont másodperc pontosan, ezt add hozzá a következő commit-hoz! A szükséges fájlokat add hozzá az új branch-edhez egy commit-ban.

5. gyakorló feladat: Hibajavítás

Még mindig az új hxxxxxx-testing branch-ben a tesztek alapján javítsd ki a programot! Ne a teszteket alakítsd úgy, hogy átmenjenek (hacsak nem maga a teszt hibás), hanem a programot javítsd ki! A javításokat egy (vagy több) commit segítségével add hozzá az új teszt branch-edhez.

6. gyakorló feladat: Konfliktusgenerálás

Az eredeti branch-ben a projekt gyökerébe készíts egy timestamp nevű fájlt, melynek tartalma az aktuális időpont másodperc pontosan! Add hozzá ezt a fájlt az eredeti branch-edhez!

7. gyakorló feladat: Merge

Készíts egy merge request-et az új hxxxxxx-testing branch-ednek az eredeti branch-edbe mergeléséhez! Az új hxxxxxx-testing branch-edet merge-eld be az eredeti branch-edbe! Figyelj rá, hogy a merge egy merge commit-tal történjen, és semmiképpen ne fast forward módon!

8. gyakorló feladat: Merge request

Készíts egy merge request-et az eredeti branch-edhez, annak a main-be mergeléséhez! A merge-elést nem tudod megtenni, de a merge request legyen merge-elhető állapotban (ne legyen conflict), és érd el, hogy a GitLab-on történő merge-elés hatására az 1. feladatban létrehozott issue automatikusan záródjon le!