Kezdjük az írás tesztek (jobbra) - Blog

Kezdjük az írás tesztek (jobbra) - Blog

Hogyan kezdjük el? Meddig írjak teszteket? Mit írjak teszteket? Mi nem kell írni a teszteket? Kell mindig érvényesül TDD?

Ha érdekli a választ ezekre a kérdésekre, akkor olvassa a megfelelő cikket. Az életemben írtam, több mint ezer tesztek mindenféle különböző platformok használt minden mezőt, és tegye TDD tesztelési folyamat csapatok, projektek és akár egész vállalat. És most megpróbálom összefoglalni ezt az élményt, és ossza meg.

Tesztelés, valamint a sok programozás vált cargo-kultusz. Ehelyett, a tudatos mozgás, a fejlesztők igyekeznek követni a népszerű módszerek vakon hinni, mi van írva a dokumentációban, amely a kód 100% teszteket. Tanúja voltam törölni egy mappát a vizsgálatokat (40000 sornyi kódot) az az oka, hogy lehetetlenné vált fenntartani. Az ilyen vizsgálatok gyakran vezet az ellenkező hatást, a fejlesztés lesz drágább, de a folyamat lassabb, és akkor is, ha van egy pozitív hatása, hogy túl sokat kapott.

A fő célja ennek a cikknek -, hogy kapsz egy holisztikus értelmezését a vizsgálatot. Megértése a lényeg, akkor jobb lesz képes kritikusan gondolkodni és megérteni, hová menjen. És, persze, lesz egy kis gyakorlati tanácsokat.

Kezdjük a legfontosabb kérdés: miért kell tesztelni?

Ahhoz, hogy bízik a teljesítményét a termék. Figyeljük meg, hogy nem én írtam „funkciók”, „modul”, „kód” vagy „projekt”. A végén csak az számít, hogy a végtermék, amelyet (nem feltétlenül a felhasználók), működik, és ez jól. Bár most úgy tűnhet, mint a csapatkapitány, de ahogy később látni fogjuk, a tájékozódás a cél lehetővé teszi számunkra, hogy a megfelelő döntéseket.

Következő kulcs dolgozat nem jellemző a tesztelési folyamatot. Feladatok lehet osztani két típusa van: ők sem befejezett vagy nem, és a feladat végrehajtását a második típusú - ez a skála, ahol 0 - „semmi sem történt”, és az 1 - ez 100%. És foglalkozik ezekkel a problémákkal, 100% megoldás gyakran elérhetetlen, mert az ultra-magas rezsi.

Itt van egy tökéletes példa. Sok szolgáltatás, olyan dolog, mint a kritikus SLA vagy még egyszerűbben, a rendelkezésre álló szolgáltatások. Például, ellenséges telek írjon valamit a szellemében „mi hozzáférést biztosít 99,9% -a szervereket.” Számoljuk ki, hogy hány órát évente tárhely is rendelkezésre állhatnak részeként SLA: 0,001 * 365 * 24 = 8,7. Elvileg jó ötlet.

Tegyük fel, hogy a rendelkezés az ilyen szintű rendelkezésre állás kerül a cég 1000 $. És mennyit fog kerülni hozzá minden új kilences a végén? Azaz, amely 99,99. 99999 és így tovább. Amennyire én tudom, ezen a szinten biztosítani exponenciális (robbanó) növekedése költség. Én nem beszélek arról, hogy 100% -os rendelkezésre állás fantasztikus.

Ez a példa világosan mutatja, hogy a probléma az eredmény a lebegő fő elv „maximális eredmény minimális források”, más szóval, arra törekedett, egyensúly, amelyben megkapjuk az eredmény, hogy eleget tesz az érintettek (érdekeltek), ésszerű költségvetési / idővonal.

Most vissza a teszt és azt látjuk, hogy a tesztek nem az ilyen típusú problémák. A kiegészítés az első teszt a projektben, így hihetetlen hatást. 50% -át lefedi (a fele a kód érvényesítését a teszt) lehet beszerezni szinte azonnal, és összehasonlítva a nem vizsgált - mi ketten ház elülső. Ezután a helyzet kezd változni, és valahol szinten 70-90% kezdi éles növekedésének lassulása a bevonat, tesztek egyre pont, drágám. Bonyolítja a támogatást, újratervezés.

