I bug fanno parte del debito tecnico?


44

Il nostro Scrum Master continua a riferirsi ai bug come debito tecnico. Ha ragione, i bug sono considerati debiti tecnici nel mondo di Agile?


Perché è importante decidere se sono debiti tecnici o no? Interesserà il modo in cui rappresenti i bug nella tua mischia o influisce sul modo in cui prevedi di risolverli?
Bryan Oakley,

@BryanOakley Alcuni bug possono bloccarti in modo tale da costringerti a aggirarli, introducendo un debito ancora più tecnico. Questi bug potrebbero essere troppo costosi da risolvere
BЈовић

4
@BryanOkley - Ho sempre pensato che il debito tecnico fosse design o refactoring che era necessario per migliorare l'implementazione ma al momento non possibile a causa di vincoli di tempo / budget. Penso che sia importante utilizzare la terminologia corretta. Potrei sbagliarmi o potrebbe sbagliarsi, motivo per cui ho posto la domanda.
user86834

Lo capisco. Perché è importante chiamarli debito tecnico? Stai dicendo che se li classifichi come "debito tecnico", tratterai questi bug in modo diverso rispetto ad altri bug?
Bryan Oakley,

1
Puoi avere un'enorme quantità di ufficio tecnico e non avere un singolo bug. L'ufficio tecnico è l'opposto di un codice ben scritto e ben progettato. Il codice ben scritto è facile da mantenere, testare e aggiungere. Il reparto tecnico rallenta lo sviluppo, rende difficile rintracciare i bug e aumenta le possibilità che il nuovo codice introduca i bug.
Luis Perez,

Risposte:


35

Penso che la risposta qui sia abbastanza semplice: la caratteristica chiave del debito tecnico è che è qualcosa che sosteniamo per scelta.

Scegliamo di prendere decisioni sull'architettura, sul design o sull'implementazione che ci aspettiamo che ci causino problemi in seguito al fine di raggiungere obiettivi specifici prima.

Un bug non è qualcosa che scegliamo di avere nel nostro codice, quindi di fatto non è un debito tecnico.

Naturalmente si possono fare tutti i tipi di argomenti interessanti (e possibilmente validi) sulle scelte fatte dopo la scoperta, ma fondamentalmente (e in particolare nel contesto della domanda) no, i bug non sono debiti tecnici - mi sembra più un abuso del bingo di parole d'ordine.


Come poscritto - Non sono d'accordo con l'affermazione che è un dato di fatto che il debito tecnico porterà a bug in sé e per sé, poiché ciò porta a molte ipotesi sulla natura delle scelte fatte. Ad esempio, puoi avere un codice di prova ben scritto, ben strutturato, che fa ancora - diciamo - compromessi architetturali per la consegna anticipata. Allo stesso modo potresti scegliere di non automatizzare i tuoi processi di implementazione che non porteranno a bug ma probabilmente porteranno molto stress e dolore. Ovviamente se il debito è che hai scritto un codice che non è SOLIDO (o qualsiasi altra cosa) allora sì ... ma non è affatto sempre così.


