[Java lista] Szoftver-tesztelés

Auth Gábor auth.gabor at javaforum.hu
2010. Sze. 5., V, 22:18:08 CEST


Halihó!

2010. szeptember 5. 21.11.07 dátummal András Csányi az alábbiakat írta:
>>  Tegye fel a kezét, akinél egy közepesen összetett program a teszt- és az
>> éles környezetben azonosan viselkedett... :) 
>>  Egy kezet se látok...  akkor meg minek annyit tesztelni? :D
> Gábor, közepesen összetett programteszt...?

  Mondom közepesen összetett program... :)

> Ha nem tudod megcsinálni azt, hogy a tesztkörnyezetben futó szoftver
> és az éles környezetben futó szoftver ugyanúgy viselkedjen, akkor
> valamit benéztél. :)

  Vagy nem láttál még közepesen összetett rendszert, ez kb. 5-10 millió 
programsortól kezdődik és legalább egy tucat külső rendszerhez kapcsolódik. 
Ekkora "saját" rendszert nem kihívás tesztelni, ha viszont SOA elvek mentén 
állandóan önmagát hívja keresztül-kasul, akkor az egész működését viszont 
igazi művészet - főképp, ha a kódbázis kétharmada a külső rendszerekkel való 
kommunikációért felelős... :)

  Ha ehhez hozzávesszük, hogy a külső rendszerek közül van, amelyiknek csak és 
kizárólag éles verziója van éles adatokkal, akkor ez eléggé aknamezővé teheti 
a teszteket, ilyenkor szokták a félősebb időszakokban azt mondani, hogy majd 
kieső órákban éles üzemben teszteljük, legfeljebb visszaállunk. :)

  Van eset, amikor a külső rendszernek van ugyan teszt környezete, de csak 
időnként érhető el, és akkor is jelentősen limitált teljesítménnyel. Ennél 
csak az rosszabb, amikor közös interfésze van az éles és teszt rendszernek, és 
a kérés egy paramétere - jó esetben ez egy flag, rossz esetben 0-y közötti 
azonosítóval teszt adatok, x-végtelen között éles azonosítók vannak, s ez 
rendelkezik arról, hogy most tesztelünk vagy éles üzemből érkező módosítást  
kérünk.

  Van olyan, amikor egy a külső rendszer teszt környezete egyben fejlesztői 
környezet (jobb esetben integrációs környezet), ekkor egy hibás válasz esetén 
tesztelő legyen a talpán, aki eldönti, hogy mi és hol okozta a hibát. 

  Van olyan, amikor nem a külső rendszer teszt környezete a hibás, hanem a két 
helyet összekötő (teszt- vagy backup-)hálózaton tesztelnek vagy javítanak a 
hálózatért felelős emberek, az öt évvel ezelőtt megszűnt cég meghalt 
fejlesztője által fejlesztett modul pedig misztikus hibaüzenetekkel 
szórakoztatja az üzemeltetést, aztán az üzemeltetés a fejlesztést, azok pedig 
hosszas tanácstalanság után halkan rákérdeznek, hogy a hálózattal van-e valami 
gond, mire kiderül, hogy van azzal gond, de a hálózatosok úgy gondolták, hogy 
50 százalékos csomagvesztés egy teszt környezetben nem ok arra, hogy szóljanak 
róla.

  Van olyan, amikor egy-egy szerver költözik karbantartás vagy gépterem 
reorganizáció kapcsán, vagy az élesben éppen meghibásodott, ezért a teszt 
környezetből pótolták, és amíg megjön a megrendelt dolog, addig fél lábon vagy 
ülve kibírja a teszt rendszer az a három hónapocskát. Persze három hónapig 
csak álom a teszt és az éles azonos működése.

  Arról nem is beszélnék, amikor ránézésre szinte bitre ugyanaz az alkalmazás 
szerver teszt rendszeren gond nélkül működik, éles környezetben pedig az egyik 
láb baromságokat csinál - megtörtént eset. Nem kellett végül fekete kakast 
áldozni éjfélkor a gépteremben, az ok triviális volt. Volt két azonos - de 
eltérő verziójú - jar fájl a classpath-on, és valami fájlrendszerbeli ok miatt 
az összes szerver a jót találta meg elsőre, ezért nem próbálkozott meg a rossz 
betöltésével, a különc szerveren viszont a rosszat találta meg elsőre, ezért 
volt hibás - persze miért ne az éles környezetben történjen ilyen... :)

  További problémák lehetnek a működési paraméterek különbözősége, hiszen a 
teszt rendszernek teszt adatbázist kell elérnie, teszt felhasználókkal, és jól 
látható módon jeleznie kell minden felhasználóval való kapcsolata esetén, hogy 
teszt rendszerről van szó. Ezért az éles üzemhez más paraméterezéssel kell 
futnia, mint teszt környezetben, és itt szoktak eltérések mutatkozni, jó 
esetben feltűnő módon, esetleg működésképtelenséget okozva (hálózatilag 
elszeparált éles és teszt környezet), rossz esetben sunyi módon az éles üzembe 
tett modul a teszt környezethez csatlakozik, vagy fordítva.

  Ezen túl gyakori, hogy a teszt környezetben nincs annyi és olyan gép, hogy 
terheléses, illetve stressz teszteket lehessen futtatni. Gyakran éles üzemből 
levedlett gépek kerülnek a teszt környezetbe, gyakran még ilyen gépek se. 
Mostanában divat a virtualizáció, így sok esetben az éles környezet fizikai 
hardveren fut, a teszt környezet pedig virtualizálva, ez is jelenthet apró 
működésbeli különbségeket.

  Olyan céget igen keveset láttam, ahol sikerült volna elérni a "klasszikus" 
éles-, teszt-éles-, stressz-teszt- és/vagy QA-teszt-, felhasználói-teszt- 
és/vagy funkcionális-teszt-, illetve integrációs környezeteket. Olyat még 
egyet se, ahol ezek mind egyformán működtek volna... :)

  Szóval összefoglalva: egy közepesen összetett program és/vagy rendszer 
esetén én még nem láttam azonosan működő teszt és éles környezetet... :)
-- 
http://www.javaforum.hu -=- http://www.enaplo.hu
Auth Gábor -=- http://www.javaforum.hu/web/10/authgabor


További információk a(z) Javalist levelezőlistáról