TSM - O privire de ansamblu asupra testării performanței aplicațiilor Desktop

Sorin Lungoci - Tester

Performanța aplicațiilor este un subiect frecvent abordat, indiferent de natura apreciativă sau critică a contextului.Această performanță este de obicei clasificată ca fiind una din primele trei coordonate de impact asupra reputației și veniturilor unei companii și de asemenea asupra satisfacției clientului.

Am ales acest subiect deoarece testarea performanței unei soluții Desktop nu oferă o documentație extensivă pe internet sau un suport atât de bogat cum ne-am fi așteptat. Din acest motiv m-am gândit să împărtășesc nu doar din experiența proprie, dar și din cunoștințele altora exprimate în idei, orientări, preocupări sau riscuri de luat în considerare atunci când ni se cere să îndeplinim o astfel de sarcină.

Dacă vorbim de performanța unei aplicații, ar trebui să convenim încă de la început ce înțelegem prin "performanță". Vorbim de viteza de reacție a aplicației? Resursele consumate? Altceva?

În aplicațiile desktop aceasta poate avea diferite semnificații, pe care le voi explica în articolul de față.

Arhitectura

Din punct de vedere arhitectural există câteva stiluri de aplicații desktop. Layer-ele sunt în mare parte aceleași, dar așezarea lor sau interacțiunea dintre ele generează mai multe tipuri de aplicații desktop.

Printre cele mai utilizate layer-e amintim: UI (User Interface), BL (Business Layer), TL (Transfer Layer) and DB (Database Layer).

Voi menționa câteva exemple de arhitecturi folosite pe platforma desktop cu precizarea că nu acoperă toate combinațiile dintre tipurile și stilurile arhitecturale:

  1. 100% pur desktop - unde atât clientul cât și serverul împreună cu baza de date sunt instalate pe aceeași mașină, fără a avea nevoie de conexiune la rețea. Un exemplu aici poate fi Microsoft Money (o aplicație de managementul finanțelor destinată utilizatorului casnic). Este o aplicație pe un singur nivel (1-Tier), instalată și rulată pe un singur sistem de către un singur user.
  2. O altă soluție în arhitectura Client-Server este folosirea așa numitului "Thin Client", care în acestă arhitectură (2-Tier) este folosit nu cu mult peste preluarea comenzilor utilizatorului și afișarea informațiilor prin intermediul unui monitor. Aplicația este copiată și instalată pe server, rulată la nivel de client, și folosită pe scară largă în infrastructurile de tip intranet ale universităților sau fabricilor. Un exemplu putând fi un student care folosește un client CITRIX instalat pe mașina proprie și rulând o aplicație internă pe serverul universității.
  3. Aplicația Client-Server care folosește mai mulți clienți de tip "Rich Client" și unul sau mai multe Servere este cea mai întâlnită arhitectură pe platforma Desktop.

Această aplicație este desenată de asemenea pe două nivele (2-Tier) și utilizată cu precădere într-o infrastructură de tip intranet având un număr limitat de utilizatori. Conexiunea persistă până la log-out, iar aplicația este manipulată utilizând un meniu.

Un exemplu poate fi Microsoft Outlook sau oricare altă aplicație desktop pentru e-mail. Aplicația este instalată pe mașina locală, care se conectează din când în când sau permananet la server pentru primirea sau trimiterea email-urilor. Bineînțeles, această aplicație funcționează și fără conexiune la server, dar fără această conexiune nu se va putea duce la bun sfârșit operația de trimitere a unui e-mail.

Abordare

Testarea aplicațiilor client-server necesită câteva cunoștințe tehnice adiționale pentru a putea trata anumite efecte introduse de arhitectura client-server. De exemplu - separarea sau mutarea business layer-ului de pe client pe server ar putea crește încrederea și stabilitatea în datele oferite, dezavantajul fiind creșterea traficului pe rețea sau vulnerabilitatea în cazul unui atac de securitate.

Testarea acestor sisteme este într-adevar mai diferită comparativ cu testarea aplicatiilor web, dar această diferență nu este chiar atât de mare. Am putea chiar afirma că se apropie mai mult de testarea pe platforma mobile.

Ca să înțelegem cum putem testa aceste sisteme trebuie întâi să înțelegem exact când și de ce ar putea apărea aceste probleme de performanță. Având această înțelegere, soluția care ar trebui abordată în testare de multe ori este evidentă.

Testarea la nivel de client este mai mult percepută ca o testare funcțională. Acest lucru se întâmplă din cauză că aplicațiile desktop sunt concepute pentru a fi manipulate de un singur utilizator. Nu este adecvată abordarea testării performanței folosind abordarea specifică web. Dacă înregistrăm un flow după care folosim 100 de utilizatori virtuali cu scopul de a testa performanța întregului sistem, ne înșelăm. În acest caz nu vom testa performanța întregului sistem ci software-ul și hardware-ul stației pe care rulează testul/ele. De asemenea, resursele acesteia se vor consuma, fapt care va duce la blocare.

