Ideea principală a dezvoltării bazate pe test (TDD) este de a scrie teste înainte de a scrie orice cod funcțional și apoi de a scrie doar cantitatea minimă de cod necesară pentru efectuarea testelor. Ar putea părea ciudat să se dezvolte în acest mod, dar este de fapt destul de util, deoarece baza de testare se dublează ca o specificare parțială a codului principal.
Având însă o premisă simplă, există o sumă uimitoare de terminologie și tehnici. În acest articol, adună cele mai importante termeni și cuvinte cheie pe care le-ați auzit și le definiți.
Încercarea de prima programare permite teste funcționale la nivel înalt.
Cel mai înalt nivel de testare validează faptul că software-ul îndeplinește cerințele clientului. Testele de acceptare se desfășoară în medii cât mai aproape de producție. Vedeți testarea funcțională și testarea sistemului.
Aserțiunile sunt declarații care efectuează o verificare efectivă a rezultatelor software-ului. În general, a fost apelată o singură funcție afirma
este suficient pentru a exprima orice cec. În practică, bibliotecile de testare au adesea multe funcții de afirmare pentru a satisface nevoile specifice (cum ar fi assertFalse
, assertEqual
și mai mult) pentru a oferi o analiză mai bună și o producție mai prietenoasă.
O tehnică de testare care încorporează testul dublează software-ul, afirmând că numește metode corecte într-o ordine corectă. A se vedea macheta pentru un exemplu. Vezi, de asemenea, testarea de stat.
Un subset de TDD determinat de necesitatea unei comunicări mai clare și a unei documentații adecvate. BDD este probabil cea mai mare dezvoltare recentă din TDD.
Ideea sa principală este de a înlocui terminologia confuză și dezvoltată-centrică (teste, Suites, afirmații etc) cu limba ubicuită că toate părțile interesate (inclusiv personalul non-tehnic și, eventual, clienții) pot înțelege.
Consultați povestea utilizatorului.
Un principiu general în testarea în care testele personale nu cunoaște sau evită internatele software-ului, alegând în schimb să testeze interfața publică a software-ului strict prin interfața sau specificațiile sale. Vedeți testarea cu alb-cutie.
O strategie pentru scrierea de teste pentru a prinde off-by-one și alte tipuri similare de erori. Pentru a efectua testarea valorii limită, testați intrările în jurul anumitor limite probabile. În cazul numărului întreg, ar putea fi aceasta 0
, -1
, MIN_INT
, MAX_INT
și alte valori similare.
Aserțiunile sunt declarații care efectuează o verificare efectivă a rezultatelor software-ului.
Un manechin este un tip de test dublu care nu este folosit niciodată de software-ul real, ci este folosit doar pentru testarea parametrilor necesari.
Fake-urile sunt dubluri de testare care implementează funcționalitatea necesară într-un mod care este util în teste, dar care, de asemenea, îl descalifică efectiv din utilizarea în mediul de producție. De exemplu, o bază de date cheie-valoare care stochează toate valorile din memorie și le pierde după fiecare execuție, permite testelor să funcționeze mai rapid, dar tendința de a distruge datele nu-i permite să fie utilizate în producție.
Un mediu particular care trebuie să fie configurat înainte ca un test să poată fi rulat. În general, aceasta constă în stabilirea tuturor dublelor de test și a altor dependențe pentru software-ul testat: cum ar fi introducerea datelor predefinite într-o bază de date falsă, configurarea unei anumite structuri de directoare în sistemul de fișiere false, setarea proprietăților pe dependențele software-ului testat.
O activitate de testare la nivel înalt care verifică faptul că toate cerințele de afaceri ale produsului sunt îndeplinite. Testarea funcțională presupune implicarea utilizatorilor pentru a se concentra pe un nivel mai ridicat de cerințe pentru a acoperi cât mai multe scenarii de utilizare. Vedeți testarea de acceptare și testarea sistemului. De exemplu:
# În acest exemplu, verificăm dacă pagina de pe site funcționează așa cum este de așteptat deschis 'example.com' clickOn 'despre noi' assertThereIs 'Suntem o companie mică de exemplu "
Un colocvial pentru colectarea treptată a testelor sau, uneori, un test de trecere special. Văd roșu.
O activitate de testare la nivel mediu care verifică un anumit set de module funcționează corect împreună. Testele de integrare sunt ca testele unitare fără a folosi dubluri de testare pentru un anumit subset de dependențe, testarea în esență a interacțiunilor dintre software-ul dependențelor sale. Exemplu:
# În acest exemplu, verificăm că noul utilizator înregistrat, # care a fost trimis de un alt utilizator, are o "prietenie" pe site creată. # Aici verificăm interacțiunea dintre controlerul formularului, # bază de date și o înregistrare activă a utilizatorului db = nouă Dăderea db u1 = db.createUser (nume = 'john') RegistrationForm (db, name = "kate", referred = "john ") .save () afirma (u1.hasFriend ('kate'))
Un tip de test dublu creat pentru un anumit test sau test. Se așteaptă să fie numit un anumit număr de ori și oferă un răspuns predefinit. La sfârșitul testului, o falsă ridică o eroare dacă nu a fost apelată de câte ori s-ar fi așteptat. O confuzie cu așteptări stricte este parte a cadrului de afirmare. Exemplu:
# În acest exemplu, folosim o bază de date falsă pentru a verifica dacă formularul # folosește baza de date pentru a stoca noul utilizator. # Dacă baza de date nu a fost apelată la sfârșitul testului, # macheta însăși va ridica o eroare de afirmație. db = nou Mock Db db.expect ('salvați') o dată () cu (nume = 'john') RegistrationForm (db, name = "john"
O modalitate de a extinde și schimba comportamentul obiectelor și claselor existente într-un limbaj de programare. Monkey-patching poate fi folosită ca o alternativă la injectarea de dependență și la dublarea testului prin modificarea directă a funcțiilor existente numite de software-ul testat (și schimbarea lor înapoi după testare).
# În acest exemplu, înlocuim funcția standard de bibliotecă # pentru a împiedica testul să folosească un sistem de fișiere real. Filesystem.listdir = f (name) -> ['.', '...', 'foo', 'bar']; AssertEqual (MyFileSearch ('foo')) numar (), 1)
Un colocvialism pentru o colecție de teste care nu reușesc sau, uneori, pentru un test special de eșec. Vedeți verde.
Procesul de îmbunătățire a detaliilor de implementare a codului fără a-și schimba funcționalitatea.
Refactorizarea fără teste este un proces foarte fragil, deoarece dezvoltatorul care face refactorizarea nu poate fi sigur că îmbunătățirile sale nu încalcă anumite părți ale funcționalității.
Dacă codul a fost scris utilizând dezvoltarea bazată pe test, dezvoltatorul poate fi sigur că refactorizarea sa a avut succes de îndată ce toate testele au trecut, deoarece toate funcționalitățile necesare ale codului sunt încă corecte.
Un defect de software care apare într-o caracteristică particulară după un anumit eveniment (de obicei o modificare a codului).
Scenariul de testare
Vedeți testarea funcțională.
Un proces de pregătire a unui dispozitiv. Vedeți teardown. Exemplu:
# În acest exemplu, vom pregăti o bază de date falsă cu câteva valori false, pe care vom avea nevoie de mai multe teste db = new Fake Db db.createUser (nume = 'john') db.createUser (name = 'kate') db.createFriendship 'john', 'kate')
O formă de testare a unității când codul de testare furnizează testul dublu și afirmă că starea acestor camere duble a fost modificată într-o manieră corectă. Consultați testările de comportament.
# În acest exemplu, ca într-un exemplu de obiecte mock, # vom verifica dacă formularul folosește baza de date pentru a stoca noul utilizator. # De data aceasta vom verifica starea, în loc de comportament db = new Fake Db RegistrationForm (db, name = "john").
Fake-urile sunt duble de test care nu sunt niciodată folosite de software-ul real.
Un tip de test dublu care poate răspunde la software-ul testat cu răspunsuri predefinite. Spre deosebire de machete, cu toate acestea, stubs nu verifică, de obicei, dacă au fost chemați în mod corespunzător, ci doar asigurați-vă că software-ul poate numi dependențele sale.
O activitate de testare la nivel înalt, când întregul software este testat de sus în jos. Aceasta include testarea funcțională, precum și verificarea altor caracteristici (cum ar fi performanța și stabilitatea).
O abreviere pentru software-ul testat. Se utilizează pentru a distinge software-ul testat de dependențele acestuia.
Un proces de curățare a unui dispozitiv. În limbile adunate în gunoaie, această funcționalitate este gestionată în cea mai mare parte în mod automat. Consultați configurarea.
Cea mai mică verificare posibilă pentru corectitudine. De exemplu, un singur test pentru un formular web ar putea fi o verificare a faptului că, atunci când este oferită o adresă de e-mail nevalidă, formularul avertizează utilizatorul și sugerează o remediere. Consultați cazul de testare.
O colecție de teste grupate printr-un atribut. De exemplu, un test pentru un formular web ar putea fi o colecție de teste care verifică comportamentul formularului pentru diferite intrări valide și nevalide.
Funcția t1: assertNoError (RegistrationForm (nume = 'john', password = "calitatea capului bateriei corecte"). assertError (StupidPassword, RegistrationForm (nume = 'john', password = "password").
Poveștile utilizatorilor sunt de obicei definite în limbile umane pentru a se concentra în schimb pe experiența utilizatorului.
Orice tip de metric care încearcă să evalueze probabilitatea unui comportament important al SUT nu este încă acoperit de teste. Cele mai populare tehnici includ diferite tipuri de cod de acoperire: tehnici care să asigure că toate declarațiile de cod (sau funcții sau ramificații logice din cod) au fost executate în timpul testelor.
Un proces de dezvoltare a TDD. Având în vedere că dezvoltarea TDD începe cu scrierea a câteva teste, este clar că suita de testare începe roșu. Imediat ce dezvoltatorul implementează toate funcționalitățile testate recent, testele devin verzi. Acum, dezvoltatorul poate reface în siguranță implementarea sa fără riscul de a introduce noi bug-uri, deoarece are o suită de testare pe care să se poată baza. Odată ce refactorizarea este finalizată, dezvoltatorul poate începe din nou ciclul scriind mai multe teste pentru mai multe funcționalități noi. Astfel, roșu-verde-refactor de testare ciclu.
Testați dublu
Dublurile de testare sunt obiectele pe care le creează codul de testare și trec la SUT pentru a înlocui dependențele reale. De exemplu, testele unității ar trebui să fie foarte rapide și să testeze doar o anumită bucată de software.
Din aceste motive, dependențele sale, cum ar fi o bază de date sau biblioteci de interacțiune a sistemului de fișiere, sunt de obicei înlocuite cu obiecte care acționează în memorie în loc să vorbească cu o bază de date reală sau cu un sistem de fișiere.
Există patru categorii principale de dubluri de testare: manechine, falsuri, stubs și mocks.
O colecție de cazuri de testare care testează o mare parte a software-ului. Alternativ, toate cazurile de testare pentru un anumit software.
Testarea în alb-cutie permite o analiză mai profundă a posibilelor probleme ale codului.
Testarea-prima programare este un termen ușor mai larg pentru dezvoltarea bazată pe teste. În timp ce TDD promovează cuplajul strâns între testele de scriere (de obicei, testele unice) și scrierea codului, programul de testare-prima permite în schimb teste funcționale la nivel înalt. Cu toate acestea, distincția în utilizarea generală este rar observată, iar doi termeni sunt utilizați în mod interschimbabil.
Tehnica de testare de nivel inferior constă din cazuri de testare pentru cele mai mici unități posibile de cod. Un test de o singură unitate verifică, de obicei, numai un anumit comportament mic și un caz de testare a unității acoperă, de obicei, toate funcționalitățile unei anumite funcții sau clase.
O singură descriere a unui anumit grup de persoane care doresc să îndeplinească o anumită sarcină folosind SUT pentru a atinge un anumit scop. Poveștile utilizatorilor sunt de obicei definite în limbi umane, folosind termeni simpli, orientați spre utilizatori, pentru a evita luarea în considerare a detaliilor implementării și pentru a se concentra pe experiența utilizatorilor. De exemplu:
În calitate de utilizator, vreau să-mi găsesc prietenii pe acest site prin agenda mea, în loc să le caut unul câte unul, pentru că asta mă va economisi mult timp.
Testarea în alb-cutie este o tehnică de testare atunci când o persoană care efectuează testul cunoaște sau poate citi intervalele din SUT. Spre deosebire de cele mai frecvente teste de tip black-box, testarea cu alb-cutie permite o analiză mai profundă a posibilelor probleme ale codului.
De exemplu, o anumită valoare limită ar putea să nu pară ca una bazată exclusiv pe specificația software-ului, dar ar putea fi evident din implementarea acestuia.
În plus, orice tehnică de acoperire a testelor este, de obicei, o parte a testelor de alb-cutie.