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

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Ohjelmien analysointi. ER-kaaviot

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

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

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

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

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

Makrojen mystinen maailma lyhyt oppimäärä

Ohjelmoinnin perusteet Y Python

Integrointi. Ohjelmistotekniikka kevät 2003

Turvallisuusseminaari Silja-Line

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Ohjelmoinnin peruskurssien laaja oppimäärä

Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta

DATA-vaiheen ohjelmoijan yleissivistys helposti unohtuvia asioita

Suunnitteluvaihe prosessissa

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Johdatus rakenteisiin dokumentteihin

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Ohjelmiston toteutussuunnitelma

AU Automaatiotekniikka. Toimilohko FB

Dynaamista ja joustavaa ohjelmointia - maukasta makrokielellä

Ohjelmoinnin perusteet Y Python

Harjoitustyö: virtuaalikone

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tässä ohjeessa käydään läpi sosiaalisen median verkkopalveluiden lisätoimintojen lisääminen verkkosivuillesi.

Bootstrap / HTDP2 / Realm of Racket. Vertailu

UCOT-Sovellusprojekti. Testausraportti

Varmennepalvelu - testipenkki. Kansallisen tulorekisterin perustamishanke

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Sisällysluettelo Table of contents

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

BDD (behavior-driven development) suunnittelumenetelmän käyttö open source projektissa, case: SpecFlow/.NET.

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

812336A C++ -kielen perusteet,

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Tietojärjestelmän osat

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

CUDA. Moniydinohjelmointi Mikko Honkonen

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.

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Koodistoeditorin tavoitteet ja tilannekatsaus

ECDL Tietokannat. Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

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

Verilogvs. VHDL. Janne Koljonen University of Vaasa

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Ohjelmoinnin perusteet Y Python

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

Capacity Utilization

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

ohjelman arkkitehtuurista.

Luento 4 Aliohjelmien toteutus

TIE Ohjelmistojen suunnittelu. Luento 2: protot sun muut

Esimerkki 1: Kahviautomaatti.

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

MODBUS -väyläohjaus DITRONIC TOUCH -KOSKETUSNÄYTTÖ. s-posti:

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Choose Finland-Helsinki Valitse Finland-Helsinki

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

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Projektisuunnitelma. Projektin tavoitteet

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II

Scheme-kesäkurssi luento 3

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

Lisensointikuulumisia - Kustannustehokkuus Oracle lisensoinnissa

TAMPEREEN TEKNILLINEN YLIOPISTO

Ohjelmoinnin perusteet Y Python

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Uudelleenkäytön jako kahteen

Voice Over LTE (VoLTE) By Miikka Poikselkä;Harri Holma;Jukka Hongisto

Harjoitustyö 3 - Millosemeni

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

SIMULINK S-funktiot. SIMULINK S-funktiot

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

end; end else begin if aani=true then begin sound(247); delay(100); sound(220); delay(200); nosound; end; end;

Ketterä analytiikka mitä se voisi olla käytännössä? Case Katedata Delta Motor Group

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

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 TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka Ohjelmien luokittelu (Lehman) Ongelma Ohjelma Käyttäjätyytyväisyys S-ohjelmat (specification) ongelma voidaan määritellä tarkasti ohjelma miten hyvin ohjelma vastaa määrittelyään P-ohjelmat (problem, paradigm) ongelman tarkka määrittely vaikeaa miten hyvin ohjelma vastaa todellisuutta ongelma E-ohjelmat (evolution) sovellusalue ohjelmat ratkaisevat reaalimaailmassa esiintyviä tehtäviä miten hyvin ohjelma pystyy muuntumaan ympäristön muutosten mukaisesti 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 TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka Lakien keskinäiset suhteet. Jatkuva muutos 8. Vuorovaikutteisuus 6. Jatkuva kasvu. Vakaus (organisaatio). Itseohjautuvuus. Vakaus (julkistusversiot) kuukausia kuukausia I henkilöitä III Lehmanin. laki Erilaisia tehtäviä I Tehtävä, joka voidaan jakaa II Tehtävä, jota ei voida jakaa III Tehtävä, ä, joka voidaan odaa jakaa mutta joka vaatii kommunikointia IV Tehtävä, jonka osatehtävillä on monimutkaisia keskinäisiä kytköksiä kuukausia kuukausia II henkilöitä IV. Lisääntyvä monimutkaisuus 7. Heikkenevä laatu TTY Ohjelmistotekniikka henkilöitä Brooks: The Mythical Man-Month henkilöitä TTY Ohjelmistotekniikka 6

