Code Instrument de acoperire: Testarea declarațiilor, ramurilor și deciziilor

⚡ Rezumat inteligent

Code acoperirea este o măsurătoare de tip „white-box” care raportează gradul în care codul sursă a fost exersat de o suită de teste, adicăping Echipele localizează instrucțiuni netestate, ramificații, condiții și căi pe care le-ar putea ocupa defecte ascunse.

  • 🎯 Definiție: Code Acoperirea cuantifică cât din codul sursă execută efectiv testele tale.
  • 📊 Metode: Există cinci metode - instrucțiuni, decizii, ramificări, condiții și acoperire cu mașini cu stări finite.
  • 🧩 Declarație vs. Sucursală: Acoperirea declarațiilor verifică liniile, în timp ce acoperirea sucursalei verifică rezultatul fiecărei decizii.
  • 🇧🇷 Code vs. funcțional: Code măsurile de acoperire exercitate de cod; măsurile de acoperire funcționale au acoperit cerințele.
  • 🛠️ Unelte: Cobertura, OpenClover, EMMA și Sonar automatizează măsurarea acoperirii.
  • 🤖 Asistență AI: Instrumentele de inteligență artificială generează teste și scot la iveală automat lacunele de acoperire netestate, cu risc ridicat.

Code Tutorial de acoperire

Ce Este Code Acoperire?

Code acoperire este o măsură care descrie gradul în care a fost testat codul sursă al unui program. Este o formă de testarea cutiei albe care identifică zonele unui program care nu sunt exersate de un set de cazuri de testare. De asemenea, ajută la crearea de cazuri de testare suplimentare pentru a crește acoperirea și a determina o măsură cantitativă a acoperirii codului.

În majoritatea cazurilor, un sistem de acoperire a codului colectează informații despre programul care rulează. Apoi combină aceste informații cu informațiile despre codul sursă pentru a genera un raport despre acoperirea codului suitei de teste.

De ce folosiți Code Testarea acoperirii?

Iată câteva motive principale pentru a utiliza acoperirea codului:

  • Te ajută să măsori eficiența implementării testelor.
  • Oferă o măsurare cantitativă a testării.
  • Acesta definește gradul în care codul sursă a fost testat.

Code Metode de acoperire

Următoarele sunt principalele metode de acoperire a codului:

  • Acoperirea declarației
  • Acoperirea deciziei
  • Acoperire sucursală
  • Toggle Acoperire
  • Acoperire FSM

Acoperirea declarației

Acoperirea declarației este o tehnică de testare de tip „cutie albă” în care toate instrucțiunile executabile din codul sursă sunt executate cel puțin o dată. Este utilizată pentru a calcula numărul de instrucțiuni din codul sursă care au fost executate. Scopul principal al acoperirii instrucțiunilor este de a acoperi toate căile, liniile și instrucțiunile posibile din codul sursă.

Acoperirea instrucțiunilor este utilizată pentru a deriva scenarii bazate pe structura codului testat.

Acoperirea declarației

În testarea de tip „white box”, testerul se concentrează asupra modului în care funcționează software-ul. Cu alte cuvinte, testerul se concentrează asupra funcționării interne a codului sursă în ceea ce privește graficele fluxului de control sau diagramele de flux.

În general, în orice software, dacă te uiți la codul sursă, vei găsi o mare varietate de elemente precum operatori, funcții, elemente de tip „loo”ping, rutine de tratare a excepțiilor și așa mai departe. Pe baza datelor de intrare în program, este posibil ca unele dintre instrucțiunile de cod să nu fie executate. Scopul acoperirii instrucțiunilor este de a acoperi toate căile, liniile și instrucțiunile posibile din cod.

Să înțelegem acest lucru cu un exemplu despre cum se calculează acoperirea extraselor. Aici luăm două scenarii diferite pentru a verifica procentul de acoperire a extraselor pentru fiecare scenariu.

Sursa Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Scenariul 1: Dacă A = 3, B = 9

Scenariul 1 de acoperire a declarației

Instrucțiunile marcate cu galben sunt cele executate conform scenariului. Numărul de instrucțiuni executate = 5, Numărul total de instrucțiuni = 7, deci Acoperirea instrucțiunilor = 5/7 = 71%.

Scenariul 2: Dacă A = -3, B = -9

Scenariul 2 de acoperire a declarației

Instrucțiunile marcate cu galben sunt cele executate conform scenariului. Numărul de instrucțiuni executate = 6, Numărul total de instrucțiuni = 7, deci Acoperirea instrucțiunilor = 6/7 = 85%.

Dar, per total, dacă vedeți, toate afirmațiile sunt acoperite de ambele scenarii. Deci putem concluziona că acoperirea generală a afirmațiilor este de 100%.

Ce este acoperit de Acoperirea declarațiilor?

  1. Declarații neutilizate
  2. Mort Code
  3. Ramuri nefolosite
  4. Declarații lipsă

