Calitatea software-ului

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Calitatea software-ului se referă la măsura în care un produs software îndeplinește un anumit număr de așteptări, atât în ​​ceea ce privește funcționarea acestuia, cât și structura sa internă. O mare parte din cercetările din domeniul ingineriei software sunt dedicate, direct sau indirect, subiectului calității. În special, am încercat să stabilim clar ce se înțelege prin calitate software, definind un set de parametri de calitate semnificativi; să implementeze tehnici de măsurare a acestor parametri în raport cu un sistem software dat; să dezvolte tehnologii (de exemplu limbaje de programare ) și metodologii (de exemplu analiză și proiectare ) care facilitează crearea de software de calitate.

Ce este software-ul de calitate?

Clasificarea parametrilor

În mod tradițional, parametrii (sau factorii ) față de care calitatea software-ului poate fi măsurată sau definită sunt clasificați în două familii: parametri externi și parametri interni . Primele se referă la calitatea software-ului percepută de utilizatorii săi și includ corectitudinea, fiabilitatea , robustețea , eficiența , gradul de utilizare , eco-compatibilitatea . Acestea din urmă se referă la calitatea software-ului percepută de dezvoltatori și includ verificabilitatea , mentenabilitatea , reparabilitatea , evoluabilitatea , reutilizarea , portabilitatea , lizibilitatea , modularitatea . În general, există o corelație între aceste două aspecte (banalizare: software-ul slab scris tinde, de asemenea, să funcționeze defectuos ).

Parametri externi de calitate

Corectitudine

Se spune că un program sau sistem software este corect dacă se comportă exact în conformitate cu specificațiile cerințelor sale. În termeni mai informali, un sistem este corect dacă face exact ceea ce a fost conceput să facă. În ingineria software „clasică” ( anii 1960 - 1970 ), dezvoltarea unui software corect a fost considerată în mod universal obiectivul primordial , către care erau vizați toți ceilalți parametri de calitate. Multe modele moderne de dezvoltare software , pe de altă parte, exclud posibilitatea dezvoltării în raport cu o specificație stabilită a priori într-un mod definitiv și lipsit de ambiguități și, prin urmare, indirect, refuză corectitudinii o valoare practică semnificativă. În orice caz, corectitudinea este o calitate absolută (un sistem este corect sau nu ) și esențial imposibil de măsurat (verificat); nu este posibil să se stabilească cu certitudine că un sistem este corect.

În metodele de dezvoltare și proiectare agile, vorbim mai degrabă de „satisfacția clientului”, ceea ce înseamnă că cerințele inițiale ar fi putut fi modificate, dar cu acordul și satisfacția deplină a clientului.

Fiabilitate

Pictogramă lupă mgx2.svg Același subiect în detaliu: Fiabilitate .

Un sistem este cu atât mai fiabil cu cât mai rar, în timpul utilizării sistemului, apar defecțiuni. O definiție mai specifică, dar nu recunoscută universal, se bazează pe conceptul de MTBF ( Timpul mediu între eșec , timpul mediu dintre două eșecuri succesive). În termeni mai vagi (dar probabil mai semnificativi), se poate spune, de asemenea, că fiabilitatea este măsura în care utilizatorul poate „avea încredere” în software; această definiție ia în considerare, în special, faptul că defecțiunile grave sunt de obicei considerate mai influente în evaluarea fiabilității decât erorile minore. În acest sens, modul în care este înțeles termenul de fiabilitate poate varia în funcție de tipul de utilizator (de exemplu, capacitatea sa de a se adapta) și de tipul de aplicație (de exemplu, în funcție de criticitatea sa).

Deoarece fiabilitatea este măsurabilă din punct de vedere conceptual (odată ce un anumit model a fost specificat, de exemplu MTBF sau o variantă ponderată în funcție de gravitatea eșecurilor), acest parametru este adesea considerat contrapartida „realistă” a corectitudinii.

Industria software modernă, cu aplicații non-critice, tinde să considere avantajoasă din punct de vedere economic lansarea de produse cu o rată inițială de eșec destul de mare, dar echipate cu mecanisme periodice de încărcare a patch-urilor (de exemplu prin intermediul internetului ) prin care erorile sunt corectate pe măsură ce sunt găsit de utilizatori și raportat producătorului.

