Documente Academic
Documente Profesional
Documente Cultură
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.