Come convincere il management a "investire" in unit test?


46

Come hai convinto il tuo manager a farti test unitario?

Per "utilizzo" intendo essere autorizzato a sviluppare, fare il check-in al controllo del codice sorgente e mantenere i test unitari nel tempo, ecc.

Le obiezioni tipiche della direzione sono:

  1. Il cliente non ha pagato per i test unitari
  2. Il progetto non prevede il tempo per i test unitari
  3. Debito tecnico? Quale debito tecnico?

Conosci altre obiezioni? Quali sono state le tue risposte?

Grazie in anticipo!


6
C'è un intero capitolo in artofunittesting.com su questo argomento.
StuperUser

6
Non mescolare test e TDD, PER FAVORE ! Fa pensare alle persone che non hanno bisogno di test a meno che non facciano TDD!
P Shved

1
Le persone che hanno bisogno di convincere sono al di là di convincere. Considera il tuo scenario una causa persa.
Mark Canlas,

@Pavel, all'inizio pensavo fossi un pazzo, ma hai ragione. Voglio avere il "permesso" di unit test, punto. TDD è la mia cosa.
louisgab,

6
perché ritieni che sia necessario ottenere l'autorizzazione per verificare che il codice funzioni come previsto?
Jaap,

Risposte:


25

Di recente mi sono imbattuto in questo problema quando un cliente era d'accordo con la nostra metodologia, ma il management superiore ha capito che gli sviluppatori stavano impiegando il loro tempo a testare piuttosto che a svilupparsi ed erano preoccupati per questo - dopo tutto, avevano persone addette al controllo qualità per fare i test! Ho scritto un blog su come l'ho affrontato qui:

http://practicalagility.com/show-them-the-numbers-its-results-that-matter/

Per riassumere, ho confrontato le nostre ore stimate con le ore effettive per il progetto e quindi ho confrontato il nostro tasso di difetto con il tasso di difetto di altri team. Nel nostro caso questi numeri sono stati confrontati favorevolmente e non c'erano più preoccupazioni.

La mia conclusione basata su questa esperienza è:

... il modo migliore per convincere chiunque che il tuo approccio al fare qualcosa è pratico e pragmatico, è farlo e misurarlo con altri approcci. Alla gente non importa del dogma o del perché pensi che qualcosa dovrebbe essere il modo migliore. Solo mostrando alle persone i numeri e misurando l'efficacia del tuo approccio puoi davvero dimostrare che le tue pratiche sono efficaci.

Su altri progetti, abbiamo lavorato a fianco di sviluppatori clienti che non hanno creato test unitari o TDD e abbiamo dovuto mantenere i test che hanno superato. Tuttavia, diventa molto facile vendere l'approccio TDD a quegli sviluppatori clienti quando puoi dire loro cosa hanno rotto nel codice prima che lo sappiano!

