2010-12-22 20 views
8

我正在用C#/ .NET開發軟件,但我想這個問題也可以被要求用於其他編程語言。你如何測試你的軟件在不同版本之間的性能?讓我再詳述一下。如何測試軟件發行版本之間的代碼性能?

在軟件的產品發佈之前,我想比較軟件的性能,以獲得軟件以前版本中可用的一組功能。假設您正在討論導致發佈一個或多個dll的軟件庫項目(無GUI)。如何實現這一目標?什麼是一些最佳實踐?我不可能將當前的dll與以前的發行版dll交換並運行相同的測試。

我能想到的一種方式是在主分支(用於當前版本)和較早的發行版分支中添加相同的性能測試,然後比較性能。我認爲這樣做有一些痛苦,但是可能的。

我能想到的另一種方法是從最小版本分支開始,將最新版本之後放入的新代碼和功能進行分類,然後運行測試。我不認爲這會產生正確的結果,更不用說這種方法比以前的方法更加痛苦。

感謝您的其他想法。首選C#/ .NET特定的答案。

編輯1:Thisthis是有些相關的問題。

+0

這將成爲一個很好的維基條目。 – 2010-12-22 23:24:49

+0

我很好,但不知道如何做到這一點。我想我可能沒有足夠的分數等等。主持人可以使這個wiki成爲我想的。 – 2010-12-23 15:28:23

回答

3

我們有一套性能測試。這些只是NUnit測試。每個測試都會設置一些對象,啓動計時器(Stopwatch工作正常),我們感興趣的操作(例如,加載某個屏幕的數據),然後將已用時間寫入CSV文件。 (NUnit記錄每個測試需要多長時間,但我們希望排除設置邏輯,在某些情況下,這些邏輯在測試之間會有所不同 - 所以執行我們自己的計時器和日誌記錄會更有意義。)

我們經常在相同的硬件和網絡環境中運行這些測試。我們將結果導入數據庫。然後,很容易構建顯示趨勢的圖表,或者調出大的百分比變化。

1

您可以將測試結果附加到每個新版本的源受控文本文件。這將爲您提供每個版本性能的易於訪問的歷史記錄。

您對分支和中繼運行性能測試的想法基本相同,但保存結果可能會節省您來回切換工作副本的工作量。

2

如果要實際比較發佈版本之間的性能,那麼您需要一些測試來執行跨版本的相同功能。單元測試通常適用於此。

你可以做的另一個更積極的事情是根據預定義的性能閾值對代碼進行日誌記錄。例如,當您在舊版本中運行代碼時,您會得到一個指標。然後將時間代碼添加到您的應用程序中,以便如果同一個函數在任何時間點需要更長的時間,請記錄一條消息(或廣播一個調用者可以選擇記錄的事件)。當然,您不想過度使用時序代碼本身會導致性能下降的程度。

我們在使用SQL調用的應用程序中執行此操作。對於任何單個SQL調用需要的最長時間,我們都有一個閾值,並且如果有超過閾值的SQL調用,那麼我們將其作爲警告記錄下來。我們還跟蹤給定http請求中的SQL調用數量。你的目標應該是隨着時間的推移減少閾值。

您可以將這些測試包裝在#if部分中,以使其不包含在生產中,但在生產中也可能非常有用。

0

我們有一個用戶(或測試者)可以啓用的特殊設置。我們啓用它,它會生成一個CSV文件,我們可以將它提供給Excel並查看性能報告。

它會報告某些操作的個人計數和他們花了多長時間。 Excel以一種很好的視覺方式爲我們展示了這一點。

所有的代碼都是自定義的,唯一的缺點是性能跟蹤代碼的開銷,但是我們對它進行了基準測試,它幾乎沒有。這是一個非常優化和非常短的。

這種方法的美妙之處在於,如果您遇到無法重現的性能問題,您可以從客戶那裏獲得良好的反饋。