How can I address the concerns of the software architect but still maintain collective code ownership?
Probabilmente sono vendita di biciclette , ma non è questo il tuo problema. La società possiede il codice, non uno sviluppatore o un architetto. Tutti lavorano per migliorare il tutto. Hai problemi nel tuo processo di progettazione, e in seguito si tradurrà in un gioco di biasimo.
È necessario determinare la causa dell'errore (autotest fallito e componenti guasti), e mettere in atto politiche e procedure per colmare le lacune. Una volta che le politiche e le procedure sono in atto, non c'è nessuno da incolpare perché "le cose funzionano".
In the current situation, developers change code in multiple components and they break other components either because they don't understand how the component works (because they work with so many components) or because they don't care about how their changes will affect the other clients of the component (as long as they are not affected).
Forse c'è un terzo: gli sviluppatori non sanno di avere codice danneggiato o rotto in altri componenti.
Questo pone la domanda: cosa c'è nel tuo processo di ingegneria per affrontare le lacune? Esistono politiche e procedure per risolvere i problemi in anticipo?
Processo uno
Posso dire con certezza che l'uso liberale di ASSERT
s (in opposizione a POSIX è inutile assert
) assicurerà a uno sviluppatore di conoscere quasi ogni condizione inaspettata al momento dello sviluppo . Lo chiamo codice "self-debugging" e trascorro quasi del tempo in un debugger perché il codice mi dice dove sono i problemi.
Quando dico "uso liberale di ASSERT
s", intendo tutto. Si asserisce che tutti i parametri sono previsti quando si inserisce una funzione. Asserisci tutto lo stato del programma utilizzato in una funzione. E tu asserisci tutti i valori di ritorno dalle chiamate di sistema. Se c'è un if
per convalidare qualcosa, allora deve esserci un ASSERT
corrispondente. Se c'è un ASSERT
per convalidare qualcosa, allora deve esserci un if
corrispondente. Il codice non sarà in grado di scoreggiare o starnutire senza che uno sviluppatore ne sia a conoscenza.
Un altro modo per vederlo: perché dovresti eseguire il debug del mio codice e perché dovrei eseguire il debug del tuo codice? Lascia che il codice esegua il debug e ti dica dove sono i problemi.
Un altro modo per vederlo: perché dovresti dedicare tempo al debugging? Il tuo tempo è meglio speso per aggiungere funzionalità. Lascia che il codice esegua il debug e ti dica dove sono i problemi.
Se non hai studiato come ASSERT, allora sarebbe un piacere leggere John Robbins. Lui è un maestro cacciatore di insetti. Il libro che ho imparato è stato Debug delle applicazioni . Il suo blog è all'indirizzo link .
Processo due
Ci devono essere autotest completi per componenti. Non spreco molto tempo negli autotest positivi. Posso assumere un bambino dall'India o dal Pakistan per $ 10 al giorno per copiare / incollare il codice che funziona come previsto in condizioni benigne. Rent-a-Coder ne è pieno.
Mi concentro sull'autotest negativo. Voglio sapere come fallisce il programma e assicurarsi che si riprenda o fallisca con grazia. E quando dico test, intendo testare tutto - anche interfacce protette e private in una classe C ++.
Non compro negli argomenti che "solo le interfacce pubbliche hanno bisogno di essere testate". Hogwash fino a quando qualcuno non produce un programma senza errori. Ho un codice nel campo che dura anni tra le segnalazioni di bug perché il mio processo di progettazione richiede una copertura del 100% con casi di test negativi.
Processo tre
Integrazione continua in un'area di sosta. Ogni commit avvia una build e autotest. Rifiuta il check-in se interrompe una compilazione.
The Real Gem
Il vero gioiello nei tre processi sopra riportati non ti servono codificatori esperti. Puoi assumere stagisti e sviluppatori junior al codice dello strumento con ASSERT
s e scrivere casi di test. Direi anche che hai bisogno di meno programmatori esperti perché il codice sta facendo il grosso sforzo eseguendo il debug di se stesso. Ciò dovrebbe rendere la gestione felice.
E i tuoi sviluppatori esperti si arrabbieranno quando un giovane inizia a decifrare il codice in modi ovvi. Non posso dirti quante volte un ragazzo con 10 o 15 anni di esperienza mi ha lamentato di tutti i dannati asseriti che stanno sparando. È incredibile quello che trovi quando inizi a cercare problemi nel codice che ritenevi solido.