Lavoro con un team che è passato da 2 sviluppatori a 10 in meno di un anno. Ero il numero 3 e il primo a sollevare un problema relativo agli standard di codifica. I due sviluppatori originali hanno lavorato fianco a fianco per alcuni anni e avevano adottato uno standard comune che mi sembrava estraneo. Abbiamo avuto esattamente gli stessi problemi che stai descrivendo.
Quello che abbiamo fatto è stato:
Standard di codifica per la ricerca
Abbiamo trascorso alcuni giorni a verificare progetti open source affermati. Sapevamo che il team si sarebbe espanso rapidamente e stavamo cercando soluzioni reali basate su progetti reali e non su linee guida generiche. Inoltre non ci importava degli standard di codifica ottimali, ma di un insieme di regole e linee guida che avrebbero senso e non richiederebbero il refactoring di tutto il nostro codice di base. Stavamo cercando un hack per gli standard di codifica, se vuoi.
Noi tre abbiamo deciso che i migliori standard di codifica disponibili per un progetto PHP consolidato erano quelli seguiti da Zend Framework. Fortunatamente le persone di Zend Framework forniscono un documento sugli standard di codifica molto completo .
Creare i nostri standard di codifica
Ovviamente applicare gli standard di codifica di un altro progetto sul nostro progetto così com'è non ha senso. Usiamo il documento Zend Framework come modello:
- Per prima cosa abbiamo rimosso tutto ciò che non si applicava al nostro progetto
- Quindi abbiamo cambiato tutto ciò che abbiamo percepito come una questione di stile nel nostro stile
- E finalmente abbiamo scritto tutto
Quindi avevamo un documento abbastanza grande a portata di mano, memorizzato nella nostra fantasia wiki , è stata una bella lettura, concordata da tutti noi. E completamente inutile da solo.
Rimanere fedele alla nostra promessa
La nostra base di codice al momento era di circa 1 * 10 ^ 6 sloc. Sapevamo che da quando abbiamo adottato gli standard di codifica formali abbiamo dovuto iniziare a refactoring del nostro codice, ma al momento siamo stati spinti su altri problemi. Quindi abbiamo deciso di riformattare le nostre librerie di base, un semplice sloc 5 * 10 ^ 3.
Abbiamo assegnato uno di noi a essere il maestro degli standard di codifica (abbiamo usato volgarità locale al posto del maestro ) con la responsabilità di verificare e far rispettare gli standard. Ricicliamo il ruolo ogni pochi sprint. Sono stato il primo, ed è stato un sacco di lavoro, poiché ho dovuto monitorare quasi ogni impegno.
Abbiamo avuto diverse nuove discussioni e piccoli addendum al documento originale durante il mio mandato, e alla fine abbiamo avuto un po ' documento stabile. Lo cambiamo di tanto in tanto, ma la maggior parte di questi cambiamenti riguardano nuove funzionalità del linguaggio, in quanto PHP 5.3 è stato un rilascio importante in tutti tranne che nel nome.
Trattare con il nuovo ragazzo
Quando arrivò il nuovo ragazzo, era tempo di mettere alla prova i nostri standard di codifica. Dopo una breve introduzione alla nostra base di codice, gli abbiamo chiesto di valutare il nostro documento sugli standard di codifica. Ha quasi pianto. Sembrava che avesse fatto tutto diversamente.
Dato che all'epoca ero il maestro degli standard di codifica, dipendeva da me valutare il suo contributo e rivedere il documento di conseguenza. Le sue proposte erano:
- Questioni di stile personale (respinte sommariamente)
- Standard che avevano senso per il suo background Java ma non così tanto con PHP (respinto)
- Convenzioni che ha portato dalla sua breve esposizione con PHP (alcune sono state respinte, ma molte si sono rivelate convenzioni popolari che non abbiamo mai pensato o scoperto nella nostra ricerca iniziale)
Per le prossime due settimane gli fu assegnato un compito semplice: aggiornare diverse parti della nostra base di codice con gli standard. Ho dovuto scegliere con cura quelle parti in base ad alcune regole:
- Il codice dovrebbe essere relativamente facile per qualcuno che non ha familiarità con la nostra base di codice (e PHP in generale)
- Il codice dovrebbe essere su ciò che è stato assunto per fare
Ho monitorato il suo processo e ha fatto un ottimo lavoro. Abbiamo identificato diverse parti del codice impossibili da adattare al nostro documento e revisionate di conseguenza (codice e / o standard, a seconda di quale avesse più senso)
E poi è arrivato un altro ragazzo nuovo. Abbiamo ripetuto il processo (questa volta un master diverso) e ha funzionato di nuovo. E di nuovo.
In conclusione
- Crea un documento sugli standard di codifica, ma assicurati che i tuoi standard non siano esclusivamente tuoi, ma riflettano standard comuni nella più ampia comunità della tua piattaforma.
- Assegna un ruolo simile al nostro master per gli standard di codifica. Qualcuno per monitorare almeno il nuovo codice, e in particolare il nuovo codice dai nuovi membri. Ricicla il ruolo, poiché è estremamente noioso.
- Valuta sempre l'input di un nuovo membro. Rivedi sempre i tuoi standard se ha senso. Il documento relativo agli standard di codifica dovrebbe evolversi, ma lentamente. Non vuoi ri-refactificare il tuo codebase ad ogni iterazione.
- Concedi un po 'di tempo affinché ogni nuovo membro apprenda e si adatti ai tuoi standard e alle tue convenzioni. Impara facendo le opere migliori in queste situazioni.
- Wiki fa miracoli per tali documenti.
- Le revisioni del codice fanno miracoli per ogni situazione!
Ad un certo punto del processo è stato suggerito di utilizzare un hook pre-commit per automatizzare il controllo degli standard. Abbiamo deciso di non farlo per una serie di motivi, ci sono alcune discussioni interessanti su StackOverflow sul problema:
Alcuni sono specifici di PHP, ma le risposte si applicano a tutte le piattaforme.