Ce n'est pas un bug
Du moins pas sur votre code. C'est un bug dans votre processus . Votre chef de projet devrait être beaucoup plus préoccupé par votre processus que votre code.
Comment gérez-vous cela?
Tout simplement, en ne laissant pas les ingénieurs modifier les bases de données de production ou de développement partagées .
En supposant qu'il s'agisse d'une base de données de développement partagée:
Idéalement, évitez autant que possible d' avoir une base de données partagée . Au lieu de cela, avoir des bases de données par développeur qui sont de courte durée. Cela devrait être automatisé avec des scripts, sinon le coût du test devient trop important et il y a une incitation à ne pas tester les choses. Vous pouvez avoir ces bases de données sur le poste de travail du développeur ou sur un serveur central.
Si, pour quelque raison que ce soit, vous DEVEZ absolument disposer d'une base de données partagée, vous devez utiliser des fixtures , ce qui permet de définir l'état de la base de données à chaque fois que vous en avez besoin. Cela évite aux développeurs de se faire piquer par les changements d'autres personnes.
Si vous devez appliquer des modifications permanentes à la base de données, vous devez les valider pour votre contrôle de source . Configurez votre base de données de manière à ce que les développeurs ne soient pas autorisés à y écrire directement et ayez un programme qui extrait les modifications du contrôle de source et les applique.
Enfin, d'après votre description de la manière dont vous déboguez, il semble que vous n'utilisez pas CI . Utilisez CI . C'est un peu pénible à installer, mais cela vous fera gagner beaucoup de temps à long terme, sans parler de vous empêcher de vous inquiéter des bogues de base de données non reproductibles. Vous n'aurez plus qu'à vous soucier de Heisenbugs maintenant!
En supposant qu'il s'agisse d'une base de données de production:
Si vos développeurs modifient des bases de données de production, beaucoup de choses se sont mal passées, même si les modifications sont absolument correctes.
Les développeurs ne doivent jamais accéder aux bases de données de production . Il n'y a absolument aucune raison de le faire et tant de choses qui peuvent très mal tourner .
Si vous devez réparer quelque chose dans une base de données de production, commencez par sauvegarder, restaurer cette sauvegarde sur une instance (de développement) différente , puis utilisez cette base de développement. Une fois que vous pensez avoir un correctif prêt (sur le contrôle de source!), Vous recommencez la restauration, appliquez le correctif et visualisez le résultat. Ensuite, après avoir à nouveau sauvegardé des éléments (et idéalement empêché les mises à jour simultanées), vous corrigez l'instance de production, idéalement par le biais d'un correctif logiciel.
Si vous avez besoin de tester quelque chose dans une base de données de production, non. Quels que soient les tests que vous devez faire, vous devriez le faire dans une instance de développement. Si vous avez besoin de données pour effectuer les tests, vous les récupérez.