, prøvningskode dækning: fra myte til virkeligheden,,,,, 53,,,,,,,,, 10,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, der var en tid da programmører, blev betalt af antallet af linjer kode, de har skrevet.de blev behandlet som kildekode, der fremstiller maskiner i kabiner, og til gengæld for programmering, bare et job, som de otte timer om dagen og så glemme det, for resten af dagen.,, men tiderne har ændret sig.de fleste aflukke arbejdspladser forsvandt og programmører begyndte at elske deres håndværk.med indførelsen af fleksible metoder og software, håndværk, bevægelighed, mange nye værktøjer, der skal hjælpe den programmør og processen.derfor er langsomt ved at blive de facto - måde at skrive koden og hemmelighederne af scrum eller kanban viste sig selv til programmører i de mørkeste afkroge af båsen verden.,, automatisk kontrol og prøvning drevet udvikling (tdd) er nogle af de væsentligste teknikker adræt, forudsat at os programmører.og et redskab, der kommer med disse metoder anvendes til at producere prøvningskode dækning, som er emnet for denne artikel,.,,. definition, "i datalogi, kode dækning er en foranstaltning, der anvendes til at beskrive det, i hvor høj grad kildekode af et program er afprøvet af en bestemt test suite." ~ wikipedia. definitionen ovenfor, taget fra wikipedia, er et af de mest enkle måde at beskrive, hvad kode dækning.dybest set, i deres projekt, du har en masse produktion kode samt en masse test kode.test - kode varetager produktion kode, og testen dækning fortæller, hvor meget af deres produktion kode udøvet af prøverne.,, af oplysningerne på forskellige måder, fra simple procenter til nice grafik eller endog tidstro fremhæver i din bedste ide, lad os tjekke den ind, vil vi anvende høreværn som det sprog, er et godt eksempel på vores kodeks.desuden har vi brug for phpunit og xdebug for at teste vores kode og samle dækning data.,, kildekoden, her er kildekoden vil vi bruge.du kan også finde det i vedlagte arkiv.,, klasse wordwrap {offentlige funktion pakke ($kæde = "$koller) {$kæde = beklædning ($snor); hvis (strlen ($snor) > $koller) ($lastspaceindex = strrpos (substr ($snor, 0 $koller) '); hvis ($lastspaceindex!= = falske & & substr ($snor, $koller, 1).= ") (tilbage substr ($snor, 0 $lastspaceindex)."\\ n ".$- > bind (substr ($snor, $lastspaceindex), $koller);} andre {tilbage substr ($snor, 0 $koller). "\\ n ".$- > bind (substr ($snor, $koller), $koller);}} tilbage $snor;}}, ovennævnte kode indeholder en enkelt funktion, som var tekst til et bestemt antal personer pr. linje,.,, test - kode, vi skrev denne kodeks ved hjælp af test drevet udvikling (tdd -), og vi har 100% kode dækning for det.det betyder, at ved at køre vores test, vi udøver, hver linje i kildekoden.,, require_once __dir__. "/../WordWrap.php'; class WordWrapTest extends PHPUnit_Framework_TestCase { \tfunction testItCanWrap() { \t\t$w = new WordWrap(); \t\t$this->assertEquals('', $w->wrap(null, 0)); \t\t$this->assertEquals('', $w->wrap('', 0)); \t\t$this->assertEquals('a', $w->wrap('a', 1)); \t\t$this->assertEquals("a\ b", $w->wrap('a b', 1)); \t\t$this->assertEquals("a b\ c", $w->wrap('a b c', 3)); \t\t$this->assertEquals("a\ bc\ d", $w->wrap('a bc d', 3)); \t} }, ,Running the Tests in CLI With Text Only Coverage, ,One way to obtain coverage data is to run our tests in the CLI (command line interface) and analyze the output. for eksempel vil vi påtage os en unix - som operating system (linux, macos, freebsd osv.).- brugere skal let tilpasse veje og eksekverbar navne, men det bør være nogenlunde ens.,, lad os åbne en konsol og ændre fortegnelser til din test, mappe.så løb, phpunit med mulighed for at skabe dækning data som almindelig tekst.,, phpunit - dækning tekst =. /coverage.txt. /wordwraptest.php, bør dette arbejde ud af æsken på de fleste systemer, hvis xdebug er installeret, men i nogle tilfælde kan du få en fejl i forbindelse med tidszoner, under folkesundhedsprogrammet. advarsel: date(): det er ikke sikkert at stole på systemet er timezone indstillinger.du er forpligtet til at anvende date.timezone * * fastsættelse eller date_default_timezone_set() funktion.i tilfælde af, at du brugte nogle af disse metoder, og du er stadig få denne advarsel, du sandsynligvis forkert stavet det timezone id.vi har udvalgt de timezone "utc" lige nu, men læg date.timezone at vælge dine timezone.i følge: //////////////////////////////phpunit usr andel på /phpunit.phar/php_codecoverage-1.2.10/php/codecoverage/report/text.php på 124, det kan let blive fastsat, idet den også foreslået at i din, php.ini, fil.du kan finde en måde at præcisere deres timezone i denne liste.jeg kommer fra rumænien, så jeg vil anvende følgende rammer:,, date.timezone = europa /i bukarest,, hvis du løber, phpunit, kommando igen, skal du ikke se fejlmeddelelser.i stedet, og prøvningsresultaterne skal angives. phpunit 3.7.20,, af sebastian bergmann....tid: 10 sekunder, hukommelse: 5.00mb ok (2 undersøgelser, 7 påstande), og dækningen data vil blive i den angivne tekstfil. $kat. /coverage.txt kode dækning betænkning 2014-03-02 13:48:11 resumé: klasser: 100% (1 /1) metoder: 100% (1 /1), der: 2.68% (14 /522) wordwrap metoder: 100% (1 /1) linjer: 100% (7 /7), lad os analysere det lidt.,,, klasser: henviser til, hvor mange timer blev testet, og hvor mange af dem var omfattet., wordwrap, er vores eneste klasse.,, metoder,: samme som med klasser.vi har kun vores, wrap(), metode, og intet andet.,, linjer: som ovenfor, men for linier.her har vi en masse linier for resuméet indeholder alle linjer fra phpunit selv.,, så har vi et afsnit for hver klasse.i vores tilfælde, er det kun, wordwrap,.hver afdeling har sine egne metoder og detaljer.,,, der er baseret på disse bemærkninger, kan vi konkludere, at vores kodeks er 100% dækket af prøver.præcis, som vi forventede, før analyserer dækningen data.,, og http: //dækning produktion, ved blot at ændre en enkelt parameter, for phpunit, kan vi skabe god html produktion. $mkdir. /dækning $phpunit - dækninghttp: //. /dækning. /wordwraptest.php,, hvis du tjekker din,. /dækning, statistik du vil finde en masse filer.jeg vil ikke pasta listen her, fordi det er ganske omfattende.i stedet, vil jeg vise dig, hvordan det ser ud i,,,,, webbrowser. dette svarer til den sammenfattende afsnit fra den tekst, version ovenfor.vi kan zoome ind ved at følge den foreslåede forbindelser og se flere detaljer.,,,,, dækning i vores ide, den tidligere eksempler var interessant, og de er meget nyttigt, hvis din kode er bygget på en fjernserver, som de har kun stille eller web - adgang til.men ville det ikke være rart at have alle oplysningerne, bor i din ide?,, hvis du bruger phpstorm, alt er inden for en afstand af et enkelt klik!vælg at køre din test med dækning og alt vil bare dukker op på magisk vis.,,,,, dækningen oplysninger vil være til stede i din ide, på flere måder, og flere steder:,,,,,, test dækning procentdel vil blive vist i nærheden af hvert register og fil.,, redaktør, mens redigering. kode på venstre side af linjen numre, grønne eller røde rektangel vil mærke hver linje.grøn er testet linjer, rød er uprøvet.linjer uden konkrete kode (tomme linjer, kun seler eller en parentes, klasse eller metode erklæringer), ikke vil have nogen mærker.,, på den rigtige side vil der være fil - browsere, hvor man hurtigt kan browse og filer med dækning.,, i test - produktion, vil du se en række tekst om, at kode dækning blev genereret.,,, myter om kode dækning, med sådan et kraftfuldt værktøj i den pågældende hænder og i forvaltningen er næse, det var uundgåeligt, for nogle myter til overfladen.efter programmører nægtede at blive betalt af antallet af linjer kode, de skriver, eller ledere indså, hvor nemt det er at spille systemet, nogle af dem begyndte at betale programmører, som den procentdel af kode dækning.højere kode dækning: programmør var mere forsigtige, okay?det er en myte.kode dækningen ikke er et mål for, hvor godt du skriver kode.,, undertiden programmører tror, at kode med 100% dækning har ingen insekter.en anden myte.kode dækning blot siger, at du har testet hver linje i kode.det er et mål for antallet af linjer, der udøves.det er ikke et mål for antallet af linjer, gennemføres korrekt.for eksempel halvfærdige algoritmer med kun halvdelen af defineret prøver stadig vil have 100% dækning.det betyder ikke, at den algoritme, er afsluttet, eller at det virker korrekt. endelig spil - systemet er meget let.selvfølgelig, hvis du bruger tdd, du er naturligvis har en høj dækning værdi.hele projekter, 100%, er umuligt.men på små moduler eller klasser, opnåelse af 100% dækning er meget let.tag f.eks. vores kildekode og forestil dig, at du ikke har nogen prøver på alle.hvad ville være den letteste prøve at udøve alle koden?,, funktion testitcanwrap() {$w = nye wordwrap(). $- > assertequals ("b \\ nc" - w - > bind (a b c '3) $- > assertequals (") og nbc." $- > og pak (a - d', 3)}, det er det.to påstande, og fuld dækning.det er ikke, hvad vi ønsker.denne test er så langt fra beskrivende og fuldstændig, at det er latterligt,.,, sandheden om kode dækning, kode dækning er en status, indikator, ikke en enhed til at måle resultaterne eller korrekthed.,, kode dækning for programmører, ikke til chefer.det er en måde at opdage problemer i vores kodeks.en måde at finde gamle - klasser.en måde at finde veje ikke udøves af den test, der kan føre til problemer.,, om konkrete projekter, kode dækning vil altid være under 100%.en perfekt dækning ikke er mulig, eller hvis det er, er det sjældent en skal.men, at 98% af dækning, skal de mål, 100%.med alt andet som deres mål er uden mening. her er koden dækning på syneto er storageos konfiguration anvendelse.,,,,, den samlede er kun ca. 35%, men resultaterne har behov for tolkning.de fleste af de moduler er grønne, med mere end 70% dækning.der er imidlertid en fælles folder, vmware,, som trækker ned over gennemsnittet.det er et modul, med en masse klasser, der kun indeholder definitioner af meddelelsen api - grænseflade.der er ingen grund til at afprøve disse klasser.de var genereres automatisk af betroede kode.de programmører ved dette, og de vil vide, hvordan man fortolker resultaterne.en leder kan insistere på kontrol, fordi det er en rød bar, og det ser mistænkeligt ud for nogen uden at vide det indre detaljer i projektet.ville det give mening at teste det?slet ikke!det ville være en ubrugelig test, det ville tage dyrebare ti sekunder af bygge uden nogen fordel,.,,, sidste tanker, så her er, hvor vi står med kode dækning: det er et godt redskab til programmører, en kilde til oplysninger til at pege på eventuelle problemer, en misforstået realitet for de fleste ledere, og endnu et redskab til at styrke og foranstaltning programmører aktiviteter.som med ethvert andet værktøj, der er én, der kan anvendes korrekt og misbrugt , let.