Wat is codedekking en hoe meet JIJ het?

Wat is codedekking en hoe meet JIJ het?

Ik kreeg deze vraag over de dekking van onze geautomatiseerde testcode. Het lijkt erop dat het, afgezien van geautomatiseerde tools, meer kunst is dan wetenschap. Zijn er praktijkvoorbeelden van het gebruik van codedekking?


Antwoord 1, autoriteit 100%

Codedekking is een meting van hoeveel regels/blokken/bogen van uw code worden uitgevoerd terwijl de geautomatiseerde tests worden uitgevoerd.

Codedekking wordt verzameld door een gespecialiseerde tool te gebruiken om de binaire bestanden te instrumenteren om traceringsoproepen toe te voegen en een volledige reeks geautomatiseerde tests uit te voeren tegen het geïnstrumenteerde product. Een goede tool geeft je niet alleen het percentage van de code dat is uitgevoerd, maar stelt je ook in staat om in de gegevens te duiken en precies te zien welke regels code zijn uitgevoerd tijdens een bepaalde test.

Ons team gebruikt Magellan– een interne set tools voor codedekking . Als u een .NET-winkel bent, heeft Visual Studio geïntegreerde tools om codedekking te verzamelen. Je kunt ook een aantal aangepaste tools gebruiken, zoals dit artikelbeschrijft.

Als u een C++-winkel bent, heeft Intel een aantal toolsdie voor Windows en Linux werken, hoewel ik ze niet heb gebruikt. Ik heb ook gehoord dat er de gcov-tool voor GCC is, maar ik weet er niets van en kan je geen link geven.

Over hoe we het gebruiken: codedekking is een van onze exitcriteria voor elke mijlpaal. We hebben eigenlijk drie metrische gegevens over codedekking: dekking van unittests (van het ontwikkelteam), scenariotests (van het testteam) en gecombineerde dekking.

Trouwens, hoewel codedekking een goede maatstaf is voor hoeveel testen je doet, is het niet per se een goede maatstaf voor hoe goed je je product test. Er zijn andere statistieken die u naast codedekking moet gebruiken om de kwaliteit te waarborgen.


Antwoord 2, autoriteit 84%

Codedekking vertelt u in feite hoeveel van uw code onder tests valt. Als u bijvoorbeeld 90% codedekking heeft, betekent dit dat 10% van de code niet wordt gedekt door tests.

Ik weet dat je misschien denkt dat als 90% van de code gedekt is, het goed genoeg is, maar je moet het vanuit een andere hoek bekijken. Wat houdt je tegen om 100% codedekking te krijgen?

Een goed voorbeeld is dit:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

In de bovenstaande code zijn er nu twee paden/takken. Als u altijd de “JA”-tak raakt, dekt u het “anders”-gedeelte niet en wordt dit weergegeven in de resultaten van Code Coverage. Dit is goed omdat je nu weet wat niet gedekt is en je een test kunt schrijven om het “andere” gedeelte te behandelen. Als er geen codedekking was, zit je gewoon op een tijdbom, wachtend om te ontploffen.

NCoveris een goed hulpmiddel om codedekking te meten.


Antwoord 3, autoriteit 24%

Onthoud dat het hebben van “100% codedekking” niet betekent dat alles volledig is getest – hoewel het betekent dat elke regel code wordt getest, betekent dit niet dat ze onder elke (veelvoorkomende) situatie worden getest.

Ik zou code-dekking gebruiken om stukjes code te markeren waarvoor ik waarschijnlijk tests voor moet schrijven. Als u bijvoorbeeld bijvoorbeeld myimportantfunctie () weergeeft, wordt niet uitgevoerd tijdens het uitvoeren van mijn huidige eenheidstests, moeten ze waarschijnlijk worden verbeterd.

In principe betekent 100% -code-dekking niet dat uw code perfect is. Gebruik het als een gids om meer uitgebreide (unit-) tests te schrijven.


Antwoord 4, Autoriteit 21%

Aanvullen van een paar punten aan veel van de vorige antwoorden:

Code-dekking betekent, hoe goed uw testset bedekt met uw broncode. d.w.z. in welke mate is de broncode die wordt gedekt door de set testcases.

