continuining with requirement spec

This commit is contained in:
jorenchik
2024-10-13 13:38:10 +03:00
parent d9eff8488c
commit fcbd6ba2a5
2 changed files with 540 additions and 20 deletions

Binary file not shown.

View File

@@ -6,7 +6,7 @@
#show: project.with(
university: "Latvijas Universitāte",
faculty: "Eksakto zinātņu un tehnoloģiju fakultāte",
title: [Atmiņas kartīšu lietotne ar domēna specifiskās valodas izmantošanu\ Kvalifikācijas darbs],
title: [Atmiņas kartīšu lietotne ar domēna specifiskas valodas izmantošanu\ Kvalifikācijas darbs],
authors: ( "Jorens Štekeļs, js21283", ),
advisor: "prof. Dr. sc. comp. Laila Niedrīte",
date: "Rīga 2025",
@@ -194,6 +194,76 @@ atmiņas kartīšu dati un dati par saskarni ar kartītēm.
== Funkcionālās prasības
=== Augsta līmeņa valodas specifikācija
Kartīšu veidošanai vienkāršā tekstā tiek izmantota vienkārša
domēna specifiska valoda. Ir 4 jautājumu veidi, kuru struktūra
ir līdzīga ar dažām atšķirībām. Katrs jautājums sākas ar priekšu, kam
var būt skaitlis, kas apzīmē intervālu stundās, pēc kura tas būs atkārtoti izmantots.
```
- Ka sauc Latvijas galvaspilsētu? >
[...]
- [12.5] Ka sauc Igaunijas galvaspilsētu? >
[...]
```
Vienkāršs atbilžu jautājums ir jautājums, kam ir viena vai
vairākas pareizas atbildes, katra atbilde sākas ar "-".
```markdown
- Ka sauc Lietuvas galvas pilsētu? >
- Viļņus
- Nosauciet Baltijas valstis >
- Latvija
- Igaunija
- Lietuva
```
Izvēles jautājums ir jautājums, kam ir viens vai vairākas pareizas
atbildes, pareizās atbildes sākas ar "+", nepareizās -- ar "-".
```markdown
- Kuras no valstīm ir Baltijas valstis >
+ Latvija
- Rumānija
+ Lietuva
- Spānija
```
Secības jautājums.
```
- Sakārtojiet zinātniskās metodes soļus pareizā secībā >
-^ Uzdod jautājumu
-^ Izvirza hipotēzi
-^ Veic eksperimentu
-^ Analizē datus
```
==== Grupēšanas jautājums
// TODO
```
- Savienojiet planētas ar to īpašībām >
- Zeme:
- Satur dzīvi
- Jupiters:
- Lielākā planēta
- Ir gredzeni
- Venēra:
- Merkurs:
- Mazākā
- Saturns:
- Ir gredzeni
- Neptūns:
- Tālākā no saules
- Ir gredzeni
```
=== Jautājumu datu struktūra
=== Funkciju sadalījums moduļos
Risinājuma moduļi ar to saistītām datu plūsmām un datu glabātuvēm ir attēlots
@@ -220,23 +290,22 @@ Funkciju sadalījums moduļos ir apraksīts sadalījuma tabulā (skat. @tbl:func
// TODO links: #link<AMF01>[AMF01]
// TODO: adjust the rowspanxes
rowspanx(7)[Atmiņas bāzes modulis],
rowspanx(8)[Atmiņas bāzes modulis],
[Kartīšu faila ielāde], [AB01],
[Kartīšu saraksta lappuses izveidošana], [AB02],
[Kartītes pievienošana], [AB03],
[Kartītes redigēšana], [AB04],
[Kartītes dzēšana], [AB05],
[Kartītes faila saglabāšana], [AB06],
[Atmiņas bāzes saraksta parādīšana], [AB07],
// TODO ielāde??
[Kartīšu saraksta lappušu izveidošana], [AB02],
[Atmiņas bāzes lappuses iesūšana], [AB03],
[Kartīšu pievienošana], [AB04],
[Kartītes pirmteksta iegūšana], [AB05],
[Kartītes redigēšana], [AB06],
[Kartītes dzēšana], [AB07],
[Kartītes faila saglabāšana], [AB08],
rowspanx(6)[Mācīšanās modulis],
[Nākamās kartītes noteikšana], [MA01],
[Atbildes kartītes pārbaude], [MA02],
[Vairāku atbilžu kartītes pārbaude], [MA03],
[Kārtošanas kartītes pārbaude], [MA04],
[Grupēšanas kartītes pārbaude], [MA05],
[Intervāla grupas atbildes sniegšana], [MA06],
[Izvēles kartītes pārbaude], [MA02],
[Kārtošanas kartītes pārbaude], [MA03],
[Grupēšanas kartītes pārbaude], [MA04],
[Intervāla grupas atbildes sniegšana], [MA05],
// un meta datu saglabāšana
rowspanx(3)[Konfigurācijas modulis],
@@ -247,41 +316,307 @@ Funkciju sadalījums moduļos ir apraksīts sadalījuma tabulā (skat. @tbl:func
),
) <function_table>
=== Kopīgas procedūras
#procedure-table(
"Teksta jautājumu transpilēšana",
"PR01",
[
Procedūra apstrādā simbolu virkni, iegūstot jautājumu datu struktūru
objektus. Ir sagaidāms, ka simbolu virkne atbilst specificētai valodai. Ja
simbolu virkne valodai neatbilst, tiek izvadīta kļūda. Simbolu virkne tiek
apstrādāta vairākos posmos.
],
[
+ Simbolu virkne;
],
[
+ Tiek nolasīti simboli, sagrupējot to tekstvienībās;
+ Tiek veikta virspusēja gramatikas pārbaude;
+ Ja tiek sastapta tekstvienība, kas nav sagaidāma kādā kontekstā, beidz
apstrādi, izvadē pievienojot kļūdu ar tās pozīciju;
+ Tiek nolasīti jautājumi, nosakot to veidu pēc to struktūras:
+ Jautājuma sākums (jeb kartītes priekša);
+ Veidojot jautājumus tiek pielasīts arī intervāla laiks, ja tāds ir;
+ Pēc jautājuma sākuma ir viens vai vairākas atbildes jeb apakšpunkti;
+ Vairāki apakšpunkti ar "-" -- atbilžu jautājums;
+ Vairāki apakšpunkti ar "+" -- izvēles jautājums;
+ Vairāki apakšpunkti ar "-^" -- izvēles jautājums;
+ Vairāki apakšpunkti, kas beidzas ar ":",
kam seko apakšpunkti ar "-" (iespējams tos nenorādīt);
+ Jautājumu veidi ir nosakāmi bez tiešas vieda norādīšanas;
+ Ja nolasīšanas laikā parādās nesagaidīta tekstvienība, beidz apstrādi,
izvadē pievienojot kļūdu ar tās pozīciju;
],
[
+ Saraksts ar jautājumiem;
+ Kļūda ar tekstu un tās pozīciju saturā;
],
) <PR01>
#procedure-table(
"Teksta jautājumu detranspilēšana",
"PR02",
[
Procedūra apstrādā jautājumu sarakstu un izveido tam atbilstošu
simbolu virkni, kas atbilst specificētai valodai.
Papildus sākumā tiek pievienots datums un laiks, ja tas tiek padots,
kas ir daļa no metadatiem.
],
[
+ Jautājumu saraksts;
+ Datums un laiks;
],
[
+ Iegūst konfigurācijas vērtības, kas nosaka cik plats ir tabulācijas simbols
un kāds ir maksimāls rindiņas platums pirms tiek veidots jaunās rindas simbols;
// TODO: define datetime format
+ Ja datums un laiks ir padots, pievieno datumu un laiku atbilsoši formātam;
+ Katram jautājumam veic sekojošo:
+ Pievieno jautājuma sākumu (jeb priekšu) ar intervāla skaitli, ja tāds ir;
+ Pievieno apakšpunktus atbilstoši tā veidam;
+ Vairāki apakšpunkti ar "-" -- atbilžu jautājums;
+ Vairāki apakšpunkti ar "+" -- izvēles jautājums;
+ Vairāki apakšpunkti ar "-^" -- izvēles jautājums;
+ Vairāki apakšpunkti, kas beidzas ar ":", kam seko apakšpunkti ar "-";
+ Veidojot jautājumus ievēro iegūtās konfigurācijas vērtības;
],
[
+ Simbolu virkne;
],
) <PR02>
=== Atmiņas bāzes modulis
Atmiņas bāze ir direktorijs ar atmiņas kartīšu failiem.
Modulis atbild par mijiedarbību ar atmiņas šiem failiem un atmiņas
kartīšu prezentēšanu.
#figure(
caption: "Atmiņas bāzes moduļa 2.līmeņa datu plūsmas diagramma",
placement: auto,
image("img/ABDPD2.svg"),
) <abdpd2>
#pagebreak(weak:true)
#function-table(
"Kartīšu faila ielāde",
"AB01",
[
Funkcija apstrādā faila saturu. Iegūstot objektus ar jautājum dati
Funkcija apstrādā faila saturu. Iegūstot objektus ar jautājumu dati
un ar to saistītiem metadatiem. Ieejas failam jāatbilst valodas
specifikācijai.
],
[
+ Ievades fails ar noteiktu paplašinājumu;
+ Ievades faila ceļš ar noteiktu paplašinājumu;
],
[
+ Faila saturs tiek ielādēts atmiņā;
+ Saturs tiek pārveidots reprezentācijā;
+ Faila saturs tiek validēts pēc satura, iekļaujot pārbaudes uz
+ Faila saturs tiek ielādēts atmiņā:
+ Ja faila ielāde ir neveiksmīga, parāda 1. paziņojumu.
+ Tiek nolasīts datums un laiks no faila sākuma, ja tāds eksistē:
+ Ja datuma un laika formāts nav korekts, parāda 2. paziņojumu
ar atbilsošu iemeslu un kļūdas pazīmi, beidz apstrādi.
+ Tiek iegūti jautājuma objekti, izmantojot procedūru #link(<PR01>)[PR01]\;
+ Ja radās kļūda, parāda 2. paziņojumu ar kļūdas informāciju, beidz
apstrādi.
+ Ja kādā no apstrādes posmiem radās kļūda, parāda 2. paziņojumu
ar atbilstošu iemeslu un kļūdas pozīciju, beidz apstrādi.
],
[
+ Saraksts ar jautājumiem;
+ Faila reģistrēts datums un laiks;
],
[
+ Transpilācijas kļūda: [kļūdas rinda]:[kļūdas kolonna];
+ Ielādes kļūda: neizdevās atvert failu;
+ Ielādes kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna];
],
) <AB01>
#pagebreak(weak:true)
#function-table(
"Kartīšu saraksta lappušu izveidošana",
"AB02",
[
Funkcija izveido vairākas lappuses, sadalot atmiņā esošus jautājumu
objektus intervālos. Lappušu izmērs ir noteikts ar konfigurācijas
parametrus.
],
[
+ Jautājumu objektu saraksts;
],
[
+ No konfigurācijas tiek iegūts jautājumu skaits lappusē, un rādāmo lappušu
pogu skaits;
+ Jautājumi tiek sadalīti lappusēs, veidojot lappušu objektus, katrā tiek
ievietotas references uz jautājumiem. Lappušu pogu skaits atbilst
konfigurācijas vērtībai;
],
[
+ Lappušu objektu saraksts;
],
[
Funkcijai nav paziņojumu.
],
) <AB02>
#function-table(
"Atmiņas bāzes lappuses iegūšana",
"AB03",
[
Funkcija iegūst jautājumu objektu intervālu
no pagaidu glabātuves.
],
[
+ Lappuses numurs;
],
[
],
[
],
[
],
) <AB03>
#function-table(
"Kartīšu pievienošana",
"AB04",
[
Funkcija pieņem lietotāja ievadīto tekstu un pārveido to jautājumu
objektos, kas pievieno tos jau esošiem jautājumiem.
],
[
+ Simbolu virkne;
],
[
+ Ja ievadīts teksts, parāda 1. paziņojumu, beidz apstrādi;
+ Apstrādā simbolu virkni, izmantojot #link(<PR01>)[PR01]\;
+ Ja tiek izvadīta kļūda, parāda 2. paziņojumu ar kļūdas informāciju,
beidz apstrādi;
],
[
Izvades jautājuma objekti tiek pievienoti jautājumu pagaidu
glabātuvē.
Saskarnē parādās indikators, ka atmiņas kartīšu fails tika izmainīts.
+ Lappušu objektu saraksts;
],
[
+ Nav ievadīts neviens jautājums;
+ Ielādes kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna];
],
) <AB04>
#function-table(
"Kartītes pirmteksta iegūšana",
"AB05",
[
Funkcija iegūst kartītes pirmtekstu, kas atbilst valodas specifikācijai.
Funkcija ir specializēts procedūras izmantošanas gadījums, kurā tiek
detranspilēts tikai viens jautājums.
Funkcija ir izmantota redigēšanas iespējai.
],
[
+ Jautājuma objekts;
],
[
+ Izmantojot procedūru #link(<PR01>)[PR01], jautājums tiek detranspilēts
pirmtekstā\;
],
[
+ Simbolu virkne -- jautājuma pirmteskts;
],
[
Funkcijai nav paziņojumu.
Saskarnē parādās indikators, ka atmiņas kartīšu fails tika izmainīts.
],
) <AB05>
#function-table(
"Kartītes redigēšana",
"AB06",
[
Funkcija izmaina esošo jautājumu, pēc to pirmteksta, kas atbilst
valodas specifikācijai.
],
[
+ Jautājuma objekts;
+ Jautājuma pirmteksts;
],
[
+ Ja ievades teksts ir tukšs, parāda 1. paziņojumu, beidz apstrādi;
+ Izmantojot #link(<PR01>)[PR01], tiek iegūts jautājuma objekts no sniegtā
pirmteksta;
+ Ja tiek izvadīta kļūda, parāda 1. paziņojumu ar atbilstošu kļūdas informāciju,
beidz apstrādi;
+ Padotais jautājuma objekts tiek atjaunots ar iegūta objekta datiem;
],
[
+ Jautājuma objekts;
],
[
Izvades jautājuma objekts tiek atjaunots atbilsošam ierakstu jautājumu pagaidu
glabātuvē.
Saskarnē parādās indikators, ka atmiņas kartīšu fails tika izmainīts.
+ Nav ievadīts neviens jautājums;
+ Redigēšanas kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna];
],
) <AB06>
#function-table(
"Kartītes dzēšana",
"AB07",
[
Funkcija izdēš kartīti no pagaidu glabātuves.
],
[
+ Jautājuma reference;
],
[
+ Jautājums tiek sameklēts un izdzēsts;
],
[
Funkcijai nav izvades.
],
[
Funkcijai nav paziņojumu.
],
) <AB07>
#function-table(
"Kartītes faila saglabāšana",
"AB08",
[
Funkcija saglabā kartīšu jautājumus un metadatus tam atbilstošā
failā, pārveidojot tos valodai atbilstošā formātā.
],
[
+ Faila atrašanās ceļš;
+ Jautājumu saraksts;
+ Datums un laiks;
],
[
+ Iegūst pirmtekstu padotajiem objektiem, izmantojot procedūru #link(<PR02>)[PR02]\;
+ Ja tiek izvadīta kļūda, parāda 2. paziņojumu ar kļūdas informāciju, beidz apstrādi;
+ Izveido vai atver failu padotā ceļā;
+ Ja atveršana vai izveidošana neizdevās, parāda 1. paziņojumu;
+ Pievienot iegūto saturu failam un saglabā to;
],
[
Fails tiks atjaunots failu sistēmā.
Saskarnē pazūd indikators, ka atmiņas kartīšu fails tika izmainīts.
],
[
+ Neizdevās atvērt vai izveidot atmiņas kartīšu failu;
+ Redigēšanas kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna];
],
) <AB08>
=== Mācīšanās modulis
Mācīšanās risinājuma kontekstā ir kartīšu prezentēšana ar interaktīvu atbildes
@@ -293,6 +628,143 @@ funkcionalitāti, atbilsoši atmiņas kartītes tipam.
image("img/MADPD2.svg"),
) <madpd2>
#pagebreak(weak: true)
#function-table(
"Nākamās kartītes noteikšana",
"MA01",
[
Funkcija nosaka nākamo kartīti, kas tiks parādīta lietotājam
mācīšanas procesā. Kartīšu secību nosaka mācīšanās algoritms.
],
[
+ Pašreizējais kartīte -- kartītes objekts;
+ Algoritms -- viens no vertībām: "fizisks", "nejaušs", "intervālu"\;
],
[
+ Ja pagaidu kartīšu glabāvē nav nevienas kartītes, beidz apstrādi, neatgriežot
kartīti;
+ Ja padotais algoritms ir "fizisks";
+ Ja pašreizējā kartīte ir padota, izvēlās nākamo kartīti starp pagaidu
kartīšu glabātuves;
+ Citādi izvēlas pirmo kartīti no pagaidu kartīšu glabātuves;
+ Ja padotais algoritms ir "nejaušs";
+ Izvēlas nākamo kartīti nejaušā kārtībā starp pagaidu kartīšu glabātuves;
+ Ja padotais algoritms ir "intervālu";
+ No pagaidu kartīšu glabātuves izvēlas tikai to, kur nav norādīts intervāls
vai intervāls ir 0;
+ No šī saraksta izvēlas nākamo kartīti nejaušā kārtībā;
],
[
// Add null explanation
+ Nākamās kartītes objekts (iespējams nulles objekts);
],
[
Funkcijai nav paziņojumu.
],
) <MA01>
#function-table(
"Izvēles kartītes pārbaude",
"MA02",
[
Veic jautājuma atbildes pārbaudi izvēles kartītes jautājuma veidam.
],
[
+ Izvēlēto atbilžu simbolu virkņu saraksts ar pazīmi, vai atbilde ir izvēlēta;
+ Izvēles jautājuma objekts;
],
[
+ Izskata abus sarakstus paralēli;
+ Ja atbildes un jautājuma objektu izvēles elementa pazīmes sakrīt
(piemēram, "pareizs" un "pareizs");
+ Atbilžu elementam uzstāda pareizuma pazīmi kā "pareizs";
+ Citādi uzstāda atbildes pareizuma atbildi kā "nepareizs";
],
[
+ Izvēlēto atbilžu simbolu virkņu saraksts ar pareizuma karodziņu vērtībām;
],
[
Funkcijai nav paziņojumu.
],
) <MA02>
#function-table(
"Kārtošanas kartītes pārbaude",
"MA03",
[
Veic jautājuma atbildes pārbaudi kārtošanas kartītes jautājuma veidam.
],
[
- Atbilžu simbolu virkņu saraksts;
- Jautājuma objekts;
],
[
+ Izskata abus sarakstus paralēli;
+ Ja atbildes un jautājuma objektu izvēles elementa sakrīt, atbilžu
elementam uzstāda pareizuma pazīmi kā "pareizs";
+ Citādi uzstāda atbildes pareizuma atbildi kā "nepareizs";
],
[
+ Atbilžu simbolu virkņu saraksts ar pareizuma karodziņu vērtībām;
],
[
Funkcijai nav paziņojumu.
],
) <MA03>
#function-table(
"Grupēšanas kartītes pārbaude",
"MA04",
[
Veic jautājuma atbildes pārbaudi grupēšanas kartītes jautājuma veidam.
],
[
- Negrupēto elementu simbolu virkņu saraksts;
- Grupētu simbolu virkņu sarakstu saraksts;
- Jautājuma objekts;
],
[
+ Katram nesagrupētam elementam uzstāda pareizuma pazīmi uz "nepareizs";
+ Katru grupai atbilžu un jautājuma objekta saraksta grupu izskata paralēli;
+ Elementiem, kas sakrīt abos sarakstos, atbilžu sarakstā uzstāda pareizuma
pazīmi uz "pareizs";
+ Elementiem, kas nav jautājuma atbildes grupā pareizuma pazīmi uz "nepareizs";
],
[
+ Negrupēto elementu simbolu virkņu saraksts ar pareizuma karodziņu vērtībām;
+ Grupētu simbolu virkņu sarakstu saraksts ar pareizuma karodziņu vērtībām;
],
[
Funkcijai nav paziņojumu.
],
) <MA04>
#function-table(
"Intervāla grupas atbildes sniegšana",
"MA05",
[
Izmaina jautājuma objektu atbilstoši izvēlētam grūtības vai izpuldījuma
vērējumam veicot kartītes atbildi. Atbilstošie intervāli tiek iegūti no
konfigurācijas.
],
[
+ Intervāla atbilde -- viens no: "nav atbildēts", "grūti", "vidēji",
"viegli", "ļoti viegli";
+ Jautājuma objekts;
],
[
+ No konfigurācijas glabātuves tiek iegūts intervāls, kas atbilst sniegtai
atbildei;
+ Jautājumam tiek uzstādīts intervāls;
],
[
+ Izmainīts jautājuma objekts;
],
[
Funkcijai nav paziņojumu.
],
) <MA05>
=== Konfigurācijas modulis
Konfigurācijas modulis iekļauj parametrus, ko var personalizēt
@@ -305,6 +777,54 @@ saistībā ar mācīšanās procesu, prezentāciju uc.
) <kfdpd2>
#function-table(
"Konfigurācijas vērtības iegūšana",
"KF01",
[
Funkcijas iegūst vienu definēo konfigurācijas vērtību.
],
[
],
[
],
[
],
[
],
) <KF01>
#function-table(
"Konfigurācijas vērtību iegūšana",
"KF02",
[
Funkcija iegūst visas definētās konfigurācijas vērtības.
],
[
],
[
],
[
],
[
],
) <KF02>
#function-table(
"Konfigurācijas vērtības izmaiņa",
"KF03",
[
Funkcija izmaina vērtību no definētām konfigurācijas vērtībām.
],
[
],
[
],
[
],
[
],
) <KF03>
#pagebreak(weak: true)
= Programmatūras projektējuma apraksts