Couverture de noyau avec Testwell CTC++
Testwell CTC++ peut analyser la couverture de code au niveau du noyau.Le noyau gère les requêtes E/S (entrées/sorties) du logiciel en les traduisant en instructions de traitement de données pour l´unité de traitement central et pour les autres composants électroniques d´un ordinateur.(source Wikipedia).
Cette fonctionnalité fait partie du module additionnel CTC++ Host-Target. Les mêmes composants et techniques contenus dans CTC++ Host-Target sont utilisés, à la différence que l´environnement cible est le code de l´espace du noyau sur le calculateur hôte lui-même. Le composant de couverture de noyau décrit également et suggère une technique de la manière dont les données du compteur d´exécution collectées peuvent être transférées de l´espace noyau vers l´espace utilisateur.
Mesurer la couverture du code de l´espace noyau est généralement un défi pour les outils de couverture basés sur de l´instrumentation. Dans le code de l´espace du noyau les sondes instrumentées ne peuvent utiliser aucune fonction de librairies ou d´appels système alors que cela est possible au niveau de l´espace utilisateur. La méthode de Testwell CTC++ pour implémenter cette instrumentation et son support de la couche temps-réel suppose du code C de base sans utilisation des services système. Ainsi il peut être exécuté sans problème dans l´espace noyau.
En tant que validation de principe pour la couverture de noyau, nous avons instrumenté un noyau Linux complet sur lequel nous avons exécuté une suite de tests dédiés. Nous allons décrire ici le cas déutilisation. Vous pouvez également visualiser la rapport de couverture de CTC++ qui en résulte.
Le point départ fut un noyau Linux 2.4.0, constitué de 227 fichiers de code C (158000 lignes de source) plus les fichiers d´en-tête nécessaires. A l´origine leur compilation demandait 9 minutes environ (pendule au mur) résultant dans un noyau de 545 kO.
Après instrumentation de ces 227 fichiers de code (le niveau le plus étendu de CTC++, l´instrumentation de couverture pour le mode "multicondition" étant choisi) et après la compilation des fichiers instrumentés, cela demanda environ 16 minutes (+78%). Le noyau instrumenté obtenu représentait 916 kO (+68%). [Résultats obtenus à partir d´images compressées, en comparant les images non compressées, l´accroissement de la taille était de 44%.]
La suite de test du noyau Linux disponible publiquement depuis Hewlett Packard Enterprise version ltp-20001012 a été exécutée à la fois avec la version originale non instrumentée et la version instrumentée. Aucun ralentissement détectable par un humain n´a été observé. En mesurant à l´aide de time(1) il apparait que 16% de temps supplémentaire était passé dans le noyau instrumenté par rapport au noyau original exécutant la même suite de tests.
La suite de tests par elle même n´apporta pas un niveau de couverture de test très élevé sur ces 227 fichiers C. Booter et se connecter (login) représentent déjà 21% et l´exécution de la suite de tests l´a augmenté entre 4% à 25%. Le pourcentage de couverture en l´occurrence n´est pas important ici (et CTC++ n´a aucun contrôle dessus). Démontrer la possibilité d´instrumenter par Testwell CTC++ un noyau complet était le véritable objectif, même dans ses parties temporelles critiques, tout en montrant que le profil d´exécution pouvait être obtenu.
Cette exercice vous donnera également une idée du surcout (très faible) quéentraine Testwell CTC++ pour les temps d´instrumentation/compilation, ainsi que sur la taille et la performance de l´exécutable instrumenté. Même si nous avons utilisé l´instrumentation de manière à ce que le surcout de CTC++ soit maximal, il reste raisonnable. Il se peut également que nous ne soyons intéressés que par certains des fichiers C parmi les 227 ou bien par un niveau d´instrumentation plus faible que "multicondition", auquel cas ces surcouts seraient encore plus faibles.
Voir le rapport CTC++ de couverture de noyau de cet exercice. Deux fenêtres de navigation sont ouvertes, avec deux cadres dans chaque. Le cadre de gauche de la première fenêtre montre les synthèses de couverture au niveau fichier. En cliquant sur un nom de fichier, le cadre de droite se focalise sur le fichier sélectionné en vous donnant un zoom des fonctions. En cliquant les liens du cadre de droite verra le deuxième fenêtre se focaliser sur le profil d´exécution détaillée du fichier ou de la fonction concerné. Enfin, dans le cadre de droite de la deucième fenêtre vous pouvez voir le fichier source original. Le cadre supérieur montre l´ensemble des 227 fichiers. Les autres cadres contiennent chacun 8 fichiers C, ce qui signifie que vous devez démarrer la navigation depuis le cadre supérieur afin de voir les fichiers éloignés du contexte courant.