Title: Plan
1Plan
- Problématique du test
- Rappels test de logiciel
- Test de composants unitaires OO
- Test d'intégration
- Test système
- Diagnostic
2Test dintégration pour des systèmes à objets
- Yves Le Traon
- yletraon_at_irisa.fr
- Yves.letraon_at_francetelecom.com
3Plan
- Problématique du test
- Rappels test de logiciel
- Test de composants unitaires OO
- Test d'intégration
- Lintégration approches classiques
- Le test dintégration de classes par lexemple
- Lapproche à objets et lintégration
- Modélisation et stratégies dordonnancement
- Test système
- Diagnostic
4Plan
- Problématique du test
- Rappels test de logiciel
- Test de composants unitaires OO
- Test d'intégration
- Lintégration approches classiques
- Le test dintégration de classes par lexemple
- Lapproche à objets et lintégration
- Modélisation et stratégies dordonnancement
- Test système
- Diagnostic
54.1. Lintégration approches classiques
6Contexte
- Réalisation dune bonne stratégie
- pour planifier lintégration des systèmes à
objets, - le plus tôt possible dans le cycle de vie,
- en minimisant le coût du test.
7Test dintégration
- Objectif
- Vérifier linteraction entre unités (méthode,
classe ou package). - Difficultés principales de lintégration
- Interfaces floues (ex. ordre des paramètres de
même type). - Implantation non conforme à la spécification (ex.
dépendances entre unités non spécifiées). - Réutilisation dunités (ex. risque dutilisation
hors domaine).
8Architecture de dépendances
9Intégration Approches classiques
- On obtient une architecture arborescente
- SADT, SART, SAO (Aérospatiale)
- Approches
- Big-Bang non recommandé
- De haut en bas (top-down)
- De bas en haut (bottom-up)
10Approche classique De haut en bas
11Approche classique De bas en haut
12Plan
- Problématique du test
- Rappels test de logiciel
- Test de composants unitaires OO
- Test d'intégration
- Lintégration approches classiques
- Le test dintégration de classes par lexemple
- Lapproche à objets et lintégration
- Modélisation et stratégies dordonnancement
- Test système
- Diagnostic
134.2. Le test dintégration de classes par
lexemple
14Intégration
- But tester les interactions entre classes
- Lien entre test dintégration et unitaire
- il faut ordonner les classes pour le test
- Il faut identifier les dépendances entre classes
- Problème dans le cas de cycles de dépendances
15Cas simple un graphe acyclique
Ordre partiel pour le test F, (C, D), E, B, A
16Étape 1
17Étape 2
18Étape 3
19Étape 4
20Étape 5
21Cas moins simple présence de cycles
22Intégration avec cycles
- Il faut casser les cycles
- développer des simulateurs de classes ( bouchon
de test ou stub ) - un simulateur a la même interface que la classe
simulée, mais a un comportement contrôlé - Exemple
23Exemples de stub
/ Creates an account for the person named
name If no client has this name, a new client
object is created and is added to the list of
clients, then the account is created If the
client exists the account is created, added to
the bank's and the client's list of accounts
/ public int addAccount(String name, float
amount, float overdraft) this.accountNumbers
Person p getClient(name) //if a client
named name already exists in the bank's set of
clients if (p!null) Account a new
Account(p, amount, overdraft, accountNumbers)
p.addAccounts(a) this.addAccounts(a) //
if the client does not exist, add it tp the
bank's list of clients and create
account else Person client new
Person(name) this.addClients(client) Accou
nt a new Account(client, amount, overdraft,
accountNumbers) client.addAccounts(a) this
.addAccounts(a) return
accountNumbers
24Exemples de stub
Stub 1 / Creates an account for the
person named name If no client has this name,
a new client object is created and is added
to the list of clients, then the account is
created If the client exists the account is
created, added to the bank's and the client's
list of accounts / public int
addAccount(String name, float amount, float
overdraft) return 0
Stub 2 / Creates an account for the
person named name If no client has this name,
a new client object is created and is added
to the list of clients, then the account is
created If the client exists the account is
created, added to the bank's and the client's
list of accounts / public int
addAccount(String name, float amount, float
overdraft) return 1
25Exemples de stub
/ Looks for a person named name in the set
of clients. Returns the Person object
corresponding to the client if it exists
Returns null if there is no client named name
/ public Person getClient(String name)
Iterator it this.clientsIterator() while
(it.hasNext()) Person p (Person)it.next()
if(p.getName()name) return
p return null
26Exemples de stub
Stub 1 / Looks for a person named name
in the set of clients. Returns the Person
object corresponding to the client if it exists
Returns null if there is no client named name
/ public Person getClient(String name)
return null
Stub 2 / Looks for a person named name
in the set of clients. Returns the Person
object corresponding to the client if it exists
Returns null if there is no client named name
/ public Person getClient(String name)
return new Person(toto)
27Exemple Banque
- Exemple, pour tester en présence de ce cycle
Regarder quelles sont les méthodes de Person
utilisées par Account
public class Person / Initializes the
name of the person with the param n Creates
a new vector to intialize the acounts set
/ public Person(String n) name n
accounts new Vector() public String
getName()return name
Stub de la classe Person public class Person
/ Initializes the name of the person with
the param n Creates a new vector to
initialize the accounts set / public
Person(String n) public String
getName()return (toto)
28Exemple Banque
- Etape 1
- Tester la classe Account avec le stub de Person
- Etape 2
- Tester la classe Person avec Account
- Etape 3
- Retester la classe Account avec la vraie classe
Person
29Plan
- Problématique du test
- Rappels test de logiciel
- Test de composants unitaires OO
- Test d'intégration
- Lintégration approches classiques
- Le test dintégration de classes par lexemple
- Lapproche à objets et lintégration
- Modélisation et stratégies dordonnancement
- Test système
- Diagnostic
304.3. Lapproche à objets et lintégration
31() Cycle de vie en spirale
Synergie avec approche par objets
32Test unitaire et dintégration
- Classiquement
- Étapes séparées
- Dans un cycle en spirale
- Un composant unitaire ne peut pas être testé hors
de son contexte dexécution - gt conséquence test unitaire et test
dintégration sont des activités inséparables
33Efficient Strategies for Integration and
Regression Testing of OO Systems
- The problem domain Use OO modeling for early
Test Planning - Integration
- deduced from UML models
- to master integration cost and duration
- Regression
- separation of reusable tests from implementation
- the test model must be refinable with design
refinement stages.
34Efficient Strategies for Integration and
Regression Testing of OO Systems
- A OO test model must
- be as simple as possible
- easy to understand
- limited to its purpose
- catch all the information concerning test
- test dependencies between components
- from a rough to a precise level of detail
- (class method)
- determine design parts due to implementation
choices - test cases reuse
- test cases enhancement with system evolution
Integration
Regression
35Efficient Strategies for Integration and
Regression Testing of OO Systems
- Integration plan - What we have to deal with...
Where to begin with ? How to organize test ?
problem interdependencies loops of
dependencies between components into an
architecture
36Efficient Strategies for Integration and
Regression Testing of OO Systems
- A simple solution, with constraints on the design
- no loops in an architecture
- often possible
- but local optimizations are not always optimal
for the architecture - but designing interdependent components may also
be relevant - The solution presented here
- takes any model
- optimizes the way to deal with loops of
interdependent components
37Interdépendance
- Interdépendances
- Cycle de dépendances
- Composantes fortementconnexes (CFC)
- Intégration
- Big-Bang
- Décomposer des CFCs Utilisation de bouchons
38Décomposition des CFCs Bouchon
- Bouchon une unité qui
- simule le comportement dune unité
- évite lutilisation des services dautres unités
de la même CFC.
39Efficient Strategies for Integration and
Regression Testing of OO Systems
- Integration Testing
- Based on a TDG, how to order components ?
- Minimizing the number of stubs
- realistic stub gt dedicated simulator, old
component
C stub simulates the behavior of C when A and B
are tested
40Efficient Strategies for Integration and
Regression Testing of OO Systems
- Minimizing the number of stubs
- specific stub gt deterministic component behavior
A stub for A and a stub for B
41Plan
- Problématique du test
- Rappels test de logiciel
- Test de composants unitaires OO
- Test d'intégration
- Lintégration approches classiques
- Le test dintégration de classes par lexemple
- Lapproche à objets et lintégration
- Modélisation et stratégies dordonnancement
- Test système
- Diagnostic
424.4. Modélisation et stratégies dordonnancement
43Problème de test dintégration
- Modéliser la structure de dépendances
- Décomposer des composantes fortement connexes en
minimisant le coût de création des bouchons - Planifier le test.
44- Modélisation et algorithmes dordonnancement
45Efficient Strategies for Integration and
Regression Testing of OO Systems
- The Test Dependency Graph
- preliminary modeling
- inheritance
- Two basic types of test dependencies
- client/provider
- Contractual dependencies
- specified in the public part of classes
- included in the body of internal methods
- Implementation dependencies not contractual ones
46Efficient Strategies for Integration and
Regression Testing of OO Systems
The Test Dependency Graph preliminary modeling
- 2 types of nodes
- class node
- method node
47Efficient Strategies for Integration and
Regression Testing of OO Systems
The Test Dependency Graph preliminary modeling
- 3 types of edges
- class_to_class
- method_to_class
- method_to_method
48Efficient Strategies for Integration and
Regression Testing of OO Systems
Method_to_class
A ... mA1(...v1 B...) mA2(v
A) ...
B
A
mA1
mA2
refinement
Method_to_method
A mA1(...v B...) v.mB1 mA2(...v
A...) v.mA1
B
A
mA1
mB1
mA2
an action language (ASL/OCL) code level
49Efficient Strategies for Integration and
Regression Testing of OO Systems
A
A
B
B
aggregation
composition
50Modélisation statique 1/2
B
B
A
A
h
A
A
Une classe
Un nœud
A
A
A
A
A
A
A
A
A
A
B
B
B
B
B
B
B
B
B
B
51Modélisation statique 2/2
A
A
B
B
A
A
B
B
B
A
A
B
T
A
bind
AB
A
A
A
ltBgt
B
B
B
B
52Modélisation dynamique
C
A
C
A
C
A
C
A
h
h
h
h
B
B
B
B
A abstract
BA
A
F
CA
F
E
et
E
DA
B
C
D
53Éliminer les doublons
A
A
A
A
h
h
B
B
B
B
A
A
A
A
B
B
B
B
54Efficient Strategies for Integration and
Regression Testing of OO Systems
D
E
D - pD1(v1E, v2 F)
A
E
mA1(v1 C) . pA1()
A
F
F
pA1
C
C
mA1
B mB1(v1 C) -pB1(v C) -pB2(v
G) . redefine pA1
H
B
pA1
mB1
pB1
G
G
H
pB2
Implementation dependency
Client contractual dependency
Inheritance contractual dependency
55Efficient Strategies for Integration and
Regression Testing of OO Systems
56Efficient Strategies for Integration and
Regression Testing of OO Systems
57Efficient Strategies for Integration and
Regression Testing of OO Systems
- An efficient strategy (1)
Optimal ordering gt NP-complete complexity n!
58Efficient Strategies for Integration and
Regression Testing of OO Systems
- An efficient strategy (2)
a
B
f
Tarjans algorithm
b
i
g
e
c
j
h
d
k
l
A
C
(e) or C
A or B
(a)
then
then
Complexity linear with nodes
59Efficient Strategies for Integration and
Regression Testing of OO Systems
- An efficient strategy (3)
5
f
Bourdoncles algorithm
f
i
4
i
Candidate node max(fronds)
g
j
3
j
g
h
h
2
1
B
(e) or C
A or B
(a)
then
then
Break the connected component Reapply Tarjan
g, h, j, i, f
c, b, d
l, k
60Efficient Strategies for Integration and
Regression Testing of OO Systems
- Result a partial ordered tree
- all possible strategies
g
Optimized algorithm
d
specific stubs 4
realistic stubs 3
Random selection
k
specific stubs 9.9
Partial ordered tree
realistic stubs 5
61Exo
- Plan de test dintégration pour
A
E
C
B
62Cases Studies
- SMDS
- Telecommunication Switching System Switched
Multimegabits Data Service - running on top of connected networks such as the
Broadband Integrated Service Digital Network
(B-ISDN) - based on the asynchronous transfer mode (ATM).
- 22 Kloc
- Gnu Eiffel Compiler
- open-source Eiffel compiler
- 70 Kloc of Eiffel code
- (http//SmallEiffel.loria.fr)
63Case study SMDS UML diagram
64Case study SMDS Test Dependency Graph
65SMDS realistic stubs
66 67Efficient Strategies for Integration and
Regression Testing of OO Systems
- A comparison with
- 4 strategies
- RC Random Components selection
- MC Most Used Components
- RT Random Thread of Dependencies
- MT Most Used Components Threads of Dependencies
(intuitive integration) - 100 000 times for random strategies
68Efficient Strategies for Integration and
Regression Testing of OO Systems
60
48
47
50
39
38
36
40
34
Min
28
27
26
26
26
30
stubs
25
Mean
20
20
20
Max
20
10
0
RC
MC
RT
MT
Optim.
Strategies
69Efficient Strategies for Integration and
Regression Testing of OO Systems
35
30
29
30
27
25
24
25
21
Min
18
19
19
19
19
20
stubs
Mean
13
15
Max
9
9
9
10
5
0
RC
MC
RT
MT
Optim.
Strategies
70Results summary
71Variantes possibles
- Mixte Big-Bang/Incrémental strict
- Planifier aussi le contexte dont on dépend
(Pascale Thévenod)
72Subsystem that can be integrated in one block
(would need at least 1 stub)
Remaining part of the system
73- Mixte Big-Bang/incrémental strict
A
E
C
B
74Mixte Big-Bang/incrémental strict
- 3 classes par composante problème NP-complet
encore !
D
A
E
C
B
75Mixte Big-Bang/incrémental strict
D
A
E
C
F
B
H
I
G
76Mixte Big-Bang/incrémental strict
77Efficient Strategies for Integration and
Regression Testing of OO Systems
- A new problem
- Testing Resources Optimal Repartition
- Using the partial ordered tree (acyclic)
- Assumption a tester needs 1 time unit to
integrate 1 component - to simplify presentation
- Heuristic to reduce integration duration
78Property
Minimum steps gtmax (A, B)
A longest_path B nb_nodes/nb_testers 1
4 testers 37 nodes max length 8 Minimum steps
10
10
79Efficient Strategies for Integration and
Regression Testing of OO Systems
A Test Resources Driven example SMDS
An optimal solution components
steps testers 20 33 18 6 1 4 14 22 27 16 2
4 1 25 7 17 3 4 24 12 2 3 4 4 15 13 29 37 5 4 31
10 34 28 6 4 21 19 9 32 7 4 8 30 36 5 8 4 26 35 4
11 9 4 23 10 1
Reaches the optimal
80Efficient Strategies for Integration and
Regression Testing of OO Systems
A Delay Driven example GNU Eiffel
7
- Allocate the needed resources to obtain the
minimum integration duration at least (88 div 7
1 ) 13 testers -
- Minimum delay 7 steps
6
1
5
3
4
2
81Efficient Strategies for Integration and
Regression Testing of OO Systems
A Delay Driven example GNU Eiffel
7 steps Optimum delay
82Efficient Strategies for Integration and
Regression Testing of OO Systems
- Conclusions
- an adapted test model
- Test Dependency Graph
- efficient algorithms
- for early stage test planning (UML)
- integration
- non-regression
- evolving with design evolution
- test economics criterion (early repartition of
testing resources)