Ylläpidettävät ohjelmat. Evoluutiolait (Lehman) Lakien keskinäiset suhteet. Muutostarpeita (evoluution syitä) Ohjelmien luokittelu (Lehman)



Samankaltaiset tiedostot
Ylläpidettävät ohjelmat. Evoluutiolait (Lehman) Lakien keskinäiset suhteet. Muutostarpeita (evoluution syitä) Ohjelmien luokittelu (Lehman)

Johdantoluento. Ohjelmien ylläpito

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

Ylläpito. Ylläpidon lajeja

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Ohjelmien analysointi. ER-kaaviot

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Integrointi. Ohjelmistotekniikka kevät 2003

Ohjelmistojen virheistä

Suunnitteluvaihe prosessissa

Tietojärjestelmän osat

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Makrojen mystinen maailma lyhyt oppimäärä

Ohjelmiston toteutussuunnitelma

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Luento 5. Timo Savola. 28. huhtikuuta 2006

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Ohjelmoinnin perusteet Y Python

Johdatus ohjelmointiin

Oleelliset vaikeudet OT:ssa 1/2

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Uudelleenkäytön jako kahteen

Järjestelmäarkkitehtuuri (TK081702) Lähtökohta. Integroinnin tavoitteet

Koodistoeditorin tavoitteet ja tilannekatsaus

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Ohjelmoinnin perusteet Y Python

812336A C++ -kielen perusteet,

LAINAUSJÄRJESTELMÄ. Kyllä. Vihermetsän lukion kirjastossa on samankaltainen, mutta monimutkaisempi lainausjärjestelmä:

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

Verilogvs. VHDL. Janne Koljonen University of Vaasa

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

Käytännön haasteita ja ratkaisuja integraation toteutuksessa. Jukka Jääheimo Teknologiajohtaja Solita Oy

ohjelman arkkitehtuurista.

Testaussuunnitelma PULSU. Syksy 2008 Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmoinnin peruskurssien laaja oppimäärä

Lyhyt yhteenveto ohjelmistovaatimuksista standardissa ISO

Ohjelmoinnin perusteet, syksy 2006

Simulointi. Tapahtumapohjainen

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Standardi IEC Ohjelmisto

SENAATTILA uudistuu keväällä 2015

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Turvallisuusseminaari Silja-Line

Käyttäjäkeskeinen suunnittelu

Sisältö IT Linux 2001:n uudet ominaisuudet IT Linux 2001:n yhteensopivuus Red Hat 7.0:n kanssa Asennuksen valmistelu

$$$ Raha ratkaisee. $$$ Raha ratkaisee. Ohjelmistotuote. Ohjelmistotekniikan määritelmä

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Ohjelmoinnin perusteet Y Python

Quality Consulting M.Mikkola OY

TAMPEREEN TEKNILLINEN YLIOPISTO

Kiertokysely. Sulautetut järjestelmät Luku 2 Sivu 1 (??)

Täysautomatisoitu raportointiympäristö. Joni-Petteri Paavilainen Jani Alatalo

Tietokanta (database)

Curriculum. Gym card

ITSM. Olli Saranen Senior Consultant Avoset Oy Oliko ennen kaikki paremmin kuin nykyään? Kivikaudelta nykyaikaan

Testaaminen ohjelmiston kehitysprosessin aikana

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

AU Automaatiotekniikka. Toimilohko FB

Software engineering

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Prosessien hallinta. Lean-näkökulma laboratorion prosessien kehittämiseen ja hallintaan

Käyttötapausanalyysi ja testaus tsoft

P e d a c o d e ohjelmointikoulutus verkossa

Sangen lyhyt L A T E X-johdatus, osa 2

Tässä tiivistelmässä standardi tarkoittaa standardia SFS-EN

Capacity Utilization

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Security server v6 installation requirements

Ohjelmiston testaus ja laatu. Testausmenetelmiä

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

Enterprise SOA. Nyt. Systeemi-integraattorin näkökulma

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Ohjelmistoprojektien hallinta Vaihejakomallit

Poikkeavuuksien havainnointi (palvelinlokeista)

12. Javan toistorakenteet 12.1

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

5. HelloWorld-ohjelma 5.1

Harjoitustyö Case - HelpDesk

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

12. Javan toistorakenteet 12.1

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

