OHJELMISTOTUOTANTO, SYKSY 1997


Syksyllä 1997 projektin ja siten wanhamuotoisen Ohjelmistotuotannon suorittaneet.


Kurssin tulokset on julkistettu.

2. välikokeen arvosteluun voi tutustua keskiviikkona 7.1.1998 klo 12.00-12.30 huoneessa D323. Sen jälkeen koepaperit ovat Lilli Nenosen huostassa tammikuun ajan mahdollista myöhempää silmäilyä varten.

Viimeinen luento oli perjantaina 5.12.


Kevään 1998 Ohjelmistotuotantoprojektien alustava ryhmäjako on valmistunut.


2. välikoe on perjantaina 12.12. klo 14-17 Auditoriossa.

(Huom! Koe kestää siis normaalit 3 tuntia eikä 4 tuntia, kuten alun perin ilmoitettiin.)

Koealueena on kaikki se, mikä ei kuulunut 1. välikokeeseen:


Kevätlukukaudella 1998 on loppukoe perjantaina 30.1. klo 14-18 Auditoriossa (eikä 13.2., kuten alun perin ilmoitettiin).

Perjantaina 28.11 ei ole normaalia luentoa, vaan kurssin opiskelijoilla on mahdollisuus tulla seuraamaan laitoksen FRED-tutkimushankkeen seminaaria (sali A 414), jonka aiheena ovat suunnittelumallit (design patterns) ja komponentit. (Seminaari ei sisälly kurssilla tentittävään materiaaliin.) Ohjelma:

10.15-11 Johan Wikman (Nokia Tutkimuskeskus): Suunnittelumallit C++-ohjelmistokehityksessä
11-12 Esa Karell (Sun): Javan komponenttiteknologia
12-13 Tauko
13-14 Petri Salonen (Infomanager): Informaatiojärjestelmän toteuttaminen Javalla ja komponenttiteknologialla
14-15 Jari Mielonen (ICL): Komponenttien kaupallistaminen

1. välikoe: tiistai 4.11. klo 16-20, Porthania I:

TULOKSET.

Arvosteluun voi tutustua torstaina 27.11 klo 16.00-17.00 huoneessa D 323.

Koealue:


Syksyllä 1997 toimivat Ohjelmistotuotantoprojektit

.

Tenteissä hyväksytyt 12.5.1997, 14.5.1997, 13.6.1997, 15.8.1997 ja 17.10.1997.


Harjoitus 1 (22.-26.9.)

  1. Tutki sanomalehtien työpaikkailmoituksia. Millaisia ominaisuuksia ja taitoja niissä vaaditaan ohjelmistojen kehittäjiltä? Vaaditaanko heiltä jotakin tiettyä koulutusta?
  2. Ohjelmistotuotannon tulisi monien mielestä olla yhtä systemaattinen, ammattimainen ja standardoitu insinööriala kuin esimerkiksi rakennusteollisuus. Mitä yhteistä ja mitä eroa on ohjelmistojen ja talojen valmistamisella? Entä ohjelmistojen ja talojen käyttämisellä?
  3. Nopeuttaakseen tuotantolinjaansa innovatiivinen ohjelmistoyritys jättää asiakkaille tuottamansa ohjelmistot kommentoimatta ja dokumentoimatta. Miksi yritys ajautuu ennen pitkää vararikkoon?
  4. Pienet ohjelmat (kuten laitoksen laboratoriotyöt) kirjoitetaan useimmiten yhden henkilön projekteina, kun taas suuremmat ohjelmistot (kuten laitoksen Ohjelmistotuotantoprojekteissa tuotettavat) laaditaan ryhmätöinä. Miten työskentely eroaa näissä kahdessa projektimuodossa? Kummassa olisit mieluummin ohjelmoijana, yhden hengen projektissa vai ryhmäprojektissa, ja miksi?