Testarea acoperirii deciziilor

Acoperirea deciziei este o tehnică de testare de tip „cutie albă” care raportează rezultatele adevărate sau false ale fiecărei expresii booleene din codul sursă. Scopul testării acoperirii deciziilor este de a acoperi și valida tot codul sursă accesibil prin verificarea și asigurarea faptului că fiecare ramură a fiecărui punct de decizie posibil este executată cel puțin o dată.

În acest tip de acoperire, expresiile pot deveni complexe, ceea ce face dificilă atingerea unei acoperiri de 100%. Acesta este motivul pentru care se utilizează diverse metode pentru a raporta această metrică. Aceste metode prioritizează cele mai critice combinații. Deși este similară cu acoperirea ramificațiilor, oferă o sensibilitate mai mare la fluxul de control.

Testarea acoperirii deciziilor

Exemplu de acoperire a deciziilor

Luați în considerare următorul cod:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Scenariul 1: Valoarea lui a este 2. Rezultatul „Nu” al deciziei. Dacă (a>5) este bifat, atunci Acoperirea Deciziei = 50%.

Scenariul 2: Valoarea lui a este 6. Rezultatul „Da” al deciziei. Dacă (a>5) este bifat, atunci Acoperirea Deciziei = 50%.

Caz de testare Valoarea lui A producție Acoperirea deciziei
1 2 2 50%
2 6 18 50%

Testarea acoperirii filialelor

Acoperire sucursală este o metodă de testare de tip „white box” în care fiecare rezultat dintr-un modul de cod (instrucțiune sau buclă) este testat. Scopul acoperirii ramurilor este de a asigura că fiecare condiție de decizie din fiecare ramură este executată cel puțin o dată. Aceasta ajută la măsurarea fracțiunilor de segmente de cod independente și la identificarea secțiunilor care nu au ramuri.

De exemplu, dacă rezultatele sunt binare, trebuie să testați atât rezultatele adevărate, cât și cele false.

Formula de calcul a acoperirii sucursalei:

Formula de acoperire a sucursalei

Exemplu de acoperire a filialei

Pentru a afla acoperirea sucursalei, luați în considerare același exemplu folosit anterior. Acoperirea sucursalei va lua în considerare și ramura necondiționată.

Caz de testare Valoarea lui A producție Acoperirea deciziei Acoperire sucursală
1 2 2 50% 33%
2 6 18 50% 67%

Avantajele acoperirii sucursalei:

  • Vă permite să validați toate ramurile din cod.
  • Te ajută să te asiguri că nicio ramificare nu duce la vreo anomalie în funcționarea programului.
  • Elimină problemele care apar din cauza testării acoperirii declarațiilor.
  • Vă permite să găsiți zone care nu sunt testate prin alte metode de testare.
  • Vă permite să găsiți o măsură cantitativă a acoperirii codului.
  • Acoperirea ramurilor ignoră ramurile din interiorul expresiilor booleene.

Testarea acoperirii stării

Acoperire condițieAcoperirea condițiilor, sau acoperirea expresiilor, este o metodă de testare utilizată pentru a testa și evalua variabilele sau subexpresiile dintr-o instrucțiune condițională. Scopul acoperirii condițiilor este de a verifica rezultatele individuale pentru fiecare condiție logică. Acoperirea condițiilor oferă o sensibilitate mai bună la fluxul de control decât acoperirea deciziilor. În această acoperire, sunt luate în considerare doar expresiile cu operanzi logici.

De exemplu, dacă o expresie are operații booleene precum ȘI, SAU sau XOR, aceasta indică posibilitățile totale. Acoperirea condițiilor nu garantează acoperirea completă a deciziilor.

Formula pentru calcularea Acoperirii Condiției:

Formula de acoperire a afecțiunii

Pentru o expresie cu doi operanzi, există patru combinații posibile: TT, FF, TF și FT. Luați în considerare intrarea X=3, Y=4 (x b) FALS, ceea ce dă o acoperire a condițiilor de 1/4 = 25%.

Acoperire cu mașini cu stări finite

Acoperirea mașinii de stări finite este cu siguranță cel mai complex tip de metodă de acoperire a codului. Acest lucru se datorează faptului că afectează comportamentul designului. În această metodă de acoperire, trebuie să analizați de câte ori sunt vizitate sau tranzitate anumite stări. De asemenea, verifică câte secvențe sunt incluse într-o mașină de stări finite.

Care tip de Code Acoperire din care să alegeți

Acesta este cu siguranță cel mai dificil răspuns de dat. Pentru a selecta o metodă de acoperire, testerul trebuie să verifice dacă:

  • codul testat are unul sau mai multe defecte nedescoperite,
  • costul potențialei penalități,
  • costul pierderii reputației,
  • costul vânzărilor pierdute și așa mai departe.

