È tipico per le aziende di software di grandi dimensioni non documentare o codice Refactor? [chiuso]

8

Ho iniziato a lavorare in una grande azienda di software e sono stato assegnato a un progetto di oltre un milione e mezzo di linee di codice. Fa parte di una suite di programmi che viene venduta ai clienti (non è un progetto interno) e il codice sorgente può essere acquistato, se lo desiderano (anche se, date le spese aggiuntive associate, questo sembra raro). Stanno facendo progetti di software da anni e i loro prodotti attuali sono destinati a continuare per il prossimo futuro.

Con mia sorpresa, il milione e mezzo di linee di codice sono quasi completamente prive di documentazione. Inoltre, ci sono alcune aree di codice che sono incredibilmente disordinate da seguire o che potrebbero utilizzare alcuni refactoring per diventare molto più facili da capire (ad esempio, un miglioramento del linguaggio di programmazione è uscito da circa 10 anni fa che renderebbe molte parti del codice molto più pulito, per non dire meno incline agli insetti). Non sembrano esserci sforzi per rettificare questo e le mie offerte per farlo per le parti con cui lavoro hanno incontrato resistenza, per cui non ho mai avuto una risposta chiara.

Queste pratiche sono comuni in una grande azienda nel settore del software? O la mia azienda è unica nella sua mancanza di refactoring e documentazione?

Addendum: sulla base di alcuni commenti, vorrei chiarire cosa sto cercando. Capisco che la mia azienda ha debiti tecnici e questo è male. Non sto cercando di determinare se la mia azienda stia peggio o meno per questo, voglio solo sapere se questa mancanza di documentazione e resistenza al refactoring è un fatto della vita nel mondo della programmazione che avrò da gestire se continuo a lavorarci.

    
posta Thunderforge 27.11.2013 - 23:14
fonte

3 risposte

12

Ci sono una serie di motivi per cui le aziende non riescono a investire nel rendere i loro programmi "migliori", dal punto di vista del debito tecnico:

  1. La riduzione del debito tecnico non aggiunge nuove funzionalità al software. Viene quindi percepito dalla direzione come privo di valore monetario (in una certa misura giustificabile)

  2. La natura del business del software premia la prima volta sul mercato, non la migliore.

Potrei andare avanti, ma tutti gli altri motivi sono solo varianti di questi due. Fondamentalmente, tutti si aggiungono al pensiero a breve termine, concentrandosi sui profitti immediati anziché sulla redditività a lungo termine.

Tutte le aziende con progetti software non banali e attivi hanno un certo grado di debito tecnico. Nessuna azienda è completamente esente da debiti.

Every software project I've ever worked on has accrued Technical Debt over time -- Jeff Atwood.

Riguardo alla documentazione specifica, meno c'è, meglio è. Dollaro in dollari, si ottiene un rendimento maggiore rendendo il software più semplice da utilizzare e più facile da gestire rispetto a quanto si scrive più documentazione per questo.

Ci sono alcune indagini informali sul debito tecnico e su come le aziende lo gestiscono; tutto ciò che devi fare è cercarli Ecco uno :

Oppure questo uno :

Sembraabbastanzaevidentechelatuaaziendanonsial'unicaadaverequestoproblema.Potrebbenonesserenemmenoinminoranza.

Ulterioriletture
Terzo workshop internazionale sulla gestione del debito tecnico - Panoramica
Gestione del debito tecnico nei sistemi compatibili con il software

    
risposta data 27.11.2013 - 23:21
fonte
8

Una prospettiva che non credo sia stata trattata in altre risposte (ancora) è il costo del cambiamento in tre aree:

  1. test
  2. rifamiliarizzazione
  3. costo opportunità

Un'azienda con un prodotto di grandi dimensioni dovrà testare tutte le modifiche. Queste procedure di test devono essere monitorate su più assi: piattaforme diverse, carichi di lavoro diversi, prospettive diverse (prestazioni, funzionalità, usabilità, retrocompatibilità).

Le persone che lavorano nelle aree del codice che stai cambiando dovranno anche familiarizzarsi con il codice, e diventa particolarmente ingombrante con più versioni supportate ("mi dispiace, che versione è quella? Ahh, questo è il nuovo codice ed è necessario parlare con Bob per questo "). Analogamente, la modifica del codice solo per renderla carina tende a rendere molto complicati da leggere cose come registri delle modifiche (diff, patch, ecc.) E problemi di tracciamento in un momento particolare in cui è stato introdotto il bug può essere molto impegnativo se c'è qualcosa nella cronologia del codice che cambia tutto . Inoltre, se un bug è di vecchia data (queste cose accadono) potrebbe essere in più versioni supportate del tuo codice, e ora devi correggere il vecchio e il nuovo codice in modi potenzialmente molto diversi.

Infine, spesso è necessario prendere una decisione dove spendere tempo e denaro. Questo è più che il tuo tempo, ma piuttosto cosa dovresti fare con il tuo tempo (e l'impatto che ha sulle risorse a valle). Sarebbe preferibile passare il tempo del tuo team di sviluppo su funzioni che possono produrre più vendite, conquistare nuove quote di mercato e generare profitti, o se il tempo / denaro da spendere per cose che gli utenti finali non noteranno, non può essere messo su materiale di marketing ("hey, il nostro codice esistente fa schifo, ma lo abbiamo reso migliore") ed è puro costo (nessun profitto).

In conclusione, denaro . Sempre (beh, quasi sempre).

    
risposta data 28.11.2013 - 00:36
fonte
5

Sì. Basato sulle circa 50 società che ho incontrato personalmente, come dipendente o consulente, e le circa 200 aziende che conosco tramite i colleghi.

Il tipo di prodotto (1,5 milioni di righe) che descrivi ha impiegato anni per essere realizzato e molti degli sviluppatori originali sono passati (o diventano manager).

Il senior management e i principali clienti continuanti desiderano solo piccoli cambiamenti incrementali: vogliono stabilità. Ciò che noi tecnici pensano siano miglioramenti sono nei loro occhi rischi. Anche se siamo in grado di mostrare che la nuova versione si comporta ancora come la vecchia, essi vedono un rischio perché il vecchio sistema ha esattamente la caratteristica che descrivi: non è documentato. Per loro, potrebbe esserci un comportamento non documentato su cui i clienti fanno affidamento.

Dal loro punto di vista: non è rotto, quindi non aggiustarlo. Stai anche vedendo che c'è una cultura aziendale in tal senso. Le persone che resistono ai tuoi "miglioramenti" probabilmente hanno fatto lo stesso come te quando hanno iniziato.

Non aspettarti di "vincere". Questa è una questione culturale e non può essere modificata se non per il cambiamento a livello di CEO.

    
risposta data 27.11.2013 - 23:53
fonte