Quindi, nel tuo caso, lo farei di nascosto se necessario (forse c'è una piccola area del codice che puoi iniziare a testare che cambia spesso o di cui sei responsabile), ma tenere traccia dei tuoi numeri - qual è il sforzo per creare i tuoi test? Qual è il tasso di difetto? Come si confronta con altri progetti / membri del team?

A mio avviso, nessuno dovrebbe chiedere l'autorizzazione o scusarsi per voler svolgere correttamente il proprio lavoro e qualsiasi sviluppatore professionista dovrebbe tentare di testare il proprio codice con test automatizzati ovunque sia possibile e pratico. Spero che nel tuo caso siano entrambe queste cose. In bocca al lupo!


Grazie per la risposta. Ho provato il collegamento ma sembra rotto. Penso che mi piacerebbe leggerlo se fosse disponibile.
Joe J,

Joe, scusa per il deadlink. L'ho ripubblicato sul mio blog personale, quindi il link dovrebbe funzionare ora.
Paddyslacker

2
Questa è una buona risposta, ma non tutti possono facilmente confrontare ciò che stanno facendo con qualche altro progetto. Non ricordo dove l'ho letto, ma l'argomento più convincente per un uomo d'affari che ho visto è stato quello di confrontare i test unitari con la contabilità a doppia iscrizione. Ingenuamente, fare i numeri due volte è una perdita di tempo. Ma chiunque sappia qualcosa sulla contabilità considererebbe la possibilità di fare solo un lato dei libri una trascurabile e irresponsabile abbandono dei doveri. I test unitari sono analoghi allo sviluppo della contabilità a doppia entrata.
JimmyJames,

@JimmyJames, sono d'accordo che non puoi sempre confrontarti con un altro progetto e sono d'accordo con la tua analogia sulla contabilità a doppia entrata. Penso che se stai iniziando a utilizzare i test unitari su una base di codice esistente senza test, puoi confrontare la percentuale di difetti della base di codice e altre metriche tra la parte coperta dai test unitari e il codice scoperto, in modo da avere alcuni dati reali per il backup anche il tuo approccio.
Paddyslacker

@Paddyslacker Non sono in disaccordo. È un po 'una questione di pollo e uova. Se hai bisogno dell'autorizzazione per iniziare a scrivere unit test, è difficile usarli per dimostrare che l'autorizzazione dovrebbe essere concessa. Non è né o. Il confronto con dati reali è un argomento molto, molto più forte. Questo argomento alternativo è più debole ma più facile da montare.
JimmyJames,

20

Mostra il ritorno sull'investimento (ROI)

Scrivere test automatici richiede tempo. Una volta. L'esecuzione di test automatici richiede zero tempo, perché puoi fare qualcos'altro mentre sono in esecuzione.

Esempio: il test manuale della funzione X richiede 30 minuti. Scrivere un test automatico per questo richiederebbe 1 ora. Anche se non abbiamo bug, dovremo testare la funzione X dieci volte nel corso del progetto, poiché i suoi livelli e componenti dipendenti vengono modificati. Quindi automatizzare il test della funzione X ci farà risparmiare 4 ore durante la vita del progetto.

In realtà, è quando hai un bug che i test automatizzati ripagano davvero: in primo luogo, trovano i bug in anticipo e in modo economico, risparmiando tempo e imbarazzo. In secondo luogo, se hai un bug difficile e attraversi molti cicli di code-build-test per capirlo, il tempo risparmiato sui test manuali si somma straordinariamente velocemente.

Le aziende comprendono il risparmio di tempo e denaro. Ecco come venderlo.


3
Inoltre, una volta che l'applicazione è stata distribuita e qualcuno chiede una modifica, è molto più facile vedere se stai infrangendo qualcosa con le tue modifiche.
m4tt1mus,

4
@mattimus: assolutamente - una suite di test automatizzata paga come una rendita; si tratta, in effetti, di un'assicurazione
Steven A. Lowe,

15

Se li hai già affrontati e non sono d'accordo, ma non ti senti a tuo agio a scrivere codice senza di loro ... allora non chiedere di nuovo. Scrivili e non registrarli.

La direzione non conta le righe di codice, ma vedrà che tutti i tuoi check-in hanno tassi di passaggio più alti dal QA (o dai clienti) e alla fine ti chiederanno perché ... allora puoi essere tutto come "BAM! TDD !"

Non stai scherzando con il progetto, il processo o la fonte ... quindi non vedo un motivo negativo. Onestamente, non vedo un motivo per cui sia diverso dal punto di vista temporale rispetto all'esecuzione di tutti i test di esecuzione manuale + input + controllo.


4
+1: devi comunque provare. Basta scrivere unit test piuttosto che cavilli su come "testare" i test.
S.Lott

1
Il solo fatto di averli localmente non funziona bene in un ambiente di squadra con una base di codice condivisa, altre persone continueranno a superare i test con le loro modifiche.
Alb

3
@Alb: questo è il prezzo che paghi quando la direzione non entra a far parte - meglio di nessun test.
Steven Evers,

3
Bravo. Qualsiasi test è meglio di nessun test. Se un test si interrompe a causa della modifica di qualcun altro, è un buon motivo per chiedere perché l'API è cambiata senza alcun annuncio.
S.Lott

"La direzione non conta le righe di codice" è molto vero. Grazie per la risposta!
louisgab,

7

1) Il cliente non ha pagato per i test unitari