Cu cât este mai mare probabilitatea ca defectele să provoace eșecuri costisitoare de producție, cu atât mai sever este nivelul de acoperire pe care trebuie să-l alegeți.

Code Acoperire vs. Acoperire funcțională

Code Acoperire Acoperire funcțională
Îți spune cât de bine a fost exersat codul sursă de către bancul de testare. Măsoară cât de bine a fost acoperită funcționalitatea designului de către bancul de testare.
Nu folosește niciodată o specificație de proiectare. Utilizează o specificație de proiectare.
Realizat de dezvoltatori. Realizat de testeri.

Code Instrumente de acoperire

Iată o listă de instrumente importante pentru acoperirea codului:

Numele instrumentului Descriere
Cobertura Un instrument de acoperire a codului open source. Măsoară acoperirea testelor prin instrumentarea unei baze de cod și analizarea liniilor de cod executate și a liniilor de cod care nu sunt executate atunci când rulează suita de teste.
Trifoi Trifoi (OpenClover) reduce și timpul de testare prin rularea doar a testelor care acoperă codul aplicației modificat de la versiunea anterioară.
DevPartner DevPartner permite dezvoltatorilor să analizeze Java cod pentru calitatea și complexitatea codului.
Emma EMMA acceptă acoperire de clasă, metodă, linie și bloc de bază, agregată la nivel de fișier sursă, clasă și metodă.
Kalistick Kalistick este o aplicație terță parte care analizează codul din diferite perspective.
CoView și CoAnt Un instrument de acoperire a codului pentru metrici, crearea de obiecte simulate, testabilitatea codului, acoperirea căilor și ramurilor și multe altele.
Bullseye pentru C++ BullseyeCoverage este un instrument de acoperire a codului pentru C++ și C.
Sonar Sonar este un instrument de acoperire a codului deschis care vă ajută să gestionați calitatea codului.

Avantajele și dezavantajele utilizării Code Acoperire

Avantaje Dezavantaje
Util pentru evaluarea unei măsuri cantitative a acoperirii codului. Chiar și atunci când o anumită caracteristică nu este implementată în design, acoperirea codului raportează în continuare o acoperire de 100%.
Vă permite să creați cazuri de testare suplimentare pentru a crește acoperirea. Nu este posibil să se determine dacă toate valorile posibile ale unei caracteristici au fost testate folosind acoperirea codului.
Vă permite să găsiți zonele unui program care nu au fost exersate de un set de cazuri de testare. Code Acoperirea nu spune cât de mult și cât de bine ți-ai acoperit logica.

Întrebări frecvente

Multe echipe vizează 70 până la 80% ca obiectiv practic. Atingerea a 100% este rareori rentabilă. Concentrați-vă pe acoperirea logicii critice, cu risc ridicat, mai degrabă decât pe urmărirea unui singur număr pe întreaga bază de cod.

Nu. O acoperire completă dovedește fiecare linie rulată, nu că fiecare intrare, valoare sau cerință a fost validată. Erorile logice și caracteristicile lipsă pot trece nedetectate, așa că acoperirea completează, mai degrabă decât înlocuiește, un design bun al testelor.

Code acoperirea măsoară cât de mult se execută codul sursă în timpul testării. Acoperirea testelor este mai largă, tracapreciind cât de bine testele abordează cerințele, caracteristicile și riscurile. Code Acoperirea este o intrare în acoperirea generală a testului.

Nu. Poți atinge o acoperire de 100% a instrucțiunilor, lăsând ramurile netestate, cum ar fi o cale else lipsă. Acoperirea ramurilor (deciziilor) este mai puternică deoarece include acoperirea instrucțiunilor și exercită fiecare rezultat.

Inteligența artificială analizează codul sursă și testele existente pentru a identifica căi netestate, cu risc ridicat, apoi sugerează sau generează cazuri noi. De asemenea, învățarea automată prioritizează testele care să fie executate, scurtând feedback-ul în timp ce...ping acoperire ridicată.

Da. Instrumentele de inteligență artificială, cum ar fi Diffblue Cover, scanează codul și scriu autonom teste unitare pentru logica neacoperită. Acestea vizează ramurile și condițiile riscante, crescând acoperirea cu mult mai puțin efort manual.

OpenClover măsoară acoperirea instrucțiunilor, ramurilor și metodelor și colectează peste 20 de metrici. Cobertura, EMMA și JaCoCo sunt alte opțiuni gratuite utilizate pe scară largă pentru Java proiecte.

Acoperirea Modificării Condițiilor/Deciziilor impune ca fiecare condiție dintr-o decizie să afecteze independent rezultatul. Este mai strictă decât acoperirea ramificată și este obligatorie pentru software-ul critic pentru siguranță, cum ar fi avionica, conform standardului DO-178C.

Rezumați această postare cu: