Software engineering

  1. 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).


  1. 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).




  1. INVEST (User stories)

  2. SMART (Tasks)

  3. 3 Ps (People, Product, Process)

  4. Verification vs Validation (Right product vs Product right)

  5. Error -> Fault -> Failure ahel

  6. Singleton vs Strategy vs MVC (Mis on mis)

ECP vs BVA: ECP jagab gruppideks, BVA testib piire (n-ö "piiripealsed" juhtumid).

Code Smells: Tea vähemalt 3 näidet (nt Long Method, Duplicated Code, Feature Envy) ja kuidas neid parandada (nt Extract Method).

Refactoring: Muudab struktuuri, MITTE käitumist.

Agile Manifesto: Tea peast 4 põhiväärtust (vasak pool on tähtsam kui parem).

Scrum vs Kanban: Scrum = Sprint (Time-box), Kanban = WIP limit (Flow).

7 Wastes (Lean): Eriti Extra features ja Partially done work.