Dovresti documentare tutto o solo la maggior parte?


22

Sembra un po 'un argomento controverso documentare tutto, inclusa la sintassi "JavaBean" di getter e setter per i campi: la gente dice che è inutilmente lungo e ripetitivo rompersi DRY (non ripeterti) , che la convenzione di denominazione dovrebbe spiegare tutto , e ingombra il codice / la documentazione. A volte quegli argomenti funzionano. Ma altre volte, si finisce con questo:

testo alternativo

Sopra è comune ai progetti open source che seguono coraggiosamente questi principi. Ti resta tutta la documentazione inutile . Questo non spiega nulla di ciò che sta accadendo sotto, i possibili effetti o persino quale sia il valore atteso (potrebbe essere nullo o mai nullo? Non lo so; il Javadoc non me lo dice).

Quindi quando devo documentare? Documento tutto anche se occasionalmente ingombra il codice? O non documento nulla poiché ai miei occhi è "ovvio"?


3
in una certa misura ciò mostra un problema di denominazione, ad esempio getDate dovrebbe essere getCreationDate o getExpiryDate o qualsiasi cosa abbia mai senso nel dominio. Naturalmente la denominazione non è una panacea.
jk.

Nota: questo è emerso nella coda di revisione del CV. Penso che dovrebbe essere tenuto aperto - la domanda è sull'argomento (la documentazione è SDLC) e le risposte sono davvero buone e rispondono alla domanda in un ragionevole spazio (cioè non troppo ampio)

Risposte:


24

Documenta tutto ciò che ha senso documentare .

In un mondo ideale, sì, documenteresti tutto. Tuttavia, sulla Terra, abbiamo scadenze, tagli di funzionalità, famiglie e amici da visitare, vacanze da prendere, solo 24 ore al giorno e solo 365 giorni all'anno. Non c'è abbastanza tempo per documentare tutto. Quindi, in modo ottimale, documenta tutto ciò che puoi (non avrai fatto), ma ottieni il massimo dal tuo dollaro:

  • Rendere il codice leggibile e le firme dei metodi il più ovvio possibile in modo che la documentazione sia meno probabile .
  • Documentare prima le cose più oscure. Aiuta gli altri a documentare i pazzi hack che dovevi fare per far uscire le cose dalla porta.
  • Documenta il perché prima del cosa - Non commentare cosa fa qualcosa, ad esempio "Esamina i record dei clienti in cui il saldo è inferiore a zero e il punteggio è inferiore a uno e aggiungili all'elenco Clienti esenti". Documenta il motivo per cui li stai aggiungendo all'elenco in inglese (o nella lingua del tuo team), ad esempio "Poiché questi clienti hanno un saldo negativo e valutazioni basse, ci stanno facendo perdere denaro, quindi escludili dalla possibilità di effettuare il check-out.

27
In primo luogo, documenta tutto ciò che NON ha senso
ysolik,

1
Documentare tutto non significa un documento verbale per metodo. Può essere piccolo come un commento. Documentare tutto in modi che non hanno senso non ha senso, ma cercare di chiarire tutte le cose oscure per le persone che sono più che minimamente competenti.
Ryan Hayes,

1
@ysolik Sono d'accordo, ma penso che intendesse "Documentare tutto ciò che ha senso documentare"
Alan Pearce,

3
@Alan e @Ryan: il commento non voleva contraddire Ryan. Era solo un gioco di parole :) A proposito, sono d'accordo con tutto ciò che dice Ryan, tranne "In un mondo ideale, sì, documenteresti tutto". In un mondo ideale non dovrai documentare nulla, il codice sarebbe auto-documentante e autoesplicativo.
ysolik,

1
@ysolik Oh amico, sarebbe il mondo ideale per eccellenza.
Ryan Hayes,

8

Continua a documentare fino a quando non puoi vedere qualcun altro leggerlo senza sentire la necessità di spiegare nulla.


6

La scorsa settimana è stato pubblicato un ottimo articolo sulla documentazione presso The Daily WTF. Penso che dice tutto, quindi lascerò semplicemente il link:

