Opis predmeta
Predavanja:
Vsebina predmeta se prilagaja trenutno aktualnim trendom na področju razvoja programske opreme in programskega inženirstva. Poudarek je na obravnavi agilnih metod in izbranih naprednih tematikah s področja programskega inženirstva:
1. Pregled področja programskega inženirstva in sodobnih metod razvoja programske opreme
2. Vodenje agilnih in iterativnih projektov razvoja programske opreme
- iterativni in inkrementalni razvoj (Unified process)
- obvladovanje tveganj na projektih
- agilni pristopi (Scrum, XP, Kanban, Vitek razvoj)
- primerjava agilnih in tradicionalnih pristopov
3. Izbrane prakse agilnih pristopov (Programiranje v parih, Testno voden razvoj programske opreme, Sprotno preoblikovanje kode (refactoring))
4. Napredno inženirstvo zahtev:
- proces inženirstva zahtev
- upravljanje zahtev in sprememb zahtev
- napredne tehnike zajema zahtev
5. Arhitekturno načrtovanje (arhitekturne odločitve, arhitekturni pogledi,arhitekturni vzorci)
6. Načrtovanje zanesljivih sistemov (zanesljivost, varnost, odpornost)
7. Testiranje
- testiranje v razvoju
- testiranje izdaj
- uporabniško testiranje
- posebnosti testiranja pri agilnem razvoju
8. Upravljanje konfiguracij (upravljanje verzij, izgradnja sistema, upravljanje sprememb, upravljanje izdaj)
9. Agilni razvoj in DevOps (zvezna dostava, zvezna postavitev, postavitveni cevovod)
10. Merila v programskem inženirstvu:
- merila kakovosti programske opreme
- merila kakovosti razvojnega procesa
11. Uporaba sodobnih pristopov razvoja programske opreme v razvojnih skupinah (vpeljevanje, sprejemanje, prilagajanje, spremljanje in vrednotenje)
Vaje:
Namen vaj je dvojen:
1. seznanjanje s sodobnimi pristopi in orodji za razvoj programske opreme;
2. Študija primera: empirično ovrednotenje posameznih pristopov k razvoju programske opreme na podlagi praktičnega dela na projektih, ki so čim bolj podobni realnim.
Delo izven kontaktnih ur:
Študenti v okviru študije primera razvijajo programe skladno s pravili izbranega razvojnega procesa ter razvojni proces ovrednotijo.
Predmet učimo na programih
Cilji in kompetence
Cilj predmeta je poglobljena obravnava naprednih tematik s področja programskega inženirstva s poudarkom na sodobnih metodah razvoja programske opreme v primerjavi z že uveljavljenimi pristopi. Študenti delajo na obsežnejšem projektu, ki služi kot študija primera za ovrednotenje novih pristopov, da bi ugotovili njihove prednosti in pomanjkljivosti.
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.
Metode poučevanja in učenja
Predavanja z aktivno udeležbo študentov (razlaga, diskusija, primeri, reševanje problemov). Laboratorijske vaje s praktičnim delom na večjem projektu, ki služi kot študija primera za ovrednotenje posameznih pristopov k razvoju programske opreme.
Predvideni študijski rezultati
Po uspešnem zaključku tega predmeta bo študent zmožen:
· poznati in razumeti sodobne pristope k razvoju programske opreme
· razumeti ključne prednosti sodobnih metod razvoja programske opreme (v primerjavi z že uveljavljenim tradicionalnim pristopom)
· uporabljati orodja, ki podpirajo sodobne metode razvoja programske opreme
· uporabiti sodobne metode razvoja programske opreme pri razvoju dejanskih softverskih projektov
· empirično ovrednotiti rezultate novih metod
· bolje razumeti različne faktorje in okoliščine, ki vplivajo na uspešnost softverskih projektov
- izboljšati sposobnosti za skupinsko delo, vodenje, načrtovanje in organizacijo, medsebojno komuniciranje, pisno in ustno poročanje.
Temeljni viri in literatura
1. I. Sommerville: Software Engineering, Addison-Wesley, 10. izdaja, 2016.
2. R. Stephens: Beginning Software Engineering, Wrox, 2015.
3. D. Anderson, Kanban – Successful Evolutionary Change for Your Technology Business, Sequim, WA: Blue Hole Press, 2010.
Dodatna literatura:
1. M. Cohn: User stories applied, Addison-Wesley, 2011, cop. 2004.
2. K. Beck, A. Cynthia: Extreme Programming Explained, Addison-Wesley, cop. 2005.
3. K. Schwaber: Agile Project Management with Scrum, Microsoft Press, 2004.