Miten tehdää. ään n virheettömi. miä ohjelmia. Ralph-Johan Back Joakim von Wright Åbo Akademi TUCS Formaalit menetelmät t ohjelmoinnissa ryhmä



Samankaltaiset tiedostot
Matematiikan ohjelmointi. Joakim von Wright

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Ohjelmien automaattisen verifioinnin reunamailla

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

Tarvitseeko informaatioteknologia matematiikkaa?

Oleelliset vaikeudet OT:ssa 1/2

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

E-math - sa hko inen oppimisympa risto matematiikan opiskeluun. Ralph-Johan Back Åbo Akademi (Virtuaaliopetuksen päivät 2013)

1. Olio-ohjelmointi 1.1

Kokeellista matematiikkaa SAGE:lla

Tähtitieteen käytännön menetelmiä Kevät 2009

Turmeleeko ohjelmointi nuorisomme?

Ohjelmoinnin peruskurssi Y1

Integrointialgoritmit molekyylidynamiikassa

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet )

public static void main (String [] args)

Tietotekniikan perusopetuksen kehittäminen

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmoinnin perusteet Y Python

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Automaattinen yksikkötestaus

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

LUKUTEORIA johdantoa

Ohjelmoinnin perusteet Y Python

Rakenteiset päättelyketjut ja avoin lähdekoodi

Tapahtuipa Testaajalle...

Logiikka 1/5 Sisältö ESITIEDOT:

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Olio-ohjelmointi Javalla

Ohjelmistotekniikka - Luento 2

11. Javan toistorakenteet 11.1

815338A Ohjelmointikielten periaatteet

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

812341A Olio-ohjelmointi, I Johdanto

4.3. Matemaattinen induktio

2. Olio-ohjelmoinista lyhyesti 2.1

Pankissa. Oikeesti aikuisten 1 tekstejä ja harjoituksia suomen kielen opetukseen

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

OSUUSPANKIN KONSERNITILIPALVELU. Asiakasohje

Algoritmit 1. Luento 2 Ke Timo Männikkö

Tutoriaaliläsnäoloista

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Nuoret mediatoimijoina

Matematiikan mestariluokka, syksy

Ohjelmointi 1 / syksy /20: IDE

811312A Tietorakenteet ja algoritmit I Johdanto

- Näin ollen päätettiin myös jatkossa pitää kokoukset samantapaisina.

DIGIROAD DIGIROAD PALVELUT

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

