aboutsummaryrefslogtreecommitdiff
path: root/docs/fat.adoc
blob: 29622e21f05d7f49eda24df63db98017080b8665 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
:document: Factory Acceptance Test
include::share/meta.adoc[]

== Introduction
// TODO: Make an intro

=== Compatibility matrix
[cols="1,9*^", options="header"]
|===
| Requirement \\ Test | T-01 | T-02 | T-03 | T-04 | T-05 | T-06 | T-07 | T-08 | T-09

| xref:reqs.adoc#R-001[R-001] | xref:#Test-01[✓] |   |   |   |   |   |   |   |  
| xref:reqs.adoc#R-002[R-002] | xref:#Test-01[✓] |   |   |   |   |   |   |   |  
| xref:reqs.adoc#R-003[R-003] | xref:#Test-01[✓] |   |   |   |   |   |   |   |  
| xref:reqs.adoc#R-004[R-004] | xref:#Test-01[✓] |   |   |   |   |   |   |   |  
| xref:reqs.adoc#R-005[R-005] | xref:#Test-01[✓] |   |   |   |   |   |   |   |  
| xref:reqs.adoc#R-034[R-034] | xref:#Test-01[✓] |   |   |   |   |   |   |   |  
| xref:reqs.adoc#R-036[R-036] |   | xref:#Test-02[✓] |   |   |   |   |   |   |  
| xref:reqs.adoc#R-037[R-037] |   | xref:#Test-02[✓] |   |   |   |   |   |   |  
| xref:reqs.adoc#R-038[R-038] |   | xref:#Test-02[✓] |   |   |   |   |   |   |  
| xref:reqs.adoc#R-166[R-166] |   | xref:#Test-02[✓] |   |   |   |   |   |   |  
| xref:reqs.adoc#R-169[R-169] |   | xref:#Test-02[✓] |   |   |   |   |   |   |  
| xref:reqs.adoc#R-075[R-075] |   |   | xref:#Test-03[✓] |   |   |   |   |   |  
| xref:reqs.adoc#R-076[R-076] |   |   | xref:#Test-03[✓] |   |   |   |   |   |  
| xref:reqs.adoc#R-081[R-081] |   |   | xref:#Test-03[✓] |   |   |   |   |   |  
| xref:reqs.adoc#R-085[R-085] |   |   |   | xref:#Test-04[✓] |   |   |   |   |  
| xref:reqs.adoc#R-087[R-087] |   |   |   | xref:#Test-04[✓] |   |   |   |   |  
| xref:reqs.adoc#R-150[R-150] |   |   |   |   | xref:#Test-05[✓] |   |   |   |  
| xref:reqs.adoc#R-082[R-082] |   |   |   |   | xref:#Test-05[✓] |   |   |   |  
| xref:reqs.adoc#R-083[R-083] |   |   |   |   | xref:#Test-05[✓] |   |   |   |  
| xref:reqs.adoc#R-084[R-084] |   |   |   |   | xref:#Test-05[✓] |   |   |   |  
| xref:reqs.adoc#R-167[R-167] |   |   |   |   |   | xref:#Test-06[✓] |   |   |  
| xref:reqs.adoc#R-168[R-168] |   |   |   |   |   | xref:#Test-06[✓] |   |   |  
| xref:reqs.adoc#R-027[R-027] |   |   |   |   |   |   | xref:#Test-07[✓] |   |  
| xref:reqs.adoc#R-048[R-048] |   |   |   |   |   |   |   | xref:#Test-08[✓] |  
| xref:reqs.adoc#R-049[R-049] |   |   |   |   |   |   |   | xref:#Test-08[✓] |  
| xref:reqs.adoc#R-050[R-050] |   |   |   |   |   |   |   | xref:#Test-08[✓] |  
| xref:reqs.adoc#R-051[R-051] |   |   |   |   |   |   |   | xref:#Test-08[✓] |  
| xref:reqs.adoc#R-052[R-052] |   |   |   |   |   |   |   | xref:#Test-08[✓] |  
| xref:reqs.adoc#R-053[R-053] |   |   |   |   |   |   |   | xref:#Test-08[✓] |  
| xref:reqs.adoc#R-089[R-089] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-090[R-090] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-091[R-091] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-127[R-127] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-128[R-128] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-129[R-129] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-134[R-134] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-135[R-135] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
| xref:reqs.adoc#R-165[R-165] |   |   |   |   |   |   |   |   | xref:#Test-09[✓] 
|===