Contraexemple de software de încredere (sau exemple clare de software de încredere). Therac-25 era echipament medical folosit la începutul anilor 1980 pentru tratarea cancerului. Unicitatea echipamentelor de la acea vreme era software-ul, care monitoriza doza de radiație care trebuie emisă în tratament. Din păcate, o eroare a software-ului a determinat eliberarea de doze letale. Eroarea apare atât de rar încât mai mulți oameni au murit înainte de a realiza problema.

Robusteţe

Pictogramă lupă mgx2.svg Robustețe (informatică) .

În termeni generali, robustețea unui sistem este măsura în care sistemul se comportă în mod rezonabil în situații neașteptate, neacoperite de caietul de sarcini. Situațiile de acest tip se referă în general la erori și excepții de diferite tipuri (date de intrare incorecte, defecțiuni ale componentelor software sau hardware externe sistemului și interacțiunii cu acesta etc.). Din nou, ideea intuitivă de robustețe implică cu siguranță considerații valoroase cu privire la efectele dăunătoare pe care le experimentează sistemul sau utilizatorul dacă sistemul reacționează „nerezonabil” la situații neprevăzute.

Eficienţă

Pictogramă lupă mgx2.svg Același subiect în detaliu: Eficiență (informatică) .

Un sistem este eficient dacă folosește memorie , CPU și alte resurse într-un mod proporțional cu serviciile pe care le prestează, adică fără risipă. Termenul de performanță are o semnificație mai specifică; performanțele, de fapt, trebuie considerate ca unul dintre elementele care ar putea fi specificate de cerințe (în acest caz vorbim de cerințe nefuncționale ). Eficiența și performanța sunt dificil de prezis și, prin urmare, nu sunt rareori luate în considerare decât după ce sistemul a fost construit; cu toate acestea, intervențiile post- hoc pentru a îmbunătăți comportamentul sistemului în raport cu acești parametri sunt adesea extrem de dificile și costisitoare. Printre modelele utilizate pentru măsurarea (sau specificarea) eficienței unui sistem, putem menționa cele bazate pe complexitatea algoritmică , măsurători de câmp, măsurători pe modele matematice sau modele de simulare .

Utilizare

Pictogramă lupă mgx2.svg Același subiect în detaliu: Utilizare .

Un sistem este ușor de utilizat dacă o ființă umană consideră că este așa.
Este o calitate subiectivă:

  • depinde de context
  • depinde de experiență

Interfața cu utilizatorul are mult de-a face cu ușurința unei aplicații, dar chiar și în acest caz este instruirea și cultura utilizatorului să judece această caracteristică.

În afară de o viziune mecanocentrică, ar trebui subliniată existența unor principii comune care permit evaluarea nivelului de utilizare a unei aplicații, indiferent de factorii subiectivi. Se face trimitere la binecunoscutul studiu realizat de Jakob Nielsen [1] și la ceea ce este exprimat de standardul ISO 9241-10 privind cerințele ergonomice [2] .

Eco-compatibilitate

Pictogramă lupă mgx2.svg Același subiect în detaliu: Eco-friendly .

Un sistem este ecologic dacă ține cont în proiectarea sa de impactul funcționării sale asupra mediului înconjurător. Eco-compatibilitatea este echivalentă cu eficiența sistemului de mediu din care face parte ființa umană.

Scalabilitate

Pictogramă lupă mgx2.svg Același subiect în detaliu: Scalabilitate .

Un sistem este scalabil dacă poate fi adaptat la diferite contexte cu diferențe puternice de complexitate (de exemplu baze de date foarte mici sau foarte mari) fără a necesita reproiectarea aceluiași sistem. De obicei, este necesar ca performanța unui sistem să poată fi crescută „pur și simplu” prin asigurarea sistemului cu mai multe resurse de calcul (procesoare mai puternice, mai multă memorie, sisteme de stocare în masă mai mari sau mai rapide etc.).

Parametrii interni de calitate

Verificabilitate

Un sistem este verificabil dacă proprietățile sale:

  • corectitudine
  • fiabilitate