Ez a folyamat végtelen. Ahhoz, hogy a 100% -os lefedettség nagyon drága, és legfőképpen, feleslegesen (lásd. A fenti példában). Továbbá nem tesztek nem adnak teljes garanciát a teljesítmény.

Amellett, hogy a vizsgálatok számát és azok minőségét árán is befolyásolja, hogy milyen típusú teszteket használunk. Sok osztályozási fajta vizsgálatokat, például a „tudás-rendszer”, „szerint az automatizáltság foka”, „a vizsgálat időpontjában.” Ebben a szakaszban, mi érdekli csak egy osztályozás, „szerint az elszigeteltség mértéke az alkatrészek”:

  • egység vizsgálat
  • integrációs tesztelés
  • A rendszer tesztelése (elfogadás)

A valóságban nincs egyértelmű felosztás három szinten. Még ha tesztel tiszta funkció (egység tesztelése), akkor végre egy adott hardver, és esetlegesen a másik nem a várt módon működik (vagyis ez is egy bizonyos értelemben, integrációs teszt).

Tehát, már csak tartományban. Az egyszerűbb és kisebb része a rendszernek tesztelünk - az olcsóbb a teszteken, mint a bonyolultabb (kompozit) - a nehezebb. És az a feladata, mint egy profi - nem származnak, hogy az megfeleljen a saját elképzeléseit arról, milyen vizsgálatok és írás tesztek annak érdekében, hogy ideális esetben nagy esetszám alacsony költségek mellett. Biztos vagyok benne, hogy ez a mondat egyes fejlesztők szigorították, mert véleményük szerint a világ meg kell írni izolált egység vizsgálatok és az elfogadás kéne írni tesztelők. Nem fogok tenyészteni vitát, csak annyit, hogy ez attól függ. Vannak olyan projektek, ahol a százalékos egység vizsgálatok (a kemény értelemben) egy töredéke százalékában az összes többi teszt (mint Hekslete, hehe), de vannak olyanok, ahol csak írni átvételi vizsgálatok (néhány tesztelő).

Most már készen áll, és megpróbálom megválaszolni a feltett kérdésre az elején. Tegyük fel, hogy írsz egy programot (parancssori eszköz), amely azon a bemeneti fájl, és a kívánt szót keresni ebben a fájlban. Ennek eredményeként a munkáját, a program kiírja a képernyőre minden sorát a fájlt, amelyben a szó előfordul. Ez a segédprogram létezik, és az úgynevezett grep. Vele ismerős a legtöbb fejlesztő.

Általában az ilyen programok nem mindig egyértelmű, hogy mi lesz az építészet. Sok függ attól, hogy mit fog hozzá a folyamat, például a kimeneti formátum támogatott formátumok könyvtár bejárás (rekurzív), fuzzy keresés, és még sok más.

A fő megfigyelt me ​​anti-minta a fejlesztés ilyen könyvtárak - teszteli a hazai kis- alkatrészeket. Ugyanezek egység vizsgálatok. Miért ez a megközelítés nem produktív? Talán ez nem egyértelmű, de a próbák, bár, és moduláris, de ez nem olcsó és jó minőségű. De hogyan ...?

Már mondta, hogy az építészet, a projekt még nem ismert, és mint általában, a belső megosztottság a files / modules / osztályok / függvények változásokat kozmikus sebességet. Egy órán belül, minden többször átírható. De most a kódot kell folyamatosan szerkeszteni tesztek válik bosszantó. A programozó kezd kételkedni abban, hogy ezek mind szüksége van, és nem ritkán csak megáll írás őket. Mások továbbra is szenvednek, és átírni őket, bár gyakran van még. Írásbeli vizsgák kezdik korlátoz le, és az agy parancsot küld az „töltött időt, hagyni mindent, ahogy van.” Fokozatosan refactor egyre nehezebb és lustább. Ez nagyon hasonló a helyzet, amikor az üzletember fektetett pénz egy új irányba, akkor is, ha az üzlet már süllyed, akkor nehéz lenne visszautasítani, mert már töltött annyi energiát és pénzt (a gazdaságban az úgynevezett elsüllyedt költség -. Ed ..).