=== Neotrellis-puzzle

[#Test-01]
==== Test 01

===== Covered requirements
* Technical requirements
** xref:reqs.adoc#R-034[R-034] (neotrellis function & Arduino init.)
* Functional requirements
** *None*

===== Additional setup
*None*

===== Test
. Turn both the Arduino and the neotrellis modules on

===== Result
* [ ] Verify that the neotrellis modules emit light in different colors (init. state).

[#Test-02]
==== Test 02

===== Covered requirements
* Technical requirements
** xref:reqs.adoc#R-166[R-166] (Arduino & RPI Pico I²C communication)
** xref:reqs.adoc#R-169[R-169] (Arduino & neotrellis I²C communication)
* Functional requirements
** xref:reqs.adoc#R-036[R-036] (game logic)
** xref:reqs.adoc#R-037[R-037] (neotrellis led color)
** xref:reqs.adoc#R-038[R-038] (game d.o.d.)

===== Additional setup
* [ ] Connect the Arduino to the maincontroller (RPI Pico) using the I²C interface, pull-up resistors and a common ground.

===== Test
. Turn both the Arduino and the neotrellis modules on.
. Wait for a few seconds.
. Turn the RPI Pico on.
. Wait for another few seconds.
. Play the game until you have succeeded.

===== Result
* [ ] Verify that the puzzle module tries to communicate with the maincontroller.
* [ ] Verify that a light should be blinking on one of the neotrellis modules.
* [ ] Press one of the emitting buttons and check if the buttons surrounding it will light
* [ ] Play the game until no buttons emit light anymore and check if the main controllers wants to load the next puzzle.

=== Vault-puzzle

[#Test-03]
==== Test 03

===== Covered requirements
* Technical requirements
** xref:reqs.adoc#R-151[R-151] (4x 7-seg. type & connection)
* Functional requirements
** xref:reqs.adoc#R-075[R-075] (4x 7-seg. availability)
** xref:reqs.adoc#R-076[R-076] (ventilation)
** xref:reqs.adoc#R-081[R-081] (4x 7-seg. operation)

===== Additional setup
* [ ] Connect the Arduino to the maincontroller (RPI Pico) using the I²C interface, pull-up resistors and a common ground.

===== Test
. Turn the Arduino on.
. Wait for a few seconds.
. Turn the RPI Pico on.
. Wait until the Arduino is in its init. state.

===== Result
* [ ] Verify that there is a 4x 7-seg. display and working.
* [ ] Verify that the puzzle module tries to communicate with the maincontroller
* [ ] Check if after the unit. state (blinking zero's) there is a letter and number displayed on the 4x 7 seg. display.

[#Test-04]
==== Test 04

===== Covered requirements
* Technical requirements
** *None*
* Functional requirements
** xref:reqs.adoc#R-085[R-085] (4x 7-seg. operation by passing the game)
** xref:reqs.adoc#R-087[R-087] (4x 7-seg. operation by failing the game)

===== Additional setup
*None*

===== Test
. Turn the Arduino on.
. Wait for a few seconds.
. Turn the RPI Pico on.
. Play the game correctly for 2 levels.
. Play one level incorrectly.

===== Result
* [ ] Verify a new code is generated each time you level-up
* [ ] Verify that an older code is presented each time you level-down

[#Test-05]
==== Test 05

===== Covered requirements
* Technical requirements
** xref:reqs.adoc#R-150[R-150] (button matrix)
* Functional requirements
** xref:reqs.adoc#R-082[R-082] (game logic: leveling)
** xref:reqs.adoc#R-083[R-083] (game logic: level)
** xref:reqs.adoc#R-084[R-084] (game logic: succeeding level)

===== Additional setup
* Connect the vault solenoid valve to the Arduino using a MOSFET or other type of driver.

===== Test
. Turn the Arduino on.
. Wait for a few seconds.
. Turn the RPI Pico on.
. Play the game correctly until you reach the end of the game.

===== Result
* [ ] Verify that at the last level a code should be displayed that can be used to disarm the "bomb".
* [ ] Check if the vault itself will unlock and lock again after the game is reset.

=== Puzzle Box Requirements

[#Test-06]
==== Puzzle Box Basic Setup and Verification

===== Covered requirements
* Functional requirements
** xref:reqs.adoc#R-1[R-1] (Puzzle box dimensions)
** xref:reqs.adoc#R-2[R-2] (Extension on the sides and top)
** xref:reqs.adoc#R-3[R-3] (Flat bottom)
** xref:reqs.adoc#R-4[R-4] (Key switch at the bottom of the NeoTrellis puzzle)
** xref:reqs.adoc#R-5[R-5] (Indicator LED at the bottom of the NeoTrellis puzzle)

===== Additional setup
* [ ] Measure the dimensions of the puzzle box to ensure compliance with R-1.
* [ ] Inspect the physical structure for extensions beyond specified limits.
* [ ] Confirm flatness of the bottom surface.
* [ ] Locate and identify the key switch and indicator LED as per design specifications.

===== Test
. Measure and record the dimensions of the puzzle box.
. Examine the extensions, if any, on the sides and top of the box.
. Test the flatness of the bottom of the box.
. Verify the functionality of the key switch.
. Check the initial state of the indicator LED when power is supplied to the puzzle box.

===== Result
* [ ] Puzzle box dimensions are within the specified range of 30x30x30 cm ± 5%.
* [ ] No excess extension beyond 5 cm on any side or the top.
* [ ] The bottom of the puzzle box is confirmed flat.
* [ ] The key switch operates as intended.
* [ ] The indicator LED functions correctly and is visible.

=== Game Functional Requirements Testing

[#Test-07]
==== Puzzle Module Control Tests

===== Covered requirements
* Functional requirements
** xref:reqs.adoc#R-167[R-167] (Manual reset capability of a puzzle module)
** xref:reqs.adoc#R-168[R-168] (Manual solve capability of a puzzle module)

===== Additional setup
* [ ] Ensure access to the game operator controls for manual reset and solve.

===== Test
. Perform a manual reset of a puzzle module during gameplay to verify it resets correctly.
. Manually set a puzzle module as solved and observe if the system acknowledges the solve appropriately.

===== Result
* [ ] Puzzle module resets correctly when manually triggered.
* [ ] Puzzle module is recognized as solved when set manually.

[#Test-08]
==== Puzzle Difficulty Verification

===== Covered requirements
* Functional requirements
** xref:reqs.adoc#R-27[R-27] (Puzzle solvability without prior knowledge)

===== Test
. Invite testers unfamiliar with the game to solve the puzzles.
. Record the ease or difficulty encountered by the testers in solving the puzzles.

===== Result
* [ ] Testers without prior knowledge are able to solve the puzzles, indicating appropriate difficulty levels.

=== Hardware Puzzle Module Testing

[#Test-09]
==== Initial Setup Verification

===== Covered requirements
* Functional requirements
** xref:reqs.adoc#R-58[R-58] (Game operator initial switch position)
** xref:reqs.adoc#R-59[R-59] (Game operator initial potentiometer position)

===== Additional setup
* [ ] Access to hardware puzzle board controls for switches and potentiometers.

===== Test
. Manually set all switches on the hardware puzzle board to the down position.
. Turn all potentiometers fully to the left to their zero position.

===== Result
* [ ] All switches are confirmed to be in the down position at the start of the game.
* [ ] All potentiometers are set to zero at the beginning of the game, indicating correct initial setup.

[#Test-10]
==== Hardware Component Functionality

===== Covered requirements
* Functional requirements
** xref:reqs.adoc#R-48[R-48] (Presence of eight switches)
** xref:reqs.adoc#R-49[R-49] (Combinatorial circuit functionality)
** xref:reqs.adoc#R-50[R-50] (7-segment 4-digit display presence and functionality)
** xref:reqs.adoc#R-51[R-51] (Four potentiometers)
** xref:reqs.adoc#R-52[R-52] (Blue LED displaying Morse code)
** xref:reqs.adoc#R-53[R-53] (Green LED indicating solved state)

===== Additional setup
* [ ] Ensure all hardware components are installed as per the design specifications.

===== Test
. Verify the presence and functionality of eight switches linked to the combinatorial circuit.
. Confirm that the combinatorial circuit operates as depicted in the provided diagram.
. Check the 7-segment display and potentiometers for correct operation.
. Observe the blue LED for Morse code display and green LED for indicating the puzzle is solved.

===== Result
* [ ] Eight switches are operational and affect the combinatorial circuit as expected.
* [ ] The combinatorial circuit correctly processes inputs to produce the expected output.
* [ ] The 7-segment display and potentiometers function correctly, displaying values as manipulated.
* [ ] Blue LED successfully displays Morse code, and green LED lights up when the puzzle is solved.