Ho ereditato una legacy applicazione web per molti anni che:
- Non fa uso di principi orientati agli oggetti, anche se la lingua lo permetterebbe
- Non ha test unitari, né alcun tipo di suite di test, automatizzata o meno
- In genere ignora le varie best practice generali, rendendo il codice molto difficile da leggere e mantenere
- Divide il suo funzionamento (incluso il codice per le regole aziendali) attraverso l'applicazione Web, le visualizzazioni del database e le stored procedure. Parte del codice è persino esternalizzata in quanto le applicazioni esterne (non sotto il controllo di me o del mio team) spesso leggono o scrivono direttamente nel database
- Ha solo la documentazione più piccola (compresi alcuni che ho creato)
- Nessuna specifica tecnica o funzionale documentata per parlare di
- Ha cambiato le regole tante volte e così velocemente che nessuno sa veramente come dovrebbe funzionare più. Le regole sono impilate come funzionalità mancanti o casi specifici vengono scoperti su base giornaliera.
- Diventa l'applicazione più business-critical dell'azienda
- È ancora in continua evoluzione
Il refactoring viene quasi sempre accompagnato dal suggerimento principale di aggiungere test unitari per assicurarti di non rompere nulla. Come fai a farlo quando non sai nemmeno come dovrebbe funzionare la cosa (e nessun altro può dirti di sicuro )?
È un caso in cui dovresti tornare al punto 1 e lentamente, in modo iterativo, quando vengono richieste nuove funzionalità, chiedere le specifiche focalizzate sulla sezione modificata e refattore allora che cosa c'è? C'è un altro modo per affrontare questa situazione?
Questa domanda si concentra principalmente sulla mancanza di specifiche contrarie alla regola di sicurezza del refactoring di creare test unitari per garantire che le regole siano rispettate durante il refactoring.
Detto questo, qualche altro bit sulla situazione oltre la mancanza di specifiche:
- La struttura di programmazione "migliore" trovata nel codice finora è la funzione. Tendono a non essere autosufficienti e richiedono numerose variabili globali (anche le variabili locali sono state impostate erroneamente come variabili globali a rischio di comportamenti imprevisti). Ho la sensazione che il primo passo potrebbe essere il refactoring questo per consentire anche il test dell'unità.
- I problemi menzionati si applicano all'intera applicazione, alle procedure del database e persino alle applicazioni sorelle. Tutto è mescolato insieme e quasi mai attraverso interfacce. È ancora possibile trovare
- Il codice tende a essere duplicato in vari punti. Succede con il codice delle regole aziendali, il che significa che potresti ottenere risultati diversi a seconda di dove nell'applicazione che invochi una funzione. Ovvia complessità e rischi di manutenzione.