Asigurarea calităţii software (Software Quality Assurance) este un concept fundamental pentru livrarea unui software care să satisfacă cerinţele clientului şi care să fie uşor de întreţinut şi de adaptat. În cele mai multe cazuri, în activitatea de elaborare a produselor software, folosim conceptul de asigurarea calităţii (Quality Assurance) referindu-ne doar la testarea produsului software.
Indirect, sunt foarte multe activităţi pe care le facem fără a conştientiza că ele fac parte dintr-un set de acţiuni de asigurare a calităţii produsului software pe care îl vom livra clientului final. Activităţile de asigurarea a calităţii trebuie să fie sistematice şi planificate.
Menţionăm de la început faptul că atunci când ne referim la calitate produselor trebuie să urmăm un set de paşi pentru asigurarea calităţii pe parcursul întregului proces de dezvoltare software (Software Development Life Cycle - SDLC) indiferent de modelul folosit sau metodologia folosită pentru dezvoltarea produsului. Este foarte important să se înţeleagă de la începutul dezvoltării unui produs software conceptul de calitate, să se elaboreze procese şi reguli clare pe care întreaga echipă să le cunoască şi să le aplice.
Mai menţionăm faptul că fiecare proiect are nevoie de o analiză clară concretă şi un plan de calitate şi că în acest articol oferim câteva informaţii cu caracter general.
Aplicarea unor standarde sau concepte de calitate nu înseamnă că suntem rigizi în procesele pe care le aplicăm. Aceste procese se adaptează pe măsură ce identificăm probleme. Plan - Do - Check - Act (ciclul PDCA) este o metodă folosită şi de standardul de calitate ISO 9001:2015 pentru îmbunătăţirea continuă a calităţii.
Calitatea trebuie să facă parte din cultura organizaţiei de dezvoltare software şi să fie un mod de gândire pe care să îl implementăm. Pentru înţelegerea conceptelor de calitate este important să se parcurgă toate definiţiile de bază legate de: Software Quality, Software Quality Assurance, Software Metrics, Software Verification, Software Validation, Audit, Review.
Aşa cum menţionam şi la începutul articolului, uneori se face confuzie între anumiţi termeni legaţi de calitate. Această confuzie restrânge foarte mult activitatea de asigurare a calităţii software.
Motivul pentru care insistăm asupra stabilirii clare a diferenţei dintre concepte este acela că în secţiunea următoare vom enumera aspecte legate de asigurarea calităţii altele decât activităţile de testare.
Pentru a utiliza conceptele corect şi pentru a le separa vom face câteva precizări. Asigurarea calităţii (Quality Assurance-QA) este parte a sistemului de managementul calităţii care generează încrederea ca o entitate care va satisface cerinţele referitoare la calitate (conform ASQ/ANSI/ISO 9000:2015: Quality Management Systems - Fundamentals and Vocabulary
Extrapolând puţin, Asigurarea Calităţii Software (Software Quality Assurance) este un set de acţiuni planificate şi sistematice, partea a sistemului de managementul calităţii (Quality Management - QM), care furnizează încrederea că software-ul produs respectă cerinţele referitoare la calitatea unui produs software.
Controlul Calităţii (Quality Control - QC) reprezintă tehnicile și activitățile operaționale utilizate pentru a îndeplini cerințele calității. Nu se poate pune un semn de egalitate între Software Quality Assurance şi Software Quality Control.
În Figura 1, se poate observa relaţia dintre Managementul calităţii, Asigurarea calităţii şi Controlul calităţii. Putem observa că nu nu se poate să avem controlul calităţii fără a avea un sistem de managementul calităţii la nivelul organizaţiei şi un set de acţiuni de Asigurarea calităţii.
Figura 1. Relaţia dintre QM-QA-QC
Pentru a înţelege mai bine faptul că e nevoie de un set de acţiuni pentru asigurarea calităţii în livrarea unui produs software, se poate observa în Figura 2 că acţiunile legate de Quality Assurance se referă şi la procese şi la produs, pe când cele legate de Quality Control se referă doar la produs.
Quality Control presupune testarea produsului şi review.
Figura 2 - Ierarhia Quality Control - Quality Assurance - Total Quality Management
Subliniem faptul că doar procesul de testare înainte de livrarea finală (release-ul) sau intermediară a unui produs software nu înseamnă că asigur calitate produsului.
Modelele de asigurare a calităţii software sunt realizate pentru a permite echipelor care dezvoltă produse software să înţeleagă mai bine legătura dintre calitate internă şi externă a produsului. Aşa cum ştim calitatea externă este cea observată de utilizator, care este testată și care va sta la baza acceptanţei produsului de către client. Calitate internă este acea componentă a calităţii produsului software care nu se poate observa, fiind reflectată de structura codului, de regulile de codificare, testare şi mentenanţă a produsului.
Scopul aplicării unor modele de calitate include evaluarea software-ului din diverse perspective legate de specificaţii, dezvoltare, utilizare, mentenanţa, support, asigurare calitate şi audit.
Modul de abordare a calităţii presupune considerarea anumitor standarde. Un exemplu elocvent este Standardul internaţional ISO 9001:2015 pe care majoritatea companiilor IT îl au implementat la nivel de companie. Este standardul care reuneşte un set de bune practici pentru managementul calităţii totale, la nivel de organizaţie.
Există foarte multe standarde şi la nivel de organizaţie şi de proiect. De aceea trebuie să existe o decizie de la început care sunt standardele utilizate pentru asigurarea calităţii.
Standardul ISO/IEC 25001:2014 - Systems and software engineering - Systems and software Quality Requirements and Evaluation (SQuaRE) este utilizat pentru planificare şi management.
Standardul ISO/IEC 25010:2011 - Systems and software engineering - Systems and software Quality Requirements and Evaluation (SQuaRE) - System and software quality models - defineşte un model de calitate al produsului compus din opt caracteristici de bază (care sunt împărţite în subcaracteristici). Acest standard a fost revizuit şi confirmat în 2017.
Figura 3 prezintă modelul calităţii conform ISO 25010, așa cum este specificat în site-ului oficial al ISO. Sunt cele opt caracteristici de bază care trebuie analizate şi care au la rândul lor un set de sub-caracteristici.
Chiar dacă nu ne-am referit niciodată complet la acest standard, vom vedea că am abordat în activitatea noastră o serie de factori legaţi de calitatea produsului:
Am verificat dacă se livrează un proiect care să nu aibă buguri severe în producţie.
Pentru acceptanta produsului ne-am asigurat că toate obiectivele utilizatorului final sunt îndeplinite - deci cerinţele funcţionale sunt complete.
Am testat performanta sistemului livrat.
Figura 3. Modelul Calităţii conform ISO 25010 (Sursă: https://iso25000.com/index.php/en/iso-25000-standards/iso-25010)
Bazându-ne pe recomandările standardelor, trebuie să elaborăm la nivel de management al produsului software, planul de asigurare al calităţii.
Aşa cum ştim, ciclul de viață al dezvoltării software-ului (Software development lifecycle - SDLC) este un proces utilizat de industria software-ului pentru a proiecta, dezvolta și testa produse software de înaltă calitate. SDLC își propune să producă un software de înaltă calitate care să îndeplinească sau să depășească așteptările clienților, să ajungă la finalizare în timp și estimări ale costurilor. Există mai multe tipuri (modele) de SDLC. Enumerăm doar câteva:
Waterfall Model,
V-Shaped Model,
Evolutionary Prototyping Model,
Spiral Method,
Iterative and Incremental Method,
Menţionăm însă faptul că în funcţie de domeniul pentru care dezvoltăm software trebuie să respectăm anumite cerinţe suplimentare de calitate. De exemplu: în cazul în care dezvoltăm safety critical software, asigurarea calităţii presupune respectarea unor standarde suplimentare care să asigure conformitatea şi siguranţa produsului.
Aşa cum afirmam, asigurarea calității software-ului este un concept care ar trebui să se întindă pe întregul ciclu de viață al dezvoltării software-ului și pe întregul proces de dezvoltare continuă. Indiferent de metodologia adoptată pentru dezvoltare sunt câteva etape comune.
Vom prezenta câteva aspecte ale asigurării calităţii produsului pentru fiecare etapă de dezvoltare, cu menţiunea că nu sunt acoperite toate cerinţele de calitate în expunerea de faţă.
Enumerăm mai jos câteva aspecte care contribuie la asigurarea calităţii produsului şi sunt necesare în etapa de Planning:
Asigurarea tuturor informaţiilor necesare legate de client şi de produs;
Existenţa unor proceduri pentru transferul corect şi concret de informaţie de la echipele de sales şi presales spre echipele care vor asigura livrarea produsului;
Realizare unui project plan adecvat şi adaptat cerinţelor;
Stabilirea instrumentelor de lucru folosite pentru dezvoltare;
Utilizarea unui software de managementul documentaţiei şi review-ul documentaţiei;
Analizăm acum câteva aspecte care contribuie la asigurarea calităţii produsului și necesare în etapa de Analiza.
Un element foarte important în asigurarea calităţii software este modul în care sunt definite şi structurate specificaţiile (requirements) la orice nivel.
Pentru a livra un software de calitate în etapa de analiza trebuie să mă asigur că:
Exista un proces foarte bine organizat pentru colectarea cerinţelor de business (business requirements);
Exista un proces pentru validarea înţelegerii corecte a specificaţiilor;
Enumerăm câteva aspecte care contribuie la asigurarea calităţii produsului şi sunt necesare în etapa de Design:
Definirea unor procese corecte pentru identificarea software şi system design;
Definirea unor procese corecte pentru identificarea obiectivelor de testare;
Existenţa unor template-uri corecte şi a unor instrumente clare pentru etapa de design;
Folosirea unor instrumente (tools) adecvate pentru etapa de design;
Realizare unei documentaţii clare şi concise uşor de întreţinut bazată pe template-uri care să fie foarte utilă echipei cât şi clientului final;
Enumerăm câteva condiții care contribuie la asigurarea calităţii produsului, necesare în etapa de Development:
Este nevoie de configurarea unui tool folosit pentru gestiunea activităţilor de development (exemplu Jira). Configurarea trebuie să se bazeze pe un set de procese foarte bine definite şi cunoscute de echipa care, desigur, vor face obiectul unei continue îmbunătăţiri;
Trebuie să existe reguli clare pentru implementarea cerinţelor;
Este nevoie de guideline-uri pentru scriere de cod, în funcţie de tehnologia folosită, sau pentru customizare în cazul în care se folosesc alte pachete software pentru configurare;
Este nevoie de procese clare pentru cod review: mod de abordare, mod de stocare a informaţiilor;
Este nevoie de existenţa unor procese clare pentru elaborare documentaţiei (atât a documentaţiei finale pentru client cât şi a documentelor interne de tipul How To ...)
Stabilirea unor proceduri clare pentru gestionarea activităţilor interne;
Subliniem câteva aspecte care contribuie la asigurarea calităţii produsului şi sunt necesare în etapa de Testing:
Etapa de testare merge în paralel cu activitatea de dezvoltare;
Realizarea unui sistem cât mai corect de testare internă;
Am stabilit de la început reguli pentru bug şi issues tracking şi modalităţile de abordare şi clasificare;
Trebuie să elaborăm documentaţii clare care să cuprindă descrierea sistemului de test şi modul de acces;
Guidelines-uri pentru crearea testelor automate şi manuale;
Enumerăm câteva elemente care asigură calitatea produsului, vitale în etapa de Deployment:
Descrierea corectă a sistemului de test şi a sistemului din producţie;
Elaborarea unor cerinţe pentru deployment ;
Elaborarea procedurilor de deployment ;
Menţionăm câteva aspecte care contribuie la asigurarea calităţii produsului şi sunt necesare în etapa de Maintenance:
Considerăm extrem de important ca în acesta etapă, echipa care se ocupa de mentenanţa sistemului să preia de la echipa de dezvoltare, toate documentele conform cerinţelor de calitate menţionate şi să înţeleagă toate procedurile;
Pentru a oferi un serviciu de mentenanţa este absolut necesar să se stabilească procedurile concrete de Issue Tracking;
Nu am făcut referire la nici o metodologie anume. Ştim că multe dintre organizaţii au adoptat modelul Agile, cel mai des frameworkul Scrum.
Metodologiile moderne de dezvoltare software, ca modelul Agile, necesită foarte multe şabloane/cerinţe de standardizare pentru diverse activităţi, presupunând utilizarea unor instrumente uşor de utilizat. Există metrici şi metode de analiza care sunt folosite şi care dau o viziune mai clară asupra proiectului şi permit îmbunătăţiri semnificative. Etapele de dezvoltare sunt aceleaşi chiar dacă ele sunt parte a unui proces iterativ şi incremental.
De cele mai multe ori atunci când se discuta despre un standard de calitate echipele se gândesc la nişte reguli rigide şi greu de implementat. Standardele dau nişte indicaţii coordonate care ne pot ajuta să ne organizăm activitate în aşa fel încât să producem software de calitate.
Depinde de noi, la nivel de organizaţie şi proiect, modul în care ne definim procedurile pentru a produce un software de calitate. Acest lucru se poate face în primul rând prin auditarea proceselor existente , în aşa fel încât să avem procese uşor de înţeles şi acceptat la nivel de companie.
Elaborarea unor procese în dezvoltare, utilizarea unor tooluri, automatizarea proceselor şi a acţiunilor repetitive va permite asigurarea calităţii.
O altă condiție foarte importată este să planific toate acţiunile necesare pentru asigurarea calităţii şi să auditez intern permanent proiectele pentru a mă asigura că toate procesele sunt înţelese.
Elaborarea a unui plan de asigurare a calităţii software corespunzător este absolut necesar.
Indiferent de modelul de dezvoltare software abordat e nevoie de soluţii punctuale pentru organizaţie şi departamente.
Toate instrumentele folosite pentru dezvoltarea produsului software asigură calitatea produsului doar în cazul în care au la baza procese clare şi bine specificate.
Galin D., Software Quality Assurance: From Theory to Implementation, Pearson Education, 2004.
Software Quality Assurance Handbook, Kansas City Division, https://www.osti.gov/servlets/purl/6584873 (report)
Schulmeyer G.G. (Eds.), Handbook of software Quality assurance, Artech House, Boston, 2008.
Internaţional Standard ISO/IEC 25010 - System and software quality models.
https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
ISO 9001:2015. Quality management systems ISO 9000:2015: Quality Management Systems - Fundamentals and Vocabulary.
https://www.monterail.com/blog/software-qa-standards-iso-25010