Grafikus C# – Windows Forms tanfolyam › 4.7 lecke

Windows Forms · 4.7 · saját projekt

Önálló projekt megtervezése és tesztelése

Eddig feladatokat oldottál meg, amelyeket mások már megterveztek. Ebben a leckében te leszel a tervező: kitalálsz egy saját programot, eldöntöd, mit tudjon és mit ne, megrajzolod a képernyőit, felosztod a munkát, és előre megírod, hogyan fogod ellenőrizni. Ez nem programozási lecke: a jó program nem a kódolással, hanem a tervvel kezdődik. A tapasztalat szerint a jó terv a projekt idejének felét megspórolja.

  • kb. 120 perc
  • tervezés és tesztelés
  • sablonokkal
Diáklány C# programot készít laptopon

A lecke végére

  • kiválasztasz egy megvalósítható projektötletet, és meghatározod a hatókörét;
  • a követelményeket ellenőrizhető elfogadási feltételekkel fogalmazod meg;
  • megtervezed a képernyőket, az adatokat és az osztályokat;
  • ütemtervet és kockázatlistát készítesz;
  • tesztelési technikákat alkalmazol (pozitív és negatív teszt, határérték, felfedező teszt);
  • tesztesetet és hibajegyet írsz.

Mielőtt elkezded

A lecke a 3. fejezet és a 4.1–4.6 önálló feladatok tapasztalatára épít: tudod, mekkora egy kezelhető feladat, és milyen eszközökkel dolgozol. Tarts kéznél egy papírt és egy tollat: a tervezés egyik fontos eszköze a vázlat.

4.6 Címjegyzék vagy teendőlista →

Ötlet és hatókör

A jó projektötlet három feltételnek felel meg: érdekel (hogy ne unjad meg), megvalósítható a tanult eszközökkel, és belefér az időbe (egy kisprojekt 6–10 óra). A legtöbb kezdő túl nagyot álmodik: egy „közösségi oldal” vagy egy „teljes webshop” hónapokig tartana. A hatókör szűkítése a tervezés legfontosabb készsége.

ÖtletMit tudjon?Fő eszközökMéret
KvízprogramKérdések kezelése, játék pontozással, ranglista.SQLite, RadioButton, Timer, rétegekközepes
JegynaplóTanulók és jegyek, átlagok, osztályok.SQLite, JOIN, DataGridViewközepes
EdzésnaplóEdzések rögzítése, heti összesítés.SQLite, dátumok, összesítésekközepes
ReceptkönyvReceptek, hozzávalók, keresés, kedvencek.SQLite, két tábla, keresésközepes–nagy
MemóriajátékKártyapárok keresése, időmérés, legjobb idők.Button-ök, Timer, véletlenközepes
PénztárcaBevételek és kiadások, kategóriák, egyenleg.SQLite, GROUP BY, szűrésközepes
SzótanulóSzólista, kikérdezés, hibás szavak ismétlése.SQLite, véletlen, pontozáskicsi–közepes
Rajzolós játékEgyszerű játék a rajzfelületen (például kígyó).Timer, Graphics, billentyűzetközepes–nagy

Hatókör: mi kerül bele, mi nem?

Az egyszerű három kosaras módszer segít: minden funkciót sorolj egy kosárba.

KELL (alap)Nélküle a program nem teljesíti a célját. Ezekből készül az első működő változat.
JÓ, HA VANHasznos, de elmaradhat. Csak akkor készül el, ha marad idő.
KÉSŐBBJó ötlet, de nem ennek a projektnek a része. Leírod, hogy ne felejtsd el, és nem foglalkozol vele.
A szabályA „KELL” kosárban legfeljebb 5–7 funkció legyen. Ha több van, szűkíts, vagy válassz kisebb ötletet.

Gondold végig!

