46
Latvijas Universitāte Datorikas fakultāte Klašu un instanču diagrammu redaktora izstrāde, izmantojot rīku definēšanas platformu GrTP Kvalifikācijas darbs Autors: Matīss Rikters Studenta apliecības nr. Mr08089 Vadītāja: Dr.sc.comp. Lelde Lāce Rīga 2010

Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Embed Size (px)

Citation preview

Page 1: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Latvijas UniversitāteDatorikas fakultāte

Klašu un instanču diagrammu redaktora izstrāde, izmantojot rīku definēšanas platformu GrTP

Kvalifikācijas darbs

Autors: Matīss RiktersStudenta apliecības nr. Mr08089

Vadītāja: Dr.sc.comp. Lelde Lāce

Rīga 2010

Page 2: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

AnotācijaŠis kvalifikācijas darbs izstrādāts saistībā ar programmēšanas praksi Latvijas Universitātes Matemātikas un informātikas institūtā. Darba mērķis bija izstrādāt programmatūru, ar kuru ir ērti zīmēt un strādāt ar klašu un instanču diagrammām.Programmatūra ļauj lietotājam zīmēt diagrammas elementus, palīdz lietotājam, piedāvājot izvēlēties vērtības elementu laukos, kā arī pārbauda, vai dati, ko lietotājs ievadījis elementu laukos, ievadīti korektā formātā, un, vai pati diagramma sastādīta korekti.

Atslēgvārdi: klases, instances, diagrammas, metamodeļi, modelēšana

2

Page 3: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

AbstractThis qualification work was developed in association with programming practice in the Institute of Mathematics and Computer Sciences, University of Latvia. The objective of this work was to develop an easy to use program for drawing and working with class and instance diagrams. The program allows the user to draw the diagram elements, offers input values for the diagram elements, and also checks whether the values that the user has input are in the correct format and whether the diagram itself is composed correctly.

Keywords: classes, instances, diagrams, metamodels, modeling

3

Page 4: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Saturs Anotācija.......................................................................................................................2 Abstract.........................................................................................................................31. Ievads.........................................................................................................................62. Programmatūras prasību specifikācija.......................................................................7

2.1. Ievads..................................................................................................................72.1.1. Dokumenta nolūks........................................................................................72.1.2. Darbības sfēra...............................................................................................72.1.3. Definīcijas, akronīmi un saīsinājumi............................................................72.1.4. Saistība ar citiem dokumentiem...................................................................72.1.5. Pārskats.........................................................................................................7

2.2. Produkta perspektīva...........................................................................................72.3. Produkta funkcijas...............................................................................................72.4. Datu plūsmu diagrammas....................................................................................8

2.4.1. 0. līmenis......................................................................................................82.4.2. 1. līmenis......................................................................................................82.4.3. Klašu un instanču zīmēšana.........................................................................82.4.4. Vērtību priekšāteikšana................................................................................92.4.5. Diagrammas pārbaudes................................................................................9

2.5. Konkrētās prasības............................................................................................102.5.1. Funkcionālās prasības................................................................................102.5.2. Ārējās saskarnes prasības...........................................................................142.5.3. Veiktspējas prasības...................................................................................14

3. Programmatūras projektējuma apraksts...................................................................153.1. Ievads................................................................................................................15

3.1.1. Dokumenta nolūks......................................................................................153.1.2. Darbības sfēra.............................................................................................153.1.3. Definīcijas, akronīmi un saīsinājumi..........................................................153.1.4. Saistība ar citiem dokumentiem.................................................................15

3.2. Datu kodēšana...................................................................................................163.3. Saskarnes projektējums.....................................................................................17

3.3.1. Diagrammu saskarne..................................................................................173.3.1. Diagrammas zīmēšanas saskarne...............................................................18

3.4. Detalizētais projektējums..................................................................................183.4.1. Moduļu detalizētais projektējums..............................................................18

3.5. Algoritmu projektējums....................................................................................213.5.1. Visu atribūtu salikšana...............................................................................223.5.2. Vispārināšanas ciklu pārbaude...................................................................223.5.3. Saites lomu piedāvāšana.............................................................................22

4. Testēšanas dokumentācija........................................................................................244.1. Ievads................................................................................................................244.2. Testpiemēru žurnāls..........................................................................................24

4.2.1. Instancei klases vārda piedāvāšana............................................................244.2.2. Instances vārda ģenerēšana........................................................................244.2.3. Instances atribūtu priekšāteikšana..............................................................244.2.4. Saites lomu piedāvāšana ............................................................................254.2.5. Vispārināšanas ciklu pārbaude ..................................................................254.2.6. Klases atribūtu pārbaude ...........................................................................264.2.7. Klases asociāciju pārbaude ........................................................................264.2.8. Instances atribūtu pārbaude .......................................................................27

4

Page 5: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

4.2.9. Viss kopā ...................................................................................................275. Projekta organizācija................................................................................................296. Kvalitātes nodrošināšana..........................................................................................307. Darbietilpības novērtējums......................................................................................318. Rezultāti...................................................................................................................339. Secinājumi................................................................................................................3410. Izmantotā literatūra...............................................................................................3511. Pielikums................................................................................................................36

11.1. Programmatūras kods......................................................................................36

5

Page 6: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

1. IevadsMūsdienu pasaulē ir daudz dažādu programmu, ar kurām var ātri un vienkārši uzzīmēt jebkāda veida diagrammas un ērtā veidā parādīt tās citiem. Tomēr tās ir reizēm ļoti dārgas, kā, piemēram, Microsoft Visio, un gandrīz neviena nepiedāvā lietotājam datus, ko ievadīt diagrammas laukos un nepārbauda, vai diagramma sastādīta pareizi. Šī projekta mērķis bija atvieglot konkrēti klašu un instanču diagrammu zīmēšanu un papildināt to arī lietotājam lietderīgām funkcijām, kā, piemēram, dažādu vērtību priekšāteikšanu un lietotāja ievadīto datu pārbaudi.Projektu turpmākā izstrādē ir paredzēts apvienot ar OCL izteiksmju redaktoru, iegūstot pilnīgu sistēmu klašu diagrammu un OCL apgalvojumu veidošanai.

6

Page 7: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

2. Programmatūras prasību specifikācija2.1. Ievads2.1.1. Dokumenta nolūksŠis dokuments ir klašu un instanču diagrammu redaktora programmatūras prasību specifikācija (PPS). Šis dokuments ir paredzēts programmatūras pasūtītājiem, lai varētu precīzi noformulēt nepieciešamās prasības pret programmu, un programmas izstrādātājiem. Dokumentā ir aprakstītas topošās sistēmas prasības, pēc kurām notiks sistēmas izstrāde. Gatavajā produktā būs realizētas visas dokumentā minētās prasības.

2.1.2. Darbības sfēraKlašu un instanču diagrammu redaktors ļaus vienkārši un ērti izveidot un strādāt ar sistēmu konceptuālajiem modeļiem. Ar konceptuālo modeļu palīdzību ir iespējams izpētīt kādas sistēmas vai organizācijas pamatkonceptus un attiecības starp tiem.

2.1.3. Definīcijas, akronīmi un saīsinājumi• Lietotājs – persona vai personas, kas lieto programmu noteikta uzdevuma

veikšanai;• Sistēma – Klašu un instanču diagrammu redaktors.

2.1.4. Saistība ar citiem dokumentiemDokuments tika veidots pēc LVS 68:1996 „Programmatūras prasību specifikācijas ceļvedis”. Šis ir standarts rakstīšanā: apraksta nepieciešamo, kas jāraksta, raksturiezīmes un struktūru.

2.1.5. PārskatsDokuments sastāv no 5 nodaļām:

• pirmajā nodaļa apraksta šo dokumentu un tā mērķi;• otrajā nodaļā tiek dots ieskats, par vispārējo produkta struktūru, uzskaitītas

funkcijas un vispārējie ierobežojumi, lietotāju raksturiezīmes, un atkarības, kur tiks minētas visas lietas, kas iespaido izstrādes gaitu.

• trešā nodaļā satur detalizētu informāciju par programmatūras prasībām, kas nepieciešamas, lai veidotu projektējumu;

• ceturtā nodaļā noformulētas ārējās saskarnes prasības;• piektajā nodaļā aprakstītas nefunkcionālās prasības pret izstrādājamo

produktu.

2.2. Produkta perspektīvaŠis produkts var tikt lietots kā patstāvīga sistēma, kas tiks ieviesta sistēmu modelētāja praksē, ar mērķi atvieglot modelētāja darbu. Produktu turpmākā izstrādē ir paredzēts apvienot ar OCL redaktoru, iegūstot pilnīgu sistēmu klašu diagrammu un OCL apgalvojumu veidošanai.

2.3. Produkta funkcijas• Klašu un instanču diagrammu zīmēšana• Vērtību izrēķināšana un priekšāteikšana