Mivel ez jobb, hogy írjon a teszt? Remélhetőleg már nyilvánvalóvá vált, hogy meg kell találni egy viszonylag magas belépési pont a mi program, amely nem függ a belső megvalósítása, míg a feladat végrehajtásához.

Ha megpróbáljuk, hogy a legmagasabb szinten, nevezetesen a közvetlen kezdetét a program a konzol, akkor valószínűleg szembe kell néznie számos kihívás, mint a futás egy külön folyamat, az olvasó a standard áramlási és mások. Abban az esetben mi vizsgálati program ezt már nevezhetjük egy olyan rendszer, mert ellenőrizze a munkát a legmagasabb szinten, minden érintése nélkül a belső végrehajtását. Bár ez a vizsgálat nem jelent gondot a tapasztalt fejlesztő, általában a költségek ilyen teszt lehet nevezni a maximális erre könyvtárban.

Az alsó szinten egy funkciója, amely bemenetként a fájl elérési útvonalát, és azt a rész keresni, és a kimeneti (nem nyomtat a képernyőre!) Adja a kész eredményt, úgy, hogy csak nyomtatni. Ez a fajta vizsgálatot a legjobb egyensúlyt „hogy győződjön meg arról, hogy minden működik / költség”. Ezek közvetve érintik az összes használt belső, független megvalósítás, nagyon könnyű írni, és nagyon olcsó fenntartani. Stabilizálószerekkéntpolietilénglikolokat építészet adhatunk tesztek alsó szinten (ha világossá válik, hogy az a rendszer bonyolultsága túl magas).

A leírt módszer különösen jól működik együtt a megközelítés, ha a vizsgálatok előtt írt kód (a kód).

Van egy mítosz, hogy csak a szükséges vizsgálatok a regressziós, vagyis annak biztosítása, hogy az új kódot nem törik a régi. Távolról sem. Sőt, ez a következménye írás tesztek, mint olyat. Bizonyos helyzetekben, amelyek elsődleges célja az írás tesztek - gyorsul a fejlődés. Igen, jól hallottad, írd vizsgálatok előtt kód / code ugyanabban az időben, azt eredményezi, hogy egy komoly fejlődésének gyorsítását. A legtöbb ilyen helyzeteket magában foglalja, amelyek bemenő összetett adatok, amelyek valamilyen módon átalakul és prokidyval tovább. Vizsgáljuk meg a kezét (a fejlődés során), ezt a kódot nagyon nehéz, meg kell készítenie az adatokat, akkor ellenőrizni kell, hogy az eredmény a vártnak.

Fontos megérteni, hogy a gyorsulás csak akkor lehetséges, miután a tapasztalatszerzés, és kezdjük el jól érzik magukat a világban az automatizált tesztelés. Ezen kívül vannak olyan típusú vizsgálat, ahol írás tesztek előtt a kód nehéz, vagy szinte lehetetlen. Az ilyen vizsgálatok például tartalmazza a vevő vizsgálat böngészőn keresztül.

A második nagy előnye, TDD, hogy a design a kódot, kezdjük azt hinni, nem arról, hogy jó most nasozdaem fájlokat és egymástól őket funkció létrehozásával több tucat vízkivételek és elkezdenek gondolkodni az igazán fontos dolgokat. Arról, hogy milyen az én könyvtár kerül felhasználásra. Meglepő módon kezdeni a szöget (ahogy azt tanítják minden induló, ügyfél fejlesztés minden területén) nem könnyű, mindig szeretnénk, hogy belevetette magát a csodálatos világ építészet.

Tervezése külső api nagyon fontos feladat, amelyet meg kell adni legalább egy kis időt. Ez a legnagyobb hatása a cselekvési szabadságot a feldolgozás, akkor kap a jövőben. És ez az a szint legtöbbször az a pont, ahonnan már a kezdet a kialakulását vizsgálati tervek.