Egy diák „iskolai programot” akar készíteni: órarend, jegyek, hiányzások, üzenőfal, étlap és térkép. Mit javasolsz neki? Melyik lenne a legjobb első verzió, és mi kerülne a „később” kosárba?

Egy lehetséges válasz

Hat külön program van egyben, ezért túl nagy. Érdemes egyet választani, például a jegynaplót (jegyek rögzítése, átlag, osztály szerinti lista): ez önmagában is hasznos és teljes. A többi (órarend, hiányzás, üzenőfal, étlap, térkép) a „később” kosárba kerül, és külön projekt lehet. Az első verzióban a „kell” kosár: tanuló és jegy felvétele, jegyek listája, átlag számítása, keresés. A „jó, ha van”: grafikon, exportálás.

Követelmények: mit jelent, hogy „kész”?

A követelmény egy ellenőrizhető állítás arról, mit tud a program. A „legyen szép” és a „gyors legyen” nem ellenőrizhető. A jó követelmény konkrét, és van elfogadási feltétele: egy teszt, amellyel eldönthető, teljesül-e.

Gyenge követelményJavított követelményElfogadási feltétel
Lehessen jegyeket kezelni.A felhasználó új jegyet vehet fel egy tanulóhoz (1–5), és a jegy megjelenik a tanuló listájában.Jegy felvétele után a lista 1 elemmel hosszabb, a jegy értéke helyes.
Legyen gyors.A tanulók listájának betöltése 1000 tanulónál 2 másodpercen belül történik.1000 tanuló betöltése stopperrel mérve < 2 s.
Legyen biztonságos.Minden SQL paraméterezett, a hibaüzenetben nincs belső adat.Kódátnézés: nincs összefűzött SQL; hibás adatbázisfájlnál általános üzenet.
A hibákat kezelje.Hibás jegy (0, 6, szöveg) esetén érthető üzenet jelenik meg, és nem kerül adat az adatbázisba.0, 6 és „abc” beírása: üzenet, nincs új sor.

A követelménylista sablonja

AzonosítóKövetelményPrioritásElfogadási feltétel
K1(mit tud a program, egy mondatban)KELL / JÓ, HA VAN(hogyan ellenőrizhető)
K2.........

Egy követelmény, egy állítás

Kerüld az „és” szót a követelményben: „a program vegyen fel és töröljön” két követelmény (K1: felvétel, K2: törlés). Így mindegyik külön tesztelhető, és külön látszik, melyik kész. Az azonosító (K1, K2, ...) azért kell, hogy a tesztesetek hivatkozhassanak rá.

Terv: képernyők, adatok, osztályok

A követelmények után három tervet készítesz. Mindhárom papíron kezdődik: gyorsabb, mint a program, és olcsón javítható.

Képernyőtervek

Minden ablakról egy vázlat: hol vannak a vezérlők, milyen nevük lesz (előtagos névvel: txtNev, btnMent), mit csinálnak. Jelöld a főbb eseményeket nyilakkal („gombnyomás → megnyílik a szerkesztő ablak”).

Adatterv

Milyen adatokat tárolsz? Minden fogalomból tábla lesz (tanuló, jegy), oszlopokkal, típusokkal és kulcsokkal. Rajzold le a kapcsolatokat (egy tanulónak sok jegye van: 1–N), és add meg a kötelező mezőket.

Osztály- és rétegterv

Melyik osztályok lesznek? (Tanulo, TanuloTar, ablakok.) Mit csinál mindegyik, és ki hívja kit? A 3.9 leckében látott három réteg: ablak, adat-osztály, adatkezelő.

Folyamatterv

A fő működés lépésekben: például egy kvíz játék: indítás → kérdés kiválasztása → válasz → ellenőrzés → pont → következő kérdés vagy vége → mentés a ranglistára. A bonyolult részeknél (állapotok) rajz vagy lépéslista segít.

Gondold végig!

Miért jobb az adatmodellt előbb megtervezni, mint a kódolás közben, tábláról táblára, menet közben módosítani?

