19 | | * Active: on utilise d'importants jeux de test pour valider l'application. |
20 | | * Localiser la source du bogue. |
21 | | - C'est l'étape la plus difficile. La source du dysfonctionnement n'est pas forcemment la même que la source des symptômes. La méthode la plus courante consiste à tester de manière itérative: on vérifie les fonctionnalités les unes après les autres. |
22 | | * Identifier la cause d'un bogue. |
23 | | - Une fois le problème localisé il est important d'en déterminer la cause. En effet on peut constater qu'une valeur est fausse mais l'origine de cette valeur peur provenir d'une autre autre portion de l'application à tester. |
24 | | * Ecrire le correctif pour le bogue. |
25 | | - La difficulté dépend fortement du type de bogue. Cette étape est simple dans le cas d'une erreur d'inattention, elle peut s'avérer très complexe quand le bogue est lié à une mauvaise architecture de l'application. |
26 | | * Corriger et tester l'application. |
27 | | - Il faut ici vérifier que le correctif supprime le bogue et n'en apporte pas de nouveaux. Il est pour cela préférable d'utiliser des tests anti régression. |
| 21 | * Active: on utilise des scénarios (ou ''jeux de test''), en essayant de maximiser le ''taux de couverture'', en activant le maximum de fonctionnalités du circuit ou du système analysé. |
29 | | = Circuit Am2901 = |
| 23 | 1. Identifier un comportement anormal |
| 24 | La simulation d'un système soumis à une séquence de stimuli définit une séquence d'événements ordonnés par dates croissantes. Dans un système complexe, il n'est pas possible de vérifier toutes les valeurs de tous les signaux à tous les cycles, et on se contente d'observer certains signaux à certains instants. Par exemple, dans un système intégré sur puce contenant un coeur de processeur exécutant du code binaire stocké dans une mémoire embarquée sur la puce, on commencera par observer les valeurs affichées par le processeur sur un terminal. Dans ces conditions, il peut y avoir un retard important (plusieurs dizaines, ou plusieurs milliers de cycles) entre le moment où apparaissent les premiers symptômes observables du dysfonctionnement (affichage d'une valeur erronée), et le moment ou le système a commencé à dévier de son comportement ''normal''. On commence par vérifier que le dysfonctionnement est reproductible, et qu'en relançant la simulation, on observe le même comportement anormal. |
| 25 | |
| 26 | 1. Remonter à la cause du dysfonctionnement |
| 27 | C'est la partie la plus délicate. On sait qu'à une certaine date T1 (en pratique à un certain cycle), le système est dans un état anormal, mais on ne sait généralement pas à partir de quel cycle le système a commencé à ''dérailler''. Il faut donc ''remonter le temps'' pour déterminer la date précise TC à partir de laquelle le système à quitté son fonctionnement normal pour entrer dans un état anormal. Pour cela, il faut commencer par retrouver un état normal du système, à une date T0, la plus tardive possible, mais évidemment antérieure à T1. Quand on a déterminé les deux dates T0 et T1 Il faut analyser - cycle par cycle- le comportement du système entre T0 et T1 pour déterminer l'instant exact le système passe |
| 28 | d'un état normal au cycle TC (l'état est défini par les valeurs stockées dans les registres), à un état anormal au cycle TC+1. |
| 29 | |
| 30 | 1. Analyser la cause du dysfonctionnement |
| 31 | Lorsqu'on a déterminer l'instant TC, il est généralement assez facile de détarminer la cause du dysfonctionnement du matériel, en analysant les fonctions de transition des |
| 32 | différents automates impliqués dans le fonctionnement du système. |
| 33 | |
| 34 | 1. Corriger le bogue |
| 35 | Il faut prendre le temps de réfléchir sur la bonne façon de corriger le bogue, car il arrive souvent que la soi-disant ''correction'' d'un bogue introduise un autre dysfonctionnement. Il faut donc relancer la simulation sur l'ensemble des scénarios définis à l'étape 1, et pas seulement le scénario qui a mis en évidence le bogue corrigé. C'est ce qu'on appelle un test de ''non régression''. |
| 36 | |
| 37 | = C) Circuit Am2901 = |