Je pourrais comprendre fortement cette préoccupation dans les domaines où vous couvrez chaque pouce du matériel, comme un moteur de jeu AAA de nouvelle génération multithread qui utilise chaque cœur de processeur, les intrinsèques SIMD, les GPU, GPGPU, etc. tout en fournissant une plateforme multiplateforme produit.
Dans ces cas, votre pire cauchemar sera souvent les cas où vos tests (unité et intégration) passeront pour les 5 000 premières machines / plates-formes disparates testées, mais échouent pour le 5 001ème en raison d'un bug de pilote pour un modèle de GPU obscur. A propos de ce qui me donne la chair de poule - vous ne pouvez pas peut-être tester ou prévoir celles-ci à l'avance.
Bien que cela devienne de moins en moins comme jouer au démineur ces jours-ci, cela devrait donner aux gens une idée: http://theorangeduck.com/page/writing-portable-opengl . Un essai en fin des années 90 et début des années 2000. était vraiment horrible, il était démineur complètement.
Pour ces types de cas, vous avez souvent besoin d'équipes de plus de 10000 testeurs avec une très large gamme de matériel et de systèmes d'exploitation pour vraiment solidifier le produit et avoir confiance en lui avant une version stable.
Ce que je recommande dans ce cas est ce que les autres ont suggéré, se concentrer sur un ensemble distribué des tests d'intégration.
Une autre chose (si vous pouvez convaincre le patron) est d'avoir un grand nombre de matériel disponible pour faire l'intégration contiguës. La plus grande variété de combos matériel / OS, le plus joyeux. Vous voulez encore une variété de matériel de merde qui modélise la configuration matérielle de minimum pour les serveurs de CI: on ne sait jamais.
Mais il y a encore une chose que je suggérerais:
Enregistrement
Si vous avez affaire à quelque chose comme le scénario que j'ai décrit ci-dessus, alors vous ne pouvez souvent pas tester ces choses qui ont tendance à être les plus problématiques (les pires pièges possibles qui apparaissent au pire moment possible et ne peuvent pas apparaître même dans le la plupart suite de tests exhaustive puisqu'il est question contraint à une combinaison matériel / OS très spécifique).
Pourtant, la plupart de ce genre de questions telles que les incompatibilités de matériel peu courant ou pilote pure et simple des pépins ou les enchaîner contre le mauvais dylib (je ne suis jamais fait face à ce problème) ne vous mènera bien au-delà la mise en service du logiciel.
Vous ne pouvez rien faire contre ces choses que vous ne pouvez pas tester de manière exhaustive.
En règle générale ici, la meilleure chose que nous pouvons faire est de trouver le problème le plus rapidement possible, où elle se produit plus détaillé possible (pour restreindre la liste des suspects) et ont fixé la question dès que possible après qu'il est rapporté.
Dans ce cas, l'exploitation forestière peut être une bouée de sauvetage. Pour ce genre de champs, vous pouvez créer ces livrets techniques spammy lequel personne ne lirait jamais à travers. Souvent concerné est juste la dernière ligne enregistré dans le journal avant que l'utilisateur fait face à un accident en raison d'un pépin de pilote, par exemple, vous pouvez écrire un processus externe ou crochet moniteurs pour les accidents et montre puis la dernière ligne du journal que les utilisateurs peuvent copier et collez-le, par exemple en plus d'un vidage sur incident.
Comme il a souvent besoin d'information granulaire et beaucoup de zones les plus sensibles dans le code à ces matériel / plateforme / problèmes de pilote est la performance critique, il y a cette question embarrassante où l'exploitation forestière peut se produire à un rythme fréquent que ça va réellement lent sur le logiciel.
A useful trick in this case is to rely on the assumption that something executed once will execute successfully the second time, third time, etc. This is not the most sound assumption, but it's often "good enough" (and infinitely better than nothing) . Avec cela, vous pouvez utiliser une petite partie de l'État externes pour suivre quand quelque chose a été enregistré déjà et ignorez les tentatives ultérieures de journal pour les cas vraiment granulaires dont le code est invoquée à plusieurs reprises dans une boucle.
Quoi qu'il en soit, j'espère que cela. I've run into this kind of temptation in the past and have a bit of a paranoia surrounding GPU coding (GPGPU and shaders) as a result of some past experiences among myself and my team (sometimes just seeing other team members deal with these really fin et après la libération m'a donné la chair de poule, comme un petit problème ATI Radeon sur un modèle spécifique qui échouerait sur le rendu anticrénelage de lignes, a rapporté plus tard et marqué comme un problème connu avec seulement une solution de contournement disponible).
L' exploitation forestière était la chose qui a sauvé les fesses là - bas, nous laisser voir souvent la question sur cette machine prototype obscure 10001e avec un GPU à bord nous jamais entendu parler, à la dernière ligne de code immédiatement nous faire repérer exactement où l'échec est en baisse de 2 ou 3 lignes de code suspecte, par exemple , si elle est à l' intérieur d' un shaders élaboré, nous sommes en quelque sorte SOL puisque nous ne pouvons pas l' exploitation forestière dans un shader GPU, mais nous pouvons au moins l' exploitation forestière utilisent pour voir lequel shader avait la question tout de suite commencer l'enquête.