37
Pakkanen * * * Sovellustuotannon menetelmäpilotti PlugIT-seminaari D-työpaja __________________________________________________________ Annamari Riekkinen ja Kirsi Karvinen PlugIT Kuopion yliopisto / Tietotekniikkakeskus /HIS-tutkimusyksikkö Komponenttien ja sovellusarkkitehtuurin määrittely

Pakkanen * * * S ovellustuotannon menetelmäpilotti

  • Upload
    noreen

  • View
    40

  • Download
    6

Embed Size (px)

DESCRIPTION

Pakkanen * * * S ovellustuotannon menetelmäpilotti. Komponenttien ja sovellusarkkitehtuurin määrittely. PlugIT-seminaari D-työpaja __________________________________________________________ Annamari Riekkinen ja Kirsi Karvinen PlugIT - PowerPoint PPT Presentation

Citation preview

Page 1: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Pakkanen* * *

Sovellustuotannon menetelmäpilotti

PlugIT-seminaari D-työpaja__________________________________________________________

Annamari Riekkinen ja Kirsi Karvinen

PlugIT

Kuopion yliopisto / Tietotekniikkakeskus /HIS-tutkimusyksikkö

Komponenttien ja sovellusarkkitehtuurin määrittely

Page 2: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Esityksen sisältö

Komponenttimäärittelyn rooli koko prosessissaMenetelmän esittely: käsitteitä ja prosessiMenetelmän läpikäynti: komponenttien tunnistusMenetelmän läpikäynti: komponenttien vuorovaikutusMenetelmän läpikäynti: komponenttien määrittelyMiten onnistuttiinMiten tästä eteenpäin – yleisesti ja tästä hetkestä

Page 3: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponentti- ja arkkitehtuuri-määrittely sovellusprosessissa

Vaatimus-määrittely

HankintaToteutus

Ylläpito Käyttöönotto

MäärittelySuunnittelu Kokoaminen

Testaus

Käyttö-tapaukset

Olemassa olevat komponentit,sovellukset, mallit ym.

Teknisetrajoitukset

Komponentit

Komponenttimäärittelytja arkkitehtuurit

Sovellukset

Testatutsovellukset

Käsitemalli

MäärittelySuunnittelu

Toimintaa tukeva vaatimusmäärittely

Vaatimukset konkretisoituvat käyttöliittymätasolla (näyttökuvat)

Määrittelyssä vaatimukset siirretään sovellukseen.

Huolellinen määrittely:

•suoraviivaistaa toteutusta

•helpottaa ylläpitoa

•parantaa käytettävyyttä

Page 4: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Vaikutteet menetelmän valintaan

Ohjelmistotuotannon kaikki vaiheet ja näkökulmat perustuvat komponentteihin:Komponentti- ja palvelulähestymistavan näkökulma: sovellus määritellään joukkona komponentteja, jotka tarjoavat käyttäjilleen palveluja rajapintojensa (eli liittymiensä) kautta. komponenttien ja sovelluksen palvelupohjaista arkkitehtuuria tukeva määrittelymenetelmä.Helposti opittavissa oleva ja käyttöönotettava menetelmä.

Tavoite:Miten menetelmän avulla saadaan kehitysprosessia tukevat tuotokset: arkkitehtuurimäärittely, komponenttimäärittelyt ja rajapintamäärittelyt.

Page 5: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Tietokanta

komponentti komponentti

Komponentti (sovellus)

komponentti

Web-selain

Yhdenkäyttäjänpalvelut

komponentti

J/ASPJ/ASP

J/ASP

Sovellus-palvelin

Sovellus-kohtaisetpalvelut

Eri sovellustenyhteisetpalvelut

Webpalvelintai

asiakas

Tietokanta-palvelin

Toimintalogiikkataso (kerros)Business layer

Järjestelmätaso (kerros)System layer

Dialogitaso (kerros)(työpöytätaso)Dialog layer

Käyttöliittymätaso (kerros)

Menetelmän esittely: käsitteitä

Arkkitehtuurikoostuu

komponenteista.

Komponenttitoteuttaa

rajapinnan(t).

Rajapinta koostuuoperaatioista.

Operaatioistamuodostuu

toiminnallisuus.

Page 6: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

+getServerUserGroupDetails(in sid : ServerId, out sugd[] : ServerUsergroupDetails[])

«interface»IUserGroupManagement

-sid : ServerId

Server-Name : String-Description : String-oid:OrganizationId-ugid : UserGroupId

User group

-Unix GId: int-Unix UidRange : String-sugId:ServerUsergroupId

Server's user group

1*

*1 1*

Käsitemalli

Rajapintamäärittelyt

Menetelmän esittely: prosessi

Kom pon e n tt im äärit te ly tja ark k ite h tu u ri

R a japin tam ää rit te ly t

Luo to im innantie tom alli

Käs ite m a lli

T unn is ta to im in ta lo g iik k a -tas o n ra jap in na t

T u nn is ta jä r je s telm ä-r a jap in n at ja o per aa tio t