Egy lehetséges válasz

Az adatmodell minden más alapja: erre épül a kód, a képernyők és a tesztek. Ha menet közben módosítod (új oszlop, átnevezett tábla), minden korábbi kódot és tesztadatot javítani kell, és a már felvett adatok is sérülhetnek. Papíron egy hiba kijavítása percek, a kész programban órák.

Ütemterv és kockázatok

A tervből feladatlista lesz. Minden feladat legyen kicsi (legfeljebb 1–2 óra), konkrét és befejezhető. A becslést mindig mérd: kezdők általában a töredékére becsülik az időt, ezért az összeget szorozd 1,5-del.

#FeladatBecslésFügg tőleÁllapot
1Adatbázis létrehozása a DB Browserben, mintaadatokkal45 perc-teendő
2Projekt, NuGet csomag, DB.cs30 perc1teendő
3Adat-osztályok és adatkezelők90 perc2teendő
4Főablak és lista90 perc3teendő
5Új és módosítás90 perc4teendő
...............

Az „Állapot” oszlop értéke teendő, folyamatban vagy kész (a Kanban-tábla elve). Egyszerre legfeljebb egy-két feladat legyen folyamatban. A Függ tőle oszlop megmutatja a sorrendet: nem kezdheted a főablakot, amíg nincs adatréteg.

Kockázatlista

Gondold végig, mi akaszthatja meg a projektet, és mit teszel ellene:

KockázatValószínűségHatásEllenlépés
Túl nagy a hatókör.magasnem készül elA „KELL” kosár legfeljebb 5–7 funkció; a többi csak a végén.
Új, ismeretlen eszköz kell (például Timer).közepeskésik a feladatElőbb egy kis kísérleti projekten próbáld ki.
Elromlik az adatbázis vagy a kód.alacsony–közepesadatvesztésRendszeres biztonsági mentés: a teljes projektmappa tömörítése dátummal (projekt_20261026.zip).
Nincs elég idő a tesztelésre.magashibás programA tesztelés ideje (a teljes 20–25%-a) a tervben szerepel.

Mindig legyen működő változat

Úgy építsd a programot, hogy az első napokon már induljon, és tegyen valamit (például csak a lista), és minden újabb feladat után is működjön. Ne építsd az egészet egyszerre, és a végén ne próbáld ki: ekkor a hibák egy halomban jelentkeznek, és nem tudod, melyik rész okozta.

Tesztelés: hogyan keress hibákat?

A tesztelés célja a hibák megtalálása, nem annak bizonyítása, hogy a program jó. Aki a saját programját teszteli, hajlamos csak azt próbálni, ami működik. Ezért kellenek a következő módszerek:

TechnikaMit jelent?Példa (jegy: 1–5 egész szám)
Pozitív tesztÉrvényes bevitel, a várt működés.A 4-es jegy mentése sikerül.
Negatív tesztÉrvénytelen bevitel, a program érthetően elutasítja.„abc”, üres mező, 3,5, -2, nagyon hosszú szöveg.
Határérték-vizsgálatA tartomány szélén és mellette lévő értékek: itt a legtöbb hiba.0 (hibás), 1 (jó), 5 (jó), 6 (hibás).
Ekvivalencia-osztályokA bemeneteket csoportokra osztod, mindegyikből egy képviselőt próbálsz.Érvényes: 1–5; túl kicsi: < 1; túl nagy: > 5; nem szám.
Felfedező tesztKiszámíthatatlanul próbálkozol, mint egy valódi felhasználó.Gyors kattintgatás, ablak átméretezése, Mégse mindenhol.
Regressziós tesztEgy javítás után újra lefuttatod a korábbi teszteket: nem romlott-e el valami más.A kereső javítása után újra a mentés tesztje.

A tesztterv sablonja