o Instancei klases vārda piedāvāšanao Instances vārda ģenerēšanao Instances atribūtu priekšāteikšana

7

Page 8: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

o Saites lomu piedāvāšana• Diagrammas pārbaudes

o Vispārināšanas ciklu pārbaudeo Klases atribūtu pārbaudeo Klases asociāciju pārbaudeo Instances atribūtu pārbaude

2.4. Datu plūsmu diagrammas2.4.1. 0. līmenis

Lietotājs

Klašu un instanču diagrammu redaktors

diagramma paziņojums

2.4.2. 1. līmenis

Lietotājs

Klašu un instanču diagrammu zīmēšana

Vērtību priekšāteikšana

Diagrammas pārbaudes

Diagramma

Vērtību saraksts paziņojumi

Diagramma

Diagramma

2.4.3. Klašu un instanču zīmēšana

Lietotājs

Klašu un instanču diagrammas zīmēšana

Diagramma

8

Page 9: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

2.4.4. Vērtību priekšāteikšana

Lietotājs

Klašu un instanču zīmēšana

diagramma

Vērtību priekšāteikšana

Diagramma Vērtību saraksts

Saites lomu piedāvāšana

Instances vārda ģenerēšana

Instances atribūtu priekšāteikšana

Instancei klases vārda piedāvāšana

Lomu vārdi

Instances starpkurām velk saiti

Klasesvārds

Instancesvārds Klases

vārds

Instancesatribūti

Klašu vārdi

Klašu vārdi

2.4.5. Diagrammas pārbaudes

Lietotājs

Klašu un instanču zīmēšana

diagramma

Diagrammas pārbaudes

Diagramma Paziņojums

Vispārināšanas ciklu pārbaude

Klases asociāciju pārbaude

Instances atribūtu pārbaude

Klases atribūtu pārbaude

Paziņojums

Klašu diagramma

Klašuasociācijas Paziņojums

Klašu un instanču atribūti

Paziņojums

Klašu atribūti

Paziņojums

9

Page 10: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

2.5. Konkrētās prasības2.5.1. Funkcionālās prasības

2.5.1.1. Klašu un instanču diagrammu zīmēšanaMērķis:Funkcijas mērķis ir nodrošināt iespēju uzzīmēt pilnvērtīgu klašu un instanču diagrammu.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. Klasei:• Vārds;• Atribūti formā „atribūta vārds:tips”;2. Instancei:• Klases vārds no izvēlnes• Instances atribūti formā „atribūta nosaukums = vērtība”;3. Asociācijai:• Lomu vārdi;• Kardinalitātes;4. Saitei:• Lomu vārdi.Apstrāde:Pēc datu ievadīšanas, tiek izsaukta funkcija diagrammas pārbaudei, kas pārbauda, vai diagramma sastādīta korekti un, kļūdas gadījumā, atgriež kļūdas paziņojumu kļūdas laukā. Izvaddati:Pēc sekmīgas datu ievadīšanas diagrammā nekas nemainās. Ja dati bijuši ievadīti kļūdaini, kļūdainais diagrammas elements tiek iekrāsots sarkanā krāsā.Kļūdu paziņojumi:Nav paredzēti.

2.5.1.2. Vērtību priekšāteikšana2.5.1.2.1. Instancei klases vārda piedāvāšanaMērķis:Funkcijas mērķis ir piedāvāt visus diagrammā iesaistīto klašu vārdus.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma.Apstrāde:Funkcija ievāc visu klašu vārdus un atgriež tos sarakstā, no kura lietotājs var vienu izvēlēties.Izvaddati:Funkcija saliek visu klašu vārdus instances laukā „Klases vārds” nolaižamajā sarakstā.Kļūdu paziņojumi:Nav paredzēti.

2.5.1.2.2. Instances vārda ģenerēšanaMērķis:Funkcijas mērķis ir ģenerēt unikālu vārdu instancei visas diagrammas

10

Page 11: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

kontekstā, kad lietotājs izvēlējies atbilstošo klasi.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma.Apstrāde:Funkcija paņem pirmos trīs burtus no klases vārda, klases numuru un instances numuru un konkatenē tos, izveidojot instances vārdu.Izvaddati:Pēc instances datu loga aizvēršanas, diagrammā konkrētajai instancei tiek ierakstīts vārds.Kļūdu paziņojumi:Nav paredzēti.

2.5.1.2.3. Instances atribūtu priekšāteikšanaMērķis:Funkcijas mērķis ir piedāvāt atribūtu vārdus instancei, kad ir izvēlēta attiecīgā klase.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma.Apstrāde:Funkcija paņem izvēlētās klases un tās virsklašu atribūtu vārdus, pieliek katram galā „ = ” un ieliek tos instances atribūtu laukā.Izvaddati:Pēc klases izvēlēšanās, instances atribūtu laukā tiek ierakstīti atribūtu vārdi.Kļūdu paziņojumi:Nav paredzēti.

2.5.1.2.4. Saites lomu piedāvāšanaMērķis:Funkcijas mērķis ir piedāvāt lomas saitei atkarībā no instancēm, kuras saite savieno.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma;2. instanču diagramma.Apstrāde:Funkcija paskatās, kādas klases ir izvēlētas saites abos galos esošajās instancēs un atgriež tikai lomu vārdus, kuri ir derīgi abu instanču savienošanai.Izvaddati:Pēc saites novikšanas, ievadlaukos „Loma 1” un „Loma 2” tiek ielikti nolaižamie saraksti ar visu derīgo lomu vārdiem. Izvēloties vienu lomu, otra loma tiek piekārtota automātiski, skatoties uz asociācijas lomu.Kļūdu paziņojumi:Nav paredzēti.

11

Page 12: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

2.5.1.3. Diagrammas pārbaudes2.5.1.3.1. Vispārināšanas ciklu pārbaude Mērķis:Funkcijas mērķis ir pārbaudīt, vai vispārināšanas attiecība diagrammā neveido ciklus.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma.Apstrāde:Veicot vispārināšanas ciklu pārbaudi, tiek veiktas šādas darbības:1. sistēma pārbauda, vai kāda no klasēm nesanāk pati sev

apakšklase. Izvaddati:Pēc sekmīgas vispārināšanas ciklu pārbaudes diagrammā nekas netiek izmainīts. Ja iepriekš bijušas atrastas ciklošanās un vairs to nav, klases un vispārināšanas atgriežas sākotnējās krāsās un tiek nodzēsts kļūdas lauks.Kļūdu paziņojumi:1. Ja diagrammā atrasta ciklošanās, ciklā iesaistītās klases tiek

iekrāsotas sarkanā krāsā.2. Klases un vispārināšanas laukā „Kļūda” parādās teksts ar kļūdas

paziņojumu: „Klase ir iesaistīta vispārināšanas ciklā!”.

2.5.1.3.2. Klases atribūtu pārbaudeMērķis:Funkcijas mērķis ir pārbaudīt, vai klasē ierakstītie atribūti atbilst formātam „atribūta_vārds:atribūta_tips”, un, vai visi klases un mantoto atribūtu vārdi ir unikāli.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma.Apstrāde:Ja vispārināšanas ciklu pārbaude nav atradusi vispārināšanu ciklošanos diagrammā, veicot klases atribūtu pārbaudi, tiek veiktas šādas darbības:1. sistēma pārbauda, vai katra atribūta vidū ir simbols „:”;2. sistēma pārbauda, vai klasē un tās mantotajās klasēs neatkārtojas

neviens atribūta vārds.Izvaddati:Pēc sekmīgas klases atribūtu pārbaudes diagrammā nekas netiek izmainīts. Ja iepriekš bijušas atrastas kļūdas un vairs to nav, klases atgriežas sākotnējās krāsās un tiek nodzēsts kļūdas lauks.Kļūdu paziņojumi:

1. Ja klases atribūtos atrastas kļūdas, konkrētā klase tiek iekrāsota sarkanā krāsā.2. Klases laukā „Kļūda” parādās teksts ar vienu no kļūdas paziņojumiem:

12

Page 13: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

• „Nepareizi ievadīti atribūti!”;• „Atribūtu vārdi atkārtojas!”.

2.5.1.3.3. Klases asociāciju pārbaudeMērķis:Funkcijas mērķis ir pārbaudīt, vai ir ievadītas abas lomas un abas kardinalitātes, un, vai lomu vārdi neatkārtojas vienas klases un tās mantoto klašu ietvaros.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma.Apstrāde:Veicot klases asociāciju pārbaudi, tiek veiktas šādas darbības:1. sistēma pārbauda, vai lomu un kardinalitāšu nosaukums nav

tukšums;2. sistēma ievāc vienas klases mantotās asociācijas un pārbauda, vai

