1 Johdanto 1.1 Mikä on ohjelmistoarkkitehtuuri? 1.2 Katsaus ohjelmistotuotannon kehittymiseen 1.3 Epäonnistuneen ohjelmistoarkkitehtuurin seurauksia 1.4 Ohjelmistoarkkitehtuuri ja ohjelmistokehitysprosessi 1.5 Arkkitehtuurin rooli toteutusvälineenä 1.6 Yhteenvetoa 1
1.1 Mikä on ohjelmistoarkkitehuuri? Software architecture: The fundamental organization of a system embodied in its components, their relationships to each other and to the environment, and the principles guiding its design and evolution. (IEEE Standard 1471-2000) Ohjelmistoarkkitehtuuri kattaa: http://www.sei.cmu.edu/architecture/definitions.html Ohjelmiston jaon tärkeimpiin osiin ja näiden osien väliset suhteet Rakenteen ja käyttäytymisen Staattisen ja dynaamisen rakenteen Erilaiset näkökulmat ja abstraktiotasot Korkeimman tason suunnitteluratkaisut ja niiden perustelut Ohjelmiston kehittämisen säännöt ja periaatteet 2
Arkkitehtuuritasolla näkyvin kyviä asioita: Järjestelmän laatuominaisuuksia Jako komponentteihin, niiden vastuut Komponenttien välinen kommunikointi Prosessit ja niiden välinen kommunikointi, hajautus Tiedon pysyvyys, tietokantaratkaisut Tietoturva Käytettävyys Skaalautuminen ja suorituskyky Varautuminen tulevaisuuden tarpeisiin Uudelleenkäyttö... 3
Arkkitehtuuri järjestelmj rjestelmän kehitysperiaatteena Tietyistä arkkitehtuuritason ratkaisuista voi seurata yleisiä sääntöjä, joita on noudatettava kehitysprosessissa: - tietyn teknologian käyttö - tiettyjen tietorakenteiden käyttö - tiettyjen suunnitteluen käyttö - alustan käyttöön liittyvät säännöt Arkkitehtuuri = "Architecture is the set of design decisions about any system that keeps its implementors and maintainers from exercising needless creativity." (D'Souza & Wills) järjestelmän perustuslaki 4
Arkkitehtuurin kuvaus If a project has not achieved a system architecture, including its rationale, the project should not proceed adgsfgsgf wfrwffffdsff to full-scale system development. Specifying the RwrWRwrW architecture as a deliverable enables its use throughout the development and maintenance process. - Barry Boehm, 1995 adgsfgsgf wfrwffffdsff RwrWRwrW Ohjelmistoarkkitehtuuri on olemassa vain kuvattuna! arkkitehtuurit, esim. UML 5
Näkymä Arkkitehtuurinäkym kymät Näkymä Staattinen takaisinnnus Mallintaminen Näkymä Code Dynaaminen takaisinnnus (ajoaikaisesta informaatiosta) Toimiva järjestelmä (binääri) Koodin generointi Käännös 6
1.2 Katsaus ohjelmistotuotannon kehittymiseen 7
Ohjelmointi Vaatimukset Ohjelmointikieli Vaatimusten toteutus ohjelmointikielellä Ohjelma Programming-in-the-small Ongelma: Ohjelmointikielen hallinta Ratkaisu: Ohjelmointiympäristöt 8
Järjestelmäkehitys Vaatimukset Ohjelmointikieli Vaatimusten toteutus ohjelmointikielellä Komponent Komponent Komponent Komponentti Programming-in-the-large Ongelma: Riippuvuuksien hallinta Ratkaisu: Arkkitehtuuri 9
Ohjelmistotuotanto Vaatimukset Ohjelmointikieli Prosessi Programming-in-the-many Ongelma: Ihmisten hallinta Ratkaisu: Prosessi Vaatimusten toteutus ohjelmointikielellä Komponent Komponent Komponent Komponentti 10
Mallipohjainen ohjelmistotuotanto Vaatimukset Ohjelmointikieli Vaatimusten toteutus ohjelmointikielellä Komponent Komponent Komponent Komponentti Model-driven development Ongelma: Monimutkaisuuden hallinta Ratkaisu: Abstraktio, ntaminen, arkkitehtuuri 11
Ihmistyö Mallipohjainen ohjelmistotuotanto vs. perinteinen Perinteinen: Toteutus Suoritettava koodi Ykstyiskohtainen suunnittelu = täysin automatisoitu Arkkitehtuuri = turha työ Vaatimukset Kuvataan dokumentteina, prosessoidaan manuaalisesti Lisäarvo 12
Ihmistyö Mallipohjainen ohjelmistotuotanto vs. perinteinen Mallipohjainen: Arkkitehtuuri Vaatimus Design Toteutus Suoritettava koodi osittain automatisoitu - ntamiskielet - transformaatiot - koodin generointi Lisäarvo 13
Model-Driven Development (MDD) Bran Selic 14
Tuoteperheet Vaatimukset Ohjelmointikieli Ohjelmointialusta Ongelma: Varioitavuuden hallinta Ratkaisu: Arkkitehtuuri + prosessi Komponent Komponent Komponent Komponentti 15
Globaali ohjelmistokehitys Vaatimukset Ohjelmointikieli Ohjelmointialusta Ongelma: Työn hajauttaminen Ratkaisu: Arkkitehtuuri + prosessi Komponent Komponent Komponent Komponentti 16
Why GSD? the right answer (Riku Granat, Nokia) Access to the world wide talent pool Cost savings Focus on where you get the best ROI Market presence understanding local needs being close to the customer Mergers and acquisitions Improved quality? Follow-the-sun / -seasons development Gaining competitive advantage 17
Rinnakkaisuus Vaatimukset Ohjelmointikieli Ohjelmointialusta Ongelma: Laskennan hajautus Ratkaisu: Arkkitehtuuri + kielet Komponent Komponent Komponent Komponentti Rinnakkaiset laitealustat 18
Liiketoimintapalvelut Palvelut Vaatimukset Ohjelmointikieli Ohjelmointialusta Ongelma: Integrointi liiketoimintaan Ratkaisu: Arkkitehtuuri (SOA) Komponent Komponent Komponent Komponentti Rinnakkaiset laitealustat 19
Ohjelmointialusta Liiketoimintapalvelut Ohjelmistotuotanto tänään Vaatimukset Ohjelmointikieli Rinnakkaiset laitealustat Komponent Komponent Komponent Komponentti Ohjelmistoarkkitehtuuri on avain - komponentien välisten v suhteiden hallintaan - järjestelmien monimutkaisuuden hallintaan - ohjelmistojen varioitavuuden hallintaan - ohjelmistokehityksen ja laskennan hajauttamiseen - liiketoimintaintegrointiin 20
Taloussanomat 2.9.2005 21
1.3 Epäonnistuneen ohjelmistoarkkitehtuurin seurauksia järjestelmää ei pystytä toteuttamaan järjestelmä ei valmistu suunnitelussa ajassa järjestelmä ei skaalaudu järjestelmä on tehoton järjestelmää on vaikea testata järjestelmää on vaikea ylläpitää järjestelmää ei pystytä uudelleenkäyttämään järjestelmää ei pystytä siirtämään toiseen ympäristöön 22
Syitä epäonnistuneeseen arkkitehtuuriin: - huono kommunikaatio - arkkitehtuurin kannalta olennaisia vaatimuksia ei ole otettu huomioon - arkkitehti on kokematon tai heikkotahtoinen - johdolta tuleva painostus - kehitysprosessi ei tue arkkitehtuuria -muita? 23
1.4 Ohjelmistoarkkitehtuuri ja ohjelmistokehitysprosessi Lähtökohtia: Tyhjä pöytä: uusi järjestelmä raudan tai KJ:n päälle Palvelualusta: oletetaan olemassaolevia palveluja Arkkitehtuurialusta: oletetaan tiettyä arkkitehtuuria tukeva alusta Tuotealusta: oletetaan tiettyä sovellusaluetta tukeva alusta Tuote: olemassaolevan ohjelmiston arkkitehtuuri muuttuu Referenssiarkkitehtuuri: oletetaan tietty perusarkkitehtuuri 24
Arkkitehtuurin ohjaama kehitysprosessi Laatuvaatimukset Arkkitehtuurin kannalta merkittävät vaatimukset Vaatimusanalyysi Keskeiset toiminnalliset vaatimukset Alustava arkkitehtuuri Alustava arkkitehtuurisuunnittelu Laatuvaatimuksen arviointi Uusia tai muutetuja vaatimuksia Toissijaiset toiminnalliset vaatimukset Arkkitehtuurimuunnos ei OK OK Käyttöönotto Testaus Toteutus Yksityiskohtainen suunnittelu Arkkitehtuuri 25
Ohjelmiston jako komponentteihin Perusteena voi olla: toiminnallisuus yleisyys hajautus muutosherkkyys riesa (concern, aspect)... riesa 26
Ohjelmistoarkkitehtuuri ja organisaatio alijärjestelmä liiketoimintayksikkö järjestelmä ryhmä henkilö henkilö komponentti komponentti komponentti henkilö => arkkitehtuurin rakenne = organisaation rakenne Conway n laki 27
Arkkitehtuurin kannalta merkittävät vaatimukset Keskeiset toiminnalliset vaatimukset - Usein lähtökohta arkkitehtuurin suunnittelulle Laatuvaatimukset ( ei-toiminnalliset vaatimukset ) vaikuttavat tyypillisesti olennaisesti arkkitehtuuriin - Esim. suorituskyky, muunneltavuus, skaalautuvuus, hinta, ylläpidettävyys, siirrettävyys, uudelleenkäytettävyys jne. Arkkitehtuurin kannalta merkittävät vaatimukset on yleensä priorisoitu - Tyypillisesti yksi tai kaksi laatuvaatimusta dominoi arkkitehtuuria, vähemmän tärkeiden täytyy mukautua Vaatimusten ja arkkitehtuuriratkaisujen yhteyden säilyttäminen olennaista - Kuinka järjestelmä täyttää arkkitehtuurin kannalta merkittävät vaatimukset, erityisesti laatuvaatimukset 28
Laatuvaatimusten yhteentörm rmäys Piirrerunsaus, nopeasti saatavilla, yhteensopivuus Suorituskyky, luotettavuus, käytettävyys Muunneltavuus, testattavuus Kustannus, resurssitarve Markkinointi Loppukäyttäjä Ylläpitäjä Hinta, stabiilisuus, toimitusvarmuus, Johto Arkkitehti Asiakas 29
1.5 Arkkitehtuurin rooli toteutusvälineen lineenä Ohjelmistoalusta pakottaa sovellukselle usein tietyn arkkitehtuurin Sovellus rakennetaan käyttäen tämän arkkitehtuurin tarjoamia välineitä Sovelluskehityksen keskeinen kysymys on miten vaatimukset saadaan toteutettua näillä välineillä Esimerkiksi: Miten vaatimukset toteutetaan EJB-arkkitehtuurissa? Miten vaatimukset toteutetaan Symbian OS -arkkitehtuurissa? Miten vaatimukset toteutetaan Swing-arkkitehtuurissa? 30
Kehitys kulkee kohti arkkitehtuuritason toteutusvälineit lineitä ohjelmointikieli ohjelmistoarkkitehtuuri Toteutusvälineet: Muuttujat Aliohjelmat Luokat Komponentit Alustat 31
Mitä vaatimuksia tämät asettaa ohjelmistoarkkitehtuurille? Kun ohjelmistoarkkitehtuuri on osa toteutusvälineistöä, sen tulee olla: geneerinen: sopiva monille sovelluksille tavallisen ohjelmoijan ymmärrettävissä kuvattu täsmällisesti ja kattavasti kuvattu käyttäjän (so.sovellusohjemoijan) kannalta 32
Ohjelmistoarkkitehtuuri ja ohjelmointikieli Kun ohjelmistoarkkitehtuuri on osa toteutusvälineistöä, sillä on monia samankaltaisia ominaisuuksia kuin ohjelmointikielellä: Ohjelmistoarkkitehtuuri voi asettaa staattisia oikeellisuussääntöjä Ohjelmistoarkkitehtuuri voi asettaa dynaamisia oikeellisuussääntöjä Ohjelmistoarkkitehtuuria voi tukea työkaluympäristö (arkkitehtuurisuuntautunut ohjelmointiympäristö) 33
1.6 Yhteenvetoa Ohjelmistoarkkitehtuuri sanelee järjestelmän kehityksen periaatteet Ohjelmistoarkkitehtuuri on avaintekijä ohjelmistojen hallitsemisessa Ohjelmistoarkkitehtuuri konkretisoituu dokumentoinnissa Ohjelmistokehityksestä on tullut arkkitehtuurikeskeistä 34