Testing and maintenance · Tests et maintenance
| English | Français |
|---|---|
| run-time error/rʌn taɪm ˈerə/ | erreur d'exécution |
| syntax error/ˈsɪntæks ˈerə/ | erreur de syntaxe |
| logic error/ˈlɒdʒɪk ˈerə/ | erreur logique |
| dry run/draɪ rʌn/ | exécution manuelle |
| walkthrough/ˈwɔːkθruː/ | réunion de revue |
| white-box testing/waɪt bɒks ˈtestɪŋ/ | test en boîte blanche |
| black-box testing/blæk bɒks ˈtestɪŋ/ | test en boîte noire |
| integration testing/ˌɪntɪˈɡreɪʃn ˈtestɪŋ/ | test d'intégration |
| stub/stʌb/ | faux |
| alpha testing/ˈælfə ˈtestɪŋ/ | test alpha |
| beta testing/ˈbiːtə ˈtestɪŋ/ | test bêta |
| acceptance testing/əkˈseptəns ˈtestɪŋ/ | test d'acceptation |
| test strategy/test ˈstrætədʒi/ | stratégie de test |
| test plan/test plæn/ | plan de test |
| normal data/ˈnɔːml ˈdeɪtə/ | données normales |
| abnormal data/əbˈnɔːml ˈdeɪtə/ | données anormales |
| extreme data/ekˈstriːm ˈdeɪtə/ | données extrêmes |
| boundary data/ˈbaʊndəri ˈdeɪtə/ | données aux limites |
| corrective maintenance/kəˈrektɪv ˈmeɪntənəns/ | maintenance corrective |
| adaptive maintenance/əˈdæptɪv ˈmeɪntənəns/ | maintenance adaptative |
| perfective maintenance/pəˈfektɪv ˈmeɪntənəns/ | maintenance perfective |
| regression testing/rɪˈɡreʃn ˈtestɪŋ/ | test de régression |
Thirty-seven seconds
- On 4 June 1996 the first Ariane 5 rocket lifted off from French Guiana. Thirty-seven seconds later it veered off course and destroyed itself. The payload was four satellites worth $370 million.
- The cause was one line of code, reused from Ariane 4, that converted a 64-bit number into a 16-bit integer. Ariane 5 flew faster, the number was bigger, and the conversion overflowed: a run-time error 运行时错误 in a routine that was not even needed after lift-off.
- The code had never been tested with Ariane 5's flight data. Nobody had chosen test data at the extremes of the new rocket's range.
- This lesson is the three kinds of error, the methods of testing, how to choose test data, and how a program is kept alive after release.
Trente-sept secondes
- Le 4 juin 1996, le premier lanceur Ariane 5 s'est envolé depuis la Guyane française. Trente-sept secondes plus tard, il a dévié de sa trajectoire et s'est autodétruit. La charge utile valait 370 millions de dollars pour quatre satellites.
- La cause était une seule ligne de code, réutilisée depuis Ariane 4, qui convertissait un nombre de 64 bits en entier de 16 bits. Ariane 5 volait plus vite, le nombre était plus grand, et la conversion a débordé : une erreur d'exécution 运行时错误 dans une routine qui n'était même plus nécessaire après le décollage.
- Le code n'avait jamais été testé avec les données de vol d'Ariane 5. Personne n'avait choisi des données de test aux extrêmes de la nouvelle plage du lanceur.
- Cette leçon porte sur les trois types d'erreurs, les méthodes de test, comment choisir des données de test, et comment maintenir un programme en vie après sa sortie.
Three kinds of error
- A syntax error 语法错误 breaks the grammar of the language: a missing bracket, a misspelled keyword. It is found at translation, so the program will not run until it is fixed.
- A run-time error happens while the program runs: division by zero, a file that does not exist, an array index out of range. The program crashes or raises an exception; the fix is a check before the risky operation.
- A logic error 逻辑错误 lets the program run and produce wrong results:
+for-, an off-by-one loop, conditions in the wrong order. Nothing flags it; only testing and tracing reveal it.
Found at translation, found at run time, found only in the output
Trois types d'erreurs
- Une erreur de syntaxe 语法 error brise la grammaire du langage : une parenthèse manquante, un mot-clé mal orthographié. Elle est détectée lors de la traduction, donc le programme ne peut pas tourner tant qu'elle n'est pas corrigée.
- Une erreur d'exécution survient pendant l'exécution du programme : division par zéro, fichier inexistant, indice de tableau hors limites. Le programme plante ou lève une exception ; la correction consiste à ajouter une vérification avant l'opération risquée.
- Une erreur logique 逻辑错误 permet au programme de tourner et de produire des résultats faux :
+pour-, une boucle hors par un (off-by-one), des conditions dans le mauvais ordre. Rien ne la signale ; seuls les tests et le traçage la révèlent.