Luo alu s tav a t m äär ittely t jaar k k iteh tu u r i

Käy t tö tapau s -k u vau k s e t

(k ä y ttö ta rin at )Kom pon e n tt ie n tu n n is tu s va ih e

Arkk iteh tu u r i-m allit

Kom pon e n t t ie n vuo rova ik u tu k s e n m äärit t e ly

T unn is ta to im in ta lo g iik k a-ra jap in to jen o pe raa tio t

M uokk aa ra jap in to ja jaop eraa tio ita M uokk aa m ää r itte ly jä

ja ark k iteh tu u r ia

Kom pon e n t t ie n m äärit t e ly

T ark en n a ra jap in ta -m ää r it te ly t

(Luo tietom alli)

M äär it te leop er aa tio iden es i- ja

jä lk ieh do t

M äär itte le ra jap in to jenvä lis e t ra jo itu k s e t

Kom pon e n t t im äärit t e ly tja ark k it e h tu u ri

R a japin n a t

To im in ta lo g iik k a -rajapin n a t :v as tu uk aav io

Kom pon e n tt i -m äärit t e ly t jaark k it e h tu u ri

O lem as s ao lev atra jap in n at(u lk o is e t liittym ät )

M ahdo llis e to lem as s a o lev a tkom pon en t it jakom pon en t ti-ark k iteh tu u r i

Järje s t e lm ä -ra japin n a t

Käyt tö l ii t t ym ä -pro to t

(Käy ttö liit tym ä-p r o to t ,k äy ttö tap au k s e t )

Käyttötapauskuvaus

Komponentit ja arkkitehtuuri

Asiakas

-tunnus

Henkilö

Pakka-järjestelmän käyttäjä

Palvelinkone

Hyväksyttykäyttölupahakemus

Käyttäjätunnus

-opinto-oikeus

OpiskelijaHenkilökunta

n1..n

0..1

0..1

Muu henkilöstö

1

0..1

0..1

0..1

11..n

11

1..n1

0..1

1

Tallentaja

CreateUserName«uses»

IdentifyPerson

«extends»

Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}

Page 7: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien ja arkkitehtuurin määrittely

Prosessin periaate:

Komponenttien tunnistus: rakenteellinen perusta • komponenttiarkkitehtuuri• komponentit ja rajapinnat• liittymät muihin järjestelmiin ja ympäristöön

Komponenttien vuorovaikutuksen määrittely: toiminnallisuus ja tiedot (logiikka) • rajapintojen operaatiot• määrittelyjen tarkennukset

Komponenttien määrittely: dokumentointi• komponenttiarkkitehtuurin viimeistely• komponentti- ja rajapintamäärittelyiden viimeistely

Page 8: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

1. Luo to im innantietomalli

Käs itemalli

2 . T unnis tato im intalo giikka-tas o n rajap innat

3. T unnis ta järjes telm ä-rajap innat ja o p eraatio t

4. Luo alus tavatm ääritte lyt jaarkkiteh tuuri

Käyttö tap aus -kuvauks et

(käyttö tarinat)

Komponenttie n tunnis tus va ihe

Arkkitehtuuri-m allit

T o im intalo giikka-rajap innat:

vas tuukaavio

Kompo nentti-m äärittelyt jaarkkitehtuuri

O lemas s ao levatrajap innat(ulko is et liittym ät)

M ahd o llis eto lemas s a o levatkomp o nentit jakomp o nentti-arkkitehtuuri

Järjes telm ä-rajap innat

Käyttö liittym ä-p ro to t

1. Komponenttien tunnistusvaiheAsiakas

-tunnus

Henkilö

Pakka-järjestelmän käyttäjä

Palvelinkone

Hyväksyttykäyttölupahakemus

Käyttäjätunnus

-opinto-oikeus

OpiskelijaHenkilökunta

n1..n

0..1

0..1

Muu henkilöstö

1

0..1

0..1

0..1

11..n

11

1..n1

0..1

1

Tallentaja

CreateUserName«uses»

IdentifyPerson

«extends»

Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}

-User name : String-User type : Boolean-Description : String-uid:UserID-pid:PersonID

«core type»User

-Name : String-Description : String-Type (unix, muu)-Mailserver : Boolean-Deactivated from : Date-sid : ServerId

«core type»Server

-Name : String-Description : String-oid:organizationID-ugid : usergroupID

«core type»User group

-Unix Uid : Integer-Valid Until : Date-DeactivatedFrom : Date-Description : String-Created : Date-NotforPublicDir : Boolean-serverID-userID-usID: UserServerId

«type»Associated server(server username)

0..*1

-Primary user group : Boolean-asugID:AssServerUsergroupID-usID: userserverID-sugID:serverUsergroupID

«type»Associated user group

0..*

1

«interface»IUserManagement

«interface»IServerManagement

«interface»IUserGroupManagement

1

0..*

1*

1 0..*

10..* 1

0..*

-Unix GId: int-Unix UidRange : String-serverID-ugID:usergroupID-sugID:serverUsergroupId

«type»Server's user group

