Come posso quantificare la quantità di debito tecnico esistente in un progetto?


67

Qualcuno sa se esiste un qualche tipo di strumento per mettere un numero sul debito tecnico di una base di codice, come una sorta di metrica del codice? In caso contrario, qualcuno è a conoscenza di un algoritmo o di una serie di euristiche per questo?

Se nessuna di queste cose esiste finora, sarei interessato a idee su come iniziare con una cosa del genere. Cioè, come posso quantificare il debito tecnico sostenuto da un metodo, una classe, uno spazio dei nomi, un assembly, ecc.

Sono molto interessato all'analisi e alla valutazione di una base di codice C #, ma non esitate a cercare anche altre lingue, in particolare se i concetti sono trascendenti.


12
Il debito tecnico deriva dalle decisioni, non dal codice. Si accumula a causa di cattive scelte di gestione. Non è chiaro che "metodo, una classe, uno spazio dei nomi, un assembly" contengano debiti tecnici da soli. Rappresentano una responsabilità quando è disponibile una scelta migliore.
S. Lott,

7
Direi (nel contesto della metafora del debito) che i gestori potrebbero essere i detentori del debito, ma gli artefatti del codice rappresentano la valutazione del debito e potrebbero essere quantificati. Cioè, sono d'accordo sul fatto che i manager possano prendere una decisione come "dimenticare i test unitari perché non abbiamo tempo" e quindi incorrere in debiti tecnici. Ma, certamente, penso che tu possa inserire un numero in singoli elementi del codice come euristico. Pensala in questo modo - se la direzione prende una serie di decisioni orribili per il futuro, ma non è stato scritto alcun codice, c'è qualche debito in quel momento?
Erik Dietrich,

3
"c'è qualche debito in quel momento?" Il debito deve accumularsi, hai ragione. Ma non è il codice; è il volume di "lavoro" svolto che deve essere annullato. Specifiche, design, codice, lavoro DBA, tutto deve essere rielaborato. La misurazione del debito derivante da artefatti software (come linee di codice sorgente) è simile alla previsione dei costi di sviluppo.
S. Lott,

7
Misurare il debito tecnico è difficile, inoltre confonde i gestori. Tuttavia, posso dirti un buon modo per combattere il debito tecnico: prototipi economici, carini e funzionanti, in particolare se la base di codice ruota attorno alla GUI. Come Joel ha suggerito qui: joelonsoftware.com/articles/fog0000000332.html , passa un po 'di tempo ogni giorno a ripulire le cose. Il cambiamento deve essere miglioramenti positivi, non "OMG, il nostro debito tecnico = pentablobs e sta aumentando esponenzialmente a un ritmo di ... il cielo sta cadendo". Trascorri un po 'di tempo ogni giorno sui kaizen in un modo che non rompe le cose che funzionano. Fare amicizia.
Lavoro

6
@ZoranPavlovic Nel tuo bizzarro e indesiderato falso dilemma manca una terza opzione: volevo sapere se c'erano strumenti che tentavano di quantificare il debito tecnico.
Erik Dietrich,

Risposte:


38

Il debito tecnico è solo un'idea astratta che, da qualche parte lungo le linee di progettazione, costruzione, test e manutenzione di un sistema, sono state prese alcune decisioni in modo tale che il prodotto è diventato più difficile da testare e mantenere. Avere più debito tecnico significa che sarà più difficile continuare a sviluppare un sistema: o è necessario far fronte al debito tecnico e allocare sempre più tempo per quelli che altrimenti sarebbero compiti semplici, oppure è necessario investire risorse (tempo e denaro) per ridurre il debito tecnico attraverso il refactoring del codice, il miglioramento dei test e così via.

