Quando correggo i bug, è incoraggiato dove lavoro per prima cosa scrivere un test che non ha esito positivo con il bug dato e quindi correggere il codice fino al completamento del test. Questo segue le pratiche del TDD e dovrebbe essere una buona pratica, ma ho notato che tende a produrre test criptici che si avvicinano molto all'implementazione.
Ad esempio, abbiamo riscontrato un problema durante l'invio di un lavoro, il raggiungimento di un determinato stato, l'interruzione e il tentativo. Per riprodurre questo bug, è stato scritto un enorme test con la sincronizzazione dei thread, un sacco di scherno e roba ... Ha fatto il lavoro, ma ora che sto riformattando il codice, trovo molto allettante rimuovere semplicemente questo mammut, dal momento che richiederebbe davvero molto lavoro (di nuovo) per adattarsi al nuovo design. E sta solo testando una piccola funzionalità in un singolo caso specifico.
Da qui la mia domanda: come testare i bug che sono difficili da riprodurre? Come evitare di creare elementi che testino l'implementazione e danneggino il refactoring e la leggibilità?