Extras din curs
CURS 1. Ingineria programării
1.1 Introducere
Să presupunem că slujba unui angajat de către o companie e de a determina cerinţele unui nou sistem computerizat pe care aceasta trebuie să-l realizeze. Aceasta înseamnă că angajatul va fi responsabil pentru specificarea tuturor elementelor soft necesare inginerilor, tehnicienilor, managerilor,etc., implicaţi în proiect. Ei le vor folosi pentru a crea, a menţine şi a coordona aplicaţia soft folosită de noul sistem. Pentru a înţelege semnificaţia slujbei ce i s-a oferit, i se va face o scurta trecere în revistă a ceea ce se cere de la acest nou sistem:
- arhitectura sistemului va conţine câteva zeci de calculatoare legate în reţea, dar dispersate pe distanţa de sute sau mii de km. Mai mult decât atât, sistemul va îngloba un foarte mare număr de elemente spaţiale ce vor comunica în mod continuu prin legături pamântene şi satelit.
- Elementele de siguranţă ale sistemului sunt foarte severe. Nu se admit căderi individuale ale părţilor sistemului. Mai mult, în cazul oricărei inserări de nou soft sau părţi în acest sistem nu se admite oprirea sitemului. Odată ce sistemul a devenit operaţional, el va trebui să rămână aşa până la sfârşitul ciclului său de viaţă.
- Deoarece se intenţionează ca sistemul să funcţioneze 20-30 de ani sau mai mult, el trebuie să a ofere posibilitatea de a i se adăuga cu uşurinţă un nou soft sau hard (flexibilitatea sistemului).
Primele estimări arată că vor fi scrise în jur de 100.000 linii cod sursă în limbaj de nivel înalt pentru a îndeplini cerinţele actuale ale sistemului şi in jur de 300000 linii cod pentru softul ce va indeplini scopuri ulterioare ale aceluiaşi sistem.
Sitemul trebuie creat în 7 ani, la timp, fără depăşirea cheltuielilor. Şi încă ceva, el va trebui foarte bine documentat. Şi vor mai fi implicate aprox. 4000 persoane în dezvoltarea acestui proiect, în 30 de companii răspândite de-a lungul SUA şi posibil în Europa şi Japonia, toate acestea trebuind să lucreze cu acest sistem.
Deşi acest sistem este mult simplificat, el reprezintă unele dintre cerinţele unui proiect spaţial NASA, din anii 1990. Se poate spune că este un proiect ambiţios, totuşi nu este unic în ceea ce priveşte complexitatea sa, costul sau programarea. Există multe sisteme computerizate, de mare amploare şi complexitate, care sunt utilizate în viaţa de zi cu zi: sistemele de tranzacţii financiare ale băncilor, sistemele utilizate de companiile telefonice, sistemele de rezervare pentru liniile aeriene, sunt doar câteva exemple. Atât securitatea naţională cât şi linistea casei devin devin din ce în ce mai dependente de sistemele computerizate. Totusi, există ceva din ce în ce mai neliniştitor în privinţa acestui nivel de dependenţă: prăbuşirile avioanelor, abandonarea sondelor spaţiale, trenurile fantomă, rachete lansate care au părăsit traiectoria prevăzută, sunt doar câteva exemple de ceea ce s-ar putea întampla atunci când un sistem computerizat nu funcţionează corect.
Unii autori consideră că de cele mai multe ori eforturile de a construi un sistem software este îngreunat de faptul că nu ştim ceea ce construim şi nici cum s-o facem.
Pe de altă parte ne lovim de inerenta complexitate a sistemelor software şi de incapacitatea umană de a stăpâni complexitatea.
Există sisteme software care nu sunt complexe, acestea sunt aplicaţiile specificate, construite, întreţinute şi folosite de aceeaşi persoană, de obicei un programator amator sau profesionist. Acestea au un scop limitat şi un ciclu scurt de viaţă. E mai uşor să fie înlocuite decât să fie extinse sau refăcute. De aceea, nu proiectarea acestora este interesantă ci a sofware-ului de putere industrială (ex: sisteme pentru controlul proceselor fizice, pentru care spaţiul şi timpul sunt resurse foarte importante, sisteme care mimează inteligenţa umană, sisteme pentru coordonarea traficului aerian sau al căilor ferate, etc.). Aceste sisteme au un ciclu de viaţă mult mai lung şi, de-a lungul timpului, mulţi utilizatori depind de funcţionarea lor corectă.
O trăsătură distinctă a softului de putere industrială e aceea de a fi foarte dificil, dacă nu chiar imposibil pentru un proiectant singur să înţeleagă toate subtilităţile unui asemenea proiect. Se pare că această complexitate este o proprietate esenţială a marilor sisteme software. Prin urmare, proiectantul nu se poate bizui pe inspiraţie, el are nevoie de un mod organizat de a stăpâni complexitatea. Pentru a înţelege mai bine ceea ce urmărim să controlăm, examinăm mai întâi de ce complexitatea e o proprietate esenţială
1.2 Complexitatea sistemelor software
derivă din 4 elemente:
1) complexitatea domeniului problemei.
Problemele care cer o rezolvare software sunt deosebit de complexe, începând chiar cu specificaţiile care pot fi contradictorii (ex: specificaţiile pentru construirea unui robot). Funcţionalitatea acestor sisteme este suficient de greu de înţeles şi la aceasta se mai adaugă şi cerinţele nefuncţionale pe care trebuie să le îndeplinească sistemul: performanţă, utilitate, fiabilitate, cost, etc. Această complexitate provine şi din neînţelegerile care există între proiectanţii sistemului şi utilizatorii săi: utilizatorii, de obicei, nu-şi pot exprima clar cerinţele într-o formă pe care proiectanţii să o înţeleagă. Uneori, ei au doar o vagă idee despre ceea ce doresc de la un sistem. Practic, aceste probleme apar deoarece fiecărui grup îi lipsesc cunoştinţele despre domeniul celuilalt grup. Utilizatorii şi proiectanţii au perspective diferite de a vedea soluţia problemei. Chiar şi atunci când utilizatorii ştiu ceea ce doresc, lipsesc instrumentele pentru extragerea precisă a cerinţelor lor. Calea obişnuită prin care aceste specificaţii sunt exprimate constă în a scrie mult text, incluzând ocazioanl şi diverse figuri. Dar aceste documente sunt greu de înţeles, sunt deschise la diverse interpretări, şi deseori, conţin elemente care sunt mai degrabă de proiectare decât de specificaţiile esenţiale ale problemei.
Complicaţii mai mari apar atunci când specificaţiile sistemului se modifică în timpul dezvoltării lui. Sistemele mari tind să evolueze de-a lungul timpului, o condiţie ce impropriu este denumită “întreţinere”. Mai precis, întreţinerea înseamnă corectarea erorilor. Evoluţia înseamnă modificarea cerinţelor şi menţinerea înseamnă folosirea unor mijloace extraordinare de a păstra în utilizare un sistem vechi şi depăşit.
Preview document
Conținut arhivă zip
- Ingineria Programarii
- Curs_IP_01.doc
- Curs_IP_02.doc
- Curs_IP_03.doc
- Curs_IP_04.doc
- Curs_IP_05.doc
- Curs_IP_06.doc
- Curs_IP_07.doc
- Curs_IP_08.doc
- Curs_IP_09.doc
- Curs_IP_10.doc