Zoals vermeld in bovenstaande antwoorden, zijn er verschillende dekkingscriteria, zoals paden, omstandigheden, functies, verklaringen, enz. Maar extra criteria die moeten worden afgedekt, zijn

  1. Conditie-dekking: alle Booleaanse uitdrukkingen die moeten worden geëvalueerd voor waar en onwaar.
  2. Besluitdekking: Niet alleen Booleaanse uitdrukkingen die eenmaal voor waar en onwaar kunnen worden geëvalueerd, maar om alle volgende if-anders-else instantie te dekken.
  3. LOOP-dekking: betekent, heeft elke mogelijke lus één keer uitgevoerd, meer dan eens en nultijd. Als we ook aannemen op maximale limiet, dan, indien haalbaar, maximale limiettijden test en één meer dan maximale limiettijden.
  4. Entry and EXIT-dekking: Test voor alle mogelijke oproep en de retourwaarde.
  5. Parameterwaardedekking (PVC). Om te controleren of alle mogelijke waarden voor een parameter zijn getest. Een tekenreeks kan bijvoorbeeld een van de volgende zijn: a) null, b) leeg, c) witruimte (spatie, tabs, nieuwe regel), d) geldige tekenreeks, e) ongeldige tekenreeks, f) enkelbyte tekenreeks, g ) dubbelbyte tekenreeks. Als u niet elke mogelijke parameterwaarde test, kan er een fout optreden. Het testen van slechts één van deze kan resulteren in een codedekking van 100% aangezien elke regel wordt gedekt, maar aangezien slechts een van de zeven opties wordt getest, betekent dit slechts 14,2% dekking van de parameterwaarde.
  6. Overervingsdekking: in het geval van een objectgeoriënteerde bron, bij het retourneren van een afgeleid object waarnaar wordt verwezen door de basisklasse, moet de te evalueren dekking worden getest als een broer/zus-object wordt geretourneerd.

Opmerking: statische code-analyse zal uitvinden of er een onbereikbare code of hangende code is, d.w.z. code die niet wordt gedekt door een andere functieaanroep. En ook andere statische dekking. Zelfs als statische code-analyse meldt dat 100% code gedekt is, geeft het geen rapporten over uw testset als alle mogelijke codedekking is getest.


Antwoord 5, autoriteit 6%

Codedekking is goed uitgelegd in de vorige antwoorden. Dit is dus meer een antwoord op het tweede deel van de vraag.

We hebben drie tools gebruikt om de codedekking te bepalen.

  1. JTest– een eigen tool gebouwd over JUnit. (Het genereert ook eenheidstests.)
  2. Cobertura– een open source-codedekkingstool die eenvoudig kan worden gekoppeld aan JUnit-tests om rapporten te genereren.
  3. Emma – een andere – deze die we hebben gebruikt voor een enigszins ander doel dan eenheidstests. Het is gebruikt om dekkingsrapporten te genereren wanneer de webtoepassing wordt geopend door eindgebruikers. Dit in combinatie met webtestgereedschap (voorbeeld: Canoo) kan u zeer nuttige dekkingsrapporten geven die u vertellen hoeveel code wordt gedekt tijdens het gebruik van de typische eindgebruik.

We gebruiken deze tools op

  • Herziening dat ontwikkelaars goede eenheidstests hebben geschreven
  • Zorg ervoor dat alle code wordt doorkruist tijdens het testen van Black-Box

Antwoord 6, Autoriteit 2%

Code-dekking is gewoon een maat voor de geteste code. Er zijn een verscheidenheid aan dekkingscriteria die kunnen worden gemeten, maar meestal zijn het de verschillende paden, omstandigheden, functies en verklaringen binnen een programma dat de totale dekking make-up is. De CODE-dekkingsmetric is slechts een percentage van tests die elk van deze dekkingscriteria uitvoeren.

Voor zover ik ga over het tracking-eenheidstestdekking op mijn projecten, gebruik ik statische codeanalysetools om bij te houden.


Antwoord 7, Autoriteit 2%

Voor PERL is er de uitstekende Devel :: cover module waar ik regelmatig op gebruik mijn modules.

Als de build en de installatie wordt beheerd door module :: Build U kunt eenvoudig ondervragen ./Build testcoverom een ​​leuke HTML-site te krijgen die u de dekking per sub, lijn en conditie, met Nice heeft Kleuren maken het gemakkelijk om te zien welk codepad niet is gedekt. ​​


Antwoord 8

In de vorige antwoorden is de dekking van de code goed uitgelegd. Ik voeg gewoon wat kennis toe met betrekking tot hulpmiddelen als je werkt op iOSen OSXPlatforms, Xcode biedt de mogelijkheid om de coderingsdekking te testen en te volgen.

Referentielinks:

HTTPS: // Developer .apple.com / bibliotheek / archief / documentatie / ontwikkelaars / conceptuele / testen_with_xcode / hoofdstukken / 07-code_coverage.html

https://medium.com/zendesk-engineering/code -Coverage-en-Xcode-6b2FB8756A51

Beide zijn nuttige links voor het leren en verkennen van codedekking met Xcode.


Antwoord 9

voor PHP, kijk eens naar de Github van Sebastian Bergmann

Biedt verzameling, verwerking en renderingsfunctionaliteit voor informatie over PHP-code.

https://github.com/sebastianbergmann/PhP-code-coverage


Antwoord 10

Het doel van het testen van de codering is om erachter te komen hoeveel code wordt getest. Code dekkingstool Genereer een rapport dat laat zien hoeveel van de applicatiecode is uitgevoerd. Code dekking wordt gemeten als een percentage, hoe dichter bij 100%, hoe beter. Dit is een voorbeeld van een test met een witte box. Hier zijn enkele open source-tools voor het testen van de code:

  1. Simplecov – voor Ruby
  2. coverlet – voor .NET
  3. cobertura – voor Java
  4. dekking.py – voor Python
  5. Jest– Voor JavaScript

Other episodes