La proprietà del codice è un odore di codice?


27

Questo è qualcosa a cui sto pensando da quando ho letto questa risposta nel controverso thread delle opinioni sulla programmazione :

Il tuo compito è metterti senza lavoro.

Quando scrivi software per il tuo datore di lavoro, qualsiasi software che crei deve essere scritto in modo tale da poter essere raccolto da qualsiasi sviluppatore e compreso con il minimo sforzo. È ben progettato, scritto in modo chiaro e coerente, formattato in modo pulito, documentato dove deve essere, costruisce quotidianamente come previsto, verificato nel repository e opportunamente aggiornato.

Se vieni investito da un autobus , licenziato, licenziato o lasci il lavoro, il tuo datore di lavoro dovrebbe essere in grado di sostituirti in un attimo e il ragazzo successivo potrebbe entrare nel tuo ruolo, raccogliere il tuo codice ed essere in piedi e in esecuzione in una settimana al massimo. Se lui o lei non può farlo, allora hai fallito miseramente.

È interessante notare che ho scoperto che avere questo obiettivo mi ha reso più prezioso per i miei datori di lavoro. Più mi sforzo di essere usa e getta, più divento prezioso per loro.

Ed è stato discusso un po 'in altre domande, come questa , ma volevo sollevarlo di nuovo per discutere da un punto di vista più vuoto " è un odore di codice !! " - che non è stato davvero trattato in profondità ancora.

Sono uno sviluppatore professionista da dieci anni. Ho avuto un lavoro in cui il codice è stato scritto abbastanza bene per essere raccolto relativamente rapidamente da qualsiasi nuovo sviluppatore decente, ma nella maggior parte dei casi nel settore, sembra che un livello molto elevato di proprietà (sia individuale che di squadra) sia il norma. La maggior parte delle basi di codice sembra mancare della documentazione, del processo e dell '"apertura" che consentirebbero a un nuovo sviluppatore di prenderli e iniziare a lavorare con loro rapidamente. Sembrano sempre esserci molti piccoli trucchi e hack non scritti che solo qualcuno che conosce molto bene la base di codice ("la possiede") potrebbe conoscere.

Ovviamente, l'ovvio problema è: cosa succede se la persona esce o "viene investita da un autobus"? O a livello di squadra: cosa succede se l'intera squadra ottiene intossicazione alimentare quando escono durante il pranzo di squadra e muoiono tutti? Saresti in grado di sostituire il team con una nuova serie di nuovi sviluppatori casuali relativamente indolore? - In molti dei miei precedenti lavori, non riesco a immaginare che ciò accada affatto. I sistemi erano così pieni di trucchi e trucchi che "devi solo sapere ", che qualsiasi nuovo team che assumerai impiegherebbe molto più tempo del redditizio ciclo economico (ad esempio, nuove versioni stabili) per far ripartire le cose. In breve, non sarei sorpreso se il prodotto dovesse essere abbandonato.

Ovviamente, perdere un'intera squadra in una volta sarebbe molto raro. Ma penso che ci sia una cosa più sottile e sinistra in tutto questo - che è il punto che mi ha fatto pensare di iniziare questa discussione, dato che non l'ho mai visto discusso in questi termini prima. Fondamentalmente: penso che un forte bisogno di proprietà del codice sia molto spesso un indicatore del debito tecnico . Se nel sistema mancano processo, comunicazione, buona progettazione, molti piccoli trucchi e hack che "devi solo conoscere", ecc., Di solito significa che il sistema si sta progressivamente indebitando sempre più a fondo.

Ma il fatto è che la proprietà del codice viene spesso presentata come una sorta di "lealtà" verso un progetto e un'azienda, come una forma positiva di "assunzione di responsabilità" per il tuo lavoro - quindi è impopolare condannarlo apertamente. Ma allo stesso tempo, il lato del debito tecnico dell'equazione spesso significa che la base di codice sta diventando progressivamente meno aperta e più difficile da lavorare. E soprattutto quando le persone passano e i nuovi sviluppatori devono prendere il loro posto, il costo del debito tecnico (cioè della manutenzione) inizia a salire.

