Title: Test Structurel de programmes C
1Test Structurel de programmes C à l'aide de la
programmation logique avec contraintes (PLC)
test dintégration
- Karim-Cyril Griche
- LSR/IMAG
2Plan de la présentation
- Introduction
- Choix et objectifs
- Orientation prise modélisation de fonctions
- Comment modéliser?
- Analyse des fonctions appelantes
- Perspectives
3Introduction
- Projet RNTL Inka en partenariat avec Thalès
Systèmes Aéroportés, LIFC, I3S, Axlog - Outil Inka
- Issu de la thèse de Arnaud Gotlieb
- Test structurel unitaire de programme C en
utilisant la PLC - Extension de Inka au test dintégration
- Extension aux flottants (I3S)
- Extension aux pointeurs (LIFC)
4Outil Inka
- Fonctionnement
- Traduit un programme en un ensemble de clauses
prolog (Sicstus) - Réduit cet ensemble de clauses
- Génère des tests visant la couverture
Programme C
Équivalent Prolog
Ensemble réduit
Cas de test
Inka
5Test unitaire
- Test unitaire on remplace les appels de
fonctions par des bouchons
But couverture structurelle de f()
- On doit passer dans la branche THEN du
if...then...else
Condition résultat de g() négatif
- On crée un bouchon bg() qui rend une
valeur négative quelle que soit la valeur de y
6Extension au test dintégration
- Intégration on remplace les bouchons par les
véritables fonctions - Problème Les véritables fonctions ne se
comportent pas comme les bouchons
Lintégration de g() pour la couverture
structurelle de f() empêche le passage dans la
branche THEN du if...then...else
- Détecter les nouveaux chemins impossibles au plus
tôt - Mauvais bouchons ? erreurs dexécution
potentielles ou - masquage derreurs présentes
7Étude bibliographique
- Rares publications
- Essentiellement des méthodologies dintégration
portant sur lordre dintégration des fonctions
dans le logiciel
8Cadre de lintégration dans Inka
- Le test dintégration avec Inka seffectue sur un
ensemble de fonctions complet formant un
sous-système dun logiciel - Pas de notion dordre dintégration
- Objectifs couverture structurelle
9Problématique
- Ce sous-système est représenté sous forme de
contraintes - Inka traduit une fonction C en un ensemble de
contraintes - Un appel de fonction est traduit en un appel à la
clause représentant la fonction - Explosion du nombre de contraintes à traiter si
le nombre dappel de fonctions est trop grand
10Objectifs
- Trouver un moyen de passer à léchelle
- Modéliser les fonctions appelées de manière
réduite - Définir des modèles réalistes
- Moins complexes que les fonctions originales
- Équivalents vis à vis des besoins du test
(génération de données)
11Orientation Spécialisation de fonctions
- Modèles de fonctions optimisés fonctions
originales spécialisées pour leur utilisation
dans le test - Techniques étudiées
- Interprétation abstraite
- Calcul dinvariants
- Slicing intra-procédural
- Découpe dune fonction
- Evaluation partielle
- Spécialisation de fonctions
- Approches heuristiques
12Construction des modèles
- 2 critères Un modèle doit
- être plus simple que les fonctions originales
- Disposer dun modèle exact de chacune des
fonctions - 2ème critère nous a amené à une architecture où
les approximations se superposent
13Plan de la présentation
- Introduction
- Choix et objectifs
- Orientation prise modélisation de fonctions
- Comment modéliser?
- Analyse des fonctions appelantes
- Perspectives
14Heuristiques
- Gestion des appels de fonctions
- Étude de simplification de fonctions basée sur
lélimination de chemins compliqués
15Gestion des appels de fonctions
- Un appel de fonction clause représentant la
fonction - les appels de fonctions sont traités
naturellement - - Mise à plat du système sous test lors de
lintégration - Idée Opérateur de gestion des appels de
fonctions - Limitation de la profondeur de mise à plat
- Développé et en cours dévaluation/calibrage
16Gestion des appels de fonctions
f
g
h
k
i
j
17Heuristique poids sur les branches
- Idée éliminer les branches définies comme
complexes - Définir un poids pour chaque opération/fonction
et pondérer les branches/chemins dune fonction - Introduire un mécanisme de préférence des
branches à faible poids - Quand cest possible, utiliser la branche avec le
poids le plus faible
18Poids sur les branches
Poids faible
Poids très fort
19Plan de la présentation
- Introduction
- Choix et objectifs
- Orientation prise modélisation de fonctions
- Comment modéliser?
- Analyse des fonctions appelantes
- Perspectives
20Analyse des fonctions appelantes
- 3 possibilités
- 1. Un modèle par fonction.
- 2. Un modèle par fonction et par fonction
appelante. - 3. Un modèle par fonction appelée et par appel
dans la fonction appelante.
21Un modèle par fonction
- On remplace tous les appels du sous-système par
un appel au modèle - rapidité de construction
- - modèles moins optimisés
22Un modèle par fonction et par fonction appelante
- On remplace tous les appels à g() dans f() par
des appels à mg() - existe un contexte du modèle
- - modèle général
23Un modèle par fonction appelée et par appel dans
la fonction appelante
- Chaque appel de fonction est remplacé par un
appel au modèle de la fonction pour cet appel. - modèles plus optimisés, contexte précis
- - nombre de modèles
24Un modèle par fonction appelée et par appel dans
la fonction appelante
25Contexte dutilisation
- Besoin dinformation Contexte dutilisation
- Contexte dun appel de fonction donné par la
fonction appelante - Contexte dutilisation défini en 2 parties
- Contexte dappel Information sur les domaines
des variables dentrée de la fonction - Objectifs de génération Information sur
lutilisation faite des résultats de lappel à la
fonction et notamment des branchements qui en
dépendent
26Un contexte dappel
- Un contexte dappel est formé par lensemble des
- chemins depuis le début de f() jusqu à lappel à
g() - Il peut être représenté par un ensemble de
contraintes
27Un objectif de génération
Obj. Gen. Notre modèle doit pouvoir produire
des sorties lt2 et dautres gt2 si cest possible
Int f(int x) ... If (g(y)gt2) ...
else ...
28Perspectives
- Le contexte dappel
- Point de départ au calcul dun invariant sur
domaines de sortie - Utiliser une technique inspirée de lévaluation
partielle pour éliminer certaines parties dune
fonction - Les objectifs de génération
- Envisager le slice dune fonction connaissant
lutilisation qui doit en être faite
29Travaux en cours et perspectives
- Premières expérimentations concluantes
- Définition des poids des heuristiques
délimination de chemins compliqués et évaluation - Prototype implémentant les différentes méthodes
pour évaluer leurs résultats