軟件測試的基礎知識概要介紹

一、概述
二、軟件測試的目的
三、軟件測試的基本方法
四、軟件測試的複雜性與經濟性
五、軟件測試的心理學問題
六、好的測試工程師應具備的素質
七、參考文獻

一、概述

信息技術的飛速發展,使軟件產品應用到社會的各個領域,軟件產品的質量自然成爲人們共同關注的焦點。不論軟件的生產者還是軟件的使用者,均生存在競爭的環境中,軟件開發商爲了佔有市場,必須把產品質量作爲企業的重要目標之一,以免在激烈的競爭中被淘汰出局。用戶爲了保證自己業務的順利完成,當然希望選用優質的軟件。質量不佳的軟件產品不僅會使開發商的維護費用和用戶的使用成本大幅增加,還可能產生其他的責任風險,造成公司信譽下降,繼而衝擊股票市場。在一些關鍵應用 (如民航訂票系統、銀行結算系統、證券交易系統、自動飛行控制軟件、軍事防禦和核電站安全控制系統等) 中使用質量有問題的軟件,還可能造成災難性的後果。

軟件危機曾經是軟件界甚至整個計算機界最熱門的話題。爲了解決這場危機,軟件從業人員、專家和學者做出了大量的努力。現在人們已經逐步認識到所謂的軟件危機實際上僅是一種狀況,那就是軟件中有錯誤,正是這些錯誤導致了軟件開發在成本、進度和質量上的失控。有錯是軟件的屬性,而且是無法改變的,因爲軟件是由人來完成的,所有由人做的工作都不會是完美無缺的。問題在於我們如何去避免錯誤的產生和消除已經產生的錯誤,使程序中的錯誤密度達到儘可能低的程度。

給軟件帶來錯誤的原因很多,具體地說,主要有如下幾點:
①、交流不夠、交流上有誤解或者根本不進行交流
在應用應該做什麼或不應該做什麼的細節(應用的需求)不清晰的情況下進行開發。

②、軟件複雜性
圖形用戶界面(gui),客戶/服務器結構,分佈式應用,數據通信,超大型關係型數據庫以及龐大的系統規模,使得軟件及系統的複雜性呈指數增長,沒有現代軟件開發經驗的人很難理解它。

③、程序設計錯誤
向所有的人一樣,程序員也會出錯。

④、需求變化
需求變化的影響是多方面的,客戶可能不瞭解需求變化帶來的影響,也可能知道但又不得不那麼做。需求變化的後果可能是造成系統的重新設計,設計人員的日程的重新安排,已經完成的工作可能要重做或者完全拋棄,對其他項目產生影響,硬件需求可能要因此改變,等等。如果有許多小的改變或者一次大的變化,項目各部分之間已知或未知的依賴性可能會相互影響而導致更多問題的出現,需求改變帶來的複雜性可能導致錯誤,還可能影響工程參與者的積極性。

⑤、時間壓力
軟件項目的日程表很難做到準確,很多時候需要預計和猜測。當最終期限迫近和關鍵時刻到來之際,錯誤也就跟着來了。

⑥、自負人更喜歡說:'沒問題','這事情很容易','幾個小時我就能拿出來'
太多不切實際的‘沒問題’,結果只能是引入錯誤。

⑦、代碼文檔貧乏
貧乏或者差勁的文檔使得代碼維護和修改變的異常艱辛,其結果是帶來許多錯誤。事實上,在許多機構並不鼓勵其程序員爲代碼編寫文檔,也不鼓勵程序員將代碼寫得清晰和容易理解,相反他們認爲少寫文檔可以更快的進行編碼,無法理解的代碼更易於工作的保密(“寫得艱難必定讀的痛苦”)。

⑧、軟件開發工具
可視化工具,類庫,編譯器,腳本工具,等等,它們常常會將自身的錯誤帶到應用軟件中。就象我們所知道的,沒有良好的工程化作爲基礎,使用面嚮對象的技術只會使項目變得更復雜。

