Fondamentalement, comment déterminez-vous quel pourrait être votre pire ou votre meilleur cas et tout autre cas "Edge" que vous pourriez avoir AVANT de les avoir et ainsi, comment préparez-vous votre code pour eux?
En fonction du contenu de l'algorithme, vous pouvez identifier les structures/types/constructions de données utilisées. Ensuite, vous essayez de comprendre les points faibles (possibles) de ceux-ci et essayez de trouver un plan d'exécution qui le fera fonctionner dans ces cas.
Par exemple, l'algorithme prend une chaîne et un entier en entrée et effectue un tri des caractères de la chaîne.
Ici nous avons:
String avec quelques cas spéciaux connus:
Entier avec des cas spéciaux connus:
algorithme de tri qui pourrait échouer dans les cas limites suivants:
Ensuite, prenez tous ces cas et créez une longue liste en essayant de comprendre comment ils se chevauchent. Ex:
Créez maintenant des cas de test pour eux :)
court résumé: décomposer l'algorithme en blocs de base pour lesquels vous connaissez les cas limites, puis les réassembler, créant des cas limites globaux
Un "Edge" a deux significations, et les deux sont pertinentes en ce qui concerne les cas Edge. Un Edge est soit une zone où un petit changement dans l'entrée entraîne un grand changement dans la sortie, soit la fin d'une plage.
Donc, pour identifier les cas Edge d'un algorithme, je regarde d'abord le domaine d'entrée. Ses valeurs Edge pourraient conduire à des cas Edge de l'algorithme.
Deuxièmement, je regarde le domaine de sortie et regarde en arrière les valeurs d'entrée qui pourraient les créer. C'est moins souvent un problème avec les algorithmes, mais cela aide à trouver des problèmes dans les algorithmes conçus pour générer une sortie qui s'étend sur un domaine de sortie donné. Par exemple. un générateur de nombres aléatoires devrait être capable de générer toutes les valeurs de sortie prévues.
Enfin, je vérifie l'algorithme pour voir s'il existe des cas d'entrée similaires, mais conduisant à des sorties différentes. La recherche de ces cas Edge est la plus difficile, car elle implique à la fois des domaines et une paire d'entrées.
Je ne pense pas qu'il existe un algorithme pour déterminer les conditions Edge .... juste l'expérience.
Exemple: pour un paramètre d'octet, vous souhaitez tester des nombres tels que 0, 127, 128, 255, 256, -1, tout ce qui peut causer des problèmes.
C'est une question très générale donc tout ce que je peux faire est de jeter des idées générales et vagues :)
-Examinez les cas limites. Ex. si vous analysez une chaîne, que se passe-t-il si la chaîne est vide ou nulle? Si vous comptez de x à y, que se passe-t-il en x et y?
- Code qui pourrait être simplifié ou édité en D.R.Y. Toute complexité inutile pourrait ajouter des choses qui pourraient mal tourner.
Une partie de l'habileté d'utiliser des algorithmes est de connaître leurs faiblesses et leurs cas pathologiques. La réponse de Victor donne quelques bons conseils, mais en général, je vous conseillerais d'étudier le sujet plus en profondeur pour avoir une idée de cela, je ne pense pas que vous puissiez suivre les règles de base pour répondre pleinement à cette question. Par exemple. voir Cormen , ou Skiena (Skiena en particulier a une très bonne section sur où utiliser les algorithmes et ce qui fonctionne bien dans certains cas, Cormen va vers plus de théorie je pense) .