文丨徐 蕾
計算機管理系統是一種運用計算機的管理來代替手工管理的電子化系統。手工管理是比較靈活的,而用計算機管理則比較嚴謹、嚴肅和規范、可以提供正確的決策以及量化的管理、可以保證信息數據的可信可靠與完善。然而軟件是一種知識高度的密集以及復雜的邏輯產品,本身是無形的,因此存在一些錯誤是難免的。軟件產品質量的問題一直是開發用戶以及開發人員所困擾的問題。軟件質量是軟件產品具有滿足明確的或隱含需求能力的特征和特性總和。能發現軟件中存在的錯誤的方法有很多,其中一種就是軟件測試。也就是說軟件測試可以作為檢驗軟件產品是否符合要求的一種手段。軟件測試的目的在于發現錯誤。軟件測試應當把盡早和不斷地測試作為開發者的準則,程序員應該避免測試自己的程序,測試工作應該由獨立的專業的軟件測試人員或機構來完成。在設計測試用例時,應當包括合理的輸入條件和不合理的輸入條件,充分注意測試中的群集現象。軟件開發人員通過使用一些設計分析的方法,并在各個階段結束之前,嚴格對設計分析的結果進行技術的評審,以便滿足用戶的需求。人們的能力是有限的,審查時很難發現所有的缺陷和錯誤,而且還會在編碼階段產生很多錯誤,在正常投入運行后,此類缺陷與錯誤最終會暴露出來。軟件測試需要在軟件投入運行之前,對軟件進行需求分析和概要設計以及詳細設計與編碼的復審,作為保證軟件質量的關鍵的程序。測試人員需要做的工作是要站在用戶方角度來把握軟件開發整個過程與用戶的溝通與交流,理順業務的關系以及對業務需求的研究與理解,還要對其完整性與可用性和可維護性以及可靠性與正確性進行必要的測試。

圖1 功能測試流程
1.1 功能測試流程
軟件功能測試也稱為軟件行為測試,根據產品特征、操作描述和用戶方案,測試一個產品的特性和可操作行為以確定它們滿足設計需求。功能測試的目的就是對產品是否達到合同技術協議書規定的功能進行測試。功能測試包括邏輯功能測試、界面測試、易用性測試、安裝測試和兼容性測試。軟件功能測試流程如圖1所示。
1.2 功能測試測試用例設計
軟件測試是一個為了發現所存在的錯誤而對程序進行執行的過程,主要是依據開發的各個階段規格說明以及程序內部設計的一些測試用例,并運用這些測試用例來執行程序,最終發現程序錯誤的過程。軟件測試是通過一些系統的測試方法來發現軟件中的一些錯誤,并提供相關的診斷信息,以便能很好的修正錯誤,來達到預防錯誤與降低軟件開發費用的目的。測試用例一般分為正常系和異常系,對于正常系的測試,會輸入一些合法的數據,對與異常系會輸入一些不合法的數據,或者是設置不完整的運行環境等。在醫療軟件中有一個模塊是存儲醫生對病人開藥的模塊,如果醫生運行了該模塊就會把醫生開的藥物信息存入數據庫,當然調用其它的模塊會把該信息讀取出來,這一讀,一寫,就會牽涉到許多功能。根據軟件的功能,寫出測試用例,比如給一組正常的數據,看它是否被寫入數據庫,或者是給一個病人的ID號,能夠在畫面上正常的顯示,醫生給他開的藥物信息。特殊用例,比如說給一個病人的ID號,而這個病人在數據庫中沒有信息,畫面或者是模塊應該做怎樣的處理。所以說用例是給出的各種可能發生的情況的業務數據。
測試用例的好壞會對軟件的測試質量產生直接的影響,它屬于測試工作的指導性的文件。它對測試工作的指導與控制的作用等同于設計的文檔對編碼指導的作用,這些在大系統當中表現尤為突出以及權威。測試用例的關鍵內容是預期產生結果和測試所用的輸入的數據是否吻合,且輸入的數據應該是對測試功能整體的全面的覆蓋。
2.1 軟件性能測試流程
性能測試就是對產品是否達到合同技術協議書規定的性能指標進行驗證。軟件性能測試一般包括三個方面:性能評測、負載測試和強度測試。每一方面的測試都有其不同測試目標、測試技術、完成標準。本文主要通過負載測試,來對各種工作負載下系統的性能進行確定。負載測試通過使測試對象承擔不同的工作量,以評測和評估測試對象在不同工作量條件下的性能行為,以及持續正常運行的能力。其測試目標就是驗證所指定的事務在不同的工作量條件下的性能行為時間。測試技術為使用為功能或業務周期測試制定的測試。通過修改數據文件來增加事務數量,或通過修改測試來增加每項事務發生的次數。在進行負載測試時一定要注意:(1)負載測試應該在專用的計算機上或再專用的機時內執行,以便實現完全的控制和精確的評測。(2)負載測試所用的數據庫應該是實際大小或相同縮放比例的數據庫。軟件性能測試流程如圖2所示。

