iT邦幫忙

4

鼠年全馬鐵人挑戰 WEEK 05:軟體測試的種類 - 番外篇

  • 分享至 

  • xImage
  •  


            Photo by Helloquence on Unsplash

前言

小弟之前在 鼠年全馬鐵人挑戰 WEEK 03:軟體測試的種類 - 第二集 的文章中有提到:"非功能性測試 (Non-Functional Test)"。 而這篇文章主要是藉由上次的內容做一個額外的介紹。 ( •ˋωˊ• )~


性能測試 (Performance Test)

什麼是性能測試? 為什麼需要做性能測試? 性能測試的重點是什麼?
如果是第一次接觸到 "性能測試" 這個名詞的人,或許都會有這些疑問吧~

  • 什麼是性能測試?

性能測試可以用來驗證系統是否符合製造商或供應商聲明的規範。

簡單來說就跟玩遊戲一樣,製造商或供應商就像是正在找代打的玩家;而做性能測試的人,就像是要幫忙破關解成就的職業玩家,但是如果職業玩家解不了成就破不了關,雇主可能就會森氣氣了。 (#ˋ皿ˊ)ノ

  • 為什麼需要做性能測試?

透過性能測試可以了解應用程式可能失敗或延遲的地方。

當產品已經到了完成的階段,還是免不了要做一些性能測試。能夠提升產品的性能與效能,也能夠藉此避免掉一些錯誤或是延遲的機率。

  • 性能測試的重點是什麼?

性能測試的重點主要分成了三種。
速度 - 確定應用程式是否快速響應。
穩定性 - 確定應用程式在不同負載下是否穩定。
可伸縮性 - 確定應用程式可以處理的最大用戶負載。

然而性能測試根據上述的重點又可以畫分成許多不同種類的測試。
那測試包含了哪些呢?讓我們繼續看下去~ (☞゚∀゚)☞

壓力測試 (Stress Testing)

在極端的工作負載下測試應用程式,了解應用程式如何處理高流量高數據。
因為在某些情況下系統的故障可能導致巨大虧損,所以還是乖乖的通過壓力測試吧~

  • 壓力測試的目的:

    • 發掘應用程式的突破點。(就像是在激發出人類淺能一樣)
    • 看看系統在異常情況下能不能繼續工作,還是就直接罷工了。
    • 檢查系統在被不合理的壓榨下,能不能顯示相應的錯誤消息。
  • 舉個例子

    教授要你在一天之內完成10篇的發表論文。 (雖然聽起來有點瞎@.@)
    你就像是應用程式,必須處理10篇論文的高流量高數據。
    而教授就是那個測試人員,他必須監督你在一天內完成10篇的發表論文。
    然而合理的要求是訓練,不合理的要求是磨練。
    如果你真的無法完成,但是你已經盡了你最大的努力。
    那就向教授反應吧,適時的表達原因 - 也就是應用程式返回的錯誤訊息。

負載測試 (Load Testing)

在預期的用戶負載下測試應用程式,了解應用程式在預期負載下是否會遇到性能瓶頸。
必須確保軟體的設計、伺服器的配置與硬體限制是沒有問題的。

  • 負載測試的目的:

    • 檢查每項動作的回應時間,千萬別按一個按鈕網頁就轉了老半天。
    • 優化客戶端和伺服器之間的網路延遲。(可能是因為現代人生活步調太快惹~)
    • 檢查不同負載下系統與資料庫的性能,反正就是確定每個地方都沒問題就對了
  • 舉個例子

    你在學校上了一天課,每個老師都出了回家作業。 (天阿!聽起來就覺得累)
    你就像是應用程式,必須處理預期負載的回家作業。
    而老師就是那個測試人員,他必須限制你在一天內完成他出的回家作業。
    而老師會檢查你有沒有寫作業,作業的內容會不會太多,有沒有準時繳交。
    甚至是檢查你的作業內容,不能有任何的錯誤。

負載測試 vs 壓力測試

因為負載測試與壓力測試常常被搞混所以這邊簡單的分別說明一下兩者的差異
好拉~ 其實是小弟我自己搞不清楚,所以幫自己做個筆記 (〃∀〃)

  • 負載測試:負載測試不會破壞系統,在正常工作負載條件下測試系統行為。
  • 壓力測試:壓力測試試圖打破系統,在極端工作負載條件下測試系統行為。

耐力測試/浸泡測試 (Endurance Testing/Soak Testing)

在預期的最大負荷下長時間的運行應用程式,確保應用程式能夠運作。
通常因為系统運行時間過長,一些資源無法正常釋放,導致系统回應的時間慢慢變長。

  • 耐力測試/浸泡測試的目的:

    • 監視資料庫資源的消耗 (是否正常的清除不必要的資料)
    • 監視服務器資源的消耗 (有就是很常聽到的 CPU 使用率)
  • 舉個例子

    在一整個學年度中,每個老師每天都狂出作業跟考試。 (聽起來是預期的XD)
    你就像是應用程式,必須長時間處理預期的最大負荷。
    而老師就是那個測試人員,他必須確定你不會無故請假或是翹課。
    也要監督你的學業成績不會下滑,必須能夠有效地吸收老師教的東西。

體積測試/洪水測試 (Volume Testing)

將大量的數據寫入資料庫中,並監控整個系統的行為,確保應用程式能夠運作。

  • 體積測試/洪水測試的目的:

    • 通過增加資料庫中的數據量來檢查系統性能。
    • 識別大量數據可能發生的問題。
    • 釐清系統穩定性降低的問題點。
    • 確定應用程式正常和大量的容量。
  • 舉個例子

    在上英文課的時候,老師都會固定教 10 個單字,並在下次上課考試。
    但是某天,老師突然教了 100 個單字,並且下次上課也要考試。
    此時 100 個單字就有如大量的數據,學生的腦力就有如資料庫。
    確保學生是否可以有效吸收這 100 個單字的內容。

擴展性測試/伸縮性測試 (Scalability Testing)

確定系統在擴展中的有效性,以支持用戶負載的增加,有助於規劃軟體系統容量增加。
用於在按比例放大或縮小用戶請求時測量網絡或系統的性能。

  • 擴展性測試/伸縮性測試的目的:

    • 確保應用程序可以處理預計的用戶流量,數據量,事務計數頻率等方面的增長
    • 確定應用程式的用戶限制。
    • 確定負載下的客戶端降級和最終用戶體驗。
    • 確定服務器端的健壯性和降級。
  • 舉個例子

    在學期剛開始的時候,老師教的東西都較簡單也較少。
    但是隨著時間的增加,老師所教的內容越來越艱深也越來越難懂。
    而老師就是那個測試人員,確保學生可以處理預期的課程內容。
    而學生也必須能夠隨著課程難度的提升而有所成長。

尖峰測試 (Spike Testing)

尖峰測試是從電力工業借鑒而來的,測試設備剛接通電源時,能否承受住通流的破壞。
而軟體的衝擊測試,是為了驗證網站在用户突然急速增加的情况下能夠正常工運行。

  • 舉個例子

    還沒到上下個得期間,學校附近的交通都非常的順暢。
    但是一到上下課的時間一到,大量的交通工具,一窩蜂的聚集在一起。
    此時學校就會關注,家長的接送率,學校內部的接送區,與內部停車場的使用率。
    就像是在關注 CPU 使用率、可用内存、内存使用百分比等。
    每隔一時間就紀錄上述的指標,來確定系統的問題之處。


性能測試的步驟

以下內容為性能測試的基本步驟,如果對性能測試的步驟毫無頭緒,可以參考看看。

  1. 確定測試環境

    了解所需測試的環境。(通常與穩定的版本環境相似)
    了解可用的測試工具,或是可用的測試設備。
    使用的軟硬體和網絡配置的詳細信息。

  2. 確定性能驗收標準

    確認性能測試所要關注的主要內容。(包括吞吐量,響應時間和資源分配等)
    還有必要在這些目標和約束之外確定項目成功標準。

  3. 計畫和設計性能測試

    確定最終用戶的使用情況,可能會有所不同。
    確定測試所有可能案例的關鍵方案。
    模擬各種終端用戶的使用情境。
    規劃性能測試數據並概述將收集哪些指標。

  4. 配置測試環境

    執行前確保已準備測試環境,安排工具和其他資源。

  5. 實施測試設計

    根據測試計畫與設計創建性能測試內容。

  6. 運行測試

    執行並監控測試,確定測試正常運行。

  7. 分析、調整和重新測試

    整合、分析和共享測試結果。
    進行微調並再次測試以確定性能是否有改善或降低。


結尾

就這樣,以上是這篇所介紹的內容,希望內容不會太艱澀難懂。
希望之後有時間可以再做幾篇性能測試的工具給大家做講解。


參考文獻


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言