從開發(fā)人員角度對軟件測試的些許理解
對軟件測試的認(rèn)識:
軟件測試要求開發(fā)人員避免測試自己開發(fā)的程序。從心理學(xué)角度講,這是很有道理的。特別是一個相對復(fù)雜的系統(tǒng),開發(fā)人員在剛剛開發(fā)完成的時候,尚沉浸于對自己設(shè)計的回味之中。此時去測試的話往往會側(cè)重于程序本身的功能通過性測試。很難發(fā)現(xiàn)錯誤。
測試是為發(fā)現(xiàn)錯誤而執(zhí)行程序的錯誤。一個人發(fā)現(xiàn)別人身上的不足很容易,但發(fā)現(xiàn)自己身上的錯誤便不那么容易了。所謂“吾能指人之失而不能見己之失,吾能指人之小失而不能見己之大失”者是也。一個軟件開發(fā)人員需要養(yǎng)成一種習(xí)慣,正視自己開發(fā)的軟件,特別是剛剛完成的軟件。要看到它的不足,知道他能做什么,不能做什么。在不能做的時候是如何處理的。對邊界條件是否做了嚴(yán)格的判斷及約束。其實大道相通,有沒有這樣的意識往往跟一個人為人處世的心態(tài),對自己的認(rèn)知有密切的聯(lián)系。一個追求完美,經(jīng)常反思自己的人往往有一種虛懷若谷的情懷,“戰(zhàn)戰(zhàn)兢兢、如履薄冰、如臨深淵”者是也。所謂的方法、套路僅僅是方便于那些不怎么思考,只會人云亦云、亦步亦趨的人設(shè)計的。
說了一些心態(tài)方面的,再來從方法學(xué)上說一下軟件測試的要點,對開發(fā)人員來說,白盒測試要比黑盒測試更重要,這決定著你的系統(tǒng)上線后你能不能安心的睡覺;測試的階段主要在單元測試與集成測試方面。
軟件測試的分類:
分類如下圖所示(該圖為大學(xué) 軟件測試課程上面的圖片)
開發(fā)人員測試要點:
對于開發(fā)人員來說,我只強調(diào)單元測試、集成測試兩點。
單元測試主要 測試編寫的類、類中的函數(shù)等。這是測試的最小單元。常用的測試工具有java的JUnit、BoostTest等。
集成測試側(cè)重于 系統(tǒng)的整體功能性測試,這需要模擬各種可能的請求情況,特別是邊界條件。在多系統(tǒng)中,單個系統(tǒng)的測試完了后還需要各個系統(tǒng)之間的聯(lián)調(diào)。
測試目標(biāo)方面,除了一般的功能測試之外還需要穩(wěn)定性測試、性能測試、可靠性測試、適用性測試、易用性測試、安全性測試。
下面詳細(xì)介紹一下各個測試要點的測試內(nèi)容。
1. 功能性測試要點:
在軟件測試領(lǐng)域的通用理解是:“功能測試是基于產(chǎn)品功能說明書,是在已知產(chǎn)品所應(yīng)具有的功能,從用戶角度來進行功能驗證,以確認(rèn)每個功能是否都能正常使用、是否實現(xiàn)了產(chǎn)品規(guī)格說明書的要求、是否能適當(dāng)?shù)亟邮蛰斎霐?shù)鋸而產(chǎn)生正確的輸出結(jié)果等。功能測試,包括用戶界面測試、各種操作的測試、不同的數(shù)據(jù)輸入、邏輯思路、數(shù)據(jù)輸出和存儲等的測試。” 對于開發(fā)人員來說,功能性測試主要是對系統(tǒng)所支持的功能點的測試,對數(shù)據(jù)的測試,包括數(shù)據(jù)邊界的測試、數(shù)據(jù)包長度限制的測試、各個功能模塊數(shù)據(jù)的正確性測試以及容錯處理。該項測試要先把系統(tǒng)的功能點全部列出來,對異常數(shù)據(jù)的處理也算在內(nèi)。
2. 穩(wěn)定性測試要點:
測試在壓力情況下內(nèi)存使用情況,cpu使用情況,是否有內(nèi)存泄露,各個模塊功能是否正常,能否正常提供服務(wù),是否會在高壓情況下卡死等。這也需要用各種可能數(shù)據(jù)進行壓力測試,要測試邊界條件下,收到攻擊時還能否正常工作,系統(tǒng)有沒有自清理功能等。個人的理解,該項測試類似于可靠性測試,要點在于測試系統(tǒng)在極端情況下是否正常。比如一個房子在高強度地震下的抗震能力。
3. 性能測試要點:
測試程序(一般是服務(wù)器),每秒能正常處理的請求數(shù)。這項測試一般是尋找系統(tǒng)的性能瓶頸,看看能否滿足實際的需求。當(dāng)下,一個服務(wù)器每天處理5000萬的請求便可以了。當(dāng)然,通過優(yōu)化對性能的追求是沒有止境的。
4. 安全性測試要點:
安全性測試的主要目的是 確保軟件不會去完成沒有預(yù)先設(shè)計的功能。這一點很重要,需要開發(fā)人員在開發(fā)時對可能出現(xiàn)的情況作細(xì)致的判斷。常見的安全性測試內(nèi)容有:畸形的文件結(jié)構(gòu)、畸形的數(shù)據(jù)包、用戶輸入的驗證、驗證資源之間的依賴關(guān)系、配置文件等的格式等。因為開發(fā)人員常常假定他所獲取的資源內(nèi)容是符合一定標(biāo)準(zhǔn)或規(guī)則的。附錄十常見的web安全性測試的內(nèi)容。
5. 適用性測試要點:
在軟件測試領(lǐng)域的通用理解是“適用性主要是用戶體驗的評估活動”。個人理解,對于開發(fā)人員,這方面主要跟易用性測試聯(lián)系起來,開發(fā)軟件產(chǎn)品是為了更方便的為人服務(wù),一個系統(tǒng)要盡可能的簡單,盡可能減少人工的操作。比如,在配置文件方面,有配置是為了減少代碼的改動性,但是配置要盡可能的簡單,可以由一個配置項解決的問題不要再添加另外一項配置。
附: WEB安全性測試
一個完整的WEB安全性測試可以從部署與基礎(chǔ)結(jié)構(gòu)、輸入驗證、身份驗證、授權(quán)、配置管理、敏感數(shù)據(jù)、會話管理、加密。參數(shù)操作、異常管理、審核和日志記錄等幾個方面入手。
1. 安全體系測試
1.1) 部署與基礎(chǔ)結(jié)構(gòu)
- 網(wǎng)絡(luò)是否提供了安全的通信
- 部署拓?fù)浣Y(jié)構(gòu)是否包括內(nèi)部的防火墻
- 部署拓?fù)浣Y(jié)構(gòu)中是否包括遠(yuǎn)程應(yīng)用程序服務(wù)器
- 基礎(chǔ)結(jié)構(gòu)安全性需求的限制是什么
- 目標(biāo)環(huán)境支持怎樣的信任級別
1.2) 輸入驗證
A. 是否清楚入口點
B. 是否清楚信任邊界
C. 是否驗證Web頁輸入
D. 是否對傳遞到組件或Web服務(wù)的參數(shù)進行驗證
E. 是否驗證從數(shù)據(jù)庫中檢索的數(shù)據(jù)
F. 是否將方法集中起來
G. 是否依賴客戶端的驗證
H. 應(yīng)用程序是否易受SQL注入攻擊
I. 應(yīng)用程序是否易受XSS攻擊
1.3) 身份驗證
- 是否區(qū)分公共訪問和受限訪問
- 是否明確服務(wù)帳戶要求
- 如何驗證調(diào)用者身份
- 如何驗證數(shù)據(jù)庫的身份
- 是否強制試用帳戶管理措施
1.4) 授權(quán)
- 如何向最終用戶授權(quán)
- 如何在數(shù)據(jù)庫中授權(quán)應(yīng)用程序
- 如何將訪問限定于系統(tǒng)級資源
1.5) 配置管理
- 是否支持遠(yuǎn)程管理
- 是否保證配置存儲的安全
- 是否隔離管理員特權(quán)
1.6) 敏感數(shù)據(jù)
- 是否存儲機密信息
- 如何存儲敏感數(shù)據(jù)
- 是否在網(wǎng)絡(luò)中傳遞敏感數(shù)據(jù)
- 是否記錄敏感數(shù)據(jù)
1.7) 會話管理
- 如何交換會話標(biāo)識符
- 是否限制會話生存期
- 如何確保會話存儲狀態(tài)的安全
1.8) 加密
- 為何使用特定的算法
- 如何確保加密密鑰的安全性
1.9) 參數(shù)操作
- 是否驗證所有的輸入?yún)?shù)
- 是否在參數(shù)過程中傳遞敏感數(shù)據(jù)
- 是否為了安全問題而使用HTTP頭數(shù)據(jù)
1.10) 異常管理
- 是否使用結(jié)構(gòu)化的異常處理
- 是否向客戶端公開了太多的信息
1.11) 審核和日志記錄
- 是否明確了要審核的活動
- 是否考慮如何流動原始調(diào)用這身份
2. 應(yīng)用及傳輸安全
WEB應(yīng)用系統(tǒng)的安全性從使用角度可以分為應(yīng)用級的安全與傳輸級的安全,安全性測試也可以從這兩方面入手。
2.1)應(yīng)用級的安全測試
主要目的是查找Web系統(tǒng)自身程序設(shè)計中存在的安全隱患,主要測試區(qū)域如下:
2.1.1)注冊與登陸:現(xiàn)在的Web應(yīng)用系統(tǒng)基本采用先注冊,后登錄的方式。
A. 必須測試有效和無效的用戶名和密碼
B. 要注意是否存在大小寫敏感,
C. 可以嘗試多少次的限制
D. 是否可以不登錄而直接瀏覽某個頁面等。
2.1.2)在線超時:Web應(yīng)用系統(tǒng)是否有超時的限制,即,用戶登陸一定時間內(nèi)(例如15分鐘)沒有點擊任何頁面,是否需要重新登陸才能正常使用。
2.1.3)操作留痕:為了保證Web應(yīng)用系統(tǒng)的安全性,日志文件是至關(guān)重要的。需要測試相關(guān)信息是否寫進入了日志文件,是否可追蹤。
2.1.4)備份與恢復(fù):為了防范系統(tǒng)的意外崩潰造成的數(shù)據(jù)丟失,備份與恢復(fù)手段是一個Web系統(tǒng)的必備功能。備份與恢復(fù)根據(jù)Web系統(tǒng)對安全性的要求可以采用多種手段如數(shù)據(jù)庫增量備份、數(shù)據(jù)庫完全備份、系統(tǒng)完全備份等。出于更高的安全性要求,某些實時系統(tǒng)經(jīng)常會采用雙機熱備或多級熱備。除了對于這些備份與恢復(fù)方式進行驗證測試以外,還要評估這種備份與恢復(fù)方式是否滿足Web系統(tǒng)的安全性需求。
2.1.5)傳輸級的安全測試是考慮到Web系統(tǒng)的傳輸?shù)奶厥庑?,重點測試數(shù)據(jù)經(jīng)客戶端傳送到服務(wù)器端可能存在的安全漏洞,以及服務(wù)器防范非法訪問的能力。一般測試項目包括以下幾個方面。
2.2)HTTPS和SSL測試:
默認(rèn)的情況下,安全HTTP(Soure HTTP)通過安全套接字SSL(Source Socket Layer)協(xié)議在端口443上使用普通的HTTP。HTTPS使用的公共密鑰的加密長度決定的HTTPS的安全級別,但從某種意義上來說,安全性的保證是以損失性能為代價的。除了還要測試加密是否正確,檢查信息的完整性和確認(rèn)HTTPS的安全級別外,還要注意在此安全級別下,其性能是否達(dá)到要求。
原文鏈接:http://www.cnblogs.com/zhanghairong/archive/2012/07/11/2586341.html