Harjoitus 2 (29.9.-3.10.)

  1. Millaisten atk-järjestelmien kehittämiseen soveltuu parhaiten (a) vesiputousmalli, (b) prototyyppimalli, (c) spiraalimalli ja (d) evo-malli?
  2. Yliopisto haluaa ottaa käyttöön kokonaisvaltaisen opiskelijoiden hallintajärjestelmän, joka sisältää opiskelijoiden henkilötiedot sekä heidän kurssi- ja tutkintosuorituksensa. Käyttöönotolle on 3 vaihtoehtoa: Millaisia riskejä liittyy näihin eri vaihtoehtoihin? Miten riskianalyysiä voidaan käyttää apuna valittaessa jokin vaihtoehto opiskelijajärjestelmän kehittämisstrategiaksi?
  3. Luennolla on lueteltu joukko ohjelmiston laatutekijöitä jaettuna kolmeen kategoriaan, sopeutuvuuteen, muutosten sietokykyyn ja toiminnallisuuteen. Millä mittareilla ja miten tarkasti voidaan näitä laatutekijöitä (siirrettävyys, uudelleenkäytettävyys, ..., käytettävyys) arvioida?
  4. Millainen on mielestäsi laadukas kurssi Helsingin yliopiston tietojenkäsittelytieteen laitoksella? Miten kurssien laatua voitaisiin mitata?

Viikolla 41 (6.-10.10.1997) ei ole harjoituksia!!


Harjoitus 3 (13.-17.10.)

  1. Millaisten ohjelmistojen kehittämiseen olioperustaiset menetelmät soveltuvat luontevasti ja miksi? Millaisten ohjelmistojen kehittämiseen ne taas eivät kovin hyvin sovellu (miksi)?
  2. Mallinna OMT-menetelmän luokkakaaviona (a) suunnatut verkot ja (b) suuntaamattomat verkot.
  3. Onko seuraavissa suhdeilmaisuissa kyse yleistys/erikoistus-luokittelusta (perintä), koosteesta (aggregaatio) vaiko yleisestä assosiaatiosta? Piirrä kustakin kohdasta vastaava OMT-luokkakaavio.
    (a) Laitoksella on esimies.
    (b) Tiedosto on joko tekstitiedosto tai hakemisto.
    (c) Tutkielmassa on lukuja, joissa on kappaleita, joissa on rivejä, joissa on merkkejä.
    (d) Modeemit ja näppäimistöt ovat I/O-laitteita.
    (e) Autossa on runko, moottori ja pyörät.
    (f) Luokan ominaisuuksia ovat sekä attribuutit että operaatiot.
  4. Alfredo-pizzapuodissa tehtävä tilaus muodostuu pizzoista ja juomista, joita kumpaakin voi tilata kerralla useamman kappaleen. Juomavalikoimasta löytyy alkoholijuomia (olut, siideri) ja limuja (cola, jaffa, kivennäisvesi). Pizzoja on kolmenlaisia: normaaleja pizzoja, pannupizzoja ja kylkiäispizzoja. Normaalipizzoissa on juustoa sekä 1-5 lajia muita täytteitä (jauheliha, salami, kinkku, herkkusieni, tonnikala). Pannupizzoissa on juustoa sekä 1-2 lajia muita täytteitä (salami, sipuli). Kylkiäispizzoissa on muutoin sama täytevalikoima kuin normaaleissa pizzoissa, mutta itse pizzan lisäksi annokseen kuuluu joko salaatti tai kossuvissy. Normaaleja pizzoja ja kylkiäispizzoja on kolmea eri kokoa (small, medium, large), mutta pannupizzoja on vain yhtä kokoa.

    Mallinna Alfredon tilausvalikoima OMT-menetelmän luokkakaaviona.


