工欲善其事,必先利其器。每每看到這句話會想起孔夫子老人家,此句出自他的論語,是其對子貢的一番話。子貢問為仁,子曰:工欲善其事,必先利其器。居是邦也。事其大夫之賢者,友其士之仁者。孔子告訴子貢,一個做手工或工藝的人,要想把工作完成,做得完善,應該先把工具準備好。那么為仁是用什么工具呢?住在這個,想對這個有所貢獻,必須結交上流社會,乃至政壇上的大員,政府的中堅;和這個社會上各種賢達的人,都要交成朋友。換句話說,是要先了解這個的內情,有了良好的關系,然后才能得到有所貢獻的機會,完成仁的目的。

  由此可以看出孔子他老人家的思想也是放之四海而皆容,流傳千年而皆有用,有點扯遠了。說說軟件測試,如何做好軟件測試呢?如果把軟件測試喻之為事,那軟件測試的器又是什么?作為QA人員,掌握QA工作的基本知識是必要的,更多的知識也是在工作中不斷積累的,此之可謂之器。實際上作為一的QA工程師,還該有豐富的編程經驗和相關的計算機網(wǎng)絡,數(shù)據(jù)庫,軟件工程學,系統(tǒng)、運籌、統(tǒng)計等學科,甚至要學習心理學,美學等以幫助自己了解客戶需求和產品分析。

  軟件測試是一由底向上、循序漸進的過程,對應于代碼、軟件設計、用戶需求和系統(tǒng)工程,軟件測試又可分為四個階段:單元測試(Unit Test)、集成測試(Integration Test)、有效性測試(Validation Test)和系統(tǒng)測試(System Test)。

  1、單元測試對應于系統(tǒng)的代碼,所以一般小公司都會由開發(fā)人員完成,在專業(yè)的軟件公司會有白盒測試,一般和開發(fā)人員同部進行對代碼進行走查及路徑覆蓋等測試。

  2、集成測試,將多個模塊組合成更大的模塊或子系統(tǒng)或產品,然后進行測試,它主要一次性組裝方式,自頂向下方式,自底向上方式或混合方式等,一般選自底向上方式,整體測試要等開發(fā)人員完成全部代碼后才可以進行。

  ● 一次性組裝方式,是將所有模塊組裝在一起測試,它不需要額外的編碼,缺點是查錯困難;

  ● 自頂向下方式:按系統(tǒng)程序結構、沿控制層次從上往下,一步一步進行。主模塊為驅動模塊、下屬模塊用樁模塊代替,它能較早發(fā)現(xiàn)主要控制方面的問題,缺點是需要建立樁模塊,這比較困難,而且算法和I/O在底層、較晚才能發(fā)現(xiàn)問題。

  ● 自底向上方式:從程序模塊結構的底層模塊開始組裝和測試,建立驅動模塊比樁模塊容易,算法和I/O在首先得到測試,并且多個模塊能同時并行測試。但程序未能作為一個整體運行,主要的控制后才能測試。

  3、有效性測試 (Validation Test )

  有效性測試,也稱確認測試或驗收測試,目的是向未來的用戶表明系統(tǒng)能夠像預定要求那樣工作。經集成測試后,已經按照設計把所有的模塊組裝成一個完整的軟件系統(tǒng),接口錯誤也已經基本排除了,接著應該進一步驗證軟件的有效性,即軟件的功能和性能如同用戶所合理期待的那樣。

  有效性測試運用黑盒測試,以驗證是否滿足所有需求(功能、性能、可移植性、兼容性、可維護性等)、確定輸出結果(數(shù)據(jù)、界面等)是否精確、完整或合理。如數(shù)據(jù)證實可包括格式檢驗、完整性檢驗、合理性檢驗和范圍檢驗。執(zhí)行它以確保新的或經過修改的程序是無差錯的并可以執(zhí)行其預定的功能。

  ● 軟件配置復查:各成分齊全,具有維護階段所必需的細節(jié)

  ● 檢查數(shù)據(jù)結構、源程序及目標代碼、技術文檔,用戶文檔

  ● α測試:開發(fā)者通過用戶來觀察所開發(fā)的軟件,在受控制的環(huán)境下進行(用戶在開發(fā)環(huán)境下)

  ● β測試:由公司的支持產品預發(fā)行的外部客戶實行,開發(fā)者無法控制(實際使用者在實際使用環(huán)境下)

  ● 由用戶進行的驗收測試,讓用戶驗證是否滿足需求,由用戶參加設計測試用例,使用用戶界面輸入測試數(shù)據(jù),并分析測試的輸出結果。一般使用實際數(shù)據(jù)進行測試。

  4、系統(tǒng)測試 (System Test)

  系統(tǒng)測試是將軟件作為整個基于計算機系統(tǒng)的一個元素來進行測試,它應與硬件、外設、支持軟件、數(shù)據(jù)、人員等結合起來的綜合環(huán)境中進行。系統(tǒng)測試主要工作有恢復性、安全性、壓力和性能等測試。

  5、α、β測試

  α/β測試 (Alpha/ Beta Testing) ──當開發(fā)和測試已基本完成,需要在正式發(fā)行之前后尋找毛病而進行的測試。此時還允許有較小的設計修改。通常由終用戶或其他人進行這種測試,而不是由程序員和測試人員來進行。

  下篇本博文將介紹些時下流行的測試方法