爲了更好地解決這些問題,軟件界做出了各種各樣的努力。
 人們曾經認爲更好的程序語言可以使我們擺脫這些困擾,這推動了程序設計語言的發展,更多的語言開始流行,爲了使程序更易於理解開發了結構化程序設計語言,如pl/1,pascal等;爲了解決實時多任務需求開發了結構化多任務程序設計語言,如modula,ada等;爲了提高重用性開發了面向對象的程序設計語言,如simlasa等;爲了避免產生不正確的需求理解,開發形式化描述語言,如hal/s等,這使得建立基於自然語言的描述成爲可能,人們以形式化語言來描述需求;爲了支持大型數據庫應用,開發了可視化工具,如visual studio、power builder等。程序語言對提高軟件生產效率起到了一定的積極作用,但它對整個軟件質量尤其是可靠性的影響,與其他因素相比作用較小。

可能是因爲程序語言基於嚴格的語法和語義規則,人們企圖用形式化證明方法來證明程序的正確性。將程序當作數學對象來看待,從數學意義上證明程序是正確的是可能的。數學家對形式化證明方法最有興趣,在論文上談起來非常吸引人,但實際價值卻非常有限,因爲形式化證明方法只有在代碼寫出來之後才能使用,這顯然太遲了,而且對於大的程序證明起來非常困難。

受到其他行業項目工程化的啓發,軟件工程學出現了,軟件開發被視爲一項工程,以工程化的方法來進行規劃和管理軟件的開發。

針對需求不確定的應用,可以使用漸進和迭代類的開發模型。還可以採用快速應用程序開發(rad)和協同應用程序開發(jad)技術,由軟件開發者和用戶代表共同參與開發軟件規範。rad和jad的基本思路是開發者和用戶共同設計系統中的屏幕,開發者迅速地把實現這些屏幕的最基本功能編寫好,然後把它們交給用戶看,然後用戶和開發者回顧這些屏幕以確認它們達到了用戶的要求,這個週期一直持續到系統的基本部分定義完畢。一旦設計被用戶接受,開發者將完成完全實現屏幕需要的代碼。rad和傳統軟件開發項目之間的一個基本區別是:應用程序rad系統是按階段發佈的。傳統項目一般一次發佈,也叫“big bang”。rad方法使用高效開發工具,開發者能夠非常迅速地設計出系統的基本屏幕,允許用戶在開發週期中很早就能見識到系統將來看起來怎麼樣,避免了在傳統開發項目中長篇大論並且枯燥難懂的說明。

ibm的dr.harlan mills提出了淨室過程。淨室過程組合了形式化程序驗證和統計過程控制(spc)。在這種方法中,首先用正確性數學證明預防缺陷發生,然後用mtbf度量軟件質量。淨室過程是一種相當新的軟件開發方法,它要求軟件開發在管理方式和技術方法上作重大改變,特別是要求spc應用到軟件的知識,這影響了其被廣泛的接受。

硬件成本持續降低,可支持case工具運行的新的強大的工作站和網絡已經成爲軟件工程使用的工作平臺,case工具可完成一些特定的軟件開發過程。這些工具提供給軟件設計者以圖形方式描述軟件設計的能力,這樣就易於維護、易於交叉檢查、易於理解。許多人(尤其是case工具供貨商)相信case工具扮演瞭解決軟件危機和拯救軟件工業的角色,但事實上我們看到的情形卻是許多公司花了大量的金錢買回的case工具但很少使用,原因在於這些工具執行的過程與機構的軟件設計過程不相適用。

在可以藉助許多新的技術和工具進行軟件開發的今天,軟件開發過程的成熟性問題開始引起人們的重視。這種產品一致性問題的主要癥結在於管理,因此人們將目標轉向了管理的改善,一些以改進軟件開發過程爲目標的活動已經展示出積極的結果。

以下是一些比較典型的文本。
  sei sw-cmm
  iso spice(software process improvement and capability determination)
  bootstrap
  iso-9000-3
  tickit
  trillium

事實上,對於軟件來講,還沒有象銀彈那樣的東西。不論採用什麼技術和什麼方法,軟件中仍然會有錯。採用新的語言、先進的開發方式、完善的開發過程,可以減少錯誤的引入,但是不可能完全杜絕軟件中的錯誤,這些引入的錯誤需要測試來找出,軟件中的錯誤密度也需要測試來進行估計。

