Sunteți pe pagina 1din 37

Ingineria programării

Curs, anul III Calculatoare


Instructori:
Prof.dr.ing. Mihai Mocanu Asist.ing.Paul-St. Popescu
E-mail: mocanu@software.ucv.ro
Ore curs: Marti 11:00-14:00
Ore consultatie (la cerere): Marți 14:00-15:00
Pagina curs: http://software.ucv.ro/~mocanu_mihai/
(pe intrarea corespunzătoare cursului, introduceţi user/pasw)
Domeniul IS: povestiri adevărate
O factură de $0.00 generată de calculatorul furnizorului,
efectele achitării ei asupra computerului băncii
Nov. 9, 1979. USA. Comandamentul Strategic al Forțelor
Aeriene (USAF) a fost alertat când rețeaua de calculatoare
WWMCCS (worldwide military command & control system)
a raportat că Uniunea Sovietică a lansat rachete spre
teritoriul US – un atac simulat confundat cu unul real
(vezi filmul: https://en.wikipedia.org/wiki/WarGames)
1991, în timpul primului război din Golf, o rachetă Scud a
penetrat scutul Patriot antirachetă, lângă Dhahran, Arabia
Saudită. 28 americani au fost uciși și 98 răniți, pentru că
software-ul rachetelor Patriot avea o eroare cumulativă de
timing, devenită prea mare în cele 100 ore de funcționare
Specificul domeniului
O construcție civilă se dărâmă mult mai rar ca un sistem
de operare: consecințele sunt în general mai grave
Când un bloc, un stadion sau un pod se dărâmă, trebuie
reproiectat și reconstruit; pentru un SO ajunge uneori un
reboot, dacă circumstanțele adverse care au provocat
crash-ul nu se repetă, iar consecințele (fișiere defecte
etc.) pot fi remediate dacă există backup
Un pod se pp. că este construit perfect dpdv ingineresc,
în timp ce un SO nu!
Această diferență este una fundamentală: o mare parte
din software-ul produs în 50+ ani nu a fost de fapt
construit în mod “ingineresc”
Obiectul cursului
Domeniul de studiu/ cercetare Software Engineering
(”Ingineria Programarii” ) s-a conturat la sf. anilor ‘60
1968: are loc prima conferință NATO (Germania) dedicată
“crizei software” determinate de “limitările tehnologice în
domeniul dezvoltarii programelor” – NU mai țin de hard!
 evident dupa apariția noii generații de calculatoare

bazate pe circuite integrate digitale (CID*)


 apare în discuție redefinirea conceptului de “software”,
dar si a modalitatilor de descriere a lui
A urmat definirea standard IEEE a domeniului IP:
 “Aplicarea unor abordari sistematice, disciplinate si

masurabile in dezvoltarea, operarea si intretinerea


software-ului - adica aplicarea metodelor ingineriei in
domeniul software si studiul unor asemenea metode”
“Programarea” sistemelor software
Cum putem sa ducem la bun sfarsit proiecte mari?
Programele mici (mai puţin de 5000 instrucţiuni)
pot fi bine scrise de o persoana
In mare parte, software-ul actual este dezvoltat
la scara mai larga – de echipe de programatori,
in cadrul unor proiecte
 Managementul proiectelor complexe implica totodata
depasirea unor dificultaţi organizaţionale

Aptitudinile ce permit dezvoltatorilor sa fie productivi in


ambele situaţii sunt importante si trebuie dezvoltate
Proiectarea software
Construcția unui sistem software este un proces asimilabil
unui proiect, gestionat prin aplicarea unor principii din
domeniul managementului de proiect
Proiectul este o sumă de activităţi sau acţiuni care
 conduc la realizarea unui scop comun

 necesită un consum important de resurse (materiale, umane,


financiare, echipamente, informaţii documentare şi timp)
Punerea în practică a unui proiect pp un moment iniţial şi
un moment final al proiectului, deci o durată de realizare
Momentul iniţial este considerat cel în care se ia decizia
de a se trece la conceperea unui proiect
Momentul final este cel în care se încheie ultima activitate
prevăzută de proiect
Poziționarea domeniului
Social and
Professional Database and
Context Information
Algorithms &
Data Architecture Retrieval
Structures
Operating
Systems

Artificial Computer Software


Methodology
Intelligence and Science &Software
Robotics
Engineering

Human-
Numerical and Computer
Symbolic Programming Interaction
Computation Languages ACM & IEEE
curriculum
recommendations
Fundamente necesare (prerequisite)
Programarea calculatoarelor
Tehnici de programare
Managementul proiectelor
Algoritmi şi structuri de date
Programarea orientată pe obiecte
Grafica pe calculator
Medii de programare vizuală

Obiectivele cursului
Introducerea metodelor avansate de dezvoltare
software - permit evitarea erorilor conceptuale !
Însuşirea cunoştinţelor tehnice necesare:
 Ştiinţa de a “produce” un sistem software de mare
calitate in cadrul unui buget (cost si timp) alocat, in
condiţii de complexitate mare si schimbări frecvente
 Abilitatea de a proiecta si implementa (sub)sisteme:
aproape orice proiect “mic” se dezvoltă pentru a
putea fi integrat ulterior intr-un proiect mai mare!
 Abilitatea de a reconstrui si analiza proiectarea unui
sistem software existent – inginerie “inversa”!
Zone de cunoștințe
Conform IEEE Computer Society “Software Engineering
Body of Knowledge” (http://www.swebok.org), putem
identifica 10 zone de cunoștințe cheie ale domeniului IP:
1. Cerințele 6. Managementul configurației
2. Proiectarea 7. Managementul proiectului
3. Construcția 8. Procesul
4. Testarea 9. Instrumente și metode
5. Mentenanța 10. Calitatea
Structura cursului (1)
Introducere, domeniul general al ingineriei software
 Ce este un produs, proces sau proiect software?
 Care este contextul dezvoltării software?
 Paradigme (structurate, modulare, orientate obiectual)
Cerinţele si specificarea cerințelor software
 Analiza cerinţelor, tipuri de modele şi specificări
 Ingineria cerințelor
Proiectarea sistemelor software
 Modalităţi de proiectare arhitecturală
 Proiectare OO şi prototipizare rapidă
Implementarea si integrarea sistemelor software
 Standarde de codificare
Structura cursului (2)
Verificarea si validarea sistemelor software
 Testarea software; tipuri de teste
Mentenanţa şi evoluţia sistemelor software
Managementul proiectelor software
 Procese de management; zone de cunoștințe
Procese de dezvoltare software (SDP)
 Faze: cerinţe – specificare, proiectare, implementare, integrare
 Modele generice: cascada, transformări formale ale specificaţiilor;
dezvoltări evolutive, iterative, incrementale; procese agile, XP
 Îmbunătăţirea SDP: procese “Rational”(e), CMM
Instrumente si metode de specificare si proiectare: UML
Instrumente/ metode de implementare si integrare: RAD
Referinţe bibliografice
Sommerville I., Software Engineering, 7th Ed., Pearson –
Addison Wesley, 2004 (10th Ed. 2015)
Guide to the Software Engineering Body of Knowledge
(SWEBOK), 2001
Schach S.R., Object-Oriented and Classical Software
Engineering , 6th Ed., McGraw Hill, 2006
Erich Gamma, Richard Helm, Ralph Johnson, John
Vlissides - Design Patterns: Elements of Reusable Object-
Oriented Software, Addison Wesley, 1996
Mocanu M., Managementul proiectelor (note de curs)
Alte informatii: pe pagina cursului de fata sau a cursului
de Managementul proiectelor software
Notarea
Se face in PV (pct. virtuale, max.100) repartizate astfel:
• 20% evaluare continua a activității de laborator (L)
• 20% teme practice periodice  proiect (P)
• 20% teste de evaluare (T)
• 40% examen scris final (E)
Trebuie să obţineţi minim 50% din punctaj - minim 10p la
fiecare dintre formele de evaluare pe parcursul
semestrului, pentru a putea lua examenul din prima
sesiune.
La examenul final, trebuie să obțineți minim 50% din
punctaj (20p) pentru a promova.
Nota reflectă curba lui Gauss aplicată punctajului final.
Introducere
Sumar
Previziuni
Complexitatea sistemelor software
Producţia de software
Domeniul ingineriei software
Proiecte şi procese software
Metodele formale ale ingineriei software
Instrumente CASE
Profesia de inginer software
Codul etic ACM/IEEE
“Previziuni”
1946: Goldstine şi von Neumann apreciau că 1000
de instrucţiuni reprezintă o limită superioară
rezonabilă pentru complexitatea problemelor de
calculator
1949: o revistă de popularizare a ştiinţei afirma că
în viitor ar putea exista calculatoare mai uşoare de
1,5 tone
1981: Bill Gates considera că nici un program pentru
calculatoare personale nu va necesita vreodată mai
mult de 640 KB de memorie RAM*
*“640K ought to be enough for anybody.”
Often attributed to Gates in 1981. Gates considered the
IBM PC's 640 kB program memory a significant
breakthrough over 8-bit systems that were typically limited
to 64kB, but he has denied making this remark. Also see
the 1989 and 1993 remarks above.
“I've said some stupid things and some wrong things, but
not that. No one involved in computers would ever say
that a certain amount of memory is enough for all time …
I keep bumping into that silly quotation attributed to me
that says 640K of memory is enough. There's never a
citation; the quotation just floats like a rumor, repeated
again and again.” Gates in “The Road Ahead” (1995) and
in an interview (19 January 1996), Career Opportunities in
Computing—and More. Bloomberg Business News
*"I have to say that in 1981, making those decisions, I felt
like I was providing enough freedom for 10 years. That is, a
move from 64k to 640k felt like something that would last a
great deal of time. Well, it didn't - it took about only six
years before people started to see that as a real problem."
B. Gates, 1989, on the history of the microcomputer industry
“I laid out memory so the bottom 640K was general purpose
RAM and the upper 384 I reserved for video and ROM, and
things like that. That is why they talk about the 640K limit. It
is actually a limit, not of the software, in any way, shape, or
form, it is the limit of the microprocessor. That generates 20-
bits addresses, that only can address a Mbyte of memory.
And, therefore, all the applications are tied to that limit. It
was ten times what we had before. But to my surprise, we
ran out of that address base for applications within—oh five
or six years people were complaining.” B. Gates, 1993,
interview at the Smithsonian Institute Museum
Complexitatea sistemelor
software actuale
Sistemul de rezervare a biletelor pentru compania
aeriană KLM conţinea, în anul 1992, 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 cca 3.700.000 linii
de cod
Programele scrise pentru naveta spaţială NASA au
cca 40 de milioane de linii de cod
Pentru realizarea sistemului de operare IBM OS/360
au fost necesari 5000 de ani-om
Ce înţelegem prin “software”?
Definiţie simpl(ist)ă: Software = Programe de
calculator (+ Date + Documentații asociate)
Definiția IEEE-STD-610:
“Software-ul e reprezentat ca un set complet, sau
individual de fiecare element din acest set, de:
programele de calculator, procedurile, datele de
test necesare livrării lor la client sau utilizator final,
fişierele de configurare şi documentaţia asociată”
Definiția Wikipedia:
“Software-ul este reprezentat de acea parte a sistemului
calculator diferita de hardware  (ce conține dispozitive
fizice necesare pentru memorare si execuție). El include
diverse programe - de sistem si de aplicație, firmware si
middleware -, componente (biblioteci) si documentații.”
Software-ul ca produs.
Producţia de software
Software-ul diferă de obiectele “materiale” prin uşurinţa:
 Copierii

 Modificării, etc.

Are un puternic caracter inovativ; cere multa creativitate


Producţia de software poate fi orientată către:
 Un client particular

 Un segment de piață general

Prin aceasta, produsele software pot fi:


 Generice – dezvoltate pentru a fi vândute unor

categorii de clienți destul de largi/ diverse


 Customizate – dezvoltate pentru o singura categorie

de clienți conform cu specificațiile


Costurile produselor software
Pentru produsele software generice:
 60%: costuri de dezvoltare
 40%: costuri de testare, menţinere si evoluţie
Pentru produsele software customizate, costurile
de evoluţie le depăşesc pe cele de dezvoltare
Costurile variază după:
 Tipul (categoria) sistemului software
 Cerinţele asupra sistemului: performanţa, siguranţa
Distribuţia costurilor depinde de asemenea puternic
de modelul de dezvoltare utilizat
Ponderea costurilor dupa procesul
de obtinere a software-ului
Categorii de software
Domeniul ingineriei software
Este legat de toate aspectele producerii de software
 Prima definiţie (F. L. Bauer, 1968):
Ingineria software are ca obiect 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
 Astăzi:
Ingineria software înseamnă construcţia de software de calitate
in limite de buget si timp, in contextul schimbărilor constante
Definiția Wikipedia:
 “Ingineria software este o aplicare a unor abordări
sistematice, disciplinate, cuantificabile, a dezvoltării,
operării si menținerii unui software, si un studiu al acestor
abordări. Altfel spus, este o aplicare a metodelor ingineriei
in domeniul software.”
“Software Engineering” vs “Computer Sc.”
Computer science (CS):
 e interesată de aspectele teoretice/ fundamentale
Actualmente, “teoriile” CS sunt insuficiente pentru
a fundamenta complet domeniul SEng
Ingineria Software (SEng):
 este interesată de aspectele practice in dezvoltarea
si distribuția de software “util”
 aplică o abordare sistematică si utilizează tehnici si
instrumente adecvate:
 Problemei de soluţionat
 Constrângerilor de dezvoltare
 Resurselor disponibile
“Software Engineering” vs. “System Eng.”
Ingineria de sistem: legata de toate aspectele
dezvoltării/ evoluției sistemelor computer-based,
include aspecte hardware, software si ingineria
de proces
Ingineria software: o parte a acestui domeniu
Ingineria de sistem este o disciplina mult mai
veche faţă de SEng; insa in ultimii ani ponderea
software-ului in sisteme a crescut (vezi fig. A380)
Inginerii software, ca si inginerii de sistem, sunt
tot mai mult implicați in specificarea, proiectarea
arhitecturala, integrarea si distribuția sistemelor
Airbus A380 Cockpit
Profesia de inginer software
Un inginer software este persoana ce aplica principiile
ingineriei software in dezvoltarea sistemelor software
Profesia implică responsabilităţi mai largi, nu doar simpla
aplicare a abilităţilor tehnice
Un “bun” inginer software are responsabilităţi atât faţă
de profesie, cât si faţă de societate
Câştigarea respectului ca profesionist implica onestitate
si responsabilitate etica
“Etic” înseamnă mai mult decât simpla respectare a legii
Societăţile profesionale (IEEE, ACM) publica si
actualizează “coduri de conduita” ce stabilesc
standardele de comportament pentru membrii lor
Scurt istoric (cf. Wikipedia)
Pana in 1995, “soft-iștii” işi spuneau programatori sau
dezvoltatori; termenul de programator a fost folosit însă
in sens peiorativ pentru a referi o persoana cu educație
precară si fără capacitatea de a scrie software de calitate
Ca răspuns, au apărut denumiri noi ce înglobau termeni
ca senior, manager, inginer software
In 2004, U.S. Bureau of Labor Statistics număra 760,840
ingineri software, dar peste 1,4 mil. practicieni angajați
in alte zone inginerești
Datorita noutății domeniului, educația formala in SEng
este considerata parte a curriculei de calculatoare (C.Sc.)
si incă exista confuzii majore si intre cele doua profesii,
nu doar intre domenii
Responsabilităţi profesionale/ etice
Confidenţialitate
 Atât fata de angajaţi/ angajatori cat si fata de clienţi
 Indiferent daca s-a semnat sau nu un acord de confidenţialitate
Competenta
 Nivelul de competenta nu trebuie “mimat”
Respectarea drepturilor intelectuale
 Reglementate de legi locale si internaţionale
 Proprietatea intelectuala a angajaţilor/ clienţilor trebuie protejata
Utilizarea greşita a calculatorului
 Poate fi triviala (ex. jocuri pe calculatorul de la serviciu) sau
distructiva (diseminarea de viruşi)
 Abilităţile tehnice nu trebuie folosite pentru a abuza de
computerele altora
Codul Etic ACM/IEEE
Cele 2 importante societăţi profesionale au cooperat
in producerea acestui cod de practica etica
Membrii acestor organizaţii semnează la înscriere
acest cod, dar el este un ghid si pentru ne-membri
Codul conţine 8 (opt) principii importante privind
comportamentul si deciziile inginerilor software,
incl. “tehnici” (analişti, programatori, proiectanţi
etc.), manageri, educatori, dar si studenţi
Codul etic - principii
1. PUBLIC
 Inginerul software trebuie sa acţioneze conform cu
interesul public.
2. CLIENT si ANGAJATOR
 Inginerul software trebuie sa acţioneze in maniera
care este in cel mai bun interes atât al clientului cat si
angajatorului sau, rămânând consistentă cu interesul
public.
3. PRODUS
 Inginerul software trebuie sa se asigure ca atât
produsul software de baza, cat si modificările sale
ulterioare respecta standardele profesionale la cel
mai înalt nivel posibil.
Codul etic - principii
4. JUDECATA
 Inginerul software trebuie sa-si păstreze integritatea
si independenta in judecata profesionala.
5. MANAGEMENT
 Inginerii software ajunşi in poziţii de manageri si
leaderi trebuie sa promoveze o atitudine etica asupra
managementului dezvoltării si menţinerii software
6. PROFESIE
 Inginerul software trebuie sa-si dezvolte reputaţia si
integritatea profesionala, in mod consistent cu
interesul public.
Codul etic - principii
7. COLEGI
 Inginerul software trebuie sa acţioneze intr-
o maniera corecta si sa-si sprijine colegii.
8. SINE
 Inginerul software trebuie sa se formeze
continuu si sa promoveze o abordare etica
in practica profesiei.
Dileme etice
Dezacordul de principiu cu politicile de
management
Angajatorul se comporta intr-o maniera ne-
etica si distribuie un sistem software “safety-
critical” fără a încheia testarea sa
Participarea la dezvoltarea de sisteme de
armament, mai ales sisteme nucleare

S-ar putea să vă placă și