2020. március 29., vasárnap

QA szoftvertesztelési automatizáció - melyik programnyelv?

Ha az adatelemzői énemet kérdezed, eléggé egyértelmű a válasz részemről: Python és egy csipetnyi R. Viszont most QA vezetőként szeretném megosztani személyes meglátásaimat és tapasztalataimat a témakörben, s egyik sem kánon, csupán meglátás, amely az adott helyzet korlátai között értelmezendő.

Illeszkedő Stack

Először is érdemes azt a nyelvet választanod, amelyikben fejlesztik a tesztelendő szoftvert. Ez főleg azóta igaz, amióta a JavaScript is kiszabadult a Node.js-nek hála a böngészőkből. Nincs olyan népszerű nyelv amelyhez ne lennének tesztelési keretrendszerek és/vagy Selenium binding. Ez azért hasznos, mert ha elakadnál valahol, akkor egy halom ember áll rendelkezésedre a környezetedben, akik segíteni tudnak. Fontos tapasztalat, mielőtt kérdezel, tedd fel a kérdésed a kötelező kellékként nálad lévő Debug kacsának, mert különben könnyen irritábilis szindrómává válasz a fejlesztő kollégáid körében...

Multi Stack

A jelenlegi cégemnél a fejlesztési célplatformok nagyon tág kört ölelnek fel (backend, frontend, mobil, IOT, beágyazott eszközök stb.), rengeteg programozási nyelvvel. Ha a csapatod nagyon erős a kódolásban, akkor is lehetetlen feladat ennyi ökoszisztémát kellő mélységgel átlátni. Ezért a stratégiánk az volt, hogy legyen egy közös nyelvünk a csapatban, hogy könnyebben legyen az emberek rotálása, és egymás helyettesítése.

JavaScript (Stack része)

Első körben a JavaScript-vel próbálkoztunk meg csapatszinten, mert nem volt olyan terület, ahol ne lett volna a része valamilyen szinten stack-nek (Mobil: Corodova, React Native, Backend: express.js, socket.io, Frontend: React stb.). Bár nem volt olyan terület, ahol ne lett volna megoldás (pl. IOT eszközre is csináltunk prototípus service-ket), de pár problémába sajnos beleütköztünk. Az első, hogy a kódolás világában kezdő kollégák számára nehézséget okozott az aszinkron programozás koncepciója. A másik, hogy projekt cég révén sokszor váltunk projektet, és van hogy fél év múlva ismételten elő kellett venni megoldásokat. Nem volt olyan eset, ahol a függőségek frissítésekor ne kellett volna átírnunk az adapter osztályokat. Sajnos az npmjs csomagjainál nem szempont az API felület védelme, még a puppeteer esetében sem.

Python (Új nyelv)

Végül hiába próbáltunk meg a meglévő stack-ből választani programozási nyelvet, végül Python lett a befutó. Hátrány, hogy ez egy plusz nyelv a cégnél alkalmazott stack-ek nyelveihez képest. Bár jobban örülnék egy Flask-os/Django-s backend-nek, mint PHP-s társainak, de ez csak személyes és elhallgatott vélemény. Előny, hogy kevesebb kódbázist termelünk pl. Java-hoz képest, ami azt eredményezi, hogy kevesebb idő a tesztelési kódbázis karbantartása is. További előny, hogy kezdő kollégák, hamar tudnak kisebb részfeladatok szintjén produktívan közreműködni. Itt is igaz, hogy nincs olyan tesztelési témakör, amelyre ne volna megoldás. Pl. CAN hálózatokkal kapcsolatos megoldásokat is tudunk integrációsan tesztelni. Érzésre valamiért az általunk használt programkönyvtárak fejlesztőik fegyelmezettebbek a megoldásuk által kínált programozási felületek megőrzésében. Egy fél év után újrakezdett projektnél, maximum csak a függőségek verziószámát kell frissíteni, jóval ritkább, hogy újra nyálazhatjuk át az adapter osztályokat.

Összegzés

Tehát itt is igaz, hogy nincs egyértelmű válasz, hisz mindegyik nyelv csupán egy eszköz a saját előnyeivel és hátrányaival.
  1. Ha lehet, olyan nyelvet válassz, amit a csapatod is használ fejlesztési nyelvként.
  2. Ha csak ismerkedsz a kódolás világával, akkor a Python-t ajánlanám.
  3. Mind a Java, C#, JavaScript, Ruby is alkalmas arra, hogy elindulj a kódolás izgalmas világába...

UI: Bár izgalmas világ, de nagyon sok idődet fogja elvenni, nagyon sok idődet... Forrás