lomu vārdi tajās neatkārtojas.Izvaddati:Pēc sekmīgas klases asociāciju pārbaudes diagrammā nekas netiek izmainīts. Ja iepriekš bijušas atrastas kļūdas un vairs to nav, asociācijas atgriežas sākotnējās krāsās un tiek nodzēsts kļūdas lauks.Kļūdu paziņojumi:1. Ja klases asociācijās atrastas kļūdas, konkrētā asociācija tiek

iekrāsota sarkanā krāsā.2. Asociācijas laukā „Kļūda” parādās teksts ar kādu no kļūdas

paziņojumiem::• „Lomu nosaukumi sakrīt!”;• „Ievadi pirmo lomu!”; • „Ievadi otro lomu!”; • „Ievadi pirmo kardinalitāti!”; • „Ievadi otro kardinalitāti!”.

3. Klases laukā „Kļūda” parādās teksts ar kļūdas paziņojumu:• „Asociāciju lomu vārdi sakrīt!”.

2.5.1.3.4. Instances atribūtu pārbaudeMērķis:Funkcijas mērķis ir pārbaudīt, vai instancē ierakstītie atribūti atbilst formātam „atribūta_vārds = atribūta_vērtība”, vai visi atribūti sakrīt ar attiecīgās klases atribūtiem, un, vai katrā atribūtā ir ievadīti dati ar tipu, kāds norādīts klasē.Ievaddati:Nepieciešams nodrošināt iespēju ievadīt šādu informāciju:1. klašu diagramma;2. instanču diagramma.Apstrāde:Veicot instances atribūtu pārbaudi, tiek veiktas šādas darbības:1. sistēma pārbauda, vai katra atribūta vidū ir „ = ”;

13

Page 14: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

2. sistēma pārbauda, vai atribūtu vārdi instancē ir tādi paši, kā attiecīgajā klasē;

3. sistēma pārbauda, vai konkrētais atribūts atbilst tipam, kas norādīts attiecīgajā klasē. Tiek pārbaudīti tipi integer un boolean.

Izvaddati:Pēc sekmīgas instances atribūtu pārbaudes diagrammā nekas netiek izmainīts. Ja iepriekš bijušas atrastas kļūdas un vairs to nav, instances atgriežas sākotnējās krāsās un tiek nodzēsts kļūdas lauks.Kļūdu paziņojumi:1. Ja instances atribūtos atrastas kļūdas, konkrētā instance tiek

iekrāsota sarkanā krāsā.2. Instances laukā „Kļūda” parādās teksts ar kļūdas paziņojumu:

• „Nepareizi ievadīti atribūti!”.

2.5.2. Ārējās saskarnes prasības2.5.2.1. Lietotāja saskarneMinimālās lietotāja saskarnes prasības ērtai programmatūras darbībai:

• lietotāja saskarnei ir jābūt latviešu valodā;• paletes elementiem jāatbilst veidojamo elementu izskatam;• programmai, konstatējot kļūdu ievaddatu apstrādē, kļūdas laukā jāizvada

paziņojums, kas to apraksta, un jāiekrāso kļūdainais elements sarkanā krāsā;• pēc kļūdas labošanas, kļūdas paziņojumam jābūt izdzēstam un elementa krāsai

jāatgriežas sākotnējā.

2.5.2.2. Aparatūras saskarneMinimālās aparatūras prasības stabilai programmatūras darbībai:• procesors Pentium 233 MHz (ieteicams: Pentium 500 MHz vai vairāk);• RAM 64Mb (ieteicams: RAM 128 MB vai vairāk);• video adapteris un monitors ar Super VGA (800 x 600) vai augstāku izšķirtspēju;• tastatūra un pele.

2.5.2.3. Programmatūras saskarneMinimālās programmatūras prasības stabilai programmatūras darbībai:

• datorā jābūt uzstādītai MS Windows 2000, MS Windows XP, MS Windows Vista vai MS Windows 7 operētājsistēmai.

2.5.3. Veiktspējas prasībasStatiskās prasības:

• programmai jāatbalsta tikai viens lietotājs vienlaicīgi.Dinamiskās prasības:

• izmantojot datoru ar minimālajām aparatūras prasībām, visām diagrammu pārbaudēm jānotiek ātrāk par piecām sekundēm.

14

Page 15: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

3. Programmatūras projektējuma apraksts3.1. Ievads3.1.1. Dokumenta nolūksŠis dokuments ir klašu un instanču diagrammu redaktora programmatūras projektējuma apraksts (PPA). Dokumentā ir aprakstīts, kā tiks realizēta programmatūras prasību specifikācijā aprakstītā funkcionalitāte. Dokuments ir domāts, lai atvieglotu programmētāju darbu.

3.1.2. Darbības sfēraKlašu un instanču diagrammu redaktors ļaus vienkārši un ērti izveidot un strādāt ar sistēmu konceptuālajiem modeļiem. Ar konceptuālo modeļu palīdzību ir iespējams izpētīt kādas sistēmas vai organizācijas pamatkonceptus un attiecības starp tiem.

3.1.3. Definīcijas, akronīmi un saīsinājumi• Lietotājs – persona vai personas, kas lieto programmu noteikta uzdevuma

veikšanai;• Sistēma – Klašu un instanču diagrammu redaktors.

3.1.4. Saistība ar citiem dokumentiem• “Klašu un instanču diagrammu redaktora” programmatūras projektējuma

apraksta pamatā ir “Klašu un instanču diagrammu redaktora” programmatūras prasību specifikācija, uz kuru balstoties tika sastādīts detalizēts projektējums.

• Dokuments tika veidots pēc LVS 72:1996 „Ieteicamā prakse programmatūras projektējuma aprakstīšanai” standarta prasībām.

15

Page 16: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

3.2. Datu kodēšanaRīki definēšanas platformā GrTP, dati par diagrammu elementiem un konkrētām diagrammām tiek glabāti dotā metamodeļa instanču formā. Metamodeļa labās puses instances atbilst konkrētajam diagrammu tipam, dotajā gadījumā klašu diagrammai, kas sastāv no klasēm, asociācijām utt. Metamodeļa kreisās puses instances atbilst lietotāja izveidotajām diagrammām. Doto informāciju kā datus izmanto transformācijas.

NodeType

ActiveDgrCmd

Element

Edge

OkCmd(NewElement ir OK)

GraphDiagram caption: String

Compartment value: String

ElemTypeid: Stringcaption: String

Node EdgeType

GraphDiagramTypeid: Stringcaption: StringlayoutMode: IntegerlayoutAlgorithm: IntegerbkgColor: Integer

Box

PaletteElementid: Stringcaption: Stringpicture: Stringnr: Integer

Line

Palette

CompartTypeid: Stringcaption: String

ElemStyle

CompartStyle

ActiveElementCmd

1

*

0..1

*

1

childparent *parentType childType * *

0..1

*

1

eEnd

end

*

1

eStart

start

*

1

*

1

start

*

1end

*

1

*

*

1

supertypesubtype 0..1 *

0..1

*

*

0..1

*

target

source

*

0..1

source

target

0..1

0..1

*

1

*

1

1

*

0..1

1..*

*

1

*

Attēls 1 Metamodelis

Specifikāciju diagramma ļauj definēt metamodeļa labās puses instances - diagrammu tipu informāciju. Pēc diagrammas tipu nodefinēšanas platforma automātiski ļauj veidot attiecīgā tipa diagrammas un to elementus. Ja diagrammām ir nepieciešama kāda papildus funkcionalitāte, tad ir jāraksta papildus funkcijas. Katram diagrammas elementam, piemēram, klasei, ir iespējams konkrētām lietotāja darbībām piekārtot šos funkciju izsaukumus. Specifikāciju diagrammā attēlotie elementi ir:

• Klaseo Redzamie lauki:

Vārds; Atribūti; Kļūda;

o Slēptie lauki: Visi atribūti – pašas klases un mantotie atribūti; Visas asociācijas – pašas klases un mantotās asociācijas; Skaits – instanču skaits šai klasei; Numurs – klases numurs; Stils – klases stils – kļūda (sarkans) vai klase (normāls);

• Instanceo Redzamie lauki:

Klases vārds; Instances atribūti; Kļūda;

16

Page 17: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

o Slēptie lauki: Instances vārds – uzģenerētais instances vārds; Stils – instances stils – kļūda (sarkans) vai instance (normāls);

• Saite o Redzamie lauki:

Loma 1; Loma 2;

• Asociācija o Redzamie lauki:

Loma 1; Loma 2; Kardinalitāte 1; Kardinalitāte 2; Kļūda;

o Slēptie lauki: Stils – asociācijas stils – kļūda (sarkans) vai asociācija

(normāls);• Vispārināšana

o Slēptie lauki: Stils – vispārināšanas stils – kļūda (sarkans) vai vispārināšana

