摘要:軟體項目中的測試的一點實踐心得
眾所周知,測試是在軟體開發中是必不可少的一部分。測試是保證軟體品質的重要手段,甚至可以稱之為軟體的生命。然而如何做好測試或者通過測試達到想要的效果,是一門值得研究的學問。
在很多軟體開發公司,測試是最容易被高層領導和程式員忽略的一個環節。當一個項目進度非常緊急的時候,測試往往都是時間縮水最多的階段。結果是使“重視測試,充分測試”成了一句話空話。
從軟體工程角度上來說,我們項目的測試活動可以大概分為三個階段,分別是測試計劃,測試實施和測試分析。接下來將分別描述我們在項目開發活動中三個階段是怎麼做的。
[計劃階段]
第一,我們在項目的初期確定好開發方式並制定計劃。在專案計劃中增加一個測試設計師角色。測試設計師將專職從頭以尾參與我們的項目開發活動,包括需求分析,系統分析,系統設計;並根據項目的每個階段的文檔如分析設計文檔產生相應的測試計劃和測試案例。測試設計師將測試計劃彙報給專案經理作為專案計劃的一部分。測試計劃包含了每次測試的時間,人員,目標和測試方式.
第二,專案經理與測試設計師將確定測試的類型方式和每個階段的應用的測試策略。在我們項目中採取單元測試,整合測試,系統測試,效能測試等四種主要測試方式在不同的階段實施,並設產相應的測試目標。簡單的說這個測試目標就是在某階段要發現多少個Bug或者需要改進的地方。
第三,再好的計劃都還是要靠人來實施。測試成功的關鍵還是需要靠項目群組成員的積極性和責任心。大家都知道很多程式員都是討厭測試,認為測試是一件浪費時間和卻收不到任何實際效果的事情,所以專案經理和測試設計師都需要花一定的時間來動員程式員執行有效測試。
[實施階段]
按照專案計劃和測試計劃我們內部採用了四種測試方式,分別是單元測試,整合測試,系統測試,效能測試。在做系統設計初期就把系統可測性作為一個設計目標,因此我們項目採購目前流行J2EE多層架構技術,結合多個常用的J2EE設計模式如MVC, DAO, Service Locator, Value Object。結合J2EE開發指南和MVC,我們對整個系統發大概可以分成以下幾個層次,Model(DAO,Service), Controller(Struts, Action), View(JSP, tiles, FormBean). 讓項目給的人員分別在各個層面上進行開發。並要求每個功能開發完成後,單元測試和用例同時完成; 當各個層次功能完成後我們對各個層次進行整合和進行整合測試,在整合測試期間要求所有程式員按照需求說明和設計分檔提交一個每個功能點的Check List交給測試組的同事測試。所有的整合測試通過後,測試設計師將根據寫好的測試案例組織系統測試。效能測試我們將在交由客戶使用之前進行。以下將簡單的說明各種測試是如何進行的:
1. 單元測試
Junit的作者曾經說過,軟體開發如果沒有單元測試就像人走在鋼絲上,沒有任何的保障. 由於我們項目是多層架構,在每個不同的層都使用了不同的測試載入器。如在Service & DAO層,使用了Jbuilder + Junit, 在Controller&View層使用了Cactus作為主要的測試載入器,通過與Ant的結合自動化的測試並產生單元測試報告。大家都知道,做單元測試沒有足夠的測試案例基本上沒有效果的,所以我們在單元測試中設定了用例覆蓋率的目標大概是80%,項目將通過JCoverage進行跟蹤程式員的用例是否達到目標,以保證單元測試的品質。
2. 整合測試
整合測試的在我們項目中的目標是檢查是各層次之間是否銜接成功,不會拋出無法捕獲的異常。整合測試是在通過工具整合時同時進行,使用Ant+Junit+Cactus對所有的程式員的測試案例進行收集測試並產生測試報告。
3. 系統測試
系統測試是對整個系統進行一次全面的測試。在我們項目中系統測試將由測試設計師根據需求說明書和測試計劃編寫測試案例。在系統測試開始之前,專案經理安排程式針對自己所編碼功能點進行分析,並提交一份功能檢查表給測試設計師。功能檢查表中包括了商務邏輯或者輸入有效性檢查等內容。測試設計師收到功能檢查表後安排測試人員(程式員之間交叉測試或者第三方人員)根據檢查表進行功能核對,如發現BUG,將記錄JIRA(Issue Tracking Tools)上以便跟蹤Bug的狀態。
4. 效能測試
效能測試是在發布使用者之前必不可少的一個步驟,一個系統的效能好壞將影響整個項目的成功與否。效能測試主要是通過Apache Jmeter進行壓力測試,效能測試的包括頁面回應時間和並發使用者的承載量,在進行壓力測試的同時使用profiler收集效能報告以收集系統的瓶頸所在。通過做效能測試我們發現了比較多的問題,如濫用事務,使用者初始化時間過長,200人同時登入時系統將無法運行等情況。對此我們經過分效能測試報告,我們通過以下幾種方法解決:
a) 從代碼中去掉查詢事務,單表寫入事務
b) 減少與使用者關聯的資料,減低與使用者對旬太緊密的關係
c) 調整應用程式伺服器的初始記憶體和最大記憶體
d) 對DAO層和查詢加上緩衝
經過以上方案後,系統效能提高了40%以上。
[結果分析階段]
結果分析是測試的重要環節之一。我們能過工具收集了bug的發生原因,引入階段,修改時間,嚴重程度,類型等關鍵資訊。根據以上的資訊分析測試的效率和原因,以便形成公司的知識庫文檔和軟體品質的資料庫.