Trouvée lors de la traduction, trouvée à l'exécution, trouvée uniquement dans la sortie
Match each kind of error to how it shows up. · Reliez chaque type d'erreur à sa manifestation.
Syntax = caught at translation; logic = wrong output; run-time = crash while running. · Syntaxe = capturé à la traduction ; logique = sortie incorrecte ; exécution = plantation pendant l'exécution.
Worked example: find and correct the errors
- Syntax: the
IFhas noENDIF. The translator rejects it. Run-time: ifCountis 0 the division fails; guard it withIF Count > 0 THEN. Logic: if a pass is 50 or more,> 50fails a student on exactly 50; it should be>= 50. - Name the type, say why it is that type, and give the correction. Three parts, three marks.
Exemple résolu : trouver et corriger les erreurs
Total ← 0
FOR i ← 1 TO Count
Total ← Total + Marks[i]
NEXT i
Average ← Total / Count
IF Average > 50 THEN
OUTPUT "Pass"
- Syntaxe : le
IFn'a pas deENDIF. Le traducteur le rejette. Exécution : siCountest 0, la division échoue ; la protéger avecIF Count > 0 THEN. Logique : si une note est de 50 ou plus,> 50refuse un élève ayant exactement 50 ; elle devrait être>= 50. - Nommer le type, expliquer pourquoi c'est ce type, et donner la correction. Trois parties, trois points.
A program divides a total by the number of entries and crashes when the input file is empty. This is a: · Un programme divise un total par le nombre d'entrées et plante lorsque le fichier d'entrée est vide. C'est une :
Division by zero happens while the program runs and stops it. A guard such as IF Count > 0 fixes it. · La division par zéro se produit pendant l'exécution du programme et l'arrête. Un garde tel que SI Count > 0 le corrige.
Testing methods: reading the code
- A dry run 手工跟踪 traces the code on paper, writing each variable's value in a trace table after each line.
- A walkthrough 走查 is a team review: the programmer explains the code line by line while colleagues look for faults.
- White-box testing 白盒测试 designs tests from the code's internal structure, so that every statement, branch and loop is exercised. Black-box testing 黑盒测试 designs tests from the specification only: feed inputs, compare the outputs with what was expected, without looking at the code.
Outside looking in, or inside looking at every path
Méthodes de test : lire le code
- Un test sec 手工跟踪 trace le code sur papier, écrivant la valeur de chaque variable dans un tableau de traçage après chaque ligne.
- Un walkthrough 走查 est un examen d'équipe : le programmeur explique le code ligne par ligne tandis que les collègues cherchent les fautes.
- Le test blanc 白盒测试 conçoit des tests à partir de la structure interne du code, afin que chaque instruction, branche et boucle soit exécutée. Le test noir 黑盒测试 conçoit des tests uniquement à partir de la spécification : fournir des entrées, comparer les sorties avec ce qui était attendu, sans regarder le code.