(normāls);• klskait – slēpts elements, kurā tiks glabāts diagrammas klašu skaits.

Attēls 2 Specifikāciju diagramma

3.3. Saskarnes projektējums3.3.1. Diagrammu saskarne

17

Page 18: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Diagrammu saskarnē redzamas visas projektā esošās klašu un instanču diagrammas. Jaunu diagrammu iespējams izveidot, piespiežot gaiši zilo ovālo paletes elementu „Diagramma” kreisajā pusē, un, ieklikšķinot laukumā pie citām diagrammām.

Attēls 3 Diagrammas

3.3.1. Diagrammas zīmēšanas saskarneDiagrammas zīmēšanas saskarnē redzams konkrētas diagrammas projektējums. Jaunas klases, instances, vispārināšanas un asociācijas / saites var izveidot, spiežot uz attiecīgajiem paletes elementiem kreisajā pusē un pēc tam diagrammas laukumā.

Attēls 4 Diagramma

3.4. Detalizētais projektējums3.4.1. Moduļu detalizētais projektējums

3.4.1.1. Instancei klases vārda piedāvāšanaModuļa metodes:

18

Page 19: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Nosaukums klases_varda_piedavasanaApraksts Tiek izsaukta, kad atver instances ievaddatu logu. Ievāc sarakstu ar visu klašu

vārdiem, un piedāvā to instancei. Ievaddati Diagrammas visu klašu vārdi. Izvaddati Saraksts ar klašu vārdiem.

3.4.1.1. Instances vārda ģenerēšanaModuļa metodes:

Nosaukums klasu_skaititajsApraksts Tiek izsaukta, kad izveido jaunu diagrammu. Uztur klašu numerāciju. Ievaddati Nav paredzēti. Izvaddati Nav paredzēti.

Nosaukums klases_numursApraksts Tiek izsaukta, kad izveido jaunu klasi. Piešķir klasei numuru un atjaunina klašu

skaitītāju Ievaddati Aktīvā klase. Izvaddati Klases numurs.

Nosaukums varda_generesanaApraksts Tiek izsaukta, kad aizver tikko izveidotas instances ievaddatu logu. Ģenerē

instances vārdu, saliekot kopā pirmos trīs burtus no klases vārda, klases numuru, instances numuru.

Ievaddati Klases vārds. Izvaddati Instances vārds.

3.4.1.1. Instances atribūtu priekšāteikšana Moduļa metodes:

Nosaukums instances_atributu_piedavasanaApraksts Tiek izsaukta, kad instances ievaddatu logā izvēlas klasi. Instances atribūtu laukā

ieraksta izvēlētās klases un tās virsklašu atribūtu vārdus. Ievaddati Klases vārds.Izvaddati Instances atribūtu vārdi.

3.4.1.1. Saites lomu piedāvāšana Moduļa metodes:

Nosaukums saites_lomu_piedavasana1Apraksts Tiek izsaukta, kad saitei atver ievaddatu logu. Ievāc sarakstu ar derīgiem viena

gala lomu vārdiem un piedāvā tos saitei.(Blokshēma - Attēls 7 Saites lomu piedāvāšana)

Ievaddati Nav paredzēti. Izvaddati String result – saraksts ar lomu vārdiem.

Nosaukums saites_lomu_piedavasana2Apraksts Tiek izsaukta, kad saitei atver ievaddatu logu. Ievāc sarakstu ar derīgiem otra gala

lomu vārdiem un piedāvā tos saitei. (Blokshēma - Attēls 7 Saites lomu piedāvāšana)

Ievaddati Nav paredzēti. Izvaddati String result – saraksts ar lomu vārdiem.

19

Page 20: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Nosaukums otras_saites_piedavasana1Apraksts Tiek izsaukta, kad izvēlas saites pirmo lomu. Piedāvā izvēlēties saites otro lomu

tādu, kāda ir attiecīgajā asociācijā, ar pirmo lomu.Ievaddati Pirmās lomas vārds.Izvaddati Otrās lomas vārds.

Nosaukums otras_saites_piedavasana2Apraksts Tiek izsaukta, kad izvēlas saites otro lomu. Piedāvā izvēlēties saites pirmo lomu

tādu, kāda ir attiecīgajā asociācijā, ar otro lomu.Ievaddati Otrās lomas vārds.Izvaddati Pirmās lomas vārds.

3.4.1.1. Vispārināšanas ciklu pārbaude Moduļa metodes:

Nosaukums visp_parbaudeApraksts Tiek izsaukta, kad aizver klases, asociācijas ievaddatu logu, izdzēš klasi,

asociāciju, maina asociācijas, vispārināšanas galos esošās klases, izveido vai izdzēš vispārināšanu. Apstaigā visas klases un izsauc metodi visp ar katru klases vārdu. Ja metode visp atgriež „true”, iekrāso klasi un ieraksta kļūdas paziņojumu.(Blokshēma - Attēls 6 Vispārināšanas ciklu pārbaude)

Ievaddati Nav paredzēti. Izvaddati String rezultats – ciklošanās pārbaudes rezultāts, kas atgriež „1”, ja diagrammā

klases ieciklojas, citādi neatgriež neko.

Nosaukums vispApraksts Tiek izsaukta metodes visp_parbaude ietvaros. Pārbauda, vai diagrammā klase ar

vārdu sakumklase nav klases parbaudamaklase apakšklase. (Blokshēma - Attēls 6 Vispārināšanas ciklu pārbaude)

Ievaddati String sakumaklase, String parbaudamaklase – klašu vārdi, kurām pārbauda ciklošanos.

Izvaddati String rez – rezultāts, kas ir „true”, ja klases iesaistītas ciklā.

3.4.1.1. Klases atribūtu pārbaude Moduļa metodes:

Nosaukums visu_atributu_saliksanaApraksts Tiek izsaukta pēc vispārināšanas ciklu pārbaudes, ja diagrammā ar vispārināšanas

attiecību nav veidojušies cikli. Saliek visām klasēm visus atribūtus, arī mantotos, paslēptā laukā.(Blokshēma - Attēls 5 Visu atribūtu salikšana)

Ievaddati Mantoto klašu atribūti.Izvaddati Klases visi atribūti.

Nosaukums klases_atributu_parbaudeApraksts Tiek izsaukta pēc metodes visu_atributu_saliksana, ja diagrammā ar

vispārināšanas attiecību nav veidojušies cikli. Apstaigā visas klases un pārbauda, vai atribūti ievadīti sintaksē „Atribūta vārds : Atribūta tips”.

Ievaddati Nav paredzēti. Izvaddati Nav paredzēti.

20

Page 21: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Nosaukums atributu_vardu_parbaudeApraksts Tiek izsaukta pēc metodes klases_atributu_parbaude, ja diagrammā ar

vispārināšanas attiecību nav veidojušies cikli. Apstaigā visas klases un izsauc tām metodes avp un asvp, pārbaudot gan atribūtu, gan asociāciju vārdus.

Ievaddati Nav paredzēti. Izvaddati Nav paredzēti.

Nosaukums avpApraksts Tiek izsaukta metodes atributu_vardu_prbaude ietvaros. Pārbauda, vai visiem

klases atribūtiem ir unikāli vārdi.Ievaddati String klase – klases vārds, kurai pārbauda atribūtus.Izvaddati Nav paredzēti.

3.4.1.1. Klases asociāciju pārbaude

Moduļa metodes:

Nosaukums visu_asociaciju_saliksanaApraksts Tiek izsaukta pēc vispārināšanas ciklu pārbaudes, ja diagrammā ar vispārināšanas

attiecību nav veidojušies cikli. Saliek visām klasēm visas asociācijas, arī mantotās, paslēptā laukā.

Ievaddati Klases mantotās asociācijas.Izvaddati Klases visas asociācijas.

Nosaukums asvpApraksts Tiek izsaukta metodes atributu_vardu_prbaude ietvaros. Pārbauda, vai visām

asociācijām ir unikāli lomu vārdi.Ievaddati String klase – klases vārds, kurai pārbauda asociāciju lomu vārdus.Izvaddati Nav paredzēti.

Nosaukums klases_asociaciju_parbaudeApraksts Tiek izsaukta pēc metodes visu_asociaciju_saliksana, ja diagrammā ar

vispārināšanas attiecību nav veidojušies cikli. Apstaigā visas asociācijas un pārbauda, vai ir ievadīti lomu vārdi, kardinalitātes, un, vai lomu vārdi nesakrīt.

Ievaddati Nav paredzēti. Izvaddati Nav paredzēti.

3.4.1.1. Instances atribūtu pārbaude

Moduļa metodes:

Nosaukums instances_atributu_parbaudeApraksts Tiek izsaukta, kad aizver klases, instances ievaddatu logu, izdzēš klasi, izveido vai

