OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 Luento 10: Ohjelmistotuotanto, jatkoa Ohjelmointi, alkua Tekijät: Antti Virtanen, Timo Lehtonen, Matti Kujala, Kirsti Ala-Mutka, Petri M. Gerdt et al.
Luentokalvot saatavilla myös Moodlessa Nopeampi päivittää kuin sivuille, tällä hetkellä... Luentokalvot löytyvät oman viikkonsa kohdalta Myös bonustehtävien järjestys on korjattu loogisemmaksi
Moodle2 alhaalla viime torstaina Noin 2 tunnin käyttökatkos ilman ennakkovaroitusta...syy miksi tehtäviä ei kannata jättää viimeiseen iltaan :)
Ohjelmiston määrittely ja suunnittelu... Mitä asiakas kertoi haluavansa Miten yrityksen edustajat asian ymmärsivät Kuinka insinöörit toteutuksen suunnittelivat
... Ohjelmiston toteutus... Kuinka ohjelmoijat sen toteuttivat Kuinka myyntiedustaja tulosta kuvaili Kuinka projekti dokumentoitiin
... Käyttöön ottaminen... Mitä toimintoja ohjelmistossa oli Kuinka asiakasta laskutettiin Kuinka ohjelmiston käyttöönottoa tuettiin
... Mitä asiakas oikeasti tarvitsi
Eräs ohjelmistoprosessi sarjakuvana
Ohjelmistoprosessi tiivistettynä GIGO == garbage in garbage out Omien tarpeiden määritteleminen, ymmärtäminen ja ilmaiseminen on tärkeää! Roskan tekeminen tulee kalliiksi! Ohjelmistoprosessi
Esimerkki todellisesta projektista 1/2 Denverin lentokentän matkatavarakuljetus 1990 alettiin täysautomaattiseen toimintaan pystyvän järjestelmän suunnittelu Vaatimukset muuttuivat neuvottelujen aikana 1992 hyväksyttiin tarjous 192 miljoonan dollarin hinnalla, kenttä avattaisiin 31.10.1993 Asiakas muutti vaatimuksia kesken projektin, syntyi suuria riitoja Integrointitestaus saatiin tehtyä vasta kesällä 1994 Havaittiin virheitä laukkujen lajittelussa Automaattisen järjestelmän rinnalle liitettiin käsin toimiva varajärjestelmä...
Esimerkki todellisesta projektista 2/2 Syyskuussa 1994 lentokentän avautumisajankohdaksi arvioitiin 28.2.1995 Kentän tappiot 18 miljoonaa dollaria kuukaudessa Elokuussa 2005 uutisoitiin, että koko järjestelmästä on luovuttu... Tappiot kohosivat kokonaisuudessaan noin 4.9 miljardiin dollariin... vaikka mitään järjestelmää ei sitten syntynytkään!
Miten ohjelmistohankkeissa yleensä käy? Seuraavat luvut perustuvat Standish Group:n vuonna 1995 tekemään tutkimukseen, joka on nimeltään The Chaos Report Tietoja 385 eri kokoisilta eri alan yritykseltä Tutkimuksessa mukana 8380 järjestelmää 31% ohjelmistoprojekteista keskeytettiin n. 53% projekteista tuli maksamaan yli 189% kustannusarviota enemmän n. 16% ohjelmistoprojekteista valmistuu ajallaan kustannusarvioiden puitteissa Isojen yritysten projekteista valmistuu ajallaan ja budjetissa 9% Isojen yritysten järjestelmiin päätyy n. 42% alkuperäisistä vaatimuksista, pienten yritysten n 78% Lähde: URL: http://www.it-cortex.com/stat_failure_rate.htm (6.10.2009)
Surullinen yhteenveto ongelmista Ohjelmistoprosessi epäonnistuu todennäköisemmin kuin onnistuu Alle joka viides ohjelmistoprosessi valmistuu budjetin ja suunnitellun ajan rajoissa Mitä isompi hanke, sen isompi epäonnistumisriski Mitä tästä opimme? Ohjelmistoprojekti ei varmasti onnistu sattuman varaisesti Ohjelmistotuotannollisia menetelmiä tarvitaan, jos halutaan saada aikaiseksi ohjelmisto Perehdy asiaan huolellisesti kun päädyt osaksi ohjelmistoprosessia asiakkaan tai toimittajan roolissa Lähde: URL: http://www.it-cortex.com/stat_failure_rate.htm (6.10.2009)
Miksi projektit epäonnistuvat niin usein? Among the most common factors: Unrealistic or unarticulated project goals Inaccurate estimates of needed resources Badly defined system requirements Poor reporting of the project's status Unmanaged risks Poor communication among customers, developers, and users Use of immature technology Inability to handle the project's complexity Sloppy development practices Poor project management Stakeholder politics Commercial pressures Lähde: http://spectrum.ieee.org/computing/software/why-software-fails
Kuinka yleisiä virheet ohjelmissa ovat? Ohjelmistoissa on aina virheitä Hyvässäkin ohjelmassa voi olla esimerkiksi 2 virhettä 1000 riviä kohti, avaruussukkulasoftassakin vielä 1 virhe 1000 riviä kohti Ohjelmointikurssin harjoitustyössä voi olla helposti yli 1000 riviä koodia, eli tämä määrä on varsin pieni... Lähteitä: URL: http://www.cs.tau.ac.il/~nachumd/horror.html (28.9.2007) URL: http://www.peterenglund.com/textarkiv/krisnatt.htm (29.8.2007)
Esimerkkejä (kuuluisista) virheistä 6 ihmistä kuolee liian suurin säteilyannoksiin syöpähoidossa, useita loukkaantuu vakavasti 1985-87 (Therac-25) Mars-luotain iskeytyy Marsin pintaan koska ohjelmisto ei huomioi oikein englantilaisten ja metristen yksikköjen eroja Joukko amerikkalaisten F-22 Raptorhävittäjälentokoneiden tietokoneita käänsi lentokoneen sen ylittäessä päiväntasaajan
Esimerkkejä (kuuluisista) virheistä Kesäkuu 1980: USA:n ilmapuolustusjärjestelmä ilmoittaa (virheellisesti) maan olevan ohjushyökkäyksen kohteena Syyskuu 1983: NL:n satelliitti OKO ilmoittaa (virheellisesti) USA:n laukaisseen raskaat ydinohjuksensa Faulkland-saarten sodassa toukokuussa 1982 ystävällismielinen Exocet-ohjus upottaa brittien risteilijän
VR-soppa v.2011 Mikä meni pieleen? Epäselvyys tavoitteista Ei ymmärretä liiketoiminnan kehittämisprojektia Dataongelmat, tietojen epäyhtenäisyys Kapasiteettiongelmat, asiat mitoitetaan väärin Miten korjataan? Toteutetaan asiat pienemmissä paloissa Tehdään asiat rinnakkain, haetaan kokemuksia Käytetään ketteriä menetelmiä» Lähde tietoviikko 30.9.2011 sivu 17
Ohjelmistolisensseistä Ohjelmistojen lisenssit määräävät ohjelmistoon liittyviä käyttöoikeuksia ja rajoituksia Kuinka moneen koneeseen ohjelmiston saa asentaa Mihin käyttöön ohjelmistoa saa käyttää Saako ohjelmistoa kopioida (edes varmuuskopioida) Lisenssiehdot näkyvät ohjelmiston myyntitietojen yhteydessä ohjelmiston pakkauksessa Latauksen tai asennuksen yhteydessä Lisenssiehtojen tulee (periaatteessa) olla ostajan näkyvissä ennen ostopäätöstä Kaikki lisenssiehdot eivät välttämättä ole lainvoimaisia vaikka asiakas hyväksyisi ne allekirjoituksellaan! Suomen laki rajoittaa sopimusvapautta
Lisenssityyppejä: public domain Public domain tarkoittaa, että tekijä on luopunut kaikista oikeuksistaan, joten kyse on isoimmasta mahdollisesta vapaudesta Kuka tahansa saa käyttää mihin tarkoitukseen tahansa Tekijänoikeuslaissa puhutaan oikeuksien luovuttamisen sijaan tekijänoikeuden rajoittamisesta, tekijä rajoittaa oikeuksiaan Ajatuksena muuttaa asia osaksi ihmiskunnan kulttuuriperintöä Käytössä erityisesti kirjallisuudessa, taiteessa, musiikin parissa ja myös keksinnöissä Public domain ei välttämättä tarkoita sitä, että tekijä antaisi lähdekoodin yleisesti saataville
Lisenssityyppejä: freeware, shareware Freeware: ohjelma annetaan yleisön käyttöön rajoittamattomaksi ajaksi ilmaiseksi Muut oikeudet säilyvät ohjelman kehittäjällä Kätevä tapauksissa, joissa kehittäjä haluaa pitää ohjelman kehitystyön hallinnassaan ja muutenkin nimissään Freeware-lisensseissä voi olla tarkennuksia Esimerkiksi ei saa käyttää kaupallisissa tarkoituksissa Shareware: ohjelmaa saa käyttää jonkin aikaa ilmaiseksi Markkinointikeino: ostaja kokeilee ja tekee ostopäätöksen Käytetään paljon esimerkiksi pelien yhteydessä Lähdekoodia ei tyypillisesti ole saatavilla Shareware-ohjelma josta ei ole maksettu on yleensä supistettu versio Toimii vain jonkin aikaa ja / tai sisältää vain osan toiminnoista
Lisenssityyppejä: free & open software Free / open software = avoimet ohjelmistot tai ohjelmat Olennaista ohjelmakoodin antaminen saataville Antaa kaikille mahdollisuuden tutkia ja kehittää ohjelmaa Huom.: ei poista alkuperäisen tekijän tekijänoikeuksia (ellei nimenomaan erikseen mainita) Ohjelmistokehitys tapahtuu koordinoiduissa kehitysyhteisössä vapaaehtoisvoimin Termejä freeware, shareware ja public domain ei pidä sekoittaa vapaisiin tai avoimiin ohjelmistoihin Ohjelmien ilmainen ladattavuus ei ole sama asia, kuin avoin tai vapaa lisenssi
Esimerkkejä avoimista ohjelmistoista Linux-käyttöjärjestelmä Apache (WWW-palvelinohjelmisto) Moodle LibreOffice ja OpenOffice Mozilla (Thunderbird, Firefox)... ja lukuiset työkaluohjelmistot, kuten tekstieditorit ja ohjelmointikielten kääntäjät
Vapaat ohjelmistot (free software) Free Software Foundation (www.fsf.org) ja vapaat ohjelmistot kehitettiin vastalauseeksi ohjelmistojen rajoitetulle omistukselle Vrt. Ostat auton, jolle on määrätty missä sillä saa ajaa, keitä saa olla kyydissä ja kuka saa katsoa konepellin alle Vapaiden ohjelmistojen vapaudet Vapaus ohjelman käyttöön Vapaus tutkia ohjelman toteutusta ja muokata sitä Vapaus antaa ohjelmaa eteenpäin Vapaus parantaa ohjelmaa ja julkistaa työnsä myös muiden hyväksi Sana vapaa tulee tulkita kuten sananvapaus-sanassa, ei kuten ilmainen Copyleft ja semi-free ovat vapaan lisenssin erityismuotoja, jotka rajoittavat ohjelmiston vapauksia
Open source -ohjelmistot Open source -määritelmän lisenssit löytyvät osoitteesta www.opensource.org Lisenssit ovat tyypillisesti lähellä copylefted free software -määritelmää Tavoitteena taata ohjelmiston leviäminen ja jatkuva kehittyminen Vapaiden ohjelmistojen ja open source -ohjelmistojen ero lähinnä taustaideologiassa Yleinen vapaus vs. ohjelmistojen kehittämisen edistäminen
Open Source -ohjelmistot Open source -kehityksen etuja perustellaan usein vertaisarvioinnin takaamalla laadulla Laatu kuitenkin riippuu kehitysyhteistyön laajuudesta ja aktiivisuudesta Erityisesti dokumentoinnissa voi usein olla puutteita
Erilaisten lisenssien ja ohjelmistojen vertailua Lisenssi Hallinta Kehitys Jatkuvuus Kustannukset Tuetut ympäristöt Open source / Vapaa ohjelmisto Vapaa käyttö, muuntelu ja jakelu Tekijöillä ja käyttäjillä samat mahdollisuudet ohjelmistoon Nopeaa ja monipuolista, paljon erilaisia ideoita Riippuu ohjelmiston hyödyllisyydestä, käyttävän yhteisön laajuudesta Alussa pienet, tukikulut itse päätettävissä, järjestettävissä Usein laaja valikoima, helpompi sovittaa olemassaoleviin järjestelmiin Yksinoikeudella oleva ohjelmisto Ei muuntelua tai jakelua, usein rajoitettu käyttöoikeus Valmistaja hallitsee ohjelman sisältöä ja kehitystä Valmistaja päättää kysynnän mukaan Riippuu valmistajan menestyksestä Alussa suuret, tukikulut valmistajan päätettävissä Rajoittuu valmistajan tukemiin, voi olla vaikea sovittaa olemassaoleviin järjestelmiin
Luennon aiheet Ohjelmistotuotannon ja -prosessin käsitteet Ohjelmistoprosessin vaiheet Ohjelmistotuotannon haasteita Esimerkkejä ohjelmistotuotannon ongelmista Ohjelmistolisenssit