*1

1*

ICreateUser

+findUser()+getPersonUserDetails()+generateUsername()+setUserDetails()+getServerDetails()+...()

«interface»ICreateUser

Page 9: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien tunnistusvaihe

Miten käsitemallista ja käyttötapauskuvauksesta johdetaan alustavat rajapintamäärittelyt ja sovellusarkkitehtuuri?

Toimintalogiikkarajapintojen tunnistus:

1. Luo käsitemallin pohjalta tietomalli: Kopioi käsitemalli ja siitä määrittele sen avulla tiedot, jotka sisältyvät tulevaan sovellukseen. Esim.

- Henkilö: sovellukseen ei tallenneta henkilön tietoja, ainoastaan viittaus henkilösovelluksen henkilöön.

- Asiakas: nimetään Käyttäjäksi

- Käyttäjätunnus: Käyttäjän ominaisuus (lisätään Käyttäjä-luokkaan attribuutiksi)

- Palvelinkone ja käyttäjäryhmä: tiedot ylläpidetään sovelluksessa

- Muuta: normalisointi, toiminnan rajoitukset ja säännöt

Page 10: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

1

0..*

1

0..*

-userIDRef-serverIDRef-Uid-DeactivatedFrom : Date

AssociatedServer

0..*1

-ugIDRef-userIDRef

AssociatedUsergroup

0..*

1

-serverIDRef-ugIDRef

ServerUsergroup1 1..* 0..* 1

{Samaa tunnusta ei saa antaakahdelle eri henkilölle.}

{Henkilön tiedot täytyy ollahenkilötietojärjestelmässä ennenkuin tunnusta voidaan luoda.}

{Käyttäjä on yksi henkilö, ryhmä,tietojärjestelmä, laitos tms. }

{Käyttäjätunnuksen luodaan ensisijaisestitietyn kaavan mukaan.}

Komponenttien tunnistusvaihe

Käsitemallista Tietomalli

Asiakas

-tunnus

Henkilö

Palvelinkone

HyväksyttykäyttölupahakemusKäyttäjätunnus Käyttäjäryhmä

Palvelinkoneenkäyttäjätunnus

1..n

1..n

1

1..n

1n

1

1

1

1

1..n1

1..n

1..n

n 1..n

n1..n

10..1

-userID-Username : String-personIDRef

User

-serverID-Name : String-DeactivatedFrom : Date

Server

-ugID-Name : String

Usergroup

Henkilö

Pakkanen

Henkilötietojärjestelmä

1

1

Page 11: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien tunnistusvaihe

Toimintalogiikkarajapintojen tunnistus:2. Tietomallista johdetaan toimintalogiikkarajapintojen vastuukaavio s.e. sovellukseen sisältyvät käsitteet erotellaan

ydinkäsitteiksi (core type): käyttäjä, palvelinkone, käyttäjäryhmä

käsitteiksi (type), jotka täydentävät ydinkäsitteitä.

Ydinkäsitteille nimetään toimintalogiikkarajapinnat.

Muiden käsitteiden osalta päätetään, minka rajapinnan kautta niihin liittyvä tieto tallennetaan ja haetaan.

Määritellään vastuu eri rajapintoihin sisältyvien käsitteiden välisen viitteen tallentamisesta.

Page 12: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

«interface»IUserManagement

«interface»IServerManagement

«interface»IUserGroupManagement

1*

10..* 1

0..*

-User name : String-User type : Boolean-Description : String-uid:UserID-pid:PersonID

«core type»User

-Name : String-Description : String-Type (unix, muu)-Mailserver : Boolean-Deactivated from : Date-sid : ServerId

«core type»Server

-Name : String-Description : String-oid:organizationID-ugid : usergroupID

«core type»User group

-Unix Uid : Integer-Valid Until : Date-DeactivatedFrom : Date-Description : String-Created : Date-NotforPublicDir : Boolean-serverID-userID-usID: UserServerId

«type»Associated server(server username)

-Primary user group : Boolean-asugID:AssServerUsergroupID-usID: userserverID-sugID:serverUsergroupID

«type»Associated user group

-Unix GId: int-Unix UidRange : String-serverID-ugID:usergroupID-sugID:serverUsergroupId

«type»Server's user group

Komponenttien tunnistusvaihe

Tietomallista Vastuukaavio

-userID-Username : String-personIDRef

User

-serverID-Name : String-DeactivatedFrom : Date

Server

-ugID-Name : String

Usergroup

1

0..*

1

0..*

-userIDRef-serverIDRef-Uid-DeactivatedFrom : Date

AssociatedServer

0..*1

-ugIDRef-userIDRef

AssociatedUsergroup

0..*

1

Henkilö

Pakkanen

Henkilötietojärjestelmä{Samaa tunnusta ei saa antaakahdelle eri henkilölle.}

{Henkilön tiedot täytyy ollahenkilötietojärjestelmässä ennenkuin tunnusta voidaan luoda.}

{Käyttäjä on yksi henkilö, ryhmä,tietojärjestelmä, laitos tms. }

