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.
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:
La nivel de linie de cod - Instrumentarea execuţiei fiecărei linii de cod cursă.
La nivel de Branch - Instrumentarea execuţiei fiecărui bloc de cod (ex: conţinutul unei instrucţiuni if)
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 )
Squish Coco este disponibil pentru mai multe platforme:
Linux (32- and 64-bit)
Windows (32- and 64-bit)
Mac OS X (32- and 64-bit)
Solaris, AIX and other UNIX systems
Embedded Linux
Embedded Windows
Mobile operating systems
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:
Care este ordinea optimă de execuţie a testelor pentru a obţine cel mai rapid un maxim de code coverage.
Compararea de code coverage între execuţii succesive.
Compararea de code coverage între versiuni diferite de build.
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:
ISO 26262 - Road vehicles - Functional safety
EN 50128 - Railway applications
DO 178 - Software Considerations in Airborne Systems and Equipment Certification
IEC 61508 - Functional Safety of Electrical/Electronic/Programmable Electronic Safety-related Systems
FDA - Food and Drug Administration
Î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:
CppUnit
QTestLib
GoogleTest
CxxTest
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.
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
Se instalează Squish Coco
Se setează variabila PATH să conţină locaţia pentru .Net framework C:WindowsMicrosoft.NETFramework64v4.0.30319
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\
/// 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:
primul request SOAP UI al suitei de teste să apeleze StartCoverage.
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.
de Mihai Varga
de Călin Diniș , Mihai Tentis