OHJ-3010 Ohjelmistotuotannon perusteet Kurssin tavoite, opinto-opas "Luoda yleiskuva ohjelmistotyöstä ja perusvalmiudet määrittelymenetelmien soveltamiseen. Kyky osallistua ohjelmistoprojektiin asiakkaan edustajana." Käytännössä: Kyky ilmaista vaatimukset Kyky ymmärtää alan notaatioita ja merkintätapoja Käsitys tuotantoprosessista ja käytännöistä 1
Kurssin henkilökunta Kari Systä ja Marko Leppänen (luennot) Mikko Andersson (kurssibyrokraatti) Viikkoharjoitukset ja harjoitustyöt Mikko Andersson Marie-Elise Kontro Hannu Ranta Lauri Virtanen Eeva Laukkanen 2
...OHJ-3010 Ohjelmistotuotannon perusteet Kurssi koostuu luennoista viikkoharjoituksista (6 pistettä) harjoitustyöstä (6 pistettä) tentistä (18 pistettä) Materiaali: Haikala, Mikkonen: Ohjelmistotuotannon käytännöt (Vanhemmasta kirjasta Haikala, Märijärvi: Ohjelmistotuotanto on myös apua, mutta kurssilla käsitellään asioita joita vanhemmassa kirjassa ole.) Tällä kurssilla ei käsitellä kaikkia kirjan lukuja, osa säästetään kurssile OHJ-3050 Ohjelmistotuotannon Menetelmät TiTe-kilta tilaa Talentumilta, hinta 38 www-sivut & rss-feed (tehdäänkö??): https://www.cs.tut.fi/~otupk/ 3
Kurssille ilmoittautuminen Ilmoittaudu kurssille POP:n lisäksi myös IDLE:n kautta, linkki kurssin kotisivulla IDLE:n kautta hoidetaan viikkoharjoituksiin ilmoittautuminen harjoitustyöryhmien muodostaminen välipalautusaikojen varaaminen 4
Viikkoharjoitukset Harjoitukset alkavat vasta ensi viikolla (viikko 36) Salissa TB207 Ei pakollisia, mutta suositeltavia Osallistumisesta saa maksimissaan 6 lisäpistettä Ilmoittaudu viikkoharjoituksiin IDLE:n kautta (Linkki kurssin kotisivulla) IDLE:n viikkoharjoitusilmoittautumiset avataan tänään luentojen jälkeen Viikkoharjoituksissa tehdään saman viikon luentoaiheeseen liittyviä ryhmätöitä Jos et pääse viikkoharjoituksiin esim. sairastumisen takia, voit tehdä korvaavan suorituksen: Ota yhteyttä kurssibyrokraattiin (Mikko Andersson) mieluiten etukäteen ja sovi tapaamisesta Saat Mikolta viikkoharjoitusosallistumisen korvaavan kirjallisen tehtävän 5
Viikkoharjoitusten hyvityspisteet Läsnäolokertoja Pisteitä <5 0 5 1 6 2 7 3 8 4 9 5 10 6 6
Harjoitustyö Harjoitustyönä toteutetaan ohjelmiston määrittelyhanke Tuloksena syntyy määrittelydokumentti Harjoitustyö tehdään neljän hengen ryhmissä Ryhmät muodostettava IDLEssä 14.9. mennessä 7
Kurssin tavoite "Luoda yleiskuva ohjelmistotyöstä ja perusvalmiudet määrittelymenetelmien soveltamiseen. Kyky osallistua ohjelmistoprojektiin asiakkaan edustajana. Asiakas pitää ymmärtää laajasti Voi myös olla talon sisäinen Kokonaisprojektissa ohjelmisto on vain osa, ja ne muut osat ovat asiakkaita Tämä kurssi on myös ohjelmistoammattilaisille Kurssiin liittyy muutakin kuin koodaamista Ymmärtää asiakasrajapinnan tärkeys 8
Alustava luentoaikataulu Vko 35: johdanto 36: mitä on ohjelmistotuotanto (kirjan luku 1) 37: vaatimusten kirjaamisesta (luku 3) 38: vaatimuksista jatkuu: ohjelmistotyön vaiheet ja tehtävät (luku 2 alku) 40: ohjelmistotyön vaiheet ja tehtävät (luku 2 alku) jatkuu 41: UML-kaaviot (luku 4 etc) 42: Asiakkaan ja sidosryhmän rooleista 44: käytettävyyden ja käyttökokemuksen perusteet 45: Prosessi/elinkaarimalleista (luvun 2 loppu) 46: Tiedon mallintaminen 47: Laadunvarmistus, testaus, (11,15,16) 48: Projektitoiminnan perusteet. Työmäärät, kustannukset (12) 49: IPR, sopimukset, open source 50: Kertausta 9
Software Engineering -- ohjelmistotuotanto? Software -- ohjelmisto? Computer programs, procedures, rules, documentation, and data pertaining to the operation of a computer system. Software Engineering -- ohjelmistotuotanto? The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software. [IEEE 610.12] 10
Mitä on ohjelmistotuotanto? Vaatimusmäärittelyä Taitavaa ohjelmointia Elinkaarimallit Yhteispeliä, yhteistä peliä Algoritmit Tietorakenteet Ohjelmointikielet Arkkitehtuurit Laadunvarmistusta Testaus Validointi Projektinhallinta 11
Miksi ohjelmien tekeminen on niin vaikeaa? Ohjelmisto on abstrakti Tekijöiden ja asiakkaiden välillä ei välttämättä ole sama käsitys Työmäärän arviointi on vaikeaa Ohjelmisto on dynaaminen On muutettavissa muutettavuutta oletetaan Ohjelmistojen tekemistä on vaikea skaalata Tekijöiden määrän lisääminen nopeuttaa vain vähän valmistumista Mitä enemmän tekijöitä, sen enemmän kommunikointitarvetta. 06.02.2012 12
Ohjelmakoodi Realistisissa järjestelmissä on koodirivejä tuhansittain, esimerkiksi puhelinkeskuksessa vaikkapa 15 miljoonaa. Ohjelmisto on aineetonta: sitä on vaikea hahmottaa sen laatua ja valmiusastetta on vaikea arvioida virheitä syntyy helposti, ja niitä löytyy vielä pitkänkin käytön jälkeen 13
Koodirivien määrä ei tosin ole kovin selkeä koon mitta: 100 alkulukua kolmella eri tavalla void primes(int cap) { int i, j, composite; for(i = 2; i < cap; i++) { composite = 0; for(j = 2; j < i; j++) composite +=!(i % j); if(!composite) } } printf("%d\t", i); int main() { primes(100); } void primes(int m, int t, int c) { int i,j; i = t / m; j = t % m; (i <= 1)? primes(m,t+1,c) : (j == 0)? primes(m,t+1,0) : (j == i &&!c)? (printf("%d\t",i), primes(m,t+1,0)) : (j > 1 && j < i)? primes(m,t+1,c +!(i % j)) : (t < m * m)? primes(m,t+1,c) : 0; } int main() { primes(100,0,0); } _(,, ){ / <=1?_(, +1, ):!( % )?_(, +1,0): % == / &&!?(printf("%d\t", / ),_(, +1,0)): % >1&& % < /?_(,1+, +!( / %( % ))): < *?_(, +1, ):0;}main(){_(100,0,0);} 14
Ohjelmistotyyppejä(1) Varus- ja työkaluohjelmistot teknis-tieteelliseen laskentaan tarkoitetut ohjelmistot tietämyspohjaiset järjestelmät kaupallishallinnolliset ohjelmistot (yrityksen tietojärjestelmät) prosessinohjaus- ja prosessiautomaatiojärjestelmät 15
Ohjelmistotyyppejä(2) Sulautetut järjestelmät Koneen tai laiteen sisällä hissin ohjausjärjestelmä Reaaliaikajärjestelmät (esimerkki) Ohjelman on reagoitava heti polttoaineen ja jarrujen säätely autossa Reaktiiviset järjestelmät toimivat jatkuvasti Puhelinkeskus Hissin ohjauslogiikka Melkein kaikki laitteet tänä päivänä? 16
http://www.softwareindustrysurvey.fi/slidesfinland2012.pdf 17
Pohdinta: Montako tietokonetta teillä on? Neljä läppäriä (4) Kolme muuta tietokonetta (7) Kotiserver ja Chumby (9) Kaksi TV:tä (11) Kaksi digiboxia (13) CD/DVD soitin (14) Printteri (15) Skanneri (16) 5 kännykkää (21) Autossa ainakin kaksi (23) Audiovahvistin (digit) (24) Kaukosäätimiä (ainakin 3) (27) Pelikonsoli (28) Pesukone (29) Kiuas (30) 18
Kuva 1.2 Infrastuktuuri: tietoliikenne, toimistoautomaatio, ryhmätyö, asianhallinta, palvelimet... Yrityksen tietovarastot Johdon tietojärjestelmät, päätöksenteon tuki Markkinointi Taloushallinto Tuotteiden suunnittelu, operatiiviset järjestelmät, tuotannonohjaus, materiaalihallinto, logistiikka Prosessi- ja tuotantoautomaatio Tietotekniikka tuotteissa 19
Esimerkki 1: tyypillinen työkoneen ohjausjärjestelmä Ohjaus- PC Linux- tai Windows-käyttöjärjestelmä CAN-väylä Puomin ja kouran ohjaus Mootorin ohjaus Vaihteiston ohjaus Rungon ohjaus Hallintalaitteiden ohjaus toimilaitteet ja anturit toimilaitteet ja anturit toimilaitteet ja anturit toimilaitteet ja anturit toimilaitteet ja anturit Tyypillisesti PLC-ohjaimia (+IEC 61131-3 -standardin mukainen ohjelmointi) tai RT-käyttöjärjestelmä (+C-ohjelmointi) 20
Esimerkki 2: verkossa toimiva PCsovellus DJ-online-palvelin Palvelinohjelmisto SOAPrajapinta Jeesbox Ylläpidon hallintajärjestelmä Musiikkitietokanta Metatietokanta Musiikin hallintajärjestelmä 21 Mukailtu lähteestä: Jukka Jylhäkangas, Ravintoloiden taustamusiikkijärjestelmä, diplomityö, TTY 2006.
Esimerkki 3: automaatiojärjestelmä (Metso DNA) 22
Pieni sulautettu järjestelmä (venttiili) 23
NMT-puhelin 20 kloc GSM-keskus 15MLOC äly-puhelin 20MLOC? televisio 200 kloc (yksinkertainen)hissi 50 kloc moderni auto? avaruussukkula 21 MLOC (sukkulassa 0,5MLOC) säätoventtiilin ohjaus 25kLOC työkoneen ohjaus 250kLOC Sulautetut järjestelmät Työn tuottavuus? LOC Lines of Code, koodiriviä 24
Ohjelmistotekniikka on geneeristä 25
Ohjelmiston ominaisuuksia ohjelmiston koko ja käsiteltävän tiedon määrä käsittelypainotteinen vs. tietopainotteinen vasteaika- ja reaaliaikaisuusvaatimukset kovat reaaliaikavaatimukset reaktioaika luotettavuus puolustautuva ohjelmointi kahdentaminen elektroniikka- ja mekaniikkatason varmistukset hajautus paikallinen / laaja sulautetut järjestelmät - laiteväylä 26
Epäonninen esimerkki VR 2011-2012 Hakukoneen termit - VR - verkkokauppa - ongelma 27
Mikä meni pieleen? Tarkkaa tietoa ei julkisuudesta löydä, mutta näyttää siltä että Järjestelmän testaus oli puutteellista Monitoimittajajärjestelmässä vastuut eivät olleet selviä Väitetään myös, että kilpailutuslaki olisi ollut osasyyllinen Kuormitus arvioitiin väärin (mm kellekään ei tullut mieleen, että starttipäivänä on paljon uteliaita) Kukaan ei tiedä koska järjestelmä saadaan kuntoon VR:n imago kärsi ja asiakkaitakin menetettiin Ja systeemiä korjaillaan edelleen
Mutta lopetetaan tähän VR:n pilkkaaminen Noloja juttuja on käynyt monelle muullekin organisaatiolle Paitsi niiden viihdearvon vuoksi myös opetussyistä otamme näitä esimerkkejä esille kurssin luennoilla Tästä tapauksesta voisi johtaa muutaman opetuksen Projektin pilkkominen moneen osaan ja keskenään kilpaileville toimijoille on hankalaa Iso projektin käyttöönotto kertarysäyksellä on riski Ison järjestelmän, jolla paljon käyttäjiä, testaaminen on hankalaa Käyttäjien ymmärtäminen on tärkeää: Totta kai moni haluaa selvittää mitä uusi monimutkainen hinnoittelu tarkoittaa omilla vakioreiteillä 29
Tämä kulunut kuva on pakko näyttää 30
Ohjelmistoprojekti on muutokseen reagoimista 31
Areas of expertise Management skills Presentation& negotiation skills, teamwork Nongeneric technical skills Generic technical skills Application domain expertize Process skills 32
evolution revolution Half-life of the market value of skills :-) Nongeneric technical skills Application domain expertize Process skills Presentation & negotiation Management skills, teamwork skills Generic technical skills 0v 10v 20v 33
Ohjelmiston rakentaminen projektina Asiakas - toimittaja Tarvitaan yhteisymmärrys siitä mitä halutaan Mitä se maksaa Koska se on valmis Asiakas ymmärrettävä laajasti Sisäinen Varsinaisen asiakkaan edustaja (esim. markkinointi) Tämä kurssi on suunniteltu (myös) tuleville asiakkaille Asiakkaalle projekti on usein osa isompaa kokonaisuutta (hanketta) Ohjelmiston lisäksi laite, liiketoimintamuutos, Elinkaari: esiselvitys, määrittely, toteutus, käyttöönotto, ylläpito, käytöstä poisto 34
Muita haasteita Tuote vs asiakaskohtainen Sopivuus asiakkaan tarpeisiin Kehittämisen ja ylläpidon kustannukset Dilemma. Kummalla rikastut: teet kerran ja myyt miljoona kopiota vai tekemällä monta projektia? Eri toimintatavat Hajautettu kehitys Resurssit ja asiantuntemus voi olla hajallaan Kustannusten vuoksi halutaan siirtää työtä halvan kustannuksen maihin. Monessa yrityksessä edustus asiakkaan luona, loput esim. Intiassa 35