圖2 性能測試流程圖
2.2 測試工具
性能測試的工具種類很多,簡單劃分為以下幾種:負載壓力測試工具、資源監控工具、故障定位工具以及調優工具。QA Load、Silk Performer、Load Runner、Web Runner都是主流的負載性能測試工具。本文采用Load Runner作為測試工具,它也可以作為監控工具直接從中間件、數據庫以及主機自身提供的性能數據采集接口獲取性能指標,在負載壓力測試的同時對業務系統所處的測試環境進行監控。
2.3 性能測試指標
性能指標包括應用性能、主機性能、網絡性能、多任務性能、可靠性、可用性、易用性、易學性、負載均衡等性能指標。
本文的合同技術協議書主要考察系統的功能模塊在某測試點下的最大并發數和響應時間指標。測試時、對服務器的CPU使用率、CPU等待隊列、磁盤傳輸率(Mb/s)、內存頁交換率(頁/s)、網絡傳輸率(包/s)等指標進行監控,編制服務器資源占用情況表,格式如表1所示。
2.4 性能調優
性能測試調優是為了改善系統某些方面的性能,而對系統軟件或硬件進行的修改,它與負載測試是性能測試的兩個核心內容,它們是多次交替進行的。當性能測試發現問題后,通過檢查如下幾方面來收集系統的信息以便診斷系統:(1)應用環境(如JDK版本);(2)應用程序代碼;(3)數據庫配置參數;(4)操作系統配置參數;(5)硬件配置。如CPU的個數和主頻、磁盤的容量和速度及是否使用RAID,內存大小等;(6)網絡狀況。是否會有網絡負載過重的情況;(7)問題的影響是什么,比如影響響應速度或吞吐量等;(8)多少用戶遇到了問題,遇到問題的用戶與其他用戶的操作有什么不同(9)系統資源監控的結果是否正常,如CPU和I/O是否正常;(10)問題是否集中在某一類模塊中;(11)是客戶端還是服務器出現問題;(12)實際負載是否超過了系統的負載能力;(13)是否未對系統進行優化。收集完以上必要的信息后,即確定調優的具體目標,如:(1)提高系統吞吐量;(2)縮短響應時間;(3)更好地支持并發;(4)提高硬件配置(如CPU、內存、硬盤、網絡等)。調優完成后,再次進行負載測試,確定調優后的系統性能指標是否達到合同技術協議書的要求。若仍未達到,則需要再次進行調優,并讓開發方也改進程序。

表1 服務器資源占用情況表
對軟件產品進行測試常用的測試工具是白盒測試與黑盒測試。其原理是通過依據選好的測試用例來作為輸入的執行程序,并對程序行為進行檢驗,判斷是否與所期待的結果一致。黑盒測試是根據需求的規格說明書來檢查程序功能能否滿足它的功能,而不用涉及內部的程序邏輯結構以及一些內部特性。黑盒測試也就是通常所說的功能測試法,主要是檢驗程序是否與功能相一致。因此在選用測試用例時,把重點放在軟件功能方面,沒有涉及程序的細節以及內部的結構。所以黑盒測試應該能檢驗程序的功能實現情況。通過黑盒測試能發現接口的錯誤,數據結構以及外部數據庫的訪問錯誤,性能與初始化以及終止和一些漏掉以及不正確的功能等錯誤。在實際工作中,開發人員會和別的模塊進行聯調。這個時候只能夠用黑盒測試方法。首先開發人員把所有的模塊都組裝起來,然后根據業務的需求,對組合好的模塊進行正常系的數據操作,如果發現有錯誤的輸出(業務邏輯的不正確),然后進行分析,找到出錯點,進行分析,并修改,如果業務上沒有問題,這時候就需要對異常系進行測試,一般的測試方法是對數據輸入不合法的數據。比如我們現在開發出一個醫療系統的病人情況輸入模塊,這個模塊要求輸入正確的病人信息,并把它們存儲到數據庫中。作為測試人員,他們不知道系統內部的具體實現是什么,只知道從畫面上等輸入合法的數據后,在數據庫中就有數據。測試人員拿到該測試模塊后,首先進行正常系的測試,輸入合法數據,然后看數據庫,如果有數據,說明該模塊的正常系通過。測試完正常系后,測試人員會輸入一些不合法的數據,或者是輸入的數據不完整,這時候再看數據庫,如果數據庫中沒有數據被登錄(好的情況程序會彈出個消息框,提示客戶輸入的數據不合法),說明異常系被通過。白盒測試也稱結構測試或邏輯驅動測試,它是按照程序內部的結構測試程序,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。經過白盒測試能發現一些邏輯的錯誤與一些假設和條件,以及一些預料之外的路徑,還包括一些語法上未發現的或印刷方面的錯誤。白盒測試主要用在代碼級的調試階段,這也是開發過程中經常使用的。當系統開發人員開發完成某一個模塊過后,需要對該模塊進行測試,可能會遇到一些不可能預料的情況,比方說程序報白框了。如果代碼中用到指針了,有經驗的程序員可能會猜到是使用空指針了,它們會單步跟蹤到調用指針的模塊,也此來確認,是否真的是調用指針出了錯。還有一種情況是,測邏輯表達式,也會用到白盒測試。所以說,白盒測試是代碼級別的測試。
隨著信息技術的快速發展,軟件規模越來越大,因此在軟件開發過程中,人們所面臨的問題錯綜復雜。然而在軟件生命周期的每個階段都不可避免出現差錯。軟件測試在軟件開發中起著重要重要的作用。軟件測試就是為了檢驗合同技術協議書規定的功能和性能指標是否達到標準。本文主要從軟件功能測試和性能測試這兩種方法來進行分析的。