SlideShare a Scribd company logo
1 of 90
Download to read offline
Ingineria programării
11. Faza de implementare
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
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
4
Faza de implementare
 Implementarea este faza în care este produs codul
corespunzător proiectului
 Se îndeplinesc restricțiile de resurse, acuratețe și performanță
indicate de specificații
 Sistemul este construit ori plecând de la zero, ori prin
asamblarea unor componente pre-existente
 De cele mai multe ori proiectarea nu va realiza o
transformare de 1 la 1 către implementare
 Este necesar un oarecare efort pentru a scrie codul
corespunzător, iar aceasta este o sursă de erori
 Erorile de proiectare determină pierderea timpului
programatorilor în a rezolva probleme puse greșit
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
5
Erori
 Implementarea însăși este predispusă către
erori, fiind un proces creator uman
 Un programator are 50% șanse să descopere
o eroare într-un interval de 5-10 linii de cod și
numai 20% șanse să o descopere într-un
domeniu de 40-50 de linii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
6
Documente
 Documentele de bază produse în această
fază sunt:
 Codul sursă comentat, respectând anumite
convenții
 Diagrame ale produsului software
 Manualul de utilizare
 Planul pentru coordonarea configurației
(versionare)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
7
Clase de limbaje
 Din punct de vedere al semanticii, sunt larg
recunoscute următoarele clase mari de limbaje:
 Limbaje imperative (procedurale): cum se execută
prelucrările
 Fortran, Basic, Pascal, C, C++, Java, C#
 Limbaje declarative: ce trebuie realizat
 Subparadigma funcțională: Lisp (de exemplu, dialectele Scheme,
Common Lisp), F# (Ten things F# can do, and C# can’t,
https://www.youtube.com/watch?v=hMjv8m--W28)
 Subparadigma logică: Prolog
 Reguli și potrivirea modelelor: Clips, Jess, Drools
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8
Programarea: știință sau artă?
 Artă
 Construirea unor produse care pot acționa asupra
simțămintelor
 Tradițional, orice talent sau măiestrie (gr. τέχνη)
 Ştiință
 Adunarea de probe prin observații și experimente
măsurabile și repetabile
 Formularea de ipoteze și testarea acestora
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
9
Programarea: știință sau artă?
Landon Curt Noll & Larry Bassel
International Obfuscated C Code Contest, 1988
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
10
Programarea: știință sau artă?
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
11
Programarea: știință sau artă?
 Competiție de scripturi JavaScript de 1 KB
