Extras din curs
În “Ghidul cunoștințelor esențiale referitoare la Ingineria Programării” (Guide to the
Software Engineering Body of Knowledge - http://www.swebok.org/), ingineria programării (sau
ingineria software) este definită astfel:
- aplicarea unei metode sistematice, disciplinate și cuantificabile pentru dezvoltarea,
operarea și întreținerea unui program software; cu alte cuvinte este vorba de aplicarea
ingineriei în domeniul dezvoltării programelor;
- studiul metodelor descrise mai sus.
De asemenea, tot în această lucrare, se identifică 10 direcții ale cunoașterii referitoare la
ingineria programării:
1. cerințele unui proiect software (identificarea și descrierea cerințelor);
2. proiectarea software-ului (programare orientată pe obiecte);
3. dezvoltarea (implementarea) programului;
4. verificarea programului (tehnici de testare);
5. întreținerea programului (reverse engineering);
6. gestionarea tuturor variantelor programului;
7. planificarea unui proiect software;
8. procese specifice ingineriei programării (definirea și gestionarea proceselor
software);
9. instrumente și metode ale ingineriei programării (instrumente CASE);
10. calitatea softului (metode de gestiune a calității programelor).
Acest curs nu își propune să studieze toate direcțiile cunoașterii privitoare la ingineria
programării enumerate anterior. În principal ne propunem abordarea câtorva direcții mai
importante:
- cerințe software, metodologii ale ingineriei cerințelor, modelarea sistemelor software;
- proiectarea programelor: analiza programului, proiectarea arhitecturală, arhitectura
unui sistem distribuit, ingineria programării bazată pe componente;
- metode ale ingineriei programării: metode agile pentru dezvoltarea de programe.
Obiectivul formativ al acestui curs se referă la prezentarea aspectelor fundamentale cu
privire la metodologiile și tehnologiile informatice folosite la dezvoltarea proiectelor software de
dimensiune medie și mare.
Scopul acestui curs este acela ca un student să dobândească cunoștințele necesare pentru
participarea la un proiect software, analizând detaliile și problemele, atât tehnologice cât și
organizatorice sau metodologice.
Ingineria Programării
2
Bibliografie
- Ian Sommerville, Software engineering (7th edition), Pearson, Addison Wesley,
2004.
- Craig Larman, Applying UML and patterns - an introduction to object-oriented
analysis and design and iterative development, Prentice Hall PTR, 2005.
- Len Bass, Paul Clements, Rick Kazman, Software architecture in practice (2nd
edition), Pearson, Addison Wesley, 2003.
- Frank Buchmann, Regine Meunier, Peter Sommerlad, Michael Stal, Pattern-oriented
software architecture - a system of patterns, John Wiley & Sons, 1996.
- George Coulouris, Jean Dollimore, Tim Kindberg, Distributed systems, concepts and
design (3rd edition), Pearson, Addison Wesley, 2001.
- Ed Roman, Rima Patel Sriganesh, Gerald Brose, Mastering Enterprise JavaBeans
(3rd edition), Wiley, 2005.
Știința calculatoarelor este un domeniu relativ nou, primele calculatoare fiind construite
la mijlocul anilor `40, de atunci având loc dezvoltări spectaculoase ale acestui domeniu. Î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. În 1981, Bill Gates prevedea faptul că nici un program pentru calculatoare
personale nu va necesita vreodată mai mult de 640 KB de memorie RAM.
Următoarele exemple oferă o imagine asupra gradului de complexitate la care au ajuns
programele în zilele noastre:
- sistemul de rezervare a biletelor pentru compania aeriană KLM conținea în anul 1992
circa două milioane de linii de cod în limbaj de asamblare;
- sistemul de operare System V versiunea 4.0 (UNIX) a fost obținut prin compilarea a
peste 3.700.000 linii de cod;
- programele scrise pentru naveta spațială NASA au circa 40 de milioane de linii de cod.
Creșterea programelor în dimensiune și complexitate a depăsit cu mult progresele făcute
în domeniul tehnicilor de programare: de aceea, programarea a devenit și a rămas mai mult o
artă decât o meserie.
Pe măsură ce complexitatea programelor creștea, la sfârșitul anilor ’60 începea să se
prefigureze deja o criză a programării. Într-un raport prezentat de către o companie, în care erau
analizate câteva proiecte și stadiile lor de finalizare, se constată că:
- 3% din sistemele software au putut funcționa după câteva modificări;
- 29% au fost predate dar n-au funcționat niciodată;
- 19% au fost folosite dar au fost abandonate;
- 47% au fost plătite dar niciodată predate.
Pentru a contracara aceste tendințe, la conferința organizată de comitetul științific al
NATO în anul 1968, a fost propus termenul de ingineria programării (engl. „software
engineering”), într-un mod oarecum provocator. Se dorea ca arta programării să împrumute din
rigoarea științelor inginerești pentru a putea livra programe la timp și în mod economic. Prima
definiție dată ingineriei programării a fost enunțată astfel (F. L. Bauer):
Ingineria programării este stabilirea și utilizarea de principii inginerești solide pentru a
obține în mod economic programe sigure și care funcționează eficient pe mașini de calcul reale.
În IEEE Standard Glossary of Software Engineering Technology (1983) ingineria
programării este definită după cum urmează:
Ingineria Programării
3
Ingineria programării reprezintă abordarea sistematică a dezvoltării, funcționării,
întreținerii, și retragerii din funcțiune a programelor.
Considerăm că ingineria programării are următoarele caracteristici importante:
- este aplicabilă în producerea de programe mari;
- este o știință inginerească;
- scopul final este îndeplinirea cerințelor clientului.
Programele mici se pot scrie relativ ușor, de către un singur programator, într-o perioadă
destul de scurtă de timp. Un program de 100 de instrucțiuni este cu siguranță un program mic.
Nu putem identifica precis granița dintre un program mic și unul mare, însă pe măsură ce
dimensiunea programului crește, apar provocări noi, diferite din punct de vedere calitativ.
Întrucât unul sau câțiva programatori nu pot avea timpul fizic pentru terminarea unei
aplicații mai mari, este necesară crearea uneia sau mai multor echipe de lucru, precum și
coordonarea și comunicarea între acestea. Complexitatea sistemului software și a organizației ce
realizează sistemul software devine importantă, putând depăși capacitatea de înțelegere a unui
singur individ. Apare ca dezirabilă o abordare riguroasă a acestor probleme, ce include stilul de
lucru, modul de scriere a codului etc.
Nerespectarea cerințelor poate avea efecte serioase. Un sistem de livrare a insulinei
pentru diabetici poate provoca moartea pacientului dacă nu funcționează corect. Funcționarea
incorectă a unui sistem de control al unui satelit poate provoca pagube de milioane de dolari.
Un program este fiabil dacă funcționează și continuă să funcționeze fără întreruperi un
interval de timp. Această noțiune exprimă de fapt rezistența la condițiile de funcționare. Un
motor trebuie să fie fiabil pentru că trebuie să funcționeze o perioadă suficient de lungă de timp
fără întreruperi, chiar dacă nu totdeauna la performanțe optime.
Programul este sigur dacă funcționează corect, fără operații nedorite. Un automat bancar
trebuie să fie sigur, pentru a efectua tranzacțiile în mod absolut corect, chiar dacă funcționarea sa
poate fi întreruptă din când în când. Atunci când funcționează însă, trebuie să funcționeze foarte
bine.
Un program are o eroare („bug” în limba engleză) dacă nu se comportă corect. Se
presupune că dezvoltatorul știa ce ar fi trebuit să facă programul, iar comportamentul greșit nu
este intenționat.
Ingineria programării are ca scop obținerea de sisteme funcționale chiar și atunci când
teoriile și instrumentele disponibile nu oferă răspuns la toate provocările ce apar. Personalul
implicat face lucrurile să meargă, ținând seama de restricțiile organizației în care lucrează și de
constrângerile financiare care îi sunt impuse.
Problema fundamentală se referă la îndeplinirea cerințelor clientului. Aceasta trebuie
realizată nu punctual, nu în acest moment, ci într-un mod flexibil și pe termen lung. Ingineria
programării se ocupă cu toate etapele dezvoltării programelor, de la extragerea cerințelor
clientului până la întreținerea și retragerea din folosință a produsului livrat. Pe lângă cerințele
funcționale, clientul dorește, de obicei, ca produsul final să fie realizat cu costuri de producție cât
mai mici. De asemenea, se urmărește ca acesta să aibă performanțe cât mai bune (uneori direct
evaluabile), un cost de întreținere cât mai mic, să fie livrat la timp și să fie sigur.
Rezumând, atributele cheie ale unui produs software se referă la:
- posibilitatea de a putea fi întreținut: un produs cu un ciclu lung de viață este supus
deseori modificărilor, de aceea el trebuie foarte bine documentat;
- fiabilitate: produsul trebuie să se comporte după cerințele utilizatorului și să nu „cadă”
mai mult decât e prevăzut în specificațiile sale;
- eficiență: produsul nu trebuie să folosească în pierdere resursele sistemului ca memoria
sau ciclii procesor;
Preview document
Conținut arhivă zip
- IPCurs1.pdf
- IPCurs2.pdf
- IPCurs3.pdf
- IPCurs4.pdf