Spostare l'applicazione legacy in un framework testabile?

2

Abbiamo un'applicazione web che contiene un servizio web con oltre 50 metodi.

L'applicazione è attualmente installata in un numero di siti ed è attualmente gestita da uno sviluppatore.

L'applicazione è attualmente un sistema a utente singolo in cui tutti i dati sono archiviati in file XML.

Uno dei nostri compiti principali è quello di renderlo un sistema multiutente e allo stesso tempo inserire un database (RDBMS o NoSQL, non ancora deciso).

Oltre ad altre nuove funzionalità, vogliamo che un team di sviluppatori (circa 5) lavori su altre nuove funzionalità.

Da quello che ho visto, l'applicazione non è testabile. Non ci sono unità di test e tutto il codice è più o meno nei metodi di servizio web.

Ho bisogno di mettere un framework in atto in modo che gli altri sviluppatori possano semplicemente iniziare a lavorare sulle loro funzionalità usando TDD e poi finalmente quando avremo il database sul posto possiamo cambiarlo in un secondo momento.

Stavo pensando di spostare dapprima tutto il codice in librerie e poi introdurre UNITY e framework di test / derisione per fornire alcuni dei servizi di cui gli altri sviluppatori avranno bisogno. In questo modo attraverso l'inversione del controllo hanno almeno interfacce con cui possono lavorare.

Non sono sicuro che questa sia la strada giusta da percorrere o se dovrei concentrarmi su un'altra area.

Stavo pensando di inserire test unitari attorno al codice originale, ma poi tutto il codice cambierà più tardi, quindi a lungo andare potrebbe non funzionare.

Abbiamo un periodo di circa 6 settimane prima di coinvolgere gli altri sviluppatori.

Qualsiasi aiuto sarebbe apprezzato.

    
posta JD01 08.12.2011 - 10:24
fonte

2 risposte

2

IMHO sei sulla buona strada ... (Stai pensando ai pro / contro)

Quindi suggerirei

  • imposta CI (jenkins?)
  • scrivi test per il codice che è soggetto a modifiche prima che cambierà
  • dividi il codice esistente in moduli (se, e solo se, puoi testare, che questa operazione è un successo)
  • introduce nuove API ove necessario e avvolge le vecchie API nel primo passaggio (rimuovile nel secondo)

Hmm. Dovrebbe essere sufficiente come trama grezza.

    
risposta data 08.12.2011 - 11:24
fonte
5

Prenderò in considerazione la possibilità di impostare un test del livello di accettazione in anticipo anziché i test unitari. Probabilmente non è pratico coprire tutte le basi con test di accettazione in anticipo, ma è probabilmente possibile coprire i principali casi d'uso e alcuni test del fumo per i casi d'uso secondari entro le sei settimane. Questi test di accettazione dovrebbero essere impostati per essere eseguiti in CI. Si desidera anche eseguire alcuni test di integrazione e unità per ottenere un'infrastruttura pronta e funzionante. Questi dovrebbero anche essere inclusi in CI. Infine dai ai nuovi sviluppatori di dare il Michael Feathers: lavorare efficacemente con il codice legacy e chiedere loro di leggere come un compito assegnazione. Sul serio. È un libro brillante su come affrontare questo genere di cose in modo sano e incrementale. L'essenza basilare dell'approccio dei libri è ciò che definisce il tuergeist nella sua risposta.

    
risposta data 08.12.2011 - 21:41
fonte

Leggi altre domande sui tag