測試是所有工程學科的基本組成單元,是軟件開發的重要部分。自有程序設計的那天起測試就一直伴隨着。統計表明,在典型的軟件開發項目中,軟件測試工作量往往佔軟件開發總工作量的40%以上。而在軟件開發的總成本中,用在測試上的開銷要佔30%到50%。如果把維護階段也考慮在內,討論整個軟件生存期時,測試的成本比例也許會有所降低,但實際上維護工作相當於二次開發,乃至多次開發,其中必定還包含有許多測試工作。因此,測試對於軟件生產來說是必需的,問題是我們應該思考“採用什麼方法、如何安排測試?”

二、軟件測試的目的

軟件測試的目的決定了如何去組織測試。如果測試的目的是爲了儘可能多地找出錯誤,那麼測試就應該直接針對軟件比較複雜的部分或是以前出錯比較多的位置。如果測試目的是爲了給最終用戶提供具有一定可信度的質量評價,那麼測試就應該直接針對在實際應用中會經常用到的商業假設。

不同的機構會有不同的測試目的;相同的機構也可能有不同測試目的,可能是測試不同區域或是對同一區域的不同層次的測試。

在談到軟件測試時,許多人都引用grenford j. myers在《the art of software testing》一書中的觀點:
①、軟件測試是爲了發現錯誤而執行程序的過程;
②、測試是爲了證明程序有錯,而不是證明程序無錯誤。
③、一個好的測試用例是在於它能發現至今未發現的錯誤;
④、一個成功的測試是發現了至今未發現的錯誤的測試。

這種觀點可以提醒人們測試要以查找錯誤爲中心,而不是爲了演示軟件的正確功能。但是僅憑字面意思理解這一觀點可能會產生誤導,認爲發現錯誤是軟件測試的唯一目,查找不出錯誤的測試就是沒有價值的,事實並非如此。

首先,測試並不僅僅是爲了要找出錯誤。通過分析錯誤產生的原因和錯誤的分佈特徵,可以幫助項目管理者發現當前所採用的軟件過程的缺陷,以便改進。同時,這種分析也能幫助我們設計出有針對性地檢測方法,改善測試的有效性。

其次,沒有發現錯誤的測試也是有價值的,完整的測試是評定測試質量的一種方法。詳細而嚴謹的可靠性增長模型可以證明這一點。例如 bev littlewood發現一個經過測試而正常運行了n小時的系統有繼續正常運行n小時的概率。

三、軟件測試的基本方法
  軟件測試的方法和技術是多種多樣的。
  對於軟件測試技術,可以從不同的角度加以分類:
  從是否需要執行被測軟件的角度,可分爲靜態測試和動態測試。
  從測試是否針對系統的內部結構和具體實現算法的角度來看,可分爲白盒測試和黑盒測試;

  1、黑盒測試