Harjoitus 4 (20.-24.10.)

  1. Pullonpalautuskoneeseen kuuluu ohjausyksikkö, pulloanturi, hihnayksikkö, summalaskuri, lopetusnappi ja kuitinkirjoittaja. Anna koneen (a) normaalia käyttöä kuvaavat skenaariot, (b) poikkeuksellista käyttöä kuvaavat skenaariot sekä (c) ohjausyksikön tilakaavio.
  2. Leipäkone on oletusarvoisesti lepotilassa. Kone aktivoidaan asettamalla ainessammio raaka-aineineen paistopesään ja panemalla hiiva-annos omaan lokeroonsa. Tämän jälkeen on valittava valmistettavan leivän laji (hiivaleipä, tumma leipä, patonki tai taikina). Valmistus voidaan joko käynnistää leipälajivalinnan jälkeen välittömästi tai viivästää sitä määrittelemällä ajastustoiminnon kautta odotusjakson pituus. Jälkimmäisessä tapauksessa kone aloittaa leivän valmistuksen vasta sen jälkeen, kun odotusjakso on kulunut umpeen. Odotusjakson pituus ilmaistaan erikseen tunteina ja minuutteina. Valmistusvaihe sisältää leipämassan työstämisen (kaikille leipälajeille) ja paistamisen (kaikille leipälajeille paitsi taikinalle). Kone ilmoittaa leivän valmistumisesta äänimerkillä, minkä jälkeen se siirtyy lepotilaan. Mikäli ajastetun odotusjakson tai valmistusvaiheen aikana tulee sähkökatkos, jättää kone tästä ilmoituksen näytölleen ja palaa automaattisesti lepotilaan.
    Kuvaa leipäkoneen toiminta tilakaaviona (eli tila-automaattina tai tilakoneena).
  3. Ns. Harelin tilakaavioissa (statechart) on mm. mahdollista yhdistää joukko tiloja ylitilaksi, esittää rinnakkaisia (ali)tiloja sekä määritellä useille tiloille yhteisiä siirtymiä; kts. esimerkiksi Haikala & Märijärvi (3. painos), luku 6.4. Näitä piirteitä käyttämällä voidaan usein vähentää tilojen ja siirtymien määrää huomattavasti verrattuna normaaliin yksitasoiseen "sarjalliseen" tilakoneeseen. Havainnollista tätä ilmiötä kuvaamalla jokin pieni esimerkkijärjestelmä sekä (a) normaalina sarjallisena tilakoneena että (b) Harelin tilakaaviona.
  4. Opiskelija haluaa palavasti tehdä gradun. Hän saa sopivan aiheen joko professorilta tai laitoksen aihetietokannasta. Tämän jälkeen opiskelija kirjoittaa tieteellisiin lähteisiin perustuvan tutkielmasuunnitelman, jonka kaksi laitoksen määräämää tarkastajaa hyväksyy tai hylkää. Hylätty suunnitelma on korjattava (ja tarkastettava uudelleen), mutta hyväksytyn suunnitelman opiskelija täydentää graduksi lisäämällä siihen työpaikalla aiheesta saamiaan kokemuksia. Tarkastajat (samat kuin suunnitelmalla) hyväksyvät gradun tai palauttavat sen korjattavaksi. Tarkastajat esittävät hyväksytylle gradulle arvosanaa, jota laitoksen esimies puolestaan esittää tiedekunnalle. Tämän jälkeen tiedekunta hyväksyy lopullisesti gradun ja vie sitä koskevat tiedot arvosanan kera opintosuoritusrekisteriin.
    Kuvaa graduprosessi tietovuo- eli tietovirtakaaviona.

Harjoitus 5 (27.-31.10.)

Harjoituksessa pidetään aivoriihi, jonka aikana mallinnetaan annettu järjestelmä CRC-kortteina. Järjestelmän sanallinen kuvaus jaetaan harjoitustilaisuudessa.

Aktiivinen aivoriiheen osallistuminen lasketaan neljän (4) tavallisen harjoitustehtävän suorittamiseksi.


Harjoitus 6 (3.-7.11.)

  1. Esitä (a) kulkukaaviona ja (b) pseudokoodina algoritmi, joka lisää uuden alkion yhteen suuntaan linkitettyyn järjestettyyn listaan omalle paikalleen. Kumpi esitystapa on selkeämpi?
  2. Eräs kytkennän (coupling) muoto on ns. "common coupling", jossa useampi moduuli käyttää (so., lukee ja päivittää) yhteistä globaalia tietovarastoa. Miksi "common coupling" -kytkentää tulisi välttää? Anna esimerkki.
  3. Tarkastellaan luokkahierarkiaa, jossa luokalle C1 on määritelty attribuutit a ja b, C1:n aliluokalle C2 attribuutti c ja C2:n aliluokalle C3 puolestaan attribuutti d (kuva alla). Perinnän vaikutuksesta luokalla C1 on siten attribuutit a ja b, luokalla C2 attribuutit a, b ja c sekä luokalla C3 attribuutit a, b, c ja d.
                           ----------
                           |   C1   |
                           ----------
                           |  a     |
                           |  b     |
                           ----------
                                |
                               / \
                           ----------
                           |   C2   |
                           ----------
                           |  c     |
                           ----------
                                |
                               / \
                           ----------
                           |   C3   |
                           ----------
                           |  d     |
                           ----------
    
    Luokkahierarkiaan halutaan lisätä luokka C4, jolla on attribuutit a, d ja e. Millaiseksi luokkahierarkia on nyt muokattava ja miten on attribuuttien määrittelyt sijoitettava, jotta jokainen attribuutti olisi määritelty vain yhdessä luokassa ja jotta luokilla C1, ..., C4 olisi em. attribuutit mutta ei perinnän kautta saatuja ylimääräisiä attribuutteja? Voit käyttää moniperintää ja ylimääräisiä (abstrakteja) apuluokkia.
  4. Tarkastellaan operaatioiden ns. osittaistoteutuksia, joissa osa koodista jätetään "avoimeksi" kutsumalla virtuaalioperaatioita, joiden varsinainen koodi annetaan vasta aliluokissa. Esimerkkinä naisen ja miehen suorittama tervehtiminen Javalla (mallina K. Koskimies: Pieni oliokirja, esimerkki 4.7):
      abstract class Henkilo {    // osittain toteutettu yliluokka
        protected abstract void loppukaneetti();   // virtuaalioperaatio,
                                                   // ei toteutusta
        public abstract void tervehdi() {    // operaation osittaistoteutus
          System.out.println("Terve pitkästä aikaa!");
          loppukaneetti();    // avoin kohta
        }
      }
    
      class Nainen extends Henkilo {   // Henkilon aliluokka
        protected void loppukaneetti() {   // virtuaalioperaation toteutuskoodi,
                                           // suoritus dynaamisella sidonnalla
          System.out.println("Tule kylään huomenna!");
        }
      }
    
      class Mies extends Henkilo {    // Henkilon aliluokka
        protected void loppukaneetti() {   // virtuaalioperaation toteutuskoodi,
                                           // suoritus dynaamisella sidonnalla
          System.out.println("Nähdään ehkä ensi vuonna tai sitä seuraavana.");
        }
      }
    
    Tulkitse tämäntapaiset operaatioiden osittaistoteutukset yleiseksi suunnittelumalliksi, jonka kuvaat luennolla esitetyllä tavalla (tarkoitus, motivointi, soveltuvuus, rakenne, osallistujat, seuraukset).

