În literatura de specialitate, atât din ţarã cât şi strãinã, se gãsesc numeroase definiri şi ierarhizãri ale caracteristicilor de calitate [ISO1], [STU1], [BOE1], [TAT1], [THA1], [BARO1], [BARO2], [BARO3], [MCC1]. Unii autori folosesc doar termenul de caracteristici de calitate, alţii le grupeazã în caracteristici şi atribute, caracteristici şi factori sau caracteristici şi subcaracteristici. Se vor trata în continuare câteva caracteristici de calitate, pe baza definirilor fãcute în [ISO1], [BARO1] şi [BARO3]. Funcţionalitatea este definitã în standardul ISO/IEC 9126, [ISO1], ca un set de atribute bazate pe existenţa unui set de funcţii şi pe proprietãţile lor specificate. Funcţiile satisfac necesitãţile stabilite sau implicate. Acest set de atribute ce defineşte funcţionalitatea, aratã “ce face” produsul software pentru a îndeplini cerinţele, pe când alte seturi rãspund la întrebãrile “când” şi “cum” corespunde nevoilor produsul respectiv. Referirea la nevoile stabilite sau implicate se face pe baza definiţiei calitãţii din standardul ISO 8402 [ISO3]: “totalitatea trãsãturilor şi caractersiticilor unui produs sau serviciu care se bazeazã pe abilitatea sa de a satisface nevoile stabilite sau implicate”. Într-un context contractual nevoile sunt stabilite, specificate, pe când în alt context nevoile implicate trebuie identificate şi definite. Fiabilitatea este privitã în [BARO1] ca mãsura încrederii pe care o avem în concepţia şi în capacitatea unui program de a funcţiona corect în toate condiţiile avute în vedere de la început. Aceastã definiţie se referã mai mult la fiabilitatea procesului decât la cea a programului, fiind legatã de probabilitatea ca o eroare din program sã fie activatã de un set specific de intrãri. Fiabilitatea produselor software este caracteristica ce exprimã poate cel mai bine particularitãţile acestei industrii, dacã abordãm problema în comparaţie cu fiabilitatea produselor hardware. Existã abordãri cantitative ale fiabilitãţii, exprimate prin probabilitatea ca un produs software sã-şi îndeplineascã funcţiunile cu anumite performanţe şi fãrã erori într-un interval de timp şi în condiţii de exploatare date, precum şi abordãri calitative ce privesc fiabilitatea ca o capacitate a produsului software. Standardul ISO/IEC 9126 [ISO1], defineşte fiabilitatea ca un set de atribute care se bazeazã pe capabilitatea produsului software de a-şi menţine nivelul de performanţã în condiţii şi pe o perioadã de timp stabilite. Limitele fiabilitãţii unui produs software se datoreazã erorilor din etapele de formulare a cerinţelor, proiectare şi implementare. Cãderile datorate acestor erori depind de modul şi condiţiile în care este utilizat produsul. Corespunzãtor ciclului de viaţã al produsului software, putem distinge o fiabilitate previzionalã sau proiectatã, o fiabilitate experimentalã şi o fiabilitate operaţionalã (la beneficiar). Utilizabilitatea este definitã în [ISO1] ca un set de atribute bazate pe efortul necesar pentru a utiliza produsul software şi pe evaluarea individualã a utilizãrii produsului, de cãtre un grup stabilit sau implicat de utilizatori. Standardul dã termenului de utilizatori un înţeles foarte larg, incluzând operatori, utilizatori finali şi indirecţi, precum şi toate categoriile de persoane care îşi desfãşoarã activitatea dependent sau sub influenţa utilizãrii produsului software respectiv. Eficienţa produselor software este definitã în [BARO3] ca o corelaţie optimã între consumul de resurse al produsului şi complexitatea problemei de rezolvat. Tot în acest material se aratã cã eficienţa poate fi exprimatã prin introducerea noţiunii de output al produsului software, definitã ca o relaţie între complexitatea datelor iniţiale şi a rezultatelor finale. Standardul ISO/IEC 9126 [ISO1], defineşte eficienţa tot ca pe o corelaţie, dar nu între consumul de resurse şi complexitatea problemei, ci ca un set de atribute bazate pe relaţia dintre nivelul de performanţã al produsului software şi cantitatea de resurse utilizate, în anumite condiţii stabilite. Spre deosebire de [BARO1], standardul [ISO1] lãrgeşte mult categoria resurse consumate, incluzând atât memoria, timpul de execuţie, precizia cât şi cantitatea de hârtie utilizatã, serviciile de operare, mentenanţã sau suport de personal. Mentenabilitatea este definitã în [ISO1] ca un set de atribute bazate pe efortul necesar pentru a face modificãrile specificate în produsul software respectiv. Modificãrile includ corecţii, îmbunãtãţiri sau adaptãri la modificãri ale platformelor (de dezvoltare, ţintã, etc), modificãri în cerinţe şi specificaţii funcţionale. Conform [BARO3], un produs software este mentenabil în mãsura în care permite o rapidã şi uşoarã actualizare astfel încât sã poatã fi utilizat în continuare în bune condiţii. Actualizãrile din aceastã definiţie sunt privite în sens mult mai restrâns. Ele referindu-se numai la operaţii la nivelul produsului software, al modulelor, secvenţelor de instrucţiuni şi instrucţiunilor. Nivelul mentenabilitãţii se poate stabili pe baza datelor obţinute în etapele de proiectare, testare şi utilizare curentã. Evaluarea acestei caracteristici se bazeazã pe datele obţinute indirect prin examinarea influenţei modificãrilor asupra celorlalte caracteristici de calitate, cum ar fi complexitatea, testabilitatea, modularitatea, etc. Un factor care determinã obţinerea unei mentenabilitãţi corespunzãtoare este corelarea strictã a nivelului de complexitate cu funcţia de procesare îndeplinitã de fiecare modul. Portabilitatea este definitã în [ISO1] ca un set de atribute bazate pe facilitatea pe care trebuie sã o ofere produsele software în direcţia transferãrii dintr- un mediu în altul. Înţelegând prin mediu nu numai contextul hardware şi/sau software, ci şi cadrul organizaţional, standardul ISO/IEC 9126 - [ISO1] - extinde considerabil limitele cerinţelor impuse portabilitatãţii. Restrângând mult limitele, în [BARO3] portabilitatea se defineşte ca o caracteristicã de ordin calitativ a programelor ce pot fi rulate pe mai multe tipuri de calculatoare. Programele sunt considerate portabile nu numai dacã pot fi implementate pe mai multe tipuri de calculatoare direct, fãrã alte modificãri ci şi dacã execuţia pe alte tipuri de sisteme de calcul necesitã modificãri de micã anvergurã şi un efort de programare mult mai mic decât cel cerut de rescrierea acestor programe. Un aspect deosebit al acestei caracteristici este legat de portabilitatea compilatoarelor, de diferitele facilitãţi video şi audio oferite de sistemele de calcul şi folosite în programele de aplicaţie. Abordarea diferitã a acestei caracteristici de calitate, la sfârşitul anilor ‘90, este relevatã şi de preocupãrile pentru crearea de sisteme ieftine, care pot deveni staţii de lucru în mai multe tipuri de reţele, rulând programe dezvoltate pe platforme ţintã diferite - UNIX, Windows, DOS, VMS - având în spate puterea reţelei globale - Internet. Interoperabilitatea consideratã de mai mulţi autori un atribut al calitãţii, reprezintã, conform [BARO3], capacitatea produsului software de cuplare cu alte produse. Acest atribut permite reutilizarea unor programe pentru construirea unor aplicaţii complexe. Cuplarea se poate asigura direct sau folosind interfeţe. Problema interfeţelor şi a bibliotecilor de funcţii prin care pot fi cuplate aplicaţii, a stat la baza dezvoltãrii unor concepte, programe şi specificaţii deosebit de complexe. Exemple elocvente sunt specificaţiile Open Database Connectivity, utilizate în aplicaţiile de baze de date, API-urile dezvoltate de Microsoft odatã cu sistemul Windows sau Object Linking and Embedding - încapsularea şi înlãnţiurea obiectelor - set construit folosind tehnica obiectelor, prin care obiecte construite de unele aplicaţii sunt accesibile şi altor aplicaţii. Complexitatea este probabil atributul sau caracteristica de calitate pentru care s-au dezvoltat cele mai multe sisteme de metrici şi care a fost studiatã în corelaţie cu mai multe caracteristici, în special cu fiabilitatea, mentenabilitatea, stabilitatea, etc. Acest atribut a fost abordat fie studiind codul sursã al programelor, fie prin intermediul grafurilor asociate programelor, grafuri în care nodurile corespund structurilor de control iar arcele aratã fluxul execuţiei. Din prima categorie de abordãri fac parte sistemele de metrici Halstead şi combinaţii ale acestora - [BARO2], [TEO1] - iar din a doua categorie, metrica cea mai reprezentativã este complexitatea ciclomaticã, dezvoltatã de T.McCabbe [MCC1]. În [MUN1] şi [RAD1] se propun noi metrici pentru mãsurarea complexitãţii, obţinute prin combinarea celor douã categorii amintite, utilizând metoda statisticã a analizei factorilor. Elaborarea unor modele pertinente pentru studierea şi predicţia complexitãţii produselor software este importantã pentru programarea resurselor umane, materiale, financiare şi de timp, necesare proiectãrii şi implementãrii programelor de complexitãţi diferite. De asemenea, complexitatea influenţeazã şi cheltuielile ulterioare punerii în funcţiune a produsului (post-vânzare, service, asistenţã tehnicã), precum şi eforturile de a dezvolta noi versiuni sau de a rescrie produsul şi pe/pentru alte platforme.