Il codice
Ho un software giornaliero-usato per cliente di alto valore commerciale scritto in PHP e che si estende su circa 600K di linee di codice.
Il cliente da lungo tempo ha bisogno, vuole e richiede nuove funzionalità e funzionalità. Il tempo per farlo è ieri . Quindi, basta scrivere le nuove funzionalità e implementare nuove funzionalità e consegnarle al cliente, sì? Bene, no, qui ci sono alcuni problemi che hanno causato un notevole dolore agli sviluppatori attuali:
Il code-base esistente è ... una grande palla di fango .
Problemi notevoli:
-
Il codice
- è peloso - una singola caratteristica permea tutto, il codice di tracciamento è un problema e l'aggiunta di una funzione potrebbe avere un impatto su tutto il resto
- non ci sono test
- mix di codice procedurale e orientato agli oggetti basato su cattive pratiche di programmazione
- file che raggiungono 6000 righe di HTML, CSS, PHP, SQL, jQuery, JavaScript, commenti
- completa noncuranza / non esistenza del pattern MVC / separazione delle preoccupazioni. Il codice viene mescolato insieme
- alcune logiche di business dipendono da cose volatili che non hanno alcuna relazione con il codice (come i metadati del database)
- i valori codificati, i percorsi e la mancanza di configurabilità contribuiscono alla mancanza di sicurezza dell'architettura attuale
- i blocchi ripetuti di sostanzialmente lo stesso codice contribuiscono a funzioni simili che funzionano in modo leggermente diverso. L'aggiornamento di uno non aggiorna l'altro Il codice
- è lento, la mancanza di documentazione., ecc. ecc. molte altre cose possono essere fatte meglio
Funziona ...
La cosa buona è che funziona ... La funzionalità che è lì, è ragionevolmente elaborata per casi aziendali reali, ma ... andare avanti è doloroso.
Il problema
È più facile ora (e più veloce) aggiungere una nuova funzionalità usando lo stile di codice esistente, principalmente usando l'approccio cut-n-paste-n-modify, così perpetuando la cattiveria, piuttosto che fare riscritture di questa cosa usando al momento le migliori pratiche moderne esistenti.
Soluzione?
Si parla di riscrivere il tutto usando uno dei framework attualmente all'avanguardia (es. ZF2), ma nel farlo significa ignorare le richieste dei clienti, impiegare molto tempo per costruire il software e essenzialmente creare nuovo software ( versione 0.0.1) per il cliente, con tutti i bug del nuovo software e la mancanza di funzionalità e funzionalità del software maturo.
Un altro pensiero è di fare uno sviluppo incrementale. Ad esempio, quando arriva una nuova funzione, scrivila usando un nuovo approccio. Attualmente non funziona per il motivo indicato nel titolo "Il problema" sopra.
Ancora un'altra idea è di fare un lento refactoring della base di codice esistente ... Potrebbe funzionare a ripulire cose come MVC e una miriade di altre cose, e ci vorrà molto tempo, e sarà essenzialmente come dipanare un gomitolo di lana annodato strettamente avvolto. Ma fare questo non affronterà le cose come test di unità, iniezione di dipendenza, principi moderni del framework e così via.
Quindi, alla fine, stanno arrivando nuove funzionalità, il codice viene aggiunto e la base di codice esistente non migliora. Cosa potresti suggerire di fare in questo caso?