1. Ingineria programării
1. Introducere în
ingineria programării
Florin Leon
Universitatea Tehnică „Gheorghe Asachi” din Iași
Facultatea de Automatică și Calculatoare
http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
2. 2
Educația este când citești manualul.
Experiența este ce capeți dacă nu-l citești.
Pete Seeger
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
3. Introducere în
ingineria programării
1. Introducere
2. Fazele procesului de dezvoltare
3. Istoria programării
4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
4. Introducere în
ingineria programării
1. Introducere
2. Fazele procesului de dezvoltare
3. Istoria programării
4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
5. 5
Software academic și industrial
Exemplu: o problemă de 10.000 LOC (linii de cod)
Student: 2 luni (5000 LOC / lună)
Firmă: 1000 LOC/lună, 10 luni-om
Software academic
Versiune demo funcțională
Hobby: nu necesită documentație și interfață complexă cu
utilizatorul, defectele sunt corectate când apar
Software industrial
Plătit de client
Influențează mediul de afaceri
Necesită o abordare inginerească, o disciplină de lucru
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
6. 6
Software industrial
Este construit pentru a rezolva unele probleme din
organizația clientului
Funcționarea incorectă poate provoca pierderi financiare și chiar
pierderea de vieți omenești
Trebuie să aibă calitate foarte bună
Testare riguroasă înainte de livrare (30%-50% din efortul total)
Dezvoltarea este împărțită pe faze pentru a gestiona mai bine
complexitatea (necesită documentație)
Are cerințe de recuperare a datelor, toleranță la defecte,
portabilitate
Acestea conduc la creșterea dimensiunilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
7. 7
Regula lui Brooks
Software-ul industrial în comparație cu
software-ul academic
Productivitate: 1 / 5
Dimensiune dublă
Software-ul industrial necesită de 10 ori
mai mult efort decât software-ul academic
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8. 8
Ingineria programării
Ingineria programării reprezintă aplicarea
unei abordări sistematice, disciplinate și
cuantificabile pentru dezvoltarea, operarea și
întreținerea produselor software
(Glosarul terminologiei ingineriei programării, IEEE,
Institute of Electrical and Electronics Engineers, 1990)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
9. 9
Software
Software-ul este o colecție de programe de
calculator, proceduri, reguli, împreună cu
documentația și datele asociate
(IEEE)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
10. 10
Scopul ingineriei programării
Utilizarea unor metodologii pentru dezvoltarea de software
Rezultate repetabile
Apropiere de știință
Îndepărtarea de metodele ad-hoc cu rezultate imprevizibile
Scopul dezvoltării de
produse software este
satisfacerea nevoilor
clienților sau utilizatorilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
11. 11
Costul produselor software
Costul produselor software depinde în primul rând de
efortul oamenilor
Productivitatea este frecvent măsurată în linii de cod
(LOC) / lună-om
Productivitatea medie pentru o aplicație nouă este de
300-1000 LOC / lună-om
8000 $ / lună 8-25 $ / LOC
Un program de dimensiune medie de 50.000 LOC poate costa
aproximativ 1.000.000 $
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
12. 12
Software și hardware
Un produs de un milion de dolari poate fi instalat pe un
calculator de câteva sute de dolari
Software-ul este în prezent componenta principală a
unui sistem informatic
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
13. 13
Întârzieri și instabilitate
În 1988, un studiu a arătat că din 600 de firme, 35%
aveau proiecte informatice scăpate de sub control din
punct de vedere al bugetului și timpului de execuție
Raportul Standish Group privind finalizarea proiectelor
IT în SUA
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
14. 14
Lipsa de fiabilitate
Software care:
Nu face ce trebuie
Face ce nu trebuie
În sisteme complexe (incluzând componente electrice,
mecanice, hidraulice), de cele mai multe ori software-ul
este problema cea mai mare
Defectele software-ului nu se datorează uzurii, ci erorilor
de proiectare și implementare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
15. 15
Defecte „celebre”
28 iulie 1962 – distrugerea sondei spațiale Mariner I:
virgulă în loc de punct în limbajul Fortran
1982 – explozia conductei sovietice de gaz
trans-siberiene
1983 – defect în sistemul sovietic de avertizare nucleară
1985-1987 – acceleratorul medical Therac-25:
“race condition”, 5 persoane și-au pierdut viața
1988-1996 – generatorul de numere aleatorii al
protocolului Kerberos
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
16. 16
Defecte „celebre”
15 ianuarie 1990 – căderea rețelei de telefonie AT&T
25 februarie 1991 – defectul rachetei Patriot în războiul
din Golf
15 octombrie 1989 – căderea sistemului de dirijare a
traficului de la aeroportul Dallas - Fort Worth
4 iunie 1996 – explozia rachetei Arianne 5: excepție
netratată pentru “overflow”
Noiembrie 2000 – sistemul de radioterapie în Panama
City: 17 pacienți și-au pierdut viața din cauza expunerii la
radiații
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
17. 17
Defecte „celebre”
2011 – fondul de investiții AXA Rosenburg Group a fost
amendat cu 25.000.000 $ și obligat să plătească
despăgubiri investitorilor pentru ascunderea unui defect
software care a provocat pierderi de 217.000.000 $
clienților
2011 – 22 de persoane arestate pe nedrept din cauza
unui defect în sistemul informatic al tribunalelor din New
South Wales, Australia
12 decembrie 2014 – sistemele de control al traficului
aerian din sudul Marii Britanii s-au oprit pentru 45 de
minute, cauza fiind o singură linie de cod din anii ’90
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
18. 18
Reprogramarea
Când cerințele nu sunt specificate complet,
schimbarea lor conduce la refacerea tuturor
fazelor ulterioare
Pentru proiecte cu durată lungă, cerințele
clientului se modifică
Reprogramarea consumă 30% -40% din efortul
total de dezvoltare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
19. 19
Întreținerea
Întreținere corectivă: eliminarea erorilor
Întreținere adaptivă: adaptarea la alt mediu
Întreținere perfectivă: includerea de funcționalități
suplimentare
Legea evoluției software-ului: software-ul schimbă mediul,
apoi trebuie să se adapteze la noul mediu
Întreținerea costă de obicei mai mult decât dezvoltarea unei
aplicații
Presupune înțelegerea codului, modificarea, testarea de
regresiune
În timpul dezvoltării, întreținerea este deseori neglijată
Raport de cost 60:40 – 80:20
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
20. 20
Scala proiectelor
Proiectele complexe necesită metode diferite de
dezvoltare față de proiectele de mici dimensiuni
Presupun formalizarea procedurilor inginerești și a
managementului de proiect
Proiecte:
Mici: < 10.000 LOC
Medii: 10.000 – 100.000 LOC
Mari: 100.000 – 1.000.000 LOC
Foarte mari: > 1.000.000 LOC
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
21. 21
Scala proiectelor
Previziuni:
1946: Goldstein, von Neumann (EDVAC, primul calculator binar cu
program stocat) – max. 1000 instrucțiuni
1981: Bill Gates (la apariția IBM PC) – max. 640 KB RAM
Realitatea:
1966: sistemul de operare IBM
OS 360, 5000 de ani-om
1977: naveta spațială NASA,
40.000.000 LOC
1983: System V versiunea 4.0
Unix, 3.700.000 LOC
1992: sistemul de rezervare a
biletelor KLM, 2.000.000 LOC
în limbaj de asamblare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
22. 22
Triunghiul managementului
de proiect
Managementul unui proiect este condus de trei factori majori: costul, timpul și
domeniul de aplicare (engl. “scope”, întinderea, anvergura)
Costul este o măsură a resurselor utilizate pentru sistem
În cazul software-ului, este dominat de costul de personal
Costul poate fi estimat ca efort (luni-om) * cost mediu (lunar)
Include costul suplimentar pentru hardware și instrumentele de dezvoltare
Timpul
Mediul de afaceri dorește reducerea timpului de livrare
Creșterea productivității (LOC / lună-om) determină scăderea timpului și a costului
Domeniul este dat de specificații
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
23. 23
Calitatea
Calitatea presupune, conform standardului internațional al calității produselor
software ISO/IEC 9126:
Funcționalitate (engl. “functionality”)
Asigurarea funcțiilor care satisfac nevoile exprimate explicit sau implicite
Include securitatea: persoanele neautorizate să nu aibă acces iar celor autorizate să nu le
fie refuzat accesul
Fiabilitate (engl. “reliability”)
Menținerea unui nivel specificat de performanță
Utilizabilitate (engl. “usability”)
Capacitatea de a fi înțeles, învățat și utilizat
Eficiență (engl. “efficiency”)
Asigurarea unor performanțe adecvate relativ la volumul de resurse utilizate
Mentenabilitate (engl. “maintainability”)
Capacitatea de a fi modificat pentru corecții, îmbunătățiri sau adaptări
Portabilitate (engl. “portability”)
Capacitatea de a fi adaptat pentru medii diferite exclusiv pe baza mijloacelor existente în
produs
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
24. 24
Calitatea
Importanța fiecărei dimensiuni de calitate depinde de
natura proiectului
Sistem critic: fiabilitate
Joc: utilizabilitate
Înainte de dezvoltare, trebuie specificat obiectivul
principal de calitate
Fiabilitatea este considerată în general cea mai
importantă
Se măsoară în defecte / KLOC
Bunele practici curente: mai puțin de 1 defect / KLOC
Definirea unui defect depinde de proiect sau de standardele
organizației dezvoltatoare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
25. 25
Schimbarea
Schimbările din mediul comercial sunt rapide și
frecvente, implică schimbarea produselor
software aferente
Așteptările privind schimbarea sunt mai mari în
cazul software-ului pentru că acesta nu are
proprietăți „fizice”
Dezvoltarea software-ului trebuie să fie adaptată
schimbărilor continue
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
26. 26
Consecvență și repetabilitate
Succesele trebuie să fie repetabile
Calitatea și productivitatea trebuie să fie
consecvente
Acest lucru permite unei organizații:
Să prevadă cu acuratețe rezultatele proiectelor
Să își îmbunătățească procesele de dezvoltare
Se impune standardizarea unor proceduri și
folosirea unor metodologii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
27. Introducere în
ingineria programării
1. Introducere
2. Fazele procesului de dezvoltare
3. Istoria programării
4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
28. 28
Fazele dezvoltării
Dezvoltarea pe faze împarte problema în mai multe aspecte care
pot fi tratate separat
Costul de dezvoltare este mai mic decât în cazul în care problema
ar fi abordată în întregime
Permite verificarea calității la intervale stabilite, de exemplu după
fiecare fază, în loc să se aștepte până când produsul este finalizat
Există multe metodologii de dezvoltare iar organizațiile au de multe
ori propriile versiuni
În general, rezolvarea oricărei probleme constă în:
Analiza problemei și specificarea cerințelor
Proiectare
Implementare (codarea, programarea propriu-zisă)
Testare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
29. 29
Analiza
Presupune înțelegerea problemei (CE se dorește de
la sistem)
Scopul este documentarea cerințelor
Au loc două activități majore:
Înțelegerea problemei (analiza)
Pentru un sistem nou, este dificilă și presupune creativitate
Specificarea cerințelor
Cerințele funcționale și de performanță, constrângerile
Manualul de utilizare preliminar: interfețele principale cu
utilizatorul
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
30. 30
Proiectarea
Scopul este planificarea unei soluții pentru
problema specificată (CUM se va rezolva)
Tipuri de proiectare:
Proiectarea arhitecturală
Componente sau subsisteme, interacțiunile acestora
Proiectarea de nivel înalt
Specificarea modulelor, structurilor de date, formatelor
Şabloane de proiectare
Proiectarea detaliată
Logica internă a modulelor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
31. 31
Implementarea
Traducerea proiectării într-un anumit limbaj de
programare
Detaliile care țin de limbaj nu sunt specificate în faza de
proiectare
Scopul trebuie să fie reducerea timpului de testare și
întreținere, prin simplitate și claritate
Programele trebuie să fie:
Ușor de citit și de înțeles
Ușor de modificat și de extins
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
32. 32
Testarea
Este principala măsură de control al calității
Presupune detectarea defectelor software-ului
Din toate fazele, nu numai din faza de implementare
Tipuri de testare:
Testarea unităților: a modulelor individuale
Testarea integrării: a interconectării modulelor
Testarea sistemului: a cerințelor sistemului
Testarea de recepție (engl. “acceptance testing”): operarea
pe datele reale ale clientului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
33. 33
Testarea
Este o activitate critică și de durată
Deseori necesită un plan de testare
Rezultate:
Raportul de test
Descrie cazurile de test executate și rezultatele obținute
Raportul de erori
Descrie erorile întâlnite
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
34. Introducere în
ingineria programării
1. Introducere
2. Fazele procesului de dezvoltare
3. Istoria programării
4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
35. 35
Zuse Z3 (Germania, 1941)
Primul calculator funcțional controlat prin program
Construit din relee telefonice mecanice
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
36. Plankalkül
Primul limbaj de programare (exclusiv teoretic)
36
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
37. 37
Colossus (Marea Britanie, 1944)
Mașini folosite pentru a decripta mesaje secrete
de nivel înalt ale armatei germane
Construite din lămpi electronice vidate
Au rămas secrete până în 1975
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
38. 38
ENIAC (SUA, 1945)
Primul calculator electronic de uz general, avea 30 t
Proiectat pentru a calcula tabele balistice pentru armata SUA
Programarea se realiza prin manipularea comutatoarelor și
cablurilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
39. 39
EDVAC (SUA, 1949)
Binar, nu zecimal ca ENIAC
Raportul lui John von Neumann asupra lui EDVAC conține
descrierea arhitecturii von Neumann
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
40. 40
EDSAC (Marea Britanie, 1949)
Unul din primele calculatoare cu program stocat
Instrucțiuni procesor și bibliotecă de subrutine
A descoperit cel mai mare număr prim la vremea respectivă
A rulat primul joc video, OXO (X și 0)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
41. 41
Mark I (Marea Britanie, 1949)
Unul din primele calculatoare cu program stocat
Prima utilizare a registrelor index
Primul program: test al numerelor prime Mersenne (2n - 1)
Mark II – “bug” (o molie care a stricat un releu)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
42. Perceptronul Mark I
În 1960, Frank Rosenblatt a demonstrat algoritmul de
învățare al perceptronului (o rețea neuronală simplă)
cu ajutorul calculatorului Mark I, pentru o problemă de
clasificare de imagini
42
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
43. 43
LEO (Marea Britanie, 1951)
Prima aplicație comercială a unui
calculator: Joseph Lyons and
Co., firmă de catering și
producție alimentară
Utilizat pentru state de plată,
inventar, instrucțiuni de
asamblare, planificarea livrărilor,
facturi etc.
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
44. 44
UNIVAC (SUA, 1951)
Construit de inventatorii ENIAC, Eckert și Mauchly
Destinat în principal mediului comercial
Prima vânzare: Biroul de Recensământ al SUA
A prezis la CBS victoria clară a lui Eisenhower din 1952
Costa până la 1.500.000 $ și avea 13 t
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
45. 45
IBM 650 (SUA, 1953)
Primul calculator produs în serie
2000 de sisteme produse între 1954 - 1962
Putea relua execuția în cazul unei erori și nu
necesita restartarea manuală
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
46. 46
Fortran (1954)
Dezvoltat de IBM
Destinat calculelor numerice și științifice
Încă popular în calculul de mare performanță
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
47. 47
Lisp (1958)
Sintaxă specifică bazată pe paranteze
Limbaj favorit pentru aplicații de inteligență artificială
Poate manipula codul sursă ca pe o structură de date
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
48. 48
Algol (1958)
Primul limbaj care a utilizat blocuri “begin - end”
A devenit un standard pentru descrierea algoritmilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
49. 49
Cobol (1959)
Destinat aplicațiilor comerciale, financiare și
administrative
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
50. 50
Tranzistorul
Lilienfeld, 1926
Bardeen, Brattain și Shockley,
Bell Labs, 1947, premiul Nobel
pentru fizică, 1956
Un tranzistor avea 1/50 din
dimensiunea și 1/100 din
greutatea unei lămpi
Inițial, industria de electronice
nu a fost interesată
Tirania numerelor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
51. 51
Circuitele integrate
Aveau posibilitatea de a fi produse în serie
La început un circuit integrat costa 1000 de
dolari și avea o rată de defectare de 90%
Cursa spațială
Sputnik 1 (1957)
Iuri Gagarin (1961)
Pentagonul și NASA erau dispuse să
investească în tehnologia circuitelor
integrate
Modulul lunar Apollo 11 avea cel mai
puternic calculator din lume în 1969
10 ani mai târziu, un circuit integrat costa
1 cent și era de 1000 de ori mai puternic
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
52. 52
Realizări
Scăderea în dimensiuni: „a treia generație” de
calculatoare, de exemplu IBM System/360 (1965), 300 kg
Legea lui Moore (1965, 1975): complexitatea
hardware-ului se dublează la fiecare doi ani
ARPANET (1969)
Avea ca scop conectarea computerelor mainframe de la diferite
universități din SUA
Stă la baza internetului de astăzi
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
53. 53
Simula (Norvegia, 1962)
Primul limbaj orientat pe
obiecte
Destinat simulărilor
Avea clase, obiecte,
metode virtuale, garbage
collector
Sintaxă bazată pe Algol
A influențat puternic
limbajele orientate pe
obiecte ulterioare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
54. 54
Basic (1964)
Destinat programării de
către nespecialiști
Primul produs vândut de
Microsoft, Altair Basic
(1975) și primul caz major
de piraterie software
Popular în anii ’80 pentru
“home computers”, HC
Utilizat și astăzi:
Microsoft Visual Basic
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
55. Industria software
Termenul de “software” a fost propus în 1958 de
statisticianul John Tukey
Până în anii ’60, producătorii de calculatoare vindeau
software-ul împreună cu hardware-ul, inclus în preț
(sisteme de operare, compilatoare, alte utilitare)
De la 1 ianuarie 1970, IBM a început să vândă separat
software-ul (engl. “unbundle”)
Aplicații de succes: limbaje de simulare, compilatoare,
transformarea codului sursă în schemă logică, manager
de fișiere și generator de rapoarte
55
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
56. 56
Criza software
Programarea era foarte dificilă
Puterea hardware-ului creștea continuu, la fel și așteptările
la adresa software-ului, care nu putea ține pasul
Un raport din anii ’60 arăta că:
2% din sistemele software contractate au funcționat de la
predare
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
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
57. 57
Conferințele NATO
1968: Conferința Comitetului științific al NATO cu tema
„Ingineria programării”, Garmisch, Germania
Aici s-a propus pentru prima dată termenul de „Ingineria
programării” (engl. “Software Engineering”) de către Friedrich L.
Bauer
1969: Conferința NATO cu tema „Tehnici ale ingineriei
programării”, Roma
Bauer (1972): Ingineria programării reprezintă stabilirea
și utilizarea unor principii inginerești solide pentru a
obține în mod economic software fiabil și care lucrează
eficient pe mașini reale.
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
58. 58
XEROX PARC (1970)
Incubatorul multor elemente ale calculatoarelor
moderne:
Mouse-ul
Interfața grafică cu utilizatorul cu ferestre și icoane
Editor de text de tip “What You See Is What You Get”
Ethernet
Mediul de dezvoltare integrat Smalltalk (POO)
Imprimanta laser
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
59. 59
Unix (1970)
Thomson, Richie, McIlroy – Bell Labs
1973: rescris în C
A condus la creșterea portabilității
Obiective:
Portabil, multi-tasking, multi-user
Caracteristici:
Stocarea datelor ca text
Sistem de fișiere ierarhic
Tratarea dispozitivelor ca fișiere
Interpretorul liniei de comandă ce utilizează “pipelines”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
60. 60
Software vs. hardware
1973: Barry Boehm prezice că software-ul
va depăși hardware-ul din punct de vedere
al costurilor
Raportul său către DARPA a inițiat o schimbare
de direcție în domeniu
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
61. 61
Microprocesorul.
Alte calculatoare
Intel 8080 (1974): primul
microprocesor, a patra
generație de calculatoare
Altair 8800 (1975): scânteia
care a dus la revoluția
calculatoarelor personale
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
62. 62
Alte calculatoare
IBM 5100 (1975): primul
„Calculator Portabil”,
incluzând tastatură,
ecran, dispozitiv de
stocare a datelor pe
bandă magnetică
Apple (1976): kit de
calculator personal, primul
floppy disk de 5.25" și
primul program foaie de
calcul, VisiCalc
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
63. 63
Limbaje de programare
Pascal (1970): Niklaus Wirth
Destinat inițial predării programării structurate
Recursivitate
C (1972): Dennis Ritchie la AT&T Bell Labs
Destinat inițial scrierii sistemului de operare Unix
SQL (1974): D. D. Chamberlin, R. F. Boyce
Destinat manipulării datelor din sistemul de baze
de date relaționale IBM System R
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
64. 64
Limbaje de programare
Smalltalk (1972): Xerox PARC
Scop educațional, „simbioza om-calculator”
Orientat pe obiecte, tipuri dinamice, reflection
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
65. 65
Limbaje de programare
Prolog (1972): Alain Colmerauer, Marsilia
Limbaj declarativ, cu rădăcini în logica formală
Destinat inițial prelucrării limbajului natural, utilizat apoi pentru
demonstrarea de teoreme, sisteme expert etc.
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
66. 66
Industria software în anii ’70
Atari (1972)
Jocuri video: Pong, Pond Double,
Space Race, Gotcha!
Microsoft (1975)
Altair Basic
Oracle (1977)
Prima versiune intitulată “version 2”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
67. 67
Calculatoarele personale
IBM PC (1981) Apple Macintosh (1984)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
68. CTRL + ALT + DEL
IBM PC, repornirea sistemului de la tastatură
1 tastă, apoi 2 taste – erau des apăsate din greșeală, se pierdeau lucrările nesalvate
Apoi s-au ales 3 taste, CTRL + ALT + ESC, dar tot puteau fi apăsate din greșeală
În final, s-a ajuns la combinația CTRL + ALT + DEL
68
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
70. Clone Spectrum
Fabricate în România:
Felix HC
HC 85, HC 88, HC 90, HC 91, HC91+ (HC128),
HC 2000, HC386
Cobra
CIP-03
JET
TimS
70
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
71. 71
Anii ’80
MS-DOS (1981)
Microsoft Windows (1985)
MS Office (Word, 1984)
World Wide Web (Tim
Berners-Lee, CERN, 1989)
C++ (Bjarne Stroustrup, 1983)
Perl (1987)
Microsoft Windows 1.0 MS Word pentru MAC OS X
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
73. 73
Rezultate interesante
„Nu există gloanțe de argint” (Brooks, 1986)
Complexitatea esențială
Complexitatea accidentală
Regula 80-20 (Principiul Pareto)
80% din efecte sunt determinate de 20% din cauze
80% din utilizatori folosesc în general 20% din
trăsăturile unui produs software
80% din erorile Windows și Office erau cauzate de
20% din totalul defectelor, iar 50% din erori de 1% din
defecte (2002)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
74. 74
Anii ’90
Sisteme de operare
Microsoft Windows
Linux (1991)
Browsere
Mosaic (1993)
Netscape Navigator (1994)
MS Internet Explorer (1995)
Servicii de webmail
Hotmail (1996)
Yahoo! Mail (1997)
Motoare de căutare
Google (1998)
Limbaje de programare
Python (1991)
PHP (1995)
Java (1995)
JavaScript (1996)
Windows 3.1
Mosaic
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
75. 75
Mileniul 3
Sisteme de operare
Windows XP (2001), Windows 7 (2009), Windows 8 (2012),
Windows 10 (2015)
Browsere
Mozilla Firefox (2003)
Google Chrome (2008)
Servicii de webmail
Gmail / Google Mail (2004)
Motoare de căutare
Microsoft Bing (2009)
Limbaje de programare
C# 1.0 (2002), C# 5.0 (2012), C# 6.0 (2015)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
76. 76
Cote de piață
Browsere (ian. 2017) http://gs.statcounter.com
Chrome: 52% (RO: 64%)
Safari: 15% (RO: 7%)
UC Browser (Alibaba, China): 8%
Firefox: 7% (RO: 12%)
Motoare de căutare (ian. 2017) http://gs.statcounter.com
Google: 93% (RO: 98%)
Bing: 3% (RO: 1%)
Servicii de webmail
Gmail: 1 miliard de utilizatori activi pe lună în feb. 2016
Yahoo! Mail: 1 miliard de utilizatori activi pe lună în feb. 2016
Outlook.com: 400 de milioane de utilizatori activi pe lună în iul. 2016
54% din email-uri sunt deschise de pe echipamente mobile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
77. 77
Rețele sociale
Mai mult de 100 de site-uri
Printre cele mai utilizate: http://expandedramblings.com
Facebook (fondat în 2004)
1,86 miliarde vizitatori activi pe lună în feb. 2017
LinkedIn (fondat în 2003)
467 milioane vizitatori activi pe lună în oct. 2016
Twitter (fondat în 2006)
317 milioane vizitatori activi pe lună în oct. 2016
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
78. 78
Concluzii
Ingineria programării este o colecție de metode și
recomandări pentru dezvoltarea eficientă de programe
de mari dimensiuni
Software-ul nu este doar o mulțime de programe, ci
include documentația și datele asociate
Fazele fundamentale ale dezvoltării programelor sunt:
analiza, proiectarea, implementarea și testarea
Istoria sistemelor de calcul și a programării se întinde
pe aproximativ 70 de ani iar dezvoltarea prezentă a
domeniului este fără precedent
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm