Documente Academic
Documente Profesional
Documente Cultură
Alin tefnescu
de la https://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html
Varianta detaliat
Prezentare bazat pe materiale de: Florentin Ipate (FMI UniBuc) - note de curs
i Ian Sommerville: Software Engineering 9th edition
de la geek-and-poke.com
Procesul de dezvoltare
cascad (waterfall)
Cerine
Avantaje i dezavantaje
n
n
Design
Implementare
Testare
Mentenan
implementare i testare unitar: Designul sistemului este transformat ntro mulime de programe (uniti de program); testarea unitilor de program
verific faptul c fiecare unitate de program este conform cu specificaia.
Probleme:
dezvoltarea unui sistem software nu este de obicei un proces liniar;
etapele se ntreptrund
metoda ofer un punct de vedere static asupra cerinelor
schimbarile cerinelor nu pot fi luate n considerare dup aprobarea
specificaiei
nu permite implicarea utilizatorului dup aprobarea specificaiei
Concluzie: Modelul cascad trebuie folosit atunci cand cerinele sunt bine
nelese i cnd este necesar un proces de dezvoltare clar i riguros.
Procesul incremental
Idee: un sistem de succes de mare dimensiune ncepe cu un sistem de
succes de mic dimensiune care apoi crete puin cte puin (Gilb, 1988)
Procesul incremental
n
Procesul incremental
de la n-ix.com
Metodologii agile
Metodologii agile
n
Puin istorie:
criza software 1960: depirea timpilor de livrare i a
bugetelor, conjugate cu nivelul sczut al calitii soluiilor.
- soluia #1: metodele structurate (80)
- soluia #2: metodologiile orientate obiect (OO)
cronicizarea crizei anilor 60
- soluia #3: mbunatirea proceselor software (CMM)
- soluia #4: metodologiile agile
Metodologii agile
n
Agile Manifesto
http://agilemanifesto.org/iso/ro/
Noi scoatem la iveal modaliti mai bune de dezvoltare de
software prin experien proprie i ajutndu-i pe ceilali.
Prin aceast activitate am ajuns s apreciem:
http://agilemanifesto.org/iso/ro/principles.html
Metodologii agile
Exemple de metodologii agile:
n
Crystal Clear
Scrum - 1995
etc.
Programare extrem
XP i principiile agile
n
de la spottedpaint.com
Valorile XP
Simplitate (Simplicity)
Comunicare (Communication)
Reacie (Feedback)
Curaj (Courage)
Respect (Respect)
Practici XP
n
Livrri frecvente
n
testare (Testing)
Planificare
n
Metafora
Integrare continu
n
codul este integrat i testat cel mult cteva ore sau o zi de cnd
este scris.
Testare
n
Proiectare simpl
n
mbuntirea codului
n
more fun?
40 de ore pe sptamn
n
Ciclul de dezvolare XP
Planificare i iteraii XP
Lucrul cu codul n XP
Dezavantaje XP
n
nu este scalabil
Avantaje XP
n
programare organizat
clientul are control (de fapt, toat lumea are control, pentru
c toi sunt implicai n mod direct)
SCRUM
Metoda Scrum
Scrum n practic
backlog-ul
produsului
sprint
(2-4 spt.)
backlog-ul
sprintului
de
la
so
fth
ou
se
ed
uc
ati
on
.co
versiune
incremental
Learning Scrum
Scrum pe scurt
n
Prezentare Scrum
O comparaie de final
Metode agile
Metode cascad
Metode formale
criticalitate sczut
criticalitate ridicat
criticalitate extrem
dezvoltatori seniori
dezvoltatori juniori
dezvoltatori seniori
cerine in schimbare
cerine limitate
echipe mici
echipe mari
echipe mici
cultur orientat
spre schimbare
cultur orientat
spre ordine
https://www.scrumwise.com/scrum/#
http://www.acunote.com/how-it-works
http://asana.com pentru lucru n echip (nu neaprat agil)
Cteva exemple
Tehnicile agile sunt folosite n foarte multe companii, dei multe
dintre ele nu folosesc explicit termenul de agile.
Cteva referine:
n
Google: http://georgekontopidis.com/blog/2011/googles-agile-practices/
Facebook: http://www.facebook.com/note.php?note_id=409881258919
SAP: http://scn.sap.com/community/agile-software-engineering
Microsoft: http://msdn.microsoft.com/en-us/vstudio/aa718795.aspx
IBM: http://www.ibm.com/software/rational/agile/
Alin tefnescu
relaii
scheme
exemple
mulimi
recapitulare
Introducere
Z, B, Event-B
n
Specificaii formale
O specificaie formal:
Introducere
Referine
Operatori
Mulimi
Mulimi
Operaii pe mulimi
Operaii pe mulimi
Tipuri
Tipuri
Tipuri compuse
Variabile
Abrevieri sintactice
Definiii axiomatice
Relaii
Operaii pe relaii
(DE REINUT)
Operaii pe relaii
Funcii
(DE REINUT)
(DE REINUT)
Scheme
Scheme
Scheme
Schemele ca tipuri/mulimi
Incluziunea schemelor
Exemplu
Incluziunea schemelor
Scheme generice
Conjuncii de scheme
Redenumirea variabilelor
Disjuncii de scheme
Schemele ca operaii
Schemele ca operaii
Schemele ca operaii
Operatorul Delta
Operatorul Xi
Exemplu Delta, Xi
Exemplu Delta, Xi
Exemplu Delta, Xi
Exemplu
Alin tefnescu
de la dilbert.com
Despre cerine
n Cerinele
Cerine
n Cerinele
n Cerinele
Tipuri de cerine
n Cerine
utilizator
sistemului
Utilizarea cerinelor
n Cerinele
utilizator se adreseaz:
utilizatorilor finali
inginerilor clientului
proiectanilor de sistem
managerilor clientului
managerilor de contracte
n Cerinele
de sistem se adreseaz:
utilizatorilor finali
inginerilor clientului
proiectanilor de sistem
programatorilor
n inginerii
n inginerii
funcionale:
afirmaii despre servicii pe care sistemul trebuie s le
conin, cum trebuie el s rspund la anumite intrri i
cum s reacioneze n anumite situaii.
n Cerine
non-funcionale:
constrngeri ale serviciilor i funciilor oferite de sistem
cum ar fi: constrngeri de timp, constrngeri ale procesului
de dezvoltare, standarde, etc.
Cerine funcionale
n Descriu
n Depind
n Cerinele
ale produsului
legate de organizare
externe
Cerine non-funcionale
n Definesc
n La
n Cerinele
Exprimare (exemple)
Vitez
Dimensiune
Uurina utilizrii
Fiabilitate
Robustee
Portabilitatea
Cerinele sistemului
n Cerinele
n cerinele
n scopul
n cerinele
n ele
de la dilbert.com
cerinele
limbajului ntr-un format consistent. E bine s se
foloseasc trebuie pentru cerinele obligatorii i ar trebui
pentru cele opionale
n evidenierea
cerinelor
n dac
n Prefa
n Introducere
n utilizarea
n evitarea
jargonului
n Glosar
de termeni
n Definirea
cerinelor utilizatorilor
n Arhitectura
sistemului
n Specificarea
n Modelarea
n Evoluia
n Anexe
n Index
cerinelor de sistem
sistemului
sistemului
n limbaj
n limbaj
n limbaj
n specificaii
n Cerina
n Cerina
n Colecteaz
date de la
senzorul pentru glicemie
(zahrul din snge) i
calculeaz cantitatea de
insulin care trebuie injectat
n Calculul
se bazeaz pe
diferenele glicemiei n timp.
n Trimite
semnale cu valoarea
dozei de insulin unei
micropompe.
corect este
critic pentru sntatea
pacientului.
n Funcionarea
de la lenny-diabetes.com
Alin tefnescu
Aciune
CompDose := 0
CompDose := 0
UML
de la wikipedia.org
UML n practic
De ce modelm?
de la wikipedia.org
Tool-uri UML
Cazuri de utilizare
Cuprinde:
Diagrama cazurilor de utilizare
Descrierea cazurilor de utilizare
Actori
de la wikipedia.org
Elementele principale
Clasificare actori
Cazuri de utilizare
Frontiera sistemului
Relaia include
Relaia include
Relaia extend
Relaia extend
Relaia de generalizare
Acest tip de relaie poate exista att ntre dou cazuri de
utilizare ct i ntre doi actori.
Descriere
Actori
Ipoteze
Pai
Alternative
(opional)
Cerine nonfuncionale
(opional)
Probleme
Atenie!
nc un exemplu
Descriere la:
http://www.math-cs.gordon.edu/courses/cs211/ATMExample/UseCases.html
Diagrame de secvene
Manager
Elemente de baz
ef (autohton)
Mesaj intern
Creare i distrugere
Grzi
Fragment [opt]
Fragment [loop]
Structurile
repetitive sunt
introduse prin
cuvntul cheie
[loop] urmat de o
un numr care
spune de cte ori
se execut grupul
respectiv sau de o
gard.
(Similar cu
if then
din programare)
Fragment [alt]
i multe altele
De exemplu:
[neg]: secvene de mesaje invalide (care nu trebuie s aib loc)
[par]: paralelism
[ref] includerea diagramelor unele n altele
aspecte temporale: cuantificarea trecerii timpului ntre mesaje
invariani
etc.
Similar cu
if then else
exist n diagramele de secvene
alt
[gard]
[else]
Alin tefnescu
de la lolzland.com
Introducere la clase
n
de la agilemodeling.com
Diagrame de clase
class Bicycle {
int speed = 0;
int gear = 1;
void changeGear(int newValue) {
gear = newValue;
}
void speedUp(int increment) {
speed = speed + increment;
}
void applyBrakes(int decrement) {
speed = speed - decrement;
}
}
class MountainBike extends Bicycle {
// new fields and methods defining
// a mountain bike go here
}
interface Bicycle {
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
class MyBicycle implements Bicycle {
// remainder of this class
// implemented as before
}
package ro.unibuc.fmi.bikes;
import ro.unibuc.fmi.bikes.*;
Abonat
n
Abonat
atribute
operaii
Atribute
n
Un atribut reprezint o
proprietate a unei clase.
Atributele descriu datele
coninute de obiectele din clasa
respectiv.
Abonat
# id : Integer
- nume : String [1..2]
- prenume : String [1..3]
- adresa : String
~ nrMaximAdmis : Integer
+ nrCrimprumutate ( ) : Integer
+ mprumut (c : CopieCarte)
+ returneaz (c : CopieCarte)
+ acceptmprumut ( ) : Boolean
Vizibilitatea atributelor
Dpdv al vizibilitii, atributele pot fi:
publice +: pot fi accesate de
orice alt clas
private -: nu pot fi accesate
de alte clase
protejate #: pot fi accesate
doar de subclasele care
descind din clasa respectiv
package ~: pot fi accesate
doar de clasele din acelai
package
Abonat
# id : Integer
- nume : String [1..2]
- prenume : String [1..3]
- adresa : String
~ nrMaximAdmis : Integer = 3
+ nrCrimprumutate ( ) : Integer
+ mprumut (c : CopieCarte)
+ returneaz (c : CopieCarte)
+ acceptmprumut ( ) : Boolean
Multiplicitatea atributelor
n
Operaii
Abonat
# id : Integer
- nume : String [1..2]
- prenume : String [1..3]
- adresa : String
~ nrMaximAdmis : Integer = 3
+ nrCrimprumutate ( ) : Integer
+ mprumut (c : CopieCarte)
+ returneaz (c : CopieCarte)
+ acceptmprumut ( ) : Boolean
Operaii
n
Abonat
# id : Integer
- nume : String [1..2]
- prenume : String [1..3]
- adresa : String
~ nrMaximAdmis : Integer = 3
+ nrCrimprumutate ( ) : Integer
+ mprumut (c : CopieCarte)
+ returneaz (c : CopieCarte)
+ acceptmprumut ( ) : Boolean
Asocieri
n
Asocieri
n
Multipliciti
n
Roluri
Navigabilitate
Navigabilitate
n
Agregare i compunere
n
Compunerea
n
Exemplu
Clase de asociere
n
Generalizare (generalization)
n
Motenirea (inheritance)
Generalizarea n practic
Bird
TweetingBird
AngryBird
FlappyBird
Alin tefnescu
de la http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html
Motenirea
Clase abstracte
Motenire multipl
n
Dependene
n majoritatea cazurilor,
motenirea simpl este
suficient, dar exist ns i
cazuri cnd motenirea multipl
este mai eficient.
de la http://www.uml-diagrams.org/generalization.html
Interfee
n
Interfee i realizri
n
Pachete
Un mod de a organiza clasele ntr-o diagrama este folosirea pachetelor.
n
Stereotipuri
n
nc un exemplu
de la http://msdn.microsoft.com/en-us/library/dd409437.aspx
Cod generat
de la agilemodeling.com
Diagrame de stri
Alin tefnescu
Elemente
nceputul i sfritul
n
Stri
Evenimente i aciuni
n
Activitile strilor
Stare
selecteazaProgram(p)/antena.recepioneazProgram(p)
Grzi
n
Activitile strilor
Stri compuse
CutareCanal:
nc un exemplu
http://rtb-team.sourceforge.net/rtb-team_analysis.htm
n
alege[nr_stud<3]/nr_stud++
Testare n practic
Alin tefnescu
de la dilbert.com
Testare software
Prezentare bazat pe materiale de Florentin Ipate (UniBuc) i Florin Leon (UT Iai)
Terminologie (IEEE)
Funcionalitatea programului
nivelul de ncredere depinde de ct de critic este sistemul
pentru utilizatori
Ateptrile utilizatorilor
utilizatorii pot avea grade diferite de ateptri pentru
diferite tipuri de produse software
Mediul de afaceri
lansarea rapid pe pia a unui produs poate fi uneori mai
important dect gsirea tuturor defectelor n program
este singura tehnic de validare pentru cerine nonfuncionale, deoarece programul trebuie executat pentru a i
se analiza comportamentul
Bug
Bug: termen colocvial utilizat deseori ca sinonim pentru defect
de la dilbert.com
Testarea i depanarea
n
testarea de validare
intenioneaz s arate c produsul nu ndeplinete cerinele
testele ncearc s arate c o cerin nu a fost implementat
adecvat
testarea defectelor
teste proiectate s descopere prezena defectelor n sistem
testele ncearc s descopere defecte
depanarea (debugging)
are ca scop localizarea i repararea erorilor corespunztoare
implic formularea unor ipoteze asupra comportamentului
programului, corectarea defectelor i apoi re-testarea
programului
Asigurarea calitii
Modelul V
Cerine utilizator
Cerine sistem
Module
Testare de acceptan
validare
verificare
Arhitectura sistem
Testare de sistem
Testare unitar
+ multe alte
tipuri de testare
Testare de integrare
IMPLEMENTARE
activiti:
testare
de tip
cutie neagr
Observaii
n
Domeniul de intrri
Ieiri
Exist 4 intrri:
un ntreg pozitiv n
un ir de caractere x
caracterul care se caut c
opiunea de a cuta sau nu un alt caracter s
Intrri i rezultate
Intrri
Rezultatul care trebuie afiat
abc
Afieaz poziia 1;
se cere introducerea unui nou caracter
abc
Afieaz poziia 1
abc
Caracterul nu apare;
se cere introducerea unui nou caracter
abc
Caracterul nu apare
= { (n, x, c, s) | n N_2 }
C_3
= { (n, x, c, s) | n N_3 }
Date de test
Setul de date de test se alctuiete alegndu-se o valoare a intrarilor
pentru fiecare clas de echivalen. De exemplu:
C_111 : (3, abc, a, y)
C_112 : (3, abc, a, n)
C_121 : (3, abc, d, y)
25
Avantaje i dezavantaje
Avantaje
n
Dezavantaje
n
Valori de frontier
Pentru exemplul nostru, odat ce au fost identificate clasele,
valorile de frontier sunt uor de identificat:
valorile 0, 1, 20, 21 pentru n
caracterul c poate s se gseasc n irul x pe prima sau
pe ultima poziie.
Deci se vor testa urmtoarele valori:
N_1 : 1, 20
N_2 : 0
N_3 : 21
C_1 : c_11 se afl pe prima poziie n x, c_12 se afl pe
ultima poziie n x
pentru restul claselor se ia cte o valoare (arbitrar)
Date de test
Astfel, pentru C_111 si C_112 vom alege cte 3 date de test (x
de 1 caracter i x de 20 de caractere n care c se gsete pe
poziia 1 i pe poziia 20), iar pentru C_121 i C_122 cte 2
date de test (x de 1 caracter i x de 20 de caractere). n total
vom avea 12 date de test:
C_111 : (1, a, a, y), (20, abcdefghijklmnoprstu, a, y),
(20, abcdefghijklmnoprstu, u, y)
C_112 : (1, a, a, n), (20, abcdefghijklmnoprstu, a, n),
(20, abcdefghijklmnoprstu, u, n)
C_121: (1, a, b, y), (20, abcdefghijklmnoprstu, z, y)
C_122: (1, a, b, n), (20, abcdefghijklmnoprstu, z, n)
C_2 : (0, _, _, _)
C_3 : (21, _, _, _)
Intrri (tabelar)
Intrri
n
1
x
a
20
abcdefghijklmnoprstu
20
abcdefghijklmnoprstu
20
abcdefghijklmnoprstu
0
21
c
a
a
b
b
a
a
u
u
z
z
s
y
n
y
n
y
n
y
n
y
n
Exemplu - pasul 4
continuare:
3. gsete categoriile (proprieti sau caracteristici
importante) fiecrui parametru sau condiiile de mediu.
4. partiioneaz fiecare categorie n alternative. O alternativ
reprezint o mulime de valori similare pentru o categorie.
5. scrie specificaia de testare. Aceasta const din lista
categoriilor i lista alternativelor pentru fiecare categorie.
6. creeaz cazuri de testare prin alegerea unei combinaii de
alternative din specificaia de testare (fiecare categorie
contribuie cu zero sau o alternativ).
7. creeaza date de test alegnd o singur valoare pentru
fiecare alternativ.
Exemplu - pasul 5
n
1. { n | n < 0 }
2. 0
3. 1
4. 2..19
5. 20
6. 21
7. { n | n > 21 }
[ok, lungime1]
[ok, lungime_medie]
[ok, lungime20]
1. { x | |x| = 1 }
2. { x | 1 < |x| < 20 }
3. { x | |x| = 20 }
[if ok]
2. n
[if ok]
[if ok]
Exemplu - pasul 6
6. Creeaz cazuri de testare (24 de teste)
n1
n2
n3x1c1s1
n3x1c1s2
n3x1c4s1
n3x1c4s2
n4x2c1s1
n4x2c1s2
n4x2c2s1
n4x2c2s2
n4x2c3s1
n4x2c3s2
n4x2c4s1
n4x2c4s2
n5x3c1s1
n5x3c1s2
n5x3c2s1
n5x3c2s2
n5x3c3s1
n5x3c3s2
n5x3c4s1
n5x3c4s2
n6
n7
-5
0
1
1
1
1
5
5
5
5
5
5
5
5
20
20
20
20
20
20
20
20
21
25
a
a
a
a
abcde
abcde
abcde
abcde
abcde
abcde
abcde
abcde
abcdefghijklmnoprstu
abcdefghijklmnoprstu
abcdefghijklmnoprstu
abcdefghijklmnoprstu
abcdefghijklmnoprstu
abcdefghijklmnoprstu
abcdefghijklmnoprstu
abcdefghijklmnoprstu
a
a
b
b
a
a
c
c
e
e
f
f
a
a
c
c
u
u
z
z
y
n
y
n
y
n
y
n
y
n
y
n
y
n
y
n
y
n
y
n
Avantaje i dezavantaje
n
Alin tefnescu
Testare n practic
testare
de tip
cutie alb
do {
System.out.println("Input an integer
between 1 and 20: ");
n = in.readInteger();
} while ( n<1 || n>20 );
6
7
8
Acoperiri
Pe baza grafului se pot defini diverse acoperiri:
n
i alte variante
... continuare
Exemplul continuat
... continuare
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
do {
System.out.println("Input character to search for: ");
c = in.readCharacter();
nl = in.readCharacter();
found=false;
for (i=0; !found && i<n; i++)
if (x[i]==c)
found=true;
if (found)
System.out.println("character +c+
" appears at position "+i);
else
System.out.println("character +c+"
does not appear in string");
System.out.println("Search for
another character? [y/n]: ");
s = in.readCharacter();
nl=in.readCharacter();
} while ((s=='y') || (s==Y'));
}
Intrri
n
Instruciuni parcurse
1..3, 4, 5, 6
7, 6, 8, 9..13
a
a
y
b
24, 9..13
14, 15, 14, 17, 19..20, 21..23
24, 25
Avantaje i dezavantaje
Avantaje
n
Dezavantaje
n
25
1
Rezultatul afiat
cere introducerea unui ntreg ntre 1 i 20
caracterul nu apare
Decizii
Avantaje i dezavantaje
Avantaje
n
Decizii
Condiii individuale
n < 1, n > 20
i<n
found, i < n
if (a[i]==c)
a[i] == c
if (found)
found
(s==y'), (s=='Y')
Dezavantaje
n
Intrri
Rezultatul afiat
Intrri
Rezultatul afiat
25
25
a
b
caracterul nu apare
Acoperirea MC/DC
Un alt exemplu: C = C1 C2 C3
Test
C1
C2
C3
t1
true
true
false
true
t2
false
true
false
false
t3
true
true
false
true
t4
true
false
false
false
t5
true
false
true
true
t6
true
false
false
false
deci {t1, t2, t3, t4, t5, t6} acoper C dpdv MC/DC
Exist ns un set minimal {t1,t2,t4,t5} care acoper C dpdv MC/DC
(t1 i t2 acoper C1; t1 i t4 acoper C2; t4 i t5 acoper C3)
Acoperirea MC/DC
Acoperirea MC/DC
Avantaje:
Test
C1
C2
C1C2
t1
true
true
true
t2
true
false
false
t3
false
true
false
t4
false
false
false
t1 i t3 acoper C1,
t1 i t2 acoper C2,
deci {t1, t2, t3} acoper MC/DC
Modelul V
Cerine utilizator
Cerine sistem
verificare
Arhitectura sistem
Module
Testare de acceptan
validare
Testare de sistem
Testare de integrare
Testare unitar
IMPLEMENTARE
+ multe alte
tipuri de testare
Testare unitar
cu JUnit
un test conine
iniializarea (clasei sau a argumentelor necesare)
apelul metodei testate
decizia (oracolul) dac testul a reuit sau a euat
acesta e foarte important pentru evaluarea automat a
testului
compar valorile produse de metod cu cele corecte
JUnit
Un prim exemplu
import org.junit.*;
import static org.junit.Assert.*;
import java.util.*;
public class Ex1Test {
@Test public void test_find_min_1() {
int[] a = {5, 1, 7};
int res = Ex1.find_min(a);
assertTrue(res == 1);
}
Execuie n consol
>
>
> javac Ex1Test.java
>
> java org.junit.runner.JUnitCore Ex1Test
JUnit version 4.11
Time: 0.005
OK (2 tests)
>
>
...
}
Testarea excepiilor
JUnit poate s testeze diverse alte aspecte, cum ar fi excepiile:
@Test(expected = IndexOutOfBoundsException.class)
public void outOfBounds() {
new ArrayList<Object>().get (1);
}
Exemplul Money
Acum se implementeaz metoda, dar prima oar ne asigurm ca testul eueaz
(pentru a fi siguri ca nu cumva testul s aib succces n orice condiii)
class Money {
public int amount;
private Currency currency;
...
public Money add(Money m) {
return null;
}
}
Exemplul Money
Dup ce testul eueaz, implementm metoda ca mai jos:
Extindem clasa Money cu rata de schimb Euro, dar prima oar n test
public class MoneyTest {
class Money {
public int amount;
private Currency currency;
...
public Money add(Money m) {
return new Money (amount + m.amount, currency);
}
}
Verificm din nou, dar testul eueaz din nou.
class Currency {
Preambulul setUp()
Anumite pri comune pot fi puse n preambulul testelor
(@Before este executat naintea fiecrui test).
public class MoneyTest {
private Currency ron;
private Money m1;
Alte tipuri
de testare
JUnit este unul din reprezentanii cei mai populari a unei clase
de framework-uri numite xUnit:
http://en.wikipedia.org/wiki/XUnit
testarea claselor
automatizarea testrii
testarea bazat pe modele
generarea de teste
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
Exemplu - pasul 6
Exemplu - pasul 6
Exemplu - pasul 6
Exemplu - pasul 6
Models
Test Design
Test Case
Descriptions
Test Implementation
Test Scripts
Model-based
Testing
Test
Data
Alin tefnescu
Depanarea
programelor
Example by Harry Robinson
Test 2
Execute Start
Execute Close
Execute Start
Execute Type A
Execute Delete A
Execute Type A
Execute Delete A
Execute Close
Test 3
Execute Start
Execute Type A
Execute Close
Execute No
Test 4
Execute Start
Execute Type A
Execute Close
Execute Cancel
Execute Delete A
Execute Close
Depanarea n practic
Depanarea (debugging)
n
Un mic exemplu
Ce este un debugger
Funcionalitile de baz ale unui debugger (instrumentul care
ne ajut s identificm problema sau defectul n cod) sunt:
n
Testare
binarySearch( {1,2,3}, 1) == 0
OK
binarySearch( {1,2,3}, 2) == 1
OK
http://www.vogella.com/tutorials/Eclipse/article.html
binarySearch( {1,2,3}, 3) == 2
OK
http://www.vogella.com/tutorials/JUnit/article.html
OK
http://www.vogella.com/tutorials/EclipseDebugging/article.html
Breakpoints
Un breakpoint este o locaie n program care, atunci cnd
este atins, oprete execuia.
n
Depanare
sistematic
Motivaie
n
n exemplul nostru
public static int binarySearch(int array[], int target){
starea programului
int low = 0;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2;
if ( target < array[ mid ] )
high = mid - 1;
else if ( target > array[ mid ])
low = mid + 1;
else
return mid;
}
return -1;
defectul e
undeva aici
timpul
Efectele instruciunilor
n exemplul nostru
int low = 0;
int high = array.length;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1;
else if ( target > array[ mid ])
low = mid + 1;
else
return mid;
}
return -1;
}
mid este data-dependent de instruciunea pe fond galben
Dependene
n exemplul nostru
int low = 0;
int high = array.length;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1;
else if ( target > array[ mid ])
low = mid + 1;
else
return mid;
}
return -1;
}
mid este control-dependent de instruciunea while
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1;
else if ( target > array[ mid ])
low = mid + 1;
else
return mid;
}
return -1;
mid este backward-dependent de instruciunile evideniate la
Urmrirea defectelor
Algoritm de localizarea sistematic a defectelor
n I vom pstra un set de locaii infectate (variabil + contor de program)
n L pstrm locaia curent ntr-o execuie care a euat
1. Fie L locaia infectat raportat de eec i I := {L}
2. Calculm setul de instruciuni S care ar putea conine originea defectului:
un nivel de dependen napoi din L pe calea de execuie
3. Inspectm locaiile L1, , Ln scrise n S i dintre ele alegem ntr-o
mulime M { L1, , Ln } pe cele infectate
4. n cazul n care M (adic cel puin un Li este infectat):
4.1 Fie I : = (I \ {L}) M (nlocuim L cu noii candidai din M)
4.2 Alegem ca noua locaie L o locaie aleatoare din I
4.3 Ne ntoarcem la pasul 2.
5. L depinde doar de locaii neinfectate, deci aici este locul de infectare!
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
n exemplul nostru
int low = 0 ;
int high = array.length ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
Retestare
Dup ce corectm problema gsit, trebuie s testm
n
n exemplul nostru
int low = 0 ;
int high = array.length - 1 ;
int mid;
while (low <= high) {
mid = (low + high)/2 ;
if ( target < array[ mid ] )
high = mid - 1 ;
else if ( target > array[ mid ])
low = mid + 1 ;
else
return mid;
}
return -1;
Simplificarea problemei
Exemplu
O soluie divide-et-impera
1. tiem o jumtate din intrarea testului
B(n)
B(i-1)
B(i+1)
B(n)
cretem granularitatea
ajustm granularitatea
la dimensiunea intrrii
Ciclul de via
al defectelor
http://keepcalmandprogram.me/
Exemplu:
Ciclul de via n Bugzilla
http://www.bugzilla.org/
Srbtori luminoase
alturi de cei dragi!
Clasificarea defectelor
n multe organizaii se folosete o clasificare a defectelor
pe 4 niveluri:
n
Alin tefnescu
Diverse
programmingindotnet.blogspot.com
Prezentare bazat pe materiale de: Florin Leon (TU Iasi), Nigel Goddard (U. Edinburgh),
Software Project Management book, Hughes & Cotterell i altele
imagine de la joblotools.co.uk
metrici
refactorizare
Diverse
licene
management
imagine de la joblotools.co.uk
Refactorizarea
n
metrici
refactorizare
licene
management
imagine de la joblotools.co.uk
Refactorizare (refactoring)
n
Prima factorizare
A treia factorizare
A doua factorizare
cod duplicat
metode lungi
clase mari
i multe altele.
V. i:
http://sourcemaking.com/refactoring
http://en.wikipedia.org/wiki/Code_smell
Optimizarea metodelor
n
extragerea de metode:
Optimizarea claselor
n
extragerea de clase:
de obicei funcionalitatea claselor este extins
Optimizarea claselor
n
mutarea metodelor
cnd o metod din clasa A interacioneaz mult cu
obiectele clasei B, metoda poate fi mutat n clasa B
mutarea cmpurilor
dac un cmp din clasa A este folosit mai des de ctre
metodele clasei B, cmpul poate fi mutat n clasa B
cnd cmpul devine privat, n clasa B trebuie s se
introduc proprieti accesor (get) i/sau mutator (set)
metrici
refactorizare
licene
management
imagine de la joblotools.co.uk
refactorizare
metrici
management
licene
imagine de la joblotools.co.uk
Metrici de implementare
Complexitate ciclomatic
Exemple de metrici:
referitoare la dimensiune
referitoare la complexitate
complexitatea ciclomatic: M = e n + 2p
n = numrul de noduri (n graful asociat programului)
e = numrul de arce
Anvergura (span)
n numrul
variabile
n dac
n anvergura
refactorizare
Internal attributes
metrici
licene
Cyclomatic complexity
Reliability
Program size in lines
of code
Reusability
Number of error
messages
management
Usability
Length of user manual
imagine de la joblotools.co.uk
Drepturile de autor
refactorizare
metrici
management
licene
imagine de la joblotools.co.uk
englez: copyright
Proprietate intelectual
Patente
Tipuri de licene
n au
freeware (gratuit)
open source:
n mai
n durata
n controvers
n extinse
refactorizare
metrici
licene
management
imagine de la joblotools.co.uk
v. http://www.fsf.org/licensing/licenses/lgpl.html
i http://www.fsf.org/licensing/licenses/gpl.html
refactorizare
metrici
management
licene
imagine de la joblotools.co.uk
Proiect
n
un nceput i sfrit
un obiectiv
execuie
un domeniu de aplicare
un buget
se efectueaz o singur dat (nu e ceva repetitiv)
n
Studiu de fezabilitate
Un studiu de fezabilitate atinge urmtoarele aspecte (de obicei
ntr-un document):
n
Obiective
Motivaie
Rezumat
descriere sumar a produsului/serviciului
descriere general a soluiei propuse
descriere general a planului de implementare propus
Planificarea:
Impactul proiectului
beneficii
n
Costuri
categorii de costuri + estimri
analiz cost/beneficiu (Return on Investment - ROI, payback
period)
n
n
constrngerile temporale
diagrame Gantt