{Käyttäjätunnuksen luodaan ensisijaisestitietyn kaavan mukaan.}

-serverIDRef-ugIDRef

ServerUsergroup

1

1

1 1..* 0..* 1

10..*

1 0..*

1*

0..*1

0..*

1

*1

Page 13: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien tunnistusvaihe

Järjestelmärajapintojen tunnistus (Cheesman):3. Nimetään kukin käyttötapauskuvaus omaksi rajapinnakseen.

Käyttötapauksittain käydään läpi kuvausten askelet ja arvioidaan samalla liittyykö niihin toiminnallisuutta, joka on sovelluksen vastuulla alustavat operaatiomäärittelyt (tarkoitus kuvattuna).

+findUser()+getPersonUserDetails()+generateUsername()+setUserDetails()+getServerDetails()+...()

«interface»ICreateUser

Luo käyttäjätunnusKäyttö-tapaus

Luokäyttäjätunnus

(sovelluslogiikkadialogitasolla)

Käyttö-tapauksenaskeleet

1. Valitse asiakas2. Varaa asiakkaalle käyttäjätunnus.3. Liitä tunnus palvelinkoneeseen...

Page 14: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien tunnistusvaihe

Järjestelmärajapintojen tunnistus (Pakkanen):3. Nimeä kukin käyttötapauskuvaus omaksi rajapinnakseen.

Käy käyttötapauksittain läpi sovelluksen näyttökuvat ja arvioi samalla liittyykö niihin toiminnallisuutta, joka on sovelluksen vastuulla alustavat operaatiomäärittelyt (tarkoitus kuvattuna).

Lisäksi näyttökuvissa voi olla mukana käyttötapauksessa tarvittavaa tietoa (tietosisältö), joten operaatioiden parametreja voidaan myös lisätä kuvauksiin.

Esimerkki käyttöliittymä paperiprotona

if (käyttäjätunnus =””) then

getPersonUserDetails(in pid, out PersonDetails, outUserDetails);

generateUsername(in name:string);

Page 15: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Hakuoperaation palauttamaa: sukunimi, etunimi, henkilötunnus, käyttäjätunnus (jos on)

operaatioita

if else

Page 16: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien tunnistusvaihe

Komponenttimäärittelyiden ja arkkitehtuurin luonti4. Järjestelmäkomponentit: esimerkkitapauksessa yksi komponenttimäärittely käyttötapaukselle ”Luo käyttäjätunnus” (huomioi, että yksi

komponenttimäärittely voi sisältää useita rajapintoja).

Toimintalogiikkakomponentit: jokaiselle toimintalogiikkarajapinnalle luodaan oma komponenttimäärittely.

UsernameManagementSystem ICreateUser

IPersonPerson Manager

UserManager IUserManagement

IServerManagementServerManager

IUserGroupManagementUserGroupManager

Page 17: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

Tallentaja

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}

Komponenttien tunnistusvaiheKomponenttimäärittelyiden ja arkkitehtuurin luontiKomponenttimäärittelyt kootaanarkkitehtuuriksi miettimällä miten nekommunikoivat keskenään.

Page 18: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

2. Komponenttien vuorovaikutus

Komponenttie n vuo ro va ik utuk s e n mää ritte ly

T unnis tato im intalo giikka-

rajap into jen o p eraatio t

Muo kkaa rajap into jaja o p eraatio ita

M uo kkaamäärittelyjä jaarkkitehtuuria

Komp o nenttim äärittelytja arkkitehtuuriR ajap innat

T o im intalo giikkarajap innat Komp o nenttm äärittelyt ja arkkitehtuuriJärjes telm ärajap innat

(K äyttö liittym ä-p ro to t,käyttö tap aukset)

Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}

-User name : String-User type : Boolean-Description : String-uid:UserID-pid:PersonID

«core type»User

-Name : String-Description : String-Type (unix, muu)-Mailserver : Boolean-Deactivated from : Date-sid : ServerId

«core type»Server

-Name : String-Description : String-oid:organizationID-ugid : usergroupID

«core type»User group

-Unix Uid : Integer-Valid Until : Date-DeactivatedFrom : Date-Description : String-Created : Date-NotforPublicDir : Boolean-serverID-userID-usID: UserServerId

«type»Associated server(server username)

0..*1

-Primary user group : Boolean-asugID:AssServerUsergroupID-usID: userserverID-sugID:serverUsergroupID

«type»Associated user group

0..*

1

«interface»IUserManagement

«interface»IServerManagement

«interface»IUserGroupManagement

1

0..*

1*

1 0..*

10..* 1

0..*

-Unix GId: int-Unix UidRange : String-serverID-ugID:usergroupID-sugID:serverUsergroupId

«type»Server's user group

*1

1*

+findUser()+getPersonUserDetails()+generateUsername()+setUserDetails()+getServerDetails()+...()

«interface»ICreateUser

Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}+getServerUserGroupDetails(in sid : ServerId, out sugd[] : ServerUsergroupDetails[])

«interface»IUserGroupManagement