Esistono diverse metriche che potrebbero darti qualche indicazione sulla qualità del codice:

  • Copertura del codice. Esistono vari strumenti che indicano quale percentuale di funzioni, istruzioni e righe sono coperte dai test unitari. È inoltre possibile mappare i test di sistema e di accettazione ai requisiti per determinare la percentuale di requisiti coperti da un test a livello di sistema. La copertura appropriata dipende dalla natura dell'applicazione.
  • Accoppiamento e coesione . Il codice che presenta basso accoppiamento e elevata coesione è in genere più facile da leggere, comprendere e testare. Esistono strumenti di analisi del codice che possono segnalare la quantità di accoppiamento e coesione in un determinato sistema.
  • La complessità ciclomatica è il numero di percorsi unici attraverso un'applicazione. In genere viene conteggiato a livello di metodo / funzione. La complessità ciclomatica è correlata alla comprensibilità e testabilità di un modulo. Non solo valori di complessità ciclomatica più elevati indicano che qualcuno avrà più problemi a seguire il codice, ma la complessità ciclomatica indica anche il numero di casi di test richiesti per raggiungere la copertura.
  • Le varie misure di complessità di Halstead forniscono informazioni sulla leggibilità del codice. Questi contano gli operatori e gli operandi per determinare volume, difficoltà e sforzo. Spesso, questi possono indicare quanto sarà difficile per qualcuno raccogliere il codice e comprenderlo, spesso in casi come una revisione del codice o un nuovo sviluppatore alla base di codice.
  • Quantità di codice duplicato. Il codice duplicato può indicare il potenziale per il refactoring dei metodi. Avere un codice duplicato significa che ci sono più righe per l'introduzione di un bug e una maggiore probabilità che gli stessi difetti esistano in più punti. Se la stessa logica aziendale esiste in più punti, diventa più difficile aggiornare il sistema per tenere conto delle modifiche.

Spesso, gli strumenti di analisi statica saranno in grado di avvisarti di potenziali problemi. Ovviamente, solo perché uno strumento indica un problema non significa che ci sia un problema: occorre un giudizio umano per determinare se qualcosa potrebbe essere problematico lungo la strada. Queste metriche ti avvisano che potrebbe essere il momento di esaminare un sistema o un modulo più da vicino.

Tuttavia, questi attributi si concentrano sul codice. Non indicano prontamente alcun debito tecnico nell'architettura o nella progettazione del sistema che potrebbe essere correlato a vari attributi di qualità.


1
Attualmente uso le metriche di codice NDepend ( ndepend.com ), CodeRush e VS per tenere d'occhio le metriche citate (ad eccezione delle misure di Halstead, che esaminerò ulteriormente). Pensavo che avrei potuto usare un po 'di fusione di queste metriche per tentare di mettere una sorta di numero su un dato elemento di codice che indicasse approssimativamente, a colpo d'occhio, quanto fosse costoso per lo sviluppo in corso.
Erik Dietrich,

@ErikDietrich Potresti essere in grado di farlo, ma probabilmente non avrei quantificato quel valore. Forse un rapporto di tipo "riepilogo esecutivo" su ciò che gli strumenti della tua metrica ti dicono, rispetto ai cambiamenti nel tempo, sarebbe più appropriato.
Thomas Owens

2
Un'altra semplice metrica che aggiungerei all'elenco è il numero di TODO / HACK / WTF? commenti in una base di codice ...
MaR

@Mar Questo presuppone che tu li usi correttamente e non li giochi a tuo vantaggio. Desideri un po 'di tempo extra per ripulire la base di codice, basta aggiungere questi commenti dove non sono appropriati. Non preoccuparti della base di codice, rimuovili semplicemente da dove dovrebbero essere. I commenti possono mentire, il codice no.
Thomas Owens

1
@Thomas Owens: d'accordo, ma quasi ogni metrica da sola può essere ingannata. Se usato correttamente e onestamente, "TODO metric" fornisce una panoramica a buon mercato su quale codice sia effettivamente mancante o dovrebbe essere modificato (= debito invisibile per metriche basate solo su codice).
MaR

23

Il sonar ha un'euristica del debito tecnico e diverse altre funzioni utili a un progetto software.

Supporta anche una vasta gamma di lingue.

SonarQube (precedentemente Sonar ) è una piattaforma open source per l'ispezione continua della qualità del codice ...

  • Supporta oltre 25 lingue: Java, C / C ++, C #, PHP, Flex, Groovy, JavaScript, Python, PL / SQL, COBOL, ecc.
  • SonarQube è utilizzato anche in Android Deveopment.
  • Offre report su codice duplicato, standard di codifica, unit test, copertura del codice, codice complesso, potenziali bug, commenti, design e architettura.
  • Macchina del tempo e viste differenziali.
  • Analisi completamente automatizzate: si integra con Maven, Ant, Gradle e strumenti di integrazione continua (Atlassian Bamboo, Jenkins, Hudson, ecc.).
  • Si integra con l'ambiente di sviluppo Eclipse
  • Si integra con strumenti esterni: JIRA, Mantis, LDAP, Fortify, ecc.
  • Espandibile con l'uso di plugin.
  • Implementa la metodologia SQALE per calcolare il debito tecnico ...

