mirror of
https://github.com/kristoferssolo/Qualification-Thesis.git
synced 2025-10-21 20:10:37 +00:00
feat: add tests images
This commit is contained in:
parent
2721ef6034
commit
c4bbd7c88c
BIN
assets/images/tests/hexlab-full.png
Normal file
BIN
assets/images/tests/hexlab-full.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
BIN
assets/images/tests/hexlab-minimized.png
Normal file
BIN
assets/images/tests/hexlab-minimized.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
BIN
assets/images/tests/tarpaulin/hexlab.png
Normal file
BIN
assets/images/tests/tarpaulin/hexlab.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
27
attachments.typ
Normal file
27
attachments.typ
Normal file
@ -0,0 +1,27 @@
|
||||
#import "@preview/i-figured:0.2.4"
|
||||
|
||||
#heading("Pielikumi", numbering: none)
|
||||
#set figure(numbering: "1")
|
||||
#set figure(kind: "attachment", supplement: "pielikums")
|
||||
|
||||
#figure(
|
||||
caption: [Pilns "hexlab" bibliotēkas testu rezultāts],
|
||||
image("assets/images/tests/hexlab-full.png", height: 90%),
|
||||
) <tests-hexlab-full>
|
||||
|
||||
|
||||
#figure(
|
||||
caption: [Tarpaulin rīka rezultāts "hexlab" bibliotēkai],
|
||||
image("assets/images/tests/tarpaulin/hexlab.png"),
|
||||
) <tarpaulin-hexlab>
|
||||
|
||||
|
||||
#figure(
|
||||
caption: [Tokei rīka rezultāts "Maze Ascension" spēlei],
|
||||
image("assets/images/tokei/maze-ascension.png"),
|
||||
) <tokei-maze-ascension>
|
||||
|
||||
#figure(
|
||||
caption: [Tokei rīka rezultāts "hexlab" bibliotēkai],
|
||||
image("assets/images/tokei/hexlab.png"),
|
||||
) <tokei-hexlab>
|
||||
42
layout.typ
42
layout.typ
@ -1,6 +1,6 @@
|
||||
#import "@preview/i-figured:0.2.4"
|
||||
#import "@preview/tablex:0.0.9": tablex
|
||||
#import "@preview/pintorita:0.1.3"
|
||||
#import "@preview/headcount:0.1.0": *
|
||||
|
||||
#let indent = 1cm
|
||||
|
||||
@ -45,6 +45,16 @@
|
||||
|
||||
show math.equation: set text(weight: 400)
|
||||
|
||||
|
||||
// replace `.` with `,`
|
||||
show math.equation: it => {
|
||||
show regex("\d+\.\d+"): num => {
|
||||
show ".": math.class("normal", ",")
|
||||
num
|
||||
}
|
||||
it
|
||||
}
|
||||
|
||||
// Formatting for regular text
|
||||
set par(
|
||||
justify: true,
|
||||
@ -167,10 +177,12 @@
|
||||
/* --- Figure/Table config start --- */
|
||||
show heading: i-figured.reset-counters
|
||||
show figure: i-figured.show-figure.with(numbering: "1.1.")
|
||||
set figure(numbering: dependent-numbering("1.1"))
|
||||
set figure(placement: none)
|
||||
|
||||
show figure.where(kind: "i-figured-table"): set block(breakable: true)
|
||||
show figure.where(kind: "i-figured-table"): set figure.caption(position: top)
|
||||
show figure.where(kind: "attachment"): set figure.caption(position: top)
|
||||
|
||||
show figure: set par(justify: false) // disable justify for figures (tables)
|
||||
show figure.where(kind: table): set par(leading: 1em)
|
||||
@ -196,6 +208,12 @@
|
||||
),
|
||||
)
|
||||
}
|
||||
if it.kind == "i-figured-\"attachment\"" {
|
||||
return align(
|
||||
end,
|
||||
it.counter.display() + ". pielikums. " + text(it.body),
|
||||
)
|
||||
}
|
||||
it
|
||||
}
|
||||
|
||||
@ -227,8 +245,10 @@
|
||||
let supplement_map = (
|
||||
i-figured-table: "tab.",
|
||||
i-figured-image: "att.",
|
||||
attachment: "pielikums",
|
||||
)
|
||||
|
||||
|
||||
// Get the supplement value properly
|
||||
let supplement = if type(it.supplement) != function {
|
||||
it.supplement
|
||||
@ -239,15 +259,23 @@
|
||||
""
|
||||
}
|
||||
}
|
||||
|
||||
let number = if kind == "attachment" {
|
||||
numbering(
|
||||
el.numbering,
|
||||
..counter(figure.where(kind: kind)).at(el.location()),
|
||||
) + "." // Only add dot for attachments
|
||||
} else {
|
||||
numbering(
|
||||
el.numbering,
|
||||
..counter(figure.where(kind: kind)).at(el.location()),
|
||||
) // No extra dot for tables and images
|
||||
}
|
||||
|
||||
// Create counter based on the kind
|
||||
return link(
|
||||
el.location(),
|
||||
numbering(
|
||||
el.numbering,
|
||||
..counter(figure.where(kind: kind)).at(
|
||||
el.location(),
|
||||
),
|
||||
) + if supplement != "" {
|
||||
number + if supplement != "" {
|
||||
" " + supplement
|
||||
} else {
|
||||
""
|
||||
|
||||
186
main.typ
186
main.typ
@ -1801,10 +1801,152 @@ Integrācijas testēšana ir veikta manuāli, mijiedarboties ar spēles saskarni
|
||||
Katrs testa scenārijs ir dokumentēta strukturētas tabulas formātā, ievērojot
|
||||
būtisku informāciju, piemēram, test nosaukumu, unikālo identifikatoru, aprakstu,
|
||||
izpildes soļus, gaidāmo rezultātu un faktisko rezultātu (veiksmīga testa
|
||||
gadījumā apzīmēts ar "Ok", bet neveiksmīgu -- ar "Err").
|
||||
Izvēlētie testu gadījumi ir detalizēti aprakstīti #todo("attiecīgā tabula") tabulā.
|
||||
gadījumā apzīmēts ar "Ok", bet neveiksmīgu -- "Err").
|
||||
Izvēlētie testu gadījumi ir detalizētāk aprakstīti @tbl:manual-tests[tabulā].
|
||||
|
||||
#todo("add tests table")
|
||||
|
||||
#figure(
|
||||
caption: "Manuālā testēšana",
|
||||
kind: table,
|
||||
tablex(
|
||||
columns: (3.5em, 6em, auto, auto, 5.5em),
|
||||
[*Testa ID*],
|
||||
[*Testa nosaukums*],
|
||||
[*Soļi*],
|
||||
[*Sagaidāmais rezultāts*],
|
||||
[*Faktiskais rezultāts*],
|
||||
"MT01",
|
||||
"Spēles palaišana",
|
||||
[
|
||||
+ Palaist spēli
|
||||
+ Gaidīt ielādi
|
||||
],
|
||||
[Parādās galvenā izvēlne ar "Play" pogu.],
|
||||
"Ok",
|
||||
"MT02",
|
||||
"Labirinta ģenerēšana",
|
||||
[
|
||||
+ Palaist spēli
|
||||
+ Nospiest "Play" pogu
|
||||
+ Gaidīt ielādi
|
||||
],
|
||||
[Tiek uzģenerēts sešstūrains labirints ar sienām.],
|
||||
"Ok",
|
||||
"MT03",
|
||||
"Stāvu pāreja (uz augšu)",
|
||||
[
|
||||
+ Nokļūt līdz beigu šūnai
|
||||
+ Novērot animāciju
|
||||
],
|
||||
[
|
||||
+ Plūstoša pāreja starp stāviem uz augšu
|
||||
+ Jauna stāva ģenerēšana
|
||||
],
|
||||
"Ok",
|
||||
"MT04",
|
||||
"Stāvu pāreja (uz leju)",
|
||||
[
|
||||
+ Nokļūt līdz sākuma šūnai
|
||||
+ Novērot animāciju
|
||||
],
|
||||
[
|
||||
+ Plūstoša pāreja starp stāviem uz leju
|
||||
+ Jauns stāvs netiek ģenerēts
|
||||
],
|
||||
"Ok",
|
||||
"MT05",
|
||||
"Papildspēju aktivizēšana",
|
||||
[
|
||||
+ Aktivizēt papildspēju
|
||||
+ Gaidīt atjaunošanās laiku
|
||||
],
|
||||
[
|
||||
+ Papildspēja aktivizējas
|
||||
+ Sākas atjaunošanās laiks
|
||||
],
|
||||
"Err",
|
||||
"MT06",
|
||||
"Izstrādes rīku atvēršana",
|
||||
[
|
||||
+ Palaist spēli izstrādes režīmā
|
||||
+ Nospiest "Play" pogu
|
||||
],
|
||||
[Parādās "egui" panelis ar labirinta konfigurācijas opcijām],
|
||||
"Ok",
|
||||
"MT07",
|
||||
[Labirinta parametru maiņa],
|
||||
[
|
||||
+ Atvērt "egui" paneli
|
||||
+ Mainīt labirinta izmēru un citus parametrus
|
||||
],
|
||||
[Tiek ģenerēts jauns labirints ar mainītajiem parametriem],
|
||||
"Ok",
|
||||
"MT08",
|
||||
[Spēlētāja kustība],
|
||||
[
|
||||
+ Izmantot WASD vadību
|
||||
+ Mēģināt šķērsot sienas
|
||||
],
|
||||
[
|
||||
+ Plūstoša kustība brīvajā telpā
|
||||
+ Sadursmes ar sienām strādā
|
||||
],
|
||||
"Ok",
|
||||
"MT09",
|
||||
[Windows palaišana],
|
||||
[
|
||||
+ Kompilēt spēli Windows platformai
|
||||
+ Palaist .exe failu
|
||||
+ Veikt pamata funkcionalitātes testu
|
||||
],
|
||||
[Spēle darbojas Windows vidē bez kļūdām],
|
||||
"Ok",
|
||||
"MT10",
|
||||
[Linux palaišana],
|
||||
[
|
||||
+ Kompilēt spēli Linux platformai
|
||||
+ Palaist bināro failu
|
||||
+ Veikt pamata funkcionalitātes testu
|
||||
],
|
||||
[Spēle darbojas Linux vidē bez kļūdām],
|
||||
"Ok",
|
||||
"MT11",
|
||||
[macOS palaišana],
|
||||
[
|
||||
+ Kompilēt spēli macOS platformai
|
||||
+ Palaist .dmg pakotni
|
||||
+ Veikt pamata funkcionalitātes testu
|
||||
],
|
||||
[Spēle darbojas macOS vidē bez kļūdām],
|
||||
"Err",
|
||||
"MT12",
|
||||
[WASM palaišana],
|
||||
[
|
||||
+ Kompilēt spēli WASM mērķim
|
||||
+ Atvērt pārlūkā
|
||||
+ Veikt pamata funkcionalitātes testu
|
||||
],
|
||||
[
|
||||
+ Spēle ielādējas pārlūkā
|
||||
+ Darbojas visas pamatfunkcijas
|
||||
],
|
||||
"Ok",
|
||||
),
|
||||
) <manual-tests>
|
||||
|
||||
#indent-par[
|
||||
Divi testi no manuālās testēšanas plāna netika izpildīti.
|
||||
Papildspēju tests (MT05) netika izpildīts, jo šī funkcionalitāte netika
|
||||
implementēta projekta pirmajā versijā, atstājot to kā potenciālu nākotnes
|
||||
papildinājumu.
|
||||
Savukārt macOS platformas tests (MT11) netika izpildīts
|
||||
tehnisku ierobežojumu dēļ -- projekta izstrādātājam nav pieejama Apple
|
||||
aparatūra.
|
||||
]
|
||||
|
||||
Tādējādi no divpadsmit definētajiem testiem desmit tika veiksmīgi izpildīti,
|
||||
viens netika implementēts (papildspējas), un viens tika daļēji izpildīts (macOS
|
||||
kompilēšana bez funkcionālās testēšanas).
|
||||
|
||||
=== Automatizēti testi
|
||||
|
||||
@ -1814,19 +1956,25 @@ Testēšanas stratēģijā ir ieviesti vairāki pārbaudes līmeņi: dokumentāc
|
||||
no drošina piemēra koda pareizību, moduļu testi pārbauda iekšējo
|
||||
funkcionalitāti, savukārt testu mapē esošie vienībtesti un integrācijas testi
|
||||
pārbauda sarežģītākus gadījumus.
|
||||
Izmantojot "cargo-tarpaulin", testu pārklājums ir $81,69%$ (116 no 142
|
||||
iekļautajām rindiņām), tomēr šis rādītājs pilnībā neatspoguļo faktisko
|
||||
pārklājumu, jo rīkam ir ierobežojumi attiecībā uz "inline"#footnote[https://doc.rust-lang.org/nightly/reference/attributes/codegen.html?highlight=inline]
|
||||
Automatizēto testu izpildes rezultātu kopsavilkums ir redzams
|
||||
@fig:tests-hexlab[attēlā], savukārt detalizēts testu izpildes pārskats ir
|
||||
pieejams @tests-hexlab-full[pielikumā].
|
||||
|
||||
Izmantojot "cargo-tarpaulin", testu pārklājums ir $81.69%$ (116 no 142
|
||||
iekļautajām rindiņām) (sk. @tarpaulin-hexlab[pielikumu]), tomēr šis rādītājs
|
||||
pilnībā neatspoguļo faktisko pārklājumu, jo rīkam ir ierobežojumi attiecībā uz
|
||||
"inline"#footnote[https://doc.rust-lang.org/nightly/reference/attributes/codegen.html?highlight=inline]
|
||||
funkcijām un citi tehniski ierobežojumi @cargo-tarpaulin.
|
||||
|
||||
#figure(
|
||||
caption: [Daļējs "hexlab" bibliotēkas testu rezultāts],
|
||||
image("assets/images/tests/hexlab-minimized.png"),
|
||||
)<tests-hexlab>
|
||||
|
||||
#todo("double check which tests are actually imlemented")
|
||||
Arī spēles kods saglabā stabilu testēšanas stratēģiju.
|
||||
Dokumentācijas testi tiek rakstīti tieši koda dokumentācijā, kalpojot diviem
|
||||
mērķiem -- tie pārbauda koda pareizību un vienlaikus sniedz skaidrus lietošanas
|
||||
piemērus turpmākai uzturēšanai.
|
||||
Šie testi ir īpaši vērtīgi, jo tie nodrošina, ka dokumentācija tiek sinhronizēta
|
||||
ar faktisko koda uzvedību.
|
||||
Moduļu testi ir stratēģiski izvietoti līdzās implementācijas kodam tajā pašā
|
||||
failā, nodrošinot, ka katras komponentes funkcionalitāte tiek pārbaudīta
|
||||
izolēti.
|
||||
@ -1901,12 +2049,11 @@ balstās uz $550$ verificētu programmatūras projektu datubāzi @QSM.
|
||||
Izmantojot "tokei" rīku @tokei, tika veikta detalizēta projekta koda analīze,
|
||||
kas parādija, ka "Maze Ascension" projekts satur $1927$ koda rindiņas, bet
|
||||
saistītā "hexlab" bibliotēka -- $979$ rindiņas, kopā veidojot $2906$ loģiskās koda
|
||||
rindiņas, neiekļaujot tukšās rindiņas un komentārus (sk. @fig:tokei-maze-ascension[]
|
||||
un @fig:tokei-hexlab[pielukumus]).
|
||||
|
||||
rindiņas, neiekļaujot tukšās rindiņas un komentārus (sk. @tokei-maze-ascension[]
|
||||
un @tokei-hexlab[pielikumus]).
|
||||
Saskaņā ar QSM etalontabulu "Business Systems Implementation Unit (New and
|
||||
Modified IU) Benchmarks", pirmās kvartiles projekti ($25%$ mazākie no $550$
|
||||
biznesa sistēmu projektiem) vidēji ilgst $3,2$ mēnešus, ar vidēji $1,57$
|
||||
biznesa sistēmu projektiem) vidēji ilgst $3.2$ mēnešus, ar vidēji $1.57$
|
||||
izstrādātājiem un mediāno projekta apjomu -- $1889$ koda rindiņas.
|
||||
Ņemot vērā, ka projekta autors ir students ar ierobežotu pieredzi, tiek
|
||||
izmantota pirmās kvartiles $50%$ diapazona augšējā robeža -- $466$ rindiņas
|
||||
@ -1970,19 +2117,8 @@ Projekta turpmākās attīstības iespējas ietver:
|
||||
"bibliography.yml",
|
||||
)
|
||||
|
||||
#heading("Pielikumi", numbering: none)
|
||||
#figure(
|
||||
caption: [Tokei rīka rezultāts "Maze Ascension" spēlei],
|
||||
image("assets/images/tokei/maze-ascension.png"),
|
||||
) <tokei-maze-ascension>
|
||||
|
||||
#figure(
|
||||
caption: [Tokei rīka rezultāts "hexlab" bibliotēkai],
|
||||
image("assets/images/tokei/hexlab.png"),
|
||||
) <tokei-hexlab>
|
||||
|
||||
#include "attachments.typ"
|
||||
// #include "code.typ"
|
||||
|
||||
#include "doc.typ"
|
||||
|
||||
#pagebreak()
|
||||
|
||||
95
utils.typ
95
utils.typ
@ -142,54 +142,6 @@
|
||||
)
|
||||
}
|
||||
|
||||
#let entity-table(
|
||||
caption: "",
|
||||
id: (),
|
||||
..items,
|
||||
) = {
|
||||
if id == () {
|
||||
id = (
|
||||
"id",
|
||||
"serial8",
|
||||
"primary key, not null",
|
||||
"Unikālais identifikators",
|
||||
)
|
||||
}
|
||||
|
||||
return figure(
|
||||
caption: caption,
|
||||
kind: table,
|
||||
tablex(
|
||||
columns: (4cm, 3cm, auto, auto),
|
||||
repeat-header: true,
|
||||
/* Header */
|
||||
[*Lauks*],
|
||||
[*Datu tips*],
|
||||
[*Lauka atribūti*],
|
||||
[*Apraksts*],
|
||||
|
||||
..entity-table-row(..id), // id row
|
||||
|
||||
..for i in range(items.pos().len(), step: 4) {
|
||||
entity-table-row(..items.pos().slice(i, i + 4))
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
#let hyperlink-source(
|
||||
author,
|
||||
title,
|
||||
link_str,
|
||||
date,
|
||||
) = {
|
||||
if link_str == "" {
|
||||
[#author #title Aplūkots #date.display("[day].[month].[year]")]
|
||||
} else {
|
||||
[#author #title Pieejams: #link(link_str) aplūkots #date.display("[day].[month].[year]")]
|
||||
}
|
||||
}
|
||||
|
||||
#let codeblock(filename, lang) = {
|
||||
raw(
|
||||
read(filename),
|
||||
@ -198,10 +150,6 @@
|
||||
)
|
||||
}
|
||||
|
||||
#let red(body) = {
|
||||
text(body, fill: rgb(255, 0, 0))
|
||||
}
|
||||
|
||||
#let components-table(
|
||||
caption: str,
|
||||
..body,
|
||||
@ -252,3 +200,46 @@
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
#let test-table(
|
||||
caption: "",
|
||||
..items,
|
||||
) = {
|
||||
if caption == "" {
|
||||
caption = items.pos().first()
|
||||
}
|
||||
return longtable(
|
||||
titles: (
|
||||
"Testa gadījuma nosaukums",
|
||||
"Testa identifikators",
|
||||
"Apraksts",
|
||||
"Soļi",
|
||||
"Sagaidāmais rezultāts",
|
||||
"Faktiskais rezultāts",
|
||||
),
|
||||
caption: caption,
|
||||
..items,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
#let entity-table-row(
|
||||
..items,
|
||||
) = {
|
||||
(
|
||||
items.pos().at(0),
|
||||
upper(
|
||||
raw(
|
||||
items.pos().at(1),
|
||||
block: false,
|
||||
),
|
||||
),
|
||||
upper(
|
||||
raw(
|
||||
items.pos().at(2),
|
||||
block: false,
|
||||
),
|
||||
),
|
||||
items.pos().at(3),
|
||||
)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user