OHJ-300 Ohjelmistotuotannon perust eet, kesäkurssi 202 OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Ajankoht aist a kurssilla - Asiakasvaatimusten dedis meni... - Torstaina 4.6.202 ei harjoituksia: valmistautumista asiakastapaamisiin - Kaikilla ryhmillä varattuna aika asiakastapaamisia varten ensi viikon tiistailta 9.6.202 - Seminaariaiheet listalla, varauksia voi taas tehdä - Kysyttävää? OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Päivän ohjelma - Mythical Man Month: jos joku olisi tällä kertaa lukenut artikkelin ;) - Case VR - Luokkakaaviot - Asiakastapaamiset: ohjeistusta OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Mythical Man Month OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Mythical Man Month 975 - Projektin aika-arvio ylittyy usein. - Arviointitekniikat ovat epätarkkoja ja huonoja. - Henkilötyökuukausi ei ole hyvä mitta projektin koolle. - Ohjelmoijien optimismi. - Testaukseen ei varata riittävästi aikaa. - Henkilöstön lisääminen myöhässä olevaan projektiin myöhästyttää sitä lisää. - Tutkimustuloksia ja tilastoja tulisi julkaista (Nykyään alan tutkimus on melko vilkasta...) - Jos aikataulua joudutaan muuttamaan, muutetaan sitä kerralla riittävästi. OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Mythical Man Month 975 - Projektiin kuluva aika ei mene suhteessa sen kokoon. - Vain 50% työajasta käytetään oikeasti projektia eteenpäin vieviin asioihin. - Ohjelmoijen tuottavuus vaihtelee suuresti ohjelman monimutkaisuuden mukaan. - Korkeamman tason ohjelmointikielillä voidaan saavuttaa merkittävästi parempi tuottavuus. - Myöhästyminen johtuu pikkutekijöiden summasta. - Aikataulun pitäminen tarkasti määritettyjen välietappien kanssa on tärkeää. - Kannattaa laatia kriitisen polun kaavio. - Projektin johtajan rooli ja suhtautuminen alempiin johtajiin on tärkeää. - Kannattaa työskennellä koko ajan hieman etuajassa, kompensoiden väistämättömiä pieniä myöhästymisiä OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Case: VR Kotitehtävän läpikäynti ja keskustelua Käytettävyysarvio: http://www.userpoint.fi/reports/vr_verkkokauppa_kaytettavyysarvio.php OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Luokkakaaviot (Ilkka Haikalan kalvosettiä hyödyntäen) OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Luokka (käsite, kohde) ja yhteys cd Asiakas luokka merkkiarvo attribuutit nimi osoite uusi Asiakas tekee yhteys 0..* Tilaus {versio=.0} tilaatuote() lukumääräsuhde operaatiot Olio? OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Oliot, lukumääräsuht eet ahto simakuutio : asiakas tilaus : tilaus tilaus 2 : tilaus teemu teekkari : asiakas tilaus 3 : tilaus outi opiskelija : asiakas Tavallisimmat lukumääräsuhteet: yksi (..) 0.. valinnainen..* vähintään * monta OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Navigointisuunta, lukusuunta, assosiaat ioluokka navigointisuunta lukusuunta Opiskelija nimi op.nro osoite osallistuu..* 0..* kurssi kurssitunnus periodit lukukausi <kuvaa 0..* opintojakso kuvaus ilmoittaudu() 0..* suoritus kuuluu 0..* tentti 0..* luennoi 0.. opettaja nimi osoite henkilönro 0..* suoritus arvosana ov-määrä pvm assosiatioluokka UML 2.x navigointi Undefined Navigable direction Non-navigable direction OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Muodost uminen ja koost uminen muodoste (composition) kooste (aggregation) yritys osasto 0..*..*..* henkilö assosiaation erikoistapauksia OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Periyttäm inen, yleistäm inen, erikoistam inen tilinro saldo tili otto() pano() saldokysely() tili tilinro saldo otto() pano() saldokysely() {xor} 0.. luotollinen tili luottoraja 0.. käyttötili luotollinen tili luottoraja käyttötili otto() otto() rajoite TAI: tili tilinro saldo otto() pano() saldokysely() luotollinen tili luottoraja käyttötili otto() OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Periytt äminen erikoistaminen Korttikasa sijaintipöydällä lisääpäälle() otaalta() otapäältä() 0.. 0..* Kortti arvo maa kuvapuolinäkyvissä käännä() yleistäminen Pöytäpakka käännäpäältä() otaalta() Käsipakka sekoita() Käsi korttejaaluksi lajittele() OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Yhteenveto yhteyksistä Heikko riippuvuus (esim. kutsu) Parser Scanner Yhteys, assosiaatio Person owns Car Muodoste (composition) Tail Cat Kooste (aggregation) Workstation..* Network olioiden välillä Yleistys, Periytyminen (generalization) Totetutus (realization) Sisäinen luokka (nested class) Car Car nestedclass Vehicle <<interface>> Vehicle MyClass luokkien välillä OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Kaavioiden käyttötavoista - Kaavioita voidaan käyttää (mm.) esitutkimuksessa, määrittelyssä ja suunnittelussa. Esitutkimus ja määrittely: sovellusalueen käsitteet (domain object model), järjestelmän rajaus, analysis object model, järjestelmän tietosisällön määrittely (käsitekaavio, conceptual model), usein myös tietokannan rakenne. Suunnittelu: ohjelman rakenne (design object model), tietokannan rakenne (esimerkiksi relaatiokannan graafinen esitys). Kaavio dokumentoi "sanaston", jolla asioista voi keskustella. - Kaavio kertoo, millaiset tilanteet ovat mahdollisia. - Kaavio ohjaa kysymään oikeita kysymyksiä. - Voidaan käyttää (rajoitetusti) koodin generointiin (luokkamäärittelyt, tietokannan luonti). - Voidaan käyttää takaisinmallinnukseen (reverse engineering). OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Kaavioiden ilmaisuvoimast a - Kaikkien sallittujen tilanteiden on oltava kaaviossa mukana. - Kaikkia rajoituksia ei aina pysty ilmaisemaan => Lisätään rajoitteita ja kommentteja. - Kaavioita voi testata hakemalla siitä vastauksia kysymyksiin ja piirtelemällä kuvia esimerkkitilanteista. - Mahtavatkohan asiakkaat ymmärtää kaavioita? OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Esimerkki ilmaisuvoimasta henkilö nimi osoite puh 0..* vakanssi 0..* yritys 0.. pomo esimies * alainen Rooli Kysymys : missä firmoissa A.S. on töissä? Kysymys 2: kuka on T.T:n esimies, kun hän on Aikonilla hommissa? Kysymys 3: mikä on T T:n esimiehen titteli kohdan 2 kysymyksessä. OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Sivuhyppäys: ohjelmistojen oliokeskeisyys (OO, Object Orientat ion) - Oliomenetelmät ovat 980-luvun loppupuolelta lähtien vallanneet alaa ja ovat nyt valtavirta -- toisaalta ohjelmistot kehitetään käytännössä useimmiten ilman sen juhlallisempia menetelmiä. - Perusajatuksena on sovellusalueen mallintaminen ohjelmassa luomalla ohjelmaan todellisuutta vastaavat oliot (tilaus, kuormaauto, anturi, jne.) luokittelu (abstraktiot) olioiden väliset yhteydet olioiden koostuminen toisista olioista - OOA: Object Oriented Analysis, oliomäärittely. - OOD: Object Oriented Design, oliosuunnittelu - OOP: Object Oriented Programming, olio-ohjelmointi. - Oleellisinta oliokeskeisyydessä on ajattelutapa, ei toteutustekniikka (C, C++ -luokka, J2EE,.NET, COM-komponentti, Java-papu jne ). OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
ohjelmist ojen oliokeskeisyys - Oliokeskeisessä ajattelussa lähes mitä hyvänsä voi ajatella oliona: bitti, merkki, merkkijono, kokonaisluku, tiedosto, palvelin, kuorma-auto, pankkiyhteys, varasto, pankkitili - Oliolla on tila olion muisti tila voi koostua toisista olioista, esimerkiksi pvm voi koostua päivästä, kuukaudesta ja vuodesta olion tila on kapseloitu olion sisälle: sitä voi kysellä oliolta ja sitä voi muuttaa kutsumalla olion metodeita - Oliolla on rajapinta joukko toimintoja, joilla oliota hallitaan, operaatiot, julkiset jäsenfunktiot, palvelut, metodit... - Oliokeskeinen ohjelma koostuu joukosta keskenään kommunikoivia oliota. Oliot kommunikoivat lähettämällä toisilleen sanomia, ts. kutsumalla toistensa rajapintojen määrittelemiä. - Luokka: oliot, joilla on sama käyttäytyminen (metodit) ja samat attribuutit, ovat instansseja eli ilmentymiä samasta olioluokasta. OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Kaavioiden laat iminen: Luokat - Luokan jäsenillä on samat attribuutit ja sama käyttäytyminen (metodit). Tyypillisiä luokkia Konseptuaaliset luokat: sovellusalueen käsitteet (toinen tapa sanoa lähes sama: käsitteet, jotka ovat mukana jokaisessa ajateltavissa olevassa ratkaisussa) itse keksityt metaforat yms, pure fabrication : luokat, jotka keksitään tyhjästä helpottamaan keskustelua sovelluksesta (määrittely- tai suunnittelutasolla) - Luokkajako perustuu pysyviin ominaisuuksiin, ei esimerkiksi olion väliaikaiseen tilaan. - Toiminnallisuuden jakaminen: ei mahtiluokkia (God class), jotka "osaavat" ja "tietävät" kaiken (muut luokat toimivat vain tiedon säilytyspaikkoina). OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Kaavioiden laat iminen: Luokat Metodit saantimetodit (accessors) palauttavat tietoa olion tilasta muuttajametodit (mutators) muuttavat olion tilaa perussääntö: laita metodit sinne, missä tietokin on Attribuutit primitiivityypit esitetään attribuutteina abstraktit tietotyypit ja joskus muutkin oliot voivat esiintyä myös attribuutteina (vrt. muodoste ) assosiaatiot toteuttavia attribuutteja ei yleensä esitetä attribuutteina kaavioissa Ei toistuvia kenttiä Ei tarpeetonta redundanssia Ei puuttuvia kenttiä Ei turhia luokkia OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Kaavioiden laat iminen: Yht eydet Olion A ja B voi yhdistää esimerkiksi seuraavanlainen suhde A on osa tai kuuluu B:n A sisältää tai omistaa B:n A kuvaa B:n A kommunikoi B:n kanssa A on tapahtuma, joka liittyy B:n A on fyysisesti B:n vieressä A käyttää B:tä A hallinnoi B:tä... Minimoi yhteydet luokkien välillä, ei redundantteja yhteyksiä (ks. opiskelijarekisteri). need-to-know -periaate: jos olio A tarvitsee toiminnassan oliota B, siihen on päästävä jotenkin käsiksi, eli A:lla on oltava näkyvyys (visibility) olioon B Assosiaatiot kuvaavat yleensä tilannetta, jossa näkyvyys on pysyväisluontoista, siis koko ajan olemassa Muissa tapauksissa käytetään riippuvuusnuolia, esim. olio B välitetään parametrina olion A operaatiolle olio B on väliaikainen, A:n metodi luo olion, käyttää sitä ja tuhoaa sen lopuksi Täysin staattisessa tilanteessa, esimerkiksi globaali objekti, jota kaikki käyttävät, yhteys jätetään usein kokonaan pois OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Personoit u opiskelijaportaali POP OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Sovellusmoot t ori OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
5.06.2 OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 +ScanImages() +ReadImages() +SetImage() +CloseControl() -SaveFormTemplate() -RecognizeFormFields() -ShowNextInvoice() -ChangeCtrlSize() escancontrol +StartListening() +EndListening() -GetInstallPath() -CreateDirectories() -ImageScanned() -AccountsRecognized() -RectObjectsRecognized() -PDFCreated() -CleanFolders() -ScannedFilesWatcher -RecognizedFilesWatcher -PDFFilesWatcher DirectoryListener +FitImageToCtrl() +SetImageToCtrlWidth() +SetGrabMode() +SetDrawMode() +DeleteImage() +ZoomOut() +ZoomIn() +UpdateImage() +SwapDimensions() +ResetView() +NextPage() +PreviousPage() +SetSelectedPage() +GetSelectedPage() +OnMouseDown() +OnMouseMove() +OnMouseUp() +SetCursor() +RedrawAll() -FirstPage -LastPage -GrabMode -DrawMode -ModifyMode -MousePosStart -MousePosEnd -CurrentRectangle -Image CustomPictureBox +ReadFile() +ReadRectObjects() +ReadAccounts() +ReadBarcode() +WriteFile() +DeleteFile() +WriteLog() -LogFile FileOperations +DeletePage() +RotatePage() -TiffEncoderParams FrameConversionTool +CreateRectangle() +ModifyRectangle() +ConvertCoordinates() +DrawRectangle() RectangleDrawMath +SetInvoiceImagePath() +GetInvoiceImagePath() +SetInvoiceRectObjects() +GetInvoiceRectObjects() +SetInvoiceAccounts() +GetInvoiceAccounts() +SetInvoiceBarcode() +GetInvoiceBarcode() -GetReferenceNumberSequence() -Accounts -BarcodeData -ImageFile : string Invoice +SetStatusBarText() +StartProgressing() +RunOnce() +StopProcessing() StatusBarTool +FormatDate() +FormatAmountOfMoney() +FormatReferenceNumber() -RemoveChars() -ConvertCharToDigit() -OrderDate() -CorrectPunctuation() RecognitionHelper +CreateDocument() +AppendElement() +AppendValueNode() +ReadNodeValue() +IsSet() +ReadRectNode() +CreateRectNode() +CreateAttribute() +NewRectObjectFromXml() +ConvertRectObjectFromXml() +ConvertRectObjectToXml() XMLConverter -FieldCoordinates -FieldName -FieldType -FieldValue -FieldRectangle -FieldConfidence -Recognized -Page RectObject +StartThread() +SetTerminatingStatus() +EndAllProcesses() -WaitMutex() -ScanningThread() -RecognitionThread() -PDFCreationThread() -ShowProgressThread() -SetProcessSettings() -StartProcess() -ProcessDone() -m_threadtype -m_mutex ThreadManager +GetUpdateXMLFile() +ParseXMLFile() +CheckFileInfo() +UpdateProcessFiles() UpdateProcesses System.Windows.Forms.UserControl System.Windows.Forms.PictureBox +IsRectOutOfBounds() +GetRectangleTouchingCursor() +GetRectangleModificationPoint () +GetCurrentRectangle() +SetCurrentRectangle() +ShowRectangleInfo() +RemoveRectangle() +ClearRectangleSelection() +OnRectangleChanged() -CurrentRectangle RectangleMath +AddInvoice() +UpdateInvoice() +RemoveInvoice() InvoiceList * +SetResources() +ReadXmlResources() +UseDefaultResources() +GetScanningProcessResources() +GetRecognitionProcessResources() +GetPDFProcessResources() +SetButtonTooltips() +GetFormFieldType() +GetStatusBarMessage() +GetErrorMessage() LocalizationManager +InitializeRectObjects () +UpdateRectObjects() +MarkRectObjectsUnrecognized() +MarkRectObjectRemoved() RectList..* 0.. ScanCont rol-komponent t i (Siitarinen 2006)
Harjoitellaanpa! OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Matkatoimisto - Matkanjärjestäjät järjestävät lomamatkoja. - Matka koostuu matkalipuista ja oleskelusta tietyssä hotellissa jossain lomakohteessa. - Valittu hotelli vaikuttaa matkan hintaan. - Piirrä luokkakaavio matkoja käsittelevän tietojärjestelmän tietosisällöstä. - Kaavion perusteella pitää pystyä vastaamaan ainakin seuraaviin kysymyksiin.. Mitkä matkanjärjestäjät järjestävät matkoja tiettyyn maahan? 2. Minkä nimisiä hotelleja on tietyssä kohteessa? 3. Mitä kohteita on tietyssä maassa? 4. Mitä attribuutteja on matkalipulla, entäpä matkalla? 5. Mitä lippuja liittyy tietyn matkailijan matkaan? 6. Kenellä matkustajalla on tietyn numeroinen lippu? 7. Mikä on keskilämpötilaltaan lämpimin kohde tietyssä maassa? 8. Luettele tällä hetkellä Malesiaan lipun hankkineet matkustajat. - Merkitse kaavioon tärkeimmät attribuutit, operaatioita ei tarvitse pohdiskella. OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Luokkakaavio Matkanjärjestäjä nimi osoite... Matka alkupvm loppupvm hinta * järjestää * sisältää * Hotelli nimi huoneiden lkm luokitus... *..* suuntautuu..* on oikeuttaa Kohde paikka keskilämpötila... Matkustaja nimi osoite.....* omistaa * Lippuvihko numero sijaitsee * * nimi... Kooste Maa Lippu numero tyyppi OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Luokkakaavio: Mat kat oimist o M atk anjärjes täjä nimi os oite... järjes tää Matka alk upvm loppupvm hinta * oik euttaa * Matkustaja nim i os oite.....* om istaa * Lippu num ero * * sisältää Hotelli *..* s uunt autuu on Kohde paikka keskiläm pötila... sijaitsee * nim i... M aa nim i huoneiden lk m luok itus.....* OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 3 5.06.2
Matkatoimisto vm. 2009 OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 5.06.2
Asiakast apaamiset * Tapaamisessa asiakasryhmä ja toimittajaryhmä keskustelevat toimitettavasta tuotteesta. Toimittajaryhmä saa kysellä asiakkaalta tarkentavia kysymyksiä ja ehdottaa, millainen järjestelmän tulisi olla. * Tapaamisen pituus on noin 45 minuuttia * Paikalla oleva assistentti on lähinnä tarkkailija, mutta häneltä voi myös kysyä neuvoa * Tapaamisessa aika saattaa loppua kesken ja vaatimuksia on tarpeen päivittää tilaisuuden jälkeen sovitun perusteella. Asiakkaan vastuulla on päivittää asiakasvaatimukset ja pitää huolta, että toimittajaryhmällä on aina uusimmat vaatimukset. * Molempien ryhmien kannattaa tehdä tapaamisessa muistiinpanoja, yksi jäsen on syytä määrätä sihteeriksi. OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Asiakast apaamisen vaat imukset * Kaikki ryhmän jäsenet ajoissa paikalla. Poissaoloista tulee ilmoittaa etukäteen assistentille. * Molemmat ryhmät ovat perillä asiakasvaatimuksista ja molemmilla ryhmillä on printattuna asiakasvaatimukset mukanaan. * Toimittajaryhmä on piirtänyt käsin 4-6 kpl käyttöliittymäkuvia asiakasvaatimusten perusteelle heidän mielestään oleellisimmista näkymistä. Yksi kuva per A4, esimerkki seuraavalla kalvolla. Nämä tulee pitää tallessa ja liittää lopullisen määrittelydokumentin liitteisiin. * Asiakastapaamisen jälkeenkin yhteydenpitoa yhteistyöryhmän kanssa tulee jatkaa (tarpeen mukaan). Toimittajaryhmän tulee pitää kirjaa yhteydenpidoista ja liittää tämä määrittelydokumentin liitteeksi. Yhteydenpidoista tulee kirjata ylös mm. minkä takia yhteydessä ollaan oltu, mikä oli yhteydenpitoväline, kauanko aikaa käytettiin, yms. OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2
Esimerkki: paperiprototyyppi / käyttöliittymäkuva OHJ-300 Ohjelmistotuotannon perusteet, kesäkurssi 202 35 5.06.2
Ensi viikolla - Asiakastapaamiset - Tapahtumasekvenssikaaviot OHJ-300 Ohjelmistotuotannon perusteet, kesä 202 5.06.2