Harjoitus 7 (10.-14.11.)

(Kumpikin tehtävä on kahden tavallisen tehtävän arvoinen.)
  1. Haikalan & Märijärven kirjan Ohjelmistotuotanto (3. painos) luvussa 17 "Esimerkki oliomenetelmästä: OMT++" kuvataan Piko-nimisen kortisto-ohjelmiston määrittely- ja suunnitteluvaiheet. Pikolla on ko. luvussa yksinkertainen tekstuaalinen ja komentoriveihin perustuva käyttöliittymä. Hahmottele (esimerkiksi piirrettyjen paperiluonnosten avulla) Pikolle alkuperäistä vastaava graafinen käyttöliittymä.
  2. Etsi valitsemastasi koneesta, laitteesta, järjestelmästä tai ohjelmasta käytettävyysongelmia. Miten ne voitaisiin poistaa?

Harjoitus 8 (17.-21.11.)

Kirjoita asiapitoinen essee (pituudeltaan noin 4 sivua) aiheesta ohjelmistokomponenttien (eli ohjelmakoodin) uudelleenkäyttö. Tarkastele kirjoituksessasi mm. seuraavia kysymyksiä: Tausta-aineistoa löydät mm. Haikalan & Märijärven kirjasta (lähinnä luvusta 14) ja seuraavasta lehtiartikkelista:

C.W.Krueger: Software Reuse. ACM Computing Surveys 24, 2, June 1992, pp. 131-183.

Palauta esseesi harjoitusten pitäjälle (joko suoraan tai vahtimestarin välityksellä) viimeistään perjantaina 21.11 klo 15.00. Viikolla 17.-21.11 ei järjestetä normaaleja harjoitustilaisuuksia!!!

Saat esseestäsi 0-4 harjoituspistettä riippuen esseen laadusta.


