Aggiunta di interfacce esplicite al codice C ++ gestito da Legacy

2

Ho un po 'di sfida e non sono sicuro di come affrontarlo. Abbiamo un progetto molto grande (che ha circa 5 anni). Il codice base è ENORME, quindi un refactoring completo è fuori questione.

Quello che faremo è refactoring di bit di codice quando usiamo queste parti (questo è il codice backend, che useremo su un sistema frontend)

Il codice esistente ha zero astrazione e vogliamo creare test unitari per questo. Usiamo il framework RhinoMock e la chiamata dai miei superiori è che dobbiamo aggiungere interfacce esplicite al codice, in modo da astrarlo in modo che possiamo prendere in giro gli oggetti in RhinoMock.

Ho una domanda più ampia e una più stretta: 1) L'interfaccia migliore è l'opzione migliore? O dovrei suggerire qualche altra tecnica ...

2) Qualcuno può suggerire un approccio di alto livello a questo tipo di refactoring del codice? Non sono mai stato in una posizione in cui ho dovuto aggiungere interfacce esplicite al codice esistente. (Il codice legacy è gestito C ++ tra l'altro)

Grazie in anticipo per le tue risposte. Inoltre, se questa domanda è nel posto sbagliato o troppo ampia, mi scuso.

    
posta Retief Fourie 11.06.2013 - 08:30
fonte

1 risposta

1

Questa è una cosa che mi infastidisce sui framework unit test: devi cambiare il modo di codificare, solo così puoi usare il quadro di test unitario.

Ce ne sono altri - per esempio, cppunit non richiede interfacce inserite ovunque che, per una base di codice legacy in C ++, potrebbero essere una soluzione migliore.

L'altra alternativa è quella di dividere pezzi di codice lontano dall'enorme base di codice e reimplementarli come progetti separati, quindi ridimensionarli in modo isolato.

Ovviamente, potresti semplicemente dire che un'unità che collauda una base di codice legacy è troppo difficile, e invece dovresti spendere i tuoi sforzi per i test di integrazione automatici. Questo è il modo in cui i test sono stati eseguiti e devono ancora essere utilizzati pesantemente anche con codebase abilitati al test dell'unità.

    
risposta data 11.06.2013 - 10:09
fonte

Leggi altre domande sui tag