Dehors regardant vers l'intérieur, ou dedans regardant chaque chemin
Designing test cases from the specification only (inputs and expected outputs), ignoring the code inside, is called ______-box testing. · Concevoir des cas de test à partir de la spécification uniquement (entrées et sorties attendues), en ignorant le code interne, s'appelle le test en boîte _____.
Black-box tests from the spec; white-box uses the code's internal structure to cover statements and branches. · Tests en boîte noire tirés de la spécification ; la boîte blanche utilise la structure interne du code pour couvrir les instructions et les branches.
Testing methods: assembling and releasing
- Integration testing 集成测试 combines modules that were tested separately and tests the interfaces between them. A stub 桩 stands in for a module that is not yet written, returning fixed values so the rest can be tested top-down.
- Alpha testing α测试 is done in-house by the developers before release. Beta testing β测试 gives a limited group of real users the program in their own environment.
- Acceptance testing 验收测试 is done by the customer, against the requirements, to decide whether the product is fit for purpose.
Méthodes de test : assembler et publier
- Le test d'intégration 集成测试 combine des modules testés séparément et teste les interfaces entre eux. Un stub 桩 remplace un module non encore écrit, retournant des valeurs fixes pour que le reste puisse être testé top-down.
- L'alpha testing α测试 est effectuée en interne par les développeurs avant la publication. Le beta testing βtest donne un groupe limité d'utilisateurs réels le programme dans leur propre environnement.
- Le test d'acceptation 验收测试 est effectué par le client, selon les exigences, pour décider si le produit est apte à l'usage.
Software process lab · Laboratoire de processus logiciel
Classify development examples by the stage or tool they belong to. · Classez les exemples de développement par étape ou outil auquel ils appartiennent.
Worked example: which method for which situation
- The reporting module is finished but the database module it calls does not exist yet: test it with a stub that returns fixed data.
- Two modules pass their own tests but fail when the output of one feeds the other: integration testing of the interface.
- The software is complete; the company wants faults found in real conditions before general release: beta testing by a limited group of users.
- The customer decides whether to pay: acceptance testing against the agreed requirements. Name the method and what it is for.
Exemple résolu : quelle méthode pour quelle situation
- Le module de reporting est terminé mais le module de base de données qu'il appelle n'existe pas encore : le tester avec un stub qui retourne des données fixes.
- Deux modules passent leurs propres tests mais échouent lorsque la sortie de l'un alimente l'autre : test d'intégration de l'interface.
- Le logiciel est complet ; l'entreprise veut que des défauts soient trouvés dans des conditions réelles avant la mise en production générale : beta testing par un groupe limité d'utilisateurs.
- Le client décide de payer : test d'acceptation selon les exigences convenues. Nommer la méthode et son objectif.
Match each situation to the testing method it needs. · Reliez chaque situation à la méthode de test nécessaire.
Stub for a missing part, beta for real users, acceptance for the customer, integration for the joins. · Bouchon pour une partie manquante, bêta pour les vrais utilisateurs, acceptation pour le client, intégration pour les connexions.
Test strategy and test plan
- A test strategy 测试策略 is the high-level approach: which kinds of testing will be done, by whom, when, and what must pass before the next stage.
- A test plan 测试计划 is the detailed list of tests. For each: the purpose, the input data, the expected output, and a column for the actual output when the test is run.
- A test without an expected result is not a test. It only shows what the program did, not whether that was right.
Stratégie et plan de test
- Une stratégie de test 测试策略 est l'approche de haut niveau : quels types de tests seront effectués, par qui, quand, et quoi doit passer avant l'étape suivante.
- Un plan de test 测试计划 est la liste détaillée des tests. Pour chacun : l'objectif, les données d'entrée, la sortie attendue, et une colonne pour la sortie réelle lors de l'exécution du test.
- Un test sans résultat attendu n'est pas un test. Il ne montre seulement ce que le programme a fait, pas si c'était correct.
A test plan lists, for each test, the input data and the expected output. · Un plan de test liste, pour chaque test, les données d'entrée et la sortie attendue.
Purpose, input, expected output and a column for the actual output. The strategy is the high-level approach; the plan is the detailed list. · Objectif, entrée, sortie attendue et colonne pour la sortie réelle. La stratégie est l'approche de haut niveau ; le plan est la liste détaillée.
Choosing test data
- Normal data 正常数据: typical valid values inside the range, which should be accepted and processed correctly.
- Abnormal data 异常数据: values that should be rejected, out of range or the wrong type.
- Extreme data 极端数据: the largest and smallest values still accepted, at the edges of the range. Boundary data 边界数据: the pairs that straddle each edge, the accepted extreme and the rejected value just outside it, where off-by-one errors hide.
Inside, outside, and right on the line
Choisir des données de test
- Données normales 正常数据 : des valeurs typiques valides dans la plage, qui devraient être acceptées et traitées correctement.
- Données anormales 异常数据 : des valeurs qui devraient être rejetees, hors plage ou de mauvais type.
- Données extrêmes 极端data : les valeurs les plus grandes et les plus petites encore acceptées, aux bords de la plage. Données frontalières 边界data : les paires qui traversent chaque bord, l'extrême accepté et la valeur rejetée juste à l'extérieur, où se cachent les erreurs hors par un.

