Come devo preparare il mio codice per OpenSourcing e metterlo su GitHub?


9

Tra poche settimane, il mio progetto sta per essere completato e voglio iniziare a preparare il mio codice affinché altre persone possano usarlo.

Pubblicherò tutto su GitHub in modo che le persone possano modificarlo e, si spera, renderlo migliore.

Immagino che ciò che sto chiedendo sia: quale sarebbe il modo migliore per assicurarsi che il mio codice sia sufficientemente documentato e formulato in modo che gli altri possano usarlo?

So che dovresti sempre commentare tutto e inserirò la funzione @params per ogni metodo, ma ci sono altri suggerimenti in generale?


Risposte:


12
  • Assicurati che ci sia un file README.txt nella radice del repository che punti le persone alle istruzioni su come costruirlo. Le istruzioni potrebbero trovarsi in quel file o potrebbero essere in un file separato o in una pagina wiki.
  • Idealmente, fallo in modo da poter compilare e testare completamente il codice con un singolo comando. Non richiedere un sacco di passaggi manuali.
  • Assicurati di avere dei test per il codice. Ciò fornisce un posto conveniente per gli altri sviluppatori per vedere come viene utilizzato il codice, oltre a fornire una rete di sicurezza per le persone che modificano il codice. Sapere che posso modificare il tuo codice e quindi eseguire una suite per vedere se ho rotto qualcosa è inestimabile.
  • Segui gli standard di codifica comuni o pubblica quelli che usi.
  • Se il tuo codice utilizza OO, assicurati che almeno tutti i metodi e gli attributi pubblici abbiano una documentazione sufficiente
  • Assicurati che sia chiaro quale licenza utilizza il tuo codice. In genere questo significa includere un file LICENSE.txt o seguire qualsiasi meccanismo richiesto dalla specifica licenza. Inoltre, fai una scelta consapevole della licenza. Non usare solo GPL perché è tutto ciò che sai. Allo stesso modo, non usare BSD o MIT o Apache se è tutto ciò che conosci ... passa un'ora a cercare quelli in modo da capire almeno la differenza fondamentale tra licenze GPL e non GPL.
  • Rimuovi tutte le informazioni sensibili dal codice, come nomi utente, password, indirizzi e-mail, indirizzi IP, chiavi API, ecc. (Grazie a Hakan Deryal per il suggerimento)

Buon Consiglio. Un'altra cosa da aggiungere: rimuovere le informazioni private come password / chiavi api se presenti.
Hakan Deryal,

Se nel codice sono presenti informazioni riservate, potrebbe essere necessario fare attenzione a rimuoverle anche dai commit precedenti (se hai già iniziato a utilizzare il controllo versione). Un modo semplice per farlo sarebbe quello di creare un repository completamente nuovo per la versione pubblica, ma potrebbe non essere l'approccio migliore.
yakiv,

3

La documentazione nel file di origine è sempre valida, ma è necessario pubblicare documentazione aggiuntiva su un sito Web. Spiega il suo obiettivo, come funziona, i tuoi piani futuri, cerca di rendere facile il contributo (altrimenti ... nessuno ti aiuterà) e metti alcuni tutorial.

Cercare di lavorare su un progetto solo con la documentazione del codice sorgente è sempre frustrante.


1

Immagino che ciò che sto chiedendo sia: quale sarebbe il modo migliore per assicurarsi che il mio codice sia sufficientemente documentato e formulato in modo che gli altri possano usarlo?

Come open source, i commenti più importanti di tutti sono i commenti sul copyright e sull'accordo di licenza. Piuttosto che un grande commento lungo all'inizio di ogni file, potresti volerne usare uno breve e dolce che specifica brevemente il copyright e rimanda il lettore a license.txt nella directory principale.

So che dovresti sempre commentare tutto e inserirò la funzione @params per ogni metodo, ma ci sono altri suggerimenti in generale?

Commenta tutto? No. Commenta quel codice che ha davvero bisogno di commenti. Commenta con parsimonia. Come potenziale utente di un pezzo di codice, quale delle seguenti due versioni di una definizione di classe preferiresti vedere?

Versione A:

class Foo {
private:
   SomeType some_name; //!< State machine state

public:
   ...

   /**
    * Get the some_name data member.
    * @return Value of the some_name data member.
    */
   SomeType get_some_name () const { return some_name; }

   ...
};

Versione B:

/**
 * A big long comment that describes the class. This class header comment is very
 * important, but also is the most overlooked. The class is not self-documenting.
 * Why is that class here? Your comments inside the class will say what individual parts
 * do, but not what the class as a whole does. For a class, the whole is, or should be,
 * greater than the parts. Do not forget to write this very important comment.
 */
class Foo {
private:

   /**
    * A big long comment that describes the variable. Just because the variable is
    * private doesn't mean you don't have to describe it. You might have getters and
    * setters for the variable, for example.
    */
   SomeType some_name;

public:
   ...

   // Getters and setters
   ...

   // Getter for some_name. Note that there is no setter.
   SomeType get_some_name () const { return some_name; }

   ...

};

Nella versione A ho documentato tutto, tranne la classe stessa. Una classe in generale non è auto-documentante. I commenti presenti nella versione A sono assolutamente inutili, o addirittura peggio che inutili. Questo è il problema chiave con l'atteggiamento "commenta tutto". Quel piccolo commento conciso sul membro dei dati privati ​​non comunica nulla e i commenti doxygen sul getter hanno un valore negativo. Il getter get_some_name()non ha davvero bisogno di un commento. Cosa fa e cosa restituisce è palesemente ovvio dal codice. Che non c'è setter, devi dedurlo perché non c'è.

Nella versione B ho documentato ciò che deve essere commentato. Il getter non ha un commento doxygen, ma ha un commento che menziona che non c'è setter.

Fai in modo che i tuoi commenti contino e fai attenzione che i commenti spesso non vengono mantenuti per riflettere le modifiche al codice.

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.