天天看點

軟體項目中的測試的一點實踐心得

衆所周知,測試是在軟體開發中是必不可少的一部分。測試是保證軟體品質的重要手段,甚至可以稱之為軟體的生命。然而如何做好測試或者通過測試達到想要的效果,是一門值得研究的學問。

  在很多軟體開發公司,測試是最容易被高層上司和程式員忽略的一個環節。當一個項目進度非常緊急的時候,測試往往都是時間縮水最多的階段。結果是使“重視測試,充分測試”成了一句話空話。

從軟體工程角度上來說,我們項目的測試活動可以大概分為三個階段,分别是測試計劃,測試實施和測試分析。接下來将分别描述我們在項目開發活動中三個階段是怎麼做的。

[計劃階段]

  第一,我們在項目的初期确定好開發方式并制定計劃。在項目計劃中增加一個測試設計師角色。測試設計師将專職從頭以尾參與我們的項目開發活動,包括需求分析,系統分析,系統設計;并根據項目的每個階段的文檔如分析設計文檔産生相應的測試計劃和測試案例。測試設計師将測試計劃彙報給項目經理作為項目計劃的一部分。測試計劃包含了每次測試的時間,人員,目标和測試方式.

第二,項目經理與測試設計師将确定測試的類型方式和每個階段的應用的測試政策。在我們項目中采取單元測試,內建測試,系統測試,性能測試等四種主要測試方式在不同的階段實施,并設産相應的測試目标。簡單的說這個測試目标就是在某階段要發現多少個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的發生原因,引入階段,修改時間,嚴重程度,類型等關鍵資訊。根據以上的資訊分析測試的效率和原因,以便形成公司的知識庫文檔和軟體品質的資料庫.