Lehmanin. laki Yhteyksien määrä (kommunikaation lisääntyminen) Ohjelmoijia: Ohjelmoijia: j Ohjelmoijia: j Yhteyksiä: Yhteyksiä: Yhteyksiä: 6 Ohjelmoijia: Yhteyksiä: 0 Ohjelmoijia: 0 Yhteyksiä: TTY Ohjelmistotekniikka 7 Lehmanin. laki Esimerkki myöhästymisestä Tehtävän koko: henkilötyökuukautta työntekijää kuukautta henk. I A B C D kk 0 6 7 8 TTY Ohjelmistotekniikka 8 Lehmanin. laki Myöhästymiseen reagointi Oletetaan, että vain vaihe A 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ää) A B C D II 0 6 7 8 TTY Ohjelmistotekniikka 9 Lehmanin. laki Myöhästymiseen reagointi 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 A B C D 0 6 7 8 TTY Ohjelmistotekniikka 0 Myöhästymiseen reagointi Aikaa tarvitaan myös uusien työntekijöiden kouluttamiseen työn jakamiseen uudelleen IV B C D A koulutus päättyy 0 6 7 8 Lehmanin. laki Vrt. kuvia II ja IV TTY Ohjelmistotekniikka Lehmanin kritiikkiä 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 TTY Ohjelmistotekniikka

Lehmanin lakien soveltaminen Avoin ohjelmistokehitys (Linu) Linu 99-999 (9 versiota) kasvu lähes eksponentiaalista laiteajurit monimutkaisuus ei (ainakaan vielä) ole lisääntynyt Avoimen ohjelmistokehityksen ksen 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 TTY Ohjelmistotekniikka Perintöohjelmiston rakenne ajetaan Laitteisto käyttää ajetaan käyttää Sovelluksen data Sovellusalueen toimintaprosessit Sovellusohjelmisto Tukiohjelmisto Laitteisto Tuki- ohjelmisto Sovellus- ohjelmisto ovat Sovellusalueen sulautu- käytännöt ja neina säännöt käyttävät rajoittavat Sovellusalueen toimintaprosessit TTY Ohjelmistotekniikka Rakenteen muuttuminen Ideaalirakenne (alkuperäinen rakenne) Käyttöliittymä Todellinen rakenne Käyttöliittymä Perintöohjelmiston data Vanha järjestelmä: Uusi järjestelmä: Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma Ohjelma P a l v e l u t Tietokanta Tietokanta Tiedosto Tiedosto Tiedosto Tiedosto Tietokannanhallintajärjestelmä TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka 6 Perintöohjelmien alkuperäinen suunnittelu Syötteet Järjestelmä Prosessointi Tulosteet TTY Ohjelmistotekniikka 7 Syötteet Prosessointi Tulosteet loop repeat Print( Welcome Please enter your card ); until Card_input; Account_number := Read_card; Get_account_details(PIN, Account_balance, Cash_available); if Invalid_card(PIN) then Retain_card; 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, Amount_dispensed); when Print_balance => Print_customer_balance(Account_balance); when Statement => Order_statement(Account_number); when Check_book => Order_checkbook(Account_number); end case; Print( Press CONTINUE for more services or STOP to finish ); Button := Get_button; until Button = STOP; Eject_card; Print( Please take your card ); Update_account_information(Account_number, Amount_dispensed); TTY Ohjelmistotekniikka 8 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 A 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. Mitä perintöohjelmille voidaan tehdä? Järjestelm män laatu Ylläpidä/ hylkää Hylkää/ korvaa Jatkokehitä Uudista Liiketaloudellinen arvo TTY Ohjelmistotekniikka 9 TTY Ohjelmistotekniikka 0 Arviointiin liittyviä kysymyksiä Järjestelmän ymmärrettävyys 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 k luotettavia tt dokumentit ovat? Järjestelmän data noudattaako järjestelmän data jotakin tiettyä tietomallia? 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öä? TTY Ohjelmistotekniikka Arviointiin 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 koko ohjelmasta? TTY Ohjelmistotekniikka 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 i perusjärjestelmät j ä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 Korvaaminen on hankalaa, koska Tarkat määrittely- ja muut dokumentit puuttuvat Yrityksen toimintasäännöt ja prosessit voivat olla koodattuina perintöohjelmiin Korvattavaa ja korvaavaa järjestelmää voidaan joutua ylläpitämään samanaikaisesti Uuden järjestelmän kehittäminen aiheuttaa aina riskejä TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka

