軟件和藥品是少有的兩種無法根除自身缺陷且允許公開合法出售的產品。人們明知軟件肯定存在缺陷,藥品肯定存在副作用,但權衡利弊之后仍然購買之,甚至法律對此也網開一面。如軟件廠商對其產品通常會做如下公示:“對本軟件的任何修改恕不一一通知”,當然負責任的軟件廠商會定期/不定期的發放軟件補丁。藥品廠商也會在藥品說明書中描述該藥品可能引起的副作用。這種警示方法不僅為法律和普遍的道德觀所接受,而且正是法律所要求的做法。而在其它行業,如果產品存在明顯的不可確定的缺陷,市場、用戶和法律都將作出適度的和更強烈的反映。所以有人說,如果微軟公司生產汽車而不是軟件,恐怕早已出局了。 軟件的缺陷難以根除,但軟件的質量是可以改進的。加強軟件測試是控制和提高軟件質量的一個行之有效辦法。目前軟件的質量問題幾乎都可以歸咎為測試階段沒有發現該問題。當然,事實上我們難以想象測試階段可以發現所有的質量問題。這實際上是一個悖論,委屈了軟件測試工程師和軟件產商。眾所周知,在別的行業,質量檢驗沒有這樣復雜,如燈泡質量的檢驗。如果檢驗員按照規定的抽樣辦法去檢驗燈泡,并判定該批次產品合格,那么消費者、市場就會認可這一檢驗結果。單個消費者碰巧遇到一個不合格產品,那只是小概率事件或仍處于公認的可接受的范圍。沒有人去責怪檢驗員或檢驗方法。如果商家判為合格的產品超過了公認的可接受范圍,那么只有這兩種可能: (1)商家采用了非標準的測試程序,商家將負法律責任; (2)測試程序本身需要改進,一般情況下,這時肯定不是一個商家的產品有問題而是很多商家的產品會有問題。針對軟件產品,目前還沒有一種公認的標準測試程序。針對同一類型的產品,不同的人可能會采用大相徑庭的測試方法,即使采用同樣的測試方法,不同的人還可能得出不同的測試結論,同一人前后兩次測試結果也可能不一致。 軟件市場呼喚一種公認的標準測試程序和方法用于測試軟件質量。一旦有了這樣的程序,人們的注意力將集中到如何改進這個程序而不會怪罪具體的測試工程師或軟件廠商。如果沒有這個程序,一旦軟件出現故障,我們就理直氣壯的認為測試不當,而軟件廠商將首當其沖,測試程序的責任反而微乎其微了。 本文將討論當前普遍采用的不恰當的測試方法所帶來的危害,尤其是經濟學意義上的危害。 一、不當測試的表現和后果 軟件測試存在缺陷是指軟件開發者和用戶在測試時花費的成本比更有效的測試方法更高。由此看來,幾乎所有的測試都存在缺陷。在本文中,軟件測試存在缺陷又稱之為不當測試。 1.1 不當測試的表現 測試的不當性體現在如下四個方面: (1) 集成和互操作性測試 各種應用需集成在一塊,以免產生信息孤島。應用的集成是一個復雜和不確定的過程。集成工作有可能占到系統實現的1/3的成本(Booker,1999)。企業應用集成(EAI)的費用一般占到企業信息技術預算的30%,這個比例將上升到56%(Booker,1999)。據估計,1998年全球信息技術費用約為2700億美圓,則EAI的費用按30%估算約為810億美圓。 在集成測試階段,軟件開發者嚴重依賴互操作性測試?;ゲ僮餍詼y試同樣非常困難。舉例來說,A應用和B應用可以互操作,B應用和C應用也能互操作,但并不能保證A應用和C應用也能互操作(NIST,1997),即互操作性不能相互傳遞,也不是完全等價的關系。 (2) 測試代碼的自動生成 開發合適的測試代碼比開發受測產品需要花費更多的時間和精力。該研究領域已成為IT前沿的焦點。我們相信,格式化語言將在測試代碼的自動生成中發揮巨大的作用。 (3) 缺乏一種精確的辦法以判定產品軟件產品的質量等級:合格、不合格、優良、優秀。 軟件行業里一個棘手的問題是決定測試何時可以結束、決定測試是否已經足夠了。這需要對軟件質量的確定性作出更精確的定義。由于對“足夠”的定義存在分歧,這個問題越來越嚴重了。一些數學方法有望在這一領域得到更廣泛的應用。 商業軟件開發者一般使用下述方法來判定軟件元素是否足夠完善: ◆ 足夠百分比的測試用例成功通過測試; (4) 缺乏可行的性能和質量度量標準 開發性能測試程序同樣耗資巨大。硬件廠商測試時通常會選擇流行的軟件環境或大型軟件系統。對于軟件廠商來說,反之亦然。這樣,小而新或不夠流行的軟件被軟件廠商或硬件廠商選擇做性能測試的機會就較少。 1.2 不當測試的后果 大家知道,如果測試的方法、工具不科學、不合理,那么測試的結果就不可信,從而會引起嚴重的后果,如把合格的產品判為不合格,或者把不合格的產品判定為合格。軟件測試也一樣。不當測試的后果包括四個方面: ◆ 由于質量差導致軟件某項或全部功能/性能失??; 1.2.1 軟件失敗 美國商業部國家標準技術研究所(NIST)的研究表明,近幾年來,美國航空業飽受軟件缺陷的影響,損失達數十億美圓(見表1)。最著名的事件是美國火星探測器失蹤歸因于度量衡的不統一。軟件缺陷還使軟件制造商蒙受信譽和經濟損失。最近,歸咎于軟件測試不充分的法律訴訟也在增加。 1.2.2 增加軟件開發成本 傳統上,識別和糾正軟件缺陷會花費開發過程一半以上的成本,測試會占到開發人力成本的30%到90%(Beizer, 1990)。越早發現軟件缺陷,越能更多的降低成本。表2顯示軟件缺陷在不同階段發現時修復該缺陷所需的成本。 1.2.3 市場推廣滯后 軟件產品投放市場滯后的直接影響是喪失了機會。眾所周知,軟件產品的利潤率通常遵守暴利----高額利潤----一般利潤----微利----虧損這樣的曲線變化。投放時間晚,不僅喪失了賺“大錢”的機會,而且對原有的類似的產品線也會構成威脅。這種損失難以估量。 1.2.4 交易成本增加 由于缺乏標準的測試程序,用戶無從比較和評價軟件產品質量的好壞,從而導致市場交易成本增加。在這種情況下,軟件生產廠商經常警告最終用戶應慎重使用各廠商發布的產品性能數據。 二、軟件缺陷的經濟學影響實證分析 2.1 案例1——汽車和航空業 本案例研究針對美國汽車和航空業的CAD/CAM/CAE(計算機輔助工程)和PDM(產品數據管理)軟件。調查和研究工作是由美國商業部國家標準技術研究所(NIST)委托 RTI(Research Triangle Institute)完成的。調研過程中, RTI和10個軟件開發商、179位最終用戶進行了面談。調查結果如表3所示。 2.2 案例2——金融服務業 本案例研究針對美國金融服務業的EDI(電子數據交換)和clearinghouse軟件。調查和研究工作同樣是由美國商業部國家標準技術研究所(NIST)委托 RTL完成的。調研過程中, RTL和4個軟件開發商、98位最終用戶進行了面談。調查結果如表4所示。 2.3 軟件測試缺陷對國民經濟的影響 從上述2個案例可以計算出制造業和服務業每個雇員所承擔的軟件測試缺陷的成本責任,從而計算出軟件測試缺陷對美國經濟的成本影響(如表5所示)。 其中軟件開發商約承受40%的成本,最終用戶承受約60%的成本??偝杀炯s占美國GDP的0.6%。而采用合適的測試方法,可以節約成本占GDP的0.2%。 |
三、軟件缺陷的影響的經濟學模型 如前所述,測試的不當性是相對測試的可改進性而言的。所以,一般理解不當測試的成本等同于改進后測試的獲利。 不當測試的經濟學影響可以表征為不當測試的獲利和改進后測試的獲利差,即:
其中: EW表示不當測試的經濟學影響; 3.1 軟件開發商獲利分析 3.1.1 軟件開發商成本獲利計算方法 軟件開發商的獲利是其收入和成本之差。 軟件開發商的成本包括研發(R&D)成本和生產成本。研發成本是產品開發過程(包括測試活動)中一次性消耗的固定成本。生產成本是產品生產、分發和售后服務過程中發生的成本。 假定在研發過程中需消耗n種資源(X11、…X1n),每種資源的單價分別為W11、….W1n,則研發成本為: 3.1.2 影響軟件開發商獲利的因素 研發成本(尤其是測試過程)會嚴重影響軟件質量,如下式所示: 其中,Q表示軟件質量。f’>0,f”<0 軟件質量對于軟件的價格和銷售量有非常大的影響,從而直接影響軟件生產商的收入。 研究表明,影響軟件質量的邊際成本呈指數增長,而產品發布后由于軟件質量好減少售后服務的邊際收入則增長平緩。換言之,要提高產品質量,將越來越需要付出更大的努力。而不管質量如何,售后服務的工作量未見顯著變化。這是因為,售后服務的工作量的多少主要取決于用戶的需求,用戶能忍耐的程度。另一方面,軟件售后服務不象硬件維護,需要到現場的次數少、不需要更換部件、軟件故障具有很多共性。 作為軟件開發商,總是在上述因素(收入、邊際成本、邊際收入等)中尋找一個平衡點,以達到利潤最大化的目的。 3.2 最終用戶獲利分析 最終用戶的收入同樣等于其產品的單價乘以產品的數量,即TR=py。 最終用戶的成本包括四個部分: 依前述模型,最終用戶的獲利可以表達為: 3.3 軟件質量對市場價格的影響 在市場經濟下,軟件開發商將軟件產品價格確定在MR=MC這一點,即邊際收入等于邊際成本,如圖1所示。軟件質量提高時,有望增加銷售量,這樣用于售后服務的邊際成本會降低,即MC曲線會下移。由MR=MC確定的的價格會上漲,凈收入也會提高。 當然,最終用戶對軟件質量存在一個可忍受和可接受的范圍。如果軟件質量始終處于最終用戶不能接受的范圍,則上述分析結果不能成立。 3.4 測試工具對成本的影響 測試工具對成本的影響體現在如下幾個方面: ?。?) 改進的測試工具會導致“質量鴻溝”變窄。所謂質量鴻溝是指最終用戶能接受的軟件質量水平的波動范圍。 ?。?) 改進的測試工具有助于提高軟件質量,從而減少售后服務(發現并糾正軟件故障)的成本,并不斷推動軟件質量的持續提高。 ?。?) 測試工具對研發成本的影響取決于最終用戶對軟件質量的評估結果??偟膩碚f,若不考慮市場的影響,改進的測試工具需要消耗的測試資源和其他成本會減少。 ?。?) 改進的測試工具有可能最終促進產生公認的軟件質量評估標準,最終用戶據此評判軟件產品的質量,而不是象現在這樣,對于軟件質量“王婆賣瓜,自賣自夸”。統一的標準將促進軟件生產商增加投資,不斷提高軟件質量。 3.5 不當測試的時間成本 如前所述,不當測試延遲了軟件產品推向市場的時間,因而需支付時間代價。時間代價主要體現在: ?。?) 后入市場者需要支付更多的“學習”費用。尤其是先入市場者建立了事實標準、掌握了核心技術和知識產權后,后入市場者的“學費”非常高。 ?。?) 隨著軟件產品被越來越多的用戶接受,產品的價值得以提升,先入市場者具有很多天然的優勢。 ?。?) 一般說來,一旦最終用戶熟悉老產品、掌握了老產品后,他不見得很容易的改變去使用新的產品,而更愿意流在“賊船”上。 最近的研究發現,先入市場者能保持十年的優勢。 四、結論 軟件缺陷對軟件開發商、最終用戶有很大影響,并可能給國民經濟帶來巨大損失。通過改進軟件的測試方法,有望弱化軟件缺陷的負面影響。 |