sunt ușor de verificat.
Pentru a crește gradul de verificare, folosim:

În unele cazuri, devine o calitate externă ( securitatea software-ului este critică ).

Mentenabilitate

Ușurința de a aduce modificări sistemului implementat. Inițial, se credea că întreținerea corespundea doar remedierii erorilor , dar astăzi situația este mai complexă; de fapt, întreținerea se referă la orice îmbunătățire a software-ului și ar trebui indicată mai precis ca evoluție a software-ului . 60% din costuri depind acum de întreținere. Pentru a analiza aceste costuri, este necesar să se împartă în întreținere:

  • Corectiv
  • Adaptive
  • Perfectiv

Întreținere corectivă

  • Eliminați erorile prezente de la început
  • Elimină erorile introduse de intervențiile de întreținere anterioare
  • Reprezintă 20% din întreținerea totală

Întreținere adaptivă (sau adaptativă):

  • Modificări ca urmare a schimbărilor din mediu
  • Modificări ale hardware-ului, sistemului de operare etc.
  • 20% din total

Întreținere perfectă

  • Modificări pentru îmbunătățirea calității software-ului
  • Introducerea de noi caracteristici
  • Îmbunătățirea caracteristicilor existente
  • Este cea mai mare parte (aproximativ 60% din total)

Ultima parte este atât de substanțială, în special pentru software-urile vechi, încât nu poate fi înlocuită la un cost, deci este îmbunătățită și adaptată. Mentenabilitatea depinde de două aspecte

  • Reparabilitate pentru a indica ceea ce permite eliminarea defectelor
  • Evoluabilitate pentru a indica ceea ce permite implementarea de noi cerințe

Reparabilitate

Un sistem poate fi reparat dacă este un efort mic pentru corectarea erorilor. Este o proprietate fundamentală a multor produse inginerești (mașini, computere, ...). Pentru aceste produse, tehnica utilizată este de a reduce prețul și de a favoriza înlocuirea, mai degrabă decât repararea. Pentru ca acest lucru să se întâmple, se utilizează piese standard care pot fi schimbate cu ușurință. În software, situația este diferită.

  • Nu există uzură (piese mecanice);
  • Nu există componente standard;
  • Costul nu depinde de piese, ci doar de forța de muncă necesară.

Reparabilitatea este urmărită prin modularizare. Nu contează atât numărul, cât mai degrabă modul în care acestea sunt organizate între ele și în interiorul lor.

Evoluabilitate

Software-ul, spre deosebire de alte produse de inginerie, este teoretic ușor de modificat. In orice caz:

  • Nu se efectuează niciodată studii aprofundate de fezabilitate
  • Modificările nu sunt planificate

Mai rău, modificările făcute nu sunt întotdeauna documentate, astfel încât specificațiile nu sunt actualizate și acest lucru face ca modificările viitoare să fie dificil de realizat. Este necesar să se prevadă de la început că software-ul poate evolua și proiecta având în vedere această evoluție pentru a profita la maximum de costurile suportate în trecut.

Reutilizarea

Împreună cu evoluția. Cu toate acestea, există o modificare a evoluției pentru a crea o nouă versiune, în timp ce în sistemul de reutilizare părțile sunt utilizate pentru a crea un produs diferit. Inițial, ne-am gândit la refolosirea software-ului. Astăzi totul este refolosit:

Indică nivelul de maturitate al disciplinei. Beneficii:

  • Reducerea costurilor
  • Fiabilitate sporită

Cum se fac reutilizabile diferitele artefacte?

  • Tehnici de proiectare
  • Tehnici de specificare
  • Metodologii
  • Standardizarea procesului de dezvoltare

Portabilitate

Un sistem este portabil dacă este capabil să funcționeze în medii diferite.

A devenit un aspect fundamental deoarece permite să aibă avantaje economice, deoarece costurile pot fi amortizate prin transportarea aplicației în diferite medii. În cazul aplicațiilor web, acesta este cheia. Instrumentele și tehnicile special concepute sunt folosite pentru a crea obiecte portabile.

Elemente conexe

Inginerie Portal de inginerie : accesați intrările Wikipedia care se ocupă de inginerie