Domanda

Gli sviluppatori senior dovrebbero essere esentati dai test unitari o dovrebbero essere autorizzati a utilizzare dei lacchè per implementarli?Qual è il modo migliore per motivare le persone che non sono abituate a utilizzare tecniche di unit testing ad adottarle?

È stato utile?

Soluzione

Direi che da un punto di vista purista del TDD (cioèuno che pensa che i test unitari dovrebbero essere scritti Prima implementazione), gli sviluppatori senior dovrebbero scrivere Di più test unitari rispetto ai lacchè, no meno.

Il motivo è che, poiché i test unitari vengono prima, scriverli richiede una conoscenza approfondita del codice base.Se lasci che siano i lacchè a scriverli, stai essenzialmente permettendo a coloro che sanno meno del tuo dominio di dettare la struttura del tuo codice base.Mi sembra una cattiva idea.

Altri suggerimenti

Penso che avere dei lacchè eseguano test unitari per qualcun altro stia distruggendo il punto di avere test unitari per cominciare.Il programmatore che scrive codice dovrebbe sapere come dovrebbe rompersi il codice e qual è il suo comportamento previsto.Solo perché qualcun altro lo fa non solleva il programmatore originale da tale responsabilità.

(Frase scomoda a causa della neutralità di genere.)

La persona che scrive il test = definisce come dovrebbe funzionare il sistema = il "capo"

Le persone che eseguono i test sono i cosiddetti "lacchè"

Sembra il caso di un vecchio cane a cui non piacciono i nuovi trucchi.E come dice il proverbio, è difficile convincerli a cambiare...TFD (test-first development) è molto divertente una volta che inizi a farlo, magari organizza un workshop interno di 1 giorno su TDD o TFD che coinvolga l'intero team.

Gli sviluppatori senior dovrebbero essere esentati dai test unitari

Assolutamente no.Allora non dovrebbero essere affatto sviluppatori senior.Gli sviluppatori senior dovrebbero essere i leader che mostrano la strada, l'idea che i lacchè lo facciano sembra assurda: allora perché preoccuparsi di testare.

Penso che un modo possibile per gestire queste situazioni sarebbe che lo sviluppatore senior potesse scrivere la maggior parte degli unit test.Ciò significa che stanno definendo e progettando il modo in cui il programma Dovrebbe lavoro.I lacchè possono quindi scrivere il codice che corrisponde al test, imparando le filosofie di progettazione del ragazzo più anziano mentre ci sono.

Parte I (Sviluppatori senior e test unitari)

Quando penso a TDD o Test Driven Design, gli Unit Test hanno lo scopo di scacciare il progettazione evolutiva del sistema, auspicabilmente garantendo un miglioramento continuo.
La scrittura del test modella il codice o evidenzia i problemi con una decisione già presa, si spera che si traduca in un processo di refactoring per aumentare la qualità del design.

Nella mia esperienza, lo sviluppatore senior è normalmente la persona con maggiore esperienza e capacità, il che significa che dovrebbe essere in una posizione migliore per individuare queste opportunità di refactoring.(Rileva gli odori del codice)

