1. 程式人生 > >從開發人員角度對軟體測試的些許理解

從開發人員角度對軟體測試的些許理解

http://www.cnblogs.com/zhanghairong/archive/2012/07/11/2586341.html

 對軟體測試的認識:

    軟體測試要求開發人員避免測試自己開發的程式。從心理學角度講,這是很有道理的。特別是一個相對複雜的系統,開發人員在剛剛開發完成的時候,尚沉浸於對自己設計的回味之中。此時去測試的話往往會側重於程式本身的功能通過性測試。很難發現錯誤。
    測試是為發現錯誤而執行程式的錯誤。一個人發現別人身上的不足很容易,但發現自己身上的錯誤便不那麼容易了。所謂“吾能指人之失而不能見己之失,吾能指人之小失而不能見己之大失”者是也。一個軟體開發人員需要養成一種習慣,正視自己開發的軟體,特別是剛剛完成的軟體。要看到它的不足,知道他能做什麼,不能做什麼。在不能做的時候是如何處理的。對邊界條件是否做了嚴格的判斷及約束。其實大道相通,有沒有這樣的意識往往跟一個人為人處世的心態,對自己的認知有密切的聯絡。一個追求完美,經常反思自己的人往往有一種虛懷若谷的情懷,“戰戰兢兢、如履薄冰、如臨深淵”者是也。所謂的方法、套路僅僅是方便於那些不怎麼思考,只會人云亦云、亦步亦趨的人設計的。
    說了一些心態方面的,再來從方法學上說一下軟體測試的要點,對開發人員來說,白盒測試要比黑盒測試更重要,這決定著你的系統上線後你能不能安心的睡覺;測試的階段主要在單元測試與整合測試方面。

軟體測試的分類:

    分類如下圖所示(該圖為大學 軟體測試課程上面的圖片)

開發人員測試要點:

    對於開發人員來說,我只強調單元測試、整合測試兩點。
    單元測試主要 測試編寫的類、類中的函式等。這是測試的最小單元。常用的測試工具有java的JUnit、BoostTest等。
    整合測試側重於 系統的整體功能性測試,這需要模擬各種可能的請求情況,特別是邊界條件。在多系統中,單個系統的測試完了後還需要各個系統之間的聯調。  

    測試目標方面,除了一般的功能測試之外還需要穩定性測試、效能測試、可靠性測試、適用性測試、易用性測試、安全性測試。

    下面詳細介紹一下各個測試要點的測試內容。


    1.   功能性測試要點

     在軟體測試領域的通用理解是:“功能測試是基於產品功能說明書,是在已知產品所應具有的功能,從使用者角度來進行功能驗證,以確認每個功能是否都能正常使用、是否實現了產品規格說明書的要求、是否能適當地接收輸入數鋸而產生正確的輸出結果等。功能測試,包括使用者介面測試、各種操作的測試、不同的資料輸入、邏輯思路、資料輸出和儲存等的測試。”    對於開發人員來說,功能性測試主要是對系統所支援的功能點的測試,對資料的測試,包括資料邊界的測試、資料包長度限制的測試、各個功能模組資料的正確性測試以及容錯處理。該項測試要先把系統的功能點全部列出來,對異常資料的處理也算在內。


     2. 穩定性測試要點

    測試在壓力情況下記憶體使用情況,cpu使用情況,是否有記憶體洩露,各個模組功能是否正常,能否正常提供服務,是否會在高壓情況下卡死等。這也需要用各種可能資料進行壓力測試,要測試邊界條件下,收到攻擊時還能否正常工作,系統有沒有自清理功能等。個人的理解,該項測試類似於可靠性測試,要點在於測試系統在極端情況下是否正常。比如一個房子在高強度地震下的抗震能力。


     3.  效能測試要點

    測試程式(一般是伺服器),每秒能正常處理的請求數。這項測試一般是尋找系統的效能瓶頸,看看能否滿足實際的需求。當下,一個伺服器每天處理5000萬的請求便可以了。當然,通過優化對效能的追求是沒有止境的。


     4.  安全性測試要點

    安全性測試的主要目的是 確保軟體不會去完成沒有預先設計的功能。這一點很重要,需要開發人員在開發時對可能出現的情況作細緻的判斷。常見的安全性測試內容有:畸形的檔案結構、畸形的資料包、使用者輸入的驗證、驗證資源之間的依賴關係、配置檔案等的格式等。因為開發人員常常假定他所獲取的資源內容是符合一定標準或規則的。附錄十常見的web安全性測試的內容。


     5. 適用性測試要點

     在軟體測試領域的通用理解是“適用性主要是使用者體驗的評估活動”。個人理解,對於開發人員,這方面主要跟易用性測試聯絡起來,開發軟體產品是為了更方便的為人服務,一個系統要儘可能的簡單,儘可能減少人工的操作。比如,在配置檔案方面,有配置是為了減少程式碼的改動性,但是配置要儘可能的簡單,可以由一個配置項解決的問題不要再新增另外一項配置。
    