1
+1. Penso che la risposta di BЈовић sia praticamente giusta, ma la tua risposta colpisce davvero il chiodo in testa. (Sono un po 'confuso dal tuo uso del termine di fatto , però. Non credo che tu possa dire che de jure , un bug è un debito tecnico?)
ruakh

L'uso del linguaggio è così divertente ... prova questo: en.wikipedia.org/wiki/De_facto - leggilo come "a tutti gli effetti" che è abbastanza vicino al mio intento
Murph

"Penso che la risposta qui sia abbastanza semplice - la caratteristica chiave del debito tecnico è che è qualcosa che sosteniamo per scelta." Da dove hai preso questa definizione? Non penso sia giusto. Questa è una parte del debito tecnico, l'altra parte è implicita ed è generalmente dovuta a ignoranza e cattive pratiche.
gphilip,

de jure du jure. Domani di fatto. QED.
radarbob,

1
secondo il Technical Debt Quadrant di Martin Fowler è possibile identificare i bug e il codice errato come debito "sconsiderato involontario": martinfowler.com/bliki/TechnicalDebtQuadrant.html . Penso che il punto sia che se contrassegni alcuni bug sensibili come debito, puoi capire quanto ti costano e se è necessario eliminarli. Ad esempio, hai un modulo scritto sciatto che viene cambiato solo una volta all'anno e ci vorrebbero settimane per riscriverlo - probabilmente dovresti mantenerlo così com'è perché il pagamento degli interessi su questo debito è molto piccolo
shershen

20

Sì.

Il debito tecnico (noto anche come debito di progettazione o debito di codice) è una metafora neologica che si riferisce alle eventuali conseguenze di un'architettura software scadente o in evoluzione e allo sviluppo di software all'interno di una base di codice.

Fonte: Wikipedia

Leggi il debito tecnico come qualcosa che avresti potuto evitare avendo un flusso di lavoro migliore (ad esempio facendo correttamente l'architettura prima di saltare alla codifica, facendo TDD, ecc.), Migliori pratiche di codifica, ecc.

La maggior parte dei bug avrebbe potuto essere evitata da un'ulteriore revisione o dall'uso di metodi più formali. Non facendo tutto il possibile per non avere bug in primo luogo, si riduce il costo immediato / a breve termine del progetto, ma aumentando il debito tecnico.


Dopo aver letto la risposta di BЈовић , vedo che potrebbe non essere facile come pensavo.

  • Ad esempio I bug fanno parte del debito tecnico? l'articolo afferma che solo i bug che conosci ma che hai deciso di non risolvere fanno parte del debito tecnico.

  • Un altro esempio, Christopher's Thoughts on Technical Debt qualifica i bug come risultato del debito tecnico, non parte di esso. Detto questo, molti dei risultati elencati, come "costo per implementare nuove funzionalità", sono influenzati dal numero di bug.

  • Infine, quando ho creato il modello di debito tecnico ABCDE-T , ho incluso i bug come uno dei sei fattori, ma sono considerati in modo diverso. L'attenzione non si concentra sugli stessi bug, ma sui modi in cui vengono raccolti, ordinati per priorità e risolti. Gli stessi bug appaiono come il risultato del debito tecnico (come nell'esempio precedente), ma non si presentano mai come un fattore del debito tecnico.

Detto questo, sono ancora propenso a rispondere che i bug, tutti i bug, fanno parte del debito tecnico.

Primo argomento:

Leggendo la citazione di Jeff Atwood, la maggior parte dei bug si qualificherebbe come:

lo sforzo extra che dobbiamo fare nello sviluppo futuro a causa della scelta del design veloce e sporca

Nelle applicazioni aziendali, quasi tutti i bug provengono da una scelta di progettazione rapida e sporca o da cattive pratiche (sarebbe la mancanza di test, l'uso di tecnologie che gli sviluppatori non conoscono abbastanza, la mancanza di comunicazione, la mancanza di comprensione del dominio, ecc.) Ciò significa che "rifattorizzando il design rapido e sporco in un design migliore" e adattando le pratiche migliori, le aziende potrebbero risolvere la maggior parte dei loro bug.

Secondo argomento:

Se facciamo un parallelo tra il debito ordinario di una società che è importante prendere in considerazione quando una società viene venduta a un'altra, e il debito tecnico, che è altrettanto importante tenere in considerazione quando un progetto viene venduto a un'altra società o dato per un altro team, possiamo facilmente vedere che i bug fanno parte del debito tecnico, dal momento che il nuovo team dovrebbe:

  • O devi affrontare questi bug prima di creare nuove funzionalità (punto 5 di Joel Test: correggi i bug prima di scrivere un nuovo codice?)

  • Oppure mantieni i bug, preservando / aumentando in questo modo il debito tecnico.


1
Personalmente non penso ai difetti come debito tecnico anche se l'argomento presentato in questa risposta è valido, ma a) non importa davvero come definiamo il debito tecnico IMO, e b) questa è una risposta così ben scritta che io ' Lo voto comunque. +1!
Bryan Oakley,

13

Jeff Atwood nel suo articolo Paying Down Your Technical Debt dà una bella risposta su cosa sia il debito tecnico:

il debito tecnico comporta pagamenti di interessi, che si presentano sotto forma di uno sforzo supplementare che dobbiamo compiere nello sviluppo futuro a causa della scelta del progetto rapida e sporca. Possiamo scegliere di continuare a pagare gli interessi, oppure possiamo rimborsare il capitale modificando il design rapido e sporco in un design migliore. Anche se costa pagare il capitale, guadagniamo riducendo i pagamenti di interessi in futuro.

A rigor di termini, i bug non fanno parte del debito tecnico, se non rallentano l'ulteriore sviluppo del software (modifica delle cose, aggiunta di nuove funzionalità, ecc.). Sono difetti del software.

Tuttavia, quando è troppo costoso riparare un bug o ti costringe a aggirarlo (e introdurre un debito ancora più tecnico), allora diventa parte di un debito tecnico.


1
In realtà lo fanno, perché i bug possono comportare ulteriori problemi con nuove funzionalità che non sarebbero necessarie senza i bug. Ho anche visto il codice evolversi in una cattiva direzione (accumulando più debito tecnico) a causa di un bug che in qualche modo si è evoluto in un "non è un bug, è una caratteristica" perché i clienti hanno scritto script o tutto ciò che si basa sul comportamento errato.
Marjan Venema,

@MarjanVenema Ottimo punto. Non ci ho pensato.
BЈовић

Nota che questa citazione non è di Jeff Atwood, è presa da un post di Martin Fowler . Jeff cita anche questo nel suo post sul blog.
Uooo,

6

Un bug non è un debito tecnico. Il debito tecnico sta risparmiando sulla qualità, non sulla sua assenza. Il software non dovrebbe essere consegnato con bug in primo luogo. Sai, tutto quel software funzionante su una documentazione completa.

I più grandi trasgressori del debito tecnico sono le "correzioni temporanee di errori", sai quelli che hai messo per superare il test e far accettare la storia. Man mano che si accumulano correzioni temporanee, patch e altre cose, il codice diventa inutile, ingombrante, difficile da aggiornare e testare e in generale è un incubo, ma fa ancora il suo lavoro.

A sostegno di questa opinione, sono andato direttamente alla fonte, Ward Cunningham. A proposito di ciò, Ward ha fatto una buona intervista qualche tempo fa con Capers Jones, vale la pena dare un'occhiata.

Dibattito tecnico sul debito, con Ward Cunningham e Capers Jones

Un altro articolo che merita una lettura è di Martin Fowler

Martin Fowler sul debito tecnico

Nell'articolo di Martin, si trova il link alla menzione originale del debito tecnico di Ward Cunningham, da OOPSLA92:

Il sistema di gestione del portafoglio WyCash

Una citazione dall'articolo sopra:

Sebbene il codice immaturo possa funzionare bene ed essere completamente accettabile per il cliente , le quantità in eccesso renderanno un programma impercettibile, portando a un'estrema specializzazione dei programmatori e infine a un prodotto non flessibile. La spedizione del primo time code è come indebitarsi.

Alla fine, il debito tecnico potrebbe essere arrivato a includere bug per alcune persone, e immagino che vada bene. Solo non penso che fosse l'intenzione originale.


"In primo luogo, il software non deve essere fornito con bug." Tutto il software, tranne il programma più semplice, contiene bug. Hai impostato questa barra troppo alta.
bhspencer,

2

A rigor di termini, la risposta alla tua domanda è No.

Il debito tecnico può (e probabilmente porterà) a dei bug, ma concludere che qualsiasi errore è il risultato del debito tecnico sta mettendo un'interpretazione tra due fatti: c'è un errore e c'è debito tecnico (supponendo che possa essere concluso come un fatto).

Se il tuo Scrum Master sta affermando "come teoria" che i bug sono il risultato di un debito tecnico, sta tagliando gli angoli. Se lo dice su bug specifici che continuano a riapparire, potrebbe anche avere ragione - non possiamo vedere la qualità del codice da qui ;-)

Potrebbe anche avere un reclamo in corso su persone che non lo ascoltano sul debito tecnico e quindi etichettano ogni bug come debito tecnico, ma ora sto speculando.


2

Secondo me, non importa se dici che i bug fanno parte del debito tecnico ... oppure no.

Il fatto evidente è che i bug esistenti rappresentano un lavoro extra che potrebbe essere necessario eseguire in futuro, per risolverli o aggirarli.

Il debito tecnico (dato che l'etichetta viene generalmente utilizzata) rappresenta anche un lavoro extra che potrebbe essere necessario eseguire in futuro ... in un modo o nell'altro.

Quindi, sia che tu dica che i bug noti (o sconosciuti) siano debiti tecnici ... o no ... è davvero solo una questione di definizioni. E poiché non esiste una definizione autorevole 1 di "debito tecnico", l'intera discussione è in qualche modo inutile.

Come scrisse Lewis Carroll:

"Quando uso una parola," disse Humpty Dumpty, in tono piuttosto sprezzante, "significa esattamente ciò che scelgo che significhi, né più né meno." .

Ecco come funziona il linguaggio naturale. Le parole significano ciò che la gente pensa di voler dire. Le definizioni del dizionario e così via documentano semplicemente il modo in cui le parole vengono utilizzate e non sono necessariamente una documentazione accurata. Se il tuo Scrum Master vuole riferirsi a bug noti come debito tecnico, chi può dire che ha "torto"?


1 - Citare persone come Ward Cummingham e Caper Jones non aiuta neanche. Nella migliore delle ipotesi ci dice cosa significano (o significano) quando usano (usano) la frase. Non "possiedono" la frase. Sebbene siano senza dubbio autorità su questi temi, questa è ancora solo la loro opinione.

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.