tutkimus (EBMeDS( EBMeDS) osana Päätöksentukihanketta v Terveystieteen laitos, tutkija Tiina Kortteisto

Uudelleenkäytön jako kahteen

Ohjelmoinnin perusteet Y Python

Ehto- ja toistolauseet

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Onnistunut SAP-projekti laadunvarmistuksen keinoin

9. Muunneltavuuden hallinta

TIETOTEKNIIKAN KOULUTUSOHJELMA

Algoritmit 1. Luento 1 Ti Timo Männikkö

Tentti: T Ohjelmoinnin peruskurssi, osa 1. Yleistä. Tehtävä 1

Laaja-alainen, opiskelijalähtöinen ja projektiperusteinen opetussuunnitelma, case Monitori

T SEPA päiväkirja

IT-OSAAJA, TIETOJENKÄSITTELYN ERIKOISTUMISOPINNOT

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Siirto Yritysasiakkaille. Palvelukuvaus: Siirto-vastaanotto

811120P Diskreetit rakenteet

Organisatorinen muutos

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Matematiikan opetuksen kehittäminen avoimen lähdekoodin ohjelmistojen avulla Petri Salmela & Petri Sallasmaa

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Javan perusteita. Janne Käki

Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita.

Ohjelmistojen mallintaminen, mallintaminen ja UML

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

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

2. Eukleideen algoritmi

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

Invariantteihin perustuva ohjelmointi

Johdatus ohjelmointiin

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

811120P Diskreetit rakenteet

} {{ } kertaa jotain

Täydentäviä muistiinpanoja laskennan rajoista

Ohjelmoinnin perusteet Y Python

TIETOTEKNIIKKA Koodi Vanha opintojakso op ov Vastuuhenkilö LV vastaavat opinnot tai korvaava suoritustapa TTE.

Tarkennamme geneeristä painamiskorotusalgoritmia

Yhteentoimivuusalusta: Miten saadaan ihmiset ja koneet ymmärtämään toisiaan paremmin?

Helpota arkeasi OPn digitaalisilla palveluilla OPn digitaalisten palvelujen eroavaisuudet Henkilöasiakkaiden mobiilipalvelut OP-mobiili Miten saan

Opintosuunnitelma. Suunta: Tietoliikenneohjelmistot ja -sovellukset Pääaine: Tietoliikenneohjelmistot Sivuaine: Yritysturvallisuus

Sosiaalialan tuotteistaminen tietojärjestelm

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Testausoppeja toimialavaihdoksesta

2 Sanoja järjestävän funktion ohjelmoiminen

P e d a c o d e ohjelmointikoulutus verkossa

Transkriptio:

Miten tehdää ään n virheettömi miä ohjelmia Ralph-Johan Back Joakim von Wright Åbo Akademi TUCS Formaalit menetelmät t ohjelmoinnissa ryhmä

Esitelmät Ohjelmoinnin matematiikka Ralph Back Matematiikan ohjelmointi Joakim von Wright

Ohjelmoinnin matematiikka Ralph-Johan Back

Sisält ltö Ohjelmiston luotettavuus Formaalit menetelmät Ohjelman oikeellisuuden todistaminen Inkrementaalinen ohjelmointi

Tietokoneet, kommunikointi ja ohjelmistot Käyttöliittymät Ohjelmistot Ohjelmointikielet Käyttöliittymät Ohjelmistot Ohjelmointikielet Kommunikointi Käyttöjärjestelmä Kone Käyttöjärjestelmä Kone Tietoverkko

Ohjelmistot keskeisessä roolissa Ohjelmistot muodostavat suurimman osan tietojärjestelmist rjestelmistä Yhteiskunta erittäin in riippuvainen ohjelmistoista sulautetut järjetestelmj rjetestelmät, t, hallinto, pc sovellutukset,... Ohjelmistot ohjaavat kriittisiä toimintoja: lentoliikennettä,, sairaalalaitteita, teollisia prosesseja,... Ohjelmistojen laadulla on vahva vaikutus yhteiskunnan ja yksityisten toiminnan luotettavuuteen, turvallisuuteen, tehokkuuteen ja tulosten laatuun

Mikä on hyvä tietokoneohjelma monipuolinen, tekee sitä mitä minä haluan toimii käytk ytössä olevalla tietokoneella ja käyttöjärjestelmässä helppokäytt yttöinen, selkeä käyttöliittymä toimii tehokkaasti ja reagoi nopeasti toimii hyvin muiden ohjelmien kanssa luotettava, ei sisäll llä paljon virheitä käyttäytyy ytyy hyvin myös s virhetilanteissa jne jne

Ohjelmien laadun kehitys Kehitys on kulkenut kohti parempilaatuisia ohjelmia helppokäytt yttöisempiä ohjelmia, tehokkaampia, monipuolisempia,... Paitsi: ohjelmistojen luotettavuus ei ole parantunut, vaan lähinnl hinnä huonontunut.

Mistä ohelmistojen virheet johtuvat Perussyy on ohjelmien kompleksisuuden kasvu Ohjelmistojen koko on jatkuvasti kasvanut Nykypäiv ivän n ohjelmistot ovat valtavan suuria (100 000 10 000 000 riviä koodia) Ohjelmistot ovat hyvin monimutkaisia, ja niiden osien väliset v vuorovaikutukset ovat vaikeasti hallittavissa Muut laatukriteerit (monipuolisuus, käytettk ytettävyys,...) kasvattavat ohjelmien kokoa Markkinavoimat suosivat huonoja ohjelmistoja Ohjelmistojen nopea valmistuminen (time to market) tärkeintt rkeintä Kuluttajat eivät t vaadi luotettavia ohjelmia Ohjelmistoille ei esim. anneta luotettavuustakuuta

Ohjelmistoteknologian nykytaso Ohjelmistotekniikka on kehittymätönt ntä verrattuna muihin teknologian aloihin Perustutkimusta ei paljon hyödynnet dynnetä teollisessa ohjelmistotuotannossa Ohjelmointi tarvitsee toisenlaisen tieteellisen perustan kuin tavanomainen tekniikkaan mallit ovat useimmiten diskreettejä,, eivät t jatkuvia tärkein työkalu on logiikka ja algebra, ei analyysi suurin osa tarvittavasta matematiikasta on kehitetty viimeisten 50 vuoden aikana

Ohjelmointiprosessi tänäät ään määrittele ongelma suunnittele ohjelma koodaa ohjelma testaa ohjelma ylläpidä ohjelmaa

Testaaminen Suoritetaan ohjelma esimerkkidatalla, ja tarkistetaan ovatko tulokset oikeita Testauksessa joudutaan suorittamaan ohjelma hyvin monella eri datalla, jotta löydettl ydettäisiin mahdollisimman monta virhettä Testaamisella ei voida poistaa kaikki ohjelmavirheet, ainoastaan ne jotka löytyvl ytyvät esimerkkien avulla

Virheiden poistaminen testaamalla Prosessin alkuvaiheessa tehdyt ohjelmavirheet pyritää ään n loppuvaiheessa poistamaan testauksella. Testaaminen käy k y yhä työlää äämmäksi, mitä suuremmiksi ohjelmistot tulevat Testaaminen muodostaa yhä suuremman osan ohjelmistokehityksen kustannuksista Testaamisella ei kuitenkaan voida saavuttaa haluttu ohjelmistojen luotettavuuden taso

Formaalit menetelmät ohjelmoinnissa Formaalit menetelmät t muodostavat osaksi vaihtoehdon testaamiselle, osaksi täydentt ydentävät testaamista Ensisijainen tavoite on parantaa ohjelmien luotettavuutta Ohjelman ominaisuksia tutkitaan analysoimalla sitä matematikan ja logiikan avulla Esimerkki: todistetaan matemaattisesti että ohjelma toimii oikein (ts ei sisäll llä virheitä)

Åbo Akademin ohjelmointitekniikan tutkimusryhmä Åbo Akademin tietojenkäsittelyopin laitos 1984-- Keskittynyt formaalien menetelmien tutkimiseen ja kehittämiseen Suomen Akatemia tutkimuksen huippuyksikkö 1995-99 (osana TUCSia) ja 2002 2007 (omana yksikkönä) Senioritutkijat Ralph-Johan Back (johtaja) Johan Lilius Kaisa Sere Joakim von Wright Ryhmäss ssä noin 50 tutkijaa (noin puolet ulkomaalaisia)

Tutkimussuunnat Ohjelmoinnin matemaattinen perusta tarkennuskalkyyli aktiojärjestelm rjestelmät ohjelmistoarkkitehtuuri Uudet ohjelmointiparadigmat rinnakkaiset ja hajautetut järjestelmj rjestelmät vlsi-suunnittelu suunnittelu olio-ohjelmointi ohjelmointi ohjelmistojen suunnittelu ja vaatimusmää äärittelyt Ohjelmoinnin työkalut ohjelmointiympärist ristöt mekaaninen todistaminen mallintarkistaminen Ohjelmointiprosessit

Esimerkki ohjelman oikeellisuuden todistamisesta Ohjelma joka laskee yhteen ensimmäiset iset n kokonaislukua: 1 + 2 + 3 +... + n n sum 1+2+3+...+ n

Sum-ohjelman toimta i:=1 s:=0 i <=n s:=s+i i:=i+1

Ohjelmakoodi def sum(n): i := 1 s := 0 while i <= n: s := s+i i := i+1 return s laske 1+2+3+...+n i on kierroslaskuri s on osasumma iteroidaan kun i <= n lisätää ään n uusi i summaan s kasvatetaan i:tä kun i = n+1, lopetetaan, palautetaan summa s print sum(10) lasketaan 1+2+3+...+10

Ohjelman suoritus i s 1 0 n = 3 i:=1 s:=0 i <=n s:=s+i i:=i+1

Ohjelman suoritus i s 1 0 2 1 n = 3 i:=1 s:=0 i <=n s:=s+i i:=i+1

Ohjelman suoritus i s 1 0 2 1 3 3 n = 3 i:=1 s:=0 i <=n s:=s+i i:=i+1

Ohjelman suoritus i s 1 0 2 1 3 3 4 6 n = 3 i:=1 s:=0 i <=n s:=s+i i:=i+1

Induktiohypoteesi i s 1 0 2 1 3 3 4 6 s =1+...+(i-1) 1) 1<=i <= n+1 n = 3 i:=1 s:=0 i <=n s:=s+i i:=i+1

