Nu este o caracteristică de calitate specifică numai produselor software. S-a vorbit mult despre stabilitate în cazul teoriei sistemelor liniare. Au fost multe articole şi cărţi dedicate stabilităţii. Acum, stabilitatea trebuie privită şi ca o caracteristică de calitate care evidenţiază faptul că la variaţii mari ale unor parametri, produsul software permite obţinerea de rezultate corecte şi complete. Deci, şocurile indiferent de unde ar veni ele, nu influenţează calitatea prelucrărilor.
Să ne imaginăm că avem un program de calcul pentru mediile elevilor de şcoală. Se ştie că notele sunt de la 1 la 10. Dacă dezvoltatorul nu a impus validarea datelor de intrare, rezultatul va fi imprevizibil, deci programul va fi instabil, dacă operatorul introduce nota 100, în final media nu mai este un număr cuprins între 1 şi 10, aşa cum este normal.
Programul de calcul pentru mediile şcolare trebuie să aibă câteva linii de validare a datelor de intrare şi în acest fel acest program devine stabil.
Atunci când produsele software nu sunt testate suficient apar situaţii de instabilitate, adică nu se obţin rezultate corecte, iar dezvoltatorul se miră că programul a funcţionat corect în 1.000 de cazuri şi în cazul 1.001 nu a mai funcţionat. Probabil acel caz 1.001 este cel în care este activată ramura din arborescenţă care nu a fost testată.
Sunt situaţii în care algoritmii implementaţi nu au viteza de convergenţă care trebuie sau intră în bucle de ciclare necontrolată datorită lucrului cu variabile neiniţializate corect.
Am văzut implementat un algoritm de sortare care nu făcea diferenţa între un fişier deja sortat şi unul absolut împrăştiat. Ne aşteptam ca fişierul deja sortat să permită continuarea prelucrărilor imediat, ceea ce nu s-a întâmplat, căci algoritmul efectua interschimburi ca şi cum articolele nu erau sortate.
Cei care se ocupă de selectarea algoritmilor sunt obligaţi să studieze stabilitatea algoritmilor mai ales atunci când apar variaţii mari în ceea ce priveşte dimensiunea problemelor de rezolvat. Soluţiile promovate la creşterea dimensiunilor conduc de regulă la scăderea vitezei de prelucrare şi de aceea este nevoie de a găsi soluţii care să reducă mai ales traversările în structuri dinamice sau care să opereze cu variabile omogene dar a căror încărcare în memorie să se facă după algoritmi foarte eficienţi. aici este vorba de multă analiză statistică legată de comportamentul unor secvenţe.
Voi da un exemplu: dacă un subprogram este apela de două miliarde de ori, este cu mult mai avantajos să fie definit ca secvenţă de instrucţiuni încorporată în loc să fie apelat căci apelul indiferent cum s-ar face el înseamnă salturi necondiţionate spre subprogram, dar şi de la subprogram spre programul apelator.
Cei ce doresc stabilitatea produselor lor vor trebui să le facă mai întâi foarte bune şi după aceea să le testeze şi pentru situaţiile extreme, ca de exemplu situaţiile în care ar apărea împărţiri la zero sau nedeterminări de forma zero pe zero, care scapă de sub controlul programatorilor care chiar au crezut că astfel de situaţii nu apar în programele lor niciodată când acestea se rulează.
|