ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 57
Abonament PDF

Utilizarea Squish Coco pentru a determina code coverage

Ioana Luțaș
QA Engineer @ Bissoft



TESTARE

Ne poate interesa la un moment dat cât de bine sunt proiectate testele automate ce validează funcţionalitatea Serviciilor Web. Poate vrem să vedem cât de mult este exersat codul prin testele automate. O variantă de testare funcţională a Serviciilor Web este aplicația SOAP UI. Acest articol prezintă cum se poate integra aplicaţia Squish Coco pentru a determina cât de mult exersează codul C# testele automate dezvoltate utilizând SOAP UI.

Scurtă prezentare a Squish Coco

Squish Coco este un utilitar folosit pentru a determina code coverage al aplicaţiilor dezvoltate în C, C#, C++ şi Tcl. Pe baza codului sursă instrumentat, Squish Coco analizează codul sursă al aplicaţiei testate.

Execuţia unei suite de teste pentru o aplicaţie instrumentată cu Squish Coco, produce rezultate care pot fi apoi analizate. În urmă analizei se poate determina cât din codul sursă a fost atins de execuţia testelor automate, ce teste mai trebuie dezvoltate, cum s-a îmbunătăţit code coverage în timp de la un release la altul.

Squish Coco poate genera un raport care evidenţiază cât de mult din codul sursă este testat de către testele automate.

Constă din două utilitare principale:

A. CoverageScanner - Este un compiler wrapper care face legătura între codul instrumentat şi compilatorul nativ. Când se foloseşte Squish Coco, CoverageScanner comunică utilitarului de build să folosească compilatorul CoverageScanner. CoverageScanner este o aplicaţie C++ care înlocuieşte compliatorul default.

B. CoverageBrowser - Este o aplicaţie cu interfaţă utilizator folosită pentru a analiza rapoartele generate în urma executării unei suite de teste pe o versiune instrumentată a aplicaţiei supusă testării.

Squish Ccoco pre-procesează codul sursă folosind preprocesorul propriu, în acest pas inserând codul intrumentat, urmând apoi partea de compilare şi link. În urmă instrumentării se generează fişiere CSMES, fişiere care conţin codul instrumentat.

Determinarea code coverage a codului testat este să se marcheze ramurile executate şi nu să se sublinieze liniile de cod sursă.

CoverageScanner parsează toate construcţiile C++ / C#/ C şi detectează: Funcţiile executate, Liniile de cod executate, Căile de execuţie, Expresiile logice care generează diferite căi de execuţie (if, for, while, switch . . .).

După faza de detecţie, CoverageScanner inserează instrucţiunile de instrumentare în codul sursă. Această versiune modificată a aplicaţiei e numită instrumentare.

Când aplicaţia este exersată, rezultate pentru code coverage sunt generate pentru fiecare execuţie - fişiere cu extensia .CSEXE Aceste rezultate pot fi vizualizate folosind CoverageBrowser.

Tipurile de instrumentare:

  1. La nivel de linie de cod - Instrumentarea execuţiei fiecărei linii de cod cursă.

  2. La nivel de Branch - Instrumentarea execuţiei fiecărui bloc de cod (ex: conţinutul unei instrucţiuni if)

  3. La nivel de bloc de decizie - Instrumentarea fiecărei decizii logice aferente unui bloc repetitiv sau a unui bloc de selecţie (se instrumentează atât expresia booleană-adevărat sau fals- cât şi conţinutul blocului repetitiv - while, for )

  4. La nivel condițional - Instrumentarea fiecărei sub-expresii a unei expresii booleene.

Squish Coco este disponibil pentru mai multe platforme:

Rapoartele de code coverage pot fi generate în formatele: HTML, XML, EMMA -XML, text, Junit, Cobertura.

Fiecare test de code coverage se poate salva sub un anumit nume, un status PASS/FAILED şi cu anumite comentarii. Mai multe teste de execuţie pot fi analizate împreună din diverse perspective:

Mai multe standarde de siguranţă şi organisme de reglementare au cerut o analiză de code coverage pentru a asigura un grad corespunzător de testare:

În cele mai multe cazuri, coverage-ul necesar este obţinut folosind un framework pentru unit tests. Squish Coco poate obţine code coverage indiferent de frameworkul de testare folosit. Există variante de integrare disponibile pentru frameworkurile:

Dar testele pot fi de asemenea dezvoltate folosind diverse utilitare pentru testare automată.

Poate fi integrat cu diverse sisteme de build automat şi diverse frameworkuri de testare, pentru a fi o componentă din sistemul de Integrare Continuă. Poate fi integrat cu Jenkins, SonarQube, Bamboo sau un sistem in- house.

Cum obţinem statistici de code coverage când Serviciile Web sunt testate folosind SOAP UI

