Szoftverfejlesztői képességek a tesztelőknek
Egy tesztelőnek tudnia kell kódolni! Egy tesztelőnek tudnia kell kódolni?
Egy előző cikkemben (“Tesztelő és fejlesztő vitája: Továbbléphetünk?”) a következőket javasoltam:
- A tesztelő fejlesztői tudása segít sok esetben és sokkal produktívvá teszi a tesztelést.
- Nincs értelme ezt a képességet mindenkinek előírni.
- A tesztelők programozói tudása csak nagyon ritka esetben kell, hogy olyan mélyreható legyen, mint egy fejlesztőnek.
- Egy tesztelő-kódoló tréning jelentősége ott van, hogy segítsen a tesztelőknek bizonyos kérdések felismerésében a kódsorok vagy az automata tesztek értelmezésénél.
Tovább kellene lépnünk már ezen a vitán és inkább komolyan el kellene gondolkodnunk azokon a fejlesztési irányokon, amik segítik a tesztelőket a munkában, vagy megerősítik azokat a tesztelőket a tudásukban, akik technológiai látásmódra vágynak.
Hogyan kellene a kódolási tudást megszerezni?
Amit szintén az előző cikkemben fejtegettem, nem vagyok nagy szakértője a programnyelvek oktatásának, illetve a számítástechnikának úgy általában. Sohasem tanultam olyanoktól, akik ennek a területnek a nagyon jó ismerői. Felesleges mondanom, nem vagyok egy akadémikus. De megbízom egy csapat akadémistában, akik szerteágazó tudással rendelkeznek ebben. Lektorálták a forrásirodalmat, amit használtam és a következő hozzáfűzéseket tették:
Arra a következtetésre jutottunk, hogy annak ellenére, hogy nagy mennyiségű szakirodalom létezik ezen a területen, kevés szisztematikus bizonyíték támasztja alá az adott megközelítést. Ezen okból kifolyólag nem fogunk explicit választ adni arra a kérdésre, hogy hogyan kell bevezető programozást oktatni.
Ezzel a kijelentéssel azt hiszem, hogy biztonságban vagyok. Azt fogom javasolni, hogy a legtöbb piacon elérhető programozói kurzus alkalmatlan a tesztelők képzésére, és azt, hogy különböző tematikák szükségesek. A programozói képességek a tesztelőknek az elvárások alapján kell, hogy felépüljenek, a képességeket kell javítaniuk. Tartalmazniuk kell a programozás alapjait, az alapelveket és az automatikus ellenőrzés eszközeit.
Azt szeretném, ha üzleti, vagy félig technikai beállítottságú tesztelőket képeznének elégséges programozói képességekre, hogy a tesztelési képességeiket ilyen irányban bővítsük.
Ne tudásban, hanem képességekben gondolkozzunk
Kiélezni a kérdést teljesen felesleges: Kódolni, vagy nem kódolni? Sokkal több értelme van a képességekről elgondolkodni. Kérdezzük csak meg, milyen szoftveres tudással kell egy tesztelőnek rendelkeznie a munkájához? Természetesen ez attól függ, hogy mi pontosan a feladata. Itt egy lista a tesztelők elvárt képességeiről, amelyeket a tesztelők, vagy a csapatok hasznosnak tartanak bizonyos esetekben:
- Az alapok és algoritmusok olvasásának és megértésének a képessége
- Tesztek készítése, futtatása, értelmezése a unit teszt keretrendszerben (TDD, BDD)
- Tesztek készítése, futtatása, értelmezése a GUI teszteszközökben
- A fejlesztőkkel való egyeztetés képessége a tesztlefedettségről és ennek a hasznosságáról a tesztekben
- Egyszerű programok, lekérdezések írásának képessége a tesztadatok elérése érdekében strukturált és strukturálatlan állományokból. (SQL, XML, CSV, stb.)
- A meglévő állományok és eszközök használatának a képessége a tesztek írásához, hálózati eszközök, webszerverek, FTP-k teszteléséhez.
és így tovább.
Meg kellene magyaráznom, hogy miért használom a képesség szót a kompetencia helyett. Néhány esetben a kompetencia valamilyen végzettséget jelent (vizsgázott szakember). Azért, hogy hiteles maradjak, mostantól a képesség szót fogom használni, bár a kompetencia szó is ugyanolyan értékkel bír.
A technikai szakértelem és a képességek kapcsolata
A képességek (vagy csapat/projekt elvárások) sokkal barátságosabb definíciók lesznek a tesztelők számára. Legtöbbször a technikai tudással nem rendelkező tesztelők egyeztetnek a fejlesztő kollégáikkal, vagy egy automatizáló szakembert is bevesznek a csapatba. Ha a tesztelők maguktól akarják a technikai feladatot megoldani, akkor rendelkezniük kell valamilyen szakértelemmel. Milyen technikai szakértelmekre van szükség az egyes képességekhez?
- Minden képességhez egy alapfelfogás kell, hogy megértsük, a kód hogyan íródott és tapasztalattal kell rendelkezni valamelyik fontosabb programozási nyelvben
- Képesség a használt programozási nyelv megértésére
- Képesség az unit teszt keretrendszer értelmezésére
- A GUI és a teszteszközök használatának képessége
- Kódszerkesztés és lefedettség-vizsgálat képessége
- A sztenderd könyvtárak használatának képessége (adatbázis-elérések, XML- és HTML-olvasás képessége)
- Architekturális és egyéb könyvtárak és kiegészítők használatának a képessége (web/http, levelezőszerverek, stb.)
Számos programozói (vagy szoftvermérnöki) kompetenciaszint publikusan elérhető. Az egyik közkeletű itt (http://sijinjoseph.com/programmer-competency-matrix/ ) megtekinthető, de ez leginkább a programozásra és a szoftverfejlesztői képességekre fókuszál. Úgy néz ki, mint egy tanterv, egy kompetencia ütemterv. De hagyjuk is a kompetenciákat.
A képességek elérése
A fent felsorolt képességek nincsenek semmilyen fontossági sorrendben. Legtöbbször ezen képességek valamelyikére, vagy ezen képességek valamilyen kombinációjára van szükség az adott feladathoz. Jóllehet az alapvető kódolási képesség elvárás, és a feladat során az adott kérdés mélyebb megismerése szükséges, de csakis a saját ambíciónkon vagy hozzáállásunkon múlik az új dolgok megismerése, megtanulása. Hadd mutassak egy példát a könyvtárakkal, ami láttatja, milyen messze vagyunk a programozóktól a feladatban.
Egyfelől ezek csak könyvtárak, amelyeket különböző változatokban használunk, de minél bonyolultabb problémákkal találkozunk, annál kifinomultabb képességekre lesz szükségünk.
A következő felsorolásban a képességek szintjeit mutatom meg. A használhatóság szerint kell ezeket értelmezni:
- Egyszerű programozói képesség, amely nem igényel külön könyvtártámogatást
- Könyvtárak, amelyek az alapnyelv részei
- Könyvtárak, amelyek a programozói szakirodalmakban vannak. Ilyenek, amelyek az alapvető programnyelven kívüli folyamatokat támogatják, vagy a magasabb szintű algoritmusokat, üzenetküldést, integrációt a közösségi hálózatokkal …
- Kutatásra, értékelésre használt könyvtárak ismerete, amelyek nincsenek dokumentálva, nincsenek a szakirodalmakban megemlítve. Pl.: adatok elemzése
- Saját könyvtárak készítésének a képessége ott, ahol a meglévő könyvtárak nem hoznak eredményt.
Az az ésszerű elvárás, hogy egy junior programozó a 3. szinten van, a tapasztalt a 4. szinten. A programozónak értenie kell a nyelvhez, de emellett magabiztosan saját döntéseket is kell hoznia. A tesztelőknek azt kell megérteniük, hogy hogyan lehet magabiztos döntéseket hozni (3. szint) és milyen út vezet a juniortól a tapasztalt programozóig.
Mit és hogyan kell a tesztelőknek megtanulniuk?
Minden, amiről eddig a képességekről beszéltünk nagyon szép, de a tesztelők általában az alábbi kérdéseket teszik fel:
- Szükségem van valamilyen képességre a feladathoz? Mire pontosan?
- Hogyan tudom azt megszerezni?
Az a javaslatom, hogy a motiváció, valaminek a megismerésének akarata az első képesség amire szükség van a feladat minél jobb megoldása érdekében. A meglévő programrészletek megtanulása, a kódok újbóli futtatása egy jó út a programozóvá válás iskolájában, de nagyon kevés hozzáadott értéke van a csoportos tanulásban. De a nap végén mégis fel tudsz mutatni egy programrészt, ami működik, ami értékkel rendelkezik, valami, amire lehet építkezni, amivel növelheted a saját képességeidet, amivel részt vehetsz a feladatban, és hozzátehetsz a sikerhez.
A legjobb útja a tanulásnak egy adott kérdés megvilágítása egy programmal, hogy legyen tapasztalatunk a saját kód írásában, hogy tudjunk valamit adni, amit saját magunk készítettünk, és a feladatnak megfelelően változtatni vagyunk képesek. Természetesen a használható kódsorok és példák száma egy tréningen korlátos, inkább olyan példákkal találkozunk, amelyek az oktatás céljából fontosak. Lennie kell mindig egy optimális megoldásnak a kérdésre. Például nem minden esetben kell a legbonyolultabb könyvtárakat, vagy a legrészletesebb algoritmusokat használni. Elkerülhetetlen, hogy néha az ajánlott megoldás az egyetlen megoldás a kérdésre, de ez nem általános. És természetesen a való világ faktor is kívül van az oktatás keretein. Amikor a való világ határozza meg, hogyan is kell kinéznie a tökéletes megoldásnak.
Természetesen szükség van egy jó programozói és tesztelői környezetre és egy jó tanárra is.
Mire nem jók a jelenleg elérhető kurzusok?
Majdnem az összes jelenleg elérhető kurzus az adott nyelv alapjait tanítja meg. Legtöbbször a szintaktikai szabályokra fókuszál, tehát azt tanítja, hogyan lehet egy alap alkalmazást felépíteni. Nos, ez rendben is van, ha már eleve programozók vagyunk, vagy akkor, ha azért tanulunk, hogy megismerjük a programozási nyelv szintaktikai elemeit. De ha teljesen kezdők vagyunk, akkor nem tanít meg arra, hogyan készítsünk a való világ számára értékes alkalmazásokat:
- Nem tanít meg arra, milyen a jó terv vagy mik a jó/rossz programozói praktikák
- Ha objektum-orientált a nyelv, nem fogod megtanulni, hogyan kell egy ilyen programot tervezni, még akkor sem, ha tudod, hogyan kell egy objektumot létrehozni, vagy használni.
- Rengeteg olyan elemet fogsz megtanulni, amit sohasem fogsz használni, illetve olyanokat, amelyeket a közeli jövőben biztosan nem fogsz használni.
- A teszteléshez leggyakrabban nem adnak semmilyen fogódzót és nem is fektetnek rá nagy hangsúlyt a tananyagban
- Nemigen fogsz tudni használható alkalmazást írni.
A tesztelők számára tartott programozói kurzusoknak az összes fentebb említett kérdést/témát meg kellene világítaniuk.
Hogyan tanuljunk?
Amit itt javasolok, az különböző tervezési elvek a tesztelők programozói képzésére, egy lehetséges tematikával. Egy programtervezési eszköztár, a mögötte lévő gondolkodásmód megértésével.
Feladat orientáltság
A kurzusok példákon keresztül abban adjanak segítséget, hogy a hallgatók a napi munkájukat hatékonyabban végezzék. Nem az a cél, hogy az aktuális programozói nyelv minden aspektusát megtanítsa a kurzus.
Gyakorlatiasak, nem tökéletesek
A tréning példái, amiket megismerünk, nem lesznek tökéletesek. Nem feltétlenül a leghatékonyabbak, esetleg duplikált kódokat tartalmaznak, vagy egyáltalán nem használnak objektumokat de működnek.
Minden tréning az alapokkal kezdődik
Először a leghasználatosabb alapokkal ismerkedünk meg. Az általános programtervezéssel és folyamatokkal, valamint a programozási elemekkel. Minden további modul az alapmodul felépítésétől függ.
Tartalom vezérelt és követelmény vezérelt tréning a képességekre
A képzések tartalmának egyeznie kell az elvárásokkal, amelyek a képességekre vonatkoznak, amelyeket a tréning után a résztvevőktől várnak.
Egy nyelvtanulási folyamat is része kell, hogy legyen a tréningnek
Mivel a kurzusok nem fognak az összes részletkérdéssel és az összes elérhető kiegészítéssel foglalkozni, lesznek hiányosságok és szürke foltok. A kurzusnak fel kell készítenie arra, hogy képesek legyünk megtalálni a megfelelő nyelvet, a leghasználhatóbb programkönyvtárakat, és kódrészleteket különböző forrásokból azért, hogy ne vesszünk el, amikor egy új feladat vagy követelmény merül fel.
A szkriptnyelv kell, hogy a legelső legyen
Amikor az ügyfélnek nincs konkrét elvárása a nyelv tekintetében, akkor legelőször a szkriptnyelvek valamelyikét ajánlatos megtanulni (Python, Ruby , Perl stb.) A legelső cél az kell, hogy legyen, hogy képesek legyünk egyszerű szoftverkódok megírására egy egyszerű nyelven. Populáris nyelvek, mint C++, C # és Java túl erősek ehhez. Ha a programozók pl. Java-ban írják a kódokat, akkor természetesen okos dolog, ha a tesztelők Java-t is tanulnak, bár a Java nem a legegyszerűbb nyelvek közé tartozik.
Integrált fejlesztőkörnyezet
Az ilyen környezetek a professzionális programozók munkáját könnyítik meg. Habár a kurzusok elején nyelv érzékeny szerkesztőkkel dolgoznak általában (Notepad ++, Gedit, stb.). Egy ilyen környezetnek a bemutatására különös figyelmet kellene fordítani a kurzusokon.
Nyílt forráskód, ahol csak lehet
A licencelési nehézségek elkerülése érdekében törekedjünk a nyílt forráskódú nyelvek, fordítók és tesztelési keretrendszerek használatára.
Minimális kapcsolat a modulok között
A legtöbb modulban arra törekszenek, hogy hasznos típusfeladatokat oktassanak, és minden modul magában is értelmezhető legyen (ez nem feltétlenül jó így). Azért, mert a modulok külön-külön is megállják a helyüket, sok az átfedés, az ismétlés a modulokban. A modulrendszer lehetőséget ad az oktatónak, hogy továbblépjen, vagy kihagyjon olyan részeket, amelyekről már volt szó az előző modulok áttekintésénél.
Az ajánlások hosszú listája után nézzük meg, hogyan kellene egy ilyen tréningnek szerkezetileg összeállnia.
A tréning felépítése
A struktúra tartalmazni fogja a kezdő modultól elindulva az összes olyan modult, amely segít hasznos típusfeladatok készítésében. A következő lista tartalmazza a költségeit egy olyan négy modulból álló kurzusnak, amely a tanulóknak elég tudást ad ahhoz, hogy kódot tudjanak írni és használni:
- A kiválasztott nyelv alapjai
- Szövegállomány keresés és keresési minta megfeleltetés
- Egyszerű http weboldal
- Egyszerű web szolgáltatás
Ez a négymodulos tréning csak egy példa. Az alapok modul majdnem az összes tréningben szerepel, a szerepe az kell, hogy legyen, hogy a tanulók képesek legyenek az adott nyelvben egyszerű programokat írni és ebből továbbfejlődni. Ezek után elérhetők lesznek az olyan összetettebb modulok, mint a reguláris kifejezések, vagy az XML, vagy a web üzenetek kezelése.
Az átfogó témája a kurzusnak a weboldalak és web szolgáltatások tesztelése, valamint az adatok manipulálása az eredmény elérése érdekében. Az egyértelmű, hogy a különböző irányultságú tréningekre nagy szükség van. Mint például:
- Adatbázis: Adatok manipulációja relációs adatbázisokban az adatok kezelése, érvényesítése, generálása érdekében. (A legjobb volna külön a relációs adatbázisokra és SQL-re)
- Unit Tesztek: Unit teszt keretrendszer használata az osztályok, komponensek és alkalmazások teszteléséhez.
- GUI tesztautomatizálás: fizetős, vagy nyílt forráskódú tesztfuttató eszközök és keretrendszerek megismerése számítógépre, webre vagy mobil eszközökre
- Adatelemzés: Olyan adatelemző eszközök használata, mint például a Python esetében: NumPy, Pandas, Matplotlib etc.
- Big Data: NoSQL (nem csak SQL) adatmanipulációs technológia megismerése, amelyekkel képesek lesznek kezelni, értékelni az adatokat.
- és így tovább ..
Természetesen a kurzusok pontos felépítését minden esetben egyeztetni kell a megrendelővel, hogy minél pontosabban találkozzanak az elvárt szempontokkal.
Összefoglalásként
Ebben a leírásban azt a tényt szeretném igazolni, hogy a tesztelőknek igenis hasznos volna a programozói alapok elsajátítása. Akkor is, ha egyes esetekben verejtékek árán szerzik meg ezt a tudást, kifizetődő lesz a tesztelő mindennapi életében.
A ma elérhető kurzusok az olyan programozók tréningezésére fókuszálnak, akik egy újabb nyelvet szeretnének megismerni, és a tananyag pedig a szintaktiak elemek minél szélesebb körű megismerése. A tesztelőknek egy más szemléletű képzésre van szükségük, amelyekben a technológia megismerése mellett olyan képességekben is fejlődjenek, amelyek szorosan kapcsolódnak a mindennapi tesztelési feladatokhoz. A programozói kurzusok a tesztelőknek, ennek a speciális látásmódnak a mentén kellene felépülnie.
Ezek a sablonok, amelyek az ilyen tréningek felépítését segítik, elérhetőek. Az ilyen tréningek leírása a teszteléssel kapcsolatos weboldalakon is fellelhető. Az egyéb más megvilágításban felépített kurzusokra igenis nagy szükség van.
Ez egy folyamatban lévő dolog. Minden hozzáfűzést, véleményt és javaslatot szívesen fogadok. Érdeklődünk a különböző munkakultúrák iránt, izgalmasak a különböző iparágak, technológiák, amelyek hozzájárulhatnak ezen folyamat fejlődéséhez. Továbbá olyan szervezetekkel is tervezzük az együttműködést, ahol az ilyen más jellegű kurzusokat felépíthetjük ezzel javítva a vállalat sikerességét.
Forrás: http://gerrardconsulting.com/?q=node/642
Szerző: Paul Gerrard
A szerző
- Paul Gerrard tanácsadóként, tanárként, íróként, programozóként, tesztelőként, konferencia előadóként, valamint coach-ként is tevékenykedik. Tanácsadóként a szoftvertesztelés és minőségbiztosítás a fő szakterülete. Rengeteg konferenciára hívják előadóként Európától Amerikáig, Ausztráliától Dél-Afrikáig.