IDK0071 Tarkvaratehnika Loeng 1: Õppeaine korraldus ja eesmärgid. Tarkvara arendusprotsess ja agiilne tarkvaratehnika Professor Kuldar Taveter
Teemad loengus Ülevaade ainest p Õppejõud p Struktuur p Hindamine Sissejuhatus tarkvaratehnikasse p Mis on tarkvaratehnika? p Miks tarkvaratehnika? Tarkvara arendusprotsess p Kose mudel p Iteratiivne protsess Agiilne tarkvaratehnika p Põhimõtted p Scrumi näide
Inimesed Õppejõud p p p Professor Kuldar Taveter Meil: kuldar.taveteraddttu.ee Konsultatsiooniajad: E 13.30 14.30 ruumis ICT-647 (meili teel etteteatamisega) Lektorid tarkvaratööstusest: p p Kaspar Loog, Browserbite jne. Laborijuhendajad: p p p p p p Kadri-Ann Valgeväli, Proekspert Liisa Jõgiste, Helmes Kristi Uukkivi, Sertifitseerimiskeskus Margus Räim, SMIT Jekaterina Ivask, TTÜ Tarvo Treier, TTÜ Tudengid: p Kes olete teie?
Kes olen mina? Nimi: Kuldar Taveter Ametikoht: professor, tarkvaratehnika õppetooli juhataja, sotsiotehniliste süsteemide uurimisgrupi juht Haridus: p Dip.Eng., TTÜ, 1988 p M.Sc., TTÜ, 1995 p Ph.D., TTÜ, 2004 Töökogemus: p 1985-1989: Küberneetika Instituut p 1989-1993: Erasektor p 1993-1998: TTÜ Informaatika Instituut p 1997-2005: VTT Tietotekniikka, Soome p 2005-2008: Melbourne Ülikool, Austraalia p 2011: South Carolina Ülikool, USA p 2016: Shanghai University for Science and Technology, Hiina Uurimisalad: nõuete esiletoomine ja analüüs, agentorienteeritud modelleerimine, tarkvaraagendid, agendipõhine simulatsioon, sotsiaalvõrgustikel põhinevad infosüsteemid
Aine eesmärgid Arusaamine suurte tarkvarasüsteemide loomise probleemidest ja keerukusest Arusaamine tarkvara arendusprotsessi etappidest ja tegevustest Arusaamine hea projektihalduse eelistest tarkvara arendusprotsessis Võime kriitiliselt analüüsida ja hinnata tarkvara arendusprotsessis esilekerkivaid probleeme Võime valida ja rakendada sobivaid disainitehnikaid
Aine eesmärgid (jätkub) Arusaamine tarkvara arendusprotsessi olulisusest tarkvarasüsteemi kvaliteedi saavutamisel Teadlikkus vajalikest tehnikatest ja tööriistadest Võime rakendada oma teadmisi ja kogemusi otustamisel Saada rühmatöö kogemusi Arendada oma suhtlemis- ja kirjutamisoskust
Aine muudes maailma ülikoolides The University of Melbourne: Software Engineering Process and Practice Swinburne University of Technology: Software Engineering University of South Carolina: Software Engineering (project)
Aine struktuur Loengud esmaspäeviti kell 16.00 17.30 auditooriumis auditooriumis U06A-229 (endine VI-229) Laboritunnid kord nädalas, vastavalt tunniplaanile p Laborirühmi üldjuhul vahetada ei saa! Hindamine: p Laboritunnid 50% (max 40 + 10 punkti) p Kirjalik eksam 50% (max 50 punkti, min hinne 1 )
Loengute orienteeruvad teemad (võib tulla muudatusi) 1. Õppeaine "Tarkvaratehnika" korraldus ja eesmärgid. Tarkvaraarenduse metoodikad ja agiilne tarkvaratehnika (12. September, Prof Kuldar Taveter, TTÜ) 2. Tarkvarasüsteemi nõuete analüüs (19. September, Prof Kuldar Taveter, TTÜ) 3. Tarkvarasüsteemi arhitektuuri kavandamine (26. September, tööstuse esindaja) 4. Praktiku seminar: Arenduse infrastruktuur ja konfiguratsioonihaldus (3. Oktoober, tööstuse esindaja) 5. Praktiku seminar agiilsest tarkvaratehnikast: Koodi disain (10. Oktoober, Erik Jõgi, codeborne) 6. Praktiku seminar: Süsteemi nõuete esiletoomine ja analüüs (17. Oktoober, Erkki Lindepuu) 7. Tarkvarasüstemi kvaliteet ja testimine (24. Oktoober, Jekaterina Tsukrejeva, TTÜ) 8. Praktiku seminar tarkvara kvaliteedist ja testimisest (31. Oktoober, tööstuse esindaja) 9. Praktiku seminar agiilsest tarkvaratehnikast: XP metoodika (7. November, Erik Jõgi, codeborne) 10. Praktiku seminar agiilsest tarkvaratehnikast: Agiilne tarkvaraarendus LHV näitel (14. November, Rainer Tikk, LHV Pank) 11. Kohustuslik praktiku seminar (IABB õpperühmad): Tarkvarasüsteemi elutsükkel ja arendusprotsess (21. November, Kaspar Loog, Browserbite) 12. Kohustuslik praktiku seminar (IAPB õpperühmad): Tarkvarasüsteemi elutsükkel ja arendusprotsess (28. November, Kaspar Loog, Browserbite) 13. Modelleerimine ja UML agiilse tarkvaratehnika kontekstis (5. Detsember, Prof Kuldar Taveter, TTÜ) 14. Ülevaade eksamist (Prof Kuldar Taveter, TTÜ). Praktiku seminar (12. Detsember, teema teatame hiljem) 15. Praktiku seminar (19. Detsember, teema teatame hiljem)
Ülevaade teemadest laboritundides (mitte veel siduv) Tarkvara arendusprotsessid p Agiilsed metoodikad p Miks on vajalikud? Kvaliteedi tagamine: p Nõuete selgitamine p Ühiktestimine p Clean Code p Funktsionaalne testimine Parimad praktikad p Versioonikontroll: GIT p Planeerimispokker p Retrospektiiv p Koodi kattuvus Arhitektuur p Miks on vajalik? p Kuidas valida? p Kuidas rakendada?
Harjutustundide teemad (võib tulla muudatusi) 1. Tarkvaraarendusmetoodikad, agiilsed metoodikad, Scrum. Scrumi põhimõistete selgitamine ja kasutamine antud projektis (12. Septembri nädal). 2. Funktsionaalsed nõuded arendatavale süsteemile (19. Septembri nädal). 3. Tarkvara arhitektuur (26. Septembri nädal). 4. Versioonihalduse süsteemid. GITi näitamine (3. Oktoobri nädal). 5. Pidev integratsioon: Continuous Integration. Põhimõtted ning erinevate tööriistade tutvustamine: Ant ja Maven projektid (10. Oktoobri nädal). 6. Koodi arhitektuur ning Clean Code kasutamine (17. Oktoobri nädal). 7. Kaitsmised (24. Oktoobri nädal). 8. Ühiktestimine, Mock-objektid (31. Oktoobri nädal). 9. Koodi testidega katmine. Koodi testidega kaetuse mõõtmine. Erinevate tööriistade tutvustamine ja töötamine EclEmma'ga (7. Novembri nädal). 10. XP praktikad: Paarisprogrammeerimine. Kanban (14. Novembri nädal). 11. Kaitsmised (21. Novembri nädal). 12. Tarkvara testimise meetodid, Riskipõhine testimine. Musta kasti testimine (28. Novembri nädal). 13. UML diagrammid tehtud tarkvara kohta (5. Detsembri nädal). 14. Kaitsmised (12. Detsembri nädal). 15. Kaitsmised (19. Detsembri nädal).
Ressursid Õpikud: p Sommerville, I. (2011). Software engineering (9th International Ed.). Boston, MA: Pearson. Aine koduleht: http://maurus.ttu.ee/sts/?page_id=2406 NB! Mitte tavaline maurus! Lihtsam meelde jätta: http://maurus.ttu.ee/sts/ ja sealt õppeainete nimekirjast otsida
Mis on ühist kaitsesimulaatoritel, Skype-il, energia ülekandesüsteemidel ja liikluskaameratel?
Taust Tarkvara iseloom Kõrgenenud nõudmised: p suuremad süsteemid; p keerulisemad süsteemid; p kiiremini.
Miks vajame tarkvaratehnikat? Asjalik mees või naine suudab ehitada tööriistakuuri oma maja või suvila juurde. Kas seesama inimene saab hakkama ka 30- korruselise kontorihoone püstipanekuga? Insener suudab valmis programmeerida lihtsa kontrolleri. Kas seesama insener saab hakkama ka lennuliikluse kontrollsüsteemi programmeerimisega?
Milleks tarkvaratehnika? Tarkvaratööstuse kriis 1965-1985: failure 31% success 16% Source: The Standish Group International, Inc. (CHAOS research) over budget 53%
Dünaamika CHAOS raporti järgi 1994 1996 1998 2000 2002 2004 2006 2009 Successful 16% 27% 26% 28% 34% 29% 35% 32% Over budget 53% 33% 46% 49% 51% 53% 46% 44% Failed 31% 40% 28% 23% 15% 18% 19% 24%
Ariane Crash (1996) Reference: http://www.around.com/ariane.html (Story by James Gleick) It took the European Space Agency 10 years and $7 billion to produce Ariane 5, a giant rocket capable of hurling a pair of three-ton satellites into orbit with each launch and intended to give Europe overwhelming supremacy in the commercial space business. All it took to explode that rocket less than a minute into its maiden voyage last June, scattering fiery rubble across the mangrove swamps of French Guiana, was a small computer program trying to stuff a 64-bit number into a 16-bit space. One bug, one crash. Of all the careless lines of code recorded in the annals of computer science, this one may stand as the most devastatingly efficient. From interviews with rocketry experts and an analysis prepared for the space agency, a clear path from an arithmetic error to total destruction emerges.
Ariane Crash (1996): vigane kood L_M_BV_32 := TBD.T_ENTIER_32S ((1.0/C_M_LSB_BV) * G_M_INFO_DERIVE(T_ALG.E_BV)); if L_M_BV_32 > 32767 then P_M_DERIVE(T_ALG.E_BV) := 16#7FFF#; elsif L_M_BV_32 < -32768 then P_M_DERIVE(T_ALG.E_BV) := 16#8000#; else P_M_DERIVE(T_ALG.E_BV) := UC_16S_EN_16NS(TDB.T_ENTIER_16S(L_M_BV_32)); end if; P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S ((1.0/C_M_LSB_BH) * G_M_INFO_DERIVE(T_ALG.E_BH)));
THERAC-25 (1) Therac 25 was engineered by Atomic Energy Canada Limited (AECL) in conjunction with a French company CGR. It was an advancement in the fight against cancer. The million dollar, dual-mode linear accelerator was first developed in 1976 and the commercial version was available in 1982 The machine had two settings, a low energy, 200-rad mode, and a x-ray mode of 25 million electron volt capacity. The low setting could be directly aimed at the patient whereas the high-energy mode had to aim at the patient through a thick tungsten shield. It was controlled through a terminal
THERAC-25 (2) In Texas, the technician entered mode "x" instead of the proper mode "e". Upon realization of the error the technician scrolled up to "Edit", corrected the mistake, hit "e" and then hit "Enter". The total time that it took for the sequence of events to occur was less then eight seconds Meanwhile, the patient was bombarded with 25 000- rads with 25 million electron volts, 125x the normal dose. The man died four months later
The Mars Climate Orbiter (MCO) Satellite The MCO was launched in December 1998 The MCO was lost after it entered the Martian atmosphere in September 1999
The Mars Climate Orbiter (MCO) Satellite The root cause was the use of an incorrect unit of measure when calculating the trajectory of landing While the software on board the MCO used metric units, a ground software file contained English units of pound-seconds
Tarkvaratehnika ajalugu Terminit tarkvaratehnika (software engineering) kasutati esimest korda NATO Software Engineering Conference 1968 raames Garmish- Partenkirchenis, Saksamaal See oli mõeldud ühe ideena, kuidas tulla toime tarkvaratööstuse kriisiga
Tarkvaratehnika point Tarkvaratehnika = tarkvara inseneeria Tarkvaratehnika on suunatud professionaalsele tarkvaraarendusele Tarkvaratehnika ei tegele tarkvaraarenduse endaga vaid sellega, kuidas organiseerida tarkvaraarendust
Mis on tarkvara(toode) Arvutiprogrammid + nende dokumentatsioon
Kvaliteetse tarkvara atribuudid Evib nõutud funktsionaalsust Hooldatav p Tarkvara peab arenema, et vastata muutuvatele vajadustele Usaldusväärne p Tarkvara peab olema töökindel Efektiivne p Tarkvara ei tohi raisata süsteemi ressursse Vastuvõetav p Tarkvara peab olema aktsepteeritud kasutajate poolt, kelle jaoks ta on loodud. See tähendab, et tarkvara peab olema arusaadav, kasutatav ja ühilduv teiste süsteemidega
Mis on tarkvaratehnika? Suuremastaabiline programmeerimine vrdl. väikesemastaabiline programmeerimine Engineers Australia definitsioon: Tarkvaratehnika on tiimide poolt rakendatav distsipliin tootmaks kõrgekvaliteedilist, suuremastaabilist ja hinnaefektiivset tarkvara mis rahuldab kasutajate nõudmisi ja mida saab hooldada teatud ajaperioodi vältel IEEE definitsioon: Tarkvaratehnika on süstemaatilise, distsiplineeritud ja mõõdetava lähehemisviisi rakendamine tarkvara arendamisele, käitamisele ja hooldamisele, see tähendab, inseneriteaduste rakendamine tarkvarale. Tarkvaraarendus on nõrgem termin, kus tingimata ei kasutata protsesse, tööriistu, standardeid, jne. Hallatakse ja kontrollitakse: p Kvaliteeti p Keerukust p Ressursse: eelarvet, aega, inimesi p Riske
Tarkvaratehnika huvigrupid Klient Arendaja Kasutaja
Tarkvaratehnika kui distsipliini eesmärgid Kuluefektiivne tarkvaraarendus Tarkvaraarenduse organiseerimine kogu tarkvara elukaare ulatuses, arvestades organisatsiooniliste ja rahaliste piirangutega Hõlmata tarkvaraarenduse kõiki aspekte, mitte ainult tehnoloogiad!
Millised on parimad tarkvaratehnika meetodid? Erinevat tüüpi meetodid erinevat liiki süsteemidele
Tarkvararakenduste liigid Kohalikud (stand-alone) rakendused, nt. MS Office ja fotode manipuleerimise süsteemid Interaktiivsed transaktsioonipõhised rakendused, nt. pangarakendused ja e-kaubanduse rakendused Mähisrakendused (embedded control systems), nt. ABS-pidureid ja mikrolaineahju kontrollivad süsteemid Andmetöötlusrakendused (batch processing systems), nt. arvete ja palgaarvestuse süsteemid Meelelahutusrakendused, nt. mängud Modelleerimis- ja simulatsioonirakendused Andmekogumisrakendused (data collection systems), nt. keskkonna kohta andmeid koguvad süsteemid Süsteemide süsteemid (systems of systems)
Mis on protsess? Protsess on sammude jada, mis hõlmab tegevusi, piiranguid ja ressursse mingit liiki tulemi loomiseks Näiteid protsessidest?
Mis on tarkvara arendusprotsess e. tarkvaraprotsess? Tarkvaraprotsess on sammude jada, mille eesmärgiks on tarkvara loomine ja haldamine Üldistatud tegevused tarkvaraprotsessides: p p p p Spetsifitseerimine mida süsteem peab tegema ja mis on piirangud tema arendamisel? Arendamine tarkvarasüsteemi tootmine Valideerimine kas toodetud tarkvarasüsteem on see, mida kasutaja soovis? Evolutsioon tarkvarasüsteemi muutmine vastavalt kasutajate muutuvatele nõudmistele
Plaanipõhine vs agiilne tarkvaraprotsess Plaanipõhine tarkvaraprotsess: kõik tegevused on ette planeeritud ja edu kriteeriumiks on plaani järgmine Agiilne tarkvaraprotsess: planeerimine toimub sammude kaupa töö käigus Kumb on õigem?
Tarkvaraprotsessi mudelite põhitüübid Kosk Iteratiivne arendamine
Kose mudel
Mis on kose mudeli puudused ja eelised? Puudused: p Saab kasutada ainult siis, kui nõuded on fikseeritud p Iga tarkvaraprotsessi etapp peab olema lõpetatud enne kui alustatakse järgmist etappi Eelised: p Plaanipärane arendus aitab koordineerida arendustööd suurte süsteemide loomisel, kui süsteemi arendatakse erinevates kohtades
Modifitseeritud kose mudel (mille poolest erineb?)
Iteratiivne arendamine
Iteratiivse arendamise eelised ja puudused Eelised: p Klient saab anda tagasisidet kogu tarkvaraprotsessi jooksul p Kliendi tagasisidet on odavam arvestada peab vähem ümber tegema p Klient saab hakata tarkvara varem kasutama Puudused: p Tarkvaraprotsess ei ole läbipaistev ega lõpuni dokumenteeritud p Tarkvarasüsteemi struktuur degradeerub (entroopia suureneb) vajadus kasutada koodi refaktoreerimist!
The Manifesto for Agile Software Development
The principles of agile methods Principle Customer involvement Incremental delivery People not process Embrace change Maintain simplicity Description Customers should be closely involved throughout the development process. Their role is provide and prioritize new system requirements and to evaluate the iterations of the system. The software is developed in increments with the customer specifying the requirements to be included in each increment. The skills of the development team should be recognized and exploited. Team members should be left to develop their own ways of working without prescriptive processes. Expect the system requirements to change and so design the system to accommodate these changes. Focus on simplicity in both the software being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system. Chapter 3 Agile software development 43
Standish Group 2012
Riskide võrdlus
Agiilsete metodoloogiate maastik
Scrumi alused
Scrum
Potentially Shippable Product Increment
Kokkuvõte Tarkvaratehnika e. tarkvara inseneeria on professionaalsele tarkvaraarendusele suunatud distsipliin, mis tegeleb sellega, kuidas organiseerida tarkvaraarendust Tarkvaraprotsess koosneb tegevustest, mis on vajalikud tarkvaratoodete arendamiseks. Nende tegevuste organiseerimisega tegelebki tarkvaratehnika. Agiilne tarkvaratehnika on kindlate põhimõtete järgi organiseeritud iteratiivne tarkvara arendusprotsess Tarkvaratooted koosnevad valjatöötatud programmidest ja nende dokumentatsioonist Tarkvaratehnika eesmärgiks on kuluefektiivne tarkvaraarendus kogu tarkvaratoote elukaare ulatuses