S11-09 Control System for an. Autonomous Household Robot Platform

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

1. SIT. The handler and dog stop with the dog sitting at heel. When the dog is sitting, the handler cues the dog to heel forward.

UML -mallinnus TILAKAAVIO

Ohjelmoinnin peruskurssien laaja oppimäärä

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

Transkriptio:

Ylläpidettävät ohjelmat Perintöohjelmat (legacy software) legacy (perintö, jäämistö) Ohjelmistoevoluutio Lehmanin esittämä ohjelmien jaottelu Lehmanin evoluutiolait Perintöohjelmiston rakenne Jatkotoimenpiteet perintöohjelmille Spagettikoodi ja sen korjaaminen Muutostarpeita (evoluution syitä) Yrityksen sisäiset toiminnan muutokset uudet liiketoiminta-alueet toimintatapa- ja organisaatiomuutokset uudet sovellusalueet Ulkoiset syyt viranomaisten toimenpiteet kilpailijat ja heidän toimenpiteensä yhteistyökumppanit ja verkostoituminen asiakkaat Järjestelmien sisäiset muutostarpeet järjestelmien puutteet ja virheet uuden tekniikan vaikutukset järjestelmän huono suunnittelu Ohjelmien luokittelu (Lehman) Ongelma Ohjelma Käyttäjätyytyväisyys S-ohjelmat (specification) ongelma voidaan määritellä tarkasti miten hyvin ohjelma vastaa määrittelyään P-ohjelmat (problem, paradigm) ongelman tarkka määrittely vaikeaa miten hyvin ohjelma vastaa todellisuutta E-ohjelmat (embedded, evolution) ohjelmat ratkaisevat reaalimaailmassa esiintyviä tehtäviä ohjelmien täytyy muuntua ympäristön muutosten mukaan ohjelma ongelma sovellusalue Evoluutiolait (Lehman) I laki: Jatkuva muutos II laki: Lisääntyvä monimutkaisuus III laki: Itseohjautuvuus suurten järjestelmien evoluutio IV laki: Vakaus (organisaatio) kehittämisnopeuden muuttumattomuus V laki: Vakaus (julkistusversiot) versioiden välisten erojen muuttumattomuus VI laki: Jatkuva kasvu toiminnallisuuden lisääminen käyttäjien vaatimuksesta VII laki: Heikkenevä laatu kasvun aiheuttama laadun huononeminen VIII: Vuorovaikutteisuus voimien ja vastavoimien välisen tasapainon etsiminen Lakien keskinäiset suhteet. Jatkuva muutos. Lisääntyvä monimutkaisuus 8. Vuorovaikutteisuus 6. Jatkuva kasvu. Vakaus (organisaatio) 7. Heikkenevä laatu. Itseohjautuvuus. Vakaus (julkistusversiot) Muutosten hallinnan helpottaminen Lehmanin. laki jantasainen dokumentointi Syiden ja perusteluiden dokumentointi miksi jokin muutos on tehty, mitä oletuksia on tehty Katselmoinnit versioinnin yhteydessä ristiriitaisuuksien havaitseminen Sellaisten versioiden julkaisu, joissa on keskitytty virheiden korjaamiseen, suorituskyvyn parantamiseen ja rakenteellisiin parannuksiin Muutostarpeiden kohdentumisen seuraaminen haavoittuvien ja muutosalttiiden kohtien löytäminen 6