-sid : ServerId

Server-Name : String-Description : String-oid:OrganizationId-ugid : UserGroupId

User group

-Unix GId: int-Unix UidRange : String-sugId:ServerUsergroupId

Server's user group

1*

*1 1*

+getServerUserGroupDetails(in sid : ServerId, out sugd[] : ServerUsergroupDetails[])

«interface»IUserGroupManagement

-sid : ServerId

Server-Name : String-Description : String-oid:OrganizationId-ugid : UserGroupId

User group1*

1*

Page 19: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus

Miten alustavat määrittelyt täsmentyvät prosessin aikana.

Toimintalogiikkatason rajapintaoperaatioiden tunnistus:

1. Luodaan rajapinta- ja komponenttimäärittelyt sekvenssikaavioon.

Käydään läpi kukin järjestelmärajapinnan tunnistettu operaatio yksi kerrallaan ja mietitään, miten vastuu tietojen käsittelystä jakautuu operaatioiksi toimintalogiikkatasolla.

Esimerkkinä operaatiokuvaus findUser(): Operaation tarkoitus on tarjota järjestelmän käyttäjälle lista henkilöistä, joista käyttäjä voi valita. Sen sijaan, että operaatio näyttäisi kaikki järjestelmään tallennetut henkilöt, käyttäjän on annettava hakuarvona merkkijono, joka ainakin osittain vastaa henkilön nimeä tai syntymäaikaa. Järjestelmä palauttaa vain niiden henkilöiden tiedot, jotka sopivat annettuun hakuarvoon.

Page 20: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus

Rajapintojen ja operaatioiden muokkaus:Edellisessä vaiheessa siis riittää, että tunnistetaan (eli nimetään) toimintalogiikkatason

rajapintaoperaatiot, mutta jos järjestelmätason operaatioihin on määritelty parametrit, myös ne kannattaa lisätä samalla kertaa tai sitten se tehdään seuraavaksi:

”Käyttäjän on annettava hakuarvona merkkijono, joka ainakin osittain vastaa henkilön nimeä tai syntymäaikaa”.

findPersonUserByPersonData (in match:string)

”Järjestelmä palauttaa vain niiden henkilöiden tiedot, jotka sopivat annettuun hakuarvoon”.

findPersonUserByPersonData (in match:string) :PersonUser[]

(lähde: olemassa oleva järjestelmä, vastuukaavio, mutu (tuntuma), käyttöliittymäprotot ym.)

+lastName : String+firstName : String+birthDate : Date+prevLastName : String+identityNum : String+pid : PersonID+userName : String+uid : UserID

«datatype»PersonUser

Page 21: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus

Rajapintojen ja operaatioiden muokkaus:Henkilö- ja käyttäjätiedot eri järjestelmissä, joten on mietittävä, miten tietojen haku jakautuu

toimintalogiikkarajapinnoille:

Henkilötietojen haku henkilötiedoista hakuparametrin perusteella ja osajoukon palautus tuntuu loogiselta vaihtoehdolta:

findPersonsByPersonData(in match:String) :PersonDetails[]

Käyttäjätiedoista haetaan ed. operaatiossa palautetuille henkilöille käyttäjätunnukset:

findPersonUsersByPid(in personID[]): UserDetails[]

Tietojen yhdistys järjestelmäkomponentissa ja palautus dialogitasolle.

+lastName : String+firstName : String+birthDate : Date+prevLastName : String+identityNum : String+pid : PersonID

«datatype»PersonDetails

+userName : String+uid : UserID+pid : PersonID

«datatype»UserDetails

Page 22: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus

+findUser()+getPersonUserDetails()+generateUsername()+setUserDetails()+getServerDetails()+...()

«interface»ICreateUser

ICreateUser::UserManagementSystemCreateUser (dialog) IPersonMgt::

PersonManagerIUserMGT::

UserManager

1.1:findPersonsByPersonData(match)

1.2:findPersonUsersByPid(personID[])

return (PersonDetails[])

return (UserDetails[])

return(PersonUser[])

Henkilön tiedot yhdistetäänkäyttäjätunnuksiin.

1:findPersonUsersByPersonData (match)

Page 23: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus:Inkrementaalinen suunnittelu

Inkrementaalinen suunnittelu: tavallisesti uusien operaatioiden ja käyttötapausten myötä vaatimukset operaatioiden parametreille muuttuvat (esitellään uusia parametreja, rakenteisten tietotyyppien tietosisällöt lisääntyvät jne.). On päätettävä tehdäänkö yleisiä, kaikille yhteisiä operaatio- ja tietotyyppimäärityksiä vai tehdäänkö samoihin tietoihin erilaisia näkymiä operaatioiden ja tietotyyppien avulla:

Esimerkkinä operaatiot:

findPersonUserByLastname(in lNamematch)

findPersonUserByBirthDate(in bDatematch)

findPersonUserByPersonalData(in lNamematch, in bDatematch)

findPersonUser(in lNamematch, in bDatematch, in userName)

Page 24: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus:Inkrementaalinen suunnittelu

Esimerkkinä tietotyypit:

findPersonUsersByPid(in personID[]): UserDetails[]

getPersonUserDetails(in personID): UserDetails

Pakkasessa: vain pieniä eroja kaikille yhteiset

Vuorovaikutusta tutkimalla löydetään operaatioita ja niiden vastuita tietojen käsittelyssä.

Muita suunnittelunäkökulmia ovat esimerkiksi kutsujen minimointi, sykliset riippuvuudet, operaatioiden ja rajapintojen normalisointi tai olemassa olevien suunnittelumallien käyttö.

Hyvä suunnitteluperiaate on se, että pyritään tekemään yksi asia kerrallaan.

+userName : String+personalUserName : Boolean = true+closedFrom : Date+uid : UserID+pid : PersonID

«datatype»UserDetails

{documentation = The data of one user}

+userName : String+uid : UserID+pid : PersonID

«datatype»UserDetails

Page 25: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus:Operaatioiden normalisointi

Määrittelyiden muokkaus:Mitä enemmän operaatioita käsitellään, sitä enemmän voidaan

tunnistaa yleisiä, eri toiminnoissa tarvittavia yhteisiä operaatioita, jotka voidaan sijoittaa rajapintoihin eri tavoin. Esim:

findPersonUserByPersonData (in match:string):PersonUser[]

1. Uusi toiminnallisuus uusi rajapinta, jossa operaatio on myös mukana: ei normalisointia

Luokäyttäjätunnus

Suljekäyttäjätunnus

<<comp spec>>UsernameManagementSystem

ICreateUser

ICloseUsername

Page 26: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus:Operaatioiden normalisointi

2. Uusi toiminnallisuus yhteinen operaatio määritellään omaan rajapintaansa:

Luokäyttäjätunnus

Suljekäyttäjätunnus

findPersonUserByPersonData (in match:string):PersonUser[]

<<comp spec>>UsernameManagementSystem

ICreateUser

ICloseUsername

IFindUser

Page 27: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien vuorovaikutus:Operaatioiden normalisointi

3. Uusi toiminnallisuus operaatiot ryhmitellään rajapinnoiksi esimerkiksi käyttöoikeuksien perusteella:

Luokäyttäjätunnus

Suljekäyttäjätunnus

<<comp spec>>UsernameManagementSystem

IGetUserData

ISetUserData

IFindUser

Page 28: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

3. Komponenttien määrittely

Kompo nenttim äärittelytja arkkitehtuuri

R ajap intamäärittelyt

Kompo nenttien m äärittelyT arkenna

rajap intamäärittelyt(Luo tietomalli)

M ääritteleo p eraatio id en es i-

ja jälk iehd o t

M äärittele rajap into jenvälis et rajo ituks et

Komp o nenttim äärittelyt ja arkkitehtuuriR ajap innat

+getServerUserGroupDetails(in sid : ServerId, out sugd[] : ServerUsergroupDetails[])

«interface»IUserGroupManagement

-sid : ServerId

Server-Name : String-Description : String-oid:OrganizationId-ugid : UserGroupId

User group

-Unix GId: int-Unix UidRange : String-sugId:ServerUsergroupId

Server's user group

1*

*1 1*

Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}

+getPersonUserDetails(in match : String, out pud[]: PersonUserDetails[]) : Integer+getUserDetails(in match : String, in userName : String, out ud[]:UserDetails[]) : Integer+getServers(out sd[]: ServerDetails[])+getServerUserGroups(in sid: ServerId, out sugd[]: ServerUsergroupDetails[]) : Integer+generateUserName(in name : String, out userName : String) : Integer+generateUnixUid(in unixUidRange : String, out unixUid : Integer) : Integer+setUserDetails(in pid: PersonId, in ud: UserDetails) : Integer+setAssociatedUserDeteils(in aud: AssociatedUserDetails) : Integer

«interface»ICreateUser

-User name : String-User type : Boolean-Description : String-uid:UserId-pid:PersonId

«core»User

-sid : ServerId

«core»Server

-Unix Uid : Integer-Valid Until : Date-Deactivated : Boolean-DeactivatedFrom : Date-Description : String-Created : Date-NotforPublicDir : Boolean-usId: UserServerId

«type»Associated Server

-Primary user group : Boolean-asugId:AssocServerUsergroupId

«type»Associated user group

-sugId:ServerUsergroupId

«type»Server's user group

1

*

1 *

1

*

*1

* 1

SharedData Types

<<import>> Käyttöliittymä/työpöytäkerros(Dialog layer)

Järjestelmäkerros(System layer)

CreateUser

Tietokanta

Toimintalogiikkakerros(Business layer)

1{frozen}

IPerson

IServerManagement

IUserGroupManagement

«uses»«uses»

«uses»

«uses»

UsernameManagementSystem

UserManager

ServerManager

UserGroupManager

Person Manager

IUserManagement1{frozen}

ICreateUser

1{frozen}

1{frozen}

Page 29: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien määrittely

Rajapintojen dokumentointi: Rajapintatietomallien luonti ja rajapintamääritysten kokoaminen.

Toimintalogiikkarajapintojen vastuukaavio kopioidaan jokaiselle rajapinnalle erikseen. Vastuukaavio sisältää valmiiksi kaikki järjestelmään kuuluvat tietotyypit, joten kunkin rajapinnan tietomalli tulee sisältämään ainakin osajoukon vastuukaavion tietotyypeistä.

Kunkin rajapinnan osalta käydään läpi operaatiomäärittelyihin sisältyvät rakenteiset ja ei-rakenteiset tietotyypit ja muokataan niiden perusteella tietomallin tietotyyppien attribuutteja – lähinnä poistetaan tarpeettomat attribuutit.

Tietomalli laajennetaan rajapintamäärittelyksi siten, että kuvauksen rajapintaan lisätään tunnistetut operaatiot ja operaatiosijoitukset (parametrit ja paluuarvot) sekä operaatioiden rakenteiset tietotyypit.

Page 30: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

-User name : String-User type : Boolean-Description : String-uid:UserId

User

-sid : ServerId

Server

-Unix Uid : Integer-Valid Until : Date-Deactivated : Boolean-DeactivatedFrom : Date-Description : String-Created : Date-NotforPublicDir : Boolean-usId: UserServerId

Associated Server

-Primary user group : Boolean-asugId:AssocServerUsergroupId

«type»Associated user group

-sugId:ServerUsergroupId

Server's user group

1

*

1 *

1

*

*1

* 1

«interface»ICreateUser

-pid : PersonID

Person

1 1

+FindPersonUsersByUserName(in userName : String) : PersonUser[]+FindPersonUsersByPersonData(in match : String) : PersonUser[]+getPersonUserDetails(in pid : PersonID, out personDetails : PersonDetails, out userDetails : UserDetails)+getAssociatedUserDetails(in uid : UserID) : AssociatedUserDetails+setPersonUserDetails(in userDetails : UserDetails) : UserDetails+setAssociatedUserDetails(in assUserdetails : AssociatedUserDetails) : AssociatedUserDetails+generateUsername(in name : String) : String+generateServerUid(in uidRange : String) : Integer+checkUsername(in username : String) : Boolean+getServers() : ServerDetails[]+getServerDetails(in sid : ServerID) : ServerDetails+getServerUsergroups(in sid : ServerID) : ServerUsergroup[]

«interface»ICreateUser

Datatypes

<< import >>

Komponenttien määrittelyEsimerkki: ICreateUser-järjestelmärajapinta

-User name : String-User type : Boolean-Description : String-uid:UserID-pid:PersonID

«core type»User

-Name : String-Description : String-Type (unix, muu)-Mailserver : Boolean-Deactivated from : Date-sid : ServerId

«core type»Server

-Name : String-Description : String-oid:organizationID-ugid : usergroupID

«core type»User group

-Unix Uid : Integer-Valid Until : Date-DeactivatedFrom : Date-Description : String-Created : Date-NotforPublicDir : Boolean-serverID-userID-usID: UserServerId

«type»Associated server(server username)

0..*1

-Primary user group : Boolean-asugID:AssServerUsergroupID-usID: userserverID-sugID:serverUsergroupID

«type»Associated user group

0..*

1

«interface»IUserManagement

«interface»IServerManagement

«interface»IUserGroupManagement

1

0..*

1*

1 0..*

1

0..* 1

0..*

-Unix GId: int-Unix UidRange : String-serverID-ugID:usergroupID-sugID:serverUsergroupId

«type»Server's user group

*1

1*

Vastuukaavio

findPersonUserByPersonData (in match:string):PersonUser[]getPersonDetails (in pid:PersonID, out PersonDetails, out UserDetails)generateUsername(in username:String):String

«datatype»

«datatype»+lastName : String+firstName : String+birthDate : Date+prevLastName : String+identityNum : String+pid : PersonID+userName : String+uid : UserID

«datatype»PersonUser

Page 31: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien määrittely

ICreateUser-rajapintaoperaatioiden tietotyypit:

+lastName : String+firstName : String+prevLastName : String+birthDate : Date+identityNum : String+organization : String+rightToStydy : String+train_program : String+validUntil : Date+pid

«datatype»PersonDetails

+userName : String+personalUserName : Boolean = true+closedFrom : Date+uid+pid

«datatype»UserDetails

«datatype»PersonUserDetails

1

+name : String+type : String+mailServer : Boolean+description : String+deactivatedFrom : Date+sid+serverUsergroups : serverUser...

«datatype»ServerDetails

+uid+serverName : String+serverType : String+mailServer : Boolean+sid+unixUid : Integer+validUntil : Date+created : Date+deactivatedFrom : Date+notForPublicDir : Boolean+audID+usergroups : assServerUserGroup

«datatype»AssociatedUserDetails

+primaryUsergroup : Boolean+asugID+audID+sugID

«datatype»assServerUserGroup

