I feel that tests should be able to tell you where you went wrong.
Ho capito il tuo punto di vista, ed è un principio che sono molto d'accordo. Quando apri la porta per eseguire il debug del db, abbassi l'incentivo dello sviluppatore a fare sforzi per fare test che spieghino adeguatamente il problema quando falliscono.
Per quanto corretto, penso che la tua argomentazione sia, devi consentire dei compromessi nel mondo reale. Nessun test è perfetto Se accade qualcosa al database, non correlato e non causato dal codice, il risultato del test potrebbe segnalare un problema perché ha rilevato un'anomalia, anche se i test non sono in errore. O forse i tuoi esami hanno dimenticato di coprire un caso limite.
Quando costringi i tuoi sviluppatori a fare affidamento esclusivamente sui test esistenti, il lavoro dei tuoi sviluppatori può essere corretto solo come i test stessi. Se i test contengono errori qualsiasi , gli sviluppatori non solo non saranno in grado di risolverli, ma potrebbero anche essere inviati nella direzione sbagliata, cercando un bug che pensano esistesse perché un test sbagliato loro così.
Questa è una scelta difficile. Da un lato, si vuole incentivare strongmente gli sviluppatori a fare affidamento su test automatici anziché sulla propria attitudine al debugging quando si guardano i dati.
D'altra parte, il blocco totale dell'accesso al database presuppone implicitamente che i test siano perfetti. È impossibile sapere definitivamente che i tuoi test sono perfetti. Il meglio che puoi ottenere è "non aver ancora visto un problema".
Puoi creare un ostacolo invece di un ban. Per esempio. consente solo a un sottoinsieme degli sviluppatori di accedere alle risorse (ad esempio, lead tecnici o senior). Ciò significa che i tuoi sviluppatori dovranno prima parlare con i tuoi esperti prima che possano accedere alla risorsa, incentivandoli così a non voler immediatamente eseguire il database per ogni problema minore che incontrano.
Quando sorge un problema che genuinamente richiede l'accesso al database, gli esperti saranno in grado di fornirlo. Quando si verifica un problema che non richiede l'accesso al database, sarà in grado di bloccarlo.
- Should we write our application in a way that a developer can access the db.
Ci sono compromessi tra nessun accesso e accesso completo. Ma ancora più importante, non credo che un dev abbia bisogno di accedere al database , ma piuttosto dei dati che erano nel database. Questa è una distinzione importante da fare.
Ad esempio, puoi scaricare il contenuto del database in un file di registro quando viene rilevato un errore di test (rendi questa un'opzione configurabile in modo che accada solo quando un dev lo richiede esplicitamente).
Per essere chiari, "scaricare il contenuto del database" è una generalizzazione eccessiva. Il punto che sto cercando di fare è logg i dati rilevanti. In questo modo, i tuoi sviluppatori hanno accesso ai dati (in formato log) senza bisogno di accedere al database stesso.
- Should developers be allowed to run tests across non-dev environments.
No. Esiste un'alternativa migliore: consentire agli sviluppatori di copiare un database da un ambiente non-dev a un ambiente di sviluppo e quindi testare ciò che vogliono.
Questo potrebbe essere complicato a causa delle regole GDPR / privacy, ma questa è una discussione diversa.
L'unico motivo per guardare un ambiente non-dev è quando si guarda a un problema specifico dell'ambiente. Richiedi ai tuoi sviluppatori di dimostrare per primi che non sono in grado di riprodurre l'errore nell'ambiente di sviluppo (con gli stessi dati) prima di consentire loro di uscire dall'ambiente di sviluppo.