SOAP UI este o aplicaţie parte din suita de aplicaţii dezvolate de SmartBear Software, ce poate fi folosită pentru testarea Serviciilor Web.

Instrumentarea se realizează pentru servicii care rulează continuu, datorită acestui fapt trebuie să scriem propriul handler care determină salvarea fişierelor .CSEXE

  1. Se instalează Squish Coco

  2. Se setează variabila PATH să conţină locaţia pentru .Net framework C:WindowsMicrosoft.NETFramework64v4.0.30319

  3. Se copiază directorul WebApplication din locaţia Program Files(86)\MsBuild\Microsoft\Visual Studio\v11.0\ la locaţia Program Files(86)\MsBuild\Microsoft\Visual Studio\v12.0\

  4. În proiectul supus testării NAS Project, în Common Service se adaugă două metode pentru start Coverage Scanner şi pentru salvarea raportului de Coverage:
/// Service added just to begin the coverage process
public void StartCoverage()
{
  //var a = "asdasdsdasda";
  #if __COVERAGESCANNER__
  CoverageScanner.__coveragescanner_init();
  #endif
}

/// Service added just to stop the coverage process
public void StopCoverage()
{
  //var b = "asdasddsadassadsad";
  #if __COVERAGESCANNER__
  // set the filename of the .csexe file. 
  // NOTE: the location must be writable. 

CoverageScanner.__coveragescanner_filename(@ 
"C:\SCoco_res\NAS_SCoco_CodeCoverage_results.csexe");
CoverageScanner.__coveragescanner_save();
  #endif
}

5.Când Squish Coco este instalat pe o anumită maşină, the Add on pentru Visual Studio este de asemenea instalat. În Visual Studio, Tools, se regăseşte opţiunea pentru Code Coverage.

Din fereastra Tools->Code Coverage, selectăm opţiunile de coverage, configurarea de build, toate proiectele şi Enable Code Coverage.

Se rebuilduie Soluţia astfel încât proiectele sunt configurate să folosească Squish Coco Coverage Scanner.

În setările de build pentru Servicii, putem observa opţiunile:

6.Se modifică suita de teste SOAP UI astfel încât:

7.Schema de mai jos conţine paşii necesari obţinerii raportului de code coverage pentru o anumită suită de teste SOAP UI

8.Paşii 1 şi 2 din schema de mai sus pot fi parte a unui fişier .bat

CodeMain NAS_SCoco_CodeCoverage_instrumented.bat

Din proiectul instrumentat se pot exclude anumite părţi, care nu trebuie analizate pentru code coverage, de exemplu:

/Code/Main/NAS.Vendors.Data.Repository/Mappers
/Code/Main/NAS.Vendors.Domain.Manager/Mappers

Conţinutul fişierului .bat NAS\SCoco\CodeCoverage\instrumented.bat :

REM build the NAS project with SQUISH COCO Enabled; REM exclude specific folders and files
REM build the NAS project with SQUISH COCO Enabled; REM exclude specific folders and files
cd C:\Workspacenew\Code\Main

set PATH=%SQUISHCOCO%\visualstudio;%PATH%

set COVERAGESCANNER_ARGS=--cs-on 
--cs-exclude-path=C:/Workspacenew/Code/Main/NAS.Vendors.Domain.Manager/Mappers 
--cs-exclude-path=C:/Workspacenew/Code/Main/NAS.Vendors.Data.Repository/Mappers
msbuild /p:UseEnv=true NAS.sln /t:ReBuild

REM copy all .csmes generated files into NAS.Services.REM Host\bin

for /f %%G in 
  ('dir C:\Workspacenew\Code\Main\*.csmes /s /b') do copy %%G "C:\Workspacenew\Code\Main\NAS.Services.Host\bin"

9.Pasul 7 din schema de mai sus, obţinerea raportului HTML de coverage, poate fi executat dintr-un fişier .bat

REM create Squish Coco html report

REM create Squish Coco html report

cd C:\SCoco_res

copy "C:\Workspacenew\Code\Main\NAS.Services.Host\bin\NAS.Services.Host.dll.csmes" "C:\SCoco_res"

cmcsexeimport --csmes=NAS.Services.Host.dll.
csmes --csexe=NAS_SCoco_CodeCoverage_results.csexe --title=NAS_SCoco_CodeCoverage_Result --policy=import_duplicates_and_empty

cmreport 
  --title="NAS_SCoco_CodeCoverage_Report" -m NAS.Services.Host.dll.csmes 
  --html=NAS_SCoco_CodeCoverage_Report.html

10.Exemple de rezultate obţinute executând suite de teste SOAP UI, suite în care unele teste pică la validare. Astfel anumite părţi ale codului nu mai sunt executate.

11.Exemplu de Code Coverage HTML Report

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects

Ioana Luțaș a mai scris