+serverUsergroupID : Integer+uidRange : String+sid : serverID+ugID : usergroupID+sugID : serverUsergroupID

«datatype»ServerUsergroupDetails

Datatypes

Page 32: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien määrittely

Operaatioiden esi- ja jälkiehtojen määrittelyEsi- ja jälkiehtojen avulla määritellään operaation käyttäytyminen ja

operaatiosuorituksen mahdollisesti aiheuttama tilamuutos.

Esiehto: ehto, jonka on oltava voimassa ennen kuin operaatiota voidaan suorittaa, esim. hakuparametri ”match” ei saa olla tyhjä ( muutoin virheilmoitus).

Jälkiehto: komponentin tila tai muu ehto, joka on voimassa kun operaatio on suoritettu (mikäli esiehto on ollut tosi).

Alku- ja loppuehtojen määrittely voidaan siirtää toteuksen yhteyteen.

Page 33: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien määrittely

Rajapintojen välisten rajoitusten määrittelyToiminta asettaa sovellukselle sääntöjä ja rajoituksia. Kuvataan esimerkiksi

• käsitteiden välisten yhteyksien lukumääräsuhteena (multiplicity)

• attribuutteina

Kaikkea ei voida kuvata graafisesti, vaan osa esitetään kuvauksissa invariantteina eli ehtoina, jotka ovat aina voimassa. Rajoitusten määrittelyssä tärkeä on miettiä sijoitus.

Esimerkkinä ehto ”Henkilön tiedot täytyy olla henkilötietojärjestelmässä ennen kuin tunnusta voidaan luoda”.

Jos sääntö sijoitetaan toimintalogiikkatasolle, se on voimassa kaikissa järjestelmissä, jotka käyttävät tätä henkilörajapintaa. Sen sijaan jos sääntö sijoitetaan järjestelmätasolle, rajoitus on voimassa vain tuotettavassa sovelluksessa.

Page 34: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien määrittely

Teknisen suunnittelun näkökulmia:• Parametrien välitys (tyyppi, laatu (in,out,inout,return) ja

viittaussäännöt)

• Virheiden- ja poikkeustenkäsittelymekanismit (filosofia)

• Rajapintojen periytyvyys ja rajapintatuki

• Rajapintojen ominaisuudet (properties)

• Ilmentyminen (olioiden, objects) luontimekanismit

• Tapahtumien aiheuttaminen/aikaansaaminen

• Toimitettavan komponentin rakeisuus

tehdään toteutuksen suunnittelun yhteydessä.

Page 35: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Komponenttien määrittely

Määrittelyjen kokoaminen komponenttien ja sovellusten toteuttajilleKomponenttiarkkitehtuurikuvaus: toteuttaja tunnistaa tarvittavat

komponentit sekä niiden väliset suhteet ja riippuvuudet.

Sekvenssikaavio(t): vuorovaikutus, toteuttaja tietää, mitä komponentin on tehtävä kun se vastaanottaa operaatiokutsun.

Rajapintamäärittely(t): 1. operaatiomäärittely (operaatiot parametreineen ja paluuarvoineen, esi- ja jälkiehdot, invariantit): operaatioiden käyttäytyminen ja vastuut tietojen välityksessä.

2. tietomalli: rajapinnan vastuut tietojen tallennuksessa ja hakemisessa.

3. rakenteiset tietotyypit: operaatioissa välitettävä tieto.

Page 36: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Menetelmän arviointiaMenetelmän sudenkuoppa: suunnitellaan liian tarkasti paperilla kannattaa muistaa: Määrittelyvaiheen tulokset ovat vasta määrittelyjä, joita joudutaan

todennäköisesti tarkentamaan vielä seuraavassa vaiheessa, kun suunnittelun tulokset sijoitetaan toteutusarkkitehtuuriin ja toteutustekniikoihin ja sitä kautta siirrytään varsinaiseen toteutukseen.

Suhteellisen helposti käyttöönotettavissa ja etenee suoraviivaisesti:- käsitemallin pohjalta alustava arkkitehtuuri sekä toimintalogiikarajapinnat- käyttötapausten pohjalta järjestelmärajapinnat ja vuorovaikutuksen määrittely Rakenne ja toiminnallisuus

Rajapintojen välisen vuorovaikutuksen määrittelyyn kehittämisideoita: apuna käyttöliittymäkuvaus, kuvautapana UML-sekvenssikaavio suoraviivaistaa työvaihetta.

Page 37: Pakkanen * * *  S ovellustuotannon menetelmäpilotti

Miten jatketaan

Kevään aikana:Menetelmän analysointi suhteessa koko sovelluskehitysprosessiin: tehtävien keskinäisten suhteiden sijoittuminen, esimerkiksi:

testaustietokantasuunnittelukäyttöliittymäsuunnittelu ja toteutus.

Menetelmäkuvaus: ”keittokirjaresepti” menetelmän soveltamisesta sovelluskehitysprojektissa.

Seuraavaksi:Suunnitelmien sijoitus toteutustekniikoihin ja tekniset ratkaisut demon avulla.

Kiitos!