Questo non è un bug
Almeno non sul tuo codice. È un bug nel tuo processo . Il tuo project manager dovrebbe essere molto più preoccupato del tuo processo rispetto al tuo codice.
How do you deal with this?
Semplicemente, non consentendo agli ingegneri di modificare i database di produzione o di sviluppo condiviso .
Supponendo che questo sia un database di sviluppo condiviso:
Idealmente, se possibile, evitare di avere un database condiviso in primo luogo . Invece, avere database per sviluppatori che sono di breve durata. Questo dovrebbe essere automatizzato con script, altrimenti il costo per il test diventa troppo grande, e c'è un incentivo a non testare le cose. Puoi avere questi database sulla workstation dello sviluppatore o su un server centrale.
Se, per qualche ragione, DEVI assolutamente avere un database condiviso, dovresti utilizzare dispositivi - in sostanza, qualcosa che imposta il database in uno stato noto buono ogni volta che è necessario utilizzarlo. Ciò evita che gli sviluppatori vengano morsi dai cambiamenti di altre persone.
Se devi applicare modifiche permanenti al database, devi impegnarle sul controllo del codice sorgente . Imposta il tuo database in modo tale che gli sviluppatori non abbiano il permesso di scrivere direttamente su di esso e abbiano un programma che estrae le modifiche dal controllo del codice sorgente e le applichi.
Infine, dalla tua descrizione su come stai eseguendo il debug delle cose, sembra che tu non stia utilizzando CI . Utilizza CI . È un po 'difficile da configurare, ma a lungo andare si risparmia molto tempo, senza contare che non ti preoccupi di bug di database non riproducibili. Dovrai solo preoccuparti di heisenbugs adesso!
Supponendo che questo sia un database di produzione:
Se i tuoi sviluppatori stanno cambiando i database di produzione, molte cose sono andate terribilmente male, anche se le modifiche sono assolutamente corrette.
Gli sviluppatori non dovrebbero mai accedere ai database di produzione . Non c'è assolutamente alcun motivo per, e così tante cose che possono andare molto molto sbagliate.
Se hai bisogno di correggere qualcosa in un database di produzione, prima fai il backup, ripristina quel backup su un'istanza diversa (sviluppo) e allora giocare attorno a quel database di sviluppo. Una volta che pensi di avere una soluzione pronta (sul controllo del codice sorgente!), Devi rifare il ripristino, applicare la correzione e vedere il risultato.
Quindi, dopo aver ripristinato le cose (e prevenendo idealmente gli aggiornamenti simultanei), correggi l'istanza di produzione, idealmente attraverso una patch software.
Se hai bisogno di test qualcosa in un database di produzione ... no, non lo fai. Qualunque sia il test che devi fare, dovresti farlo in un'istanza di sviluppo. Se hai bisogno di alcuni dati per eseguire i test, ottieni quei dati lì dentro.