Documente Academic
Documente Profesional
Documente Cultură
Sistemelor
Informatice
PREFAŢĂ
2
Capitolul 7 – Proiectarea sistemelor software 173
1. Procesul de proiectare 173
2. Proiectarea arhitecturală 177
7.3. Proiectarea calităţii 180
7.4. Modularizarea proiectului 186
Capitolul 8 – Testarea sistemelor software 191
8.1. Introducere 191
8.2. Testarea pe parcursul ciclului de viaţă al unui program 192
3. Testele de sistem 196
4. Determinarea cazurilor de test 197
Capitolul 9 – Estimarea costurilor unui proiect software 211
9.1. Costuri şi efort 211
5. Modelul Halstead 212
6. Modele algoritmice clasice – Modele liniare 214
- Modelul Nelson 214
- Modelul Wolverton 215
7. Modele algoritmice moderne – Modele neliniare 215
- Modelul Walston – Felix 216
- Modelul COCOMO 217
- Modelul Putnam – Norden 221
- Legea lui Books 223
- Mărimea echipei şi productivitatea 223
Capitolul 10 – Calitatea sistemelor software 225
8. Indicatori de calitate 225
9. Productivitatea 228
3. Asigurarea fiabilităţii produselor software 229
4. Metrici software pentru paradigma orientată obiect 233
5. Modele de studiere „a posteriori” a fiabilităţii 237
6. Modele software pentru reducerea erorilor 247
7. Utilizarea datelor eronate pentru îmbunătăţirea deciziilor 252
8. Reducerea erorilor datorită măsurătorilor 254
3
10.9. Aplicarea analizei cauzale procesului de modificare a software-ului 256
Capitolul 11 – Evaluarea sistemelor software 267
11.1. Set de metrici software pentru conducerea proceselor de 267
mentenanţă a programelor
- Definirea setului de metrici 268
11.2. Program de implementare a metricilor 281
Bibliografie 283
4
Capitolul 1
1
Sistemele informatice. Probleme şi perspective
1.1 Introducere
Ştiinţa calculatoarelor, domeniu de activitate recunoscut ca având o
dinamică extrem de ridicată, a evoluat în ultimii ani pe coordonate cum ar fi
conceperea de noi tehnologii pentru realizarea aplicaţiilor software sau noi
modalităţi de lucru în echipă. Dacă în anul 1946 Goldstine şi von Neumann
apreciau că 1000 de instrucţiuni reprezintă o limită superioară rezonabilă pentru
complexitatea problemelor ce pot fi concepute ca rezolvabile cu ajutorul
calculatorului astăzi o asemenea dimensiune este atinsă doar cu scop didactic.
Mai mult, după ce a estimat în 1981 că nici un program pentru calculatoare
personale nu va necesita vreodată mai mult de 640 KB de memorie RAM, Bill
Gates, în anul 1995 a recunoscut că lucrurile s-au schimbat mult în ultimele două
decenii.
Următoarele exemple oferă o imagine mai completă a complexităţii la care
a ajuns software-ul în zilele noastre:
o Sistemul de rezervare a biletelor pentru compania aeriană KLM
conţinea, în anul 1992, 2000000 de linii de cod în limbaj de
asamblare;
o Sistemul de operare System V versiunea 4.0 (UNIX) a fost obţinut
prin compilarea a 3.700.000 linii de cod;
o Sistemele de programe pentru controlul navetelor spaţiale NASA
au circa 40 de milioane de linii de cod;
o Pentru realizarea sistemului de operare IBM OS360 au fost
necesari 5000 de ani- muncă.om.
5
Capitolul 1
6
Capitolul 1
8
Capitolul 1
9
Capitolul 1
11
Capitolul 1
13
Capitolul 1
100%
Hardware
Software
10%
14
Capitolul 1
Analiza şi
Proiectare
1/3
Testare
1/2
1/6
Codificare
Dacă totuşi erorile sunt o problemă majoră, atunci, când apar ele? Fig.1.3
arată numărul relativ de erori comise în diferite stadii de evoluţie a software-ului.
Dar problema este puţin mai dificilă şi constă în a stabili cât costă depistarea unei
erori. Se ştie că o eroare nedescoperită costă mai mult decât ar fi costat ea dacă
ar fi fost descoperită şi înlăturată la timp.
15
Capitolul 1
Programare
şi
Proiectare logicã
1/3
1/6
Sintaxa
Fig. 1.3. Numărul relativ de erori de-a lungul stadiilor de evoluţie ale software-ului
Programare
logicã,
sintaxa
20%
16
Capitolul 1
Codificare 7%
Testare unitate 8%
Testare
sistem 7%
Specificaţii
3%
Mentenanţã
67%
17
Capitolul 1
5. Fiabilitatea
În termeni generali fiabilitatea software reprezintă capacitatea sistemului
de a răspunde cerinţelor utilizatorului (de a-şi executa misiunea), în conformitate
cu specificaţiile sale de proiectare.
În mod curent, testarea este principala tehnică care dă certitudinea că
software-ul lucrează corect. Dar problema se complică atunci când trebuie
stabilit timpul în care este testată o piesă software pentru a avea certitudinea că
este corectă.
De exemplu: în cazul sistemului OS-360, sistemul de operare
lansat de
IBM, după depistarea unui număr de 1000 erori, firma lansează o nouă versiune.
În timpul desfăşurării programului spaţial american, un vehicul spaţial fără
om a fost trimis spre planeta Venus. A fost necesară o corecţie de traiectorie, iar
calculatorul, care avea misiunea de control, trebuia să execute următoarea
instrucţiune:
DO 3 I=1.3
Aceasta este o instrucţiune de atribuire perfect validă în FORTRAN, dar
programatorul avea intenţia să execute o structura repetitivă (DO) de trei ori
(I=1,3), numai că în loc de virgulă dupa cifra 1 (care desemna valoarea iniţială a
contorului) a pus punct . Calculatorul a executat deci în locul unui ciclu, o
instrucţiune de atribuire, dând variabilei DO3I valoarea 1.3 ! Ca urmare naveta
spaţială a luat o traiectorie greşită şi nu a mai fost găsită niciodată. De notat că
acest program a fost compilat şi testat cu succes!
Cu câţiva ani în urmă, sistemul de securitate american a intrat în alarmă
sesizând un atac împotriva S.U.A. S-a dovedit a fi o alarmă falsă ca urmare a
unei erori a computerului, dar până a fost descoperită, populaţia a avut "o zi
lungă", intrând într-o procedură de autoapărare .
18
Capitolul 1
Costul
producerii
Uşor de
întreţinut
Solicitări
de ultim
moment
Fiabilitate
Performanţa
Cerinţe în conflict
Cerinţe
19
Capitolul 1
20
Capitolul 1
Cost
22
Capitolul 1
Ele sunt :
- dezvoltarea sistematică în toate stadiile de dezvoltare a unei piese
software ;
- asistenţa calculatorului pentru dezvoltarea software-ului (limbaje de
generaţia a patra, medii pentru dezvoltare software, proiectare asistată
pentru inginerie software –instrumente software (CASE), UML, etc.) ;
- concentrarea efortului pentru depistarea cât mai exactă a dorinţelor
utilizatorilor ;
- utilizarea specificării formale pentru cerinţele sistemului ;
- demonstraţia făcută în faţa beneficiarilor printr-o versiune timpurie a
sistemului (prototipizare) ;
- utilizarea de limbaje de programare noi ;
- creşterea efortului pentru asigurarea că software-ul nu are erori .
Acestea constituie totodată şi principalele obiective ale cărţii de faţă, care
vor fi tratate pe rând în continuare .
Una dintre ideile dominante în abordarea dezvoltării software-ului este
dezvoltarea pe baza ciclului de viaţă sau modelul « waterfall ». În acest context
se împarte dezvoltarea unui produs informatic în paşi independenţi, aflaţi într-o
anumită succesiune.
Paşii succesivi sunt:
stabilirea cerinţelor
specificarea
proiectarea
implementarea
testarea
operarea şi întreţinerea
23
Capitolul 1
24
Capitolul 1
PROBLEMA
ENUNŢ FORMAL
SPECIFICAŢIE PROGRAM
SOLUŢIE
Fig.1.9. Programe S
27
Capitolul 1
Porţiune din
lumea
reală
ABSTRACŢIE
(MODEL
REALITATE)
DATE DIN
OBSERVAŢII
CERINŢE
COMPARARE SPECIFICAŢIE
SCHIMBARE
DATE DIN
CALCULE
PROGRAM
INFORMAŢIE
Fig.1.10. Programe P
28
Capitolul 1
29
Capitolul 1
Schimbare
de
mediu
Aplicaiţie
din lumea
realā
PROGRAM
ABSTRACŢIE
MODEL
Schimbare
Fig.1.11. Programe S
30
Capitolul 1
31
Capitolul 1
32
Capitolul 1
33
Capitolul 1
34
Capitolul 1
1. Care este propria dv. cerinţă atunci când dezvoltaţi o piesă software? De
ce? Trebuie să vă reexaminaţi solicitarea?
2. Este softawe-ul scump ? Ce criteriu aţi utilizat pentru a ajunge la concluzia
dumneavoastră?
3. Este uşor de dezvoltat/programat un sistem software? Justificaţi-vă
răspunsul.
4. Se ştie că există diferenţe enorme între programatori din punctul de
vedere al productivităţii . De ce credeţi că este această situaţie? Care este
cauza diferenţelor dintre diverşi programatori?
5. Se consideră următoarele cazuri :
a. Un microcalculator care controleză o maşină de spălat;
b. Un sistem de control al unei staţii de transformare a energiei electrice;
35
Capitolul 1
36