UL/FRI/UNI-RI/VP/Izpiti/FAQ
Iz E-študij, proste zakladnice študentskega znanja
Tu so zapiski na podlagi starih vprašanj z izpitov (FAQ s www.fri-info.net in nekateri dodatki), urejeni glede na mesto v snovi (označene so strani na prosojnicah, ponekod pa tudi v knjigi), na koncu pa so še naloge, ki niso del prosojnic oz. knjige. V malo lepši *.doc obliki so zapiski na fri-info forumu, [1]. Za lažje učenje bodočih generacij, poslano 31. januarja 2007.
1. Naštej aktivnosti razvoja programske opreme (12, 2)
Analiza zahtev, načrtovanje, kodiranje, testiranje, vzdrževanje.
2. Opiši model razvoja programske opreme s pomočjo prototipov. Kaj so njegove prednosti in morebitne slabosti? (narišem skico razvoja s prototipi – v knjigi) (pros. 14)
Za novo aplikacijo, je poleg zahtev težko točno določiti, kaj so vhodni podatki, ne ve se, kako zanesljivi so algoritmi, niti kakšen naj bo uporabniški vmesnik. Pri razvoju s pomočjo uporabe prototipov najprej zgradimo enega ali več prototipov ali modelov programske opreme, ki naj razjasnijo, kakšno prog. opremo pravzaprav potrebujemo. Prototipi morajo biti narejeni hitro in poceni kar dosežemo s:
- Pomočjo raznih razvojnih orodij (koda ni učinkovita je pa vseeno primerna za izvajanje in testiranje)
- Izdelamo prototip v katerega implementiramo le nekatere funkcije, ki jih želimo natančno definirati. Druge simuliramo ali jih izpustimo.
- Uporabimo že obstoječ produkt, ga spremenimo in opozorimo na razlike, ki jih pričakujemo.
Prednosti:
- S pomočjo prototipa lahko nejasnosti odpravimo še preden investiramo veliko dela v izdelavo pravega produkta.
- Pogosto se prav s pomočjo prototipa definira uporabniški vmesnik.
- Izdelava prototipa traja kratek čas in hkrati je izvedba poceni.
Slabosti:
Naročnik pogosto ne razume, da je prototip le hišica iz kart, ki je bil zgrajen zato, da predstavi neko funkcionalnost - misli, da je že skoraj dokončan. Prototip včasih preraste iz faze prototipa v končni izdelek, a ni robusten in tudi dokumentacija je slaba.
3. Opiši model postopnega razvoja programske opreme. Kaj so njegove prednosti in slabosti? (17)
Funkcionalnost produkta se postopoma širi, med koraki postopnega širjenja funkcionalnosti pa se produkt že redno uporablja.
- Prednosti: Funkcije ki so manj pomembne realiziramo kasneje kot bolj pomembne funkcije programa (MUSTs vs. WANTs). Postopek omogoča dodajanje le tistih funkcij, ki so potrebne/uporabne in to takrat ko jih potrebujemo.
- Slabosti: Če med razvojem odkrijemo kakšen boljši/optimiziran način pri npr. uporabi uporabniškega vmesnika, ki pa bi zelo spremenila uporabo iz strani uporabnika, spremembo težko vnesemo v produkt, ker so se uporabniki že navadili na nek ustaljen način uporabe programske opreme.
4. Opiši model spiralnega razvoja programske opreme. Kateri modeli so v njem združeni?
Spiralni model razvoja programske opreme - več ciklov. Vsak cikel je sestavljen iz zasnove, načrtovanja, kodiranja in testiranja. Medtem ko so prvi cikli namenjeni izdelavi začetnih prototipov, so kasnejši cikli namenjeni adaptaciji programske opreme. V primerjavi s projekti, ki uporabljajo klasičen (waterfall) pristop, je tukaj tveganje, da bomo sredi projekta odkrili kakšno inženirsko neskladnost, ki bo ogrozila potek projekta, manjše, ker lahko morebitne odklone odpravljamo z novimi iteracijami.
Vsebovani modeli:
- prototipni model (nejasne zahteve - sledimo spirali in pomočjo prototipov rešimo problem)
- klasični model (jasne zahteve - zgradimo robusten sistem z eno iteracijo)
- postopni model (večkratna iteracija in postopna gradnja sistema) (18)
5. Opiši zakon naraščajoče kompleksnosti in zakon evolucije programske opreme.
- Zakon naraščajoče kompleksnosti: z razvojem projekta narašča njegova kompleksnost (povečuje se mu entropija). Za preprečevanje je potrebno dodatno delo. Če zanemarimo vzdrževanje, lahko na dolgi rok slabo vpliva na razvoj.
- Zakon evolucije programske opreme: za hitro rastjo atributov (modulov, funkcij, št. vrstic) nujno sledi obdobje, ko je potrebno kodo rekonstruirati; ažurirati dokumentacijo, preden se lahko nadaljuje novi cikel rasti. (19, 2)
6. Vrste projektov glede na dokončnost, ponovljivost. Kakšna je razlika med determinističnimi in stohastičnimi projekti? Kako ju oblikujemo in načrtujemo?
- Deterministični projekti so tisti projekti, kjer lahko povsem determiniramo zahteve in cilje. S končnimi cilji so določene tudi aktivnosti in potek projekta. Projekt načrtujemo tako, da natančno določimo aktivnosti v projektu in njihovo izvedbo. Značilno je ciljno retrogradno oblikovanje projekta. (večina projektov, katerih cilji so uresničljivi s precejšno verjetnostjo, sodi v to skupino)
- Stohastični projekti nimajo vnaprej oblikovanih ciljev. Takšni projekti so značilni za raziskovalno delo, kjer se nadaljnje aktivnosti oblikujejo šele po delnih rezultatih začetnih aktivnosti. Značilno je ciljno progresivno oblikovanje projekta.
- Enkratni projekti – se pojavljajo le enkrat (posebej zasnovana organizacija)
- Projektni procesi – se lahko večkrat ponovijo z enakimi tehnološkimi oz. organizacijskimi oblikami (npr. v gradbeništvu) (str. 25)
7. Katere so osnovne razlike med klasičnim in projektnim načinom dela? (26)
V klasičnem okolju se upravljanje koncentrira na produktivno, časovno orientirane kazalce uspešnosti. Upravljavci kontinuiranih dejavnosti se tako na primer sprašujejo: koliko smo prodali ta teden, ta mesec, v primerjavi s prejšnjimi meseci, kakšen je bil dobiček, kakšna je izkoriščenost zmogljivosti? Uspešnost se primerja z enakimi kazalci v preteklih obdobjih. Pri projektno orientiranem upravljanju gre prav tako za načrtovanje, organiziranje, vodenje in kontroliranje virov, toda v specifičnem časovnem obdobju z jasnimi enkratnimi cilji. Uporaba virov se kontrolira glede na opravljeno delo, definirano v okviru projektnih aktivnosti.
8. Naštej in kratko opiši dejavnosti, ki sestavljajo projekt pisanja PO. (str. 27)
- Faza zasnove - izoblikujejo se globalni cilji projekta, glede na analizo. Cilji morajo biti definirani glede na čas, sredstva, tehnične zahteve itd.
- Faza definiranja - izdelava osnovnega načrta za dosego zastavljenih ciljev, ki je usklajen z vsemi danimi možnostmi in omejitvami. Določi se obseg dela in oceni se čas.
- Faza izvajanja - izvajajo se načrtovane aktivnosti, da se doseže zastavljene cilje.
9. Naštej in opiši 4 organizacijske skupine (34)
Tradicionalna funkcijska organizacija, čista projektna organizacija, projektno-matrična organizacija, skupina glavnega programerja
10. Skiciraj matrično organizacijo dela, opiši prednosti in nevarnosti te organizacije! (36)
Prednosti: Če gre za gonilni projekt podjetja, so v projektno skupino razporejeni za delo zavzeti in motivirani delavci. Aktivnosti in zmogljivosti, potrebne za izvedbo, morajo biti pravočasno izvedene in planirane. To izboljšuje kvaliteto projekta, po drugi strani pa je potrebno zelo natančno načrtovanje.
Slabosti: Delavci imajo 2 nadrejena (funkcijskega in projektnega). Situacijo lahko izkoristijo leni delavci. Ohranjanje stika z matično enoto in delom, h katerem je delavec sicer razporejen. Delavec mora biti ob razporeditvi projektni skupini oproščen rutinskih obveznosti, ohrani pa bistvene naloge. V primeru, ko propade večina projektov v funkcijski enoti in ni več mogoče notranje razporejati ljudi na mesta, kjer delajo dodano vrednost podjetju, pride do rasti stroškov dela, ki se ne odraža v povečanih prihodkih. V končni fazi to lahko vodi tudi do zloma funkcijske enote oz. podjetja.
11. Skupina glavnega programerja (37)
Vodja skupine je strokovnjak na področju programiranja. Zadolžen je za vse bistvene naloge (analiza, načrtovanje, celo kodiranje), pri tem pa mu pomagajo/asistirajo drugi člani. Glavni asistent ga lahko nadomesti, v skupini je še knjižničar (dokumentacija, administracija). Skupini se občasno pridružijo tudi drugi strokovnjaki. Če je projekt prevelik, v vlogi glavnega programerja nastopa več strokovnjakov, ki vodijo večje skupine programerjev.
12. Opiši skupino za reševanje problemov. (44)
Skupine za re·sevanje problemov so obi·cajno ustvarjalne skupine, ki so lahko sorazmerno trajne (npr. upravni in izvr·silni odbori), praviloma pa so za·casne (npr. komisije, projektne in delovne skupine) in so ustanovljene za uresni·cevanje povsem konkretne naloge. Zna·cilnost teh skupin je v tem, da re·sujejo naloge na neformaliziran, po potrebi na povsem nov na·cin, z mo·cno medosebno komunikacijo, z velikim tveganjem in z veliko odgovornostjo. Status posameznika je opredeljen s statusom, ki ga prina·sa v skupino, vendar pa tudi z njegovo osebno prizadevnostjo in aktivnostjo v skupini. Skupine za re·sevanje problemov so najbolj u·cinkovite, ·ce v njih sodeluje manj·se ·stevilo ·clanov.
13. Kakšne skupine so najbolj produktivne? (45, 51)
- Velikost 5 članov (ker prihaja do rednih komunikacij, delitve dela in lažjega samopotrjevanja)
- Formalne skupine, ki vsebujejo neformalne skupine – nastanek neformalnih skupin (2-3 člani) znotraj formalnih veča občutek pripadnosti, hkrati pa je zaradi njihovega notranjega zadovoljstva tudi povečana produktivnost skupine.
- Heterogene skupine – sicer je značilno, da heterogene skupine potrebujejo več časa za izvedbo produkta kot homogene, vendar je hkrati njihov rezultat boljši, ker na probleme gledajo iz različnih stališč in tako prispevajo k boljši zasnovi programske opreme. So inovativni.
Pomembna je tudi pripadnost skupini in skupnim ciljem. Večja je, tem bolj učinkovito je delovanje skupine.
14. Štiri faze pri nastanku skupine (str. 49)
- Organizacija in informiranje (seznanitev z nalogo, z načinom dela ..)
- Nastanek konfliktov (začetek dela, medsebojni konflikti med člani ter med člani in vodjem)
- Kohezivnost (posledica konfliktov) (izogibanje nadaljnjih konfliktov - težnja po dokončanju projekta)
- Razvoj grupne strukture (medsebojni odnosi se utrdijo; vsak sprejme svojo vlogi in si čimbolj prizadeva za izvedbo projekta)
Odnosi se hitreje stabilizirajo, če so bili člani vključeni s svojim pristankom, če so motivirani in če nimajo zadržkov do ostalih članov skupine in do naloge, ki jo morajo opraviti.
15. Opiši strojno birokracijo in delitveno obliko organizacije dela. Katera sta ustrezna koordinacijska mehanizma? Ali sta ta dva načina dela primerna za razvoj programske opreme, in če, za kakšne projekte? Kakšna je vloga vodje? (str. 56)
- Strojna birokracija: kadar je vsebina dela natanko določena, je možno delo organizirati s pomočjo natančnih navodil (npr. delo za tekočim trakom). Izobrazba ni nujna...potrebna pa je priučitev na delovno mesto. Koordinacijski mehanizem je standardizacija delovnega procesa
- Delitvena oblika: kadar je možno predvideti natančne rezulta je delo možno razdeliti na več skupin, ki imajo proste roke pri odločanju. Mehanizem je standardizacija delovnih rezultatov.
16a.) 5 organizacijskih struktur
16b.) Definiraj osnovne metode koordinacije in načinov upravljanja! Kateri stil upravljanja je najbolj primeren za razvoj produktov, ki zahtevajo veliko interakcij z uporabniki in spremenjen način dela. – vzajemno prilagajanje (56)
- Preprosta struktura – skupino delavcev nadzoruje en ali več nadrejenih. Delavci ne potrebujejo formalne izobrazbe ne izkušenj pri delu. Koordinacijska oblika je direktni nadzor.
- Strojna birokracija – kadar je vsebina dela točno določena in jo je možno opisati s pomočjo natančnih navodil, izobrazba ni potrebna, potrebna pa je priučitev za delovno mesto -koordinacijski mehanizem je standardizacija delovnega procesa.
- Delitvena oblika – kadar je možno približno pričakovati rezultate dela, razdelimo delo na več skupin, ki imajo proste roke pri izvajanju. Koordinacijski mehanizem je standardizacija delovnih rezultatov.
- Profesionalna birokracija – Ni standardiziranega postopka za delo. Ponavadi se koordinacija lahko doseže z standardno izobrazbo (zdravniki).
- Pripadnost – Ko rešujemo inovativne probleme, kjer je prisotnih veliko strokovnjakov in kjer ne moremo natančno predvideti rezultatov, je koordinacijska metoda vzajemno prilagajanje.
17. Načini reševanja konfliktov (64, 4)
- Glasovanje (večina odloči o tem, kdo ima prav. Slabost je ponavadi v tem, da preglasovana oseba ne spremeni svojega mnenja in prav tako je glasovanje pod vplivom vplivnih članov)
- Pogovori med člani (predstavitev argumentov obeh strani, pri čemer se ponavadi najde neko skupno rešitev)
- Odstopitev od pogajalskih izhodišč (če ena stranka odstopi od kakšnega od svojih pogajalskih izhodišč in ne zahteva, da to naredi tudi druga stran. Je prikaz dobre volje, ki lahko pripelje k zgladitvi konflikta)
- Uresničevanje obojestranskih koristi (obe stranke najdeta nek skupni cilj, ki je po rangu višji od stopnje pomembnosti konflikta, kar vodi v hitro rešitev konflikta)
18. Naštej in opiši vsaj 4 osnovna načela za organizacijo projektnih skupin (67)
- bolje izbrati manjše število, toda dobrih posameznikov (velike skupine manj produktivne, (pre)več komuniciranja -> večja možnost napak)
- posameznikove sposobnosti je treba uskladiti z razpoložljivimi delovnimi nalogami (dober programer morda skozi napredovanje pride do položaja, kjer ni več kompetenten za svoje delo)
- Na dolgi rok se splača vlagati v ljudi, da lahko razvijejo vse svoje potenciale (če se posamezniki specializirajo preozko, lahko postanejo eksperti le za eno področje, kar je včasih slabo)
- skupina naj bo uravnovešena (sami "zvezdniki" ne delujejo vedno najbolj učinkovito)
19. Naštej in kratko opiši štiri korake, po katerih poteka mrežno načrtovanje!
- Analiza strukture projekta (cilj je narediti mrežni diagram z vsemi aktivnostmi)
- Časovna analiza (v diagram vnesemo ocene trajanja, najdemo kritično pot)
- Analiza zmogljivosti (vnesemo ocene potrebnih zmogljivosti za vsako aktivnost, cilj je odkriti kaj vse in koliko potrebujemo)
- Analiza stroškov (vnesemo stroške in optimiziramo diagram) (69)
20. Kako in po kakšnih načelih naj bo definirana posamezna aktivnost v mrežnem diagramu?
Aktivnost naj bo definirana tako da bo možno:
- določiti izvajalca in odgovorne osebe,
- določiti raven vodenja izvajalskih enot,
- načrtovati obremenitve vseh izvajalskih enot oziroma vseh zmogljivosti,
- načrtovati stroške tako, do bo možno enolično vršiti obračun po aktivnostih,
- določiti čas trajanja,
- enolično ugotoviti rezultate,
- določiti medsebojno odvisnost aktivnosti,
- določiti verjetnost realizacije aktivnosti in dosego ciljev projekta,
- določiti potrebne zmogljivosti.
- Definicija aktivnosti "zavisi" predvsem od narave projekta. Aktivnosti naj bodo čim bolj zaokrožene delovne naloge z jasnimi in merljivimi cilji, za katere potrebujemo določeno vrsto zmogljivosti, časa in sredstev. Dva osnovna načina razdelitve projekta na aktivnosti sta funkcijsko in objektno strukturiranje.
- funkcijsko (glede na vrsto dela npr. analiza, načrtovanje, kodiranje, testiranje)
- objektno (razdeljevanje v podprojekte, dokler ne pridemo do opravil, ki tvorijo naravno in funkcijsko zaokrožene celote) (73)
21. Kaj pomeni kratica WBS pri mrežnem načrtovanju in v kateri fazi mrežnega načrtovanja se ta metoda uporablja? Podaj preprost primer za WBS
- WBS (Work Breakdown Structure) je razširjena objektno zasnovana metoda za definiranje potrebnega dela
- Cilji projekta v obliki konkretnih izdelkov ali storitev so postavljeni na vrh drevesnega diagrama.
- Vsak segment nato postopoma delimo na ožje podcilje toliko časa, dokler ne pridemo do skupin opravil, ki tvorijo naravno (funkcijsko) zaključene delovne celote. Za vsako od teh naravnih delovnih celot nato definiramo potrebno aktivnost
22. Kakšne so razlike med aktivnostno in dogodkovno mrežo?
V dogodkovnih mrežah so dogodki postavljeni v vozlišča grafa, aktivnosti pa so prikazane kot povezave med posameznimi dogodki. V aktivnostnih mrežah so aktivnosti postavljene v vozlišča grafa, povezave pa določajo vrstni red aktivnosti. Prednosti aktivnostne mreže:
- strukturo je laže razumeti,
- predstavitev projekta potrebuje manjše število elementov,
- ne potrebuje navideznih povezav (dogodkovna mreža ima navidezne aktivnosti),
- logične napake se lažje odkrijejo,
- vnašanje podatkov je lažje,
- spremljanje izvajanja projekta je lažje, ker sledimo samo aktivnostim. (78)
23. Naštej in opiši časovne rezerve. Kdaj je skupna enaka varnostni in kdaj neodvisni?
- Skupna rezerva aktivnosti i-j Ttd = tj(1) – ti(0) – tij >= 0 –> odvisna od tako od predhodnih aktivnosti, kot tudi od aktivnosti, ki sledijo.
- Prosta rezerva aktivnosti i-j Tpd = tj (0) – ti (0) – tij >= 0 -> odvisna le od aktivnosti, ki sledijo.
- Varnostna rezerva aktivnosti i-j Tvd = tj (1) – ti (1) - tij >= 0 -> odvisna le od predhodnih aktivnosti.
- Neodvisna rezerva aktivnosti i-j Tnd = tj (0) – ti (1) - tij >= 0 ->neodvisna od predhodnih ter sledečih aktivnosti.
- Kritične aktivnosti nimajo nobene časovne rezerve! (84)
24. Kateri sta najpogostejši omejitvi pri optimizaciji mrežnega načrta? (92) Kakšno vlogo ima metoda kritične poti?
Zmogljivost in čas. Manjši je čas izdelave nekega velikega projekta večje zmogljivosti (denar) rabimo. In obratno. S kritično potjo odkrijemo od katerih aktivnosti je odvisno celotno trajanje projekta. Če zamuja katera od kritičnih aktivnosti, se zavleče celoten projekt. Ko dobimo kritično pot, mrežo lahko optimiziramo in skrajšamo čas. Pri tem moramo upoštevati, da ne presežemo zmogljivosti, ki jih imamo na voljo. Kadar hočemo skrajšati trajanje neke aktivnosti, moramo povečati zmogljivosti ali izbrati dražje rešitve. Običajno je skrajšanje aktivnosti povezano z večjimi stroški. Povezava med časom trajanja aktivnosti in njenimi stroški je predmet metode kritične poti.
25. Nariši AOA diagram in projekt skrajšaj za 4 tedne po metodi kritičnih poti (tabela cen, trajanj aktivnosti podana).
Podana je bila tabela s strani 101-zgoraj s prosojnic, čas trajanja projekta je potrebno skrajšati za 4 tedne z metodo kritične poti. Narisati je potrebno dogodkovni diagram.
26. Naštej tri osnovne vrste meril, ki se jih uporablja pri načrtovanju programske opreme.
- Stabilnost produkta – natančnost definicije zahtev
- Stabilnost razvojnega procesa – stopnja kontrole in natančnost meritev razvoja
- Stabilnost zmogljivosti – razpoložljivost razvijalcev (108)
27. Štirje načini razvoja programske opreme (PO), glede na problematiko vodenja (pros. 109)
- Problem realizacije (jasne zahteve, vemo kako tečejo procesi, imamo kontrolo, dovolj zmogljivosti; vse usmerimo v realizacijo – direktni nadzor in klasični razvojni cikel)
- Problem razvrstitve (za razliko od prvega nimamo dovolj zmogljivosti, da bi to delo izpeljali – standardizacija delovnega procesa in klasični razvojni cikel)
- Problem načrtovanja (zahteve jasne, ne vemo pa kako jih bomo uresničili in kaj potrebujemo - postopni razvoj)
- Problem iskanja (zahteve nejasne, ni mogoče definirati postopka, potrebnih zmogljivosti - s pomočjo prototipov in vzajemno prilagajanje)
28. Naštej pet zrelostnih stopenj razvojnih skupin po Humphreyu. (110, 6)
- Začetna stopnja (brez formalnih postopkov, projektnih načrtov, ocenjevanja stroškov - ad hoc).
- Ponovljiva stopnja (skupina na kontroliran način določa načrte in aktivnosti)
- Določljiva stopnja (skupina dovolj dobre temelje, da se lahko stalno izpopolnjuje)
- Vodljiva stopnja (kvantitativni podatki o poteku razvoja se rutinsko zbirajo in analizirajo)
- Optimizirajoča stopnja (stabilna osnova za izboljšave samega procesa razvoja. Medtem ko je pozornost na nižjih nivojih osredotočena na izboljšave produkta, je tu v središču pozornosti sam proces razvoja.)
29. Zakaj je ocenjevanje stroškov pri načrtovanju projektov razvoja programske opreme težavno?
Ker so stroški v večini povezani s časom. Glede na abstraktnost programiranja težko določimo oz. ocenimo čas potreben za dokončanje projekta. Prav tako je problem, da povečevanje števila programerjev na projektu ne pomeni tudi krajše izvedbe. Poznamo več meril za ocenjevanje stroškov (EM – engineer month, LOC – lines of code, metoda funkcijskih točk). Lahko uporabimo tudi različne empirične in dekompozicijske metode. Večja podjetja si pri ocenjevanju pomagajo z izkušnjami iz preteklih projektov, ki jih pridobijo ob zaključku teh projektov na t.i. "post mortem" sestankih. Največkrat vodi evidenco teh podatkov QM – Quality Manager. (knjiga 105, pros. 114)
30. Definiraj razcepitveno in ne-razcepitveno (kompleksno) delo. Kakšne vrste dela je razvoj programske opreme in zakaj?
Razcepitveno bi lahko definirali kot delo, kjer povečevanje števila delavcev, skrajšuje čas izvedbe dela. Nerazcepitveno delo je tisto delo, za katerega je značilno, da obstaja določeno število ljudi, kjer je čas izvedbe dela minimalen. Če se število ljudi še vedno povečuje, se čas izvedbe dela podaljšuje. Razvoj programske opreme spada v nerazcepitveno delo. Dejstvo je namreč, da prehod preko nekega določenega števila ljudi na projektu upočasnjuje razvoj projekta. Veliko časa se namreč porabi za komunikacijo. Prav tako je storilnost v velikih skupinah programerjev manjša.
31. Zakaj se linearni modeli za ocenjevanje dela pri razvoju programske opreme niso uveljavili?
Na izbor koeficientov in konstant je vplivala zbirka projektov, na katerih je bil model razvit. Neprimernost mešanja različnih tipov v enačbi (Boolove vrednosti, cela števila, procenti) zavajajoča natančnost decimalnih mest pri koeficientih (knjiga 108)
32a. Osnovni in srednji COCOMO model , kaj potrebuješ, če želiš izračunati konstante
32b. Kakšne so tipične vrednosti konstant b in c korekcijskih faktorjev v nelinearnem modelu ocenjevanja dela in zakaj? (120, 6)
E = bKLOC^c (določiti moramo, ali je sistem organski, vgrajen ali polpovezan)
KLOC – lines of code/1000, b in c – korekcijska faktorja
Organski - b=2.4, c=1.05 (dela in razvija relativno majhna skupina v znanem okolju)
Polpovezan - b=3.0, c=1.12 (vmesna stopnja med organskim in vgrajenim)
Vgrajen - b=3.6, c=1.20 (sistem je vgrajen v zelo nefleksibilno okolje, veliko omejitev, npr. nadzor zračnega prometa)
Osnovna enačba je izpeljana na osnovi preteklih projektov. Osnovni faktor je obseg dela – velikost programske opreme, ki je izrazen s KLOC. Korekcijski faktorji samo uravnavajo to vrednost. Če gre za neizkušeno skupino, je b npr. 1.5, pri zelo izkušeni skupini pa je b lahko tudi 0.6. Če je c > 1, se delo draži s tem ko se veča obseg dela – pri programiranju se poveča kompleksnost programske opreme. Modele je smiselno uporabiti šele, ko faktorje prilagodimo projektu na podlagi analize preteklih projektov. Srednji COCOMO vpeljuje v enačbo še 15 korekcijskih faktorjev.
33. Opiši osnovni COCOMO model ter metodo ocenjevanja na osnaovi funkcijskih točk
- osnova za točkovanje je število funkcij ali funkcijskih primitivnih operacij - FP
- kompleksnost funkcije je odvisna od števila vhodnih in izhodnih elementov - TC
- kompleksnost se upošteva s korekcijskimi faktorji α s katerimi se množi izhodiščna vrednost za celo množico funkcij
- FP' = ∑ αi x TCi x log2(TCi)
- delo (E) potrebno za razvoj programske opreme je E = aFP'b, kjer sta a in b konstanti, določeni na osnovi preteklih projektov
34. Razloži konstante in korekcijske faktorje (ni treba naštevati tistih dolgih tabel) v nelinearni enačbi, za ugotavljanje količine dela/stroškov/trajanja programerskega projekta;
če je enačba E=a+b*KLOC^2, iz dveh parov (E, KLOC) izračunaj a, b in dobi E za 3. KLOC; Nelinearni model E=(a+bKLOC^c)f(x1,...,xn).
35. Katere so osnovne razlike med Boehmovim in Walston-Felixovim za odnos med velikostjo projekta in deloma na projektu?
- Halstead E = 0.7KLOC^1.50 (a=0, b=0.7, c=1.5)
- Boehm E = 2.4KLOC^1.05 (a=0, b=2.4, c=1.05)
- Walston-Felix E = 5.2KLOC^0.91 (a=0, b=5.2, c=0.91)
Razlike so posledica različnih projektov, ki so služili kot izhodišče za sintezo modelov. Pri Walston-Felixovem modelu parameter c zavzema vrednost manjšo od 1, kar pomeni, da z večanjem obsega dela pada cena dela oz. da je čas izdelave krajši. To je drugače značilno za industrijske produkte, kjer z večanjem serije pada cena/čas za izdelavo na enoto proizvoda. Za programiranje je bolj smiseln Boehmov model – da je c>1, saj se z večanjem obsega kode veča tudi kompleksnost programa.
36. Opiši ugotavljanje količine dela/stroškov/trajanja programerskega projekta s funkcijskimi točkami, prednosti in slabosti. (str 122)
Osnova za točkovanje je število funkcij ali funkcijskih primitivnih operacij; kompleksnost je odvisna od števila vhodnih in izhodnih elementov.
Slabost: Metoda je subjektivno merilo, ki ga ni mogoče nedvoumno preveriti.
37. Opiši McCallovo shemo za opredeljevanje kvalitete programske opreme. (124)
- Delovanje produkta (pravilnost, zanesljivost, učinkovitost, varnost, uporabnost,)
- Revizija produkta (možnost vzdrževanja, možnost testiranja, fleksibilnost)
- Tranzicija produkta (prenosljivost, ponovna uporabnost, združljivost)
- Kvaliteta nujna, da kompleksni sistemi sploh lahko delajo; od kvalitete programske opreme so lahko odvisna človeška življenja. Kvaliteto je drugače težko izmeriti.
38. Naštej Garvinovih pet definicij kvalitete programske opreme. (126)
- Transcendentalna definicija (notranja kvaliteta)
- Uporabniška definicija (uporabnost sistema)
- Definicija na osnovi produkta (lastnosti prog. opreme)
- Definicija na osnovi specifikacije (ujemanje s specifikacijo)
- Vrednostna definicija (stroški in dobički pri načrtovanju in vodenju projekta)
39. Katera sta osnovna načina za zagotavljanje kvalitete, kateri je modernejši?
- Preveriti (testirati) kvaliteto gotovega izdelka,
- Organizirati tak razvojni oziroma produkcijski proces, da bo izdelek zagotovo ustrezal določenim kriterijem kvalitete (za PO najbolj primeren ISO 9000-3), ki je modernejši (127)
40a.) Kaj je osnovna naloga analize zahtev? Opiši različne metode analize težav, ki se lahko pojavijo pri posameznih metodah.
40b.) Naštej in opiši glavne metode za zbiranje informacij pri analizi projektov.
Osnovna naloga analize zahteve je izdelava specifikacije zahtev. Problemi, ki se pojavljajo pri izdelavi zahtev, so predvsem, da naročnik ne zna točno povedati, kaj bi rad. Veliko časa pri takšnem projektu zato porabimo za spreminjanje in dodajanje novih zahtev. Podajanje zahtev je problematično tudi iz vidika kratkoročnega spomina, preteklih izkušenj, izobrazbe... Problem rešujemo s pomočjo naslednjih metod:
- spraševanje (naročnika sprašujemo, kaj si želi od novega sistema. Spraševanje je lahko v obliki vprašalnika ali brain-storminga)
- izpeljava iz obstoječega sistema (analizo začnemo na podlagi nekega že obstoječega sistema ali sistema, ki je opisan v literaturi)
- sinteza iz lastnosti okolice (procesna analiza - zahteve definiramo na podlagi analize okolice, ki pa mora odražati zakonitosti okolja, kjer se bo programska oprema uporabljala)
- izdelava prototipov (skozi nekaj generacij prototipov pridemo do specifikacije) (131)
41. Kateri dokument je rezultat analize zahtev projekta, štiri priporočila IEEE zanj (133, 7).
Produkt analize je specifikacija zahtev, ki mora biti:
- enoumna (mora biti enolična za interpretacijo, kar je z naravnim jezikom težko doseči)
- preverljiva (možno mora biti preveriti, če so zahteve uresničene)
- popolna (opisane morajo biti vse pomembne zahteve v zvezi s funkcionalnostjo, zmogljivostjo in omejitvami. Če kakšne stvari še ni mogoče napisati, mora biti napisano, kdaj se bo to zgodilo)
- konsistentna (v njej ne sme biti neskladij ali nasprotnih izjav)
- spremenljiva (programska oprema odraža realnost, s katero se bo spreminjala tudi specifikacija. Vnos sprememb mora biti enostaven).
- sledljiva (vzrok za vsako zahtevo mora biti natanko znan)
- uporabna (specifikacija mora biti uporabna, tudi ko sistem že deluje)
Produkt analize je predvsem specifikacija po kateri bomo razvili nek projekt/zadovoljili ciljem projekta/naloge.
42. Opiši analizo na osnovi podatkovnega toka. Kateri so simboli za označevanje diagramov podatkovnega toka? (knjiga 127, pros. 137)
Analiziramo procese, tako da opišemo zunanje entitete, ki nastopajo, katere tokove dajejo v sistem... Transformacije pretvarjajo vhodne podatke v izhodne (v drugo obliko). Simboli: kvadrat (zunanja entiteta), krog (transformacija), puščica (podatkovni tok), "dvojna črta" (podatkovna shramba).
43. Pojasni razliko med verifikacijo in validacijo. Kako se te dve obliki testiranja vključujeta v različnih fazah testiranja.
Uspešnost vsake razvojne faze lahko ugotovimo z recenzijskimi sestanki, kjer se v glavnem ugotavlja dve dejstvi.
- Verifikacija = Ali se programska oprema gradi pravilno. (ali sem prav napisal kodo?)
- Validacija = Ali programska oprema ustreza osnovnim zahtevam t.j. ali gradimo pravi produkt. (ali sem prav zastavil problem?)
Verifikacija se izvaja ob vsakem buildu programske opreme. Težje napake gredo znova skozi fazi načrtovanja in implementacije. Z večanjem buildov se tudi veča število regresijskih testov, kar povečuje naše zaupanje v pravilno delovanje programske opreme. Ko število napak pride pod nivo sprejemljivosti (acceptance criteria), se izvede še validacija programske opreme glede na specifikacijo. Pri spiralnem razvoju programske opreme bi se validacija opravljala tudi ob vsaki iteraciji skozi faze projekta. (143, 7)
44. Načelo modularnosti, zakaj je potrebno, kakšna je njegova vsebina, opiši modularnost, kakšne lastnosti naj imajo moduli (155, 8)
glej točko 44
45. Podani sta bili funkciji za ceno združevanja modulov in ceno pisanja modulov, poiskati je bilo treba optimalno število modulov in ceno v tem primeru (155)
46. Opisi modularnost (pros. 155), kakšne lastnosti naj imajo moduli?
Modularnost je načelo programske arhitekture, ki razdeli celoto na posamezne module, ki povezani skupaj tvorijo celoto. Pogosto je z modularnostjo povezana tudi razporeditev posameznih modulov na različne plasti (nivoje) v programski arhitekturi. Programska arhitektura razdeli sistem na module in pove, kako so med seboj povezani. Hkrati omogoča razumevanje kompleksnih sistemov, ker je lažje razumeti posamezne module, kot pa celoto. Tudi tukaj velja pravilo deli in vladaj. Moduli morajo imeti veliko notranjo enotnost in majhno soodvisnost.
- Notranja enotnost – kaj vse ta modul upravlja?
- Soodvisnost modulov – kako se moduli povezujejo
47. Enkapsulacija (napiši tudi primer v C/C++ ali Pascal).
Enkapsulacija pomeni skrivanje podatkov razreda. S tem dosežemo notranjo stabilnost razreda, ker navzven ponudimo samo določene procedure/člane. Do zaščitenih članov zunanje okolje nima dostopa. Enkapsulacija je pri objektnem programiranju realizirana v obliki lokalnih spremenljivk. Java pozna več vrst enkapsulacije (public, protected, private, na nivoju paketa). (skrivanje podatkov – 159)
class Car{ private int maxSpeed; public void setMaxSpeed(int x){ maxSpeed=x; } public int getMaxSpeed(){ return maxSpeed; } }
48. Opiši načrtovanje na osnovi pretoka podatkov! (162) Za kakšne probleme je ta pristop primeren? Kakšno notacijo se uporablja?
Načrtovanje na osnovi pretoka podatkov naredi programsko arhitekturo na osnovi diagrama pretoka podatkov, ki je nastal pri analizi. Diagram pretoka podatkov je lahko dveh značajev:
- transformacijski značaj (podatki se samo transformirajo)
- transakcijski značaj (obstaja točka v diagramu, kjer se podatki ločijo)
Pristop je primeren za probleme, kjer sistem prejme vhodne podatke, potem pa jih s pomočjo strojne opreme, programske opreme in uporabnikovega posredovanja transformira v izhodne podatke. Za notacijo se uporablja struktura regularnih izrazov.
49. Opisi 'dedovanje' v programiranju (pomen pri objektno orientiranem razvoju).
Dedovanje se uporablja pri objektnem programiranju. Pri dedovanju gre za koncept, ki posnema realni svet in sicer, da vsak objekt izhaja iz nekega baznega objekta. Tako lahko to pokažemo na primeru razred pes, katerega bazni razred je sesalec, prav tako pa je pes bazni razred za razred pekinezer. To sta t.i. primera generalizacije in specializacije. Objekt predstavlja instanco razreda. Dedovanje uporabljamo pri objektno orientirani analizi. (167)
50. Kaj vsebuje objekt? Razlika med objektom in razredom. Naštej in pojasni korake objektno orientirane analize/načrtovanja. (knjiga 159, pros. 167)
Objekti so primerki nekega razreda in imajo določene lastnosti in atribute. Objekti z enakimi atributi so pripadniki istega razreda. Analiza in načrtovanje:
- Identifikacija objektov - poskušamo našteti glavne fizične objekte, organizacijske enote, vloge, ki jih igrajo uporabniki načrtovanega sistema.
- Določitev njihovih atributov in operacij - atributi določajo stanje objekta. Torej poskušamo opisati vse lastnosti, ki jih imajo te objekti.
- Določanje hierarhije objektov - ta je dostikrat že določena v realnem svetu. Iskanje skupnega predhodnika, generalizacija / specializacija; Najbolj splošni objekti so pogosto abstraktni objekti, ki nimajo nobene instance.
51. Opiši mentalni model, sliko sistema in konceptualni model pri vmesnikih (str. 180)
- Mentalni model - uporabnikov mentalni model si ustvari uporabnik na osnovi izobrazbe, znanja o sistemu in problemski domeni, znanja o drugih sistemih in izkušenj. Mentalni model pogosto v tehničnem smislu ni pravilen in lahko vsebuje napačne predstave in ni popoln.
- Slika sistema – elementi, s katerimi pride uporabnik v stik (fizični izgled, način interakcije)
- Konceptualni model - tehnično pravilen model računalniškega sistema, ki so ga izdelali načrtovalci in tisti, ki skrbijo za šolanje uporabnikov. Z uporabniškega vidika je konceptualni sistem popoln in konsistenten. (to se nanaša na uporabniške vmesnike)
52. Naštej in opiši ročne metode testiranja ali statične metode testiranja: (188)
- Branje: lahko sami, a bolje da nekdo drug opravi pregled in branje naše kode (lahko tudi t.i. peer review – anonimna recenzija)
- Sledenje in preverjanje: preverjanje v obliki formalnih recenzijskih sestankov – kodo se bere in razlaga; sledenje s pomočjo testnih podatkov, ti pa so seveda enostavni
- Postopna abstrakcija: iz programske kode skušamo v nekaj korakih prebrati funkcijo, ki jo ta koda implementira. To lahko preverimo s specifikacijo oz. osnovnim načrtom.
53. Opisi metodo testiranja glavnih poti. Kaj je ciklomatična kompleksnost in kako jo izračunamo? (knjiga 184, prosojnice 190)
Namen testiranja glavnih poti je, da se vsi ukazi izvedejo vsaj enkrat oz. da s testnimi primeri pokrijemo vso kodo. Ciklomatična kompleksnost predstavlja število neodvisnih poti v grafu. Označimo jo z V(G), izračunamo pa kot:
- število predikatnih vozlišč P + 1
- število regij (območij omejenih s povezavami)
- število robov E – število vozlišč N + 2
54. V kateri dve osnovni skupini delimo metode a testiranje programske opreme? Kakšne lastnosti so značilne za posamezno skupino (189, 10)
- Metode bele skrinjice:
- strukturna analiza (testiranje glavnih poti, testiranje zank),
- ročne metode (branje, sledenje in preverjanje, postopna abstrakcija)
- Metode črne skrinjice:
- funkcionalna analiza (ekvivalentne particije, mejne vrednosti),
- dokazovanje pravilnosti
55. Testiranje integracije
- Testiranje med integracijo poteka po principu črne skrinjice — pripravimo vhodne podatke in nato primerjamo dejanske izhodne podatke s pričakovanimi
- Integracija mora potekati postopno: vsakokrat, ko sistem razširimo za en modul, zopet ponovimo testiranje - regresijsko testiranje
- Ce bi hkrati združili več modulov ali celo sestavili celoten sistem, bi le težko izolirali vzroke za napake
- Integracija lahko poteka od zgoraj navzdol ali od spodaj navzgor
56. Aktivnosti pri vzdrževanju programske opreme: naštej in opiši (202).
- Popravki za odpravljanje napak (20%)
- Prilagajanje programske opreme spremembam v okolju, na drugo vrsto strojne ali sistemske programske opreme. Pri tem se funkcionalnost programske opreme ne spremeni. (25%)
- Razširitev zmogljivosti programske opreme se ukvarja z novimi ali spremenjenimi zahtevami. Spremeniti moramo funkcije sistema, izboljšamo lahko zmogljivost sistema ali uporabniški vmesnik (50%).
- Preventivno vzdrževanje programske opreme je namenjeno spremembam, ki izboljšajo možnost vzdrževanja (dopolnjevanje dokumentacije, izboljšava programske strukture…) (5%)
57. Napiši modula add in multiply, ter modul main, ki uporablja funkcijo add iz modula add in funkcijo multiply iz modula multiply. Vsakemu modulu pripada .c in .h. Napiši makefile s katerim bi ta program prevedli.
58. Kako pride do CVS konflikta in kako ga uporabniki rešimo?
59. Kako dela 'make' ?
60. Kaj dela ukaz touch; kaj stori make, če touch uporabimo na eni izmed datotek v makefileu in ga ponovno poženemo (makefile je podan)?
Touch spremeni timestamp datoteke. Če poženemo make, bo ta ugotovil, da je timestamp datotek, ki so odvisne od spremenjene datoteke, starejši. To bo zanj povod, da izvede ponovno prevajanje datoteke glede na pravila, ki so določena v Makefile datoteki.
61. DFS (psevdokoda in primer izvajanja na grafu velikosti 8 vozlišč)
search(graph g){ for(each v in N) mark[v] = not_visited; for(each v in N) if(mark[v] = not_visited) dfs(v); } dfs(node v){ mark[v] = visited; for(every node w adjacent to v) if(mark[w] = not_visited) dfs(w); }
62. Na primeru, napisanem v programskem jeziku Pascal, C ali C++, prikazi metodo/koncept skrivanja informacij.
TTest = class private i : integer; public property Counter : integer read i; end;
Gre za 'skrivanje' informacij/funkcij/procedur oz. metod v objektih. To je zgolj lastnost objektno orientiranih programskih jezikov. Tako neka metoda nekega drugega razreda ne more dostopati do skritih metod/informacij nekega tretjega razreda, temveč le preko javnih metod in lastnosti...
63. Kako sta povezana principa abstrakcije in modularnosti pri načrtovanju programske opreme?
(glej točko 44 in 45)
64. Napisi nekaj primerov neuniformnosti v kakih programskih jezikih.
pascal:
proc Test(); var str : string; var i : integer; begin str := 'Prikaz ' + 'unije'; i := 10 + 10; end;
c:
{ char *ch; ch = (char *) malloc((int) (sizeof(int)/(2+2))); }
java:
{ int i = 0; int j = 0; int k = ++i + j--; }
primeri, ko se za različne operacije uporablja isti znak '+' za vsoto množic kot za vsoto števil. (to bi lahko kdo izpopolnil). Zaradi pomanjkanja simbolov v naboru ASCII znakov, tako isti znaki označujejo različne operacije (ang. operator overloading) (175, 9)
65. Katere bistvene stvari mora vedeti vsak član skupine za razvoj programske opreme?
Kaj, kdo, do kdaj, kako.
66. Opiši metodo SCRUM za vodenje projektov