AzonosítóKövetelményLépésekVárt eredményTénylegesEredmény
T1K1(pontos lépések, bemeneti adatokkal)(mit kell látnod)(kitöltöd tesztelés közben)megfelelt / nem felelt meg

A tesztet a kódolás előtt kezdd el írni: a várt eredményeknek a követelményekből kell következniük, nem abból, amit a program éppen csinál. Ha utólag írod, a tesztek igazolni fogják a hibás működést is.

A hibajegy: ha a teszt elbukik

Egy megtalált hibát úgy írj le, hogy más (vagy te, két hét múlva) is reprodukálni tudja:

CímRövid, konkrét: „A jegy mentése 0 értékkel is sikerül”.
LépésekSzámozott, pontos sorrendben: 1. Indítsd a programot. 2. Válaszd a tanulót. 3. Írd be: 0. 4. Kattints a Mentés gombra.
Várt eredményHibaüzenet, a jegy nem kerül az adatbázisba.
Tényleges eredményA jegy mentődik, a listában 0 látszik.
SúlyosságKritikus (adatvesztés, összeomlás), magas, közepes, alacsony (kinézet).
KörnyezetWindows verzió, a program verziója vagy dátuma.

Másik ember is tesztelje!

A saját programodban nehéz hibát találni, mert tudod, mit szabad csinálni. Kérj meg egy osztálytársat vagy családtagot, hogy próbálja ki a programot magyarázat nélkül. Ha elakad, vagy váratlanul kattint, az értékes információ: vagy hiba van a programban, vagy a felület nem érthető.

Kidolgozott példa: Iskolai kvízprogram

Az alábbi terv egy kvízprogramhoz készült. Hasonlítsd össze a sablonnal, és vedd észre, hogyan épül fel. Ez egy példa, nem az egyetlen helyes tervezési megoldás.

1. Cél és hatókör

Cél: Egy tanuló vagy tanár kvízkérdéseket vihet fel, a játékos 10 véletlen kérdésre válaszol, pontot kap, és a legjobb eredmények ranglistán látszanak.

KELLJÓ, HA VANKÉSŐBB
Kérdések felvétele, módosítása, törlése
Játék 10 véletlen kérdéssel
Pontozás
Ranglista (10 legjobb)
Adatok megmaradnak
Időkorlát kérdésenként
Témakörök szerinti szűrés
Hálózati játék több játékossal
Képes kérdések
Hangok
2. Követelmények
Az.KövetelményPrior.Elfogadási feltétel
K1Új kérdést lehet felvenni (kérdés szövege, négy válasz, a helyes sorszáma).KELLMentés után a kérdés a listában megjelenik.
K2Hibás kérdés nem menthető (üres szöveg vagy válasz, a helyes sorszáma nem 1–4).KELLHibaüzenet, a kérdés nem kerül az adatbázisba.
K3A kérdést módosítani lehet.KELLA módosítás mentés után a listában és újraindítás után is látszik.
K4A kérdést törölni lehet megerősítéssel.KELLIgen válasznál törlődik, Nem válasznál marad.
K5A játék 10 véletlen kérdést tesz fel, mindegyiket legfeljebb egyszer. Ha 10-nél kevesebb kérdés van, az összeset.KELLKét játék kérdéssorrendje eltér; egy játékban nincs ismétlés.
K6Minden helyes válasz 1 pont; a végén az eredmény látszik (például 7/10).KELL7 helyes válasz után a kijelzett pontszám 7.
K7A játék végén a játékos nevet adhat meg, és az eredmény a ranglistára kerül; a ranglista a 10 legjobbat mutatja pont szerint csökkenően.KELL11 játék után csak 10 sor látszik, a legkevesebb pontú kimarad.
K8Kérdésenként 15 másodperc az időkorlát; lejárta után a válasz hibásnak számít.JÓ, HA VAN15 másodperc várakozás után a következő kérdés jelenik meg 0 ponttal.
3. Adat- és osztályterv
SQL (adatterv)SQLite
CREATE TABLE kerdesek (
id INTEGER PRIMARY KEY AUTOINCREMENT,
szoveg TEXT NOT NULL,
valasz1 TEXT NOT NULL,
valasz2 TEXT NOT NULL,
valasz3 TEXT NOT NULL,
valasz4 TEXT NOT NULL,
helyes INTEGER NOT NULL CHECK (helyes BETWEEN 1 AND 4)
);

