Quando correggi i bug, è incoraggiato dove lavoro a scrivere per prima cosa un test che fallisce con il dato bug, e quindi a correggere il codice fino a quando il test non è passato. Questo segue le pratiche del TDD e dovrebbe essere una buona pratica, ma ho notato che tende a produrre test criptici che arrivano davvero vicino all'implementazione.
Per esempio, abbiamo avuto un problema quando un lavoro è stato inviato, raggiunto un certo stato, è stato interrotto e riprovato. Per riprodurre questo bug, è stato scritto un enorme test con la sincronizzazione dei thread, un sacco di derisioni e roba del genere ... Ha fatto il lavoro, ma ora che sto refactoring il codice, trovo molto allettante solo rimuovere questo mammut, dal momento che richiederebbe molto lavoro (ancora) per adattarsi al nuovo design. E sta solo testando una piccola funzionalità in un singolo caso specifico.
Di qui la mia domanda: come si fa a testare bug che sono difficili da riprodurre? Come evitare di creare cose che testano l'implementazione e danneggiare il refactoring e la leggibilità?