Quali sono le strategie generali da impiegare quando si tenta di garantire che un modulo di codice funzioni correttamente sul sistema live? Un problema comune che abbiamo nella nostra software house è che normalmente distribuiamo soluzioni al server di un client remoto, su cui non è installato alcun software di sviluppo software. Quando sorgono problemi (inevitabilmente) nel software implementato, ci infastidiscono i clienti che ci dicono di risolvere il problema, ma dal momento che non possiamo eseguire il debug del codice in remoto, restiamo bloccati in un ciclo di tentativi effettivi di indovinare se il nostro codice funzionerà prima lo distribuiamo e quindi ripetiamo il ciclo quando il codice distribuito presenta problemi.
Inoltre, a causa della lontananza del cliente, in genere non è possibile ottenere una copia completa di prova del proprio sistema da parte nostra, quindi finiamo per sviluppare contro le approssimazioni del loro sistema da parte nostra. Ciò rende il nostro debug e la pianificazione del codice sul lato dello sviluppo significativamente meno efficace, perché quando installiamo non sappiamo con precisione quale variabile tra il nostro sistema di test e il sistema live sta causando problemi con il nostro codice.
Finora, ho implementato un logger di errori di base in tutto il codice distribuito che cattura traccia dello stack, dettagli delle eccezioni, metodo, classe, spazio dei nomi, parametri e messaggi aggiuntivi e codici di errore ad ogni eccezione, ma questo accelera davvero il processo di correggere quell'errore specifico. Ho anche provato a scrivere test individuali per sottosezioni specifiche di moduli come eseguibili e eseguirli sul sistema client, ma per i moduli che sono decine di migliaia di righe, questo di solito non è fattibile senza interrompere tutto lo sviluppo.
Sto cercando di mettere in atto una strategia che ci aiuterebbe a evitare le eccezioni in primo luogo, ma sono bloccato sul fatto che:
-
Non abbiamo (e di solito non possiamo ottenere) un sistema di test funzionante che modella accuratamente il sistema live, ad es. un'immagine del sistema live, se ce l'abbiamo, allora è mesi non aggiornati
-
Non possiamo installare il software di debug remoto sul server live
-
In genere il client non ha un server di test dedicato, quindi qualsiasi implementazione deve essere pubblicata direttamente
-
Non avendo accesso a una copia del sistema live significa che non possiamo scrivere test unitari efficaci che modellano effettivamente le condizioni in cui il codice verrà eseguito sul lato client
Se aiuta, il codice è in genere C # in esecuzione su .NET 3.5. Come affrontare meglio questo problema?