1072 Tehnologija programske opreme
Vsebina predmeta
Predavanja:
Temeljne vsebine:
- Osnovni koncepti
- Kaj je tehnologija programske opreme
- Faze v razvoju programske opreme
- Modeli razvojnega procesa (npr. slapovni, inkrementalni, agilni)
- Orodja in okolja za razvoj programske opreme
- Upravljanje konfiguracije in nadzor različic
- Avtomatizirana gradnja in zvezna integracija
- Orodja za pomoč pri analizi in načrtovanju (orodja CASE)
- Opredelitev zahtev
- Ugotavljanje zahtev
- Dokumentiranje zahtev
- Nefunkcionalne zahteve
- Ovrednotenje in uporaba specifikacije zahtev
- Modeliranje
- Klasične tehnike (npr. diagrami entite-razmerja, diagrami podatkovnih tokov, diagrami prehajanja stanj)
- Jezik UML
- Načrtovanje programske opreme
- Principi načrtovanja (abstrakcija, modularnost, delitev odgovornosti, skrivanje detajlov, sklopljenost in povezanost, ponovna uporaba)
- Klasične metode načrtovanja (funkcionalna dekompozicija, strukturirane metode)
- Objektno usmerjena analiza in načrtovanje (RUP)
- Načrtovalski vzorci
- Programiranje
- Dobre prakse (defenzivno programiranje, varno programiranje, uporaba mehanizmov za lovljenje izjem, prestrukturiranje kode)
- Standardi kodiranja
- Strategije za integracijo
- Testiranje programske opreme
- Testiranje in življenjski cikel
- Strukturirani pregledi
- Testiranje enot, integracijsko testiranje, testiranje funkcionalnosti, sistemsko testiranje
- Testiranje po metodi črne in bele škatle
- Regresijsko testiranje in avtomatizacija testiranja
- Testno voden razvoj
- Vzdrževanje in nadgradnje
- Glavni vzroki problemov pri vzdrževanju
- Značilnosti programske opreme, ki je primerna za vzdrževanje
- Obratno inženirstvo in prestrukturiranje
- Ponovna uporaba programske opreme
Izbirne vsebine:
- Modeli za izboljšanje kakovosti razvojnega procesa
- CMMI (Capability Maturity Model Integration) for Development
- PSP (Presonal Software Process)
- TSP (Team Software Porcess)
- Agilni in vitki razvoj programske opreme
- Scrum
- Extreme Programming
- Kanban
- Uravnoteženje agilnosti in discipline
Vaje:
Skupinsko delo na projektih, ki so čim bolj podobni realnim. Projekte lahko predlagajo študenti sami, potrditi pa jih morata nosilec predmeta in asistent. Lahko pa problem definira nosilec predmeta v sodelovanju z ustreznim naročnikom. Velikost skupin je omejena na štiri študente, študenti pa lahko sami izbirajo, s kom bodo delali. Vsaka skupina mora določiti vodjo projekta in ostale vloge, za katere meni, da so potrebne za realizacijo projekta. Študente spodbujamo, da delajo na projektu tudi izven ur, ki so po urniku predvidene za izvedbo predmeta. Za spremljanje dela na projektih definiramo mejnike (kontrolne točke), na katerih študenti pokažejo, kaj so že naredili, in dobijo nasvete za nadaljnje delo.
Cilji in kompetence
Cilj predmeta je predstaviti pregled aktivnosti v življenjskem ciklu razvoj programske opreme, ki so potrebne ne glede na to, kateri model razvojnega procesa se uporablja. Da bi obvladali te aktivnosti, študentje kombinirajo teoretična znanja s praktičnim delom na (skoraj) realnem projektu.
Predvidene kompetence:
- sposobnost opredelitve, razumevanja in reševanja kreativnih strokovnih izzivov na področju računalništva in informatike;
- sposobnost uporabe pridobljenega znanja pri samostojnem delu za reševanje tehničnih in znanstvenih problemov na področju računalništva in informatike; sposobnost nadgradnje pridobljenega znanja,
- sposobnost skupinskega dela v profesionalnem delovnem okolju; vodenje manjše strokovne skupine;
- sposobnost administrativnega vodenja procesov, povezanih z raziskovanjem, industrijo, izobraževanjem in drugimi področji;
- sposobnost razumevanja in uporabe znanja računalništva in informatike na drugih tehničnih in relevantnih področjih (ekonomija, organizacijske vede ipd.);
- praktično znanje in spretnosti, potrebne za uspešno strokovno delo na področju računalništva in informatike;
- samostojno reševanje zahtevnih razvojnih, inženirskih in organizacijskih nalog kot tudi povprečno zahtevnih raziskovalnih nalog na področju računalništva in informatike.