@haus-tech/haus-workflow 4.2.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/cli.js +113 -11
- package/library/catalog/manifest.json +558 -7
- package/library/catalog/validation-rules.json +2 -4
- package/library/global/skills/haus-workflow/SKILL.md +6 -1
- package/library/global/skills/haus-workflow/references/new.md +38 -11
- package/library/global/skills/request-assess-impact/SKILL.md +30 -7
- package/library/global/skills/request-classify/SKILL.md +0 -7
- package/library/global/skills/request-classify/references/klassningsinstruktion.md +9 -3
- package/library/global/skills/request-score/SKILL.md +239 -0
- package/library/global/skills/request-score/references/poangskala.md +1135 -0
- package/library/global/skills/request-sync/SKILL.md +163 -39
- package/library/global/skills/request-write-spec/SKILL.md +10 -1
- package/package.json +3 -3
|
@@ -0,0 +1,1135 @@
|
|
|
1
|
+
# Poängskalan
|
|
2
|
+
|
|
3
|
+
Sexton referensuppdrag med poäng. Skalan används för att placera in ett nytt uppdrag
|
|
4
|
+
genom jämförelse, aldrig genom fri skattning.
|
|
5
|
+
|
|
6
|
+
Poängen är ett relativt mått på arbetets omfattning. Den innehåller inget timpris, inga
|
|
7
|
+
timmar och ingen valuta. Omräkningen till kronor sker någon annanstans.
|
|
8
|
+
|
|
9
|
+
**Typen är en sökhjälp, aldrig en prisfaktor.** Den finns för att du snabbt ska hitta
|
|
10
|
+
jämförbara referensuppdrag. Ingen typ har högre poäng än en annan vid samma
|
|
11
|
+
arbetsmängd, och inget påslag får göras för att ett uppdrag är en integration, ett
|
|
12
|
+
internt verktyg eller ett underhåll.
|
|
13
|
+
|
|
14
|
+
**Skalan är inte linjär i kodmängd.** Ett uppdrag med tio gånger mer kod har inte tio
|
|
15
|
+
gånger fler poäng. Jämför med vad ändringen drar med sig, inte med hur mycket som
|
|
16
|
+
skrivs.
|
|
17
|
+
|
|
18
|
+
## Poängens upplösning
|
|
19
|
+
|
|
20
|
+
Poängen sätts aldrig finare än var som helst i den här skalan:
|
|
21
|
+
|
|
22
|
+
- **Under 3 poäng:** steg om 0,25. Alltså 0,25 · 0,5 · 0,75 · 1 · 1,25 · 1,5 · 1,75 · 2 · 2,25 · 2,5 · 2,75.
|
|
23
|
+
- **Från 3 poäng och uppåt:** hela poäng.
|
|
24
|
+
|
|
25
|
+
Skälet är att en finare siffra låtsas om en noggrannhet som inte finns. Två oberoende
|
|
26
|
+
bedömare hamnar i olika klass i en femtedel av fallen, så skillnaden mellan 16 och 16,5
|
|
27
|
+
är mindre än osäkerheten i bedömningen.
|
|
28
|
+
|
|
29
|
+
Stegen är finare i botten därför att samma relativa skillnad kräver det. Från 1 till 1,25
|
|
30
|
+
är en fjärdedels ökning; från 16 till 17 är en sextondel. I den nedre änden dominerar
|
|
31
|
+
dessutom den fasta processavgiften priset, så poängen betyder minst där.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## Verifiering förutsätter automatiska tester
|
|
35
|
+
|
|
36
|
+
Referensuppdragens beskrivningar av vad som kan bevisas automatiskt utgår från att en
|
|
37
|
+
fungerande testsvit finns. Jämför ett nytt uppdrag på samma grund, även om dess repo
|
|
38
|
+
saknar tester i dag.
|
|
39
|
+
|
|
40
|
+
Skälet är att ett repo utan testsvit annars gör varje post i det repot dyrare, och då
|
|
41
|
+
betalar kunden för Haus egen tekniska skuld. Räkna bara det manuella arbete som
|
|
42
|
+
återstår när testerna gjort sitt: kontroll mot en extern tjänsts testläge, visuell
|
|
43
|
+
granskning, och genomgång på flera enheter eller i flera miljöer.
|
|
44
|
+
|
|
45
|
+
## Översikt
|
|
46
|
+
|
|
47
|
+
| Ankare | Poäng | Typ | Uppdrag |
|
|
48
|
+
| --- | --- | --- | --- |
|
|
49
|
+
| A1 | 0,25 | Kundvänd funktion | Uppdatera texter i en översättningsfil |
|
|
50
|
+
| A2 | 0,75 | Kundvänd funktion | Visa ett kontonummer i användarens kontovy |
|
|
51
|
+
| A3 | 0,75 | Kundvänd funktion | Härled landval ur webbadressens språkdel |
|
|
52
|
+
| A4 | 1 | Kundvänd funktion | Gör en rad i en produktlista klickbar |
|
|
53
|
+
| A5 | 2 | Underhåll | Säkerhetsuppdatering av beroenden |
|
|
54
|
+
| A6 | 2,25 | Kundvänd funktion | Normalisera filnamn vid uppladdning |
|
|
55
|
+
| A7 | 2,5 | Teknisk uppsättning | Konfigurerbart spårningsskript per webbplats |
|
|
56
|
+
| A8 | 3 | Integration | Kundmatchning mot affärssystem via momsnummer |
|
|
57
|
+
| A9 | 4 | Internt verktyg | Låt administratörer sätta en kunds lösenord |
|
|
58
|
+
| A10 | 4 | Kundvänd funktion | Förpackningsstorlek med decimaler |
|
|
59
|
+
| A11 | 7 | Integration | Hantera felaktigt pris vid sidladdning i betalflödet |
|
|
60
|
+
| A12 | 9 | Kundvänd funktion | Förbättrad kartvy för val av upphämtningsplats |
|
|
61
|
+
| A13 | 12 | Internt verktyg | Import av användare och konton från fil |
|
|
62
|
+
| A14 | 13 | Kundvänd funktion | Delad komponent för lägg i varukorg |
|
|
63
|
+
| A15 | 16 | Integration | Inloggning med extern e-legitimation, gränssnittsdelen |
|
|
64
|
+
| A16 | 17 | Kundvänd funktion | Strukturerad produktdata för sökmotorer |
|
|
65
|
+
|
|
66
|
+
Fördelningen speglar materialet: kundvänd funktion är 56 procent av allt arbete,
|
|
67
|
+
internt verktyg 10, integration 7 och underhåll 5. Uppdrag över 25 poäng är utelämnade
|
|
68
|
+
eftersom bara tre sådana finns 2025 och 2026.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
# A1 · Uppdatera texter i en översättningsfil
|
|
73
|
+
**0,25 poäng · Kundvänd funktion**
|
|
74
|
+
|
|
75
|
+
## Spec
|
|
76
|
+
|
|
77
|
+
**Problem.** Flera texter i bokningsflödet använder fel ord för ombokning på norska.
|
|
78
|
+
Kunder hör av sig och undrar vad som menas.
|
|
79
|
+
|
|
80
|
+
**Lösning.** De felaktiga texterna byts till rätt term, på alla ställen där de
|
|
81
|
+
förekommer i den norska språkfilen.
|
|
82
|
+
|
|
83
|
+
**När det är klart.** De berörda texterna visar rätt term i det norska flödet. Övriga
|
|
84
|
+
språk är oförändrade.
|
|
85
|
+
|
|
86
|
+
**Ingår inte.** Ingen ändring av flödets steg eller logik.
|
|
87
|
+
|
|
88
|
+
## Påverkansanalys
|
|
89
|
+
|
|
90
|
+
**Berörda repon och filer.** Språkfilerna för norska i bokningsdelen, samt
|
|
91
|
+
versionsanteckningarna. Ingen kod med logik ändras. Ingen delad kod, ingen driftmiljö.
|
|
92
|
+
|
|
93
|
+
**Datalagring.** Ingen.
|
|
94
|
+
|
|
95
|
+
**Integrationspunkter.** Inga.
|
|
96
|
+
|
|
97
|
+
**Flöden.** Bokningen är en sekvens användaren passerar i ordning, men inget steg
|
|
98
|
+
ändras. Bara texten inuti stegen byts.
|
|
99
|
+
|
|
100
|
+
**Gränssnitt.** Inget nytt mönster. Texterna visas i befintliga fält, och de nya
|
|
101
|
+
formuleringarna är ungefär lika långa som de gamla.
|
|
102
|
+
|
|
103
|
+
**Verifiering.** Automatiska tester täcker att språkfilen laddas och att inga nycklar
|
|
104
|
+
saknas. Att texterna läser rätt i sitt sammanhang behöver ses över för hand en gång i
|
|
105
|
+
det norska flödet, eftersom en text kan vara korrekt i sig och ändå fel på sin plats.
|
|
106
|
+
|
|
107
|
+
**Konsekvens av fel.** Fel eller missvisande text visas för kunden. Inget beteende
|
|
108
|
+
ändras, ingen data påverkas, och en felaktig text går att rätta lika enkelt som den
|
|
109
|
+
lades in.
|
|
110
|
+
|
|
111
|
+
**Vägval.** Texterna byts på alla förekomster i språkfilen i stället för bara i det
|
|
112
|
+
ställe som anmäldes, eftersom samma felaktiga term används på flera ställen och ett
|
|
113
|
+
delvis byte hade gett två olika ord för samma sak.
|
|
114
|
+
|
|
115
|
+
**Antaganden.** Att den nya termen är den kunden själv använder. Bekräftad av
|
|
116
|
+
beställaren i ärendet.
|
|
117
|
+
|
|
118
|
+
**Beroenden.** Inga.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
## Till granskaren
|
|
122
|
+
**Ej verifierat:** Om samma term förekommer i marknadsföringstexter utanför
|
|
123
|
+
applikationen.
|
|
124
|
+
**Avvikelse mot specen:** Ingen.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
# A2 · Visa ett kontonummer i användarens kontovy
|
|
129
|
+
**0,75 poäng · Kundvänd funktion**
|
|
130
|
+
|
|
131
|
+
## Spec
|
|
132
|
+
|
|
133
|
+
**Problem.** Supportpersonalen ser inte vilket konto en användare tillhör när de läser
|
|
134
|
+
ett supportärende, utan måste slå upp det i ett annat system.
|
|
135
|
+
|
|
136
|
+
**Lösning.** Kontots identifierare visas i användarens kontovy och följer med när ett
|
|
137
|
+
supportärende skapas.
|
|
138
|
+
|
|
139
|
+
**När det är klart.** En användare som tillhör ett konto ser identifieraren i sin
|
|
140
|
+
kontovy. Ett supportärende som skapas innehåller samma identifierare.
|
|
141
|
+
|
|
142
|
+
**Ingår inte.** Identifieraren går inte att redigera.
|
|
143
|
+
|
|
144
|
+
## Påverkansanalys
|
|
145
|
+
|
|
146
|
+
**Berörda repon och filer.** Innehållssystemets datamodell för konto, och webbklientens
|
|
147
|
+
kontovy. Klientens typdefinition för användare utökas. Ingen delad kod, ingen
|
|
148
|
+
driftmiljö.
|
|
149
|
+
|
|
150
|
+
**Datalagring.** Serverlagrad struktur ändras: kontots innehållstyp får ett nytt
|
|
151
|
+
valfritt textfält. Befintliga konton saknar värde, så ingen bakåtfyllning och ingen
|
|
152
|
+
driftsättningsordning krävs. Ingen klientlagring.
|
|
153
|
+
|
|
154
|
+
**Integrationspunkter.** Inga nya. Supportärendets skapande sker redan i systemet och
|
|
155
|
+
utökas med ett fält.
|
|
156
|
+
|
|
157
|
+
**Flöden.** Ingen sekvens ändras. Kontovyn nås från en plats.
|
|
158
|
+
|
|
159
|
+
**Gränssnitt.** Befintligt mönster återanvänds: fältet visas i den lista av
|
|
160
|
+
kontouppgifter som redan finns i vyn. Inget nytt mönster byggs.
|
|
161
|
+
|
|
162
|
+
**Verifiering.** Automatiska tester täcker att fältet visas när det finns och att vyn
|
|
163
|
+
fungerar när det saknas. Ingen manuell genomgång behövs.
|
|
164
|
+
|
|
165
|
+
**Konsekvens av fel.** Fel identifierare visas, eller ingen alls. Uppgiften är läsande
|
|
166
|
+
och styr ingen behörighet.
|
|
167
|
+
|
|
168
|
+
**Vägval.** Fältet läggs på kontots innehållstyp i stället för på användaren, eftersom
|
|
169
|
+
identifieraren hör till kontot och flera användare kan dela konto.
|
|
170
|
+
|
|
171
|
+
**Antaganden.** Att alla befintliga konton har en identifierare i källsystemet. Går att
|
|
172
|
+
verifiera genom att räkna konton utan värde efter en första inläsning.
|
|
173
|
+
|
|
174
|
+
**Beroenden.** Inga.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
## Till granskaren
|
|
178
|
+
**Ej verifierat:** Om identifieraren är unik över alla konton. Den behandlas som en
|
|
179
|
+
visningsuppgift, inte som en nyckel.
|
|
180
|
+
**Avvikelse mot specen:** Ingen.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
# A3 · Härled landval ur webbadressens språkdel
|
|
185
|
+
**0,75 poäng · Kundvänd funktion**
|
|
186
|
+
|
|
187
|
+
## Spec
|
|
188
|
+
|
|
189
|
+
**Problem.** I kassan får kunden välja land i en lista, trots att de redan kommit in via
|
|
190
|
+
en landsspecifik webbadress. Fel val ger fel frakt och fel moms.
|
|
191
|
+
|
|
192
|
+
**Lösning.** Landet härleds ur webbadressens språkdel och förväljs. Kunden kan fortfarande
|
|
193
|
+
byta.
|
|
194
|
+
|
|
195
|
+
**När det är klart.** En kund som kommer via en landsspecifik adress ser rätt land
|
|
196
|
+
förvalt. En kund på den generella adressen får välja som förut.
|
|
197
|
+
|
|
198
|
+
**Ingår inte.** Ingen ändring av vilka länder som är valbara.
|
|
199
|
+
|
|
200
|
+
## Påverkansanalys
|
|
201
|
+
|
|
202
|
+
**Berörda repon och filer.** Två komponenter i butikens kassa: kassans behållare och
|
|
203
|
+
landvalssteget. Ingen delad kod, ingen serverdel, ingen driftmiljö.
|
|
204
|
+
|
|
205
|
+
**Datalagring.** Ingen. Språkdelen finns i adressen och landlistan hämtas som förut.
|
|
206
|
+
|
|
207
|
+
**Integrationspunkter.** Inga.
|
|
208
|
+
|
|
209
|
+
**Flöden.** Kassan är en sekvens användaren passerar i ordning, och ett av dess steg får
|
|
210
|
+
ett förvalt värde. Antalet steg ändras inte.
|
|
211
|
+
|
|
212
|
+
**Gränssnitt.** Befintligt mönster återanvänds: samma landväljare som förut, med ett
|
|
213
|
+
förvalt värde i stället för tomt.
|
|
214
|
+
|
|
215
|
+
**Verifiering.** Automatiska tester täcker att rätt land förväljs per språkdel och att
|
|
216
|
+
det generella fallet lämnar valet tomt. Att frakt och moms följer med det förvalda
|
|
217
|
+
landet behöver ses över för hand i kassan, eftersom det avgörs längre fram i flödet.
|
|
218
|
+
|
|
219
|
+
**Konsekvens av fel.** Fel förvalt land ger fel fraktkostnad och fel moms på ordern,
|
|
220
|
+
alltså felaktigt pris för kunden. Kunden kan rätta det själv, men det syns bara om de
|
|
221
|
+
tittar.
|
|
222
|
+
|
|
223
|
+
**Vägval.** Landet härleds ur adressens språkdel i stället för ur webbläsarens
|
|
224
|
+
språkinställning, eftersom adressen är det kunden faktiskt valt och
|
|
225
|
+
språkinställningen ofta står på något annat.
|
|
226
|
+
|
|
227
|
+
**Antaganden.** Att varje språkdel motsvarar exakt ett land. Går att verifiera mot
|
|
228
|
+
listan av publicerade adresser; håller det inte behövs en uttrycklig koppling i stället
|
|
229
|
+
för en härledning.
|
|
230
|
+
|
|
231
|
+
**Beroenden.** Inga.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
## Till granskaren
|
|
235
|
+
**Ej verifierat:** Inget.
|
|
236
|
+
**Avvikelse mot specen:** Specen säger inte vad som ska hända för en språkdel som saknar
|
|
237
|
+
land. Implementationen lämnar valet tomt.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
# A4 · Gör en rad i en produktlista klickbar
|
|
242
|
+
**1 poäng · Kundvänd funktion**
|
|
243
|
+
|
|
244
|
+
## Spec
|
|
245
|
+
|
|
246
|
+
**Problem.** I produktlistan går det bara att klicka på produktens namn. Kunder klickar
|
|
247
|
+
på bilden eller priset och ingenting händer.
|
|
248
|
+
|
|
249
|
+
**Lösning.** Hela raden blir klickbar och leder till produktsidan.
|
|
250
|
+
|
|
251
|
+
**När det är klart.** Klick var som helst på raden leder till rätt produktsida. Knappar
|
|
252
|
+
inuti raden fungerar oförändrat utan att raden aktiveras.
|
|
253
|
+
|
|
254
|
+
**Ingår inte.** Ingen ändring av produktsidan.
|
|
255
|
+
|
|
256
|
+
## Påverkansanalys
|
|
257
|
+
|
|
258
|
+
**Berörda repon och filer.** En komponent i butikens gränssnitt med tillhörande
|
|
259
|
+
formatmall. Används av en butik. Ingen serverdel, ingen driftmiljö.
|
|
260
|
+
|
|
261
|
+
**Datalagring.** Ingen. Länkmålet finns redan i den produktdata komponenten tar emot.
|
|
262
|
+
|
|
263
|
+
**Integrationspunkter.** Inga.
|
|
264
|
+
|
|
265
|
+
**Flöden.** Ingen sekvens ändras. Produktsidan var redan nåbar från raden, nu från en
|
|
266
|
+
större yta av samma rad.
|
|
267
|
+
|
|
268
|
+
**Gränssnitt.** Befintligt mönster återanvänds: samma länkelement som omslöt namnet
|
|
269
|
+
omsluter nu raden. Formatmallen justeras så att den inre knappen behåller sitt
|
|
270
|
+
klickområde.
|
|
271
|
+
|
|
272
|
+
**Verifiering.** Automatiska tester täcker att klick på raden navigerar rätt och att
|
|
273
|
+
klick på den inre knappen inte gör det. Ingen manuell genomgång behövs.
|
|
274
|
+
|
|
275
|
+
**Konsekvens av fel.** Klick på knappen inuti raden kan råka navigera i stället för att
|
|
276
|
+
lägga i varukorgen. Irriterande men ofarligt; ingen data påverkas.
|
|
277
|
+
|
|
278
|
+
**Vägval.** Raden omsluts av ett länkelement i stället för att lyssna på klick i
|
|
279
|
+
JavaScript, eftersom det bevarar öppna i ny flik och fungerar för skärmläsare.
|
|
280
|
+
|
|
281
|
+
**Antaganden.** Inga.
|
|
282
|
+
|
|
283
|
+
**Beroenden.** Inga.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
## Till granskaren
|
|
287
|
+
**Ej verifierat:** Inget.
|
|
288
|
+
**Avvikelse mot specen:** Ingen.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
# A5 · Säkerhetsuppdatering av beroenden
|
|
293
|
+
**2 poäng · Underhåll**
|
|
294
|
+
|
|
295
|
+
## Spec
|
|
296
|
+
|
|
297
|
+
**Problem.** Säkerhetsgenomsökningen rapporterar kända sårbarheter i flera av
|
|
298
|
+
applikationens beroenden.
|
|
299
|
+
|
|
300
|
+
**Lösning.** Beroendena uppdateras till versioner utan kända sårbarheter. Ändringarna
|
|
301
|
+
dokumenteras i versionsanteckningarna.
|
|
302
|
+
|
|
303
|
+
**När det är klart.** Genomsökningen rapporterar inga kvarstående sårbarheter av hög
|
|
304
|
+
allvarlighetsgrad. Applikationen bygger och testsviten går igenom.
|
|
305
|
+
|
|
306
|
+
**Ingår inte.** Ingen uppgradering av huvudramverket till ny huvudversion.
|
|
307
|
+
|
|
308
|
+
## Påverkansanalys
|
|
309
|
+
|
|
310
|
+
**Berörda repon och filer.** Beroendeförteckningarna för både serverdelen och
|
|
311
|
+
klientdelen, samt versionsanteckningarna. Ingen egen kod ändras. Ingen driftmiljö, men
|
|
312
|
+
en driftsättning krävs för att uppdateringarna ska nå produktion.
|
|
313
|
+
|
|
314
|
+
**Datalagring.** Ingen.
|
|
315
|
+
|
|
316
|
+
**Integrationspunkter.** Inga nya. Befintliga beroenden byter version, vilket i sig kan
|
|
317
|
+
ändra beteende hos de bibliotek som talar med externa tjänster.
|
|
318
|
+
|
|
319
|
+
**Flöden.** Ingen sekvens ändras avsiktligt. En beteendeändring i ett beroende kan
|
|
320
|
+
däremot slå var som helst, vilket är hela svårigheten i posten.
|
|
321
|
+
|
|
322
|
+
**Gränssnitt.** Inget nytt mönster. Beroenden som påverkar utseende kan ge små visuella
|
|
323
|
+
skillnader.
|
|
324
|
+
|
|
325
|
+
**Verifiering.** Den automatiska testsviten är huvudkontrollen och täcker applikationens
|
|
326
|
+
egen logik. Eftersom ändringen kan slå brett behöver de mest använda vyerna dessutom
|
|
327
|
+
gås igenom för hand i testmiljö, som ett stickprov snarare än en fullständig genomgång.
|
|
328
|
+
|
|
329
|
+
**Konsekvens av fel.** En beteendeändring i ett beroende kan bryta befintlig funktion på
|
|
330
|
+
ett ställe ingen tänkt på, och felet upptäcks då först i drift. Å andra sidan är
|
|
331
|
+
alternativet att låta kända sårbarheter stå kvar.
|
|
332
|
+
|
|
333
|
+
**Vägval.** Uppdateringarna görs i en samlad omgång i stället för en i taget, eftersom
|
|
334
|
+
flera av dem har beroenden till varandra och en i taget hade krävt lika många
|
|
335
|
+
driftsättningar. Huvudramverkets huvudversion lämnas orörd och hanteras som en egen
|
|
336
|
+
post, eftersom den för med sig ändringar i egen kod.
|
|
337
|
+
|
|
338
|
+
**Antaganden.** Att testsvitens täckning räcker för att fånga de vanligaste
|
|
339
|
+
regressionerna. Går att verifiera genom att läsa täckningsrapporten innan uppdateringen
|
|
340
|
+
görs.
|
|
341
|
+
|
|
342
|
+
**Beroenden.** Inga.
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
## Till granskaren
|
|
346
|
+
**Ej verifierat:** Om något av de uppdaterade beroendena har ändringar som bryter mot
|
|
347
|
+
tidigare beteende. Ändringsloggarna är lästa men inte alla i detalj.
|
|
348
|
+
**Avvikelse mot specen:** Ingen.
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
# A6 · Normalisera filnamn vid uppladdning
|
|
353
|
+
**2,25 poäng · Kundvänd funktion**
|
|
354
|
+
|
|
355
|
+
## Spec
|
|
356
|
+
|
|
357
|
+
**Problem.** Uppladdade filer behåller sina originalnamn. Namn med mellanslag, svenska
|
|
358
|
+
tecken eller versaler ger trasiga länkar och dubbletter.
|
|
359
|
+
|
|
360
|
+
**Lösning.** Filnamnet normaliseras vid uppladdning: gemener, bindestreck i stället för
|
|
361
|
+
mellanslag, och svenska tecken översatta. Redan uppladdade filer lämnas orörda.
|
|
362
|
+
|
|
363
|
+
**När det är klart.** En fil med mellanslag och svenska tecken i namnet får ett rensat
|
|
364
|
+
namn och en fungerande länk. Två filer med samma normaliserade namn krockar inte.
|
|
365
|
+
|
|
366
|
+
**Ingår inte.** Ingen omdöpning av befintliga filer.
|
|
367
|
+
|
|
368
|
+
## Påverkansanalys
|
|
369
|
+
|
|
370
|
+
**Berörda repon och filer.** En ny namngivningsstrategi i e-handelsplattformen, samt
|
|
371
|
+
plattformens konfiguration där strategin registreras. Strategin gäller alla
|
|
372
|
+
uppladdningar i installationen, alltså både administratörers och kunders.
|
|
373
|
+
|
|
374
|
+
**Datalagring.** Ingen strukturändring. Filnamnet som lagras för nya filer får ett annat
|
|
375
|
+
format än tidigare, vilket innebär att lagringen från och med nu innehåller två
|
|
376
|
+
namnformat sida vid sida.
|
|
377
|
+
|
|
378
|
+
**Integrationspunkter.** Inga nya. Filerna lagras där de lagrades förut.
|
|
379
|
+
|
|
380
|
+
**Flöden.** Ingen sekvens ändras. Uppladdning nås från flera ställen i administrationen,
|
|
381
|
+
alltså flera ingångar till samma åtgärd, och alla får den nya namngivningen.
|
|
382
|
+
|
|
383
|
+
**Gränssnitt.** Inget nytt mönster. Ändringen är osynlig i gränssnittet utom genom att
|
|
384
|
+
det visade filnamnet ser annorlunda ut.
|
|
385
|
+
|
|
386
|
+
**Verifiering.** Automatiska tester täcker normaliseringen för mellanslag, versaler,
|
|
387
|
+
svenska tecken och krockande namn. Att länken till filen fungerar efter uppladdning
|
|
388
|
+
behöver kontrolleras för hand en gång, eftersom det involverar lagringen.
|
|
389
|
+
|
|
390
|
+
**Konsekvens av fel.** En felaktig normalisering kan ge två filer samma namn, så att den
|
|
391
|
+
ena skriver över den andra. Det är förlust av data som inte går att återskapa, och det
|
|
392
|
+
är därför krockhanteringen är den viktigaste delen av posten.
|
|
393
|
+
|
|
394
|
+
**Vägval.** Normaliseringen läggs som en strategi i plattformens egen
|
|
395
|
+
uppladdningsmekanik i stället för i varje anropande vy, så att den gäller alla
|
|
396
|
+
uppladdningsvägar utan att någon behöver komma ihåg den. Befintliga filer lämnas orörda,
|
|
397
|
+
eftersom en omdöpning hade brutit alla länkar som redan pekar på dem.
|
|
398
|
+
|
|
399
|
+
**Antaganden.** Att inga befintliga länkar innehåller filnamn som skulle ändras. Går att
|
|
400
|
+
verifiera med en genomsökning av innehållet.
|
|
401
|
+
|
|
402
|
+
**Beroenden.** Inga.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
## Till granskaren
|
|
406
|
+
**Ej verifierat:** Om lagringen är skiftlägeskänslig. Normaliseringen till gemener gör
|
|
407
|
+
frågan mindre viktig men inte irrelevant.
|
|
408
|
+
**Avvikelse mot specen:** Ingen.
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
# A7 · Konfigurerbart spårningsskript per webbplats
|
|
413
|
+
**2,5 poäng · Teknisk uppsättning**
|
|
414
|
+
|
|
415
|
+
## Spec
|
|
416
|
+
|
|
417
|
+
**Problem.** Spårningsskriptet för webbanalys är hårdkodat. Varje ny webbplats kräver en
|
|
418
|
+
kodändring och en driftsättning för att få sin egen mätning.
|
|
419
|
+
|
|
420
|
+
**Lösning.** Skriptets identifierare läggs som en inställning i innehållssystemet och
|
|
421
|
+
läses in när sidan byggs. Saknas den laddas inget skript.
|
|
422
|
+
|
|
423
|
+
**När det är klart.** En webbplats med angiven identifierare får skriptet i sidhuvudet.
|
|
424
|
+
En utan får inget skript och inga fel i webbläsarkonsolen.
|
|
425
|
+
|
|
426
|
+
**Ingår inte.** Ingen konfiguration av vad som mäts.
|
|
427
|
+
|
|
428
|
+
## Påverkansanalys
|
|
429
|
+
|
|
430
|
+
**Berörda repon och filer.** Innehållssystemets globala inställningar, samt
|
|
431
|
+
webbklientens rotlayout, dess ruttdefinitioner och en ny omslutande komponent som lägger
|
|
432
|
+
in skriptet. Ingen delad kod. Ingen driftmiljö, eftersom värdet nu kommer ur
|
|
433
|
+
innehållssystemet i stället för ur en miljövariabel.
|
|
434
|
+
|
|
435
|
+
**Datalagring.** Serverlagrad struktur ändras: den globala inställningstypen får ett nytt
|
|
436
|
+
textfält. Det är en enda rad i systemet, så ingen datamigrering krävs.
|
|
437
|
+
|
|
438
|
+
**Integrationspunkter.** Ett externt spårningsskript laddas från tredje part. Nytt som
|
|
439
|
+
konfigurerbar integration; skriptet självt användes redan hårdkodat.
|
|
440
|
+
|
|
441
|
+
**Flöden.** Ingen sekvens ändras. Skriptet laddas på varje sida, alltså vid varje ingång.
|
|
442
|
+
|
|
443
|
+
**Gränssnitt.** Inget synligt gränssnitt byggs. Den nya komponenten är teknisk och saknar
|
|
444
|
+
egen visuell form. Inställningen redigeras i innehållssystemets befintliga formulär.
|
|
445
|
+
|
|
446
|
+
**Verifiering.** Automatiska tester täcker att skriptet läggs in när identifieraren finns
|
|
447
|
+
och utelämnas när den saknas. Att skriptet faktiskt rapporterar till rätt mottagare går
|
|
448
|
+
inte att bevisa automatiskt och behöver kontrolleras för hand en gång per miljö.
|
|
449
|
+
|
|
450
|
+
**Konsekvens av fel.** Fel identifierare skickar mätdata till fel mottagare. Mätdata som
|
|
451
|
+
gått fel är svår att ta tillbaka. Ett skript som laddas felaktigt kan fördröja
|
|
452
|
+
sidladdningen.
|
|
453
|
+
|
|
454
|
+
**Vägval.** Skriptet läggs in genom en omslutande komponent i rotlayouten i stället för
|
|
455
|
+
i det statiska sidhuvudet, eftersom värdet nu är dynamiskt. Alternativet hade krävt en
|
|
456
|
+
byggtidsvariabel och därmed en driftsättning per ändring, vilket är precis problemet som
|
|
457
|
+
skulle lösas.
|
|
458
|
+
|
|
459
|
+
**Antaganden.** Att en webbplats bara behöver ett spårningsskript. Går att verifiera med
|
|
460
|
+
förvaltningen; om flera behövs blir fältet en lista.
|
|
461
|
+
|
|
462
|
+
**Beroenden.** Inga.
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
## Till granskaren
|
|
466
|
+
**Ej verifierat:** Om identifieraren behöver skilja sig mellan test och drift för samma
|
|
467
|
+
webbplats. Fältet är i dag ett per webbplats.
|
|
468
|
+
**Avvikelse mot specen:** Ingen.
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
# A8 · Kundmatchning mot affärssystem via momsnummer
|
|
473
|
+
**3 poäng · Integration**
|
|
474
|
+
|
|
475
|
+
## Spec
|
|
476
|
+
|
|
477
|
+
**Problem.** Ordrar från företagskunder hamnar ibland på fel kund i affärssystemet, för
|
|
478
|
+
att kundnumret eller organisationsnumret inte matchar. Ordern måste då flyttas för hand.
|
|
479
|
+
|
|
480
|
+
**Lösning.** Matchningen mot affärssystemet försöker med kundnummer först, sedan
|
|
481
|
+
organisationsnummer, och slutligen momsnummer. Hittas ingen kund skapas ingen order på
|
|
482
|
+
fel kund utan ärendet flaggas.
|
|
483
|
+
|
|
484
|
+
**När det är klart.** En order från en kund som bara går att matcha på momsnummer hamnar
|
|
485
|
+
på rätt kund. En order som inte matchar alls skapas inte, utan flaggas för manuell
|
|
486
|
+
hantering.
|
|
487
|
+
|
|
488
|
+
**Ingår inte.** Ingen ändring av hur kunder skapas i affärssystemet.
|
|
489
|
+
|
|
490
|
+
## Påverkansanalys
|
|
491
|
+
|
|
492
|
+
**Berörda repon och filer.** Kopplingen mot affärssystemet: de anrop som slår upp kund,
|
|
493
|
+
och de frågor som definierar vad som hämtas. Kopplingen används av en kund. Ingen
|
|
494
|
+
driftmiljö.
|
|
495
|
+
|
|
496
|
+
**Datalagring.** Ingen strukturändring. Uppslaget läser ur affärssystemet, och resultatet
|
|
497
|
+
avgör vilken kund ordern knyts till.
|
|
498
|
+
|
|
499
|
+
**Integrationspunkter.** Affärssystemet är en befintlig extern integration. Ett nytt
|
|
500
|
+
uppslagssätt läggs till på ett befintligt anrop, alltså ingen ny koppling.
|
|
501
|
+
|
|
502
|
+
**Flöden.** Ingen sekvens som användaren passerar. Matchningen sker i bakgrunden när en
|
|
503
|
+
order förs över.
|
|
504
|
+
|
|
505
|
+
**Gränssnitt.** Inget. Flaggningen av omatchade ordrar syns i den befintliga listan över
|
|
506
|
+
ärenden som kräver hantering.
|
|
507
|
+
|
|
508
|
+
**Verifiering.** Automatiska tester täcker matchningsordningen och att ingen order skapas
|
|
509
|
+
när alla tre uppslagen misslyckas. Att uppslaget mot affärssystemet faktiskt returnerar
|
|
510
|
+
det som förväntas behöver provas för hand mot systemets testmiljö, för en kund som bara
|
|
511
|
+
har momsnummer och en som inte finns alls.
|
|
512
|
+
|
|
513
|
+
**Konsekvens av fel.** En order kan hamna på fel kund, vilket innebär att en kunds
|
|
514
|
+
uppgifter och köp syns för en annan, och att fakturan går till fel mottagare. Det är
|
|
515
|
+
felet posten finns för att åtgärda, så en felaktig lösning gör problemet värre snarare än
|
|
516
|
+
oförändrat.
|
|
517
|
+
|
|
518
|
+
**Vägval.** Uppslagen görs i tur och ordning med momsnummer sist, eftersom det är det
|
|
519
|
+
minst tillförlitliga av de tre och bara ska användas när de säkrare misslyckats.
|
|
520
|
+
Omatchade ordrar flaggas i stället för att skapas på en uppsamlingskund, eftersom en
|
|
521
|
+
felplacerad order är svårare att upptäcka än en som saknas.
|
|
522
|
+
|
|
523
|
+
**Antaganden.** Att momsnummer är unikt per kund i affärssystemet. Går att verifiera med
|
|
524
|
+
en fråga mot systemet som räknar dubbletter.
|
|
525
|
+
|
|
526
|
+
**Beroenden.** Inga.
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
## Till granskaren
|
|
530
|
+
**Ej verifierat:** Hur många av de historiska felplacerade ordrarna som skulle ha matchat
|
|
531
|
+
på momsnummer. Det avgör hur mycket posten faktiskt löser.
|
|
532
|
+
**Avvikelse mot specen:** Specen säger inte vad som ska hända med de ordrar som redan
|
|
533
|
+
hamnat fel. Ingen rättning av historiken ingår.
|
|
534
|
+
|
|
535
|
+
---
|
|
536
|
+
|
|
537
|
+
# A9 · Låt administratörer sätta en kunds lösenord
|
|
538
|
+
**4 poäng · Internt verktyg**
|
|
539
|
+
|
|
540
|
+
## Spec
|
|
541
|
+
|
|
542
|
+
**Problem.** När en kund inte kan logga in måste supporten be dem gå igenom
|
|
543
|
+
återställningsflödet själva. För kunder som inte når sin mejl går det inte alls.
|
|
544
|
+
|
|
545
|
+
**Lösning.** En administratör kan sätta ett nytt lösenord för en kund direkt i
|
|
546
|
+
administrationsgränssnittet. Åtgärden loggas i kundens historik.
|
|
547
|
+
|
|
548
|
+
**När det är klart.** En administratör med rätt behörighet kan sätta ett nytt lösenord
|
|
549
|
+
och kunden kan logga in med det. En administratör utan behörighet ser inte funktionen.
|
|
550
|
+
Åtgärden syns i kundens händelsehistorik med vem som utförde den.
|
|
551
|
+
|
|
552
|
+
**Ingår inte.** Ingen förändring av kundens egen återställning via mejl.
|
|
553
|
+
|
|
554
|
+
## Påverkansanalys
|
|
555
|
+
|
|
556
|
+
**Berörda repon och filer.** Ett nytt instick i e-handelsplattformen, med en serverdel som
|
|
557
|
+
exponerar åtgärden, en behörighetsdefinition, och en gränssnittsdel som lägger till
|
|
558
|
+
fältet på kundens detaljsida och en post i händelsehistoriken. Bygget av
|
|
559
|
+
administrationsgränssnittet konfigureras om för att inkludera insticket. Insticket ligger
|
|
560
|
+
i kundens egen installation och delas inte. Administrationsgränssnittet måste byggas om
|
|
561
|
+
vid driftsättning.
|
|
562
|
+
|
|
563
|
+
**Datalagring.** Ingen ny struktur. Lösenordet skrivs genom plattformens befintliga
|
|
564
|
+
mekanik, som hashar värdet. Händelsehistoriken använder plattformens befintliga
|
|
565
|
+
historikpost.
|
|
566
|
+
|
|
567
|
+
**Integrationspunkter.** Inga externa.
|
|
568
|
+
|
|
569
|
+
**Flöden.** Ingen sekvens ändras. Åtgärden nås från kundens detaljsida, som är en ingång.
|
|
570
|
+
|
|
571
|
+
**Gränssnitt.** Ett nytt fält och en knapp på en befintlig detaljsida, med plattformens
|
|
572
|
+
egna formulärkomponenter. Historikposten använder plattformens befintliga mönster.
|
|
573
|
+
Översättningar läggs till på två språk.
|
|
574
|
+
|
|
575
|
+
**Verifiering.** Automatiska tester täcker att åtgärden avvisas utan rätt behörighet och
|
|
576
|
+
att lösenordet ändras med den. Att kunden faktiskt kan logga in med det nya lösenordet
|
|
577
|
+
involverar butikens inloggning och behöver provas för hand. Behörighetsspärren behöver
|
|
578
|
+
också ses över för hand i gränssnittet, eftersom en dold knapp inte är samma sak som en
|
|
579
|
+
skyddad åtgärd.
|
|
580
|
+
|
|
581
|
+
**Konsekvens av fel.** En administratör utan rätt behörighet skulle kunna sätta en kunds
|
|
582
|
+
lösenord och därmed komma åt kundens konto, alltså felaktig åtkomst till en annan persons
|
|
583
|
+
uppgifter. Ett fel i lösenordshanteringen kan också låsa ute kunden helt.
|
|
584
|
+
Behörighetsmekaniken som används är plattformens etablerade.
|
|
585
|
+
|
|
586
|
+
**Vägval.** Åtgärden byggs som ett eget instick i stället för som en ändring i
|
|
587
|
+
plattformens kärna, eftersom det överlever framtida uppgraderingar. Lösenordet sätts
|
|
588
|
+
genom plattformens egen mekanik i stället för genom direkt skrivning, så att hashning och
|
|
589
|
+
regler för lösenordsstyrka gäller oförändrat.
|
|
590
|
+
|
|
591
|
+
**Antaganden.** Att en administratörsroll med den nya behörigheten går att tilldela. Går
|
|
592
|
+
att verifiera i rolladministrationen.
|
|
593
|
+
|
|
594
|
+
**Beroenden.** Inga.
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
## Till granskaren
|
|
598
|
+
**Ej verifierat:** Om kunden ska aviseras när lösenordet ändras av en administratör.
|
|
599
|
+
**Avvikelse mot specen:** Specen nämner inte behörighetsnivå. Åtgärden har lagts bakom en
|
|
600
|
+
egen behörighet, vilket är ett utfallsval specen inte besvarat.
|
|
601
|
+
|
|
602
|
+
---
|
|
603
|
+
|
|
604
|
+
# A10 · Förpackningsstorlek med decimaler
|
|
605
|
+
**4 poäng · Kundvänd funktion**
|
|
606
|
+
|
|
607
|
+
## Spec
|
|
608
|
+
|
|
609
|
+
**Problem.** Förpackningsstorlek anges bara i heltal. Produkter som säljs i halva
|
|
610
|
+
förpackningar eller med decimalvikt går inte att ange rätt, vilket ger fel fraktpris.
|
|
611
|
+
|
|
612
|
+
**Lösning.** Förpackningsstorlek kan anges med decimaler. Antal decimaler och enhet
|
|
613
|
+
konfigureras per installation.
|
|
614
|
+
|
|
615
|
+
**När det är klart.** En produkt kan få en förpackningsstorlek med decimaler, den visas
|
|
616
|
+
med rätt antal decimaler i butiken, och fraktberäkningen använder det exakta värdet.
|
|
617
|
+
Befintliga heltalsvärden fungerar oförändrat.
|
|
618
|
+
|
|
619
|
+
**Ingår inte.** Ingen ändring av fraktprismodellen i sig.
|
|
620
|
+
|
|
621
|
+
## Påverkansanalys
|
|
622
|
+
|
|
623
|
+
**Berörda repon och filer.** Ett instick för förpackningsstorlek i ett delat
|
|
624
|
+
paketbibliotek: insticket självt, dess gränssnitt utåt och dess dokumentation.
|
|
625
|
+
**Insticket är delad kod och används av flera kunders installationer**, så ändringen når
|
|
626
|
+
fler än den som beställt den.
|
|
627
|
+
|
|
628
|
+
**Datalagring.** Serverlagrad struktur påverkas: fältets datatyp går från heltal till
|
|
629
|
+
decimaltal. Befintliga värden är giltiga decimaltal, så migreringen är en typändring
|
|
630
|
+
utan omräkning, men den måste köras innan den nya koden driftsätts, annars avvisas
|
|
631
|
+
skrivningar.
|
|
632
|
+
|
|
633
|
+
**Integrationspunkter.** Inga nya. Fraktberäkningen läser fältet som förut.
|
|
634
|
+
|
|
635
|
+
**Flöden.** Ingen sekvens ändras.
|
|
636
|
+
|
|
637
|
+
**Gränssnitt.** Inget nytt mönster. Fältet i administrationen byter från heltalsfält till
|
|
638
|
+
decimalfält med konfigurerbart antal decimaler.
|
|
639
|
+
|
|
640
|
+
**Verifiering.** Automatiska tester täcker att decimalvärden sparas och läses, att
|
|
641
|
+
befintliga heltal fungerar, och att avrundningen följer konfigurationen. Att fraktpriset
|
|
642
|
+
faktiskt blir rätt behöver kontrolleras för hand för minst ett decimalfall, eftersom det
|
|
643
|
+
avgörs i beräkningen längre fram.
|
|
644
|
+
|
|
645
|
+
**Konsekvens av fel.** Fel avrundning ger fel fraktpris, alltså att kunden debiteras fel
|
|
646
|
+
belopp. Eftersom insticket är delat kan felet dessutom slå hos kunder som inte begärt
|
|
647
|
+
ändringen och som inte vet att den skett.
|
|
648
|
+
|
|
649
|
+
**Vägval.** Antal decimaler görs konfigurerbart i stället för att sättas till ett fast
|
|
650
|
+
antal, eftersom de installationer som delar insticket har olika enheter och ett fast
|
|
651
|
+
antal hade tvingat fram en ny ändring för nästa kund. Datatypen ändras i botten i stället
|
|
652
|
+
för att lagra decimaltal som text, så att beräkningar kan ske i databasen.
|
|
653
|
+
|
|
654
|
+
**Antaganden.** Att inga befintliga installationer förutsätter heltal i sin egen
|
|
655
|
+
fraktberäkning. Går att verifiera genom att söka igenom de installationer som använder
|
|
656
|
+
insticket.
|
|
657
|
+
|
|
658
|
+
**Beroenden.** Migreringen måste köras före driftsättning i varje installation som
|
|
659
|
+
använder insticket.
|
|
660
|
+
|
|
661
|
+
---
|
|
662
|
+
## Till granskaren
|
|
663
|
+
**Ej verifierat:** Vilka installationer som i dag använder insticket. Listan är hämtad ur
|
|
664
|
+
paketberoenden och kan vara ofullständig.
|
|
665
|
+
**Avvikelse mot specen:** Specen talar om en installation. Insticket är delat, så
|
|
666
|
+
ändringen berör flera, vilket specen inte förhåller sig till.
|
|
667
|
+
|
|
668
|
+
---
|
|
669
|
+
|
|
670
|
+
# A11 · Hantera felaktigt pris vid sidladdning i betalflödet
|
|
671
|
+
**7 poäng · Integration**
|
|
672
|
+
|
|
673
|
+
## Spec
|
|
674
|
+
|
|
675
|
+
**Problem.** När kunden laddar om betalsidan visas ibland ett pris som inte stämmer med
|
|
676
|
+
ordern, eftersom betalleverantörens vy skapas innan orderns rader hunnit uppdateras.
|
|
677
|
+
|
|
678
|
+
**Lösning.** Betalvyn skapas först när ordern är i ett stabilt läge. Ändras ordern medan
|
|
679
|
+
betalvyn är öppen laddas den om med rätt belopp.
|
|
680
|
+
|
|
681
|
+
**När det är klart.** En kund som ändrar sin varukorg och går tillbaka till betalningen
|
|
682
|
+
ser rätt belopp. En omladdning av betalsidan visar rätt belopp. Ett betalförsök på ett
|
|
683
|
+
inaktuellt belopp går inte att slutföra.
|
|
684
|
+
|
|
685
|
+
**Ingår inte.** Ingen ändring av vilka betalsätt som erbjuds.
|
|
686
|
+
|
|
687
|
+
## Påverkansanalys
|
|
688
|
+
|
|
689
|
+
**Berörda repon och filer.** Ett instick för betalleverantören i ett delat
|
|
690
|
+
paketbibliotek: gränssnittet som skapar betalvyn, tjänsten som talar med leverantören,
|
|
691
|
+
och lyssnaren på ändringar i orderrader. **Insticket är delad kod och används av flera
|
|
692
|
+
installationer.**
|
|
693
|
+
|
|
694
|
+
**Datalagring.** Ingen strukturändring. Orderns befintliga tillstånd läses för att avgöra
|
|
695
|
+
om den är stabil.
|
|
696
|
+
|
|
697
|
+
**Integrationspunkter.** Betalleverantören är en befintlig extern integration. Anropet som
|
|
698
|
+
skapar betalvyn ändras till att returnera ett återanvändbart fragment i stället för en
|
|
699
|
+
färdig vy, vilket är en ändring i hur integrationen används snarare än en ny koppling.
|
|
700
|
+
|
|
701
|
+
**Flöden.** Kassan är en sekvens användaren passerar i ordning. Betalsteget ändras, och
|
|
702
|
+
återgången till tidigare steg och tillbaka ändras. Betalsidan nås dessutom genom
|
|
703
|
+
omladdning, alltså finns flera vägar in till samma steg.
|
|
704
|
+
|
|
705
|
+
**Gränssnitt.** Inget nytt mönster byggs; betalleverantörens egen vy återges som förut. En
|
|
706
|
+
laddningsindikering återanvänds från befintliga komponenter medan vyn byggs om.
|
|
707
|
+
|
|
708
|
+
**Verifiering.** Automatiska tester täcker att betalvyn inte skapas på en instabil order
|
|
709
|
+
och att lyssnaren utlöser omladdning vid ändring. Hela kedjan behöver provas för hand mot
|
|
710
|
+
betalleverantörens testläge, i minst tre fall: ändrad varukorg med återgång, omladdning av
|
|
711
|
+
betalsidan, och betalförsök på ett inaktuellt belopp.
|
|
712
|
+
|
|
713
|
+
**Konsekvens av fel.** En kund kan debiteras ett annat belopp än ordern visar, alltså
|
|
714
|
+
felaktig betalning. Det kan slå åt båda håll och upptäcks ofta först i avstämningen mot
|
|
715
|
+
betalleverantören. Eftersom insticket är delat kan felet nå kunder som inte begärt
|
|
716
|
+
ändringen.
|
|
717
|
+
|
|
718
|
+
**Vägval.** Betalvyn byggs om vid ändring i stället för att låsas mot ändringar, eftersom
|
|
719
|
+
en låst varukorg i kassan hade ändrat vad kunden kan göra och det är ett utfall specen
|
|
720
|
+
inte tar ställning till. Stabilitetskontrollen läggs i insticket i stället för i
|
|
721
|
+
butikens gränssnitt, så att den gäller alla installationer som använder betalsättet.
|
|
722
|
+
|
|
723
|
+
**Antaganden.** Att betalleverantörens fragment går att återge flera gånger på samma sida
|
|
724
|
+
utan att deras egen kod ställer till det. Går att verifiera med ett provanrop innan
|
|
725
|
+
bygget.
|
|
726
|
+
|
|
727
|
+
**Beroenden.** Inga.
|
|
728
|
+
|
|
729
|
+
---
|
|
730
|
+
## Till granskaren
|
|
731
|
+
**Ej verifierat:** Hur betalleverantören beter sig om ordern ändras i samma ögonblick som
|
|
732
|
+
betalningen bekräftas. Kapplöpningen är inte utesluten.
|
|
733
|
+
**Avvikelse mot specen:** Specen säger att ett betalförsök på inaktuellt belopp inte ska
|
|
734
|
+
gå att slutföra, men inte vad kunden ska se när det inträffar.
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
# A12 · Förbättrad kartvy för val av upphämtningsplats
|
|
739
|
+
**9 poäng · Kundvänd funktion**
|
|
740
|
+
|
|
741
|
+
## Spec
|
|
742
|
+
|
|
743
|
+
**Problem.** Kartan där kunden väljer upphämtningsplats visar bara de platser som fanns
|
|
744
|
+
vid första sökningen. Drar kunden kartan åt sidan syns inga nya platser, och på mobil
|
|
745
|
+
täcker kartan hela skärmen så att sökrutan försvinner.
|
|
746
|
+
|
|
747
|
+
**Lösning.** Kartan laddar platser för det område som visas när kunden slutat dra. Kartan
|
|
748
|
+
visas först efter en sökning, och dess höjd anpassas så att sökrutan är kvar. Ett besked
|
|
749
|
+
visas när området saknar platser.
|
|
750
|
+
|
|
751
|
+
**När det är klart.** Kunden kan dra kartan och se nya platser laddas. Ett område utan
|
|
752
|
+
platser ger ett besked i stället för en tom karta. På mobil syns både karta och sökruta
|
|
753
|
+
samtidigt.
|
|
754
|
+
|
|
755
|
+
**Ingår inte.** Ingen ändring av hur platser hämtas eller vilka som visas.
|
|
756
|
+
|
|
757
|
+
## Påverkansanalys
|
|
758
|
+
|
|
759
|
+
**Berörda repon och filer.** Kartkomponenten i butikens gränssnitt och dess formatmall.
|
|
760
|
+
Komponenten används av en butik. Ingen serverdel utöver den befintliga sökningen efter
|
|
761
|
+
platser, ingen driftmiljö.
|
|
762
|
+
|
|
763
|
+
**Datalagring.** Ingen. Platser hämtas vid behov och hålls i komponentens eget minne under
|
|
764
|
+
sessionen.
|
|
765
|
+
|
|
766
|
+
**Integrationspunkter.** Karttjänsten är en befintlig extern integration. Nytt är att
|
|
767
|
+
komponenten lyssnar på när kunden slutat dra och gör en ny sökning på det synliga
|
|
768
|
+
området, vilket ger fler anrop än förut.
|
|
769
|
+
|
|
770
|
+
**Flöden.** Val av upphämtningsplats är ett steg i kassans sekvens. Steget ändras men
|
|
771
|
+
antalet steg är detsamma. Kartan nås både från kassan och från en fristående sökning,
|
|
772
|
+
alltså två ingångar till samma vy.
|
|
773
|
+
|
|
774
|
+
**Gränssnitt.** Ett nytt mönster byggs för mobilvyn: kartans höjd och lagerordning
|
|
775
|
+
anpassas så att sökrutan ligger kvar ovanpå. Beskedet för tomt område är en ny textyta i
|
|
776
|
+
befintligt formspråk.
|
|
777
|
+
|
|
778
|
+
**Verifiering.** Automatiska tester täcker att en ny sökning utlöses när dragningen
|
|
779
|
+
avslutas och att beskedet visas för ett tomt område. Kartans beteende går inte att
|
|
780
|
+
bevisa automatiskt: dragning, laddning under dragning och höjdanpassningen behöver gås
|
|
781
|
+
igenom för hand på både mobil och dator, och i minst två skärmstorlekar på mobil.
|
|
782
|
+
|
|
783
|
+
**Konsekvens av fel.** Kunden kan välja en upphämtningsplats som inte längre finns, eller
|
|
784
|
+
inte hitta någon plats alls och avbryta köpet. Ingen betalning eller data påverkas
|
|
785
|
+
felaktigt, men ett fel i kassan stoppar köp.
|
|
786
|
+
|
|
787
|
+
**Vägval.** Ny sökning görs när dragningen avslutats i stället för löpande under
|
|
788
|
+
dragningen, eftersom det senare hade gett många anrop mot karttjänsten och en ryckig
|
|
789
|
+
upplevelse. Kartan visas först efter en sökning i stället för direkt vid sidladdning, så
|
|
790
|
+
att kunden inte möts av en karta utan innehåll.
|
|
791
|
+
|
|
792
|
+
**Antaganden.** Att karttjänstens anropsgräns tål det ökade antalet sökningar. Går att
|
|
793
|
+
verifiera mot tjänstens villkor och nuvarande förbrukning.
|
|
794
|
+
|
|
795
|
+
**Beroenden.** Inga.
|
|
796
|
+
|
|
797
|
+
---
|
|
798
|
+
## Till granskaren
|
|
799
|
+
**Ej verifierat:** Hur många platser som laddas per område innan prestandan påverkas.
|
|
800
|
+
Ingen övre gräns är satt.
|
|
801
|
+
**Avvikelse mot specen:** Ingen.
|
|
802
|
+
|
|
803
|
+
---
|
|
804
|
+
|
|
805
|
+
# A13 · Import av användare och konton från fil
|
|
806
|
+
**12 poäng · Internt verktyg**
|
|
807
|
+
|
|
808
|
+
## Spec
|
|
809
|
+
|
|
810
|
+
**Problem.** Nya användare läggs in en och en för hand. Vid större påfyllningar tar det
|
|
811
|
+
dagar och blir fel.
|
|
812
|
+
|
|
813
|
+
**Lösning.** En administratör laddar upp en fil med användare och konton, får se vad som
|
|
814
|
+
kommer att skapas eller uppdateras, och bekräftar innan något skrivs. Rader med fel visas
|
|
815
|
+
med orsak och hindrar inte de övriga.
|
|
816
|
+
|
|
817
|
+
**När det är klart.** En korrekt fil skapar användare och konton och kopplar dem rätt. En
|
|
818
|
+
fil med några felaktiga rader importerar de korrekta och listar de felaktiga med orsak. En
|
|
819
|
+
avbruten import lämnar inget skrivet.
|
|
820
|
+
|
|
821
|
+
**Ingår inte.** Ingen schemaläggning av återkommande importer.
|
|
822
|
+
|
|
823
|
+
## Påverkansanalys
|
|
824
|
+
|
|
825
|
+
**Berörda repon och filer.** Ett nytt instick i innehållssystemet med en gränssnittsdel
|
|
826
|
+
som har egen vy i administrationen, och en serverdel som tolkar, validerar och skriver.
|
|
827
|
+
Insticket har egen konfiguration, egna typdefinitioner, valideringsregler per fält och
|
|
828
|
+
egna översättningar. Innehållssystemets startkonfiguration ändras för att registrera det.
|
|
829
|
+
Delas inte. Ingen driftmiljö.
|
|
830
|
+
|
|
831
|
+
**Datalagring.** Serverlagrad struktur skrivs men ingen struktur ändras: befintliga
|
|
832
|
+
innehållstyper för användare och konto tar emot rader, och kopplingen mellan dem skapas i
|
|
833
|
+
samma skrivning. Uppladdad fil hålls i minnet under granskningssteget och lagras inte
|
|
834
|
+
permanent.
|
|
835
|
+
|
|
836
|
+
**Integrationspunkter.** Inga externa. Skrivningen sker genom innehållssystemets egna
|
|
837
|
+
gränssnitt.
|
|
838
|
+
|
|
839
|
+
**Flöden.** En ny sekvens i tre steg som administratören passerar i ordning: ladda upp
|
|
840
|
+
fil, granska vad som kommer att hända, bekräfta. Stegen har bestämd ordning och går inte
|
|
841
|
+
att nå var för sig.
|
|
842
|
+
|
|
843
|
+
**Gränssnitt.** Ett nytt mönster byggs. Administrationen har i dag ingen vy för
|
|
844
|
+
filuppladdning med granskningssteg, så uppladdningsytan, resultattabellen och
|
|
845
|
+
felredovisningen formges nytt inom systemets befintliga formspråk.
|
|
846
|
+
|
|
847
|
+
**Verifiering.** Automatiska tester täcker tolkning av filen, valideringsreglerna per fält
|
|
848
|
+
och att en avbruten import inte skriver något. Hela sekvensen behöver provas för hand,
|
|
849
|
+
eftersom den involverar filuppladdning i webbläsaren och tre steg som ska hänga ihop.
|
|
850
|
+
Minst tre fall: en korrekt fil, en med felaktiga rader och en som avbryts mitt i.
|
|
851
|
+
|
|
852
|
+
**Konsekvens av fel.** En felaktig import kan skapa användare med fel kontokoppling,
|
|
853
|
+
vilket ger en person tillgång till fel konto, och kan skriva över uppgifter på befintliga
|
|
854
|
+
användare. Eftersom importen skriver många rader i följd är felmängden potentiellt stor
|
|
855
|
+
och det finns ingen ångra-funktion. Granskningssteget finns just för att fånga detta före
|
|
856
|
+
skrivning.
|
|
857
|
+
|
|
858
|
+
**Vägval.** Importen byggs som ett eget instick med egen vy i stället för som en utökning
|
|
859
|
+
av en befintlig listvy, eftersom sekvensen med granskning före skrivning inte får plats i
|
|
860
|
+
det befintliga mönstret. Valideringen körs i två omgångar, först på filens form och sedan
|
|
861
|
+
per rad, så att en trasig fil avvisas direkt medan en i övrigt korrekt fil kan importeras
|
|
862
|
+
delvis.
|
|
863
|
+
|
|
864
|
+
**Antaganden.** Att filens kolumnuppsättning är stabil mellan påfyllningar. Går att
|
|
865
|
+
verifiera genom att jämföra de filer som använts hittills. Varierar den behöver
|
|
866
|
+
kolumnmappning bli en del av granskningssteget, vilket den inte är i dag.
|
|
867
|
+
|
|
868
|
+
**Beroenden.** Inga.
|
|
869
|
+
|
|
870
|
+
---
|
|
871
|
+
## Till granskaren
|
|
872
|
+
**Ej verifierat:** Om befintliga användare ska uppdateras eller hoppas över när de
|
|
873
|
+
förekommer i filen. Implementationen uppdaterar.
|
|
874
|
+
**Avvikelse mot specen:** Specen säger "skapar eller uppdaterar" utan att ange hur en
|
|
875
|
+
dubblett känns igen. Nyckeln har valts till användarens mejladress, vilket är ett
|
|
876
|
+
utfallsval specen inte besvarat.
|
|
877
|
+
|
|
878
|
+
---
|
|
879
|
+
|
|
880
|
+
# A14 · Delad komponent för lägg i varukorg
|
|
881
|
+
**13 poäng · Kundvänd funktion**
|
|
882
|
+
|
|
883
|
+
## Spec
|
|
884
|
+
|
|
885
|
+
**Problem.** Knappen för att lägga i varukorgen finns i tre olika versioner på olika ytor,
|
|
886
|
+
med olika beteende. Ändringar måste göras på tre ställen och glöms bort.
|
|
887
|
+
|
|
888
|
+
**Lösning.** En delad komponent ersätter de tre. Den hanterar antal med plus och minus,
|
|
889
|
+
bekräftelse innan en rad tas bort, och beteende för både inloggad och utloggad kund.
|
|
890
|
+
|
|
891
|
+
**När det är klart.** Samma komponent används på produktsida, i listor och i
|
|
892
|
+
varukorgswidgeten, med samma beteende. Att ändra antal till noll frågar innan raden tas
|
|
893
|
+
bort. Befintliga ytor beter sig som förut eller bättre, aldrig sämre.
|
|
894
|
+
|
|
895
|
+
**Ingår inte.** Ingen ändring av kassan.
|
|
896
|
+
|
|
897
|
+
## Påverkansanalys
|
|
898
|
+
|
|
899
|
+
**Berörda repon och filer.** En ny komponent i det delade komponentbiblioteket, en
|
|
900
|
+
komponent i butikens eget gränssnitt som bygger på den, en bekräftelsedialog, ikoner för
|
|
901
|
+
plus och minus, samt de tre ytor som byter till den nya komponenten: produktsidan,
|
|
902
|
+
produktlistans widget och inloggningsknappen i kassan. Formatmallar för knapp och dialog
|
|
903
|
+
justeras. **Komponentbiblioteket är delat mellan flera applikationer**, så ändringar i
|
|
904
|
+
knapp- och dialogformatet syns även utanför de tre ytorna.
|
|
905
|
+
|
|
906
|
+
**Datalagring.** Ingen strukturändring. Komponenten läser och ändrar den aktiva ordern
|
|
907
|
+
genom befintliga anrop.
|
|
908
|
+
|
|
909
|
+
**Integrationspunkter.** Inga externa.
|
|
910
|
+
|
|
911
|
+
**Flöden.** Ingen sekvens ändras. Komponenten används på tre ytor, alltså flera ingångar
|
|
912
|
+
till samma åtgärd, och det är just det som är skälet till posten.
|
|
913
|
+
|
|
914
|
+
**Gränssnitt.** Ett befintligt mönster förenas till ett. Bekräftelsedialogen före
|
|
915
|
+
borttagning är nytt beteende och behöver formges, men den bygger på biblioteket
|
|
916
|
+
befintliga dialogkomponent.
|
|
917
|
+
|
|
918
|
+
**Verifiering.** Automatiska tester täcker antalshanteringen, bekräftelsen vid noll och
|
|
919
|
+
beteendet för inloggad respektive utloggad kund. Att de tre ytorna faktiskt beter sig
|
|
920
|
+
likadant efter bytet går inte att bevisa automatiskt och behöver gås igenom för hand på
|
|
921
|
+
varje yta, i både inloggat och utloggat läge.
|
|
922
|
+
|
|
923
|
+
**Konsekvens av fel.** Fel antal kan hamna i varukorgen, eller en rad tas bort utan att
|
|
924
|
+
kunden avsett det, vilket ger fel order och fel belopp. Eftersom komponenten ersätter tre
|
|
925
|
+
befintliga kan ett fel dessutom bryta funktion som fungerade förut, på ytor som inte var i
|
|
926
|
+
fokus för ändringen.
|
|
927
|
+
|
|
928
|
+
**Vägval.** Komponenten läggs i det delade biblioteket i stället för i butikens egen kod,
|
|
929
|
+
eftersom syftet är att den ska kunna användas av flera applikationer. Bekräftelsen vid
|
|
930
|
+
noll läggs i komponenten i stället för på varje anropande yta, så att beteendet inte kan
|
|
931
|
+
glida isär igen, vilket är precis det problem posten ska lösa.
|
|
932
|
+
|
|
933
|
+
**Antaganden.** Att de tre befintliga versionerna inte har beteendeskillnader som någon
|
|
934
|
+
yta är beroende av. Går att verifiera genom att jämföra deras kod före bytet; en
|
|
935
|
+
skillnad som visar sig behövd måste bli en inställning på den delade komponenten.
|
|
936
|
+
|
|
937
|
+
**Beroenden.** Inga.
|
|
938
|
+
|
|
939
|
+
---
|
|
940
|
+
## Till granskaren
|
|
941
|
+
**Ej verifierat:** Om någon extern integration förlitar sig på den gamla komponentens
|
|
942
|
+
markering i sidan, till exempel för spårning.
|
|
943
|
+
**Avvikelse mot specen:** Specen säger att befintliga ytor aldrig ska bli sämre, men anger
|
|
944
|
+
inte vad som gäller om en yta har ett beteende de andra saknar.
|
|
945
|
+
|
|
946
|
+
---
|
|
947
|
+
|
|
948
|
+
# A15 · Inloggning med extern e-legitimation, gränssnittsdelen
|
|
949
|
+
**16 poäng · Integration**
|
|
950
|
+
|
|
951
|
+
## Spec
|
|
952
|
+
|
|
953
|
+
**Problem.** Kunder måste skapa lösenord för att handla, och många avbryter i det steget.
|
|
954
|
+
Butiken vill erbjuda inloggning med e-legitimation.
|
|
955
|
+
|
|
956
|
+
**Lösning.** Kunden kan logga in och registrera sig med e-legitimation. Inloggningen sker
|
|
957
|
+
i ett eget flöde med väntesteg medan legitimeringen pågår. Registrering av en ny kund
|
|
958
|
+
sker i två steg efter legitimeringen, där de uppgifter legitimationen ger fylls i
|
|
959
|
+
automatiskt. Inloggning med lösenord finns kvar.
|
|
960
|
+
|
|
961
|
+
**När det är klart.** En befintlig kund kan legitimera sig och blir inloggad. En ny kund
|
|
962
|
+
legitimerar sig, fyller i återstående uppgifter och får ett konto. Ett avbrutet eller
|
|
963
|
+
nekat försök leder tillbaka till inloggningsvalet med ett besked. Inloggning med lösenord
|
|
964
|
+
fungerar oförändrat.
|
|
965
|
+
|
|
966
|
+
**Ingår inte.** Ingen ändring av kassans betalflöde.
|
|
967
|
+
|
|
968
|
+
## Påverkansanalys
|
|
969
|
+
|
|
970
|
+
**Berörda repon och filer.** Butikens gränssnittsdel: en ny komponentgrupp för
|
|
971
|
+
legitimering, ett omskrivet inloggningsformulär, ett tvåstegs registreringsflöde, samt
|
|
972
|
+
justeringar i de generella fält- och kryssrutekomponenterna. Två applikationer berörs,
|
|
973
|
+
butiken på webben och motsvarande mobilapplikation, som delar komponentbibliotek.
|
|
974
|
+
**Fält- och kryssrutekomponenterna är delade** och används av fler ytor än inloggningen,
|
|
975
|
+
så ändringar i dem syns på andra ställen. Widgetkonfigurationen utökas med de nya ytorna.
|
|
976
|
+
|
|
977
|
+
**Datalagring.** Ingen serverlagrad struktur ändras här; den delen ligger i serverdelen av
|
|
978
|
+
samma satsning. Klientlagring används för att hålla legitimeringens tillstånd mellan
|
|
979
|
+
väntesteg och återkomst, och rensas när flödet avslutas eller avbryts.
|
|
980
|
+
|
|
981
|
+
**Integrationspunkter.** Legitimeringstjänsten är extern och anropas genom serverdelen,
|
|
982
|
+
inte direkt från klienten. Ur gränssnittets perspektiv är integrationen ny, och den för
|
|
983
|
+
med sig väntetider och avbrottslägen som gränssnittet måste hantera.
|
|
984
|
+
|
|
985
|
+
**Flöden.** Två sekvenser som användaren passerar i ordning. Inloggningen har start,
|
|
986
|
+
väntesteg och utfall. Registreringen har två steg efter legitimeringen. Båda kan avbrytas
|
|
987
|
+
i varje läge och måste då lämna kunden i ett begripligt tillstånd. Inloggningsytan nås
|
|
988
|
+
dessutom från flera ställen i butiken, alltså flera ingångar till samma åtgärd.
|
|
989
|
+
|
|
990
|
+
**Gränssnitt.** Ett nytt mönster byggs. Väntesteget med statusbesked, avbrottsknapp och
|
|
991
|
+
återkomst finns inte i butiken sedan tidigare och formges nytt. Registreringsstegen
|
|
992
|
+
återanvänder befintliga formulärkomponenter i en ny stegindelning.
|
|
993
|
+
|
|
994
|
+
**Verifiering.** Automatiska tester täcker formulärens validering och att komponenterna
|
|
995
|
+
återger de tillstånd de får. Själva legitimeringen går inte att prova automatiskt,
|
|
996
|
+
eftersom den kräver den externa tjänstens testläge och en riktig legitimation. Hela kedjan
|
|
997
|
+
behöver gås igenom för hand för befintlig kund, ny kund, avbrutet försök och nekat försök,
|
|
998
|
+
på både webb och mobil eftersom flödet lämnar och återvänder till applikationen olika på
|
|
999
|
+
de två.
|
|
1000
|
+
|
|
1001
|
+
**Konsekvens av fel.** Ett fel i kopplingen mellan legitimering och konto kan logga in en
|
|
1002
|
+
kund på fel konto, alltså felaktig åtkomst till en annan persons uppgifter och
|
|
1003
|
+
orderhistorik. Ett fel i väntestegets tillståndshantering kan lämna kunden inloggad utan
|
|
1004
|
+
att legitimeringen fullföljts. De delade fält- och kryssrutekomponenterna används av
|
|
1005
|
+
andra formulär, så ett fel där kan bryta befintlig funktion utanför inloggningen.
|
|
1006
|
+
|
|
1007
|
+
**Vägval.** Legitimeringen anropas genom serverdelen i stället för direkt från klienten,
|
|
1008
|
+
eftersom nycklarna inte får finnas i webbläsaren. Väntesteget bygger på att klienten
|
|
1009
|
+
frågar serverdelen om status med jämna mellanrum i stället för att hålla en öppen
|
|
1010
|
+
förbindelse, eftersom det klarar att kunden byter flik eller låser skärmen.
|
|
1011
|
+
Registreringen delas i två steg i stället för ett långt formulär, så att de uppgifter
|
|
1012
|
+
legitimationen redan gett kan visas ifyllda innan kunden ombeds fylla i resten.
|
|
1013
|
+
|
|
1014
|
+
**Antaganden.** Att legitimeringstjänstens testläge går att nå från utvecklingsmiljön. Går
|
|
1015
|
+
att verifiera med ett provanrop innan bygget startar. Att mobilapplikationen kan återvända
|
|
1016
|
+
till rätt vy efter att legitimeringsappen öppnats — går att verifiera i mobilens
|
|
1017
|
+
testbygge, och om det inte fungerar krävs en annan återkomstmekanik.
|
|
1018
|
+
|
|
1019
|
+
**Beroenden.** Serverdelen som talar med legitimeringstjänsten måste finnas innan flödet
|
|
1020
|
+
kan provas i sin helhet.
|
|
1021
|
+
|
|
1022
|
+
---
|
|
1023
|
+
## Till granskaren
|
|
1024
|
+
**Ej verifierat:** Hur länge en påbörjad legitimering ska anses giltig innan väntesteget
|
|
1025
|
+
ger upp. Implementationen använder tjänstens egen gräns.
|
|
1026
|
+
**Avvikelse mot specen:** Specen säger att lösenordsinloggning finns kvar men inte om en
|
|
1027
|
+
kund som legitimerat sig också ska kunna sätta ett lösenord.
|
|
1028
|
+
|
|
1029
|
+
---
|
|
1030
|
+
|
|
1031
|
+
# A16 · Strukturerad produktdata för sökmotorer
|
|
1032
|
+
**17 poäng · Kundvänd funktion**
|
|
1033
|
+
|
|
1034
|
+
## Spec
|
|
1035
|
+
|
|
1036
|
+
**Problem.** Produktsidorna saknar strukturerad data, så sökmotorer visar dem utan pris,
|
|
1037
|
+
lagerstatus och omdömen. Konkurrenter syns med den informationen.
|
|
1038
|
+
|
|
1039
|
+
**Lösning.** Produktsidorna får strukturerad data med pris, tillgänglighet och de fält
|
|
1040
|
+
sökmotorernas handelsprogram kräver. Datan genereras i bakgrunden och uppdateras när
|
|
1041
|
+
produkten ändras. Vilka fält som ingår konfigureras per installation.
|
|
1042
|
+
|
|
1043
|
+
**När det är klart.** En produktsida innehåller strukturerad data som validerar mot
|
|
1044
|
+
sökmotorernas verktyg. Ändras pris eller lagerstatus uppdateras datan inom ett dygn. En
|
|
1045
|
+
installation som inte vill ha handelsfälten får bara grunddata.
|
|
1046
|
+
|
|
1047
|
+
**Ingår inte.** Ingen registrering hos sökmotorernas handelsprogram.
|
|
1048
|
+
|
|
1049
|
+
## Påverkansanalys
|
|
1050
|
+
|
|
1051
|
+
**Berörda repon och filer.** Ett nytt instick som genererar strukturerad data, med en
|
|
1052
|
+
tjänst som bygger datan, en bakgrundsuppgift som håller den aktuell, egna typer och
|
|
1053
|
+
konstanter. Dessutom nya fält på produktvarianten, en migrering för dem, ett instick som
|
|
1054
|
+
länkar till butiken, och plattformens konfiguration. Även butikens egen konfiguration
|
|
1055
|
+
berörs, eftersom sidan ska återge datan. Ingen driftmiljö, men bakgrundsuppgiften måste
|
|
1056
|
+
vara igång i drift.
|
|
1057
|
+
|
|
1058
|
+
**Datalagring.** Serverlagrad struktur ändras: produktvarianten får flera nya fält, med en
|
|
1059
|
+
migrering. Fälten är valfria och saknar värde för befintliga produkter, så ingen
|
|
1060
|
+
bakåtfyllning krävs, men migreringen måste köras före driftsättning. Den genererade datan
|
|
1061
|
+
lagras för att slippa byggas om vid varje sidvisning.
|
|
1062
|
+
|
|
1063
|
+
**Integrationspunkter.** Inga anrop till externa system. Datan konsumeras av sökmotorer
|
|
1064
|
+
som läser sidan, alltså en ensidig koppling utan anrop åt något håll.
|
|
1065
|
+
|
|
1066
|
+
**Flöden.** Ingen sekvens användaren passerar. Genereringen sker i bakgrunden när en
|
|
1067
|
+
produkt ändras.
|
|
1068
|
+
|
|
1069
|
+
**Gränssnitt.** Inget kundvänt gränssnitt. De nya fälten redigeras i administrationens
|
|
1070
|
+
befintliga formulär för produktvarianter, med plattformens egna fältkomponenter.
|
|
1071
|
+
|
|
1072
|
+
**Verifiering.** Automatiska tester täcker att datan byggs med rätt innehåll, att den
|
|
1073
|
+
konfigurerbara delen respekteras och att bakgrundsuppgiften utlöses vid ändring. Att datan
|
|
1074
|
+
faktiskt godkänns av sökmotorernas valideringsverktyg går inte att bevisa i egna tester
|
|
1075
|
+
och behöver kontrolleras för hand mot verktygen, för minst en produkt med och en utan
|
|
1076
|
+
handelsfälten. Att uppdateringen sker inom ett dygn behöver följas upp i drift.
|
|
1077
|
+
|
|
1078
|
+
**Konsekvens av fel.** Felaktig strukturerad data kan ge sökmotorerna fel pris eller fel
|
|
1079
|
+
lagerstatus, vilket möter kunden som ett annat pris i sökresultatet än i butiken. I värsta
|
|
1080
|
+
fall kan sökmotorernas handelsprogram stänga av butiken för felaktig data, vilket tar tid
|
|
1081
|
+
att få tillbaka. Ingen order eller betalning påverkas direkt.
|
|
1082
|
+
|
|
1083
|
+
**Vägval.** Datan genereras i en bakgrundsuppgift och lagras i stället för att byggas vid
|
|
1084
|
+
varje sidvisning, eftersom den kräver flera uppslag och sidvisningarna är många.
|
|
1085
|
+
Fördröjningen på upp till ett dygn är priset för det, och den är godtagbar eftersom pris
|
|
1086
|
+
och lagerstatus i sökresultat ändå uppdateras med fördröjning hos sökmotorn. Vilka fält
|
|
1087
|
+
som ingår görs konfigurerbart, eftersom handelsprogrammens krav skiljer sig mellan
|
|
1088
|
+
marknader och ett fast fältset hade tvingat fram en ändring per installation.
|
|
1089
|
+
|
|
1090
|
+
**Antaganden.** Att produktens omdömen finns tillgängliga i systemet. Går att verifiera
|
|
1091
|
+
genom att söka efter fältet på produktvarianten; saknas de utgår den delen och kravet
|
|
1092
|
+
behöver tillbaka till specen.
|
|
1093
|
+
|
|
1094
|
+
**Beroenden.** Inga.
|
|
1095
|
+
|
|
1096
|
+
---
|
|
1097
|
+
## Till granskaren
|
|
1098
|
+
**Ej verifierat:** Om bakgrundsuppgiftens körintervall räcker för att hålla löftet om ett
|
|
1099
|
+
dygn vid stora produktkataloger.
|
|
1100
|
+
**Avvikelse mot specen:** Specen säger "de fält sökmotorernas handelsprogram kräver" utan
|
|
1101
|
+
att räkna upp dem. Fältuppsättningen är vald ur dagens dokumentation och kan ändras av
|
|
1102
|
+
sökmotorn.
|
|
1103
|
+
|
|
1104
|
+
---
|
|
1105
|
+
|
|
1106
|
+
# Poängen samlat
|
|
1107
|
+
|
|
1108
|
+
| Ankare | Poäng | Typ | Uppdrag |
|
|
1109
|
+
| --- | --- | --- | --- |
|
|
1110
|
+
| A1 | 0,25 | Kundvänd funktion | Uppdatera texter i en översättningsfil |
|
|
1111
|
+
| A2 | 0,75 | Kundvänd funktion | Visa ett kontonummer i användarens kontovy |
|
|
1112
|
+
| A3 | 0,75 | Kundvänd funktion | Härled landval ur webbadressens språkdel |
|
|
1113
|
+
| A4 | 1 | Kundvänd funktion | Gör en rad i en produktlista klickbar |
|
|
1114
|
+
| A5 | 2 | Underhåll | Säkerhetsuppdatering av beroenden |
|
|
1115
|
+
| A6 | 2,25 | Kundvänd funktion | Normalisera filnamn vid uppladdning |
|
|
1116
|
+
| A7 | 2,5 | Teknisk uppsättning | Konfigurerbart spårningsskript per webbplats |
|
|
1117
|
+
| A8 | 3 | Integration | Kundmatchning mot affärssystem via momsnummer |
|
|
1118
|
+
| A9 | 4 | Internt verktyg | Låt administratörer sätta en kunds lösenord |
|
|
1119
|
+
| A10 | 4 | Kundvänd funktion | Förpackningsstorlek med decimaler |
|
|
1120
|
+
| A11 | 7 | Integration | Hantera felaktigt pris vid sidladdning i betalflödet |
|
|
1121
|
+
| A12 | 9 | Kundvänd funktion | Förbättrad kartvy för val av upphämtningsplats |
|
|
1122
|
+
| A13 | 12 | Internt verktyg | Import av användare och konton från fil |
|
|
1123
|
+
| A14 | 13 | Kundvänd funktion | Delad komponent för lägg i varukorg |
|
|
1124
|
+
| A15 | 16 | Integration | Inloggning med extern e-legitimation, gränssnittsdelen |
|
|
1125
|
+
| A16 | 17 | Kundvänd funktion | Strukturerad produktdata för sökmotorer |
|
|
1126
|
+
|
|
1127
|
+
## Ett mönster värt att lägga märke till
|
|
1128
|
+
|
|
1129
|
+
A9 och A10 har samma poäng, 4, men ser olika ut. A9 bygger ett helt nytt instick med
|
|
1130
|
+
gränssnitt, behörighet och historik. A10 ändrar en datatyp i tre filer. Skillnaden är att
|
|
1131
|
+
A10 rör delad kod som används av flera installationer, vilket drar med sig migrering per
|
|
1132
|
+
installation och en risk som sträcker sig utanför beställaren.
|
|
1133
|
+
|
|
1134
|
+
Det är den sortens jämförelse skalan finns för. Antalet filer säger lite; vad ändringen
|
|
1135
|
+
drar med sig säger mycket.
|