黑盒測試也稱功能測試或數據驅動測試,它是在已知產品所應具有的功能,通過測試來檢測每個功能是否都能正常使用,在測試時,把程序看作一個不能打開的黑盆子,在完全不考慮程序內部結構和內部特性的情況下,測試者在程序接口進行測試,它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數鋸而產生正確的輸出信息,並且保持外部信息(如數據庫或文件)的完整性。黑盒測試方法主要有等價類劃分、邊值分析、因?果圖、錯誤推測等,主要用於軟件確認測試。

  “黑盒”法着眼於程序外部結構、不考慮內部邏輯結構、針對軟件界面和軟件功能進行測試。“黑盒”法是窮舉輸入測試,只有把所有可能的輸入都作爲測試情況使用,才能以這種方法查出程序中所有的錯誤。實際上測試情況有無窮多個,人們不僅要測試所有合法的輸入,而且還要對那些不合法但是可能的輸入進行測試。

  2、白盒測試

  白盒測試也稱結構測試或邏輯驅動測試,它是知道產品內部工作過程,可通過測試來檢測產品內部動作是否按照規格說明書的規定正常進行,按照程序內部的結構測試程序,檢驗程序中的每條通路是否都有能按預定要求正確工作,而不顧它的功能,白盒測試的主要方法有邏輯驅動、基路測試等,主要用於軟件驗證。

  “白盒”法全面瞭解程序內部邏輯結構、對所有邏輯路徑進行測試。“白盒”法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程序的內部結構,從檢查程序的邏輯着手,得出測試數據。貫穿程序的獨立路徑數是天文數字。但即使每條路徑都測試了仍然可能有錯誤。第一,窮舉路徑測試決不能查出程序違反了設計規範,即程序本身是個錯誤的程序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯。第

  三,窮舉路徑測試可能發現不了一些與數據相關的錯誤。

  3.alac(act-like-a-customer)測試

  alac測試是一種基於客戶使用產品的知識開發出來的測試方法。alac測試是基於複雜的軟件產品有許多錯誤的原則。最大的受益者是用戶,缺陷查找和改正將針對哪些客戶最容易遇到的錯誤。

  四、軟件測試的複雜性與經濟性

  人們常常以爲,開發一個程序是困難的,測試一個程序則比較容易。這其實是誤解。設計測試用例是一項細緻並需要高度技巧的工作,稍有不慎就會顧此失彼,發生不應有的疏漏。

  不論是黑盒測試方法還是白盒測試方法,由於測試情況數量巨大,都不可能進行徹底的測試。所謂徹底測試,就是讓被測程序在一切可能的輸入情況下全部執行一遍。通常也稱這種測試爲“窮舉測試”。 “黑盒”法是窮舉輸入測試,只有把所有可能的輸入都作爲測試情況使用,才能以這種方法查出程序中所有的錯誤。實際上測試情況有無窮多個,人們不僅要測試所有合法的輸入,而且還要對那些不合法但是可能的輸入進行測試。 “白盒”法是窮舉路徑測試,貫穿程序的獨立路徑數是天文數字,但即使每條路徑都測試了仍然可能有錯誤。第一,窮舉路徑測試決不能查出程序違反了設計規範,即程序本身是個錯誤的程序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯。第三,窮舉路徑測試可能發現不了一些與數據相關的錯誤。e.w.dijkstra的一句名言對測試的不徹底性作了很好的註解:“程序測試只能證明錯誤的存在,但不能證明錯誤不存在”。

  在實際測試中,窮舉測試工作量太大,實踐上行不通,這就註定了一切實際測試都是不徹底的。當然就不能夠保證被測試程序中不存在遺留的錯誤。軟件工程的總目標是充分利用有限的人力和物力資源,高效率、高質量地完成測試。爲了降低測試成本,選擇測試用例時應注意遵守“經濟性”的原則。第一,要根據程序的重要性和一旦發生故障將造成的損失來確定它的測試等級;第二,要認真研究測試策略,以便能使用儘可能少的測試用例,發現儘可能多的程序錯誤。掌握好測試量是至關重要的,一位有經驗的軟件開發管理人員在談到軟件測試時曾這樣說過:“不充分的測試是愚蠢的,而過度的測試是一種罪孽”。測試不足意味着讓用戶承擔隱藏錯誤帶來的危險,過度測試則會浪費許多寶貴的資源。

  測試是軟件生存期中費用消耗最大的環節。測試費用除了測試的直接消耗外,還包括其它的相關費用。能夠決定需要做多少次測試的主要影響因素如下:

  ①、系統的目的

  系統的目的的差別在很大程度上影響所需要進行的測試的數量。那些可能產生嚴重後果的系統必須要進行更多的測試。一臺在boeing 757上的系統應該比一個用於公共圖書館中檢索資料的系統需要更多的測試。一個用來控制密封燃氣管道的系統應該比一個與有毒爆炸物品無關的系統有更高的可信度。一個安全關鍵軟件的開發組比一個遊戲軟件開發組要有苛刻得多的查找錯誤方面的要求。

  ②、潛在的用戶數量

  一個系統的潛在用戶數量也在很大程度上影響了測試必要性的程度。這主要是由於用戶團體在經濟方面的影響。一個在全世界範圍內有幾千個用戶的系統肯定比一個只在辦公室中運行的有兩三個用戶的系統需要更多的測試。如果不能使用的話,前一個系統的經濟影響肯定比後一個系統大。除此而外,在分配處理錯誤的時候,所花的代價的差別也很大。如果在內部系統中發現了一個嚴重的錯誤,在處理錯誤的時候的費用就相對少一些,如果要處理一個遍佈全世界的錯誤就需要花費相當大的財力和精力。

  ③、信息的價值

  在考慮測試的必要性時,還需要將系統中所包含的信息的價值考慮在內,一個支持許多家大銀行或衆多證券交易所的客戶機/服務器系統中含有經濟價值非常高的內容。很顯然這一系統需要比一個支持鞋店的系統要進行更多的測試。這兩個系統的用戶都希望得到高質量、無錯誤的系統,但是前一種系統的影響比後一種要大得多。因此我們應該從經濟方面考慮,投入與經濟價值相對應的時間和金錢去進行測試。

  ④、開發機構

  一個沒有標準和缺少經驗的開發機構很可能開發出充滿錯誤的系統。在一個建立了標準和有很多經驗的開發機構中開發出來的系統中的錯誤不會很多,因此,對於不同的開發機構來說,所需要的測試的必要性也就截然的不同。

  然而,那些需要進行大幅度改善的機構反而不大可能認識到自身的弱點。那些需要更加嚴格的測試過程的機構往往是最不可能進行這一活動的,在許多情況下,機構的管理部門並不能真正地理解開發一個高質量的系統的好處。

  ⑤、測試的時機

  測試量會隨時間的推移發生改變。在一個竟爭很激烈的市場裏,爭取時間可能是制勝的關鍵,開始可能不會在測試上花多少時間,但幾年後如果市場分配格局已經建立起來了,那麼產品的質量就變得更重要了,測試量就要加大。測試量應該針對合適的目標進行調整。

  五、軟件測試的心理學問題

  1、程序測試的過程具有破壞性

  人類的活動具有高度的目的性,建立適當的目標具有重要的心理作用。如果我們的目的是要證明程序中沒有錯誤,那我們就會不自覺地朝這個方向去做;也就是說,我們會傾向於挑選那些使程序出錯的可能性較小的測試數據。另一方面,如果我們的目標是要證明程序中有錯,那就會選擇一些易於發現程序所含錯誤的測試數據。而後一種態度會比前者給程序增添更多的價值。

  測試的定義意味着程序測試的過程是具有破壞性的,其程度甚至達到了不可容忍的地步。社會上大多數人的人生觀是建設性的,而不是破壞性的。人們傾向於創造一個物品,而不是輕易毀壞?個物品。因此,程序壞?個物品。因此,程序測試的破壞性的定義使人們對程序測試工作望而生畏。程序測試定義還隱含着如何設計測試情況(測過數據),以及應該由誰和不應由誰來測試一個給定程序等等觀點。

  心理學研究還告訴我們,當人在幹一件已經知道是不合適的或不可能做到的事時,往往做得不好。例如:如果讓一個人在15分鐘解出一個刊登在星期曰《紐約時報》上的交叉填字字謎,10分鐘後我們會看到這人幾乎沒一點進展,因爲他會感到實際上不可能做到而放棄自已的努力。然而,如果我們要求花4小時解出這題,那也許就會看到他在開頭的10分鐘內有較大的進展了。把程序測試定義爲在程序中找出錯誤的過程,就使測試成了可以做到的任務,從而克服了心理上存在的問題。

  另一個令人煩躁的問題是即使程序完成了預期要求,仍可能含有錯誤。也就是說,如果程序不按要求工作,它顯然有錯,但是如果程序做了不要它做的事,它也有錯。

  2、程序員應避免測試自己的程序

  開發者被指定測試自己的代碼是一件很糟糕的事。開發和測試生來就是不同的活動。開發是創造或者建立什麼東西的行爲,一個模塊或者整個系統。而測試的唯一目的是證明一個模塊或者系統工作不正常。這兩個活動之間有着本質的矛盾。一個人不太可能把兩個截然對立的角色都扮演的很好。基於這個想法,應該限制開發者在測試中的參與。給他們比較合適的任務是進行有可能的最低層的測試--單元測試。不同當一個程序員在完成了設計,編寫程序的建設性工作後,要一夜之間突然改變他的觀點,設法對程序形成一個完全否定的態度,那是非常困難的。許多戶主都知道,揭掉糊牆紙(破壞性過程〉是不容易的,若糊牆紙原先是由他而不是別人貼上的,他幾平會感到難以忍受的沮喪。所以,大部分程序員都由於不能使自己進入必要的精神狀態(不是抱着要揭露出自己程序中錯誤的態度),因而不能有效地測試自己的程序。

  除了這個心理學問題之外,還有一個重要的問題:程序中可能包含由於程序員對問題的敘述或說明的誤解而產生的錯誤。如果是這種情況,當程序員測試自己的程序時,往往還會帶着同樣的誤解致使問題難以發現。

  再者,可以把測試看做是對一篇論文或?本書作校對,或與寫評論相類似的工作。正如許多作者所知,校對或批評自己的著作是非常困難的。也就是說,在自已的工作中找出缺陷往往是人的心理狀態所不容的。

  以上看法並不意味着程序員不可能測試自已的程序。不過相比之下如果由另外?些人來進行程序測試,就會更有效、更成功。注意:這個論斷並不適用於糾錯(改正已知錯誤),由原來程序的作者糾錯肯定效率更高。

  3、程庫設計機構不應測試自己的程序

  在許多意義上來說,一項工程或一程序設計機構是個有生命的有機體,它同樣有心理學問題。再者,在大多數情況下,人們都是以在給定日期內,以一定代價編制程序的能力來衡量程序設計機構和項目管理人員的。這祥做的一個理由是時間和成本指標便於衡量,而程序的可靠性卻很難度量。要程序設計機構在測試自己的程序時持客觀態度是困難的,因爲如果用正確的定義看待測試,就不大可能按預定計劃完成測試也不大可能把耗費的代價限制在要求的範圍以內。

  軟件生產的三個最重要的因素是:質量、進度和費用。

  計算技術的進步,意味着在經濟領域中信息系統更新的速度更快。新的硬件技術的發展,均會使軟件過時,系統交付使用的時間變得日益重要,新產品在其性能和費用上被其他產品取代之前的推銷時間,即市場窗口就已經縮小了。

  由於費用和進度的限制,要開發一種高質量、快速交付和低成本的軟件產品變得越來越困難,也就是說要同時達到三個目標是困難的。因此在軟件產品的開發中就要權衡它們之間的關係,使軟件的特性能滿足用戶的要求,這意味着軟件產品特性的度量和預計是必要的。

  軟件測試由獨立測試機構承擔有許多好處。獨立測試是指軟件測試工作由在經濟上和管理上獨立於開發機構的組織進行。獨立測試可以避免軟件開發者測試自己開發的軟件,由於心理學上的問題,軟件開發者難以客觀、有效地測試自己的軟件,而找出那些因爲對問題的誤解而產生的錯誤就更加困難。獨立測試還可以避免軟件開發機構測試自己的軟件,軟件產品的開發過程受到時間、成本和質量三者的制約,時間和成本指標便於衡量,而質量卻很難度量,因此在軟件開發過程中,當時間、成本和質量三者發生矛盾時,質量最容易被忽視,如果測試組織與開發組織來自相同的機構,測試過程就會面臨來自與開發組織同一來源的管理方面的壓力,使測試過程受到干擾。

  採用獨立測試方式,無論在技術上還是管理上,對提高軟件測試的有效性都具有重要意義。

  ①、客觀性

  對軟件測試和軟件中的錯誤抱着客觀的態度,這種客觀的態度可以解決測試中的心理學問題,既能夠以揭露軟件中錯誤的態度工作,也能不受發現的錯誤的影響。經濟上的獨立性使其工作有更充分的條件按測試要求去完成。
  
  ②、專業性
  
  獨立測試作爲一種專業工作,在長期的工作過程中勢必能夠積累大量實踐經驗,形成自己的專業優勢。同時軟件測試也是技術含量很高的工作,需要有專業隊伍加以研究,並進行工程實踐。專業化分工是提高測試水平,保證測試質量,充分發揮測試效用的必然途徑。
  
   ③、權威性

  由於專業優勢,獨立測試工作形成的測試結果更具信服力,而測試結果常常和對軟件的質量評價聯繫在一起,由專業化的獨立測試機構的評價,更客觀、公正和具有權威性。

  ④、資源有保證

  獨立測試機構的主要任務是進行獨立測試工作,這使得測試工作在經費、人力和計劃方面更有保證,不會因爲開發的壓力減少對測試的投入,降低測試的有效性,可以避免開發單位側重軟件開發而對測試工作產生不利的影響。

  六、好的測試工程師應具備的素質

  人是測試工作中最有價值也是最重要的資源,沒有一個合格的、積極的測試小組,測試就不可能實現。然而,在軟件開發產業中有一種非常普遍習慣,那就是讓那些經驗最少的新手、沒有效率的開發者或不適合幹其他工作的人去做測試工作。這絕對是一種目光短淺的行爲,對一個系統進行有效的測試所需要的技能絕對不比進行軟件開發需要的少,事實上,測試者將獲得極其廣泛的經驗,他們將遇到許多開發者不可能遇到的問題。

  ①、溝通能力。

  一名理想的測試者必須能夠同測試涉及到的所有人進行溝通,具有與技術(開發者)和非技術人員(客戶,管理人員)的交流能力。既要可以和用戶談得來,又能同開發人員說得上話,不幸的是這兩類人沒有共同語言。和用戶談話的重點必須放在系統可以正確地處理什麼和不可以處理什麼上。而和開發者談相同的信息時,就必須將這些活重新組織以另一種方式表達出來,測試小組的成員必須能夠同等地同用戶和開發者溝通。

  ②、移情能力。

  和系統開發有關的所有人員都處在一種既關心又擔心的狀態之中。用戶擔心將來使用一個不符合自己要求的系統,開發者則擔心由於系統要求不正確而使他不得不重新開發整個系統,管理部門則擔心這個系統突然崩潰而使它的聲譽受損。測試者必須和每一類人打交道,因此需要測試小組的成員對他們每個人都具有足夠的理解和同情,具備了這種能力可以將測試人員與相關人員之間的衝突和對抗減少到最低程度。

  ③、技術能力。

  就總體言,開發人員對那些不懂技術的人持一種輕視的態度。一旦測試小組的某個成員作出了一個錯誤的斷定,那麼他們的可信度就會立刻被傳揚了出去。一個測試者必須既明白被測軟件系統的概念又要會使用工程中的那些工具。要做到這一點需要有幾年以上的編程經驗,前期的開發經驗可以幫助對軟件開發過程有較深入的理解,從開發人員的角度正確的評價測試者,簡化自動測試工具編程的學習曲線。

  ④、自信心。

  開發者指責測試者出了錯是常有的事,測試者必須對自己的觀點有足夠的自信心。如果容許別人對自己指東指西,就不能完成什麼更多的事情了。

  ⑤、外交能力。

  當你告訴某人他出了錯時,就必須使用一些外交方法。機智老練和外交手法有助於維護與開發人員的協作關係,測試者在告訴開發者他的軟件有錯誤時,也同樣需要一定的外交手腕。如果採取的方法過於強硬,對測試者來說,在以後和開發部門的合作方面就相當於“贏了戰爭卻輸了戰役”。

  ⑥、幽默感。

  在遇到狡辯的情況下,一個幽默的批評將是很有幫助的。

  ⑦、很強的記憶力。

  一個理想的測試者應該有能力將以前曾經遇到過的類似的錯誤從記憶深處挖掘出來,這一能力在測試過程中的價值是無法衡量的。因爲許多新出現的問題和我們已經發現的問題相差無幾。

  ⑧、耐心。

  一些質量保證工作需要難以置信的耐心。有時你需要花費驚人的時間去分離、識別和分派一個錯誤。這個工作是那些坐不住的人無法完成的。

  ⑨、懷疑精神。

  可以預料,開發者會盡他們最大的努力將所有的錯誤解釋過去。測式者必須聽每個人的說明,但他必須保持懷疑直到他自己看過以後。

  ⑩、自我督促。

  幹測試工作很容易使你變得懶散。只有那些具有自我督促能力的人才能夠使自己每天正常地工作。

  11、洞察力。

  一個好的測試工程師具有“測試是爲了破壞”的觀點,捕獲用戶觀點的能力,強烈的質量追求,對細節的關注能力。應用的高風險區的判斷能力以便將有限的測試針對重點環節。

  七、參考文獻

  (軟件測試的原則)軟件測試從不同的角度出發會派生出兩種不同的測試原則,從用戶的角度出發,就是希望通過軟件測試能充分暴露軟件中存在的問題和缺陷,從而考慮是否可以接受該產品,從開發者的角度出發,就是希望測試能表明軟件產品不存在錯誤,已經正確地實現了用戶的需求,確立人們對軟件質量的信心。中國軟件評測中心的測試原則就是從用戶和開發者的角度出發進行軟件產品測試的,通過我們的測試,可以爲用戶提供放心的產品,並對優秀的產品進行認證。

  爲了達到上述的原則,那麼需要注意以下幾點:

  1.應當把“儘早和不斷的測試”作爲開發者的座右銘

  2.程序員應該避免檢查自己的程序,測試工作應該由獨立的專業的軟件測試機構來完成。

  3.設計測試用例時應該考慮到合法的輸入和不合法的輸入以及各種邊界條件,特殊情況下要製造極端狀態和意外狀態,比如網絡異常中斷、電源斷電等情況。

  4.一定要注意測試中的錯誤集中發生現象,這和程序員的編程水平和習慣有很大的關係。

  5.對測試錯誤結果一定要有一個確認的過程,一般有A測試出來的錯誤,一定要有一個B來確認,嚴重的錯誤可以召開評審會進行討論和分析。

  6.制定嚴格的測試計劃,並把測試時間安排的儘量寬鬆,不要希望在極短的時間內完成一個高水平的測試。
 
  7.迴歸測試的關聯性一定要引起充分的注意,修改一個錯誤而引起更多的錯誤出現的現象並不少見。

  8.妥善保存一切測試過程文檔,意義是不言而喻的,測試的重現性往往要靠測試文檔。
  
  在軟件測試中如何配置軟件環境配備測試環境是測試實施的一個重要階段,測試環境適合與否會嚴重影響測試結果的真實性和正確性。測試環境包括硬件環境和軟件環境,硬件環境指測試必需的服務器、客戶端、網絡連接設備以及打印機/掃描儀等輔助硬件設備所構成的環境 ;軟件環境指被測軟件運行時的操作系統、數據庫以及其他應用軟件構成的環境。在實際測試中,軟件環境又可分爲主測試環境和輔測試環境,主測試環境是測試軟件功能、安全可靠性、性能、易用性等大多數指標的主要環境,一般來說,配置主測試環境可遵循下列原則:

1.符合軟件運行的最低要求。測試環境首先要保證能支撐軟件正常運行。

2.選用比較普遍的操作系統和軟件平臺。例如,一個軟件若聲稱支持“Windows9X/ME/NT Workstation/2000 professional”和“MS OFFICE 97/2000/XP”,一般我們會採用如“Windows 2000professional+MS OFFICE 2000”的流行環境。

3.營造相對簡單、獨立的測試環境。除了操作系統,測試機上只安裝軟件運行和測試必需的軟件,以免不相關的軟件影響測試實施。

4.無毒的環境。利用有效的正版殺毒軟件檢測軟件環境,保證測試環境中沒有病毒。
輔測試環境常常用來滿足不同的測試需求或特殊測試項目:
兼容性測試:在滿足軟件運行要求的範圍內,可選擇一些典型的操作系統和常用應用軟件對其安裝卸載和主要功能進行驗證。
模擬真實環境測試:有些軟件,特別是面向大衆的商品化軟件,在測試時常常需要考察在真實環境中的表現。如測試殺毒軟件的掃描速度時,硬盤上佈置的不同類型文件的比例要儘量接近真實環境,這樣測試出來的數據纔有實際意義。
橫向對比測試:利用輔測試環境“克隆”出完全一致的測試環境,從而保證各個被測軟件平等對比。 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章