Quindi, in un certo senso, in realtà penso che sarebbe una buona cosa per la nostra professione se un alto livello di necessità di proprietà del codice fosse apertamente visto come un odore di lavoro (nell'immaginazione del programmatore popolare). Invece di essere visto come "assumersi la responsabilità e l'orgoglio" nel lavoro, dovrebbe essere visto più come "radicarsi e creare la sicurezza del lavoro artificiale attraverso il debito tecnico".

E penso che il test (esperimento mentale) dovrebbe fondamentalmente essere: cosa succederebbe se la persona (o davvero tutta la squadra) dovesse sparire dalla faccia della Terra domani. Sarebbe una gigantesca - forse fatale - lesione al progetto, o saremmo in grado di attirare nuove persone, far loro leggere i doccos e aiutare i file e giocare con il codice per qualche giorno - e poi tornare in affari in poche settimane (e ritorno alla piena produttività in circa un mese)?


3
Qual è la tua domanda? Inoltre, cos'è "odore di codice"?
CamelBlues,

2
@CamelBlues: "L' odore di codice è un sintomo nel codice sorgente di un programma che potrebbe indicare un problema più profondo." (Wikipedia) Vedi questa ricerca per alcune delle molte domande su questo sito riguardanti gli odori di codice.
Carson63000,

4
La proprietà del codice non è il risultato di odori di codice, non è che la proprietà del codice è un odore di codice? Penso che questa sia ancora la stessa domanda delle altre, compresa questa: programmers.stackexchange.com/questions/48697/…
Rei Miyasaka,

1
Per me "assumersi la responsabilità / proprietà"! = "Proprietà del codice", recentemente ho avuto una discussione con un manager che la proprietà del codice era in qualche modo cattiva e che non era lo stesso che consentire alle persone di rinunciare alla responsabilità. Per questo gestore la proprietà del codice significava essere la stessa cosa di essere responsabile.
Thomas James,

1
Sì, non ho mai preso la proprietà del codice per significare come questa Q sembra definirla. Prendere possesso di me significa che il ragazzo che mi sta sostituendo dopo l'orribile cosa del bus può leggere il mio codice perché ne sono orgoglioso come se fosse il mio bambino personale.
Erik Reppen,

Risposte:


32

Penso che dobbiamo fare la differenza tra la proprietà del codice:

  • dal punto di vista della responsabilità,
  • dal punto di vista dello stile del codice / hack ecc.

Il primo deve essere incoraggiato. Se nessuno è responsabile per codice e bug di bassa qualità, accadranno cose brutte . Ciò non significa che il bug relativo al tuo codice debba essere assegnato ogni volta a te: se il codice è scritto correttamente, chiunque può risolvere il bug in qualsiasi parte del codice. Ma se non hai alcun feedback sui bug che fai, producerai gli stessi bug ancora e ancora .

La proprietà del codice può aiutare molto sia i gestori che gli sviluppatori, in particolare gli sviluppatori. Se so che l'80% dei bug nel prodotto era nel mio codice mentre eravamo tre sviluppatori che lavoravano al progetto e che il 75% di questi bug era correlato a SQL Injection, la prossima volta starei più attento a scrivere codice, e fare uno sforzo extra per scrivere correttamente le query del database.


Il secondo (la proprietà del codice dallo stile del codice / hack, ecc.) È principalmente una cosa negativa. Cosa porta al prodotto? Non aumenta la qualità del prodotto, ma diminuisce l'uniformità del codice sorgente e rende difficile mantenerlo ultimamente .

Per molti grandi progetti, le persone non restano per la vita a lavorare sullo stesso codice. E qui, non parlo nemmeno di cose orribili come lo sviluppatore che viene investito da un autobus: non penso che la proprietà del codice sia la prima preoccupazione in questo caso. Ma accadono molte cose secondarie: le persone migrano dallo sviluppo alla gestione o ad altri lavori, o scelgono altri progetti, o lavorano su altre cose, o iniziano a usare un'altra lingua (se all'interno di un progetto vengono utilizzate più lingue), ecc.

Un pezzo di codice di un progetto può anche essere riutilizzato in un altro progetto e lo sviluppatore che lavora su questo altro progetto vorrebbe modificare alcune parti del codice per adattarle alle nuove esigenze, senza chiedere consiglio all'ex autore del codice.

È un odore di codice? Bene, dipende da cosa intendi per odore di codice. Per me, si tratta della coerenza generale del progetto e della corretta gestione . In un buon progetto,

  • le linee guida sullo stile del codice vengono applicate per aiutare a capire il codice più facilmente in seguito,
  • gli sviluppatori più esperti non violano il principio KISS, aiutando così la comprensione del codice sorgente in seguito da parte dei colleghi meno esperti.

Per concludere, la proprietà del codice deve essere tracciata attraverso il controllo della versione, ma non si deve poter dire che un pezzo di codice è stato scritto da te o da qualcun altro in una squadra .


9

Per prima cosa dobbiamo definire cos'è la "proprietà del codice".


Quando un pezzo (parte) di codice è in fase di sviluppo iniziale, spesso è necessario designare una o due persone come "proprietari" perché:

  • All'inizio non ci sono specifiche o requisiti chiari e lo / gli sviluppatore / i dovranno raccogliere informazioni per conto proprio. C'è un divario temporale tra la raccolta e la documentazione di tali risultati.
  • Evita modifiche in conflitto quando il pezzo di codice viene attivamente modificato.
  • I "proprietari" sono le persone che possono segnalare l'avanzamento dello sviluppo della funzione.

Normalmente esiste un unico proprietario per ogni attività. I proprietari doppi sono possibili con la programmazione a coppie. Non sarebbe pratico farlo senza una "proprietà del codice" strettamente designata.

Nota:
consultare la risposta di @ MainMa per gli altri problemi durante lo sviluppo. In questi casi, la "proprietà del codice" è un sintomo di problemi più grandi, vale a dire: scelta non ottimale dell'architettura, incoerenza dello stile di codifica e generalmente mancanza di qualità del codice.


Una volta che un pezzo viene scritto e accettato nella base di codice ("fatto"), appare la domanda più generale "proprietà del codice".

  • Chi è l'esperto che può rispondere a tutte le domande su questo pezzo di codice / questa parte di funzionalità?
  • Questa conoscenza è stata acquisita in artefatti tangibili, come documenti sui requisiti, test unitari, test di accettazione, registri delle modifiche, wiki del progetto, ecc.?

Ci sarà sempre una parte della conoscenza del dominio (tacita comprensione dei requisiti dei clienti, problemi di compatibilità con i sistemi arcani, ecc.) Che sono difficili da formalizzare in specifiche scritte. Pertanto, quando si verifica un evento di calamità, è prevedibile una perdita di conoscenza del dominio.

Insieme alla perdita di conoscenza del dominio, perderai anche i risponditori esperti che possono spiegare i dettagli del sistema. Sotto questo aspetto, la perdita dell'esperto è una cosa universalmente negativa. Le conoscenze avrebbero dovuto essere acquisite in precedenza.

Ciò non significa che l'esistenza di "esperti" sia negativa: considerare gli esperti come una "cache" della conoscenza scritta. Gli esperti possono spesso rispondere alle domande più rapidamente che dover cercare e digerire le conoscenze scritte.


Tuttavia, a volte la "proprietà del codice" si riferisce alle barriere create dagli sviluppatori attivi di un progetto per impedire agli estranei di modificare il codice.

  • Chi può apportare modifiche a questo codice?
    • Per correggere bug ovvi?
    • Per fare in modo che il codice soddisfi altri requisiti?
    • Riscrivere completamente il codice secondo i propri gusti?

Ci sono buone barriere e cattive barriere:

  • Buone barriere
    • Conoscenza del dominio: comprensione delle esigenze e dello stile di architettura / codifica
    • Competenze di programmazione e progettazione: hai le competenze per migliorare la progettazione e la qualità del codice del progetto
  • Barriere sbagliate
    • Non eri nel team di sviluppatori originale, quindi non ti è consentito apportare modifiche.
    • Sono benvenute solo correzioni di bug. I miglioramenti delle funzionalità non sono i benvenuti.

In questo caso, il privilegio di modificare il codice sorgente di altri progetti non dovrebbe essere basato sulla proprietà del codice, ma dovrebbe essere basato sul merito.


Infine, la risposta di @Graham Lee indica la frammentazione della conoscenza e dell'architettura causata dalla dipartimentalizzazione.

