大家更多的是關注測試載入器,測試技巧,而少有人去從根本上來分析、測試軟體。一個優秀的軟體效能測試工程師要具有宏觀和微觀的軟體測試觀。他要分析軟體的架構,瞭解軟體的運行模式,瞭解通訊協議,更是一個軟體開發高手。就象一個醫生,他要通過多年的深造和摸索,要瞭解病理、藥理,他才能對症下藥,好了,不多說了,說一下軟體設計對軟體效能的影響。這是我遇到的一些實際的例子。
例子一:一個網站,允許註冊使用者可以上傳一些圖片、文檔、影音檔案,把這些檔案做為大二進位檔案儲存到資料庫中。功能並不是太複雜,軟體的功能測試沒有問題,開始進行效能測試。5個使用者的並發都沒有通過,功能出錯了,效能測試也就進行不下去了,分析原因,原來軟體設計的時候,為每一個上傳的檔案設計了一個“ID”欄位做為主鍵,該欄位是自增的,在ORACLE資料庫中沒有自增欄位,需要編寫觸發器來自增,但是軟體開發人員在應用程式中編寫了一個函數,在上傳檔案前從資料庫中獲得最大ID,然後加一,再填寫其他資訊,選擇檔案,上傳,這樣在多使用者使用的時候必然造成ID欄位值重複,系統必然出錯。這個錯誤修改後,進行效能測試,設計者把所有的上傳檔案都儲存到一個資料表中,他沒有考慮網站的流量和上傳檔案數量很多的情況,結果在進行資料庫壓力測試的時候,當資料庫中有10萬條記錄時,假設每個上傳檔案的大小是1M,該資料表的查詢、備份、恢複都非常困難,當多使用者瀏覽、上傳這些檔案時,效能嚴重下降。這就是一個軟體設計存缺陷。
例子二:一個圖形管理軟體,架構採用的是B/S模式,通過在IE中嵌入ACTIVX控制項,根據從資料庫中讀取出的測量點資料,在ACTIVX中繪製成各種曲線,該測量點資料是井的資料,每米取10個點,每點有16條資料,每口井的井深平均按5000米算,500口井的資料就非常龐大了。在效能測試的時候,我首先分析了軟體的運行機制,用戶端發出請求--WEB伺服器(分析)--讀取資料庫資料--產生HTML和資料流返回用戶端--用戶端控制項根據點資料繪製成曲線。從這些過程中看效能的瓶頸應該在WEB伺服器和資料庫間。(ACTIVX控制項有的效能測試工具不支援,但協議可以看成是HTTP,並可以看成是一次請求),因ACTIVX運行在用戶端,這部分的效能主要是受用戶端影響。在效能測試過程中發現,效能真的是受資料讀取速度的影響,更可怕的是,該資料庫竟然沒有設定索引,設定索引後,軟體開發人員竟然在索引欄位用了trim()函數來去掉空格,造成索引欄位沒有起到作用,汗一個!!!!。
從上面的例子可以看出,設計才是決定效能的關鍵。