Ho qualche difficoltà a valutare la revisione di un software: il software è stato pagato dal cliente anni fa, mai usato, e ora il cliente ha notato che non funziona come previsto.
Ora questo cliente mi ha chiesto di valutare il progetto (ho le fonti) e dovrei dare una stima del tempo per risolverlo e probabilmente un contratto di manutenzione.
Tuttavia, dopo aver analizzato il codice tutto il giorno, noto che la base del codice sorgente è pessima. Ecco le caratteristiche cruciali:
- Un sacco di righe sorgente (140K +)
- C ++ senza classi, tutti allocati staticamente, tutti gli esterni, tutti pubblici
- Scarsi commenti, scarsa documentazione
- Un sacco di avvertenze, contate più di 7K + volte. Gli avvisi si diffondono da mancata corrispondenza / non firmata a variabili alias , fino a variabili non inizializzate .
- Gli strumenti di analisi statici hanno segnalato overflow del buffer, variabili non assegnate, operazioni di stringa sospette.
- Lotto di multithreading e nessuna sezione critica.
Il codice verrà compilato, ma solo la versione "debug" è in grado di funzionare per un breve periodo. Sospetto che i buffer overflow funzionino a sufficienza.
Ho già incontrato un codice come questo, non sono sorpreso che non funzioni come previsto. Ora sto pensando a come affrontare questo compito nel modo più conveniente, e questo è quello che pensavo:
- Correggi tutti gli avvisi del compilatore.
- Correggi tutti gli avvisi di analisi statica
- Garantisci l'accesso esclusivo ai dati condivisi su più thread
- Abilita
_HAS_ITERATOR_DEBUGGING
per il debug distd::vector
accessi (il vettore viene utilizzato molto). Ciò implica un aggiornamento a VS 2005, almeno. - Utilizza il debug degli heap CRT il più possibile, anche se ciò implica lo spostamento della maggior parte delle variabili globali da allocare nell'heap.
- Ampio uso di asserzioni (insieme alla creazione di minidump per l'analisi post-morte)
- Casi di test approfonditi per dimostrare / testare la solidità del software.
Vorrei preparare il test delle unità, ma dovrei rifattare i metodi con 2500+ linee e aggiungere abbastanza dolore da abbandonare.
Penso di avere un buon piano, o forse sono solo nella giusta direzione. Penso che mi manca una misurazione per valutare effettivamente il lavoro che potrei affrontare. qualche idea?