Monimutkaisuuden ilmeneminen Sovellusalue ja sen toiminnallisuus Määrittely ja vaatimukset rkkitehtuuri Suunnittelu ja toteutus Rakenteet osajärjestelmät, moduulit, oliot, kutsuketjut, koodi, dokumentit jne. Lehmanin. laki 7 kuukausia kuukausia henkilöitä henkilöitä I II Lehmanin. laki Erilaisia tehtäviä I Tehtävä, joka voidaan jakaa II Tehtävä, jota ei voida jakaa III Tehtävä, joka voidaan jakaa mutta joka vaatii kommunikointia IV Tehtävä, jonka osatehtävillä on monimutkaisia keskinäisiä kytköksiä Brooks: The Mythical Man-Month kuukausia kuukausia III henkilöitä IV henkilöitä 8 Yhteyksien määrä (kommunikaation lisääntyminen) Ohjelmoijia: Yhteyksiä: Ohjelmoijia: Yhteyksiä: 0 Ohjelmoijia: Yhteyksiä: Ohjelmoijia: 0 Yhteyksiä: Lehmanin. laki Ohjelmoijia: Yhteyksiä: 6 9 Esimerkki myöhästymisestä Tehtävän koko: henkilötyökuukautta työntekijää kuukautta henk. Lehmanin. laki I B C D kk 0 6 7 8 0 Lehmanin. laki Myöhästymiseen reagointi Lehmanin. laki Myöhästymiseen reagointi Oletetaan, että vain vaihe oli väärin arvioitu koko tehtävä valmistuu kk myöhässä jos halutaan pysyä aikataulussa jäljellä oleva työ: 9 htkk jäljellä oleva aika: kk tarvitaan. henkilöä ( lisää) B C D 0 6 7 8 II Oletetaan, että kaikki vaiheet on arvioitu väärin vastaavalla tavalla koko tehtävä valmistuu kk myöhässä jos halutaan pysyä aikataulussa jäljellä oleva työ: 8 htkk jäljellä oleva aika: kk tarvitaan 9 henkilöä (6 lisää) III B C D 0 6 7 8

Lehmanin. laki Myöhästymiseen reagointi Jatkuva kasvu Lehmanin 6. laki ikaa tarvitaan myös uusien työntekijöiden kouluttamiseen työn jakamiseen uudelleen B C D IV koulutus päättyy 0 6 7 8 Vrt. kuvia II ja IV Kasvun aiheuttajia: laiteajurit graafinen käyttöliittymä hajautetut järjestelmät Toiminnallisuuden lisääntyminen asiakasvaatimukset taloudelliset ja kilpailulliset tekijät Lehmanin lakien soveltaminen voin ohjelmistokehitys (Linu) Lehmanin kritiikkiä Linu 99-999 (9 versiota) kasvu lähes eksponentiaalista laiteajurit monimutkaisuus ei (ainakaan vielä) ole lisääntynyt voimen ohjelmistokehityksen tyypillisiä piirteitä: aikatauluun ei kohdistu liiketaloudellisia paineita koodin laatu vaihtelee, ei tiukkoja standardeja lopputuote voi olla epävakaa ja puolivalmis Linu: eri tuotelinjat valmiimmille versioille ja kokeiluasteen koodille testaus ja ylläpito ei etukäteen suunniteltua Tarkat määritelmät puuttuvat Lait perustuvat suppeaan ja epätyypilliseen sovellusalueeseen käyttöjärjestelmiä (OS/60, VME), pankkitapahtumajärjestelmiä Tutkittujen ohjelmistojen asiakkaina suuryritykset Termin laki käyttö ilmiöitä, jotka kuvaavat inhimillistä toimintaa toisaalta: kysynnän ja tarjonnan laki Lakien todistaminen ja testaaminen vaikeaa Ohjelmien minimointi 6 Laaja näkökulma perintöohjelmistoon käyttää Tukiohjelmisto Sovellusohjelmisto ovat sulautuneina Sovellusalueen toimintaprosessit Sovellusohjelmisto Tukiohjelmisto Laitteisto Sovellusalueen käytännöt ja säännöt Järjestelmän data Vanha järjestelmä: Uusi järjestelmä: Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma ajetaan Laitteisto ajetaan käyttää Sovelluksen data käyttävät rajoittavat Sovellusalueen toimintaprosessit Tiedosto Tiedosto Tiedosto Tiedosto Tietokannanhallintajärjestelmä 7 8