(http://js1k.com)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
12
Programarea: știință sau artă?
JS1k: The JavaScript code
golfing competition, 2010
Óscar Toledo G.: nanochess
http://nanochess.org
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
13
Programarea: știință sau artă?
 Rgba and TBC: Elevated
 4 KB exe, Breakpoint 2009, http://www.rgba.org
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
15
Scopul implementării
 Implementarea afectează atât testarea cât și
întreținerea
 Efortul de testare este 30-50% din efortul de
dezvoltare
 Rata de efort întreținere-dezvoltare: 60:40 - 80:20
 Scopul nu este diminuarea costurilor de
implementare, ci a costurilor fazelor ulterioare
 Programele nu trebuie să fie ușor de scris,
ci ușor de citit și înțeles
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
16
Experimentul Weinberg
 Când programatorii primesc un obiectiv clar, de
obicei îl îndeplinesc
 Îndeplinirea unui obiectiv afectează alte obiective
 Compromisuri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
17
Implementarea incrementală
 Simplifică testarea și depanarea
(engl. “debugging”)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
19
Refactorizarea
 engl. “refactoring”
 Schimbările succesive conduc la o structură suboptimă a codului
 Crește complexitatea
 Scade claritatea
 Refactorizarea este o schimbare în structura internă a unui
produs software cu scopul de a-l face mai ușor de înțeles și de
modificat fără a-i schimba comportamentul observabil
 Este o formă de proiectare incrementală
 Rezultate:
 Scăderea cuplării
 Creșterea coeziunii
 Respectarea principiului deschis-închis
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
20
Refactorizarea
 Schimbările pot introduce noi defecte
 Refactorizarea trebuie efectuată în pași mici
 Trebuie să existe teste care să indice locurile unde apar erori
 Refactorizarea nu se referă la introducerea de noi
funcționalități
 Cele două activități sunt diferite și trebuie separate
 Refactorizarea îmbunătățește structura, nu codul
 Codul prost scris nu trebuie refactorizat, ci rescris
 Refactorizarea nu trebuie să introducă niveluri de
complexitate inutile
 Costurile suplimentare ale refactorizării sunt compensate de
economiile ulterioare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Semnale pentru refactorizare
 Următoarele situații sunt semnale pentru necesitatea
refactorizării (engl. “code smells”):
 Cod duplicat
 Metode lungi
 Clase mari
 Liste lungi de parametri
 Instrucțiuni condiționale care determină diferențele de
comportament: se recomandă polimorfismul
 Generalitate speculativă: ierarhie de clase în care subclasele au
același comportament
 Comunicare intensă între obiecte: cuplare puternică
 Înlănțuirea de mesaje: cuplare inutilă
21
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
22
Optimizarea metodelor
 Scop: simplificarea și creșterea coeziunii
 Prin simplificarea interfeței, scade și cuplarea
 Extragerea de metode
 Pentru o metodă lungă, o parte a metodei este
transformată într-o nouă metodă
 Unele din variabilele primei metode devin parametri pentru
a doua
 O metodă care schimbă starea unui obiect și returnează o
valoare trebuie partiționată într-o metodă care schimbă
starea și o metodă care returnează o valoare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
23
Optimizarea metodelor
 Adăugarea de parametri
 Când o metodă trebuie să îndeplinească
funcționalități noi și are nevoie de mai multe
informații
 Ștergerea de parametri
 Când nu toți parametrii sunt folosiți efectiv
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
24
Optimizarea claselor
 Scop: creșterea coeziunii și reducerea cuplării
 Mutarea metodelor
 Când o metodă din clasa A interacționează mult cu obiectele
clasei B, metoda poate fi mutată în clasa B
 Dacă este posibil, metoda din clasa A trebuie eliminată cu totul
 Dacă nu, în clasa A poate fi păstrat un „proxy” care să delege
apelurile
 Mutarea câmpurilor
 Dacă un câmp din clasa A este folosit mai des de către metodele
clasei B, câmpul poate fi mutat în clasa B
 Câmpul fiind privat, referințele din clasa A trebuie modificate iar
în clasa B trebuie să se introducă proprietăți accesor (get) și
mutator (set)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
25
Optimizarea claselor
 Extragerea de clase
 De obicei, pe parcursul implementării, funcționalitatea
claselor este extinsă
 O clasă poate ajunge să aibă prea multe responsabilități
 Se creează o nouă clasă și apoi se aplică refactorizările de
metode și câmpuri
 Dacă există o cuplare puternică între cele două clase
rezultate, înseamnă că partiționarea este artificială
 Înlocuirea valorilor de date cu obiecte
 Dacă asupra unor câmpuri se efectuează operații multiple,
acestea pot fi convertite în obiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
26
Optimizarea ierarhiilor
 Scop: utilizarea polimorfismului pentru a facilita
extensiile ulterioare
 Înlocuirea instrucțiunilor condiționale după flag-uri
sau tipul obiectelor cu clase polimorfice
 „Ridicarea” câmpurilor și/sau metodelor
 Elementele comune sunt incluse în clasele părinte
 Elementele variabile sunt incluse în clasele fiu
 Invers, „coborârea” câmpurilor și/sau metodelor pe
nivelurile unde sunt relevante
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
27
Exemplu
 Situația matricolă a studenților
 Structura inițială
GradReport are un vector de obiecte Student
Student are vectori pentru toate cursurile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
28
Prima refactorizare
Se transformă vectorii în obiecte
CourseTaken este cursul urmat de student;
dacă a picat, l-a urmat de mai multe ori
Course este un curs din planul de învățământ
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
29
A doua refactorizare
Se elimină informațiile
redundante: Student
avea câmpurile DOB
(data nașterii) și Age
Funcționalitatea se
mută acolo unde
există cele mai multe
informații: clasa
CourseTaken are
metoda printGrade
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
30
A treia refactorizare
Se înlocuiește câmpul
pg_or_ug cu o ierarhie
Thesis rămâne doar
pentru nivelul de licență
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
31
Utilitare
 JetBrains Resharper, integrat cu mediul de dezvoltare
Visual Studio, care permite:
 Evidențierea erorilor
 Refactorizarea
 Navigarea și căutarea mai ușoară
 Formatarea și curățarea codului
 Generarea automată de cod
 Suport pentru testarea unităților
 https://www.jetbrains.com/resharper/features
 CodeMaid, plug-in pentru Visual Studio
 http://www.codemaid.net
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
32
Analiza codului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
33
Analiza codului
IList : IEnumerable
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
34
Navigarea și căutarea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
35
Refactorizarea
 Schimbarea semnăturii unei metode
 Convertirea unei clase abstracte într-o interfață și
viceversa
 Convertirea proprietăților sau indexatorilor în metode și
viceversa
 Introducerea de câmpuri, variabile locale sau parametri
 Extragerea de interfețe și metode
 Mutarea membrilor mai sus sau mai jos în ierarhie
 Încapsularea câmpurilor
 Redenumiri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
36
Asistența la scrierea de cod
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
37
Asistența la scrierea de cod
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
38
Curățarea codului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
39
Curățarea codului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
40
Șabloane
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
42
Analiza statică și dinamică
 Analiza statică verifică reprezentarea sistemului
pentru a descoperi eventualele probleme, de
exemplu analiza codului sursă
 Analiza dinamică se ocupă cu rularea și
observarea comportamentului programului în
timpul execuției
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
43
Analiza statică
 Analiza automată a unui program pentru detectarea
erorilor potențiale și pentru generarea de informații utile
la depanare
 Compilatoarele realizează o analiză statică restrânsă, în vederea
generării executabilului
 Instrumentele dedicate au ca scop principal detectarea defectelor
 Caracteristici ale analizoarelor statice:
 Corectitudinea (engl. “soundness”): sunt corecte dacă nu
detectează situații fals pozitive
 Completitudinea (engl. “completeness”): sunt complete dacă nu
ratează unele defecte existente
 Este necesar un compromis
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
44
Analiza statică automată
 Analizoarele statice sunt instrumente software
pentru prelucrarea codului sursă
 Ele parsează textul programului și încearcă să
descopere condiții potențial eronate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
45
Verificări în analiza statică
 Defecte de date
 Variabile utilizate înainte de inițializare; situația
este posibilă în C/C++, dar nu și în C#
 Variabile declarate, dar nefolosite
 Variabile atribuite de două ori, dar nefolosite între
atribuiri
 Variabile nedeclarate
 Posibile violări ale limitelor de vectori
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
46
Verificări în analiza statică
 Defecte de control
 Cod care nu poate fi atins
 Ramificări necondiționale în bucle
 Defecte de intrare/ieșire
 Variabile trimise la ieșire de două ori fără atribuiri
intermediare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
47
Verificări în analiza statică
 Defecte de interfață
 Nepotriviri de tip la parametri
 Nepotriviri la numărul de parametri
 Neutilizarea rezultatelor unor funcții
 Metode neapelate
 Defecte de stocare
 Pointeri neatribuiți
 Aritmetică de pointeri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
48
Abordarea 1
 Căutarea tiparelor
neobișnuite în cod:
 Operații idempotente
(o variabilă intră într-o
operație cu ea însăși)
 Atribuiri neutilizate
 Cod ne-executabil
 Ramuri condiționale
imposibil de atins
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Abordarea 1
 Experimentele asupra multor sisteme software
utilizate pe scară largă au indicat că 20-50% din
atenționări sunt fals pozitive
 Există totuși o corelație puternică între
problemele de acest fel descoperite și erorile
reale din programe
49
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
50
Abordarea 2
 Căutarea explicită a defectelor
 Folosirea memoriei
neinițializate
 Dereferențierea pointerilor
neinițializați
 Dereferențierea pointerilor nuli
 Dereferențierea pointerilor
invalizi
 Dereferențierea sau returnarea
pointerilor la memorie eliberată
 Scurgeri de memorie sau alte
resurse, de exemplu fișiere
 Returnarea pointerilor la
variabile locale din stivă
 Diviziuni cu 0
• dacă size = 1, result nu este dezalocat
(scurgere de memorie)
• dacă size ≤ 0, se accesează
(dereferențiază) pointerul neinițializat
în linia 10
• dacă malloc nu poate aloca memorie,
se dereferențiază pointerul neinițializat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
51
Utilizarea analizei statice
 Valoroasă mai ales când se folosește un limbaj
slab tipizat precum C-ul, unde multe erori nu
sunt detectate de compilator
 Mai puțin necesară în cazul limbajelor puternic
tipizate precum C# sau Java, care pot detecta
multe erori la compilare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
52
FxCop
 FxCop este un instrument de analiză statică a codului care verifică assembly-urile
.NET în conformitate cu recomandările companiei Microsoft
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
54
Metrici
 Măsuri pentru:
 Dimensiune
 Complexitate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
55
Metrici de dimensiune
 Dimensiunea ca număr de linii de cod
 Ce este o linie de cod?
 engl. “line of code”, LOC
 În general, o linie nevidă, care nu este comentariu
 Măsură corelată cu productivitatea, costul și
calitatea (defecte / KLOC)
 Bunele practici curente: mai puțin de 1 defect / KLOC
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Metrici de complexitate
 Complexitatea indică nivelul de dificultate la
înțelegerea unui modul
 Metrici:
 Dimensiunea: complexitatea crește cu dimensiunea
codului și cu numărul de decizii
 Complexitatea ciclomatică: M = e – n + 2p
 vezi cursul 4, Faza de proiectare, secțiunea Proiectarea
detaliată
56
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
57
Variabile vii
 engl. “live variable”
 Pentru a scrie sau citi instrucțiunile, un programator trebuie
să țină minte o serie de variabile, inclusiv altele decât cele
implicate direct în instrucțiunea curentă
 O variabilă este vie de la prima până la ultima referențiere
dintr-un modul, incluzând toate instrucțiunile intermediare
 Pentru o instrucțiune, numărul de variabile vii reprezintă o
măsură a dificultății de înțelegere a acelei instrucțiuni
 Extindere la un modul: definirea numărului mediu de
variabile vii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
58
Anvergura
 engl. “span”
 Numărul de instrucțiuni dintre 2 utilizări succesive ale
unei variabile
 Dacă o variabilă este referențiată de n ori, atunci are
n – 1 anverguri
 Anvergura medie este numărul mediu de instrucțiuni
executabile dintre 2 referiri succesive ale unei variabile
 Cu cât anvergura este mai mare, cu atât modulul este
mai complex
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Discuție
 Complexitatea ciclomatică este definită doar pe
baza logicii de control
 Variabilele vii și anvergura sunt definite doar din
punct de vedere al utilizării datelor
59
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
60
Metrici în .NET Reflector
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
62
Anti-șabloane de programare
 Accidental complexity
(complexitatea accidentală)
 Action at a distance
(acțiunea la distanță)
 Blind faith (credința oarbă)
 Boat anchor (ancora de
vapor)
 Busy waiting (așteptarea
activă)
 Caching failure
(depozitarea eșecului)
 Cargo cult programming
 Coding by exception
(codarea prin excepții)
 Error hiding (ascunderea
erorilor)
 Expection handling
 Hard code
 Magic numbers (numerele
magice)
 Lava flow
 Spagetti code
Pentru explicații, vezi suportul de curs
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
63
Anti-șabloane metodologice
 Copy and paste programming
 Improbability factor (factorul de improbabilitate)
 Low hanging fruit
 Premature optimization (optimizarea prematură)
 Programming by permutation (programarea prin
permutări)
 Reinventing the wheel (reinventarea roții)
 Reinventing the square wheel (reinventarea roții pătrate)
Pentru explicații, vezi suportul de curs
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
1. Introducere
2. Procesul de implementare
3. Refactorizarea
4. Analiza statică
5. Metrici de implementare
6. Anti-șabloane de implementare
7. Managementul configurației
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
65
Managementul configurației
 Pe parcursul ciclului de viață al unui proiect de
dezvoltare software sunt create și actualizate un
mare număr de elemente, precum module de
cod sursă, cerințe de modificare etc.
 Pentru gestionarea acestora trebuie să existe un
set de proceduri bine definite, care poartă
numele de managementul configurației
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
66
Definiții (standarde IEEE)
 Linie de bază (engl. “baseline”)
 O specificație sau un produs care a fost analizat și
acceptat în mod formal, care servește în continuare ca
bază pentru dezvoltarea viitoare și care poate fi modificat
numai prin proceduri formale de control al modificărilor
 Articole de configurație (engl. “configuration items”)
 O colecție de elemente hardware sau software tratate ca o
unitate în scopul gestionării configurației
 Exemple: fișiere sursă, module de cod obiect, specificarea
cerințelor, documentația de proiectare, planul, cazurile și
rezultatele testării, manualul utilizatorului etc.
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
67
Controlul formal al modificărilor
 O cerere de modificare este trimisă comisiei de control
al configuraţiei
 Comisia evaluează cererea, care poate fi aprobată,
respinsă sau amânată dacă sunt necesare mai multe
informaţii
 Dacă este aprobată, se stabileşte un termen de
implementare
 Comisia se asigură că toate articolele de configuraţie
afectate de schimbare vor fi actualizate corespunzător
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
68
Noțiuni
 Controlul surselor
 Reține structura directoarelor și fișierelor de cod sursă
ale proiectului dezvoltat și gestionează modificările și
accesul concurent la acestea
 Controlul versiunilor
 Un sistem de control al surselor care memorează
modificările făcute asupra fișierelor și permite
inspectarea, regăsirea și compararea oricăror variante
(versiuni) ale unui fișier pe durata întregului ciclu de
dezvoltare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
69
Numerotarea versiunilor
 Schema GNU: versiunea majoră, versiunea minoră și patch-ul
(tripletă de întregi)
 Între două versiuni majore, în produs au loc schimbări majore ale
funcționalității și nu este garantată compatibilitatea înapoi
 Între două versiuni minore ale aceleiași versiuni majore trebuie să existe
compatibilitate
 Rolul unei versiuni minore este introducerea unor funcții noi. Funcțiile
vechi nu sunt îndepărtate; totuși documentația programului îl poate
avertiza pe utilizator că la anumite funcții se va renunța în viitor (sunt
marcate ca “obsolete” sau “deprecated”)
 Patch-ul nu poate realiza decât schimbări în implementarea unor funcții.
De obicei, rolul său este corectarea unor defecte ale programului
 Aceste reguli nu se aplică însă și pentru programele în versiuni alfa sau
beta (0.X)
 Microsoft .NET: major, minor, build, revision
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
70
Instrumente de control
al versiunilor
 Alături de alte instrumente, menționăm:
 Microsoft Visual SourceSafe (VSS)
 Concurent Versions System (CVS)
 Git
 Subversion (SVN)
 Microsoft Team Foundation Server (TFS)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
71
Microsoft Visual SourceSafe
 Sistem de control al versiunilor destinat în special
dezvoltării software, dar util pentru gestionarea
versiunilor oricărui tip de documente
 Previne pierderea accidentală a fișierelor
 Permite revenirea la o versiune anterioară
 Permite partajarea și îmbinarea fișierelor
 Permite lucrul cu proiecte întregi
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
72
Check in
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
73
Check in
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
74
Lista de proiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
75
Check out
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
76
Memorarea versiunilor
 Pentru fișiere sursă,
se recomandă
memorarea tuturor
versiunilor
 Pentru fișiere binare,
se poate reține
numai ultima
versiune
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
77
Lock-Modify-Unlock
 Un dezvoltator preia
(checks out) un fișier
în mod exclusiv
 Lucrează asupra lui
 În acest timp, fișierul
este blocat pentru
ceilalți dezvoltatori
 Primul dezvoltator
încarcă la loc (checks
in) fișierul
 Fișierul este deblocat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
78
Preluarea non-exclusivă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
79
Copy-Modify-Merge
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
80
Modificările
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
81
Check in multiplu
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
82
File difference
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
83
File difference
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
84
Merge (îmbinarea)
 Versiunea de bază
 Modificarea 1
 Modificarea 2
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
85
Îmbinarea: conflicte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
86
Share (partajarea)
 Permite ca un fișier să fie partajat de mai multe proiecte
 Dacă fișierul este modificat într-un proiect, schimbările
se vor reflecta simultan și în celelalte proiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
87
Branch (ramificarea)
 Permite ca după partajare, fișierele comune să devină
independente
 Exemplul 1
 Exemplul 2
 Două proiecte foarte asemănătoare pentru doi clienți diferiți
 O mare parte a proiectelor este comună
 Unele fișiere specifice sunt diferite
 Se partajează un proiect (recursiv) și se ramifică fișierele
specifice
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
88
Cloak (ascunderea)
 Proiectele de
dimensiuni mari, care
se modifică rar, pot fi
ignorate în cadrul
operațiilor recursive
Fereastra de
proprietăți pentru
directoare/proiecte,
nu pentru fișiere
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
89
Label (etichetarea)
 Permite etichetarea fișierelor sau proiectelor
 O scurtă descriere în vederea identificării mai ușoare
 File → Label... / Show History...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
90
Concluzii
 Implementarea este faza în care este produs codul proiectat,
îndeplinind restricțiile de resurse, acuratețe și performanță
indicate de specificații
 Există limbaje imperative (procedurale), precum C/C++, Java,
C# și limbaje declarative, precum Lisp, F#, Prolog, Clips
 Alegerea unui limbaj trebuie să țină seama de natura
proiectului, de timpul dorit pentru implementare și de
experiența echipei
 Structura programului trebuie optimizată ori de câte ori este
necesar prin refactorizare
 Visual SourceSafe este un instrument des utilizat pentru
controlul versiunilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

More Related Content

What's hot (6)

Introducere in ingineria programarii
Introducere in ingineria programariiIntroducere in ingineria programarii
Introducere in ingineria programarii
 
Faza de proiectare
Faza de proiectareFaza de proiectare
Faza de proiectare
 
Aspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareAspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltare
 
Faza de testare (I)
Faza de testare (I)Faza de testare (I)
Faza de testare (I)
 
Tehnici de testare
Tehnici de testareTehnici de testare
Tehnici de testare
 
Faza de analiza
Faza de analizaFaza de analiza
Faza de analiza
 

Similar to Faza de implementare

Similar to Faza de implementare (16)

programare eXtrema
programare eXtremaprogramare eXtrema
programare eXtrema
 
Curs1-POO-Loga
Curs1-POO-LogaCurs1-POO-Loga
Curs1-POO-Loga
 
Extreme programming(xp)
Extreme programming(xp)Extreme programming(xp)
Extreme programming(xp)
 
Modulul v mtcp i
Modulul v   mtcp iModulul v   mtcp i
Modulul v mtcp i
 
Webappdev
WebappdevWebappdev
Webappdev
 
baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.
 
Magia testelor automate cu ASP.NET MVC
Magia testelor automate cu ASP.NET MVCMagia testelor automate cu ASP.NET MVC
Magia testelor automate cu ASP.NET MVC
 
Curs multimedia
Curs multimediaCurs multimedia
Curs multimedia
 
Sisteme expert mps2
Sisteme expert mps2Sisteme expert mps2
Sisteme expert mps2
 
Music Finder
Music FinderMusic Finder
Music Finder
 
Sisteme expert mps
Sisteme expert mpsSisteme expert mps
Sisteme expert mps
 
Interactiunea cu Utilizatorul în Python, Java.pptx
Interactiunea cu Utilizatorul în Python, Java.pptxInteractiunea cu Utilizatorul în Python, Java.pptx
Interactiunea cu Utilizatorul în Python, Java.pptx
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
 
Programator Fisa Postului
Programator Fisa PostuluiProgramator Fisa Postului
Programator Fisa Postului
 
OSOM - Performance in testing by jmeter
OSOM - Performance in testing by jmeterOSOM - Performance in testing by jmeter
OSOM - Performance in testing by jmeter
 
Medical application augmented reality
Medical application augmented realityMedical application augmented reality
Medical application augmented reality
 

More from Florin Leon

More from Florin Leon (17)

Modele bazate pe energie
Modele bazate pe energieModele bazate pe energie
Modele bazate pe energie
 
Retele neuronale profunde
Retele neuronale profundeRetele neuronale profunde
Retele neuronale profunde
 
Regresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxRegresia liniara, logistica, softmax
Regresia liniara, logistica, softmax
 
Clasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorClasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilor
 
Algoritmi de clasificare
Algoritmi de clasificareAlgoritmi de clasificare
Algoritmi de clasificare
 
Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)
 
