2010-09-08 8 views
6

Mi sto preparando a eseguire una serie di confronti delle prestazioni di vari prodotti di scaffale.Progettazione test di confronto delle prestazioni della libreria

Cosa devo fare per mostrare credibilità nei test? Come faccio a progettare i miei test di riferimento in modo che siano rispettabili?

Sono inoltre interessato a qualsiasi suggerimento sull'effettiva progettazione dei test. Modi per caricare i dati senza eseguire i test (Principio di incertezza di Heisenberg), o modi per monitorare ... ecc.

+0

Questa domanda è come un buco nero .. non posso credere che nessuno abbia pensieri su questo. – Nix

+0

Stai cercando specifici vantaggi in termini di prestazioni, ad es. utilizzo della memoria, velocità, velocità effettiva, accesso I/O? Perfmon (supponendo che tu stia usando Windows) va bene per questi, dato che i contatori sono ancora scritti, anche se non li stai usando. –

risposta

3

Questo è un po 'complicato per rispondere senza sapere che tipo di prodotti "off the shelf" si sta tentando di valutare. Stai cercando reattività dell'interfaccia utente, throughput (ad es. Email, transazioni/sec), tempo di avvio, ecc. - tutti questi hanno criteri diversi per le misure da monitorare e diversi strumenti per testare o valutare. Ma per rispondere ad alcune delle vostre domande generali:

  1. Credibilità: questo è importante. Cerca di assicurarti che qualsiasi cosa tu stia misurando ha una piccola corsa per eseguire la varianza. Utilizza la tecnica di eseguire più esecuzioni dello stesso scenario, sbarazzati dei valori anomali (ad esempio il più basso e il più alto) e valuta i tuoi valori media/massima/minima/media. Se stai facendo una sorta di test del throughput, considera la possibilità di eseguirlo a lungo in modo da avere un buon campionamento. Ad esempio, se stai cercando qualcosa come Microsoft Exchange e quindi stai usando i loro contatori perf, prova ad assicurarti di prendere campioni frequenti (una volta al secondo o ogni pochi secondi) e fai eseguire il test per circa 20 minuti. Ancora una volta, elimina i primi minuti e gli ultimi minuti per eliminare qualsiasi rumore di avvio/arresto.

  2. Heisenburg - difficile. Nella maggior parte dei sistemi moderni, a seconda di quale applicazione/misura si sta misurando, è possibile ridurre al minimo questo impatto, essendo intelligenti su cosa/come si misura. A volte (come nell'esempio di Exchange), vedrai l'impatto vicino a 0. Cerca di utilizzare gli strumenti meno invasivi possibile. Ad esempio, se stai misurando il tempo di avvio, considera l'utilizzo di xperfinfo e utilizza gli eventi incorporati nel kernel. Se stai usando perfmon, non riempire il sistema con contatori estranei di cui non ti importa. Se stai eseguendo alcuni test di lunga durata, esegui il crollo dell'intervallo di campionamento.

Provare anche ad eliminare qualsiasi fonte di variabilità dell'ambiente o possibili fonti di rumore. Se stai facendo qualcosa di intenso sulla rete, considera l'isolamento della rete. Prova a disabilitare qualsiasi servizio o applicazione che non ti interessa. Limita qualsiasi tipo di I/O del disco, operazioni che richiedono un uso intensivo della memoria, ecc. Se l'I/O del disco potrebbe introdurre del rumore in un componente collegato alla CPU, considerare l'utilizzo di SSD.

Quando si progettano i test, tenere presente la ripetibilità. Se si esegue una sorta di test del tipo microbenchmark (ad esempio, test dell'unità perf), il supporto dell'infrastruttura esegue la stessa operazione n volte esattamente la stessa. Se stai guidando l'IU, prova a non guidare fisicamente il mouse e usa invece il livello di accessibilità sottostante (MSAA, UIAutomation, ecc.) Per colpire i controlli direttamente a livello di codice.

Anche in questo caso, questo è solo un consiglio generale. Se hai altre specifiche, posso provare a dare seguito con una guida più efficace.

Divertiti!

+0

Stavo per iniziare con log4net e registrazione aziendale. Ma ce ne sono altri che vorrei confrontare. – Nix

0

Perché ti importa delle prestazioni? In entrambi i casi, il tempo necessario per scrivere il messaggio ovunque si memorizzi il log sarà molto più lento di qualsiasi altra cosa.

Se si sta effettuando la registrazione delle corrispondenze, è probabile che sia necessario indicizzare i file di registro in modo da poter trovare la voce di registro necessaria, a quel punto non si sta eseguendo la registrazione standard.

+0

Questo non è molto utile alla mia domanda. Ma * i sistemi hanno bisogno di controllo e non vuoi essere più lento a causa di un servizio di registrazione. Solo perché dice log non significa che debba essere davvero un file. Alcuni usano DB, Trace, Event Log e altri usano i file. – Nix

+0

Tendo a pensare che il controllo debba essere incorporato nello schema del database in modo da poterne segnalare e cercare. Una verifica "solo scrittura" non è molto utile! –

1

La tua domanda è molto interessante, ma un po 'vaga, perché senza sapere cosa testare non è facile darti qualche indizio.

È possibile testare le prestazioni da diversi angoli, quindi, in base all'utilizzo o alla destinazione della libreria, è necessario provare un approccio o un altro; Cercherò di elencare alcune delle cose che potrebbe essere necessario prendere in considerazione per la misurazione:

  • Multithreading: se la libreria utilizza o il software utilizzerà la libreria in un contesto multithread allora si può avere per testare con molti processori diversi e configurazioni di multiprocessore per vedere come reagisce.
  • tempo di avvio: la sua importanza dipende da quanto intensamente Userete la biblioteca e che cosa è la natura del prodotto in fase di costruzione con esso (client, server ...).
  • Tempo di risposta: per questo non è necessario la prima esecuzione, provare ad eseguire la stessa chiamata molte volte dopo il primo e fare una media . Utilizzando System.Diagnostics.StopWatch potrebbe essere molto utile per questo.
  • Memoria consumo: analizzare la crescita, fare attenzione a quelli esponenziali;). Passare al punto e misurare la quantità di oggetti creati e eliminati.
  • Reattività: non si dovrebbe solo misurare le prestazioni raw , come l'utente ritiene che la velocità del prodotto sia molto importante anche.
  • rete: se la libreria utilizza risorse della rete potrebbe essere necessario testarlo con diversa larghezza di banda e latenza configurazioni, v'è un software per simulare queste situazioni.
  • dati: cercano di creare molti pacchetti di dati diversi test , cercando di coprire, per ad esempio: un grande mazzo di dati grezzi, poi un grande insieme fatto di tanti piccoli pezzi, un lungo di iterazione con piccoli pezzi dei dati, ...

Strumenti:

  • System.Diagnostics.Stopwatch: essenziale per il metodo di analisi comparativa calls
  • Performance counters: ogni volta che sono disponibili sono molto utili per sapere cosa succede all'interno, consentendo di monitorare il software senza comprometterne le prestazioni.
  • Profiler: ci sono alcuni buoni profiler di memoria e prestazioni sul mercato, ma come hai detto, influenzano sempre le misurazioni. Sono utili per trovare colli di bottiglia nel software, ma non penso che tu possa usarli per un test comparativo.
Problemi correlati