CREATE TABLE eredmenyek (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nev TEXT NOT NULL,
pont INTEGER NOT NULL,
datum TEXT NOT NULL -- yyyy-MM-dd
);
OsztályFeladata
KerdesEgy kérdés adatai és Hiba() ellenőrzés (K2).
KerdesTarSQL: Lista, Betolt, Mentes, Torles, VeletlenKerdesek(int db) (ORDER BY RANDOM() LIMIT @db).
EredmenyTarSQL: Mentes(nev, pont), Legjobbak(10).
JatekAblakA játék: kérdés megjelenítése, válasz ellenőrzése, pont, vége.
KerdesSzerkesztoPárbeszédablak az új és módosítás művelethez (3.9 lecke).
Form1A főablak: kérdések listája, Új/Szerkesztés/Törlés, Játék indítása, Ranglista.
4. Képernyőtervek (leírás)

Főablak: bal oldalon a kérdések táblázata (szöveg, helyes válasz sorszáma), alatta Új, Szerkesztés, Törlés; jobb oldalon a ranglista (név, pont, dátum) és a Játék indítása gomb. Játékablak: felül a kérdés sorszáma (3/10) és a pontszám, középen a kérdés szövege, négy RadioButton a válaszokkal, alul a Következő gomb (válasz nélkül nem aktív). A végén egy összegző ablak: pontszám és a név beírására szolgáló mező. Szerkesztő ablak: kérdés szövege, négy válasz, a helyes sorszáma (NumericUpDown: 1–4), Mentés, Mégse.

5. Feladatlista és becslés
#FeladatBecslésFügg
1Adatbázis (két tábla, 15 mintakérdés)45 perc-
2Projekt, DB.cs, kapcsolat tesztelése30 perc1
3Kerdes és KerdesTar (K1–K4 adatrétege)90 perc2
4Főablak: kérdések listája60 perc3
5Szerkesztő ablak: új, módosítás, törlés (K1–K4)90 perc4
6Játékablak: véletlen kérdések, válasz, pont (K5, K6)120 perc3
7Ranglista: EredmenyTar, megjelenítés (K7)60 perc6
8Időkorlát (K8, ha marad idő)45 perc6
9Tesztelés és javítás90 perc5, 6, 7
Összesen630 perc (10,5 óra)szorozva 1,5-del: kb. 16 óra

Az összeg túl nagy egy 8–10 órás kisprojekthez, ezért a terv szerint a 8. feladat (időkorlát) kimarad, az 1–7. feladat és a tesztelés marad: ez kb. 585 perc, a 1,5-szörös tartalékkal 14,5 óra. Ez még mindig sok: érdemes a ranglistát egyszerűsíteni (a 7. feladat első verziójában csak a 10 legjobb mentése és kijelzése).