Perintöohjelmien rakenne Perintöohjelmien alkuperäinen suunnittelu Ideaalirakenne (alkuperäinen rakenne) Käyttöliittymä Todellinen rakenne Käyttöliittymä Järjestelmä P a l v e l u t Tietokanta Tietokanta Syötteet Prosessointi Tulosteet 9 0 Syötteet loop repeat Print( Welcome Please enter your card ); until Card_input; ccount_number := Read_card; Get_account_details(PIN, ccount_balance, Cash_available); Prosessointi Retain_card; if Invalid_card(PIN) then Print( Card retained please contact your bank ); else repeat Print_operation_select_message; Button := Get_button; case Button is when Cash_only => Dispense_cash(Cash_available, mount_dispensed); when Print_balance => Print_customer_balance(ccount_balance); when Statement => Order_statement(ccount_number); when Check_book => Order_checkbook(ccount_number); end case; Print( Press CONTINUE for more services or STOP to finish ); Button := Get_button; until Button = STOP; Tulosteet Eject_card; Print( Please take your card ); Update_account_information(ccount_number, mount_dispensed); end loop; Implisiittiset koodaussäännöt Ei löydy järjestelmän dokumenteista, vaan kokeneiden ohjelmoijien ja ylläpitäjien muistista Järjestelmäkohtaisia Sääntöjen noudattamatta jättäminen johtaa virheelliseen koodiin Implisiittinen koodaussääntö Jotta funktio toimisi oikein, anna globaalille muuttujalle B alkuarvo ennen funktion C kutsua. Ennen kuin kutsut funktiota X, kutsu funktiota Y. Virheellinen koodi Funktiota C kutsutaan sijoittamatta B:lle alkuarvoa. Funktiota X kutsutaan ilman funktion Y kutsumista. Vaihtoehtoisia jatkotoimenpiteitä perintöohjelmille Järjestelmän hylkääminen kokonaan Järjestelmän ylläpidon jatkaminen Järjestelmän uudistaminen ylläpidettävyyden parantaminen Järjestelmän korvaaminen uudella Muita ratkaisuja: kääriminen palveluiden ulkoistaminen jäädyttäminen Järjestelmän laatu Jatkotoimenpiteiden päätösmatriisi Ylläpidä/ hylkää Hylkää/ korvaa Jatkokehitä Uudista Liiketaloudellinen arvo

Perintöohjelmien korvaaminen Hankaloittavia tekijöitä: tarkkojen (määrittely)dokumenttien puuttuminen yrityksen toimintasäännöt ja prosessit usein koodattuna perintöohjelmiin korvattavan ja korvaavan järjestelmän yhtäaikainen ylläpito yleiset uuden järjestelmän kehittämiseen sisältyvät riskit Perintöohjelmien muuttaminen Hankaloittavia tekijöitä: epäyhtenäinen ohjelmointityyli vanhanaikaiset ohjelmointikielet dokumenttien puuttuminen ohjelman alkuperäisen rakenteen tunnistamisen vaikeus muutoksia tukematon arkkitehtuuri koodin optimointi tietorakenteiden hajanaisuus ja epäyhtenäisyys 6 rviointiin liittyviä kysymyksiä Järjestelmän ymmärtäminen kuinka ymmärrettävää lähdekoodi on? kuinka monimutkaisia kontrollirakenteita on käytetty? onko muuttujilla kuvaavat nimet? Dokumentit mitä dokumentteja järjestelmästä on olemassa? kuinka luotettavia dokumentit ovat? Järjestelmän data onko järjestelmällä erityinen tietomalli (data model)? onko eri tiedostoissa oleva data päällekkäistä? miten yhtenäistä data on? Toiminta toimiiko järjestelmä oikein? haittaavatko suorituskykyyn liittyvät ongelmat järjestelmän käyttöä? rviointiin liittyviä kysymyksiä () Ohjelmointikieli onko käytetylle ohjelmointikielelle kääntäjiä? käytetäänkö ohjelmointikieltä uusien ohjelmien kehittämisessä? Testaus ovatko järjestelmän testaustiedot saatavilla? Ohjelmoijien taidot onko saatavilla osaavia ihmisiä järjestelmän ylläpitoon? kuinka suurella osalla ohjelmoijista on käsitys ohjelmasta? 7 8 Järjestelmien strateginen luokittelu Toiminnan kehittämisen mahdollistavat järjestelmät uuden liiketoiminnan luominen ja olemassa olevan kehittäminen olennaisia kilpailukyvyn kannalta esim. asiakkaiden analysointi, sähköinen kaupankäynti Toiminnan perusjärjestelmät keskeisten operatiivisten toimintojen tukeminen esim. toiminnan ohjaus, myynnin tuki Toiminnan tukijärjestelmät toiminnan perusasioiden hoitaminen esim. kirjanpito, laskutus Muut järjestelmät esim. vain yhden henkilön käytössä olevat järjestelmät 9 start: Get ( Time-on, Time-off, Time, Setting, Temp, Switch ) if Switch = off goto off if Switch = on goto on goto cntrld off: if Heating-status = on goto sw-off goto loop on: if Heating-status = off goto sw-on goto loop cntrld: if Time = Time-on goto on if Time = Time-off goto off if Time < Time-on goto start if Time > Time-off goto start if Temp > Setting goto off if Temp < Setting goto on sw-off: Heating-status := off goto switch sw-on: Heating-status := on switch: Switch-heating loop: goto start Spagettikoodia badly structured program is likened to a plateful of spaghetti: if one strand is pulled, then the ramifications can be seen at the other side of the plate where there is mysterious turbulence and upheaval. (Rushby) 0

