Vérification de systèmes intégrés - ENSEIRB _________________________________________
Vérification –Assertions & tests unitaires
Cette première séance de TP vise à illustrer les différentes techniques que vous avez pu voir en cours. Toutefois, vous mettrez en pratique ces connaissances et les principes associés que dans le domaine de la conception logicielle. Ce TP s’articule autour de la mise au point et la validation d’une fonction élémentaire. L’utilisation de cette fonction élémentaire possède un avantage et un inconvénient :
- Avantage : vous allez vite vous rendre compte que de vérifier quelque chose de simple n’est pas si simple…
- Inconvénient : certaines techniques que vous allez utiliser vont sembler complexes à mettre en œuvre pour un exemple si trivial. Toutefois, votre expérience devrait vous permettre de relativiser ce sentiment vis a vis des développements que vous réalisez en entreprise.
A la fin de la séance de TP vous devrez remettre à votre encadrant un rapport de TP (manuscrit) détaillant le code écrit et les techniques de vérification employées. Des commentaires pertinents sur ces techniques et leurs intérêts commenteront chacune des questions traitées.
Algorithme de calcul du PGCD de 2 nombres entiers :
FONCTION PGCD( A, B ) TANT QUE A /= B ALORS
SI A > B ALORS A = A – B SINON
B = B – A FIN ALORS FIN TANT QUE RENVOYER A FIN FONCTION
Question 1 : Reprenez l’algorithme de calcul du PGDC et écrivez la fonction C correspondante.
Testez et validez votre code en écrivant une fonction main permettant d’exécuter votre fonction (à l’aide de quelques valeurs de test).
Question 2 : Ecrivez deux fonctions (RandA et RandB) qui permettent de générer aléatoirement des valeurs de A et B (entre 0 à 255) afin d’augmenter le nombre de tests appliqués à votre fonction.
Utilisez ces 2 fonctions afin de tester votre fonction à l’aide de 20 couples de valeurs différentes.
Vérification de systèmes intégrés - ENSEIRB _________________________________________
Question 3 : Mettez en place les mécanismes d’assertion vus en cours. Dans un premier temps vous ne vous préoccuperez que des pré-conditions. Vérifiez que les assertions réalisent bien leur travail.
Vérifiez que lorsque l’on compile le programme en mode « final » ces dernières disparaissent. Quel est l’intérêt de mettre des pré-conditions dans un code ?
Question 4 : Intégrez maintenant toutes les pré-conditions et post-condition possibles dans votre fonction (sans toucher à la partie calculatoire). Quel est l’intérêt de mettre des post-conditions dans un code ? Quelle est la limite de post-conditions ?
Question 5 : Maintenant nous allons considérer que cette fonction ne doit travailler (dans le projet courant) qu’avec des nombres dont les valeurs numériques varient entre 1 et 1025 pour A et 2 et 2049 pour B. Intégrez ces hypothèses dans votre programme et vérifiez votre fonction.
Question 6 : Développez un programme permettant de réaliser des tests unitaires sur la fonction que vous venez de développer. Ces tests unitaires devront couvrir un jeu de tests dont le nombre des données ainsi que les valeurs est laissé à votre appréciation. Développez le code et validez le.
Question 5: Afin de simplifier le test de composants (fonctions) pouvant être utilisés dans plusieurs projets, on utilise souvent des fichiers externes. Ecrivez un programme (main) permettant de lire les valeurs de A et B dans un fichier (texte) et écrivant les résultats dans un autre fichier (texte). Placez les résultats théoriques dans un fichier nommé ref.txt et utilisez la commande diff afin de comparer les résultats théoriques et pratiques.
Remarques : Les valeurs présentes dans le fichier ref.txt sont généralement issues d’une autre version de l’algorithme (code Matlab par exemple). Cette approche permet d’utiliser une « golden model » lors de la conception d’un code d’implantation