1
Figo, grazie! Ho e utilizzo NDepend per il mio lavoro in C #, ma faccio anche un po 'di lavoro Java e sono interessato anche alle metriche. Per lo meno, questo mi dà funzionalità per Java e potrebbe rivelarsi un bel complemento di NDepend.
Erik Dietrich,

Fantastico, usiamo Sonar dove lavoro e fa delle cose davvero belle che ti danno un'idea dello stato della tua base di codice.
Robert Greiner,

2
@ErikDietrich, FYI Sonar ha anche un plugin C # .
Péter Török,

@ErikDietrich FYI ora esiste un plug-in NDepend per Sonar ndepend.com/docs/sonarqube-integration-ndepend
Patrick Smacchia - NDepend dev

Esistono alternative open source?
hellboy,

5

Odio usare un'analogia dalla finanza, ma sembra davvero appropriato. Quando stai valutando qualcosa (attività di qualsiasi tipo), può avere sia valore intrinseco che estrinseco. In questo caso, il codice esistente ha un valore intrinseco che sarebbe una quantità corrispondente alla qualità relativa di detto codice e avrebbe anche un valore estrinseco (valore da ciò che si potrebbe fare al codice) e tali quantità sarebbero additive. Il valore intrinseco può essere suddiviso in crediti e debiti (buoni contro cattivi) usando qualunque metodologia stai usando per assegnare un punteggio al codice (+5 per commenti / leggibilità, -10 per copertura del codice, ecc.)

Sicuramente non conosco alcuno strumento che possa quantificarlo oggi e penso che avresti una discussione completamente nuova tra le mani se discuti i meriti delle diverse strategie di "valutazione del debito" ma sono d'accordo con Matthew - il debito è il costo cumulativo per ottenere il codice il più bene possibile, usando qualunque metodo tu usi per costare le ore di lavoro necessarie per arrivarci.

Qualcos'altro da considerare è che esiste sicuramente una misura del rapporto costo-efficacia in base al quale, man mano che ci si avvicina alla "perfezione", il valore di un'ora trascorsa sulla base di codice sta probabilmente diminuendo in modo esponenziale, quindi c'è probabilmente un ulteriore problema di ottimizzazione a massimizzare l'utilità del lavoro svolto.


Sì, il concetto di rendimenti marginali decrescenti è certamente qualcosa a cui vorrei rivolgermi per elaborare e perfezionare la metrica. Quindi, non solo "ecco la mia argomentazione obiettiva per il refactoring di questa classe dal punto di vista commerciale", ma anche "ecco la mia logica per non preoccuparmi a questo punto".
Erik Dietrich,

5

Tra gli sviluppatori una misura abbastanza affidabile del debito tecnico sembra essere WTF / minuto .

Il problema con questa "metrica" ​​è che in genere è piuttosto difficile comunicare "all'esterno".

La metrica che ha funzionato per me nel comunicare il debito tecnico agli "estranei" è stata la quantità di test e sforzi di correzione dei bug (in particolare per correggere i bug di regressione ) necessari per la consegna corretta.

Un avvertimento: sebbene questo approccio sia abbastanza potente, è meglio ricontrollare con buoni vecchi WTF / minuto prima di ricorrere ad esso. Il fatto è che è piuttosto ingombrante: per ottenere i dati, è necessario monitorare attentamente il tempo e registrarlo accuratamente per le categorie appropriate.

  • è molto più facile dichiarare 3 settimane di spesa totale per l'implementazione della funzione A che
     
    ho speso 14 ore per la bozza dell'implementazione della funzione A, quindi 29 ore per testare il fumo, quindi 11 ore per implementare le correzioni per le regressioni che ho scoperto, quindi 18 ore per testare il QA già funzionalità di implementazione. Successivamente, i ragazzi del QA hanno trascorso 17 ore a testare la versione iniziale del candidato. Successivamente ho trascorso 13 ore ad analizzare i bug inviati dal QA per la versione iniziale del candidato e 3 ore a implementare le correzioni. Dopodiché, ho trascorso 11 ore a testare il fumo sulle modifiche apportate alla versione iniziale del candidato. Dopo di che...

In ogni caso, nella mia esperienza sono stati abbastanza facili comunicare i dati relativi ai test e alle attività di correzione dei bug.

Per la versione recente, abbiamo impiegato circa il 90% del tempo a testare e correggere bug di regressione. Per la prossima versione, suggerire di dedicare un po 'di sforzo per ottenere questo valore fino al 60-70%.