Ci sono tre situazioni a cui riesco a pensare, in cima alla mia testa, in cui qualcun altro scrive i test per te Potevo essere accettabile.

  1. Test di accettazione/Test cliente/Test end-to-end.Chiamateli come volete, ma intendo i test che iniziano dal punto di immissione dei dati (servizio Web, pagina Web, input della schermata dell'applicazione) e attraversano l'intero stack del sistema (a un database, chiamata a un altro servizio, tornare alla schermata dei risultati di input, ecc.).Questo potrebbe essere scritto da qualcuno che non sta implementando i dettagli delle singole unità che verranno esercitate dai test.
  2. Programmazione abbinata (Modello di ping pong) -

    A scrive un nuovo test e vede che fallisce.
    B implementa il codice necessario per superare il test.
    B scrive il prossimo test.
    A lo implementa.

  3. Test di correzione dei bug: quando viene trovato un bug, spesso è buona pratica scrivere un test fallito che esponga il difetto.Una volta che questo test è in atto è del tutto possibile che qualcuno implementi il ​​codice che fa passare il test.Non penso che questa sia un'idea così buona poiché l'atto di scrivere il test che fallisce a causa del difetto spesso fornisce alcune indicazioni su come potrebbe essere prodotta una correzione.

In breve, la mia risposta alla tua prima domanda sarebbe: no, uno sviluppatore senior non dovrebbe essere esentato dalla scrittura di unit test.

Seconda parte (Motivare le persone a scrivere test)

Questo è qualcosa con cui ho avuto problemi in passato.Anche se ora provo ad eseguire il TDD tutte le volte che è opportuno, mi ci sono voluti alcuni mesi per capire che c'era un reale vantaggio nello scrivere i test.
Credo che provare a mostrare agli altri i vantaggi del TDD e del test unitario sia piuttosto difficile.È solo quando la persona sperimenta in prima persona quel momento "ah ah" in cui i TDD/Unit Test hanno evidenziato una sottigliezza nel loro codice, che altrimenti avrebbe potuto perdere, o l'ha aiutata a correggere un bug in un breve lasso di tempo, che vedere i vantaggi.Portarli a quel punto può essere piuttosto difficile.
Personalmente ci sono arrivato programmando in coppia nel già citato Ping Pong Pattern, lavorando con un TDDer esperto e vedendo il codice che stavamo scrivendo per risolvere una funzionalità non banale evolversi in quella che potrebbe essere definita una soluzione elegante.Seguito da quel pezzo di lavoro che è passato attraverso il QA e nell'ambiente live senza che venisse sollevato alcun difetto contro di esso.

In breve, penso che l'abbinamento con un programmatore esperto che è già convinto dei vantaggi che derivano dalla scrittura di unit test sia un ottimo modo per aiutare qualcuno a motivarsi a scrivere unit test.

Assolutamente no;almeno perché è molto più semplice scrivere test per il codice sviluppato da te.Ma è importante che tutti gli sviluppatori, indipendentemente dall'anzianità, effettuino test unitari su tutto il loro codice;se si sviluppano sapendo che il loro codice deve essere testabile, i frutti del loro lavoro saranno molto maggiori.

Se hai bisogno di motivare gli sviluppatori a eseguire test unitari, basta sfruttare i vantaggi e il tempo che verranno risparmiati a lungo termine.Se prendono l'abitudine di scrivere unit test per il loro codice, inizieranno presto a farlo come una cosa ovvia.

Se uno sviluppatore senior non esegue i propri test, non è uno sviluppatore senior.

La mancanza di volontà di testare è quasi sempre un segno di pigrizia o inettitudine (o entrambi), e non è nemmeno una caratteristica che dovrebbe essere trovata in uno sviluppatore senior.

L'unico scenario che mi viene in mente in cui sarebbe appropriato per uno sviluppatore senior chiedere a qualcun altro di scrivere i propri test unitari sarebbe nel caso in cui un nuovo assunto junior venga aggiornato sulle cose.Potrebbe essere un buon compito per bagnarsi i piedi mentre si scrive del codice.

Uno dei maggiori vantaggi dei test unitari è il feedback immediato che ti dice quanto stai andando bene.Se esternalizzi l'implementazione dei tuoi test, non riceverai feedback se il tuo progetto funziona o meno.E le persone alle prese con un cattivo design non hanno i mezzi per correggerlo.

Se sei uno sviluppatore senior, è in parte perché hai abbastanza esperienza da sapere che il test unitario è un'ottima pratica di sviluppo che aiuta Voi produrre software migliore

Non aderisco alla religione del TDD, ma vedo molto valore nei test unitari/ecc. e lo faccio spesso mentre scrivo.

Il punto è però che nessuno Veramente sa cosa dovrebbe fare il codice tranne la persona che lo ha scritto, e spesso non lo sa nemmeno lui.

Con questo in mente, non otterrai molto valore dai "lacchè" che scrivono i test perché

  1. Non avranno una comprensione approfondita di tutti i casi più sottili
  2. A loro non importerà del codice perché non hanno investito nulla in esso
  3. Si sentiranno trattati come degli idioti.

Anche se SONO idioti, a nessuno piace essere trattato come tale.Se vuoi che il tuo staff se ne vada, questo è un buon modo per incoraggiarlo.

Nessuno dovrebbe essere esentato dallo scrivere test unitari.Tutti gli sviluppatori devono essere in grado di scriverli e anche i test unitari dovrebbero essere rivisti come parte del processo di revisione del codice.La complessità degli unit test sarà solitamente una funzione dell'abilità dello sviluppatore, con il codice più complesso destinato agli sviluppatori più senior, quindi anche il numero più complesso e maggiore di unit test destinati a loro.

Se hai uno o più sviluppatori che non sono in grado di adattarsi, dovresti provare a fornire loro assistenza individuale e accoppiare lo sviluppatore con i test unitari finché lui o lei non inizia a prenderci la mano.Non c'è nulla di abbastanza complesso dal punto di vista tecnico per cui qualcuno che sa scrivere codice non sia in grado di produrre test unitari.Se così sembra essere il caso, probabilmente è il precursore di un problema più ampio con le competenze di quella persona.

Personalmente ritengo che sia utile anche per i tester riuscire almeno a comprendere gli unit test che fanno parte del progetto.La collaborazione tra sviluppatori e tester è molto importante per diagnosticare e correggere correttamente i difetti.Non mi aspetterei che debbano scriverli, ma dovrebbero essere in grado di sedersi con uno sviluppatore e discutere il concetto del perché/come un test fallisce o meno.

Beh, direi di sì, ma solo se al lacchè è consentito lasciare che la correzione dei bug rilevati sia affidata al senior.Questo gli insegnerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top