izdzēš vispārināšanu, ja diagrammā ar vispārināšanas attiecību nav veidojušies cikli. Pārbauda, instances atribūti atbilst tipam, kāds norādīts attiecīgās klases atribūtos.

Ievaddati Nav paredzēti. Izvaddati Nav paredzēti.

3.5. Algoritmu projektējumsŠajā sadaļā ir aprakstīts algoritmu projektējums blokshēmu veidā.

21

Page 22: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

3.5.1. Visu atribūtu salikšana

Attēls 6 Visu atribūtu salikšana

3.5.2. Vispārināšanas ciklu pārbaude

Attēls 7 Vispārināšanas ciklu pārbaude3.5.3. Saites lomu piedāvāšana

22

Page 23: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Attēls 8 Saites lomu piedāvāšana

23

Page 24: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

4. Testēšanas dokumentācija4.1. IevadsŠajā dokumentā tiek parādīti izstrādātā projekta vienībtestēšanas rezultāti. Testēšana tika veikta katram modulim un tā metodēm atsevišķi ievadot dažādus datus, tajos iekļaujot iespējamās kļūdu situācijas. Tika veikts arī tests, kas pārbauda visu moduļu kopēju sadarbību.

4.2. Testpiemēru žurnāls4.2.1. Instancei klases vārda piedāvāšanaTesta apraksts Šajā testā tiek pārbaudīts, vai instancei tiek piedāvāts

saraksts ar visu diagrammā iesaistīto klašu vārdiem. Tiks izveidota viena instance, kurai izvēlēties klases vārdu no saraksta.

Ievaddati Trīs klases ar vārdiem aa, bb un cc, instance.Attēls

Sagaidāmais rezultāts Instancei pie klases vārda jāpiedāvā saraksts ar visu klašu vārdiem: aa, bb, cc

Rezultāts Veiksmīgs

4.2.2. Instances vārda ģenerēšanaTesta apraksts

Šajā testā tiek pārbaudīts, vai instances vārds tiek pareizi uzģenerēts. Tiks izveidotas četras instances un katrai izvēlēts klases vārds.

Ievaddati Trīs klases ar vārdiem aa, bb un cc, četras instances, kurām izvēlēti klašu vārdi cc, cc, aa un bb.

Attēls

Sagaidāmais rezultāts

Instanču pilnajiem vārdiem jābūt cc1:cc, cc2:cc, aa1:aa un bb1:bb.

Rezultāts Veiksmīgs

4.2.3. Instances atribūtu priekšāteikšanaTesta apraksts Šajā testā tiek pārbaudīts, vai instancei tiek piedāvāti visai

izvēlētās klases atribūti un šīs klases mantotie atribūti. Tiks

24

Page 25: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

izveidota instance un tai izvēlēta klase, kura ir apakšklase kādai citai klasei.

Ievaddati Trīs klases ar vārdiem aa, bb un cc un attiecīgi atribūtiem a:int, b:int un c:int, kur klase bb ir klases cc apakšklase un klase aa ir klases bb apakšklase.

Attēls

Sagaidāmais rezultāts Instancei būtu jāpiedāvā atribūti a = , b = , c = .Rezultāts Veiksmīgs

4.2.4. Saites lomu piedāvāšana Testa apraksts

Šajā testā tiek pārbaudīts, vai saitei tiek piedāvāti tikai tie lomu vārdi, kuri ir iespējami starp konkrētajām instancēm. Tiks izveidota saite starp instancēm, kurām izvēlēties lomu vārdus no saraksta.

Ievaddati Četras klases ar vārdiem aa, bb, cc, dd, klases aa instance aa3:aa, klases cc instance cc3:cc. Asociācija starp klasēm cc un bb ar lomu vārdiem c un a. Asociācija starp klasēm aa un dd ar lomu vārdiem a1 un d.

Attēls

Sagaidāmais rezultāts

Starp instancēm cc3:cc un aa3:aa jābūt iespējamam novilkt tikai vienu saiti ar lomu vārdiem c un a.

Rezultāts Veiksmīgs

4.2.5. Vispārināšanas ciklu pārbaude Testa apraksts Šajā testā tiek pārbaudīts, vai klases, kuras iesaistītas

vispārināšanas ciklā, tiek atpazītas un iekrāsotas.Ievaddati Astoņas klases ar vārdiem a, b, c, d, e, o, p, q. Starp klasēm a, b, c,

d un e izveidots vispārināšanas cikls.

25

Page 26: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Attēls

Sagaidāmais rezultāts

Klases a, b, c, d un e iekrāsosies sarkanā krāsā.

Rezultāts Veiksmīgs

4.2.6. Klases atribūtu pārbaude Testa apraksts Šajā testā tiek pārbaudīts, vai visi klašu atribūti ievadīti

formā „atribūta vārds:tips”, un, vai klases un visu mantoto klašu atribūtu vārdi neatkārtojas.

Ievaddati Klase cc ar atribūtu c – integer, klase bb ar atribūtu b:int, klase aa ar atribūtu b:int.

Attēls

Sagaidāmais rezultāts Jāiekrāso klase cc, jo tajā ir nepareizā formā ievadīts atribūts, un klase aa, jo tajā atkārtojas atribūts, kāds ir tās virsklasē bb.

Rezultāts Veiksmīgs

4.2.7. Klases asociāciju pārbaude Testa apraksts Šajā testā tiek pārbaudīts, vai ir ievadīti asociāciju lomu vārdi, un, vai

asociāciju lomu vārdi vienas klases un tās mantoto klašu ietvaros ir unikāli.

Ievaddati Astoņas klases ar vārdiem Persona, Sieviete, Vīrietis, Planēta, Valsts, Pilsēta, a, b. Klases Vīrietis un Sieviete ir klases Persona apakšklases. Starp klasēm Persona un Valsts ir asociācija ar lomu vārdiem dzimusi, dzimšanas vieta. Starp klasēm Sieviete un Planēta ir asociācija bez lomu vārdiem. Starp klasēm Vīrietis un Pilsēta ir asociācija ar lomu vārdiem dzimšanas vieta, atrodas. Starp klasēm a un b ir asociācija ar lomu vārdiem dzimusi, dzimšanas vieta.

26

Page 27: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Attēls

Sagaidāmais rezultāts

Jāiekrāso asociācija starp klasēm Sieviete un Planēta, jo tajā nav lomu vārdu. Jāiekrāso klases Sieviete un Planēta, jo asociācijas starp tām vārdi sakrīt. Jāiekrāso klase Vīrietis, jo tās mantotajā asociācijā starp klasēm Persona un Valsts ir tāds pats lomas vārds (dzimšanas vieta) kā asociācijā starp šo klasi un klasi Planēta.

Rezultāts Veiksmīgs

4.2.8. Instances atribūtu pārbaude Testa apraksts

Šajā testā tiek pārbaudīts, vai instances atribūtu vērtības atbilst attiecīgās klases atribūtu tipiem.

Ievaddati Piecas klases – Bumba ar atribūtu Apaļa:boolean; Kija; Nūja ar atribūtu Izturība:int; Suns ar atribūtu Vecums:integer; Cilvēks ar atribūtiem Vārds:String, Dzīvs:Boolean, kur klase Suns ir klases Cilvēks apakšklase un klase Kija ir klases Nūja apakšklase. Četras instances – Sun5Suns ar atribūtiem Vecums = 2, Vārds = Džambo, Dzīvs = true; Bum42:Bumba ar atribūtu Apaļa = nav; Nūj51:Nūja ar atribūtu Izturība = , Kij93:Kija ar atribūtu Izturība = vāja.

Attēls

Sagaidāmais rezultāts

Jāiekrāso instance Bum42:Bumba, jo tās atribūta Apaļa vērtība ir nav, bet tips ir noteikts boolean. Jāiekrāso instance Nūj51:Nūja, jo tās atribūta Izturība vērtība nav ievadīta, bet tips ir noteikts int. Jāiekrāso instance Kij93:Kija, jo tās atribūta Izturība vērtība ir vāja, bet tips ir noteikts Integer.

Rezultāts Veiksmīgs

4.2.9. Viss kopā Testa apraksts

Šajā testā tiek pārbaudīta visu moduļu kopīgā sadarbība.

Ievaddati Septiņas klases – superklase ar atribūtiem skolēni:string, vārds:string, uzvārds:string; turboklase ar atribūtu turbīna:string; ūberklase ar atribūtiem ūberpakāpe:integer, bb:string; opa ar atribūtu Jā:boolean; opapa ar atribūtiem x:integer, y:integer; xsd ar atribūtu aa:integer; 00

27

Page 28: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

ar atribūtu 00:integer, kur klase superklase ir klašu turboklase un opa apakšklase, klase opapa ir klases opa apakšklase un klase xsd ir klases 00 apakšklase. Starp klasēm turboklase un ūberklase ir asociācija ar lomām err un or. Starp klasēm opapa un xsd ir asociācija ar lomām e un w. Starp klasēm opa un 00 ir asociācija ar lomām 99 un 86. Starp klasēm ūberklase un xsd ir asociācija ar lomām l un u.

