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
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
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ä
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ä
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.
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.
+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}
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
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
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
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
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.
«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
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...
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);
Hakuoperaation palauttamaa: sukunimi, etunimi, henkilötunnus, käyttäjätunnus (jos on)
operaatioita
if else
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
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.
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*
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.
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
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
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)
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)
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
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
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
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
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}
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.
-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
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
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.
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.
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ä.
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.
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.
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!