6. Kockázatok
KockázatEllenlépés
A véletlen kérdés kiválasztása (ORDER BY RANDOM()) új.Előbb egy kis kísérlet a DB Browserben (SELECT * FROM kerdesek ORDER BY RANDOM() LIMIT 10), mielőtt a kódba kerül.
A játékablak állapota (hányadik kérdés, pont) bonyolult.A 4.4 lecke számológépének mintája: állapotmezők és közös metódusok.
Kevés a kérdés a teszteléshez.15 mintakérdés az adatbázis létrehozásakor.
7. Tesztterv (részlet)
Az.Köv.LépésekVárt eredményTípus
T1K1Új kérdés minden mezővel, helyes: 2, Mentés.A kérdés a listában látszik.pozitív
T2K2Új kérdés üres szöveggel, Mentés.Hibaüzenet, nincs új sor.negatív
T3K2Helyes sorszám: 0, majd 5 (a NumericUpDown korlátjának megkerülése nélkül; adatbázis: CHECK).Nem menthető, érthető üzenet.határérték
T4K4Törlés, majd a megerősítésnél Nem.A kérdés megmarad.negatív
T5K5Két játék indítása egymás után.A kérdések sorrendje eltér, nincs ismétlés egy játékon belül.pozitív
T6K5Játék 4 kérdéssel (a többit töröld).4 kérdés, majd vége; nem omlik össze.határérték
T7K5Játék 0 kérdéssel.Érthető üzenet (nincs kérdés), nem indul a játék.határérték
T8K6Minden kérdésre helyes válasz.10/10.pozitív
T9K6Válasz kiválasztása nélkül Következő.A gomb nem aktív, vagy figyelmeztet.negatív
T10K711 játék különböző pontszámmal.A ranglistán csak 10 sor, a legkevesebb pontú nem szerepel.határérték
T11K7Név nélkül a ranglistára mentés.Figyelmeztetés, vagy „Névtelen” név.negatív
T12-Újraindítás.A kérdések és a ranglista megmaradnak.pozitív
8. Példa hibajegy
MezőTartalom
Cím10-nél kevesebb kérdésnél a játék a 11. kérdésnél összeomlik.
TesztT6 (K5)
Lépések1. Törölj minden kérdést, csak 4 maradjon. 2. Kattints a Játék indítása gombra. 3. Válaszolj mind a 4 kérdésre. 4. Kattints a Következő gombra az utolsó kérdésnél.
Várt eredményA játék véget ér, az eredmény látszik (például 3/4).
Tényleges eredményIndexOutOfRangeException, a program leáll.
SúlyosságMagas (összeomlás).
JavításA játék vége feltételét a tényleges kérdésszámhoz kell kötni, nem a 10-hez.

A te feladatod: a saját projekted terve

Válassz egy ötletet (a táblázatból vagy saját), és készítsd el a tervdokumentumot. Még ne kódolj: a következő lecke a bemutatásról és a dokumentálásról szól, a megvalósítás pedig az utána következő időszakban készülhet.

  1. Ötlet és hatókör: a cél két mondatban, a három kosár (a „KELL” kosárban legfeljebb 7 elem).
  2. Követelménylista: legalább 6 követelmény azonosítóval, prioritással és elfogadási feltétellel.
  3. Képernyőtervek: minden fő ablakról egy vázlat (papír, fénykép vagy digitális rajz), a vezérlők neveivel.
  4. Adatterv: táblák, oszlopok, típusok, kulcsok és kapcsolatok (SQL CREATE TABLE vagy táblázat).
  5. Osztály- és rétegterv: az osztályok és feladataik.
  6. Ütemterv: feladatlista becslésekkel és sorrenddel; az összes idő 6–10 óra.
  7. Kockázatlista: legalább 3 kockázat ellenlépéssel.
  8. Tesztterv: legalább 10 tesztesettel, amelyben van pozitív, negatív és határérték-teszt is.
RészSzempontPont
Ötlet és hatókörMegvalósítható, a három kosár indokolt.10
KövetelményekKonkrétak, ellenőrizhetők, egy követelmény egy állítás.25
TervekKépernyő, adat és osztály: következetesek egymással.25
Ütemterv és kockázatReális, kis feladatok, függőségek.15
TeszttervA követelményekből következik, vannak negatív és határérték-esetek.25

Összesen: 100 pont.

📷 Képernyőkép helye

Mit tegyél ide: a saját terved egy részlete (például a főablak vázlata a vezérlők nevével), vagy a kidolgozott példa adatterve.Javasolt fájlnév: winforms-4-7-terv.webp · Alt szöveg: Egy saját projekt képernyőterve és adatterve