In questo caso, la "proprietà del codice" è uno dei sintomi della dipartimentalizzazione. Un secondo sintomo è la "mancanza di interesse per i progetti di altri team". Come organizzazione, i manager dovranno adottare misure per incoraggiare il trasferimento di conoscenze e la collaborazione tra team e dipartimenti.


7

Più insidiosamente, alcune aziende (ho lavorato in una) organizzano la loro struttura di gestione attorno a team funzionali: gestisci gli sviluppatori client Windows, lei gestisce il team installatore, lui gestisce gli sviluppatori back-end e così via. Questo non solo porta alla forte proprietà del codice che descrivi, ma lo consacra come funziona l'azienda. Trasforma l'architettura del software in un combattimento politico.

È un problema? È se l'architettura è o diventa non ottimale. È impossibile dire (per esempio) che l'installer funzionerebbe meglio o sarebbe più economico da sviluppare se fosse solo un caso d'uso del client, perché questo toglie il controllo a un team e al suo manager. Le divisioni tra i moduli funzionali sono diventate fatti sul modo in cui è gestito il dipartimento di ingegneria, e ci vuole un sacco di sconvolgimento per alterare tali fatti.

[A proposito nel caso in cui la discussione sopra non chiarisca, la mia risposta alla tua domanda è sì. La proprietà del codice è un odore di codice, perché può fermare le persone intelligenti con buone idee o anche solo le persone che sono disponibili quando ne hai bisogno, lavorando sul codice. Ovviamente avere controlli per fermare i cambiamenti capricciosi è una buona cosa, ma se hai un ingegnere che può vedere come riparare un bug e ha il tempo di farlo, non dovresti bloccare quell'ingegnere solo perché qualcun altro ha scritto il codice difettoso. ]


6

Affrontare la tua domanda da un punto di vista leggermente diverso, la proprietà del codice NON è un odore di codice. È invece un odore gestionale e di risorse .

Pensa a cosa significa un odore di codice. È una metafora che ti dice quando guardi il tuo codice, che qualcosa non va bene con il codice e / o il design del software, ma il problema potrebbe non essere così ovvio da poter mettere il dito su ciò che il problema esatto potrebbe essere, ma probabilmente hai una buona idea a prescindere. A casa tua, se qualcosa ha un cattivo odore, segui il tuo naso fino a individuare la fonte del problema, e poi fai qualcosa al riguardo. Allo stesso modo, se il codice ha un problema, lo si indaga e lo si modifica fino a quando non diventa meno un problema, o come alcuni potrebbero dire, bello o ben fatto .

La proprietà del codice, d'altra parte, può essere un problema serio. Suggerisce una mancanza di supervisione e il rischio che, se il proprietario del codice lascia, la conoscenza del codice e i problemi specifici che risolve non saranno più disponibili per l'azienda. Questo non ha nulla a che fare con il codice stesso. Fondamentalmente si riduce a una situazione di gestione del rischio nello stesso modo che ci porta a conservare i backup dei nostri dati e si applica allo stesso modo alla proprietà delle attività o alla proprietà dei documenti in altre aree dell'azienda.

Penso che sia giusto descrivere gli altri problemi aziendali come odori , ma di certo non implicarlo solo perché c'è un odore , che ha in particolare a che fare con il codice.


1

Definisco la proprietà del codice come assumersi la responsabilità personale del codice che scrivi, con la consapevolezza che altri lavoreranno nel tuo codice in futuro . Se pensi alle cose in questo modo, avrai meno probabilità di scrivere un hack perché a) i bug in quel modulo potrebbero essere ricondotti a te, e b) i membri del team avrebbero probabilmente difficoltà a modificare il codice in futuro .

Ho scritto un post sul blog diversi mesi fa, in cui sostenevo che senza la proprietà del codice, come lo definisco, una base di codice spesso cade in preda alla tragedia dei Comuni .

Secondo la tua definizione di proprietà del codice, sono d'accordo che è male avere un codice in cui solo l'autore può lavorare.


Sembra più "code-tending", o "code-sitting (a la baby-sitting)". Sono d'accordo con tutto nella tua risposta.
Mawg,
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.