Sto usando una versione ottimizzata dell'algoritmo di Levenshtein in qualche codice di ricerca che sto costruendo. Ho dei test unitari funzionali per verificare che l'algoritmo restituisca i risultati corretti, ma in questo contesto la prestazione dell'algoritmo è anche estremamente importante.Come posso testare l'ottimizzazione delle prestazioni dell'unità in C#?
Sto cercando di aggiungere un po 'di copertura di test al progetto in modo che se eventuali modifiche future influenzano le ottimizzazioni, verranno visualizzate come test in errore - perché l'algoritmo è deterministico e in esecuzione contro i dati di test noti, questo potrebbe essere dettagliato come contare il numero di istruzioni eseguite per un dato set di input di test. In altre parole, non sto cercando di misurare le prestazioni dell'algoritmo utilizzando i timer: sono interessato a testare effettivamente il comportamento interno dell'algoritmo anziché solo l'output.
Qualche idea su come affrontare questo in C# /. NET 4?
MODIFICA: Il motivo per cui non voglio utilizzare solo il tempo di wall-clock è che varierà con il carico della CPU e altri fattori fuori dal controllo del test. Ciò potrebbe portare a test che falliscono quando il server di compilazione è sotto carico, per esempio. Ci sarà essere il monitoraggio orologio da parete come parte del sistema distribuito.
EDIT 2: Pensa in questo modo ... come applicheresti il rosso-> verde-> refactor quando le prestazioni sono un requisito fondamentale?
Il numero di istruzioni eseguite non equivale necessariamente alla prestazione. Perché l'orologio non è il parametro di interesse qui? –
Concordato - ma se il numero di istruzioni eseguite in risposta a uno specifico insieme di input dovesse cambiare drasticamente a seguito di una modifica al codice, mi piacerebbe saperlo. Questo è il genere di cose che sto cercando. –
Non userei i test unitari per verificarlo. Se gli sviluppatori stanno cambiando il codice funzionante, completo e altamente ottimizzato, allora dovrebbero sapere esattamente cosa stanno facendo. Non è così probabile che questo codice abbia bisogno di essere "ottimizzato" giusto? Allora perché preoccuparsi? Le prestazioni sono una caratteristica non funzionale. –