Det var en gång...

Flera decennier inom QA ger en del dråpliga och insiktsgivande berättelser att förmedla. För min egen skull har jag börjat besrkiva en del av dessa här.

Detta är en av dem.


Perifer funktionalitet som sänker rubbet

När man jobbar med test och kvalitetssäkring gör man alltid riskbedömningar eftersom man aldrig hinner att testa allt. Omvärlden är komplex; människor gör inte som man förutsett, nya små uppdateringar av middleware, drivrutiner, script i AD, brandväggsregler och liknande kan rycka undan mattan för allt.

För att tackla denna komplexitet brukar man testa i olika lager. Vi säkrar att koden fungerar som tänkt i enhetstester. Vi testar att inget i programkörningsuppsättningen är knasigt på CI/CD-servern. Vi kollar att beroenden inom systemt fungerar som avsett i systemtester. Vi kontrollerar att verksamheten kan fortgå med våra ändringar i acceptanstester.

När jag hamnade i dagligvaruhandeln blev det påtagligt att alla dessa nivåer behövdes. Systemen räknades i tusental. De var skapade i allehanda teknologier och en brokig blandning av egenutvecklat och inköpt.

Vi gjorde vårt yttersta att testa så allt fungerade. Någonstans runt år 2010 började vi införa scriptade prestandatester i releaseprocessen.

Det var väldigt tidigt. Jag kände att vi var pionjärer. Vi releasade ofta och prestandatesterna gick inför varje release. Ibland hittade dessa tester problem som åtgärdades inför releaser så de fyllde en verklig nytta.

En dag fick vi larm från produktion om att en av våra frontservrar för webben hade gått ner. Vi fick snabbt upp sajten igen, men några timmar senare dök en annan sådan igen. Vi var konfunderade och felsökte. Till slut hittade vi att sajten dog när någon handlade något på den nyligen introducerade sidan för catering.

Denna var en av många externa tjänster som länkades in på vår sajt. Den var inte marknadsfört alls ännu, men hade lagts ut i produktion. Våra testscript hade dock ännu inte inkluderat denna funktionalitet eftersom vi knappt var medvetna om att någon webbredaktör länkat in den.

Än idag kan jag fundera över hur tafflig en implementation måste vara för att sänka en hel frontend-server.
Samtidigt var det i samma organisation som någon av alla tusentals människor som hade möjlighet att vara webbredaktörer där hade lagt ut en puff som referade till sig själv och alltså sänkte en front-server så fort någon gick in på den sidan. Det problemet tog tid att hitta. Det är svårt att bygga IT-lösningar som tar höjd för den mänskilga faktorn.

Ibland är det ännu mer komplicerat än så.

Denna organisation hade vid ett annat tillfälle prestandaproblem som vi inte kunde hitta. Vi hade nyligen lanserat en ny lösning, men denna var testad för sig och hade inte några prestandaproblem. Vi provade med olika laster och vid olika tidpunkter men kunde inte hitta felet och felet drabbade alla system. Vi pratade med driften, nätverksgänget och monitorerade alla servrar och nätverkskomponenter vi kunde tänka oss var inblandade. Ingenstans bottnade de. De hade CPU, minne, bandbredd, I/O och annat under kontroll. Allt borde gå bra. Ändå gjorde det inte det.

Under andra dagen märkte jag att bandbredden verkade nypa vid en viss bandbredd, men vi hade ju kollat alla nätverkskomponenter. Ytterligare samtal till nätverksgänget och till säkerhetsfolket tog vid. Till slut visade det sig att den licens som fanns för IPS:en (Intrusion Protection System, en säkerhetskomponent som analyserar trafikpaket i nätverk) bara var giltig för ett visst antal GB/sec.

Det tog ytterligare några dagar innan en utökad licens var på plats men därefter fungerade prestandan klanderfritt igen.

The devil is in the details. Alltid.