Documente Academic
Documente Profesional
Documente Cultură
Florin Leon
Universitatea Tehnic Gheorghe Asachi din Iai
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 configuraiei
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de implementare
Erori
Documente
Clase de limbaje
Limbaje declarative
Limbaje imperative
Secvena
Permite specificarea ordinii execuiei instruciunilor
Selecia
Permite evaluarea unei condiii i luarea unei decizii
Iteraia
Permite existena structurilor repetitive
8
Caracteristici
Diviziunea n module
Structurarea n blocuri
Recursivitatea
Limbaje declarative
Arta
tiina
12
13
14
15
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Scopul implementrii
Experimentul Weinberg
Compromisuri
18
Implementarea incremental
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Refactorizarea
engl. refactoring
Schimbrile succesive conduc la o structur suboptim a codului
Crete complexitatea
Scade claritatea
Rezultate:
Scderea cuplrii
Creterea coeziunii
Respectarea principiului deschis-nchis
21
Refactorizarea
Exemplu
23
Prima refactorizare
24
A doua refactorizare
25
A treia refactorizare
26
Cod duplicat
Metode lungi
Clase mari
Liste lungi de parametri
Instruciuni condiionale care determin diferenele de comportament
Generalitate speculativ
Se recomand polimorfismul
Ierarhie de clase n care subclasele au acelai comportament
Optimizarea metodelor
Extragerea de metode
Optimizarea metodelor
Adugarea de parametri
tergerea de parametri
29
Optimizarea claselor
Mutarea cmpurilor
Dac un cmp din clasa A este folosit mai des de ctre metodele
clasei B, cmpul poate fi mutat n clasa B
Cmpul fiind privat, referinele din clasa A trebuie modificate iar
n clasa B trebuie s se introduc proprieti accesor (get) i/sau
mutator (set)
30
Optimizarea claselor
Extragerea de clase
Optimizarea ierarhiilor
Resharper
Evidenierea erorilor
Refactorizarea
Navigarea i cutarea mai uoar
Formatarea i curarea codului
Generarea automat de cod
Suport pentru testarea unitilor
https://www.jetbrains.com/resharper/documentation/
comparisonMatrix_R8_vs2013.html
33
34
35
Navigarea i cutarea
36
Refactorizarea
38
39
40
41
abloane
42
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
44
Analiza static
46
Defecte de date
47
Defecte de control
Defecte de intrare/ieire
48
Defecte de interfa
Defecte de stocare
Pointeri neatribuii
Aritmetic de pointeri
49
Abordarea 1
Cutarea tiparelor
neobinuite n cod:
Operaii idempotente
Atribuiri neutilizate
Cod ne-executabil
Ramuri condiionale
imposibil de atins
50
Abordarea 1
51
Abordarea 2
Folosirea memoriei
neiniializate
Dereferenierea pointerilor
neiniializai
Dereferenierea pointerilor nuli
Dereferenierea pointerilor
invalizi
Dereferenierea sau returnarea
pointerilor la memorie eliberat
Scurgeri de memorie sau alte
resurse (de exemplu fiiere)
Returnarea pointerilor la
variabile locale din stiv
Diviziuni cu 0
52
53
FxCop
54
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Metrici
Msuri pentru:
Dimensiune
Complexitate
56
Metrici de dimensiune
57
Metricile Halstead
Fie:
Vocabularul programului:
Lungimea programului:
numrul de bii necesari
pentru reprezentarea
unic a fiecrui element
Volumul programului:
Metrici de complexitate
Metrici:
59
Msura Halstead
Variabile vii
Anvergura
engl. span
62
Discuie
63
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Anti-abloane de programare
Accidental complexity
(Complexitatea accidental)
Action at a distance
(Aciunea la distan)
Blind faith (Credina oarb)
Boat anchor (Ancora de
vapor)
Busy waiting (Ateptarea
activ)
Caching failure
(Depozitarea eecului)
Anti-abloane metodologice
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 configuraiei
8. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Managementul configuraiei
69
Noiuni
Controlul surselor
Controlul versiunilor
Cerere de modificare
Numerotarea versiunilor
Instrumente de control
al versiunilor
74
75
Check in
76
Check in
77
Proiectele SourceSafe
78
Check out
79
Memorarea versiunilor
Lock-Modify-Unlock
Un dezvoltator preia
(checks out) un fiier
n mod exclusiv
Lucreaz asupra lui
n acest timp fiierul
este blocat pentru
ceilali dezvoltatori
Primul dezvoltator
ncarc la loc (checks
in) fiierul
Fiierul este deblocat
81
Preluarea non-exclusiv
82
Copy-Modify-Merge
83
Modificrile
84
Check in multiplu
85
File Difference
86
87
Merge (mbinarea)
Versiunea de baz
Versiunea surs
Versiunea destinaie
88
mbinarea: conflicte
89
Share (partajarea)
90
Branch (ramificarea)
Exemplul 2
2 proiecte foarte asemntoare pentru 2 clieni diferii
O mare parte a proiectelor este comun
Unele fiiere specifice sunt diferite
Se partajeaz un proiect (recursiv) i se ramific fiierele
specifice
91
Cloak (ascunderea)
Proiectele de
dimensiuni mari, care
se modific rar, pot fi
ignorate n cadrul
operaiilor recursive
Fereastra de
proprieti pentru
directoare/proiecte,
nu pentru fiiere
92
Label (etichetarea)
93
Concluzii