Il cliente (pensava di averlo) pagato per una soluzione funzionante. A seconda dei contratti, la correzione dei difetti può effettivamente essere redditizia per la vostra azienda. Se c'è abbastanza blocco. Quindi, tornando a pagare per una soluzione funzionante. TDD dovrebbe aiutare tale obiettivo.

2) Il progetto non prevede tempo per il TDD

TDD non richiede più tempo. Dovrebbe ridurre la quantità di codice estraneo o superfluo e focalizzare la base di codice su ciò che fa passare i test. Tutti i test superati, soggetti a qualità e adeguatezza dei test, indicano che il codice è stato eseguito.

3) Debito tecnico? Quale debito tecnico?

Ho l'impressione che tu stia discutendo per l'aggiunta retrospettiva di test al codice esistente. Questa è una vendita da incubo nel migliore dei casi e non porta i benefici che potresti aspettarti. Tuttavia, l'aggiunta di test mentre correggi i bug dovrebbe essere accettabile e aiutare a lungo termine.

Non raccomando comunque di scrivere i test come suggerito da Snorfus. Sembra bello in teoria, ma i test di unità ci riesce e fare cambiamenti nel corso del tempo. Quando i requisiti cambiano, vengono aggiunte nuove funzionalità che è necessario aggiornare i test unitari. Se lavori come parte di un team, i test delle unità diventeranno obsoleti man mano che altri aggiungono funzionalità / correzioni.

Sto affrontando i punti specifici che hai citato piuttosto che sollevarne di nuovi perché c'è un margine di manovra lì per fare progressi o capire perché viene bloccato.


5
"Non raccomando comunque di scrivere i test" - Sono già stato in questa posizione prima. È difficile mantenere i test da soli. Se quel carico diventa troppo pesante, lascia cadere i test. Almeno li avevi quando stavi lavorando attivamente nella base di codice, il che dovrebbe aiutare con la progettazione / correzione iniziale, se non catturare le regressioni. Ho trovato un valore enorme nei test unitari a fini di progettazione, ma ho riscontrato abbastanza poche regressioni quando i test non sono mantenuti allo stesso livello del codice.
Steve Jackson,

1
Chiunque abbia aggiunto funzionalità / correzioni e non abbia aggiornato i test unitari non ha compreso il concetto di unit test.
Akira Yamamoto,

In effetti Akira, questa è una delle questioni più confuse che incidono sulla vitalità del TDD o sui processi correlati. Tieni a mente che a quanto pare l'ho scritto 7 anni fa, molto è ancora rilevante. Scrivere test (buoni, oggettivi, concisi) è difficile. Scrivere test per una base di codice che non ha nessuno è molto difficile. Far sì che i dirigenti non tecnici vedano i benefici è difficile (a meno che non leggano un articolo a riguardo, nel qual caso verrai "metricato" a morte. Anche il concetto di cosa sia un'unità è difficile. Sono un classicista, quindi la mia idea di un'unità non è la stessa di un Mockist (ad esempio con 30 personaggi rimasti).
Ian

4

Per ogni cliente che deve affrontare problemi di produzione,

  1. Scrivi un test unitario e invia un'e-mail al gestore dicendo che hai aggiunto un test unitario per coprire lo scenario.

  2. E digli che questo problema non si ripresenterà in produzione perché il nostro test unitario viene eseguito di notte e verremo a conoscenza prima che il codice vada in produzione osservando il fallimento di questo test unitario.

  3. Digli che se avessimo già eseguito questo test unitario prima che il codice andasse in produzione, questo problema di produzione non si sarebbe mai verificato.

Fallo in modo coerente e persistente e presto ne sarà convinto. Ai manager non piace il cliente che affronta i problemi di produzione e comprerà nell'idea di testing dell'unità. In bocca al lupo.


Questo è buono :-)
BVengerov
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.