http://thedailywtf.com/Articles/Documentation-Done-Right.aspx

Fondamentalmente dice che non dovresti documentare qualcosa se non sarà utile (parte della documentazione è appena lasciata a marcire in un cassetto) e documentare la minima quantità di informazioni necessarie per comprendere una certa parte del progetto. Troppa documentazione confonde il lettore.


4

Dipende molto da quanto sia leggibile il codice per il pubblico che lo legge. Scopri chi è il pubblico per la lettura del tuo codice e chiedi a qualcuno che incontra quel profilo di leggere il tuo codice.

Un altro approccio sarebbe quello di rivedere il proprio codice dopo una settimana e vedere se si capisce ancora cosa si è fatto, in caso contrario, documentarlo e rivedere il codice in circa due settimane.


4

Anche se apprezzo una documentazione chiara ed estesa, non c'è niente come il codice di auto-documentazione. Quindi, la linea di fondo (per me) è:

Diffidare molto della documentazione (del codice sorgente); prova a renderlo ridondante migliorando il codice, ma non esitare a documentare in modo chiaro e completo quando necessario.

Naturalmente, in determinate circostanze, potrebbe essere richiesta la documentazione per ragioni diverse da "spiegare cosa sta facendo il codice" (ad esempio: una grande squadra, standard organizzativi e così via).



2

Il mio suggerimento sulla documentazione è che se c'è qualcosa di strano nel codice, questo appartiene a un documento che dovrebbe essere tenuto aggiornato. La fantasia è soggetta a molta interpretazione, nella mia mente è dove qualcosa viene fatto in un modo particolare che può avere effetti collaterali che dovrebbero essere notati, ad esempio qualcosa può essere fatto in modo ricorsivo per garantire che gli oggetti dei nipoti vengano elaborati attraversando un albero di nodi per eseguire alcuni test su tutti i discendenti. Articolare il motivo per cui qualcosa è stato fatto in un modo particolare può essere un buon modo per sapere se ci fosse o meno una buona ragione per usare qualcosa.


1

In termini semplici, la documentazione è lì per aiutare gli sviluppatori e i manutentori in futuro.

Se ricordi quella semplice massima, allora il livello della documentazione dovrebbe essere auto-definito.

La documentazione, per ragioni di documentazione, è una perdita di tempo ... ma spiegare oggi cosa stai facendo è più utile di qualcuno che deve decodificare il tuo codice tra cinque anni.


0

Personalmente vado con l'approccio di considerare la documentazione di tutto. Vale a dire, durante la codifica, considero in ogni momento se la documentazione aggiungerebbe valore. Il più delle volte la risposta è sì esattamente per i tipi di vincoli e la conoscenza del dominio menzionati nella domanda originale. Ad esempio nullità, vincoli univoci, interpretazione del campo nel dominio più ampio.

Per evitare duplicazioni, tendo a documentare pesantemente le principali classi API con questo tipo di informazioni. Quindi documenta solo implementazioni e interni in cui vi è un comportamento non ovvio o incoerente. Trovo che funzioni bene in quanto sono gli utenti dell'API che hanno bisogno della maggior quantità di aiuto e documentazione, in genere è lecito ritenere che le persone che modificano l'implementazione conoscano l'API, quindi abbiano questa conoscenza.

Tendo anche a documentare solo i getter. Non duplico documentazione su setter, definizioni di campo e parametri del costruttore. Documento solo comportamenti non ovvi come i valori predefiniti in questi luoghi. Qualsiasi comportamento che può essere dedotto dalla documentazione getter non è documentato. Ad esempio, se il getter è documentato come null senza ritorno, generalmente non documento che non è possibile passare null al setter, a meno che non ci sia un valore predefinito.

Ad alcune persone piace contrassegnare questo atto di "considerazione della documentazione" aggiungendo commenti vuoti in cui hanno considerato la documentazione ma l'hanno trovata superflua. Non mi piace questa pratica in quanto ingombra il codice e si mette in mezzo.

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.