Muuttaminen on hankalaa, koska Ohjelmointityyli voi olla epäyhtenäinen Ohjelmointikieli voi olla vanhanaikainen Dokumentit puuttuvat Ohjelman alkuperäistä rakennetta on vaikea tunnistaa Arkkitehtuuri ei tue muutoksia Koodia on optimoitu Tietorakenteet ovat hajanaisia ja epäyhtenäisiä TTY Ohjelmistotekniikka 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 A 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) TTY Ohjelmistotekniikka 6 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; Spagettikoodista saatu rakenteellinen koodi 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 TTY Ohjelmistotekniikka 7 end loop; Spagettikoodista rakenteelliseksi Rakenteellinen koodi one entry one eit tiedetään, mistä kuhunkin ohjelmakohtaan on tultu Systemaattisia keinoja spagettikoodin poistamiseen: tilamuuttujan lisääminen monistaminen looginen yksinkertaistaminen TTY Ohjelmistotekniikka 8 Tilamuuttujan lisääminen: alkuperäinen tilanne Tilamuuttujan lisääminen: periaate Set I = B D A C E I = 0? f I =? f I =? f t t t STOP 0 F I = n? t n TTY Ohjelmistotekniikka 9 TTY Ohjelmistotekniikka 0

Set I = I = 0? I =? I =? I =? I =? I =? A STOP I = I = B I = C D E I = I = I = I = 0 I = 0 Tilamuuttujan lisääminen: lopputulos TTY Ohjelmistotekniikka Monistaminen: alkuperäinen tilanne 7 9 8 6 TTY Ohjelmistotekniikka X Monistaminen: lopputulos 7 7 8 7 8 8 6 Y Looginen yksinkertaistaminen. Piirrä ohjelmasta vuokaavio. Johda boolean-lauseke jokaisen peruslohkon lausejonolle. Yksinkertaista boolean-lausekkeet. Rakenna ohjelma uudestaan 9 TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka B B = A = A = A Λ B = A Λ B = ( A Λ B) V (A Λ B) = B 6 = A Λ B 7 = A Λ B Λ C 8 = A Λ B Λ C Λ D End A Begin B A Alkuperäinen ohjelma B 6 C C 7 9 D D 8 Vuokaaviota vastaava totuustaulu A B C D 6 7 8 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 TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka 6 6

B Action B B Action A Action Proc Begin End A Proc Action C B Action 6 Parannettu ohjelma C D Action 7 D Proc 9 Proc 9 Action 8 D TTY Ohjelmistotekniikka 7 D Koodin muuttaminen (esimerkki evoluutiosta) Tilanne: tarvitaan uusi toiminto melkein (mutta ei ihan) samanlainen toiminto on jo olemassa Ad hoc ratkaisuja: lisätään parametri, jolla säädellään toimintoa monistaminen Parempi ratkaisu: koodin jakaminen useammaksi uudeksi aliohjelmaksi TTY Ohjelmistotekniikka 8 jaettavaa koodia Esimerkkitilanne AllowableTemperature := MaAllowableTemperature (Environment ); /* get most recent temperature from the stack */ Temperature := Stack.Temperature [ Stack.Top ]; Stack.Temperature [ Stack.Top ] := INITIAL_TEMPERATURE; if ( Stack.Top > 0 ) then begin Stack.Top := Stack.Top end; if ( Temperature > AllowableTemperature ) then begin ShutdownReactor ( Environment, Temperature ) end; Ohjelmien ylläpito ja evoluutio TTY Ohjelmistotekniikka 9 Alkuperäinen tilanne Jaettu koodi kutsuttavassa operaatiossa Koodin jakamistapoja Monistaminen operaatio tarvitsee toisen operaation koodia operaatio sisältää koodia, jota toinen operaatio tarvitsee Jaettu koodi kutsuvassa operaatiossa TTY Ohjelmistotekniikka 0 Jaettu koodi kutsuttavassa Alkuperäinen toiminto Uusi versio Toinen toiminto joka tarvitsee jaettua koodia Jaettu koodi kutsuttavassa Lukeminen ID:n tarkistaminen Kenttien tarkistaminen Tallentaminen [kutsuva operaatio] ListMissilePosition- ListNewMissile- ListMissileUpdate- ListMissileID- jaetun koodin kutsut Read- MessageID ( ) MessageFields ( ) Save- Jaettu koodi TTY Ohjelmistotekniikka TTY Ohjelmistotekniikka 7

Jaettu koodi kutsuvassa Yleisiä: Lukeminen ID:n tarkistaminen Tallentaminen Tapauskohtainen: Kenttien tarkistaminen [kutsuva operaatio] ListMissile- MissilePosition- Fields ( ) NewMissile- Fields ( ) MissileUpdate- Fields ( ) MissileID- Fields ( ) TTY Ohjelmistotekniikka 8