Evoluzione degli standard di codifica, come li gestisci?

12

Come gestisci l'evoluzione negli standard di codifica / guida di stile in un progetto per la base di codice esistente? Diciamo che qualcuno del tuo team ha scoperto un modo migliore di istanziazione degli oggetti nel linguaggio di programmazione. Non è che il vecchio modo sia cattivo o infestato, è solo che il nuovo modo è meno prolisso e si sente molto più elegante. E a tutti i membri del team piace davvero. Vuoi cambiare tutto il codice esistente?

Diciamo che il tuo codice è di circa 500.000 righe di codice. Vorresti comunque cambiare tutto il codice esistente? O lasceresti solo che il nuovo codice aderisse al nuovo standard? In pratica, perdi consistenza?

Come gestisci un'evoluzione degli standard di codifica del tuo progetto?

    
posta Ward Bekker 17.01.2011 - 10:10
fonte

5 risposte

13

Esistono standard di codifica per rendere i team più produttivi. In teoria, rendono il codice più facile da capire, modificare e testare. In pratica, possono creare una quantità pericolosa di meta-lavoro; i team riscrivono continuamente il codice esistente alla ricerca della soluzione più corretta ed elegante. Sfortunatamente, il problema del meta-lavoro sembra peggiore nei team in cui tutti sono impegnati, appassionati e ossessionati dal fare la cosa giusta.

Come consulente che passa da un progetto all'altro, ho trovato che l'eccellente disciplina con uno standard di codifica rigido contribuisce molto meno al successo di un progetto rispetto agli sviluppatori eccellenti che sono interessati ai risultati. Gli stili di codifica incoerenti sono un fastidio per gli sviluppatori incredibili. Sono produttivi con o senza coerenza. Certo, se incontrano codice incoerente, chiedono dello standard attuale e lo seguono. Tuttavia, non insistono nell'aggiornare ogni riga di codice del progetto allo standard corrente. Non insistono perché hanno visto le migliori pratiche andare e venire. Il modo corretto di fare qualcosa oggi non è lo stesso del modo corretto di fare qualcosa domani. Se lo fosse, i tuoi standard di codifica non si evolverebbero. Quindi, se il modo corretto di fare qualcosa cambia nel tempo, forse la nostra definizione di "corretto" è rotta.

Questo non vuol dire che gli standard non contano. Basta tenere a mente che l'obiettivo degli standard è la produttività. Se non è possibile garantire la riscrittura a un nuovo standard si ripagherà a lungo termine, quindi non perdere tempo. È molto più facile giustificare un nuovo standard nel codice nuovo o refactored. L'eleganza è bella ma non è la stessa cosa dei risultati.

    
risposta data 17.01.2011 - 18:30
fonte
5

Quello che facciamo è evoluzione (non rivoluzione) per il codice base, useremo lo standard aggiornato quando;

  • il nuovo codice è scritto
  • Il codice
  • è refactored
  • bug sono corretti
  • nuove porzioni vengono aggiunte a una classe esistente

È importante che il tuo codebase sia coerente, quindi se la modifica apre una possibilità di confusione tra il codice di stile "vecchio" e "nuovo", potrebbe essere meglio prenotare l'aggiornamento dello standard di codifica al prossimo progetto.

    
risposta data 17.01.2011 - 10:39
fonte
3

Innanzitutto, non includerei tali "migliori pratiche" nella (parte obbligatoria delle) linee guida sulla codifica. Potrebbero essere citati, ad esempio in un'appendice, ad esempio come potrebbe fare qualcosa, ma non che dovrebbe essere fatto in questo modo .

Detto questo, ci sono due casi da considerare per le modifiche a uno standard di codifica:

  1. Le modifiche che non hanno un impatto sulla leggibilità, anche se il vecchio e il nuovo codice sono mescolati senza aggiornare il vecchio codice.
    Queste modifiche possono essere aggiunte immediatamente allo standard di codifica e devono essere considerate valide per tutto il codice nuovo e modificato. Il vecchio codice dovrebbe essere adattato in modo incrementale quando il tempo lo consente e quando vengono apportati cambiamenti in quell'area.
    Un esempio di questo tipo di modifica, che ho effettivamente riscontrato, è un cambiamento nella dichiarazione del copyright all'inizio di ogni file.
  2. Cambiamenti che peggiorano la leggibilità se vengono combinati codice vecchio e nuovo.
    Queste modifiche dovrebbero essere applicate all'intero codebase in un colpo solo, o dovrebbero essere riconsiderate se sono davvero necessarie.
    Un esempio di questo tipo di cambiamento è un cambiamento di indentazione o posizionamento di parentesi graffe.
risposta data 17.01.2011 - 11:40
fonte
2

Questo dipende in realtà dal tipo di prodotto che stai creando:

  • Per un'applicazione commerciale scritta in casa e che stai distribuendo ai clienti, il tuo obiettivo principale dovrebbe essere quello delle entrate. Finché il vecchio codice non è bacato, non importa che i nuovi standard di codifica si siano evoluti, dovresti concentrarti sull'aggiungere nuove funzionalità al tuo prodotto e generare entrate. Ad ogni modo, adatta i nuovi standard di codifica per il nuovo codice, ma cambiare tutto il codice esistente sarebbe una perdita di tempo.
  • Se stai sviluppando un prodotto open source o un prodotto in cui più aziende (forse anche i tuoi clienti) vedranno e lavoreranno sul codice sorgente, allora la leggibilità del codice diventa molto più importante e in questo caso , una decisione sensata dovrebbe essere presa in base a esattamente quanto codice deve essere cambiato e quali saranno i benefici a lungo termine. Anche se a tutti noi piace il bel codice, la realtà è che per un'azienda commerciale che si occupa di closed source, l'adattamento costante di nuovi standard significherà che a lungo andare perderai le entrate.
risposta data 17.01.2011 - 10:21
fonte
0

Personalmente, sceglierei di mantenere i vecchi codici così com'è e seguire i nuovi standard da qualunque cosa tu faccia di nuovo. Più specificamente, non userò i doppi standard in old.c. Ma se creerò new.c, può usare le sintassi più recenti e perfezionate:)

    
risposta data 17.01.2011 - 10:22
fonte

Leggi altre domande sui tag