Attēls

Sagaidāmais rezultāts

Nekas neiekrāsojas, instancēm piedāvāti pareizi un visi nepieciešamie atribūti, saitēm iespējamas pareizās lomas.

Rezultāts Veiksmīgs

28

Page 29: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

5. Projekta organizācijaProjektā piedalījās viens cilvēks, kurš bija projekta dokumentācijas autors, lietojumprogrammas arhitekts, kā arī programmētājs. Konsultācijas sniedza darba vadītājs.Šis kvalifikācijas darbs tika izstrādāts pēc ūdenskrituma modeļa principa, tādēļ pirmie veicamie darbi bija analīze, programmatūras prasību specifikācijas un programmatūras projektējuma apraksta izstrāde. Pēc tam notika programmatūras izveide un kodēšana, paralēli pielabojot programmatūras projektējuma aprakstu. Pēc programmatūras projektējuma apraksta uzrakstīšanas tika veikta vienībtestēšana katram modulim atsevišķi un integrācijas testēšana visiem moduļiem kopā. Projekta beigās tika izstrādāta visa atlikusī, nepieciešamā dokumentācija.

29

Page 30: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

6. Kvalitātes nodrošināšanaLai programmatūrai nodrošinātu kvalitāti, tika izveidota programmatūras prasību specifikācija un programmatūras projektējuma apraksts atbilstoši Latvijas Nacionālais standartizācijas un metroloģijas centra izstrādātajiem Latvijas valsts standartiem, lai izstrādes laikā būtu iespējams projektu izstrādāt atbilstoši plānojumam. Tā kā ir tikai viens projekta izstrādātājs, kas ir arī arhitekts, tad veicot izmaiņas programmas kodā, ja tās attiecās uz lietojumprogrammas plānojumu, izmaiņas tika veiktas arī dokumentācijā. Programmas kods ir rakstīts saskaņā ar labo programmēšanaspraksi un atbilstoši komentēts. Katram programmatūras produkta modulim tika veikta vienībtestēšana, lai pārliecinātos, ka tas darbojas pareizi. Ja kādā testā tika atklāta kļūda, tad pēc kļūdas izlabošanas tests tika atkārtots.

30

Page 31: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

7. Darbietilpības novērtējumsDarbietilpības novērtējumam tiek izmantots COCOMO modelis. Modelis no sākuma aprēķina funkcijpunktus, kas pēc tam tiek pārvērsti koda rindiņās. Un no koda rindiņām pēc tam aprēķina izstrādes laiku personmēnešos un kalendārajos mēnešos.

Sarežģīti Vidēji Vienkārši Funkcijpunktu skaits

Ievadi 6*0 4*4 3*1 17Izvadi 7*0 5*0 4*3 12Iekšējie datu faili

15*0 10*0 7*1 7

Ārējie interfeisa faili

10*0 7*0 5*0 0

Vaicājumi 6*0 4*0 3*0 0Nepieskaņotu funkcijpunktu skaits: 36

Tā kā L0 neparādījās nevienā tabulā ar programmrindiņu skaitu viena funkcijpunkta realizācijai, uzskatīsim to par trešās paaudzes programmēšanas valodu, kurām ir 80 programmrindiņu viena funkcijpunkta realizācijai.

S = Nepieskaņotu funkcijpunktu skaits * 80 = 36 * 80 = 2880S = S * (1 + BRAK/100) = 2880 * (1 + 10/100) = 3168

Izstrādes risku ietekme uz darbietilpībuFaktors Komentārs Vērtējums

Iepriekšējā pieredze šādu uzdevumu risināšanā (SF1)

Autoram nav nekādas pieredzes darbā ar L0 un metamodeļiem.

4

Darbu ietekmē spēcīgi aparatūras, programmatūras, laika u.c. ierobežojumi (SF2)

Nav aparatūras un programmatūras ierobežojumu, bet programmai nebūtu jāstrādā lēni.

3

Visas iespējamās atkāpes no standartrisinājumiem ir definētas un iekļautas izstrādes plānos (SF3)

Iespējamās atkāpes nav definētas.

4

Izstrādātāju komanda (SF4) Savstarpēja komunikācija nav nepieciešama

0

Produkta izstrādes procesa organizācija (SF5)

Izstrādes process tika organizēts diezgan labi

3

B = 1.01 + 0.01 * (SF1 + SF2 + SF3 + SF4 + SF5) = 1.01 + 0.01 * 14 = 1.15

Izstrādes vides ietekme uz darbietilpībuFaktors Komentārs VērtējumsIzstrādātāju spējas (EM1) Izstrādātājam nav iepriekšējas

pieredzas šādos projektos, kā arī jāapgūst jauna programmēšanas vide.

1.2

Drošuma prasības (EM2) Izstrādātajam produktam nav uzsvars uz drošumu, bet

1.2

31

Page 32: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

produkts ir sarežģīts no algoritmu viedokļa.

Atkārtotās pielietojamības prasības (EM3)

Nav 0.9

Produkta apjoma ierobežojumi un ātrdarbība(EM4)

Nav 0.9

Programmrīku atbalsta ietekme uz darbietilpību (EM5)

Izstrādes vide nav ļoti stabila. Vide atbalsta programmatūras izstrādi komandā.

1.0

Izstrādes kalendārais plānojums (EM6) Normāls 1.2

E = (EM1 + EM2 + EM3 + EM4 + EM5 + EM6) / 6 = 1.067

PM – Personmēneši

PM = 2.5 * (S / 1000)B * E = 2.5 * 3.1681.15 * 1.067 = 10.046

Rezultāts tomēr sanāk lielāks nekā reālā darbietilpība, jo COCOMO modelis nav domāts maziem projektiem, kuros piedalās daži dalībnieki ilgumā līdz pusgadam. Patiesībā programmatūras izstrāde prasīja aptuveni trīs kalendāros mēnešus.

32

Page 33: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

8. RezultātiKlašu un instanču diagrammu redaktors tika veiksmīgi izstrādāts, kā arī tika izveidota nepieciešamā dokumentācija. Lai pārliecinātos par programmatūras pareizu darbību, projekta beigās tika veikta programmatūras testēšana, kas tika arī atbilstoši dokumentēta.

33

Page 34: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

9. SecinājumiIzstrādājot projektu, tika apmierinātas visas sākotnēji izvirzītās prasības un izstrādāta programma atbilstoši specifikācijai. Netika uztaisīta pārbaude, kas pārbauda, vai saišu skaits atbilst kardinalitāšu skaitam, bet tas netika specifikācijā prasīts, jo redaktora izmantojumā šī kļūda nav būtiska. Izstrādes laikā tika izveidots viss, kas bija paredzēts un gūta lieliska pieredze.Izstrādājot šo darbu, autors guvis būtisku pieredzi programmatūras dokumentācija izstrādē, apguvis metamodeļbāzēto transformāciju valodu L0 un labās programmēšanas prakses pamatprincipus. Kā arī ieguvis pamatzināšanas sistēmu modelēšanā. Pēc darba izstrādāšanas autors paaugstinājis savu kvalifikāciju, kas turpmāk būs ļoti noderīga.

34

Page 35: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

10. Izmantotā literatūra1. What is programming language generations - http://searchcio-

midmarket.techtarget.com/sDefinition/0,,sid183_gci211502,00.html2. Programming Languages Table - http://www.spr.com/programming-

languages-table.html3. Dzīves ciklu modeļi - http://estudijas.lu.lv/file.php/178/I

%20semestris/Kospekti/1.Iss%20parskats%20par%20kursu.htm4. Darbietilpības novērtēšana pēc COCOMO metodes -

http://estudijas.lu.lv/mod/resource/view.php?id=77065. The base transformation language L0 - http://lx.mii.lu.lv/L0_CurrVers.pdf

35

Page 36: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

11. Pielikums11.1. Programmatūras kodsProgrammatūras kods ir rakstīts metamodeļbāzētajā transformāciju valodā L0. Šajā dokumentā ir iekļauta tikai daļa no koda.

//Procedura, kas parbauda, vai visiem klases atributiem ir unikali vardi.;//Ja nav, iekraso klasi sarkanu un pievieno kludas pazinojumu.;procedure avp(klase:String);

pointer gr:GraphDiagram;pointer element:Element;var tips:String;var atributs:String;var atributs2:String;var saraksts:String;var saraksts2:String;var klvards:String;var visi:String;var err:String;var err2:String;var er1:String;

begin;

setPointerF gr = get_active_graphDiagram();setVar atributs = "";setVar saraksts = "";

//Panem klases visus atributus, iekraso klasi normali;//un nonem kludas pazinojumus, kamer kluda nav atrasta.;first element:Element from gr by element else End2;label loop2;

setVarF tips = get_element_elemType_id(element);var tips == "Klase" else nxt_elem2;setVarF klvards = get_compartment_value(element, "Vards");var klvards == klase else nxt_elem2;setVarF visi = get_compartment_value(element, "Visi atributi");

//Kludas nodzesana...;setVar err2 = "";setVarF err = get_compartment_value(element, "Kluda");var err != "" else noerr;

label errcheck;setVarF er1 = string_iterator(err, "\n");var er1 != "Atribūtu vārdi atkārtojas!" else errempty;setVar err2 = err2 + er1;setVar err2 = err2 + "\n";label errempty;var err != "\n" else noerr;var err != "" else noerr;goto errcheck;

label noerr;call set_compartment_value5(element,"Kluda",err2);

36

Page 37: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

call okCmd(element);var visi != "" else End;label nxt_elem2;next element else End2;

goto loop2;label End2;

//Saliek visus atributus smuka saraksta ar # ka atdalitaju;//starp atributiem un nokope sarakstu.;

label l3;setVarF atributs = string_iterator(visi, ":");setVar saraksts = saraksts + atributs;setVar saraksts = saraksts + "#";setVarF atributs = string_iterator(visi, "\n");var visi == "" else l3;

setVar saraksts2 = saraksts;

//Nem no no viena saraksta pa vienam elementam un salidzina ar otru sarakstu;label loop1;

setVarF atributs = string_iterator(saraksts, "#");setVar saraksts2 = saraksts;label loop3;

setVarF atributs2 = string_iterator(saraksts2, "#");var atributs == atributs2 else next;

first element:Element from gr by element else Ends;label loop;

setVarF tips = get_element_elemType_id(element);var tips == "Klase" else nxt_elem;setVarF err2 = get_compartment_value(element, "Kluda");setVarF klvards = get_compartment_value(element, "Vards");var klvards == klase else color;setVar err2 = err2 + "Atribūtu vārdi atkārtojas!";setVar err2 = err2 + "\n";label color;

var err2 != "" else clear;var err2 != "\n" else clear;call set_compartment_value5(element,"Kluda",err2);call set_compartment_value5(element,"Stils","Kļūda");call okCmd(element);goto nxt_elem;

label clear;call set_compartment_value5(element,"Kluda","");call set_compartment_value5(element,"Stils","Klase");call okCmd(element);

label nxt_elem;next element else Ends;

goto loop;label Ends;

goto End;label next;

37

Page 38: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

var saraksts2 == "" else loop3;var saraksts == "" else loop1;label End;end;

procedure atributu_vardu_parbaude();pointer gr:GraphDiagram;pointer element:Element;var name:String;var tips:String;

begin;

setPointerF gr = get_active_graphDiagram();

first element:Element from gr by element else End;label loop;

setVarF tips = get_element_elemType_id(element);var tips == "Klase" else nxt_elem;

setVarF name = get_compartment_value(element, "Vards");call asvp(name);call avp(name);

label nxt_elem;next element else End;

goto loop;label End;

end;

//Procedura, kas saliek visus atributus klasem;procedure visu_atributu_saliksana();

pointer gr:GraphDiagram;pointer edge:Element;pointer box:Node;pointer box1:Node;pointer element:Element;var ktips:String;var etips:String;var saraksts:String;var saraksts2:String;var klase1:String;var klase:String;var klvards:String;var sakums:String;var visi:String;var savi:String;var ssavi:String;var atributs1:String;var atributs2:String;var visi1:String;var visi2:String;

38

Page 39: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

begin;

setPointerF gr = get_active_graphDiagram();setVar saraksts = "";setVar saraksts2 = "";

//Iet cauri visam klasem;first element:Element from gr by element else klEnd;label klloop;

setVarF ktips = get_element_elemType_id(element);var ktips != "Klase" else l1;goto knxt_elem;

label l1;setVarF klase = get_compartment_value(element, "Vards");call set_compartment_value5(element,"Visi atributi","");//Ja ir klase, apstaiga visparinasanas un;//parbauda, vai tas sakas saja klase;first edge:Element from gr by element else eEnd;label loop;

setVarF etips = get_element_elemType_id(edge);var etips == "Vispārināšana" else nxt_elem;first box:Node from edge by start else nxt_elem;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir visparinasanas sakuma, tad ta nav gals;var klvards == klase else nxt_elem;

//Liekam to miera, ta nav nepieciesama, nemam nakamo klasi;goto knxt_elem;

label nxt_elem;next edge else eEnd;

goto loop;label eEnd;//Ja neviena linija saja klase nesakas, ta ir gals.;//Pievienojam sarakstam un saliekam taja visus atributus.;setVar saraksts = saraksts + klase;setVar saraksts = saraksts + "#";setVarF savi = get_compartment_value(element, "Atributi");call set_compartment_value5(element,"Visi atributi",savi);

label knxt_elem;next element else klEnd;

goto klloop;label klEnd;

//Vai saraksts ir tukss?;var saraksts != "" else sartukss;//Panemam klasi;setVarF klase = string_iterator(saraksts, "#");var klase != "" else sartukss;

//Iet cauri visam klasem un atrod nepieciesamo;first element:Element from gr by element else klEnd1;label klloop1;

39

Page 40: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

setVarF ktips = get_element_elemType_id(element);var ktips != "Klase" else l11;goto knxt_elem1;

label l11;setVarF klase1 = get_compartment_value(element, "Vards");//Ir ista klase?;var klase == klase1 else knxt_elem1;//Ja ir klase, apstaiga visparinasanas un;//parbauda, vai tas beidzas saja klase;first edge:Element from gr by element else eEnd1;label loop1;

setVarF etips = get_element_elemType_id(edge);var etips == "Vispārināšana" else nxt_elem1;first box:Node from edge by end else nxt_elem1;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir visparinasanas beigas, tad...;var klvards == klase else nxt_elem1;

//...panem visparinasanas sakuma kasti;first box1:Node from edge by start else nxt_elem1;setVarF sakums = get_compartment_value(box1, "Vards");//Pievienojam sarakstam2 un saliekam taja visus atributus.;setVar saraksts2 = saraksts2 + sakums;setVar saraksts2 = saraksts2 + "#";setVarF savi = get_compartment_value(box1, "Visi atributi");//Otra gala visi atributi;setVarF ssavi = get_compartment_value(box, "Visi atributi");var savi == "" else viii;

setVarF savi = get_compartment_value(box1, "Atributi");goto iiiv;

label viii;setVar visi1 = savi;setVar visi2 = ssavi;setVarF atributs1 = string_iterator(visi2, "\n");label mazaparbaude;setVarF atributs2 = string_iterator(visi1, "\n");var atributs1 != atributs2 else nxt_elem1;var visi1 == "" else mazaparbaude;label iiiv;setVar visi = savi + "\n";setVar visi = visi + ssavi;call set_compartment_value5(box1,"Visi atributi",visi);

label nxt_elem1;next edge else eEnd1;

goto loop1;label eEnd1;

label knxt_elem1;next element else klEnd1;

goto klloop1;label klEnd1;goto klEnd;

40

Page 41: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

label sartukss;//Vai saraksts2 ir tukss?;var saraksts2 != "" else sar2tukss;setVar saraksts = saraksts2;setVar saraksts2 = "";goto klEnd;label sar2tukss;end;

//Procedura, kas saliek visas asociacijas klasem;procedure visu_asociaciju_saliksana();

pointer gr:GraphDiagram;pointer edge:Element;pointer edgea:Element;pointer box:Node;pointer box1:Node;pointer box2:Node;pointer element:Element;var ktips:String;var etips:String;var saraksts:String;var saraksts2:String;var klase1:String;var klase:String;var klvards:String;var klvards2:String;var sakums:String;var visi:String;var savi:String;var ssavi:String;var atributs1:String;var atributs2:String;var visi1:String;var visi2:String;var l1:String;var l2:String;var k1:String;var k2:String;var rinda:String;

begin;

setPointerF gr = get_active_graphDiagram();setVar saraksts = "";setVar saraksts2 = "";

//Iet cauri visam klasem;first element:Element from gr by element else klEnd;label klloop;

setVarF ktips = get_element_elemType_id(element);

41

Page 42: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

var ktips != "Klase" else ll1;goto knxt_elem;

label ll1;setVarF klase = get_compartment_value(element, "Vards");call set_compartment_value5(element,"Visas asociacijas","");//Ja ir klase, apstaiga visparinasanas un;//parbauda, vai tas sakas saja klase;first edge:Element from gr by element else eEnd;label loop;

setVarF etips = get_element_elemType_id(edge);var etips == "Vispārināšana" else nxt_elem;first box:Node from edge by start else nxt_elem;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir visparinasanas sakuma, tad ta nav gals;var klvards == klase else nxt_elem;

//Liekam to miera, ta nav nepieciesama, nemam nakamo klasi;goto knxt_elem;

label nxt_elem;next edge else eEnd;

goto loop;label eEnd;//Ja neviena linija saja klase nesakas, ta ir gals.;//Pievienojam sarakstam un saliekam taja visus atributus.;setVar saraksts = saraksts + klase;setVar saraksts = saraksts + "#";//Apstaiga visas asociacijas un paskatas, vai;//Kada no asociacijas galiem ir si klase;first edge:Element from gr by element else eEnda;label loopa;

setVarF etips = get_element_elemType_id(edge);var etips == "Asociācija" else nxt_elema;//Asociacijas sakums;first box:Node from edge by start else beig;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir asociacijas sakuma, pievienojam to;var klvards == klase else beig; first box1:Node from edge by end else beig;

setVarF klvards2 = get_compartment_value(box1, "Vards");setVarF l1 = get_compartment_value(edge, "Loma 1");setVarF l2 = get_compartment_value(edge, "Loma 2");setVarF k1 = get_compartment_value(edge, "Kardinalitāte 1");setVarF k2 = get_compartment_value(edge, "Kardinalitāte 2");setVar rinda = l1 + "#";setVar rinda = rinda + l2;setVar rinda = rinda + "#";setVar rinda = rinda + k1;setVar rinda = rinda + "#";setVar rinda = rinda + k2;setVar rinda = rinda + "#";setVar rinda = rinda + klvards2;

42

Page 43: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

setVar rinda = rinda + "\n"; setVarF savi = get_compartment_value(element, "Visas asociacijas");

setVar savi = savi + rinda; call set_compartment_value5(element,"Visas asociacijas",savi);

goto nxt_elema;label beig;//Asociacijas beigas;first box:Node from edge by end else nxt_elema;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir asociacijas beigas, pievienojam to;var klvards == klase else nxt_elema; first box1:Node from edge by start else nxt_elema;

setVarF klvards2 = get_compartment_value(box1, "Vards");setVarF l2 = get_compartment_value(edge, "Loma 1");setVarF l1 = get_compartment_value(edge, "Loma 2");setVarF k2 = get_compartment_value(edge, "Kardinalitāte 1");setVarF k1 = get_compartment_value(edge, "Kardinalitāte 2");setVar rinda = l1 + "#";setVar rinda = rinda + l2;setVar rinda = rinda + "#";setVar rinda = rinda + k1;setVar rinda = rinda + "#";setVar rinda = rinda + k2;setVar rinda = rinda + "#";setVar rinda = rinda + klvards2;setVar rinda = rinda + "\n";

setVarF savi = get_compartment_value(element, "Visas asociacijas");setVar savi = savi + rinda;

call set_compartment_value5(element,"Visas asociacijas",savi);label nxt_elema;next edge else eEnda;

goto loopa;label eEnda;

label knxt_elem;next element else klEnd;

goto klloop;label klEnd;//Vai saraksts ir tukss?;var saraksts != "" else sartukss;//Panemam klasi;setVarF klase = string_iterator(saraksts, "#");var klase != "" else sartukss;

//Iet cauri visam klasem un atrod nepieciesamo;first element:Element from gr by element else klEnd1;label klloop1;

setVarF ktips = get_element_elemType_id(element);var ktips != "Klase" else l11;goto knxt_elem1;

label l11;setVarF klase1 = get_compartment_value(element, "Vards");

43

Page 44: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

//Ir ista klase?;var klase == klase1 else knxt_elem1;//Ja ir klase, apstaiga visparinasanas un;//parbauda, vai tas beidzas saja klase;first edge:Element from gr by element else eEnd1;label loop1;

setVarF etips = get_element_elemType_id(edge);var etips == "Vispārināšana" else nxt_elem1;first box:Node from edge by end else nxt_elem1;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir visparinasanas beigas, tad...;var klvards == klase else nxt_elem1;

//...panem visparinasanas sakuma kasti;first box1:Node from edge by start else nxt_elem1;setVarF sakums = get_compartment_value(box1, "Vards");//Pievienojam sarakstam2 un saliekam taja visas asociacijas.;setVar saraksts2 = saraksts2 + sakums;setVar saraksts2 = saraksts2 + "#";//Saliek otra gala visas asociacijas pie savam visam asociacijam.;setVarF savi = get_compartment_value(box1, "Visas asociacijas");//Otra gala visas asociacijas;setVarF ssavi = get_compartment_value(box, "Visas asociacijas");setVar savi = savi + ssavi;call set_compartment_value5(box1,"Visas asociacijas",savi);

//Apstaiga visas asociacijas un paskatas, vai;//Kada no asociacijas galiem ir si klase;first edgea:Element from gr by element else eEnda1;label loopa1;

setVarF etips = get_element_elemType_id(edgea);var etips == "Asociācija" else nxt_elema1;//Asociacijas sakums;first box:Node from edgea by start else beiga;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir asociacijas sakuma, pievienojam to;var klvards == sakums else beiga;

first box2:Node from edgea by end else beiga;setVarF klvards2 = get_compartment_value(box2, "Vards");setVarF l1 = get_compartment_value(edgea, "Loma 1");setVarF l2 = get_compartment_value(edgea, "Loma 2");setVarF k1 = get_compartment_value(edgea, "Kardinalitāte 1");setVarF k2 = get_compartment_value(edgea, "Kardinalitāte 2");setVar rinda = l1 + "#";setVar rinda = rinda + l2;setVar rinda = rinda + "#";setVar rinda = rinda + k1;setVar rinda = rinda + "#";setVar rinda = rinda + k2;setVar rinda = rinda + "#";setVar rinda = rinda + klvards2;setVar rinda = rinda + "\n";

44

Page 45: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

setVarF savi = get_compartment_value(box1, "Visas asociacijas");setVar savi = savi + rinda;call set_compartment_value5(box1,"Visas asociacijas",savi);goto nxt_elema1;

label beiga;//Asociacijas beigas;first box:Node from edgea by end else nxt_elema1;

setVarF klvards = get_compartment_value(box, "Vards");//Ja si klase ir asociacijas beigas, pievienojam to;var klvards == sakums else nxt_elema1;

first box2:Node from edgea by start else nxt_elema1;setVarF klvards2 = get_compartment_value(box2, "Vards");setVarF l1 = get_compartment_value(edgea, "Loma 1");setVarF l2 = get_compartment_value(edgea, "Loma 2");setVarF k1 = get_compartment_value(edgea, "Kardinalitāte 1");setVarF k2 = get_compartment_value(edgea, "Kardinalitāte 2");setVar rinda = l1 + "#";setVar rinda = rinda + l2;setVar rinda = rinda + "#";setVar rinda = rinda + k1;setVar rinda = rinda + "#";setVar rinda = rinda + k2;setVar rinda = rinda + "#";setVar rinda = rinda + klvards2;setVar rinda = rinda + "\n";setVarF savi = get_compartment_value(box1, "Visas asociacijas");setVar savi = savi + rinda;call set_compartment_value5(box1,"Visas asociacijas",savi);

label nxt_elema1;next edgea else eEnda1;

goto loopa1;label eEnda1;

label nxt_elem1;next edge else eEnd1;

goto loop1;label eEnd1;

label knxt_elem1;next element else klEnd1;

goto klloop1;label klEnd1;goto klEnd;

label sartukss;//Vai saraksts2 ir tukss?;var saraksts2 != "" else sar2tukss;setVar saraksts = saraksts2;setVar saraksts2 = "";goto klEnd;label sar2tukss;end;

45

Page 46: Klašu un instanču diagrammu redaktora izstrāde, izmantojotrīku definēšanas platformu GrTP

Kvalifikācijas darbs „Klašu un instanču diagrammu redaktora izstrāde, izmantojot

rīku definēšanas platformu GrTP” izstrādāts Latvijas Universitātes Datorikas

fakultātē.

Ar savu parakstu apliecinu, ka darbs izstrādāts patstāvīgi, izmantoti tikai tajā norādītie

informācijas avoti un iesniegtā darba elektroniskā kopija atbilst izdrukai.

Autors: Matīss Rikters__________________ 31.05.2010.

Rekomendēju darbu aizstāvēšanai

Darba vadītāja: Dr.sc.comp. Lelde Lāce_____________ 31.05.2010.

Recenzents: B.dabaszin. Zane Segruma

Darbs iesniegts 31.05.2010.

Kvalifikācijas darbu pārbaudījumu komisijas sekretārs: Dainis Dosbergs __________

Darbs aizstāvēts kvalifikācijas darbu pārbaudījuma komisijas sēdē

___.06.2010. prot. Nr. _____, vērtējums _____ (_____________)

Komisijas sekretārs(-e): _________________________________________

46