Testarea la nivel de client trebuie realizată luând în considerare următoarele aspecte:

Partea de back-end dintr-o aplicație client-server este de obicei zona unde se concentrează testarea performanței. De multe ori abordarea pe partea de server este destul de apropiată față de cea folosită pentru Web: se înregistrează un flow sau mai multe, se creează unul sau mai multe profiluri de utilizatori finali (aici putem include comportamentul și numărul utilizatorilor pe fiecare flow sau chiar performanța stațiilor sau a rețelelor). Bazându-ne pe aceste profiluri putem aloca un număr diferit de utilizatori virtuali și rula acele teste de la nivel de Service-layer. Serverul ar trebui să poată procesa solicitări concurente venind de la diferiți clienți, având diferite profile.

Pe diverse canale de informare (prezentări, forumuri) am aflat că pentru a testa aplicații client-server, unii testeri au decis să folosească mai multe stații (de la 2 la 5) în calitate de clienți, pentru amble tipuri de testări funcțional-automatizată și de performanță. Fiecare stație era setată conform unui anumit profil care să simuleze un anumit grup de utilizatori finali, și care evident să exercite un stres specific pe întreaga structură.

Tool-uri

Dacă este să comparam tool-urile de pe piață care oferă suport pentru testarea performanței aplicațiilor Desktop și cele orientate Web, am putea afirma că există un dezechilibru; destul de puține în prima categorie. Însă și mai puține tool-uri oferă suport pe mai multe platforme cum ar fi: Desktop, Web sau Mobile.

Din experiență proprie și din investigațile făcute, am remarcat câteva tool-uri:

Datorită timpului limitat, nu am reușit să verific și alte tool-uri promovate în diferite prezentări, articole sau forum-uri. Le-aș adăuga totuși pentru a oferi o perspectivă mai bogată asupra acestui aspect: Microsoft Visual Studio, Borland Silk Performer, Seapine Resource Thief, Quotium Qtest Windows Robot (WR), LoginVSI, TestComplete împreună cu AQtime, WCF Load Test, Grinder sau Load Runner.

Într-un sistem clasic client-server, partea de client este o aplicație care trebuie instalată și utilizată de către un singur utilizator, ceea ce înseamnă că în majoritatea cazurilor nu se așteaptă ca aplicația să execute o mulțime de call-uri concurente, însă trebuie să răspundă cât mai prompt acțiunilor utilizatorului și să afișeze rezultatele fără o întârziere prea mare.

Aplicația instalată pe client precum și resursele consumate de aceasta este de obicei monitorizată cu ajutorul unui instrument numit Profiling.

Acest Profiling împreună cu un Performance Counter la nivel de SQL de exemplu, poate constitui o metodă solidă pentru a realiza ce se întâmplă de fapt in sistem (client și server).

Visual Studio are un profiler integrat. Fiind destul de avansat, permite măsurarea timpului necesar executării unei metode, precum și numărul apelărilor.

Pentru realizarea unui profiler la nivel de memorie, CLR Profiler permite vizualizarea consumului de memorie necesar rulării aplicației, dar și observarea obiectelor create de diferite metode.

Multe dintre tool-urile construite pentru testarea performanței de la nivel de interfață al utilizatorului pot fi folosite pentru înregistrarea unor flow-uri și mai târziu folosite pentru play-back pe mai multe stații.

Rezultate

Câteva dintre problemele identificate în urma testării performanței aplicațiilor desktop ar putea fi menționate:

Riscuri

În testarea performanței sistemelor desktop, cele mai întâlnite probleme sunt relaționate la software și environment. Stabilitatea aplicației se pare că reprezintă îngrijorarea predominantă a testerului, cauza fiind multitudinea de situații în care tester-ul trebuie să lucreze cu o aplicație imperfectă sau neterminată.

Voi expune mai departe câteva dintre riscurile identificate și relaționate la testarea performanței soluțiilor desktop:

În amândouă cazurile, este posibil ca simularea load-ului să nu fie compromisă, însă s-ar putea ca aplicația să nu poată manipula inconsistențele și să devină disfuncțională. Este important ca persoanele care pregătesc baza de date împreună cu popularea ei, să înțeleagă regulile de business, design-ul bazei de date și rolul aplicației.

Concluzii

În final putem evidenția câteva concluzii referitoare la aplicațiile construite pe platforma Desktop:

La o primă vedere, testarea performanței aplicațiilor desktop pare să fie destul de diferită, soluțiile existente oferind o gamă destul de vastă în posibilitățile de testare. Cu toate acestea, să nu uităm că asigurarea calității fundamentale, împreună cu principiile de bază rămân la fel și se aplică tuturor.

Enjoy testing !!