Come migliorare il test del proprio codice [chiuso]


12

Oggi ho verificato una modifica su un codice che si è rivelato non funzionare affatto a causa di qualcosa di piuttosto stupido ma molto cruciale. Mi sento davvero male e spero di poter finalmente imparare qualcosa da esso. La cosa stupida è che ho già fatto queste cose prima e mi dico sempre, la prossima volta non sarò così stupida ... Poi succede di nuovo e mi sento ancora peggio.

So che dovresti tenere il mento sollevato e imparare dai tuoi errori, ma ecco la cosa: cerco di migliorare me stesso, non vedo come posso impedire che queste cose accadano.

Quindi, ora vi sto chiedendo ragazzi: avete determinate regole di base durante il test del codice?


Risposte:


17

Scrivi i test prima di apportare modifiche al codice.

Se la modifica proposta è quella di correggere un bug, far fallire inizialmente il test dimostrando il bug. Quindi assicurati che passi dopo aver corretto il bug. Se in seguito scrivi il test e lo hai mai visto passare, non puoi essere sicuro di aver testato correttamente il bug in primo luogo.

Se la modifica proposta è quella di modificare la funzionalità esistente o aggiungere una funzionalità, scrivere alcuni test per garantire una buona copertura dell'area di codice che si intende modificare. Assicurati che questi test superino prima di iniziare a modificare il codice e comunque al termine.


Questo è davvero un buon consiglio, potrebbe volerci un po 'più tempo per risolvere un bug ma dannatamente certo non mi farà ripetere questo tipo di errori e mi permetterà di scrivere un codice più stabile nel complesso.
Peter,

@Peter dovrebbe risparmiare tempo di manutenzione a lungo termine. Dovresti passare meno tempo a fumare manualmente le correzioni dei test e anche i test saranno disponibili per la successiva modifica del codice. A volte potresti persino scoprire che scrivere rapidamente un test unitario che riproduce il bug può rendere più veloce il debug e correggere il bug in primo luogo.
Alb

@Peter Mi trovo spesso a riprodurre più volte il bug mentre lo risolvo. Scrivere un piccolo test invece di solito fa risparmiare tempo, per non parlare del fatto che puoi essere assolutamente sicuro che funzioni (e funzionerà in futuro).
DasIch,

questo è un fantastico consiglio amico, grazie mille!
Shaheer,

@Alb o anche a breve termine.

3

Non dimenticare di testare i casi limite! Molti bug sono dovuti al fatto che l'azione più comune è stata testata ma non quella meno comune.


Imho il vero gioiello è nel trovare questi casi limite. Sono spesso sorpreso dai bug che escono da un sistema, solo perché non abbiamo pensato a uno scenario particolare.
Peter,

2

Seguire i consigli tecnici nelle risposte orientate tecnicamente; è roba buona. La mia risposta riguarda più l'atteggiamento.

Sentirsi male nel fare il tipo di errore che ogni sviluppatore commette occasionalmente è semplicemente assurdo e non ti aiuta a non fare quel tipo di errore in futuro. Mentre ti siedi lì a sentirti male, la build è ancora rotta, sai? E poi il tuo lavoro è tutto incentrato sull'evitare errori, che so rendere alzarsi dal letto la mattina un'avventura emozionante ogni giorno, giusto?

Ho sentito parlare di aziende in cui il check in di codice non funzionante è causa di vergogna pubblica. Non riesco nemmeno a smettere di pensare a quel tipo di pensiero distorto, fratellastro, di livello junior che porterebbe a un simile comportamento. Difficilmente ci potrebbe essere QUALCOSA di più controproducente da fare per un capofila o un manager.

Quindi non ti picchiare. L'abbiamo fatto tutti. Probabilmente mi costa mezza giornata alla settimana in errori sciocchi, e lo faccio da molto tempo. Ecco come sembra scrivere codice: ti stai costantemente scontrando con quelle che sembrano le tue inadeguatezze. Ciò che rende un professionista un professionista non è una qualità mitica che non commette mai errori (anche a volte grandi), ma il modo in cui RISPONDONO agli errori che commettono.

Se c'è un mantra che posso instillare in ogni sviluppatore con cui lavoro, è questo: non sei il tuo codice . Scrivi il codice. Lo scrivi nel modo più efficiente ed efficiente possibile. Poi vai a casa. Se identifichi il tuo valore o autostima come persona con la qualità del tuo codice, ti stai perdendo la barca su chi sei veramente.


Capisco quello che dici sulla vergogna pubblica, ma allo stesso tempo è frustrante essere bloccato perché la build è interrotta perché Joe Bloggs non ha creato tutte le piattaforme prima del check-in.
tenpn

@tenpn - Totalmente. Ma il rovescio della medaglia di quello che sto dicendo è vero anche per Joe Bloggs. Inoltre non è il suo codice. Come colleghi, dobbiamo resistere all'impulso di trasformare Joe in un cretino ai nostri occhi perché ha fatto un errore che qualcuno di noi avrebbe potuto fare.
Dan Ray,

@tenpn in realtà, potresti anche incolpare il sistema di non testare automaticamente la build prima di eseguire le modifiche al trunk / master.
David,

2
@tenpn - Né batte i tuoi colleghi.
Dan Ray,

1
Cosa succede se la modifica non interrompe la build? È logico costruire il codice prima di effettuare il check-in. Non è così ovvio testare il codice in tutti i modi possibili. C'è sempre uno scenario che non avresti potuto pensare. Proprio oggi mi sono imbattuto in un errore di arrotondamento in virgola mobile che si verifica solo se ti capita di avere i numeri giusti (sbagliati)
Peter

2

Un'altra importante pratica di test è quella di scrivere il test e assicurarsi che fallisca almeno una volta PRIMA di scrivere il codice. È facile sbagliare e scrivere un test di tautologia che per sbaglio non verifica la condizione che si sta verificando. Le false assicurazioni sono quasi (e talvolta peggiori) di nessuna assicurazione.


0

Un'idea che ho usato di volta in volta è questa,

creare un ramo e rompere il codice, eseguire il test e assicurarsi che il test rilevi l'errore.


0

Hai alcune basi durante il test del tuo codice?

  • Testare sempre l'unità del codice e cercare di raggiungere la massima copertura possibile.

Alcuni punti generali aggiuntivi:

  • investire un po 'di tempo in progettazione e progettazione prima di iniziare a programmare
  • refactoring il tuo codice!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.