Gyakorlótár: 6 további feladat

Három szinten gyakorolhatsz: alap, közepes és kihívás. Csak a próbálkozás után nyisd le a megoldást.

Alap szint

1. Elfogadási feltételek

Írj elfogadási feltételt (ellenőrizhető teszt) ehhez a követelményhez: A felhasználó név szerint kereshet a diáklistában.

Megoldás megnyitása

Például: A „kov” szöveg beírása után a lista csak azokat a diákokat mutatja, akiknek a nevében szerepel a „kov” (kis- és nagybetűtől függetlenül), és a találatok száma megjelenik. Üres kereső mellett az összes diák látszik. Ha nincs találat, a lista üres, és „Nincs találat” üzenet jelenik meg. Jó feltétel: konkrét bemenetet és pontos elvárást ad, és három esetet fed le (van találat, üres kereső, nincs találat).

2. Negatív tesztek

Egy űrlapon az életkor mezőbe 1 és 120 közötti egész számot kell írni. Gyűjts legalább 6 érvénytelen bemenetet, amelyet a programnak el kell utasítania.

Megoldás megnyitása

Üres mező; „abc”; 12,5 (tizedes); -5; 0; 121; 999999999999 (túl nagy szám); szóközök; „12 év”; különleges karakterek (például ' vagy %). A program mindegyiknél érthető üzenetet adjon, és ne omoljon össze.

Közepes szint

3. Határértékek

Egy kedvezmény csak 3000 Ft és 10 000 Ft közötti vásárlásnál jár (a határokat is beleértve). Melyik összegeket teszteled, és mit vársz?

Megoldás megnyitása
ÖsszegElvártMiért?
2999nincs kedvezményközvetlenül a tartomány alatt
3000kedvezményalsó határ
3001kedvezményközvetlenül a határ felett
9999kedvezményközvetlenül a felső határ alatt
10000kedvezményfelső határ
10001nincs kedvezményközvetlenül a tartomány felett
0, -1hibás bevitel vagy nincs kedvezmény (a tervben dönts)szélsőséges értékek

4. Hibajegy írása

Egy diák ezt mondja: „A programom néha lefagy, ha mentek.” Miért nem jó ez hibajegynek, és hogyan kérdeznél vissza? Írd át jó hibajegyre ennek a leírásnak a felhasználásával: a mentés gombra kattintva, ha a név mező üres, az alkalmazás leáll NullReferenceException hibával.

Megoldás megnyitása

A „néha lefagy” nem reprodukálható: hiányzik, mikor, mit csinálva, és mi történik. Visszakérdések: pontosan melyik gombbal? Milyen adatokkal? Mindig, vagy csak bizonyos esetben? Mi a hibaüzenet? Jó hibajegy: Cím: Üres névvel mentve a program leáll. Lépések: 1. Indítsd a programot. 2. Hagyd üresen a név mezőt. 3. Kattints a Mentés gombra. Várt: Hibaüzenet („A név kötelező”), a program fut tovább. Tényleges: NullReferenceException, a program leáll. Súlyosság: magas.

Kihívás szint

5. Becslés és sorrend

Egy teendőlista-projekt feladatai: (A) adatbázis, 40 perc; (B) adat-osztályok, 60 perc, A-tól függ; (C) főablak és lista, 60 perc, B-től; (D) új/módosítás, 80 perc, C-től; (E) kereső és szűrő, 50 perc, C-től; (F) tesztelés, 60 perc, D-től és E-től. Mennyi az összes idő, és mi lehet egyszerre dolgozva, ha ketten csináljátok? Mi a legrövidebb teljes idő?

Megoldás megnyitása

Összes idő: 40 + 60 + 60 + 80 + 50 + 60 = 350 perc (5 óra 50 perc), ha egyedül csinálod. Ketten a D és az E a C után egyszerre végezhető (mindkettő a C-től függ). A kritikus út (a leghosszabb egymásra épülő lánc): A → B → C → D → F = 40 + 60 + 60 + 80 + 60 = 300 perc. Az E (50 perc) párhuzamosan fut a D-vel, így a legrövidebb idő ketten 300 perc (5 óra). A tartalék: szorozd 1,5-del.

6. Követelménylista javítása

Keress legalább öt hibát az alábbi követelménylistában, és javítsd őket: (1) A program legyen gyors és szép. (2) A felhasználó felvehet és törölhet termékeket. (3) Minden adat mentődjön. (4) A program ne omoljon össze. (5) Legyen benne mindenféle szűrés.

Megoldás megnyitása

(1) Nem ellenőrizhető („gyors”, „szép”): konkrét mérték kell (például a lista 1000 sorra 2 másodpercen belül töltődik be), a „szép” helyett érthetőségi követelmény. (2) Két követelmény egyben („és”): külön a felvétel és a törlés, mindegyik elfogadási feltétellel. (3) Pontatlan: melyik adat, mikor, hová (például: termék felvétele után az adatbázisban is megjelenik, és újraindítás után is látszik). (4) Nem ellenőrizhető: milyen hibára? Konkrét esetek kellenek (üres név, hibás szám, hiányzó adatbázisfájl) és az elvárt viselkedés. (5) Végtelen és homályos („mindenféle”): meg kell nevezni a szűrőket (kategória szerint, ár szerint), és prioritást kell adni nekik. Közös hiba: nincs azonosító, nincs prioritás és nincs elfogadási feltétel.

Gyors önellenőrzés

Válaszolj fejben, és csak utána nyisd le a választ.

1. Mi a három kosár módszer?

A funkciókat három csoportba soroljuk: KELL (nélküle nincs értelme a programnak), JÓ, HA VAN (hasznos, de elmaradhat), KÉSŐBB (nem ennek a projektnek a része). A „KELL” kosár legyen kicsi.

2. Mitől jó egy követelmény?

Konkrét, egy állítást tartalmaz, és van elfogadási feltétele: egy teszt, amellyel eldönthető, teljesül-e.

3. Miért kell az adatmodellt a kódolás előtt megtervezni?

Mert minden más (kód, képernyők, tesztek) erre épül. Papíron egy hiba kijavítása olcsó, a kész programban drága.

4. Mi a határérték-vizsgálat?

A tartomány szélén és közvetlenül mellette lévő értékek tesztelése (például egy 1–5 tartománynál 0, 1, 5, 6), mert ott a legtöbb hiba.

5. Mi a különbség a pozitív és a negatív teszt között?

A pozitív teszt érvényes bevitellel a várt működést ellenőrzi, a negatív érvénytelen bevitellel azt, hogy a program érthetően elutasítja.

6. Mi kell egy jó hibajegybe?

Rövid cím, számozott reprodukálási lépések, várt és tényleges eredmény, súlyosság és környezet.

7. Miért kell másnak is tesztelnie?

Mert a szerző tudja, mit szabad csinálni, és ritkán próbál váratlan dolgokat. Más felhasználó olyan hibákat is megtalál, amelyekre nem gondolsz.

Mit tudsz már?

  • Megvalósítható ötletet választasz, és a hatókört szűkíted.
  • Ellenőrizhető követelményeket írsz elfogadási feltételekkel.
  • Megtervezed a képernyőket, az adatokat és az osztályokat.
  • Ütemtervet és kockázatlistát készítesz.
  • Teszteseteket tervezel pozitív, negatív és határérték-technikával, és hibajegyet írsz.

Következő lecke: a projekt bemutatása és dokumentálása

A terv kész. Az utolsó lecke azt mutatja meg, hogyan mutasd be a kész programot és hogyan írj hozzá érthető felhasználói és fejlesztői dokumentációt.