Harjoitus 9 (24.-28.11.)

  1. Testattavana on ohjelma, joka lukee mielivaltaisen määrän lämpötiloja (kokonaislukuina) suljetulta väliltä -100 C .. +100 C ja tulostaa niiden keskiarvon. Syötejonon päättää merkki "#". Millaisella syöteaineistolla ohjelma on syytä testata käytettäessä ns. funktionaalista eli mustalaatikkomenetelmää (black-box testing)?
  2. Tarkastellaan luennolla (luku 12.2, kalvo 180) annettua ohjelmaa sekä sen vuokaaviota ja vuoverkkoa. Mitkä verkon täydelliset polut on (vähintään) käytävä läpi, jotta ohjelma tulisi haara- eli päätöskattavasti testatuksi? Millaisella testiaineistolla eli syötemuuttujien X ja Y arvoilla tämä onnistuisi?
  3. Tarkastellaan tietovuotestauksen toimenpidemoodeista d (defined), u (used) ja k (killed) muodostettuja pareja. Esimerkiksi moodipari du tarkoittaa, että muuttujalle sijoitetaan arvo d-solmussa ja ko. arvoa käytetään ensi kertaa jonkin ko. d-solmusta alkavan määrittelyttömän segmentin päätesolmussa (u). (Ts. d-solmun ja u-solmun välisellä polulla muuttujalle ei aseteta uutta arvoa (d), sitä ei tuhota (k) eikä sitä käytetä (u)). Analysoi kaikki mahdolliset moodiparit dd, du, dk, ud, uu, uk, kd, ku, kk: mitkä niistä ovat normaaleja, mitkä epäilyttäviä ja mitkä virheellisiä muuttujan käsittelytapoja?
  4. Testattavana on seuraava ohjelmanpätkä. Muodosta sitä vastaava tietovuoverkko (data flowgraph) muuttujan y suhteen. Mitkä verkon polut on käytävä testauksessa läpi, jotta saavutetaan (a) kaikki käytöt -strategian (all-uses) mukainen kattavuus muuttujan y suhteen ja (b) kaikki määrittelyt -strategian (all-definitions) mukainen kattavuus muuttujan y suhteen? Minimoi kummassakin tapauksessa tarvittavien testiajojen määrä.
      x:= 0;
      read(y);
      while y > x do begin
        x:= x+y;
        read(y)
      end;
      write(x);
      write(y)
    

Harjoitus 10 (1.-5.12.)

  1. Millaisia ovat huoltavaa (preventive) ylläpitoa kaipaavat ohjelmistot?
  2. Yleensä suositellaan, ettei aikataulustaan jäljessä olevaan ohjelmistoprojektiin palkattaisi lisää työntekijöitä aikataulun kiinni saamiseksi. Miksi lisähenkilöstön palkkaaminen ei yleensä ole järkevää? Millaisissa tilanteissa ratkaisu saattaisi kuitenkin pelastaa projektin?
  3. Suunnittele GANTT-kaaviona omien opintojesi eteneminen alkaen tästä hetkestä ja päättyen loppututkintoon. Kuvaa kaikki erilliset opintojaksot (kurssit, seminaarit, laboratoriotyöt yms.) kaaviossasi yksittäisinä tehtävinä. Löytyykö kaaviosta opiskeluprojektisi kriittisiä polkuja?
  4. Tavoitteena on toteuttaa yksinkertainen tietokantasovellus (Haikalan - Märijärven taulukko 10.3: DATA=L), jonka kooksi on arvioitu 10.000 riviä ohjelmakoodia.

    (a) Sovelluksen toteuttaa Nokian huipputiimi (ACAP=VH, AEXP=VH, PCAP=VH, VEXP=H, LEXP=H).
    (b) Sovelluksen toteuttaa opiskelijoista ja professoreista koottu rupusakki (ACAP=VL, AEXP=VL, PCAP=VL, VEXP=VL, LEXP=VL).

    Kuinka monta henkilötyö- ja kalenterikuukautta projekti vaatii vaihtoehdoissa (a) ja (b) COCOMO-mallin intermediate/helppo -version mukaan? Entä jos sovelluksen arvioitu koko olisi miljoona riviä? Vaikuttavatko ryhmien (a) ja (b) väliset suorituskykyerot uskottavilta?


Harjoitus 11 (8.-10.12.)

Koska opetus päättyy keskiviikkona 10.12, on viikon viimeinen harjoitus siirretty torstaista tiistaiksi. Harjoitusajat ovat siis seuraavat (vierailu sallittu):
  1. Mitä hallinta-alkioita (configuration item) on tarpeen tallettaa ohjelmistotuotteesta? (Haikala-Märijärvi: luku 11)
  2. Vertaile testausta ja tarkastuksia (inspection) virheidenetsintäkeinoina. (a) Millaisia ohjelmistovirheitä paljastuu testaamalla helpommin kuin tarkastamalla? (b) Millaisia ohjelmistovirheitä paljastuu tarkastamalla helpommin kuin testaamalla?
  3. Kuka julkisuuden henkilö olisi mielestäsi oivallinen projektipäällikkö ja miksi? Kuka julkimo olisi puolestaan surkea projektipäällikkö ja miksi? (Kyseessä ei ole välttämättä ohjelmistoprojekti.)
  4. Täytä ja palauta anonyymisti elektroninen opetuksenarviointilomake WWW-osoitteessa http://www.cs.helsinki.fi/kurssit/kyselyt/syksy_1997/ .