loop -- Get statement finds values for the given variables from the -- system s environment Get ( Time-on, Time-off, Time, Setting, Temp, Switch ); case Switch is when on => if Heating-status = off then Heating-status := on; Switch-heating; end if; when off => if Heating-status = on then Heating-status := off; Switch-heating; end if; when Controlled => if Time >= Time-on and Time <= Time-off then if Temp > Setting and Heating-status = on then Heating-status := off; Switch-heating; elsif Temp < Setting and Heating-status = off then Heating-status := on; Switch-heating; end if; end if; Ohjelmien end case; ylläpito ja evoluutio end loop; Spagettikoodista saatu rakenteellinen koodi Spagettikoodista rakenteelliseksi Rakenteellinen koodi one entry one eit tiedetään, mistä kuhunkin ohjelmakohtaan on tultu Systemaattisia keinoja spagettikoodin poistamiseen: tilamuuttujan lisääminen monistaminen Muita systemaattisia parannuskeinoja: ehtojen yksinkertaistaminen looginen yksinkertaistaminen Tilamuuttujan lisääminen: alkuperäinen tilanne Tilamuuttujan lisääminen: periaate Set I = B D C E I = 0? f I =? f I =? f t t t STOP 0 F I = n? t n Set I = I = 0? I =? I =? STOP I = I = B I = Tilamuuttujan lisääminen: lopputulos Monistaminen: alkuperäinen tilanne I =? I =? C D I = I = I = I = 0 7 9 8 6 I =? E I = 0 6 6

Monistaminen: lopputulos Monistamisesta yleisemmin X 7 7 8 7 8 8 9 6 Y 7 Tilanne: tarvitaan uusi toiminto melkein (mutta ei ihan) samanlainen toiminto on jo olemassa d hoc ratkaisuja: lisätään parametri, jolla säädellään toimintoa monistaminen Parempi ratkaisu: koodin jakaminen useammaksi uudeksi aliohjelmaksi 8 jaettavaa koodia Esimerkki koodin jakamisesta llowabletemperature := MallowableTemperature (Environment ); /* get most recent temperature from the stack */ Temperature := Stack.Temperature [ Stack.Top ]; Stack.Temperature [ Stack.Top ] := INITIL_TEMPERTURE; if ( Stack.Top > 0 ) then begin Stack.Top := Stack.Top end; Esimerkki koodin jakamisesta lkuperäinen toiminto Toiminnon jaettu versio jaetun koodin kutsut Uusi toiminto joka tarvitsee jaettua koodia if ( Temperature > llowabletemperature ) then begin ShutdownReactor ( Environment, Temperature ) end; Ohjelmien ylläpito ja evoluutio 9 Jaettu koodi 0 Ehtojen yksinkertaistaminen Monimutkainen ehto: if not ( > B and (C > D or not (E > F)))... Yksinkertaistettu ehto: if ( <= B or (C >= D and E > F))... Looginen yksinkertaistaminen. Piirrä ohjelmasta vuokaavio. Johda boolean-lauseke jokaisen peruslohkon lausejonolle. Yksinkertaista boolean-lausekkeet. Rakenna ohjelma uudestaan 7

= = = B = B = ( B) V ( B) = B 6 = B 7 = B C 8 = B C D Begin B B B End lkuperäinen ohjelma B 6 C C 7 9 D D 8 Vuokaaviota vastaava totuustaulu B C D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 7 8 ction ction Proc Begin B ction B B Proc ction C B ction 6 Parannettu ohjelma C D ction 7 D Proc 9 ction 8 D Proc 9 D End 8