Software engineering
Sissejuhatus ja Põhimõisted (Loeng 1)
3 P-d (The Three Ps): Tarkvaraarendus koosneb kolmest osast: People (Inimesed), Process (Protsess), Product (Toode).
Tarkvara omadused: Funktsionaalsus, Usaldusväärsus (Reliability), Kasutatavus (Usability), Efektiivsus, Hooldatavus (Maintainability), Porditavus.
Arendusmudelid:
Waterfall (Juga): Lineaarne, jäik.
Agile (Agiilne): Iteratiivne, paindlik, klient on kaasatud.
Scrum & XP: Agiilsed raamistikud.
Nõuete Analüüs (Requirements Engineering) (Loengud 2 ja 3)
See on eksami jaoks kriitiline osa.
Funktsionaalsed vs Mittefunktsionaalsed nõuded:
Funktsionaalsed: Mida süsteem teeb (nt "Süsteem peab võimaldama kasutajal sisse logida").
Mittefunktsionaalsed: Kuidas süsteem seda teeb (jõudlus, turvalisus, kasutatavus).
User Stories (Kasutuslood): Vorming: "As a <role>, I want <feature> so that <benefit>".
INVEST kriteeriumid (Hea kasutusloo omadused):
Independent (Sõltumatu)
Negotiable (Läbiräägitav)
Valuable (Väärtuslik)
Estimable (Hinnatav)
Small (Väike)
Testable (Testitav)
SMART Tasks (Ülesannete omadused): Specific, Measurable, Attainable, Realistic, Time-bound.
Use Cases (Kasutusjuhud): Kirjeldavad süsteemi käitumist, sisaldavad Actor (Toimija), Pre-conditions (Eeltingimused), Flow of Events (Sündmuste jada), Post-conditions (Järeltingimused).
Analüüs ja Modelleerimine (Loeng 4)
Domeenimudel (Domain Model): Visualiseerib reaalse maailma kontseptsioone (mitte tarkvara klasse). Koosneb kontseptuaalsetest klassidest, atribuutidest ja seostest.
Seosed (Associations):
Association: Tavaline seos (joon).
Aggregation: "Omab" suhe (tühja teemandiga), nõrk seos (osa võib eksisteerida ilma tervikuta).
Composition: Tugev "omab" suhe (täidetud teemant), osa ei eksisteeri ilma tervikuta.
Hinnangud (Estimation Techniques):
Story Points: Suhteline suurus (sageli Fibonacci numbrid).
Planning Poker: Konsensuse saavutamise meetod meeskonnas.
Wideband Delphi: Ekspertide põhine hindamine.
Arenduse Infrastruktuur ja CI/CD (Loengud 5 ja 6)
Git ja Version Control:
Branching models: Git Flow (keerukam, master/develop/feature harud) vs GitHub Flow (lihtsam, master + feature harud).
Merge Conflict: Tekib, kui muudetakse sama rida erinevates harudes.
CI/CD (Põhimõisted):
Continuous Integration (CI): Arendajad liidavad koodi sageli (vähemalt kord päevas), automaatsed testid jooksevad iga muudatusega.
Continuous Delivery: Tarkvara on alati valmis reliisiks (aga reliis võib olla manuaalne).
Continuous Deployment: Iga edukas muudatus läheb automaatselt live-keskkonda.
Anti-mustrid: "Infrequent commits" (harvad commitid), "Long broken build" (katkine build jääb parandamata), "Spam notifications" (liiga palju teavitusi).
Arhitektuur ja Disain (Loengud 7 ja 8)
4+1 Vaatemudel (4+1 View Model): Logical, Process, Implementation, Deployment + Use Case view.
Arhitektuurimustrid:
MVC (Model-View-Controller): Eraldab andmed (Model), kasutajaliidese (View) ja loogika (Controller).
Layered (Kihiline): Presentation, Business, Data kihid.
Client-Server: Jaotatud süsteemid.
Disainimustrid (Design Patterns):
Singleton: Tagab, et klassil on ainult üks instants (nt andmebaasi ühendus).
Strategy: Võimaldab algoritmi vahetada dünaamiliselt (nt erinevad makseviisid).
Observer: Objekt teavitab teisi muudatustest (nt event listenerid).
Testimine ja Kvaliteet (Loengud 7 ja 9)
V&V erinevus:
Verification: "Are we building the product right?" (Kas vastab spetsifikatsioonile?)
Validation: "Are we building the right product?" (Kas vastab kliendi vajadustele?)
Vea ahel (Error-Fault-Failure):
Error (Viga): Inimese eksimus.
Fault (Defekt): Viga koodis.
Failure (Tõrge): Süsteemi väärkäitumine (kui defektne kood käivitub).
Testimise tasemed: Unit (Ühik), Integration (Integratsioon), System (Süsteem), Acceptance (Vastuvõtu).
Unit Testing: Isoleeritud väikeste osade testimine (nt JUnit-iga). Kasutatakse Mockingut väliste sõltuvuste asendamiseks.
Testimine II: Meetodid ja Strateegiad (Loeng 10)
See loeng läheb testimisega süvitsi. Eristatakse "musta kasti" ja "valge kasti" testimist.
Black-Box vs White-Box:
Black-Box (Must kast): Testija ei näe koodi, testib sisendite ja väljundite põhjal. Keskendub funktsionaalsusele.
White-Box (Valge kast): Testija näeb koodi ja struktuuri. Keskendub koodi katvusele ja loogikale.
Gray-Box: Kombinatsioon mõlemast.
Musta kasti tehnikad (Väga oluline eksamiks!):
Equivalence Class Partitioning (ECP): Sisendandmed jagatakse klassidesse, kus programm peaks käituma ühtemoodi (nt positiivsed arvud, negatiivsed arvud). Testitakse ühte väärtust igast klassist.
Boundary Value Analysis (BVA): Testitakse piirväärtusi, kuna seal tekivad vead kõige sagedamini (nt kui vahemik on 1-100, testitakse 0, 1, 100, 101).
Valge kasti katvuse (Coverage) kriteeriumid:
Statement Coverage: Mitu % koodiridadest on testiga läbi käidud.
Branch Coverage: Kas kõik if/else harud on läbi käidud (nii tõene kui väär pool).
Testimise tüübid:
Smoke Testing: Kiire kontroll, kas "kriitiline suits" tõuseb ehk kas build on piisavalt stabiilne edasiseks testimiseks.
Regression Testing: Kontrollimine, et uued muudatused poleks lõhkunud olemasolevat funktsionaalsust.
Tarkvara Evolutsioon ja Refactoring (Loeng 11)
Siin on fookus koodi puhtusel ja hooldatavusel.
Hoolduse tüübid (Maintenance Types):
Corrective: Vigade parandus.
Adaptive: Kohandamine uue keskkonnaga (nt uus OS).
Perfective: Uute funktsionaalsuste lisamine või olemasolevate parandamine (kõige suurem osa tööst).
Preventive: Tuleviku probleemide ennetamine (refactoring).
Refactoring (Refaktoreerimine):
Definitsioon: Koodi sisemise struktuuri muutmine ilma välist käitumist muutmata.
Eesmärk: Parandada loetavust, vähendada keerukust, eemaldada duplikaate ("Clean Code").
Millal teha? "Rule of Three" (kui kood kordub kolmandat korda, refaktoreeri).
Code Smells (Koodi "haisud" - märgid halvast koodist):
Bloaters: Long Method (liiga pikk meetod), Large Class (liiga suur klass).
Object-Orientation Abusers: Switch Statements (kasuta polümorfismi!), Refused Bequest.
Dispensables: Duplicated Code (koodi kordus), Dead Code (kasutamata kood), Comments (kui kood on liiga keeruline ja vajab selgitust, tuleks seda pigem parandada).
Couplers: Feature Envy (meetod kasutab liiga palju teise klassi andmeid).
Agile ja Lean meetodid (Loeng 12)
Võrdlus traditsioonilise (Waterfall) ja uue (Agile) vahel.
Agile Manifesto (4 väärtust):
Inimesed ja suhtlus > Protsessid ja tööriistad.
Töötav tarkvara > Põhjalik dokumentatsioon.
Koostöö kliendiga > Lepingu läbirääkimised.
Muutustele reageerimine > Plaani järgimine.
Scrum:
Rollid: Product Owner (vastutab mida tehakse), Scrum Master (protsessi hoidja), Team (teeb töö).
Artefaktid: Product Backlog (kõik nõuded), Sprint Backlog (sprinti valitud tööd), Increment (töötav toode).
Burndown Chart: Graafik, mis näitab järelejäänud tööd.
XP (Extreme Programming):
Põhipraktikad: Pair Programming (kaks progejat ühe arvuti taga), TDD (test-driven development), Continuous Integration, Small Releases .
Kanban vs Scrum:
Scrum: Ajakastid (Sprints), rollid on määratud, mõõdikuks Velocity.
Kanban: Pidev voog (Continuous flow), aega ei piirata kastidega, piiratakse pooleliolevat tööd (WIP limits), mõõdikuks Lead Time.
Lean Software Development (7 wastes - raiskamist tuleb vältida):
Partially done work (poolik töö), Extra features (liigsed funktsioonid), Relearning, Handoffs, Task switching, Delays, Defects .
10. Jätkusuutlikkus (Loeng 13)
Mõõdikud: Energia (Joule) vs Süsinik (CO2). Energia on parem tarkvara tasemel, süsinik taristu tasemel.
Energy Patterns: Disainimustrid energiakulude vähendamiseks (nt Dark Mode, Lazy Loading).
INVEST (User stories)
SMART (Tasks)
3 Ps (People, Product, Process)
Verification vs Validation (Right product vs Product right)
Error -> Fault -> Failure ahel
Singleton vs Strategy vs MVC (Mis on mis)