Ho portato diverse vecchie applicazioni VB6 al framework .NET, tutte quasi senza documentazione, da quella esperienza posso darti alcuni consigli. In primo luogo, lasciatemi dire, sbarazzarsi di VB6 è IMHO un obiettivo legittimo, tuttavia, se si elimina il vecchio codice VBA (utilizzando Excel o Word come piattaforma VBA) vale la pena è discutibile, poiché VBA è ancora ben supportato per questi piattaforme.
Ad ogni modo, se stai davvero seguendo questa strada, consiglio vivamente i seguenti punti:
1. Non riscrivere, invece: port!
Hai scritto "Posso ridurre i loc di almeno il 50%, semplicemente usando le moderne librerie e le funzionalità linguistiche (C #)" . Con questo, hai già commesso l'errore tipico che ho visto così tante volte, anche da sviluppatori esperti, che renderanno il tuo tentativo fallito se non cambierai le tue tattiche. Anche se il 50% fosse vero (il che è IMHO troppo ottimista), si sottovaluta il tempo per ottenere queste linee del 50% di codice prive di errori come il codice originale. Secondo la mia esperienza, se si riscrive il programma da zero, si sarà circa 10 volte più lenti del porting del programma in modo 1: 1. Vedi anche questo vecchio post sul blog di Eric Nelson , che dice essenzialmente la stessa cosa. Assicurati di leggere anche il famoso post sul blog di Joel Spolsky sulle riscritture .
Porting significa che porti il codice sorgente originale con il minor numero possibile di modifiche alla nuova piattaforma. Per questo, fai un favore a te stesso e non usare C #, usa VB.NET , anche se sei sicuramente convinto che C # sia la lingua più "cool". Fact is, C # e VB.NET sono quasi ugualmente potenti e ugualmente supportati da MS, ma VB.NET è molto più adatto come porting target da vecchi VB6 o VBA. Il porting ti permetterà di trasferire la maggior parte del programma correttamente trasferito nel nuovo ambiente con una frazione di nuovi bug, anche se non capisci tutti i dettagli non documentati nel vecchio codice.
Raccomando anche di attenermi alle "libs moderne" quando sono disponibili libs più vecchie e mature che sono molto più simili a quelle che il tuo vecchio programma usa ora. Ad esempio, il porting di una GUI VB6 a Winforms è di ordini di grandezza più semplice che riscrivere la GUI usando WPF. E le librerie come DAO o ADO sono ancora disponibili per Windows, non è necessario passare immediatamente a ADO.NET molto diverso. Se pensi che il passaggio a una nuova libreria ti porti davvero dei vantaggi, fallo più tardi - segui la saggezza del vecchio programmatore - prima rendilo giusto, quindi rendilo piacevole.
2. Crea una buona suite di test di regressione per tutto ciò che ha senso, e costruiscila in anticipo, utilizzando il vecchio programma per produrre i dati di riferimento!
Questo può essere ottenuto anche se non conosci scopo completo del codice precedente . L'abbiamo fatto più di una volta prima di iniziare a port, e ci ha salvato così tante volte dall'introduzione di bug inaspettati che posso sicuramente dire che è sempre stato il primo sforzo.
3. Pianifica il porting a piccoli passi e sostituisci le parti del vecchio programma in produzione con il nuovo il prima possibile.
Con 250K LOC, sono sicuro che c'è la possibilità no di sostituire il vecchio programma con quello nuovo in un modo big-bang. Ovviamente, il modo per eseguire una sostituzione incrementale dipende in gran parte dalla struttura del vecchio programma e dai casi d'uso che supporta, ma in qualsiasi programma di tale dimensione, è molto probabile che si possano trovare parti che possono essere sostituite e distribuite separatamente. Lo stack DotNet supporta diverse funzionalità per rendere più fluida tale transizione, come lo sviluppo semplice dei componenti COM con il linguaggio .Net (in modo da poterli incorporare nel vecchio programma VBA in sostituzione delle parti già caricate).
Ogni parte che hai portato con successo e portato in produzione è
-
una parte per cui non devi più mantenere il vecchio e il nuovo codice in parallelo
-
una parte per la quale dai tuoi utenti ricevi un prezioso feedback su come funziona bene con il nuovo stack tecnologico, che ti aiuta a trasferire la porzione successiva del codice in modo più corretto ea stimare meglio il lavoro rimanente.