À l'intérieur, à l'extérieur, et juste sur la ligne
For a field that accepts marks 0–100, which are the boundary test values? · Pour un champ acceptant des notes de 0 à 100, quelles sont les valeurs de test frontalier ?
Boundary data sits at the edges of the valid range (and just outside) — where off-by-one errors hide. · Les données frontalières se situent aux bords de la plage valide (et juste à l'extérieur) — là où se cachent les erreurs d'un cran.
Worked example: test data for a mark from 0 to 100
| Kind | Data | Expected result |
|---|---|---|
| normal | 50, 75 |
accepted and processed |
| abnormal | -10, 200, "abc" |
rejected: out of range or wrong type |
| extreme | 0, 100 |
accepted: the smallest and largest valid values |
| boundary | -1 and 0, 100 and 101 |
-1 rejected, 0 accepted; 100 accepted, 101 rejected |
- Every row needs the expected result; a table of inputs alone scores half. The extremes are accepted:
-1is boundary, not extreme.
Exemple résolu : données de test pour une note de 0 à 100
| Type | Données | Résultat attendu |
|---|---|---|
| normal | 50, 75 |
accepté et traité |
| anormal | -10, 200, "abc" |
rejeté : hors plage ou mauvais type |
| extrême | 0, 100 |
accepté : les plus petites et plus grandes valeurs valides |
| frontalier | -1 et 0, 100 et 101 |
-1 rejeté, 0 accepté ; 100 accepté, 101 rejeté |
- Chaque ligne nécessite le résultat attendu ; un tableau d'entrées seul ne vaut que la moitié. Les extrêmes sont acceptés :
-1est frontalier, pas extrême.
A field accepts marks from 0 to 100. Which values are extreme test data? Select all · tout that apply. · Un champ accepte des notes de 0 à 100. Quelles valeurs sont des données de test extrêmes ? Sélectionnez tous ceux qui s'appliquent.
Extreme values are the smallest and largest still accepted. -1 is rejected, so it is boundary or abnormal; 50 is normal. · Les valeurs extrêmes sont les plus petites et plus grandes toujours acceptées. -1 est rejeté, donc c'est une frontière ou anormale ; 50 est normal.
Maintenance
- Most of a program's lifetime cost is spent after release. Corrective maintenance 纠正性维护 fixes faults found in use.
- Adaptive maintenance 适应性维护 keeps the program working in a changing environment: a new operating system, a new API, a change in the law.
- Perfective maintenance 完善性维护 improves a program that already works: faster performance, a new feature users asked for. A program may need all three throughout its life.
Fix it, keep it working, make it better
Maintenance
- La majeure partie du coût de vie d'un programme est dépensée après sa sortie. La maintenance corrective 纠正性维护 corrige les défauts découverts en utilisation.
- La maintenance adaptative 适应性 maintenance maintient le programme fonctionnel dans un environnement changeant : un nouveau système d'exploitation, une nouvelle API, un changement législatif.
- La maintenance perfective 完善性 maintenance améliore un programme qui fonctionne déjà : performances accrues, nouvelle fonctionnalité demandée par les utilisateurs. Un programme peut avoir besoin des trois tout au long de sa vie.

Le corriger, le faire fonctionner, l'améliorer
Corrective maintenance fixes faults, perfective maintenance improves features, and adaptive maintenance keeps the software working in a changed environment. · La maintenance corrective corrige les fautes, la maintenance perfective améliore les fonctionnalités, et la maintenance adaptative maintient le logiciel fonctionnel dans un environnement changé.
Three maintenance types: corrective (fix bugs), perfective (enhance), adaptive (new OS/hardware/rules). · Trois types de maintenance : corrective (corriger les bugs), perfective (améliorer), adaptative (nouveau S.O./matériel/règles).
A payroll program is changed because the tax law changed. Which kind of maintenance is this? · Un programme de paie est modifié parce que la loi fiscale a changé. De quel type de maintenance s'agit-il ?
The program was not faulty and is not being improved; its environment changed. That is adaptive maintenance. · Le programme n'était pas défaillant et n'est pas amélioré ; son environnement a changé. C'est la maintenance adaptative.
Amending an existing program
- Read the existing code until you understand the algorithm and the data flow. Find where the change belongs: which subroutine, which lines.
- Make the change as small as possible; do not rewrite working code. Update every related part: each caller of a changed parameter list, each routine that uses a changed data structure.
- Test the new behaviour and the old: regression testing 回归测试 checks that nothing that used to work has broken. Then document the change.
Modifier un programme existant
- Lire le code existant jusqu'à comprendre l'algorithme et le flux de données. Trouver où la modification appartient : quel sous-routine, quelles lignes.
- Faire la modification aussi petite que possible ; ne pas réécrire du code fonctionnel. Mettre à jour toutes les parties connexes : chaque appelant d'une liste de paramètres modifiée, chaque routine utilisant une structure de données modifiée.
- Tester le nouveau comportement et l'ancien : test de régression 回归测试 vérifie que rien qui fonctionnait auparavant ne s'est cassé. Ensuite, documenter la modification.
After changing a program, regression testing checks that: · Après avoir modifié un programme, les tests de régression vérifient que :
Regression testing re-runs old tests to confirm existing behaviour still works after a change. · Les tests de régression relancent les anciens tests pour confirmer que le comportement existant fonctionne toujours après un changement.
Put the steps of amending an existing program in order. · Mettez les étapes de modification d'un programme existant dans l'ordre.
Understand, locate, change small, propagate, test everything, record. Skipping the regression test is how a fix breaks something else. · Comprendre, localiser, changer petit, propager, tout tester, enregistrer. Omettre le test de régression est la façon dont une correction casse autre chose.
Marks that slip away
- Extreme is accepted; abnormal is rejected.
0and100are extreme;-1and101are boundary values on the rejected side. - A logic error does not crash the program. If it crashed, it was a run-time error.
- Alpha is in-house; beta is real users outside. A stub replaces a missing module; it is not a test method for finished code.
- A test plan row without an expected output earns nothing. Regression testing follows every change.
Pièges qui font perdre des points
- L'extrême est accepté ; l'anormal est rejeté.
0et100sont extrêmes ;-1et101sont des valeurs frontalières du côté rejeté. - Une erreur logique ne plante pas le programme. Si elle avait planté, c'était une erreur d'exécution.
- Alpha est en interne ; beta est des utilisateurs réels à l'extérieur. Un stub remplace un module manquant ; ce n'est pas une méthode de test pour du code fini.
- Une ligne de plan de test sans sortie attendue ne rapporte aucun point. Le test de régression suit chaque modification.
You've got it
- syntax errors stop translation · run-time errors crash a running program · logic errors run and give wrong output, found only by testing
- methods: dry run, walkthrough, white-box (from the code), black-box (from the specification), integration (interfaces, with stubs for missing modules), alpha (in-house), beta (real users), acceptance (the customer)
- test data: normal accepted, abnormal rejected, extreme the accepted edges, boundary either side of each edge; every test has an expected result
- maintenance: corrective fixes, adaptive keeps up with the environment, perfective improves; amend small, update callers, regression test
Vous avez compris
- les erreurs de syntaxe bloquent la traduction · les erreurs d'exécution plantent un programme en cours · les erreurs de logique tournent et donnent une mauvaise sortie, détectées uniquement par les tests
- méthodes : test sec, walkthrough, blanc (à partir du code), noir (à partir de la spécification), d'intégration (interfaces, avec des stubs pour les modules manquants), alpha (en interne), beta (utilisateurs réels), d'acceptation (le client)
- données de test : normal accepté, anormal rejeté, extrême aux limites d'acceptation, frontière de chaque côté de chaque limite ; chaque test a un résultat attendu
- maintenance : corrective corrige, adaptive s'adapte à l'environnement, perfective améliore ; modifier petit, mettre à jour les appelants, test de régression