附: WEB安全性測試
       一個完整的WEB安全性測試可以從部署與基礎結構、輸入驗證、身份驗證、授權、配置管理、敏感資料、會話管理、加密。引數操作、異常管理、稽核和日誌記錄等幾個方面入手。
1.        安全體系測試

  1.1)  部署與基礎結構
          網路是否提供了安全的通訊
          部署拓撲結構是否包括內部的防火牆
          部署拓撲結構中是否包括遠端應用程式伺服器
          基礎結構安全性需求的限制是什麼
          目標環境支援怎樣的信任級別

1.2)  輸入驗證

    A.  是否清楚入口點

    B.  是否清楚信任邊界
    C.  是否驗證Web頁輸入
    D.  是否對傳遞到元件或Web服務的引數進行驗證
    E.  是否驗證從資料庫中檢索的資料
    F.  是否將方法集中起來
    G.  是否依賴客戶端的驗證
    H.  應用程式是否易受SQL注入攻擊
    I.   應用程式是否易受XSS攻擊


  1.3)  身份驗證
    是否區分公共訪問和受限訪問
    是否明確服務帳戶要求
    如何驗證呼叫者身份
    如何驗證資料庫的身份
    是否強制試用帳戶管理措施

  1.4)  授權
    如何向終端使用者授權
    如何在資料庫中授權應用程式
    如何將訪問限定於系統級資源

  1.5)  配置管理
    是否支援遠端管理
    是否保證配置儲存的安全
    是否隔離管理員特權

  1.6)   敏感資料
    是否儲存機密資訊
    如何儲存敏感資料
    是否在網路中傳遞敏感資料
    是否記錄敏感資料

1.7)  會話管理
    如何交換會話識別符號
    是否限制會話生存期
    如何確保會話儲存狀態的安全

1.8)  加密
    為何使用特定的演算法
    如何確保加密金鑰的安全性

1.9)  引數操作
    是否驗證所有的輸入引數
    是否在引數過程中傳遞敏感資料
    是否為了安全問題而使用HTTP頭資料

  1.10)  異常管理
    是否使用結構化的異常處理
    是否向客戶端公開了太多的資訊

  1.11)  稽核和日誌記錄
    是否明確了要稽核的活動
    是否考慮如何流動原始呼叫這身份

2.        應用及傳輸安全
  WEB應用系統的安全性從使用角度可以分為應用級的安全與傳輸級的安全,安全性測試也可以從這兩方面入手。
  2.1)應用級的安全測試

主要目的是查詢Web系統自身程式設計中存在的安全隱患,主要測試區域如下:

  2.1.1)註冊與登陸:現在的Web應用系統基本採用先註冊,後登入的方式。

      A. 必須測試有效和無效的使用者名稱和密碼
      B. 要注意是否存在大小寫敏感,
      C. 可以嘗試多少次的限制
      D. 是否可以不登入而直接瀏覽某個頁面等。

  2.1.2)線上超時:Web應用系統是否有超時的限制,即,使用者登陸一定時間內(例如15分鐘)沒有點選任何頁面,是否需要重新登陸才能正常使用。

  2.1.3)操作留痕:為了保證Web應用系統的安全性,日誌檔案是至關重要的。需要測試相關資訊是否寫進入了日誌檔案,是否可追蹤。

  2.1.4)備份與恢復:為了防範系統的意外崩潰造成的資料丟失,備份與恢復手段是一個Web系統的必備功能。備份與恢復根據Web系統對安全性的要求可以採用多種手段如資料庫增量備份、資料庫完全備份、系統完全備份等。出於更高的安全性要求,某些實時系統經常會採用雙機熱備或多級熱備。除了對於這些備份與恢復方式進行驗證測試以外,還要評估這種備份與恢復方式是否滿足Web系統的安全性需求。

  2.1.5)傳輸級的安全測試是考慮到Web系統的傳輸的特殊性,重點測試資料經客戶端傳送到伺服器端可能存在的安全漏洞,以及伺服器防範非法訪問的能力。一般測試專案包括以下幾個方面。

  2.2)HTTPS和SSL測試

  預設的情況下,安全HTTP(Soure HTTP)通過安全套接字SSL(Source Socket Layer)協議在埠443上使用普通的HTTP。HTTPS使用的公共金鑰的加密長度決定的HTTPS的安全級別,但從某種意義上來說,安全性的保證是以損失效能為代價的。除了還要測試加密是否正確,檢查資訊的完整性和確認HTTPS的安全級別外,還要注意在此安全級別下,其效能是否達到要求。

注:該文章最初寫於2011年3月8日,今天搬到部落格園來。