Väittämät alkuehto: 0 <= n invariantti: s =1+...+(i-1) 1) 1<=i <= n+1 i:=1 s:=0 i <=n loppuehto: s = 1+...+n s:=s+i i:=i+1

Väittämät t ohjelmatekstissä def sum2(n): i := 1 s := 0 while i <= n: s := s+i i := i+1 return s # 0 <= n # s =1+...+(i-1) 1) & 1<=i <= n+1 # s = 1+...+n print sum2(10)

Sum-ohjelman oikeellisuus Invariantti on voimassa silmukan alussa Invariantti pysyy voimassa silmukkaa kierettäess essä kerran Invarianttista seuraa loppuehto, kuin silmukka pysähtyy Silmukan suoritus pysähtyy invariantti alkuehto i:=1 s:=0 i <=n loppuehto Sum-ohjelma toimii oikein s:=s+i i:=i+1

Oikeellisuuden todistamisen ongelmat Todistaminen vaatii matemaattista ajattelutapaa Kun ohjelman koko kasvaa, niin todistaminen tulee yhä vaikeammaksi Todistus itsessää ään n voi sisält ltää virheitä Usein vaikeata kuvata ennakkoehto ja loppuehto täsmällisesti Invariantin keksiminen hankalaa (vastaa induktiohypoteesin muodostamista) Todistukset rutiininomaisia, eivät t erikoisen kiinnostavia tai matemaattisesti haastavia

Todistamisen lisäongelma Käytännössä ohjelmat sisält ltävät t virheitä,, joten niitä ei voida (eikä pitäisik isikään n voida) todistaa oikeiksi Todistuksen mahdottomuus näyttn yttää virheen paikan Ennen oikeellisuuden todistamista on kaikki virheet paikallistettava ja korjattava Todistaminen ja testaaminen antavat kaksi erilaista tapaa hakea virheitä ohjelmasta Päätelmä: : valmiiden ohjelmien testaaminen hankalaa eikä erikoisen mielekäst stä.

Oikein toimivien ohjelmien rakentaminen Oikeellisuutta ei voida lisätä jälkeenpäin Oikeellisuus on rakennettava sisää ään alusta lähtien l Ohjelma on rakennettava pala kerrallaan, siten että oikeellisuutta ei koskaan menetetä Ryhmämme mme on keskittynyt tällaisten t inkrementaalisten oikeellisuuden säilyttävien ohjelmointimentelmien kehittämiseen ja tutkimiseen oikeellisuus säilyy

Inkrementaalinen ohjelmointi Rakennetaan ensimmäinen inen pieni palikka A0 Todistetaan se oikeaksi A0

Inkrementaalinen ohjelmointi Rakennetaan seuraava palikka B0 Todistetaan se oikeaksi A0 B0

Inkrementaalinen ohjelmointi Parannellaan A0:aa, lisää äämällä sen käyttökelpoisuutta Todistetaan uusi palikka A1 oikeaksi Todistetaan, että A1 säilyttää A0:n A1 toiminnot A0 B0

Inkrementaalinen ohjelmointi Parannellaan B0:aa, lisää äämällä sen käyttökelpoisuutta Todistetaan uusi palikka B1 oikeaksi Todistetaan, että B1 säilyttää B0:n A1 B1 toiminnot A0 B0

Inkrementaalinen ohjelmointi Parannellaan taas Ata A2 A1 A0 B1 B0

Inkrementaalinen ohjelmointi jne, kunnes ollaan saatu rakennettua ohjelmaan kaikki toivottu toiminnallisuus A5 A4 A3 B3 C4 C3 A2 B2 C2 A1 B1 A0 B0

Olipohjainen ohjelmointi Olio on sopiva rakennuspalikka: luominen Olion nimi muutokset data kyselyt lopettaminen

Data: Pankkitili oliona Saldo, tilinumero ja tilin haltija Luominen: Luodaan pankkitili (tilinumero ja asiakkaan nimi) Tilillä ei aluksi ole yhtää ään n rahaa Muutokset: Pankkitilille voidaan panna rahaa Pankkitililtä voidaan ottaa rahaa Muutetaan asiakkaan nimi Kyselyt: Paljonko rahaa on tilillä juuri nyt Kuka on tilinhaltija, mikä on tilinumero Lopettaminen: Pankkitili poistetaan käytk ytöstä

Pankkitili pankin toiminnat asiakkaan toiminnat luodaan uusi tili tilille pano tililtä otto nimen muutos Pankkitili saldo tilinhaltija tilinumero tilin saldo tilinumero tilin haltija poistetaan tili käytöstä

Pankkitili ohjelmana class Account: def init (self, name, account): self.saldo := 0 self.name := name self.account := account def insert(self, sum): self.saldo := self.saldo + sum def remove(self, sum): self.saldo := self.saldo - sum def getsaldo(self): return self.saldo...

Pankkitilin lisäominaisuuksia Koron maksaminen Luotollinen pankkitili Pankkitiliin on liitetty tunnusluku Tapahtumien rekisteröinti inti Automaattinen laskujen maksu eräpäiv ivänä Tilillä voi olla eri valuuttoja jne, jne...

Luotollinen pankkitili uusi luottoraja tililtä otto Luotollinen luottoraja nostettavissa luottoraja tilille pano tililtä otto nimen muutos Pankkitili saldo tilinhaltija tilinumero tilin saldo tilinumero tilin haltija

Korollinen pankkitili uusi korkoprosentti lisää korko Korollinen korkoprosentti korko tilin saldo tilin korko tilille pano tililtä otto nimen muutos Pankkitili saldo tilinhaltija tilinumero tilin saldo tilinumero tilin haltija

Todistaminen Uuden olion on toteutettava sille asetetut vaatimukset Uuden olion on säilytetts ilytettävä alkkuperäisen olion ominaisuudet Esim. nimenmuutos, tilinhaltija toimii Luotollinen-oliossa oliossa samalla tavalla kuin Pankkitili-oliossa tililtä otto huomio luottorajan, toimii samoin kuin aiemmin jos luottoraja on 0.

Pankkitilin rakentaminen Maksut Käyttötili Tunnusluku Luotollinen Korollinen Tapahtumat Pankkitili

Raha-automaatti automaatti saldokysely lisää rahaa otto Raha-automaatti rahamäärä Pankkitili Pankkitili Pankkitili Pankkitili Rahanluovutus

Pankkiautomaatti Kortinlukija Pankkiautomaatti Käyttötili Rahanluovutus Raha-automaatti Pankkitili

Maksuautomaatti Setelinsyöttö Maksuautomaatti Maksut Kortinlukija Pankkiautomaatti Käyttötili Rahanluovutus Raha-automaatti Pankkitili

