心理學研究告訴我們,當人們在干一件已經知道是不合適的或不可能做到的事時,往往他們的表現就相當糟糕。把程序測試定義為在程序中找出錯誤的過程,就使測試成了可以做到的任務,從而克服了心理上存在的問題。雖然這看起來像是個微妙的文字游戲,但對成功地進行軟件測試有很大的影響。
總之,軟件測試更適宜被視為試圖發現程序中錯誤(假設其存在)的破壞性的過程。一個成功的測試,通過誘發程序發生錯誤,可以在這個方向上促進軟件質量的改進。當然最終人們還是要通過軟件測試來建立某種程度的信心:軟件做了其應該做的,而沒有做其不應該做的。
2.程序員應避免測試自己的程序
由開發人員來測試自己的代碼是一件很不妥當的事情。開發和測試生來就是不同的活動。開發是創造或者建立某種事物的行為,如一個功能模塊或整個系統。而測試的重要目的是證實一個模塊或者一個系統工作不正常。這兩個活動之間有著本質的矛盾。一個人不太可能把兩個截然對立的角色都扮演地很好,因此應當限制開發人員在測試中的參與,給他們比較合適的任務是進行最底層的測試—— 單元測試。
當一個程序員完成了設計與編寫程序的建設性工作后,要一夜之間突然改變他的觀點,設法對程序形成一個完全否定的態度,那是非常困難的。所以,大部分程序員都由于不能使自己進入必要的精神狀態(不是抱著要揭露出自己程序中錯誤的態度),就不能有效的測試自己的程序。除了這個心理學問題之外,還有一個重要的問題:程序中可能包含由于程序員對問題的敘述或說明的誤解而產生了錯誤。如果是這種情況,當程序員測試自己的程序時,往往還會帶著同樣的誤解致使問題難以發現。
3.程序設計組織不應測試自己的程序
在宏觀意義上,一個程序設計組織或一個工程項目是個有生命的有機體,它同樣有心理學問題。在大多數情況下,人們都以“在給定日期內,以一定代價完成程序編制任務的能力”來衡量程序設計組織和項目管理人員的。這樣做的理由是時間和成本指標便于衡量,而程序的質量很難度量。要程序設計組織在測試自己的程序時持客觀態度是很困難的,因為如果用正確的定義看待測試,就不大可能按預定計劃完成測試,也不大可能把耗費的代價限制在要求的范圍以內。
軟件生產的三個最重要的因素是:質量、進度和費用。由于費用和進度的限制,要開發一種高質量、快速交付和低成本的軟件產品并不容易。也就是說要同時達到三個目標是困難的。因此在軟件產品的開發中要權衡它們之間的關系,使軟件的特性能滿足用戶的要求,這意味著軟件產品的特性的度量和預計是必要的。
軟件測試由獨立測試機構承擔有很多好處。獨立測試是指軟件測試工作由在經濟上和管理上獨立于開發機構的組織進行。獨立測試可以避免軟件開發者測試自己開發的軟件,由于心理學上的問題,軟件開發者難以客觀、有效的測試自己的軟件,要找出那些因為對問題的誤解而產生的錯誤就更加困難。獨立測試還可以避免軟件開發機構測試自己的軟件,軟件產品的開發過程受到時間、成本和質量三者的制約,在軟件開發的過程中,當時間、成本和質量三者發生矛盾時,質量最容易被忽視,如果測試組織與開發組織來自相同的機構,測試過程就會面臨來自于開發組織同一來源的管理方面的壓力,使測試過程受到干擾。
客觀性——對軟件測試和軟件中的錯誤抱著客觀的態度,這種客觀的態度可以解決測試中的心理學問題,既能以揭露軟件中錯誤的態度工作,也能不受發現的錯誤的影響。經濟上的獨立性使測試有更充分的條件按測試要求去完成。
專業性——獨立測試作為一種專業工作,在長期的工作過程中勢必能夠積累大量實踐經驗,形成自己的專業知識。同時軟件測試也是技術含量很高的工作,需要有專業隊伍加以研究,并進行工程實踐。專業化分工是提高測試水平、保證測試質量、充分發揮測試效應的必然途徑。
權威性——由于專業優勢,獨立測試工作形成的測試結果更具信服力,而測試結果常常和對軟件的質量評價聯系在一起,專業化的獨立測試機構的評價,更客觀、公正和具有權威性。
資源有保證——獨立測試機構的主要任務是進行獨立測試工作,這使得測試工作在經費、人力和計劃方面更有保證,不會因為開發的壓力減少對測試的投入,降低測試的有效性可以避免開發單位側重軟件開發而對測試工作產生不利的影響。
原文轉自:http://www.uml.org.cn/Test/test-bk.asp