ABONAMENTE VIDEO REDACȚIA
RO
EN
×
▼ 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

LANSAREA NUMĂRULUI 87

Prezentări articole și
Panel: Project management

Marți, 24 Septembrie, ora 18:00
Impact Hub, București

Înregistrează-te

Facebook Meetup

Conferință

Sponsori

  • ntt data
  • 3PillarGlobal
  • Betfair
  • Telenav
  • Accenture
  • Siemens
  • Bosch
  • FlowTraders
  • MHP
  • Connatix
  • UIPatj
  • MetroSystems
  • Globant
  • Colors in projects

Ioana Luțaș a mai scris