Teoria jocurilor (II)
Teoria jocurilor (II)Teoria jocurilor (II)
Teoria jocurilor (II)
 
Teoria jocurilor (I)
Teoria jocurilor (I)Teoria jocurilor (I)
Teoria jocurilor (I)
 
Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Arhitecturi de agenti (II)
Arhitecturi de agenti (II)
 
Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Arhitecturi de agenti (I)
Arhitecturi de agenti (I)
 
Introducere in domeniul agentilor
Introducere in domeniul agentilorIntroducere in domeniul agentilor
Introducere in domeniul agentilor
 
Complexitate si emergenta
Complexitate si emergentaComplexitate si emergenta
Complexitate si emergenta
 
Invatarea cu intarire
Invatarea cu intarireInvatarea cu intarire
Invatarea cu intarire
 
Retele neuronale (II)
Retele neuronale (II)Retele neuronale (II)
Retele neuronale (II)
 
Retele neuronale (I)
Retele neuronale (I)Retele neuronale (I)
Retele neuronale (I)
 
Rationament probabilistic
Rationament probabilisticRationament probabilistic
Rationament probabilistic
 
Logica vaga (fuzzy)
Logica vaga (fuzzy)Logica vaga (fuzzy)
Logica vaga (fuzzy)
 

Faza de implementare

  • 1. Ingineria programării 11. Faza de implementare 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. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 3. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 4. 4 Faza de implementare  Implementarea este faza în care este produs codul corespunzător proiectului  Se îndeplinesc restricțiile de resurse, acuratețe și performanță indicate de specificații  Sistemul este construit ori plecând de la zero, ori prin asamblarea unor componente pre-existente  De cele mai multe ori proiectarea nu va realiza o transformare de 1 la 1 către implementare  Este necesar un oarecare efort pentru a scrie codul corespunzător, iar aceasta este o sursă de erori  Erorile de proiectare determină pierderea timpului programatorilor în a rezolva probleme puse greșit Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 5. 5 Erori  Implementarea însăși este predispusă către erori, fiind un proces creator uman  Un programator are 50% șanse să descopere o eroare într-un interval de 5-10 linii de cod și numai 20% șanse să o descopere într-un domeniu de 40-50 de linii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 6. 6 Documente  Documentele de bază produse în această fază sunt:  Codul sursă comentat, respectând anumite convenții  Diagrame ale produsului software  Manualul de utilizare  Planul pentru coordonarea configurației (versionare) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 7. 7 Clase de limbaje  Din punct de vedere al semanticii, sunt larg recunoscute următoarele clase mari de limbaje:  Limbaje imperative (procedurale): cum se execută prelucrările  Fortran, Basic, Pascal, C, C++, Java, C#  Limbaje declarative: ce trebuie realizat  Subparadigma funcțională: Lisp (de exemplu, dialectele Scheme, Common Lisp), F# (Ten things F# can do, and C# can’t, https://www.youtube.com/watch?v=hMjv8m--W28)  Subparadigma logică: Prolog  Reguli și potrivirea modelelor: Clips, Jess, Drools Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 8. 8 Programarea: știință sau artă?  Artă  Construirea unor produse care pot acționa asupra simțămintelor  Tradițional, orice talent sau măiestrie (gr. τέχνη)  Ştiință  Adunarea de probe prin observații și experimente măsurabile și repetabile  Formularea de ipoteze și testarea acestora Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 9. 9 Programarea: știință sau artă? Landon Curt Noll & Larry Bassel International Obfuscated C Code Contest, 1988 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 10. 10 Programarea: știință sau artă? Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 11. 11 Programarea: știință sau artă?  Competiție de scripturi JavaScript de 1 KB (http://js1k.com) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 12. 12 Programarea: știință sau artă? JS1k: The JavaScript code golfing competition, 2010 Óscar Toledo G.: nanochess http://nanochess.org Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 13. 13 Programarea: știință sau artă?  Rgba and TBC: Elevated  4 KB exe, Breakpoint 2009, http://www.rgba.org Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 14. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 15. 15 Scopul implementării  Implementarea afectează atât testarea cât și întreținerea  Efortul de testare este 30-50% din efortul de dezvoltare  Rata de efort întreținere-dezvoltare: 60:40 - 80:20  Scopul nu este diminuarea costurilor de implementare, ci a costurilor fazelor ulterioare  Programele nu trebuie să fie ușor de scris, ci ușor de citit și înțeles Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 16. 16 Experimentul Weinberg  Când programatorii primesc un obiectiv clar, de obicei îl îndeplinesc  Îndeplinirea unui obiectiv afectează alte obiective  Compromisuri Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 17. 17 Implementarea incrementală  Simplifică testarea și depanarea (engl. “debugging”) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 18. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 19. 19 Refactorizarea  engl. “refactoring”  Schimbările succesive conduc la o structură suboptimă a codului  Crește complexitatea  Scade claritatea  Refactorizarea este o schimbare în structura internă a unui produs software cu scopul de a-l face mai ușor de înțeles și de modificat fără a-i schimba comportamentul observabil  Este o formă de proiectare incrementală  Rezultate:  Scăderea cuplării  Creșterea coeziunii  Respectarea principiului deschis-închis Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 20. 20 Refactorizarea  Schimbările pot introduce noi defecte  Refactorizarea trebuie efectuată în pași mici  Trebuie să existe teste care să indice locurile unde apar erori  Refactorizarea nu se referă la introducerea de noi funcționalități  Cele două activități sunt diferite și trebuie separate  Refactorizarea îmbunătățește structura, nu codul  Codul prost scris nu trebuie refactorizat, ci rescris  Refactorizarea nu trebuie să introducă niveluri de complexitate inutile  Costurile suplimentare ale refactorizării sunt compensate de economiile ulterioare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 21. Semnale pentru refactorizare  Următoarele situații sunt semnale pentru necesitatea refactorizării (engl. “code smells”):  Cod duplicat  Metode lungi  Clase mari  Liste lungi de parametri  Instrucțiuni condiționale care determină diferențele de comportament: se recomandă polimorfismul  Generalitate speculativă: ierarhie de clase în care subclasele au același comportament  Comunicare intensă între obiecte: cuplare puternică  Înlănțuirea de mesaje: cuplare inutilă 21 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 22. 22 Optimizarea metodelor  Scop: simplificarea și creșterea coeziunii  Prin simplificarea interfeței, scade și cuplarea  Extragerea de metode  Pentru o metodă lungă, o parte a metodei este transformată într-o nouă metodă  Unele din variabilele primei metode devin parametri pentru a doua  O metodă care schimbă starea unui obiect și returnează o valoare trebuie partiționată într-o metodă care schimbă starea și o metodă care returnează o valoare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 23. 23 Optimizarea metodelor  Adăugarea de parametri  Când o metodă trebuie să îndeplinească funcționalități noi și are nevoie de mai multe informații  Ștergerea de parametri  Când nu toți parametrii sunt folosiți efectiv Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 24. 24 Optimizarea claselor  Scop: creșterea coeziunii și reducerea cuplării  Mutarea metodelor  Când o metodă din clasa A interacționează mult cu obiectele clasei B, metoda poate fi mutată în clasa B  Dacă este posibil, metoda din clasa A trebuie eliminată cu totul  Dacă nu, în clasa A poate fi păstrat un „proxy” care să delege apelurile  Mutarea câmpurilor  Dacă un câmp din clasa A este folosit mai des de către metodele clasei B, câmpul poate fi mutat în clasa B  Câmpul fiind privat, referințele din clasa A trebuie modificate iar în clasa B trebuie să se introducă proprietăți accesor (get) și mutator (set) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 25. 25 Optimizarea claselor  Extragerea de clase  De obicei, pe parcursul implementării, funcționalitatea claselor este extinsă  O clasă poate ajunge să aibă prea multe responsabilități  Se creează o nouă clasă și apoi se aplică refactorizările de metode și câmpuri  Dacă există o cuplare puternică între cele două clase rezultate, înseamnă că partiționarea este artificială  Înlocuirea valorilor de date cu obiecte  Dacă asupra unor câmpuri se efectuează operații multiple, acestea pot fi convertite în obiecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 26. 26 Optimizarea ierarhiilor  Scop: utilizarea polimorfismului pentru a facilita extensiile ulterioare  Înlocuirea instrucțiunilor condiționale după flag-uri sau tipul obiectelor cu clase polimorfice  „Ridicarea” câmpurilor și/sau metodelor  Elementele comune sunt incluse în clasele părinte  Elementele variabile sunt incluse în clasele fiu  Invers, „coborârea” câmpurilor și/sau metodelor pe nivelurile unde sunt relevante Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 27. 27 Exemplu  Situația matricolă a studenților  Structura inițială GradReport are un vector de obiecte Student Student are vectori pentru toate cursurile Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 28. 28 Prima refactorizare Se transformă vectorii în obiecte CourseTaken este cursul urmat de student; dacă a picat, l-a urmat de mai multe ori Course este un curs din planul de învățământ Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 29. 29 A doua refactorizare Se elimină informațiile redundante: Student avea câmpurile DOB (data nașterii) și Age Funcționalitatea se mută acolo unde există cele mai multe informații: clasa CourseTaken are metoda printGrade Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 30. 30 A treia refactorizare Se înlocuiește câmpul pg_or_ug cu o ierarhie Thesis rămâne doar pentru nivelul de licență Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 31. 31 Utilitare  JetBrains Resharper, integrat cu mediul de dezvoltare Visual Studio, care permite:  Evidențierea erorilor  Refactorizarea  Navigarea și căutarea mai ușoară  Formatarea și curățarea codului  Generarea automată de cod  Suport pentru testarea unităților  https://www.jetbrains.com/resharper/features  CodeMaid, plug-in pentru Visual Studio  http://www.codemaid.net Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 32. 32 Analiza codului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 33. 33 Analiza codului IList : IEnumerable Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 34. 34 Navigarea și căutarea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 35. 35 Refactorizarea  Schimbarea semnăturii unei metode  Convertirea unei clase abstracte într-o interfață și viceversa  Convertirea proprietăților sau indexatorilor în metode și viceversa  Introducerea de câmpuri, variabile locale sau parametri  Extragerea de interfețe și metode  Mutarea membrilor mai sus sau mai jos în ierarhie  Încapsularea câmpurilor  Redenumiri Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 36. 36 Asistența la scrierea de cod Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 37. 37 Asistența la scrierea de cod Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 38. 38 Curățarea codului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 39. 39 Curățarea codului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 40. 40 Șabloane Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 41. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 42. 42 Analiza statică și dinamică  Analiza statică verifică reprezentarea sistemului pentru a descoperi eventualele probleme, de exemplu analiza codului sursă  Analiza dinamică se ocupă cu rularea și observarea comportamentului programului în timpul execuției Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 43. 43 Analiza statică  Analiza automată a unui program pentru detectarea erorilor potențiale și pentru generarea de informații utile la depanare  Compilatoarele realizează o analiză statică restrânsă, în vederea generării executabilului  Instrumentele dedicate au ca scop principal detectarea defectelor  Caracteristici ale analizoarelor statice:  Corectitudinea (engl. “soundness”): sunt corecte dacă nu detectează situații fals pozitive  Completitudinea (engl. “completeness”): sunt complete dacă nu ratează unele defecte existente  Este necesar un compromis Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 44. 44 Analiza statică automată  Analizoarele statice sunt instrumente software pentru prelucrarea codului sursă  Ele parsează textul programului și încearcă să descopere condiții potențial eronate Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 45. 45 Verificări în analiza statică  Defecte de date  Variabile utilizate înainte de inițializare; situația este posibilă în C/C++, dar nu și în C#  Variabile declarate, dar nefolosite  Variabile atribuite de două ori, dar nefolosite între atribuiri  Variabile nedeclarate  Posibile violări ale limitelor de vectori Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 46. 46 Verificări în analiza statică  Defecte de control  Cod care nu poate fi atins  Ramificări necondiționale în bucle  Defecte de intrare/ieșire  Variabile trimise la ieșire de două ori fără atribuiri intermediare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 47. 47 Verificări în analiza statică  Defecte de interfață  Nepotriviri de tip la parametri  Nepotriviri la numărul de parametri  Neutilizarea rezultatelor unor funcții  Metode neapelate  Defecte de stocare  Pointeri neatribuiți  Aritmetică de pointeri Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 48. 48 Abordarea 1  Căutarea tiparelor neobișnuite în cod:  Operații idempotente (o variabilă intră într-o operație cu ea însăși)  Atribuiri neutilizate  Cod ne-executabil  Ramuri condiționale imposibil de atins Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 49. Abordarea 1  Experimentele asupra multor sisteme software utilizate pe scară largă au indicat că 20-50% din atenționări sunt fals pozitive  Există totuși o corelație puternică între problemele de acest fel descoperite și erorile reale din programe 49 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 50. 50 Abordarea 2  Căutarea explicită a defectelor  Folosirea memoriei neinițializate  Dereferențierea pointerilor neinițializați  Dereferențierea pointerilor nuli  Dereferențierea pointerilor invalizi  Dereferențierea sau returnarea pointerilor la memorie eliberată  Scurgeri de memorie sau alte resurse, de exemplu fișiere  Returnarea pointerilor la variabile locale din stivă  Diviziuni cu 0 • dacă size = 1, result nu este dezalocat (scurgere de memorie) • dacă size ≤ 0, se accesează (dereferențiază) pointerul neinițializat în linia 10 • dacă malloc nu poate aloca memorie, se dereferențiază pointerul neinițializat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 51. 51 Utilizarea analizei statice  Valoroasă mai ales când se folosește un limbaj slab tipizat precum C-ul, unde multe erori nu sunt detectate de compilator  Mai puțin necesară în cazul limbajelor puternic tipizate precum C# sau Java, care pot detecta multe erori la compilare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 52. 52 FxCop  FxCop este un instrument de analiză statică a codului care verifică assembly-urile .NET în conformitate cu recomandările companiei Microsoft Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 53. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 54. 54 Metrici  Măsuri pentru:  Dimensiune  Complexitate Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 55. 55 Metrici de dimensiune  Dimensiunea ca număr de linii de cod  Ce este o linie de cod?  engl. “line of code”, LOC  În general, o linie nevidă, care nu este comentariu  Măsură corelată cu productivitatea, costul și calitatea (defecte / KLOC)  Bunele practici curente: mai puțin de 1 defect / KLOC Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 56. Metrici de complexitate  Complexitatea indică nivelul de dificultate la înțelegerea unui modul  Metrici:  Dimensiunea: complexitatea crește cu dimensiunea codului și cu numărul de decizii  Complexitatea ciclomatică: M = e – n + 2p  vezi cursul 4, Faza de proiectare, secțiunea Proiectarea detaliată 56 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 57. 57 Variabile vii  engl. “live variable”  Pentru a scrie sau citi instrucțiunile, un programator trebuie să țină minte o serie de variabile, inclusiv altele decât cele implicate direct în instrucțiunea curentă  O variabilă este vie de la prima până la ultima referențiere dintr-un modul, incluzând toate instrucțiunile intermediare  Pentru o instrucțiune, numărul de variabile vii reprezintă o măsură a dificultății de înțelegere a acelei instrucțiuni  Extindere la un modul: definirea numărului mediu de variabile vii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 58. 58 Anvergura  engl. “span”  Numărul de instrucțiuni dintre 2 utilizări succesive ale unei variabile  Dacă o variabilă este referențiată de n ori, atunci are n – 1 anverguri  Anvergura medie este numărul mediu de instrucțiuni executabile dintre 2 referiri succesive ale unei variabile  Cu cât anvergura este mai mare, cu atât modulul este mai complex Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 59. Discuție  Complexitatea ciclomatică este definită doar pe baza logicii de control  Variabilele vii și anvergura sunt definite doar din punct de vedere al utilizării datelor 59 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 60. 60 Metrici în .NET Reflector Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 61. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 62. 62 Anti-șabloane de programare  Accidental complexity (complexitatea accidentală)  Action at a distance (acțiunea la distanță)  Blind faith (credința oarbă)  Boat anchor (ancora de vapor)  Busy waiting (așteptarea activă)  Caching failure (depozitarea eșecului)  Cargo cult programming  Coding by exception (codarea prin excepții)  Error hiding (ascunderea erorilor)  Expection handling  Hard code  Magic numbers (numerele magice)  Lava flow  Spagetti code Pentru explicații, vezi suportul de curs Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 63. 63 Anti-șabloane metodologice  Copy and paste programming  Improbability factor (factorul de improbabilitate)  Low hanging fruit  Premature optimization (optimizarea prematură)  Programming by permutation (programarea prin permutări)  Reinventing the wheel (reinventarea roții)  Reinventing the square wheel (reinventarea roții pătrate) Pentru explicații, vezi suportul de curs Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 64. Faza de implementare 1. Introducere 2. Procesul de implementare 3. Refactorizarea 4. Analiza statică 5. Metrici de implementare 6. Anti-șabloane de implementare 7. Managementul configurației 8. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 65. 65 Managementul configurației  Pe parcursul ciclului de viață al unui proiect de dezvoltare software sunt create și actualizate un mare număr de elemente, precum module de cod sursă, cerințe de modificare etc.  Pentru gestionarea acestora trebuie să existe un set de proceduri bine definite, care poartă numele de managementul configurației Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 66. 66 Definiții (standarde IEEE)  Linie de bază (engl. “baseline”)  O specificație sau un produs care a fost analizat și acceptat în mod formal, care servește în continuare ca bază pentru dezvoltarea viitoare și care poate fi modificat numai prin proceduri formale de control al modificărilor  Articole de configurație (engl. “configuration items”)  O colecție de elemente hardware sau software tratate ca o unitate în scopul gestionării configurației  Exemple: fișiere sursă, module de cod obiect, specificarea cerințelor, documentația de proiectare, planul, cazurile și rezultatele testării, manualul utilizatorului etc. Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 67. 67 Controlul formal al modificărilor  O cerere de modificare este trimisă comisiei de control al configuraţiei  Comisia evaluează cererea, care poate fi aprobată, respinsă sau amânată dacă sunt necesare mai multe informaţii  Dacă este aprobată, se stabileşte un termen de implementare  Comisia se asigură că toate articolele de configuraţie afectate de schimbare vor fi actualizate corespunzător Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 68. 68 Noțiuni  Controlul surselor  Reține structura directoarelor și fișierelor de cod sursă ale proiectului dezvoltat și gestionează modificările și accesul concurent la acestea  Controlul versiunilor  Un sistem de control al surselor care memorează modificările făcute asupra fișierelor și permite inspectarea, regăsirea și compararea oricăror variante (versiuni) ale unui fișier pe durata întregului ciclu de dezvoltare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 69. 69 Numerotarea versiunilor  Schema GNU: versiunea majoră, versiunea minoră și patch-ul (tripletă de întregi)  Între două versiuni majore, în produs au loc schimbări majore ale funcționalității și nu este garantată compatibilitatea înapoi  Între două versiuni minore ale aceleiași versiuni majore trebuie să existe compatibilitate  Rolul unei versiuni minore este introducerea unor funcții noi. Funcțiile vechi nu sunt îndepărtate; totuși documentația programului îl poate avertiza pe utilizator că la anumite funcții se va renunța în viitor (sunt marcate ca “obsolete” sau “deprecated”)  Patch-ul nu poate realiza decât schimbări în implementarea unor funcții. De obicei, rolul său este corectarea unor defecte ale programului  Aceste reguli nu se aplică însă și pentru programele în versiuni alfa sau beta (0.X)  Microsoft .NET: major, minor, build, revision Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 70. 70 Instrumente de control al versiunilor  Alături de alte instrumente, menționăm:  Microsoft Visual SourceSafe (VSS)  Concurent Versions System (CVS)  Git  Subversion (SVN)  Microsoft Team Foundation Server (TFS) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 71. 71 Microsoft Visual SourceSafe  Sistem de control al versiunilor destinat în special dezvoltării software, dar util pentru gestionarea versiunilor oricărui tip de documente  Previne pierderea accidentală a fișierelor  Permite revenirea la o versiune anterioară  Permite partajarea și îmbinarea fișierelor  Permite lucrul cu proiecte întregi Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 72. 72 Check in Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 73. 73 Check in Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 74. 74 Lista de proiecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 75. 75 Check out Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 76. 76 Memorarea versiunilor  Pentru fișiere sursă, se recomandă memorarea tuturor versiunilor  Pentru fișiere binare, se poate reține numai ultima versiune Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 77. 77 Lock-Modify-Unlock  Un dezvoltator preia (checks out) un fișier în mod exclusiv  Lucrează asupra lui  În acest timp, fișierul este blocat pentru ceilalți dezvoltatori  Primul dezvoltator încarcă la loc (checks in) fișierul  Fișierul este deblocat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 78. 78 Preluarea non-exclusivă Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 79. 79 Copy-Modify-Merge Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 80. 80 Modificările Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 81. 81 Check in multiplu Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 82. 82 File difference Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 83. 83 File difference Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 84. 84 Merge (îmbinarea)  Versiunea de bază  Modificarea 1  Modificarea 2 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 85. 85 Îmbinarea: conflicte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 86. 86 Share (partajarea)  Permite ca un fișier să fie partajat de mai multe proiecte  Dacă fișierul este modificat într-un proiect, schimbările se vor reflecta simultan și în celelalte proiecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 87. 87 Branch (ramificarea)  Permite ca după partajare, fișierele comune să devină independente  Exemplul 1  Exemplul 2  Două proiecte foarte asemănătoare pentru doi clienți diferiți  O mare parte a proiectelor este comună  Unele fișiere specifice sunt diferite  Se partajează un proiect (recursiv) și se ramifică fișierele specifice Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 88. 88 Cloak (ascunderea)  Proiectele de dimensiuni mari, care se modifică rar, pot fi ignorate în cadrul operațiilor recursive Fereastra de proprietăți pentru directoare/proiecte, nu pentru fișiere Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 89. 89 Label (etichetarea)  Permite etichetarea fișierelor sau proiectelor  O scurtă descriere în vederea identificării mai ușoare  File → Label... / Show History... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 90. 90 Concluzii  Implementarea este faza în care este produs codul proiectat, îndeplinind restricțiile de resurse, acuratețe și performanță indicate de specificații  Există limbaje imperative (procedurale), precum C/C++, Java, C# și limbaje declarative, precum Lisp, F#, Prolog, Clips  Alegerea unui limbaj trebuie să țină seama de natura proiectului, de timpul dorit pentru implementare și de experiența echipei  Structura programului trebuie optimizată ori de câte ori este necesar prin refactorizare  Visual SourceSafe este un instrument des utilizat pentru controlul versiunilor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm