ITK130 Johdatus ohjelmistotekniikkaan Sami Kollanus Luennon sisältö Kurssin käytännön asiat Kurssin sisältö Ohjelmistotekniikka Missä ohjelmistotekniikkaa tarvitaan? Erilaisia ohjelmistotyyppejä Ohjelmistotekniikka nykyään Termejä Ohjelmistotekniikka mitä se on? Ohjelmistotekniikan historia Ohjelmistotekniikan kehitys Ohjelmistotekniikan osuus järjestelmän rakentamisessa Ohjelmistosuunnittelijan rooli Ohjelmiston elinkaarimalli Ohjelmistotuotanto vs. tietojenkäsittelyoppi Ohjelmistotuotanto vs. muut tieteen alat
ITK130 JOT Kurssi pyrkii muodostamaan opiskelijoille yleiskäsityksen ohjelmistotekniikasta vastaamalla seuraaviin kysymyksiin: mikä on ohjelmisto miksi ohjelmistoja tehdään miten ohjelmistoja tehdään miten ohjelmistojen tekoa hallitaan keinoja ohjelmistojen tekemisen hallinnan arviointiin Kurssin esitiedot ITK150 Oliokeskeinen tietojärjestelmien kehittäminen ITK110 Ohjelmointi 1 Opetusmuoto: Luennot ja luentoihin liittyvät tehtävät Suoritus Kurssiraportti: tehtävistä tehtyinä 10/13 29.10 mennessä ja lopputentti 29.10 tai 17.12 ITK130 JOT - kurssin opettajat Kurssivastaavat Yliassistentti - vastaa yleisistä järjestelyistä Assistentti Sami Kollanus Kurssiraporttien tarkistus Lisäksi luennoivat Suunnittelija Jonne Itkonen Assistentti Antti-Juhani Kaijanaho Yliassistentti Jussi Koskinen Professori Tommi Kärkkäinen Koulutuspäällikkö Timo Tuunanen (Yomi Solutions Oy)
ITK130 JOT kurssin aikataulu Pvm klo Ohjaaja Aihe Paikka 7.9 12-14 Heikkilä Kurssin esittely ja johdanto ohjelmistotekniikkaan 9.9 8-10 Heikkilä Ohjelmistotekniikan luonne 14.9 12-14 Kollanus Ohjelmistotekniikan periaatteet 16.9 8-10 Kollanus Suunnittelu 21.9 12-14 Itkonen Arkkitehtuuri 23.9 8-10 Kaijanaho Toteutus kielen valinta 28.9 12-14 Kollanus Testaus 30.9 8-10 Koskinen Ylläpito 5.10 12-14 Heikkilä Yleistä ohjelmistoprosesseista 7.10 8-10 Heikkilä Esimerkkejä ohjelmistoprosesseista UP 12.10 12-14 Tuunanen extreme programming 14.10 8-10 Heikkilä Ohjelmistotekniikan laatu ja laatujärjestelmät 19.10 12-14 Kollanus Tarkastuksen ohjelmistotuotannossa 21.10 8-10 Kärkkäinen Johdannosta eteenpäin tiistaisin 12-14, torstaisin 8-10 Kurssiraportti 1/3 Kurssiraportilla tällä kurssilla tarkoitetaan luentojen pohjalta tehtäviä kotitehtäviä. Luennoitsija antaa jokaisesta luennosta yhden tehtävän, johon vastataan kirjallisesti esseen muodossa. Kurssin kuluessa tehtäviä tulee yhteensä 13 kappaletta eli yksi jokaiselta luennolta viimeistä luentoa lukuun ottamatta. Kurssiraportti tehdään 1-3 hengen ryhmissä. Jokaisen ryhmän täytyy vastata vähintään kymmeneen kysymykseen.
Kurssiraportti 2/3 Kirjoitusohjeet Jokainen tehtävä kirjoitetaan omaan dokumenttiin Vastaukseen tulee olla noin yksi A4 sivu Vastauksen ensimmäiselle riville tulee laittaa vastauksen otsikko ja toiselle riville tekijöiden nimet Vastaus tulee tallentaa puhtaana tekstinä (.txt). Siis mitään muotoiluja on turha tehdä. Tiedosto tulee nimetä tyylillä luento+luennon mumero+.txt, siis esim. luento6.txt Tehtävien palautus Kurssiraportti 3/3 Vastausdokumentit tulee tallentaa samaan hakemistoon jonkin ryhmän jäsenen kotisivutilaan. Korpissa on jokaisen opiskelijan omissa kurssitiedoissa lomakekenttä, johon tulee syöttää URL hakemistoon, josta vastaukset löytyvät. Siis jokaisen ryhmän jäsenen täytyy erikseen tallentaa Korpissa tuo URL, vaikka vastaukset ovat samassa paikassa. Tehtävien täytyy olla saatavilla Korppiin tallennetussa URL:ssa ennen kurssin lopputenttiä eli viimeistään 29.10. Suositeltavaa on kuitenkin vastata tehtäviin heti luentojen jälkeen. Kurssista ei ole saatavilla sellaista itseopiskelumateriaalia, jonka avulla voisi nopeasti palauttaa asiat mieleen sen jälkeen, kun ne ovat päässeet unohtumaan.
Kurssiraportti - Varoitus Vastausten on viisainta olla itse kirjoitettuja. Vastaukset tullaan tarkastamaan koneellisesti ohjelmalla, joka tunnistaa automaattisesti liikaa toisiaan muistuttavat vastaukset. Vilpistä kiinni jääneet menettävät oikeutensa suorittaa kurssin tänä lukuvuonna. Kurssimateriaali Luentomateriaali tulee löytymään myös kurssin sivuilta http://www.cs.jyu.fi/~kolli/jot04/ Luentotehtäviin liittyvät artikkelit Lisämateriaalia Pressman R. S., Software Engineering, 5th edition, McGraw-Hill, 2000 Sommerville I., Software Engineering, 6th edition, Addison-Wesley Haikala I., Märijärvi J., Ohjelmistotuotanto, Suomen ATK kustannus, 2002 Ghezzi C.,Jazayeri M., Mahdrioli D., Fundamentals of Software Engineering, Prentice Hall, 2003
Ohjelmistotekniikka Missä ohjelmistotekniikkaa tarvitaan? Ohjelmistoja käytetään jo monessa paikassa toiminnallisuus tuotetaan ohjelmistojen avulla ennemmin kuin laitteistojen avulla matkapuhelimet, autotietokoneet, pelit, multimedia, televisio, puhelinverkot, internet tuotantojärjestelmät palveluteollisuus
Erilaisia ohjelmistotyyppejä Varus- ja työkaluohjelmistot Teknis-tieteelliseen laskentaan tarkoitetut ohjelmistot Tietämyspohjaiset järjestelmät Kaupallishallinnolliset ohjelmistot Prosessinohjaus- ja prosessiautomaatiojärjestelmät Sulautetut järjestelmät (koneen tai laitteen sisällä hissin ohjausjärjestelmä) Reaaliaikajärjestelmät (ohjelman on reagoitava heti polttoaineen ja jarrujen säätely) Reaktiiviset järjestelmät (toimivat jatkuvasti puhelinkeskus) Ohjelmistotekniikka nykyään Teollinen ohjelmointi ollut vain joitain vuosikymmeniä Tietoteollisuuden taloudellinen merkitys kasvaa jatkuvasti Ohjelmien koko kaksinkertaistuu muutamien vuosien välein Ohjelmistotyön tuottavuus kasvaa vuosittain vain noin 4%
Termejä Ohjelma program kirjoitetaan jollain ohjelmointikielellä Ohjelmisto software ohjelma, dokumentaatio, lähdekoodi Ohjelmistotuote software product ohjelmisto, laitteisto, koulutus, ylläpito, tuki Ohjelmistotekniikka - software engineering Pätevien insinööriperiaatteiden vakiinnuttamista ja käyttämistä siten, että voidaan taloudellisesti tuottaa ohjelmisto, joka on luotettavaa ja toimii tehokkaasti todellisissa koneissa (Bauer, F. L. Software Engineering. Information Processing 71., 1972) Ohjelmistotekniikka mitä se on? The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (IEEE Standard 610-1990) Software engineering is the technological and managerial discipline concerned with systematic production and maintenance of software products that are developed and modified on time and within cost estimates. (Fairley, R. Software Engineering Concepts. New York: McGraw-Hill, 1985) Software engineering is the computer science discipline concerned with developing large applications. Software engineering covers not only the technical aspects of building software systems, but also management issues, such as directing programming teams, scheduling, and budgeting. ( WebReference Webopaedia) SEI software engineering definition from 1990 SEI Report on Undergraduate Software Engineering Education (CMU/SEI-90-TR-003) Engineering is the systematic application of scientific knowledge in creating and building cost-effective solutions to practical problems in the service of mankind. Software engineering is that form of engineering that applies the principles of computer science and mathematics to achieving cost-effective solutions to software problems.
Ohjelmistotekniikan historia Ohjelmistotekniikka termiä käytettiin ensimmäisen kerran NATO konferenssissa Garmisch Partenkirchenissä Saksassa vuonna 1968 Ohjelmistoja oli aloitettu tuottamaan suuremmissa mittakaavoissa laajojen ohjelmistojen tuottaminen oli vaikeaa ohjelmistot olivat pullollaan virheitä toimitusajat venyivät valmistuskustannuksen venyivät vaikea ylläpitää vanhoja ohjelmistoja Ohjelmistojen kehitys kriisissä NATO konferenssi - http://homepages.cs.ncl.ac.uk/brian.randell/nato Ohjelmistotuotannon kehitys 1950-1974 1950-1964 Programming any which -way vähän tietokoneita eräajo-tyyppiset ohjelmat yksi toteuttaja pieniä ohjelmia ohjelmien rajoitettu jakelu ei kaupallista merkitystä 1963 1974 Programming in - the - small enemmän ja suurempia tietokoneita yksi toteuttaja monen käyttäjän (noin 100) ajantasaiset järjestelmät tietokannat kaupallinen hyödyntäminen ohjelmistokriisi henkilökohtainen tehokkuus Shaw M. IEEE Software, November 1990
Ohjelmistotuotannon kehitys 1973-2000 1973-1988 Programming in the - large henkilökohtaiset tietokoneet ja hajautetut järjestelmät monta toteuttajaa ohjelmistokustannukset suuremmat kuin laitteistokustannukset ohjelmistoilla paljon käyttäjiä (yli 100 000) massamarkkinat laatuvaatimukset tuotteen kompleksisuuden hallinta ja modularisointi 1985 2000 Programming in the - world tehokkaat pöytäkoneet oliotekniikat CASE välineet valtavat käyttäjämäärät tuotantoprosessin ja projektityöskentelyn kompleksisuuden hallinta perustana: Shaw M. IEEE Software, November 1990 Ohjelmistotuotannon kehityksen aikakaudet Aikakausi Vallitseva tietämys ja ajattelutapa Suunnittelun välituotteet Esimerkki menetelmät 1.Suoraviivainen Tietämys kehittymässä, yleispätevien ratkaisujen tasolla Formaalit määrittelyt, joita pidettiin täydellisinä ja selkeinä Vesiputous 2.Osallistuva Tietämys kohtalaista, jakautunut projektin sidosryhmien välille, käyttäjät hallitsevat suunnittelua. Paperiset käsitemallit, prototyypit PICTIVE 3.Asiantuntemus ja ammattitaito Vankka tietämys edellisten aikakausien varrelta, ongelmat ymmärretään, käyttäjien ja kehittäjien välinen pitkäaikainen yhteistyö ja ymmärrys Konkreettisia kehittyviä prototyyppejä yleisesti analysoitaviksi, workshopit Iteratiiviset, agile-menetelmät Ostwald Jonathan 1996: Knowledge Construction in software development, Ph.D. thesis, University of Colorado (N. Cross, Developments in Design Methodology, John Wiley & Sons, New York, 1984)
Ohjelmistotekniikan osuus järjestelmän rakentamisessa Ohjelmistotekniikka on osa isompia järjestelmiä Ohjelmistojen vaatimusten on oltava balanssissa muiden kanssa Esim. puhelinvaihteissa tietyt vaatimukset ovat toteutettavissa vain laitteiston muutoksilla, ohjelmistojen muutoksilla tai komponenteilla Ohjelmistosuunnittelijan rooli Ohjelmistosuunnittelijan tulee ymmärtää vaatimuksia kirjoittaa määrittelyjä (johtaa malleja ja perustella ne) osata toimia erilaisilla abstraktion tasoilla osata ohjelmoida tuntea eri tekniikat, metodit, työkalut, tuotantoprosessit tuntea sovellusalue toimia tiimin jäsenenä kommunikointitaidot johtamistaidot esittelytaidot neuvottelutaidot Pelkät ohjelmointitaidot eivät riitä
Ohjelmiston elinkaarimalli (periaate) Vaatimusmäärittely Suunnittelu vesiputousmalli Toteutus ja moduulitestaus Integrointi ja järjestelmätestaus Käyttöönotto ja ylläpito Ohjelmistotuotanto vs. Tietojenkäsittelyoppi Ohjelmointikielet Käyttöjärjestelmät Tietokannat Tekoäly Teoreettiset mallit
Ohjelmistotuotanto vs. Muut tieteen alat Johtamisopit Järjestelmäsuunnittelu Psykologia Kognitiotiede Kielitiede Taloustiede Ohjelmointi Tuotteen hallinta Työkalut Menetelmät Laatu Projektin hallinta Toteutus Suunnittelu Vaatimukset Testaus Ylläpito Ohjelmistotekniikka Prosessi(process) Ihmiset (people) Projekti (project) Tuote (product)
Luentotehtävä 1 Davis, A.M.; Fifteen principles of software engineering, IEEE Software 11(6) 94-96, 101, Nov 1994 Kerro omin sanoin Davisin viisitoista ohjelmistotekniikan periaatetta ja pohdi miten hyvin ne pätevät nyt 10 vuotta myöhemmin.