220 likes | 323 Views
Yleistä. Ohjelmistotekniikan sovellukset 1960- luvulta Viimeiset 20 v: Sulautetut järjestelmät : bensamittarit, puhelin, pesukone Laitteiden ohjaus: metsäkone, paperikone, pullonpalautusautomaatti. Määritelmiä. Software Engineering Ohjelmistotekniikka, ohjelmistotuotanto
E N D
Yleistä • Ohjelmistotekniikan sovellukset 1960- luvulta • Viimeiset 20 v: • Sulautetut järjestelmät : bensamittarit, puhelin, pesukone • Laitteiden ohjaus: metsäkone, paperikone, pullonpalautusautomaatti 1. Ohjelmistotekniikka - Software Engineering
Määritelmiä • Software Engineering • Ohjelmistotekniikka, ohjelmistotuotanto • ”Ohjelmistotyö, jonka tuloksena syntyvät järjestelmät täyttävät käyttäjiensä kohtuulliset toiveet ja odotukset ja tämän lisäksi valmistuvat laadittujen aikataulujensa ja kustannusarvioidensa puitteissa.” • Käsittää • Ohjelmiston tuotantoprosessin osa-alueet: laatujärjestelmä, projektinhallinta, dokumentointi, tuotteenhallinta, laadunvarmistus, testaus, määrittely, suunnittelu, toteutus, käyttöönotto ja ylläpito 1. Ohjelmistotekniikka - Software Engineering
Sovellusalueita • Ohjelmistotekniikalla ei erityistä, omaa sovellusaluetta • Ohjelmistotyypit • Varus- ja työkaluohjelmistot (system software, software tools) • Teknis- tieteelliseen laskentaan tarkoitetut ohjelmistot (Engineering and scientific software) • Tietämyspohjaiset järjestelmät (knowledge-based system) • Kaupallis-hallinnolliset ohjelmistot (business software) • Prosessiohjaus- ja prosessiautomaatiojärjestelmät (process control system, process automation system) • Sulautettu järjestelmä (embedded system) • Reaaliaikajärjestelmä (real-time system) • Prosessinohjaus- ja sulautetut järjestelmät • Reaktiivinen järjestelmä • Vuorovaikutus ympäristöön • Esim. prosessiautomaatiojärjestelmät; auton vakionopeuden säädin 1. Ohjelmistotekniikka - Software Engineering
Ohjelmiston ominaisuuksia • Ohjelmiston koko ja käsiteltävän tiedon määrä • Tavuina, ohjelmariveinä • Sähkömittari: muutama tuhat riviä • Avaruussukkula: kymmeniä miljoonia rivejä • Toimintoina/näyttöine • Esim. varastonvalvontasovellus: muutamia kymmeniä toimintoja ja näyttöjä • Tietokannan koko ja monimutkaisuus • Vasteaika- ja reaaliaikaisuusvaatimukset • Ohjelmiston kyky reagoida ympäristön ärsykkeisiin 1. Ohjelmistotekniikka - Software Engineering
Ohjelmiston ominaisuuksia • Luotettavuus • Suojautumista sekä ohjelmiston virheitä (puolustautuva ohjelmointi, defencive programming; elektroniikkatason, mekaniikkatason varmistukset) että laitteiston ja ympäristön häiriöitä vastaan (osien moninkertaistus, toipumismenettelyt ) • Hajautus • Työasemaverkko • Sulautettu järjestelmät: hissi • Tuotteistusaste • Räätälöinti tuotteistus, tuotekehitys massatuote 1. Ohjelmistotekniikka - Software Engineering
Esimerkkijärjestelmiä (kuv.) 1. Ohjelmistotekniikka - Software Engineering
Yrityksen tietotekniikka • Tietojärjestelmiä voi olla useita kymmeniä • Syntyneet pitkän aikavälin kuluessa • kirjavuus, tiedonsiirto järjestelmien välillä hankalaa • Integrointi • Liiketoimintanäkökulmasta • Avainprosessien kehittäminen tietojärjestelmien ja tietotekniikan avulla (liiketoimintaa tukevat kehityshankkeet projektit) • Tietohallintostrategia • Tietohallinto (osasto, organisaatioyksikkö) 1. Ohjelmistotekniikka - Software Engineering
Tietojärjestelmien roolit toimintayksikössä Tuotannonohjaus-järjestelmät Prosessinohjaus-järjestelmät Sulautetut järjestelmät … Päätöksentuki-järjestelmät Toimistoautomaatio-järjestelmät … TOIMINTAYKSIKKÖ OHJAUSTOIMINNOT SUORITTAVA TOIMINTA PERUSTOIMINNOT Taloushallinnon järjestelmät Henkilöstöhallinnon järjestelmät Toimistoautomaatio-järjestelmät … TUKITOIMINNOT 1. Ohjelmistotekniikka - Software Engineering
Liiketoiminta Tietojenkäsittelytehtävät hyväksikäyttö Tietojärjestelmä Tietojärjestelmä • Tietojärjestelmä • käyttäjät, ohjelmistot, • laitteistot ja tietovarastot, • jotka tarvitaan jonkin • tietojenkäsittelytehtävän • suorittamiseksi • tehostaa tai järkeistää • tietojenkäsittelypalvelun • tuottaja • tyydyttää tietotarpeen 1. Ohjelmistotekniikka - Software Engineering
tietotarve Tietojärjestelmä 2 Tietojärjestelmä 1 Palvelu 1.1 Palvelu 2.1 Palvelu 1.2 Tietojärjestelmä 3 Palvelu 3.1 Palvelun tuottaminen 1. Ohjelmistotekniikka - Software Engineering
Tietojenkäsittelyn kehittäminen • Tietojenkäsittelyn kehittämisen osa-alueet • laitteistot ja verkot • perusedellytys • sovellusratkaisut • hallitaan olemassa olevia laitteita ja tietoverkkoa sekä ohjataan yrityksen liiketoimintaprosesseja • laitteet ja tietoverkkoratkaisut sekä sovellukset muodostavat luotettavan, yhteensopivan ja helposti ylläpidettävän perusrakenteen • osaaminen • laitteiden ja sovellusten tehokkaan käytön edellytys • toimintatavat • yhtenäiset ja järkeistetyt toimintatavat tukevat laitteiden ja sovellusten hyötykäyttöä ja tiedonkulkua työntekijöiden välillä 1. Ohjelmistotekniikka - Software Engineering
Tietojenkäsittelyn kehittäminen • Tietojenkäsittelyn kehittäminen on siis • tietojärjestelmien kehittämistä (information systems development, ISD) • olemassa olevien tai uusien tietojärjestelmien kehittämistä ja laatimista asetettujen tavoitteiden mukaisesti • rinnakkaistermi: systeemityö • ja toiminnan sekä osaamisen kehittämistä • kokonaisvaltaisesti ja suunnitelmallisesti • ottaen huomioon liiketoiminnan tavoitteet 1. Ohjelmistotekniikka - Software Engineering
Tietojenkäsittelyn kehittäminen • Tietojenkäsittelyn kehittämisessä on otettava huomioon seuraavia kysymyksiä: • Mikä on kehittämisen tavoite? • Mitä tuloksia halutaan ja millä aikajaksolla tulosten on toteuduttava? • Miten suurta osaa henkilöstöstä kehittämisen tulokset koskevat? • Paljonko tarvitaan taloudellisia resursseja ja henkilöresursseja? • Miten paljon voidaan hyödyntää yrityksen omaa osaamista ja missä määrin tarvitaan ulkopuolista osaamista? • Miten tietojenkäsittelyn kehittämisprojekti ja sen aiheuttama muutos hallitaan? 1. Ohjelmistotekniikka - Software Engineering
Kehittämisprosessi KEHITYSRYHMÄ asettaa TAVOITTEET ovat ominaisuuksia havainnoi suorittaa ohjaa KOHDE- JÄRJESTELMÄ KOHDE- JÄRJESTELMÄ muutosprosessi YMPÄRISTÖ 1. Ohjelmistotekniikka - Software Engineering
Kehittämistyön luonne on muuttunut • 40-50 luvulla • laskennalliset sovellukset • ohjelmistojen kehittäjät olivat itse käyttäjiä • 60-luvulla kehittäjän ja käyttäjän roolien erkaneminen • suurempia ohjelmistohankkeita • integrointi • tietoliikenneratkaisut • 70-80 luvulla pc:n myötä • henkilökohtaiset tietojärjestelmät • käyttäjien osallistumien kehittämistyöhön • toimintokeskeiset ohjelmistot (varasto, tilaustenkäsittely) • 90-luvulla Windows-aikakausi • useat yhtäaikaiset sovellukset työpöydällä • 2000-luvolla • asiakaslähtöisyys, ryhmätyö • laajat, monimutkaiset integroidut tietojärjestelmät • ERP 1. Ohjelmistotekniikka - Software Engineering
Ohjelmistotuotannon ongelmia • Alan teknologian nopea kasvu ohjelmistotuotteiden koko on kasvanut kaksinkertaiseksi muutaman vuoden välein • Ohjelmistotuotteet ovat monimutkaisia ja laajoja • Ohjelmistotuotteet eivät ole virheettömiä • virheet ja puutteet ohjelman toiminnassa • ei vastaa asiakkaan tarpeita • ei voida muusta syystä ottaa käyttöön (yhteensopimattomuus, koulutus,…) • Hankkeet ovat kalliita ja joskus myös epäonnistuvat • aikataulu, talous, henkilöresurssit • tekniset ongelmat vs. projektinhallintaan liittyvät ongelmat • kommunikointi, ryhmätyön organisointi • Toteuttamistyön arviointi hankalaa • yli puolet ohjelmistohankkeista myöhästyy ja ylittää kustannuksensa • systeemityön tuottavuus ja kustannukset • monimutkaisempi ohjelmistotuote vaatii kalliimman kehittämisprosessin, mutta ei ole samassa suhteessa tuottava • ylläpito • ”mitä aikaisemmin kehitystyössä virhe on tapahtunut, sitä kalliimpi on sen korjaus” • vanhat ns. perinnejärjestelmät (legacy systems) 1. Ohjelmistotekniikka - Software Engineering
Ongelmien hallinta • 1960- luvulla alettiin kiinnittää ongelmiin huomiota (ohjelmistokriisi) • menetelmiä ja tekniikoita kehitellään eivät toisin ratkaise itse ongelmaa (tuotantoprosessi) • ohjelmistoprosessin hallinta (software process) • = kokonaisuus, jolla ohjataan tietojärjestelmän kehittämistä ideasta ohjelmasta luopumiseen saakka; kattaa koko elinkaaren • vuorovaikutuksessa ympäristön kanssa (laatujärjestelmä, projektien hallinta, liiketoiminta, johtaminen, yms. vaikuttavat) • organisaation systeemityön kypsyysaste • mitä tarkemmin määritelty, noudatettu, toistettavissa oleva, optimoitu ja hyväksytty ohjelmistoprosessi on, sitä korkeammalla kypsyystasolla (maturity) organisaatio on • ks. http://cs.joensuu.fi/tSoft/ 1. Ohjelmistotekniikka - Software Engineering
Haasteita menetelmäkehitykselle • Alan kehittymättömyys ei ole olemassa yksiselitteistä suunnittelumenetelmää • Kehitysmenetelmien kehittely vasta käynnissä • Järjestelmä ”keinolla millä tahansa, ad hoc” • Löytyy useimmassa tilanteessa sopiva ratkaisu • Ratkaisu muotoutuu yleisesti käytettäväksi menetelmäksi • Menetelmät hioutuvat järjestelmällisiksi, tukevat malleja ja teorioita, voidaan kuvata formaalisti • Löytyy uusia sovellusalueita, joihin mallit eivät sovi alkaa uuden mallin kehittely (palataan kohtaan 1) 1. Ohjelmistotekniikka - Software Engineering
Haasteita menetelmäkehitykselle • Ohjelmistotuotanto eroaa muista perinteisistä ns. insinööritieteistä • Monimutkaisuus • Monimutkaisuuden minimointi, rajapintojen yksinkertaisuus • Näkymättömyys • Valmiusasteen määrittely ongelmallista vaiheistus • Muunnettavuus • Vaatimusten muuttuminen, virheiden korjaamisesta aiheutuvat muutokset, toimintaympäristön muutokset ylläpideetävyys • Ainutkertaisuus • skaalautumattomuus • Epäjatkuvuus • Pienikin virhe voi kaataa koko järjestelmän 1. Ohjelmistotekniikka - Software Engineering
Ohjelmistokehittäjän ”huoneentaulu” • Mikään ei korvaa ratkaistavan ongelman perusteellista ymmärtämistä – joskus voi tosin käydä hyvä tuuri. • Mikään ratkaisu ei sovellu kaikkiin tehtäviin ja johonkin tilanteeseen parhaiten soveltuva lähestymistapa voi olla toisessa tilanteessa kaikista huonoin. • On olemassa monia hyödyllisiä lähestymistapoja, jotka toimivat useammassa kuin yhdessä tilanteessa, joten kannattaa tutustua sellaiseen mikä on toiminut aikaisemmin. 1. Ohjelmistotekniikka - Software Engineering
”huoneentaulu” jatkuu… • Ongelman ratkaisun niksi ei ole pelkästään miten menetelmiä sovelletaan (know-how) vaan mieluummin milloin niitä sovelletaan (know-when) – tämä antaa mahdollisuuden sovittaa ratkaisumenetelmä ongelmaan eikä päinvastoin. • Riippumatta siitä, kuinka hyvin taidat edellisen kohdan ”miten” ja ”milloin”, on olemassa ongelmia, jotka ovat nykytietämyksellä mahdottomia ratkaista tai joiden perimmäisiä ominaisuuksia kukaan ei ymmärrä riittävän hyvin: nöyryys on siis paikallaan 1. Ohjelmistotekniikka - Software Engineering
Kannattaako siis edes yrittää? • Poppakonsteja ei ole olemassa • Systemaattisella ja määrätietoisella toimintatapojen kehittämisellä voidaan päästä hyviin tuloksiin • Keskeistä on • Tunnistaa ongelmat • Tunnistaa ohjelmistotyön osa-alueet • Ymmärtää ohjelmistotuotanto prosessina • Ymmärtää terminologia – yhteinen kieli • Menetelmien osaaminen voi olla hyödyksi vasta kun on ymmärrys, mihin niitä voi käyttää. 1. Ohjelmistotekniikka - Software Engineering