Un'altra parola di cautela. Dati come il 90% sopra potrebbero essere interpretati non solo come un'indicazione del debito tecnico, ma anche (sorpresa sorpresa) come indicazione di uno che non è abbastanza esperto nella programmazione / tecnologia particolare. "Fai solo troppi bug nel tuo codice".

Se esiste il rischio che i dati vengano interpretati in modo errato in questo modo, è utile disporre di ulteriori dati di riferimento su qualcosa di meno incline al WTF da confrontare.

  • Supponiamo che ci siano due componenti / applicazioni simili gestiti dallo stesso sviluppatore (i), prima rilasciando al "tasso di spreco" circa il 50% e in secondo luogo a 80-90, questo è un caso abbastanza forte a favore del secondo soggetto di debito tecnico.

Se ci sono tester dedicati nel progetto, potrebbero anche contribuire a una valutazione più obiettiva dei dati. Come ho già detto in un'altra risposta ,

Con i tester, ottieni qualcuno per il backup della tua comprensione dei problemi di progettazione. Quando ci sono solo sviluppatori che si lamentano della qualità del codice , questo suona spesso come WTF soggettivi da dietro la porta chiusa .
 
Ma quando questo viene ripetuto da un responsabile della qualità che dice che qualcosa del genere component Aaveva 100 bug di regressione per 10 nuove funzionalità, al contrario del component Bquale c'erano 10 bug di regressione per 20 nuove funzionalità , la comunicazione si trasforma improvvisamente in un altro gioco.


2
Mi piace molto questa risposta. Con un reparto di controllo qualità dedicato, il rapporto tra i difetti di regressione e i nuovi difetti è molto semplice da calcolare e potrebbe sicuramente darti molto sul debito tecnico.
Erik Dietrich,

4

Penso che la domanda sia: quanto costerebbe "riacquistare" il tuo debito tecnico - vale a dire, quanto lavoro è necessario per risolverlo? Bene, sta alla squadra capirlo.

Durante la pianificazione dello sprint, chiedo al team di stimare la complessità della correzione degli elementi di debito tecnici nello stesso modo in cui stimerebbero la complessità di una user story. A quel punto, è un gioco di negoziazione tra la squadra e il proprietario del prodotto per determinare quale debito tecnico ha una priorità abbastanza alta da essere fatto nello sprint corrente (sostituendo le storie degli utenti reali) e cosa può aspettare.

Se non stai facendo la mischia, mi atterrei alla mia premessa: il debito tecnico dovrebbe essere misurato dal costo del rimedio.


Quindi, nel contesto dei punti della storia, è giusto dire che potresti aggiungere alcuni punti a ciascuna storia se ci fosse un alto grado di debito tecnico rappresentato dalle aree interessate del codice? Cioè, se la storia X comporta l'aggiunta all'elemento di codice Y, che è semplicemente orribile, si affronta alcuni punti della storia specificamente a causa della natura di Y? E quel numero di punti è uguale o correlato al numero di punti per eseguire la correzione che hai menzionato stimando?
Erik Dietrich,

1
@Erik Dietrich - Bene, il TD sta sicuramente aggiungendo complessità alla soluzione. La difficoltà può essere che il fissaggio frammentario TD può essere più costoso di una soluzione all'ingrosso. Quindi potrebbe essere che tu abbia 3 piani che sarebbero valutati a 5 ciascuno se il TD fosse eliminato, ma ne sono 8 ciascuno con il debito in atto, in modo da aggiungere fino a 9 punti di TD. Il compito di sistemare il TD nel suo insieme (indipendentemente dalle storie) potrebbe effettivamente essere un 8. Quindi puoi sostenere che la soluzione all'ingrosso costa meno (8) rispetto al frammento (9). Questo sarebbe parte della negoziazione
Matthew Flynn,

