1. Johdanto Mitä ohjelmistotuotanto on? ohjelmointi + ohjelmisto + tekniikat + insinööritaito + kurinalainen työskentely Määritelmä (60-luvun ohjelmistokriisi): The establishment and use of sound principles in order to obtain economically software that is reliable and works efficiently on real machines. (P. Naur, R.Randell (eds.): Software Engineering: A Report on a Conference Sponsored by the NATO Science Committee, 1968) Kevät 2005 Ohjelmistotuotanto / Taina 1 Ohjelmistotuotannon ongelmia Ohjelmistojen koko ja monimutkaisuus: jatkuva kasvu, kun yhä vaikeampia ongelmia ratkotaan tietotekniikan avulla isot ohjelmat (yli 10 miljoonaa koodiriviä) yleistyvät jatkuvasti Tuotantoprosessia on hankala määritellä ja mitata: prosessia on vaikea hallita, jos sitä ei voida mitata ohjelmistojen tekeminen on yhä liiaksi improvisointia liian vähän raakaa ja suoraviivaista työtä Kevät 2005 Ohjelmistotuotanto / Taina 2 Taina 1
Lisää ongelmia Tuotteen määrittely on ongelmallista: asiakas ei oikein tiedä mitä haluaa määrittelyyn ei tunneta tieteellisiä, tai edes käytännössä hyvin toimivia menetelmiä Tuotteen laadusta ei ole varmuutta: laadun formaali määrittely on vaikeaa ohjelmiston kattava testaus on käytännössä mahdotonta Kevät 2005 Ohjelmistotuotanto / Taina 3 Lisää ongelmia Ohjelmistoa on työlästä pitää kunnossa: ylläpito = kaikki mikä tapahtuu ohjelman ensimmäisen käyttöönoton jälkeen kustannukset ovat huomattavasti suuremmat kuin kehityskustannukset Projektin kulku on usein vaikeasti ennakoitavissa: projektin vaatiman työmäärän arviointi onnistuu harvoin teorian puuttuminen Kevät 2005 Ohjelmistotuotanto / Taina 4 Taina 2
Lisää ongelmia Ohjelmistotuotannon tieteellinen pohja puuttuu: perustuu enemmän hyväksi havaittuihin menetelmiin kuin eksaktiin tieteeseen käytännössä toimivien ratkaisujen yleistäminen vaatisi teoriatukea Tehtyä työtä käytetään paljon uudelleen mutta epäaattisesti: vain pieni osa (10-20%) kirjoitettavasta koodista on todella uutta, kaikki muu on peräisin jostain standardiosia ei ole tarjolla Kevät 2005 Ohjelmistotuotanto / Taina 5 Ongelmien ydin Tieteellisen tutkimuksen ja käytännön tuotantotyön välillä on kuilu: Tutkimus ei välttämättä ratkaise ongelmia. Tieteelliset tulokset sopivat usein tarkasti tiettyyn pienehköön ongelmaan. Yritykset eivät tunne tutkimustuloksia. Yritykset keskittyvät teknologiaan. Yritykset eivät ehdi/osaa/halua ratkoa ohjelmistotuotannon perusongelmia. Kevät 2005 Ohjelmistotuotanto / Taina 6 Taina 3
Mikä on ohjelmisto? Ohjelmistoon kuuluu yhteistyössä toimivia tietokoneohjelmia, ohjelmiin liittyviä syöte- ja tulostiedostoja, ohjelmiin liittyviä konfiguraatiotiedostoja ja käytössä ja ylläpidossa tarvittava dokumentaatio. Ohjelmistotuotannossa pyritään tekemään ohjelmistotuotteita, asiakkaille myytäviä ohjelmistoja. Kevät 2005 Ohjelmistotuotanto / Taina 7 Mitä vaaditaan hyvältä ohjelmistotuotteelta? ylläpidettävyys: tuotetta voidaan muokata vastaamaan muuttuviin vaatimuksiin. luotettavuus: tuote ei aiheuta fyysisiä eikä taloudellisia vahinkoja missään tilanteessa. tehokkuus: tuote ei tuhlaa resursseja. käytettävyys: tuote on looginen ja helppokäyttöinen. Kevät 2005 Ohjelmistotuotanto / Taina 8 Taina 4
Mitä on ohjelmistotuotanto? Kaikkiin ohjelmiston tuotannon osaalueisiin vaikuttavaa insinööritaitoa ja -toimintaa (Sommerville, vapaa käännös). Katso myös alkuperäistä määritelmää. Onko se tiedettä? Käytännössä hyviksi koettuja menetelmiä. Kurinalaista insinöörityötä. Tietojenkäsittelytieteen tulosten käyttöä. Kevät 2005 Ohjelmistotuotanto / Taina 9 Mikä on ohjelmistoprosessi? Ohjelmistoprosessi: Joukko toimintoja joiden tarkoituksena on ohjelmiston kehittäminen tai ylläpito. Kaikissa eräitä samoja perustoimintoja: määrittely, suunnittelu, toteutus, testaus. Ohjelmistoprosessimalli: yksinkertaistettu kuvaus prosessista. toimii pohjana prosessimallista johdetuille ohjelmistoprosessille. Kevät 2005 Ohjelmistotuotanto / Taina 10 Taina 5
Mikä tässä maksaa? kustannusten jakautuminen: elinkaarikustannukset: 25% kehitystyötä 75% ylläpitoa kehitystyökustannukset: 60% määrittelyä, suunnittelua ja toteutusta 40% testausta Valtaosa kustannuksista on henkilökustannuksia! Kevät 2005 Ohjelmistotuotanto / Taina 11 Entä menetelmät ja työkalut? Menetelmät: Systemaattiset työtavat joiden avulla pyritään sekä tehokkaaseen että korkealaatuiseen ohjelmistotuotantoon. Hyödyntävät usein graafista esitystä. CASE? Computer-Aided Software Engineering. Menetelmiä tukevia ohjelmatuotteita. Lisää kysymyksiä: Sommerville luku 1.1 Kevät 2005 Ohjelmistotuotanto / Taina 12 Taina 6
Ammatillinen vastuu Ohjelmistotuotteen tekeminen ei ole pelkästään tekninen suoritus. Mikä on tekijöiden vastuu jos ohjelmatuote ei toimi odotetulla tavalla? ohjelmatuotteen toiminta aiheuttaa ylimääräisiä kustannuksia? tiedon vuotamista? vaaratilanteita? Kevät 2005 Ohjelmistotuotanto / Taina 13 Järjestelmän laatiminen Järjestelmäsuunnittelu (Systems Engineering) käsittelee järjestelmää kokonaisuutena Järjestelmän määrittely, suunnittelu, toteutus, käyttöönotto ja käytettävyys. Järjestelmä on joukko toisiinsa liittyviä yhteistyössä toimivia komponentteja: laitteisto- ja ohjelmistokomponentteja käyttäjät ja käyttöympäristö Kevät 2005 Ohjelmistotuotanto / Taina 14 Taina 7
Tietokonepohjaiset järjestelmät Ohjelmisto on erottamaton osa järjestelmää OT-asiantuntijoiden täytyy ymmärtää koko järjestelmän toiminta voidakseen tuottaa laadukkaita ohjelmistoja Monet järjestelmät sisältävät varsin laajoja ohjelmistoja Ohjelmiston keskeisyys => OTasiantuntijat ovat usein samalla koko järjestelmän asiantuntijoita Kevät 2005 Ohjelmistotuotanto / Taina 15 Osajärjestelmät Yleensä järjestelmä koostuu useista osajärjestelmistä Kukin osa on itsenäinen kokonaisuus, joka toimii yhteistyössä muiden osien kanssa Ohjelmisto- ja laitteistokomponentit tekevät yhteistyötä toteuttaakseen osajärjestelmän tehtävät Käyttäjät käyttävät järjestelmää joidenkin osajärjestelmien kautta (käyttöliittymä) Kevät 2005 Ohjelmistotuotanto / Taina 16 Taina 8
Järjestelmän suunnitteluprosessi Työvaiheet: 1. vaatimusten määrittely 2. koko järjestelmän suunnittelu 3. osajärjestelmien kehitystyö 4. järjestelmän integrointi 5. järjestelmän asennus 6. järjestelmän ylläpito 7. järjestelmän alasajo Vastaavia työvaiheita tarvitaan myös ohjelmistoa laadittaessa. Kevät 2005 Ohjelmistotuotanto / Taina 17 Järjestelmän suunnitteluprosessi Eroja järjestelmän ja ohjelmiston suunnittelun välillä: eri insinöörialojen sanastot, periaatteet ja standardit: eri osajärjestelmien asiantuntijat eivät välttämättä ymmärrä toisiaan järjestelmän muutokset ovat kalliita: tehtyjä päätöksiä ei voida helposti muuttaa esim. jonkin (osa)järjestelmän prototyyppiä ei useinkaan voida laatia vain kokeiltavaksi Kevät 2005 Ohjelmistotuotanto / Taina 18 Taina 9
Järjestelmän laatimisen osa-alueita (Sommerville) Software Electronic Mechanical Structural ATC s User interface design Civil Electrical Architecture Kuva I. Sommerville 2004 Air Traffic Control Kevät 2005 Ohjelmistotuotanto / Taina 19 Järjestelmän laatimisessa käytettävät menetelmät Usein järjestelmän laatimiseen sopivat samat (tai samantapaiset) menetelmät kuin ohjelmiston laatimiseen Esimerkiksi koko järjestelmä on järkevää kuvata kaaviolla, joka sisältää osajärjestelmät ja niiden väliset yhteistyötavat Kevät 2005 Ohjelmistotuotanto / Taina 20 Taina 10
Esimerkkijärjestelmä (Sommerville) Radar Transponder Data comms. Aircraft comm s. Telep ho ne Position processor Backup position processor C o m m s. processor Backu p comms. processor Aircraft s imu lation Flight plan d at abas e Air Traffic Control architecture Weather map Acco un ting Controller info. Controller consoles Kuva I. Sommerville 2004 Activ ity log ging Kevät 2005 Ohjelmistotuotanto / Taina 21 Järjestelmän laatimisen ongelmia Ohjelmiston on sovittava järjestelmään Osajärjestelmien on sovittava yhteen Jos kokonaisuus ei toimi, missä on vika: ohjelmistoa pidetään usein syntipukkina syyt saattavat olla esim. kokonaisuuden huonossa suunnittelussa usein ohjelmistoa voidaan helpoimmin muuttaa Kevät 2005 Ohjelmistotuotanto / Taina 22 Taina 11
Järjestelmä ja ympäristö Järjestelmä toimii ja vaikuttaa aina jossain ympäristössä (organisaatiossa) Uuden järjestelmän käyttöönotto: uudet toimintatavat: tarvitaan koulutusta uudet työtehtävät: tarvitaan organisaation sisäisiä työtehtävien järjestelyä organisaatiomuutokset: uuden järjestelmän asiantuntijoista tulee organisaatiossa uusia tärkeitä vaikuttajia. Kevät 2005 Ohjelmistotuotanto / Taina 23 Mitä tästä opimme? Järjestelmää ja ohjelmistoa on laadittava yhteistyössä: Ohjelmistotuotantoa ei voi tehdä ilman tietoa ympäristöstä, johon ohjelmistoa ollaan tekemässä. Yhteistyö edellyttää ohjelmiston laatijoilta valmiutta kommunikoida sovellusalueen asiantuntijoiden kanssa. Kevät 2005 Ohjelmistotuotanto / Taina 24 Taina 12