Miten todistetaan oikeellisuus Perusoliot on todistettava oikeiksi Olion laajennus on todistettava oikeaksi laajennuksen on toteuttettava sille asetettavat vaatimukset laajennuksen on säilytetts ilytettäv v aikaisemmat ominaisuudet Olion käyttk yttö on tapahduttava oikein olion menetelmää saa vain kutsua jos menetelmän alkuehto on voimassa

Todistus toteuttaa vaatimuksensa Pankkiautomaatti Käyttötili säilyttää ominaisuudet Raha-automaatti Pankkitili toteuttaa vaatimuksensa kunnioittaa alkuehtoja toteuttaa vaatimuksensa

Inkrementaalinen ohjelmointi Vaatii uutta lähestymistapaa l ohjelmointiin Oikeellisuus on tarkistettava jatkuvasti ohjelmaa rakennettaessa Ohjelman arkkitehtuurin on tuettava inkrementaalista rakentamista Ohjelmointiprosessin on myös s tuettava tätät lähestymistapaa Testaaminen yhä tarpeellinen, tapahtuu jokaisen laajennuksen yhteydessä

Rakenteen remontointi Kun suurta kokonaisuutta rakennetaan pala kerrallaan, voidaan joutua umpikujaan: valittu arkitehtuuri ja rakennepalikat eivät t tue uusia laajennuksia Tällöin ohjelman rakennetta on remontoitava arkitehtuuria muutetaan olioita tai olioiden toimintoja muutetaan toiminnallisuutta ei muuteta Rakenteen remontti voi olla hankalaa, mutta se kannattaa

Ohjelmointiprosessi Inkrementaalisessa ohjelmoinnissa ohjelman laajentaminen ja ohjelman remontointi vuorottelevat laajenna ohjelmaa remontoi ohjelmaa

Inkrementaalisen ohjelmoinnin edut Iso ohjelma voidaan rakentaa pieninä laajennuksina Oikeellisuuden säilyminen s voidaan tarkistaa jatkuvasti Käytössä on aina toimiva ohjelma (toiminnallisuus on vajaa, mutta se mikä siinä on toimii oikein) Ohjelmaa voidaan jatkuvasti verrata vaatimuksiin, ja tarvittaessa korjata ohjelmaa tai vaatimuksia Erillistä ohjelman ylläpitovaihetta ei ole, ylläpito on samanlaista kuin alkuperäisen ohjelman rakentaminen Oikeellisuuden jatkuva huomioiminen tekee ohjelman remontin mahdollisiksi

Inkrementaalisen rakentamisen rajoitukset Käytännössä liian suuria ohjelmia ei voida rakentaa tällä tavoin Ohjelmat on jaettava erikseen ohjelmoitaviin moduleihin, joilla on hyvin määm ääritelly rajapinnat Eri ohjelmointiryhmät t voivat ohjelmoida moduleja toisistaan riippumatta Inkrementaalinen rakentaminen ja modulaarinen rakentaminen täydentt ydentävät t toisiaan Yhdessä ne mahdollistavat suurten ja luotettavien ohjelmien rakentamisen Virheettömyys edellyttää mekaanista ohjelmien oikeellisuuden todistamista

Inkrementaalisen rakentamisen projekteja ÅAssa Inkrementaalisen rakentamisen teoria (tarkennuskalkyylissä) Inkrementaalista rakentamista tukeva ohjelmointiympärist ristö (UML-pohjainen) Inkrementaalista rakentamista tukeva ohjelmointiprosessi (XP-pohjainen) Useita piloottiprojekteja, joissa rakennetaan suurempia ohjelmia tällt llä menetelmäll llä Inkrementaalinen rakentaminen eri ohjelmointiparadigmoissa (vlsi-suunnittelu, suunnittelu, olio- ohjelmointi, hajautet järjestelmj rjestelmät, t, rinnakkaisohjelmat, jne)