Questo ha senso. E, certamente, quello che sto cercando di fare è fare un caso (un po ') oggettivo per dire qualcosa del tipo "in un anno, possiamo sviluppare X nuove funzionalità se continuiamo ad andare avanti, ma X + Y nuove funzionalità se noi ripagare parte di questo debito tecnico ".
Erik Dietrich,

2

C'è una piattaforma abbastanza potente là fuori chiamata CASTcercare debiti tecnici in grandi applicazioni. Lo abbiamo utilizzato in un progetto in cui abbiamo acquisito un grande potenziamento di un sistema legacy. Non ti dice cosa c'era nella testa delle persone che hanno scritto il codice, ma esamina il codice e trova i difetti del codice e dell'architettura, quindi quantifica il debito tecnico se lo desideri. Il vero uso nel guardare questo, tuttavia, non è la quantità di $ ma l'elenco dei problemi già presenti nel codice. Questo ti dice di una parte del debito tecnico che hai (quindi non sono d'accordo con alcune delle risposte sopra). C'è qualche debito tecnico che è puramente basato sul design ed è molto soggettivo - come la pornografia - lo conosci quando lo vedi e conosci il contesto. Direi se si tratta davvero di un debito "tecnico". C'è qualche debito tecnico che è puramente nell'esecuzione e credo che '


Ho condiviso questa domanda su Twitter e qualcuno ha risposto parlando di CAST. Non sono davvero chiaro su cosa fa tutto dopo aver visitato il loro sito web. C'è una versione gratuita o demo di esso da prendere per un test drive, per caso?
Erik Dietrich,

2

Ecco un webinar del MIT che descrive la ricerca sul debito tecnico nei sistemi software di grandi dimensioni: http://sdm.mit.edu/news/news_articles/webinar_050613/sturtevant-webinar-technical-debt.html

Gli autori hanno scritto codice per analizzare un progetto ed estrarre metriche di "complessità architettonica". È stato dimostrato che queste metriche hanno una forte relazione con la densità dei difetti, la produttività degli sviluppatori e il turnover del personale di sviluppo.

Il lavoro descritto nel webinar si basa sulla ricerca sulla modularità condotta da Alan MacCormack e Carliss Baldwin presso la Harvard Business School. Vorrei guardare anche i loro documenti. Il loro "costo di propagazione" potrebbe essere quello che stai cercando.


1

Direi che le metriche del codice standard possono essere utilizzate come una visione relativa di alto livello dell'indebitamento tecnico. VS Ultimate include un analizzatore di codice che ti fornirà un "indice di manutenibilità" basato su complessità ciclica, accoppiamento, LoC e profondità dell'ereditarietà. Puoi immergerti in qualsiasi punto problematico e vedere i dettagli (fino al livello di funzione). L'ho appena eseguito sul mio progetto e i punteggi più bassi che abbiamo ottenuto erano 69 sul nostro pacchetto di dati (configurazione e inizializzazione di EF) e sulla nostra suite di test. Tutto il resto era 90 o superiore. Ci sono altri strumenti che ti daranno più parametri come quelli discussi nel PPP di zio Bob


Quindi, supponiamo di avere qualcosa che non si trova nella suite di test o nel pacchetto di dati con un punteggio inferiore a 90. Hai una soglia numerica lì dove dici "va bene, non è abbastanza buono e stiamo andando a fare il refactoring"? Oppure, utilizzate queste informazioni per presentare al management o ad alcuni stakeholder la necessità di un refactoring? Cioè, i manager / le parti interessate si preoccupano dell'indice di manutenibilità di Microsoft o presenti tali informazioni in qualche altro modo? Oppure non lo presenti e risolvi il problema da solo?
Erik Dietrich,

Adoro questa domanda. La mia risposta sarà sempre che scrivere il miglior codice che puoi non è qualcosa che chiedi il permesso di fare. Uso quella che lo zio Bob chiama la "regola del boyscout" (lascio sempre il codice in condizioni migliori rispetto a quando sei arrivato) e chiamo refactoring opportunistico. L'idea è che quando devi modificare il codice esistente, prenditi il ​​tempo necessario per a) coprirlo nei test unitari b) refattarlo per renderlo più pulito. Michael Feathers Lavorare efficacemente con il codice legacy fornisce alcune indicazioni su come farlo.
Michael Brown,

@ Mike-Questo ti farà licenziare in molti ambienti di sviluppo in cui viene monitorato e monitorato lo stretto controllo di tutte le modifiche al codice. Soprattutto se il tuo miglioramento apparentemente innocente che nessuno ti ha detto di correggere ha finito per rompere qualcosa che una volta ha funzionato.
Dunk il

Nota Non ho detto di immergermi e ripulire volenti o nolenti il ​​codice. Ho detto di ripulire il codice in cui stai già lavorando. Ho anche lavorato con un codice altamente regolamentato (mi viene assegnato un elemento di lavoro, devo fornire un elenco di modifiche apportate per indirizzare l'oggetto di lavoro per l'approvazione, eseguire modifiche approvate ). 9/10 volte che spiegano il refactoring nella richiesta di modifica comporterebbero l'approvazione.
Michael Brown,

0

Non penserei al debito tecnico come a un dollaro in cui hai bisogno di un modello elaborato per quantificarlo. Lo considererei un favore. Se qualcuno ti fa un favore e probabilmente ti dimentichi, lo scrivi. Quando prendi una scorciatoia, scrivila. Questo ti aiuta a ricordare e più impotenti ti obbligano a riconoscerlo. Non è necessario alcuno strumento di fantasia. Notepad o Ecxel possono fare il trucco.


2
Da una prospettiva realpolitik, direi che le persone più disposte a subire cattiverie a lungo termine per risultati a breve termine sono probabilmente anche le persone meno propense a documentare le loro decisioni. Quindi, sono d'accordo con la tua idea in teoria, ma penso che i "richiedenti di favore" seriali sarebbero i meno propensi a tenere traccia dell'equilibrio dei favori.
Erik Dietrich,

@ErikDietrich - Sono d'accordo. E i peggiori trasgressori seriali non sanno nemmeno che stanno aumentando il loro debito. (Simile ai peggiori trasgressori di carte di credito che schiacciano i loro rating.) Ma il punto di partenza presuppone il desiderio di quantificare, ed è difficile per chi non lo scrive quantificarlo. Non sai dove sia la cacca a meno che non sia il tuo cane, o ti è capitato di intervenire.
MathAttack,

0

Lavoro per un'azienda che sta esaminando esattamente questo. Di seguito sono riportati 3 parametri attuabili che consigliamo di esaminare quando si affronta il debito tecnico. Per ulteriori informazioni su "come" e "quando" per seguirli, abbiamo messo insieme un articolo di sintesi 3 Metriche per capire e affrontare il debito tecnico .

Quali sono i tuoi pensieri? Felice di rispondere a qualsiasi domanda e affamato di sentire il tuo feedback :).

Proprietà per prevenire difetti e indebitamento tecnologico indesiderato

La proprietà è un indicatore principale della salute dell'ingegneria.

Le parti della base di codice che ricevono contributi da molte persone si accumulano nel tempo, mentre quelle che ricevono contributi da un minor numero di persone tendono ad essere in uno stato migliore. È più facile mantenere standard elevati in un gruppo ristretto che è ben informato sulla loro parte della base di codice.

Ciò fornisce un certo potere predittivo: è probabile che parti della base di codice debolmente accumulate accumulino debito nel tempo e diventino sempre più difficili da lavorare. In particolare, è probabile che il debito venga assunto involontariamente , semplicemente come un effetto collaterale di informazioni incomplete e di proprietà diluita della qualità del codice.

Questo è in qualche modo analogo alla tragedia dei beni comuni .

Coesione per migliorare l'architettura

La coesione è un indicatore finale di componenti ben definiti.

La coesione e la sua controparte, l'accoppiamento, sono state a lungo riconosciute come concetti importanti su cui concentrarsi nella progettazione del software.

Si dice che il codice abbia un'alta coesione quando la maggior parte dei suoi elementi appartiene insieme. L'alta coesione è generalmente preferibile perché associata a manutenibilità, riusabilità e robustezza. Alta coesione e accoppiamento lento tendono ad andare di pari passo.

Oltre ad essere associato a codice più riutilizzabile e mantenibile, l'elevata coesione riduce anche il numero di persone che devono essere coinvolte per modificare una determinata parte della base di codice che aumenta la produttività.

Churn per identificare le aree problematiche

Churn (attività ripetuta) aiuta a identificare e classificare le aree mature per il refactoring in un sistema in crescita.

Man mano che i sistemi crescono, diventa più difficile per gli sviluppatori comprendere la loro architettura. Se gli sviluppatori devono modificare molte parti della base di codice per fornire una nuova funzionalità, sarà difficile per loro evitare di introdurre effetti collaterali che portano a bug e saranno meno produttivi perché devono familiarizzare con più elementi e concetti.

Questo è il motivo per cui è importante lottare per una singola responsabilità per creare un sistema più stabile ed evitare conseguenze indesiderate. Mentre alcuni file sono hub architetturali e rimangono attivi quando vengono aggiunte nuove funzionalità, è una buona idea scrivere codice in modo da chiudere i file e rivedere, testare e testare rigorosamente le aree di sfocatura del QA.

Abbandona questi file attivi in ​​modo da poter decidere se devono essere suddivisi per ridurre l'area di modifica della base di codice.


-1

Se hai una buona storia tramite un bugtracker o una sorta di software agile, puoi mantenerlo semplice. Tempo impiegato per completare le attività di base. Inoltre, l'affidabilità delle stime quando il progetto era giovane vs. ora.

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.