軟件測試,是成本還是投資?
很多的軟件公司都認為軟件測試很重要,但基本上國內(nèi)大部分的軟件公司都只是象征性的請一到兩個測試人員負責所有項目的測試。因為影響軟件測試的因素太多了,時間限制、資源短缺、預(yù)算不足等等。于是就開始來減少軟件測試的投入了。那么我們不禁要問一句,軟件測試到底是成本花費呢,還是一種長期的軟件投資呢?
一、 引言
隨著軟件市場的成熟,人們對軟件作用期望值也越來越高,軟件的質(zhì)量、性能、可靠性等方面也正逐漸成為人們關(guān)注的焦點。目前,中國軟件產(chǎn)業(yè)在產(chǎn)品功能和性能測試領(lǐng)域都存在著嚴重不足,中國軟件企業(yè)已開始認識到,軟件測試的廣度和深度決定了中國軟件企業(yè)的前途命運。
軟件測試并非傳統(tǒng)意義上產(chǎn)品交付前單一的“找錯”過程,而是貫穿于軟件過程的始終,是一個科學(xué)的質(zhì)量控制過程。國外成熟軟件企業(yè),1個軟件開發(fā)工程師對應(yīng)1-2個軟件測試工程師,而國內(nèi)軟件企業(yè),平均8個軟件開發(fā)工程師才對應(yīng)1個軟件測試工程師,比例嚴重失衡。
二、 軟件測試行業(yè)現(xiàn)狀
軟件的大工業(yè)生產(chǎn)決定了軟件測試是生產(chǎn)的必不可少的環(huán)節(jié)。對于人員配置,一直以來流行一種五比一的標準說法。 從公司內(nèi)部看任何時候都是遠高于這一比例。從近一個時期看,開發(fā)與測試工作量的比重甚至達到了二比一。同類型成熟產(chǎn)品之間的競爭最容易取勝的方法是提高質(zhì)量。
軟件的大工業(yè)化并不是在消滅個體戶和小作坊,只是減少了他們直接與最終用戶打交道的機會和必要。如今他們生產(chǎn)和包裝軟件的目的在于等待大公司的收購。為此,在最后階段需要進行“最終用戶測試”。
與此同步的是,軟件測試市場已成為軟件產(chǎn)業(yè)中的一個獨特市場。在美國硅谷地區(qū),凡是軟件開發(fā)企業(yè)或是設(shè)有軟件開發(fā)部門的公司,都有專門的軟件測試單位,其中軟件測試人員的數(shù)量相當于軟件開發(fā)工程師的四分之三。在這些公司或部門中,負責軟件測試的質(zhì)量保證經(jīng)理的職位與軟件開發(fā)的主管往往是平行的。據(jù)了解,在軟件產(chǎn)業(yè)發(fā)展較快的印度,軟件測試在軟件企業(yè)中同樣擁有舉足輕重的地位。
與國外相比,國內(nèi)的軟件測試業(yè)狀況又如何?目前,國內(nèi)軟件測試市場表現(xiàn)實在有點令人尷尬。中國市場中的軟件開發(fā)公司比比皆是,但軟件測試公司則如鳳毛麟角,“市場化的第三方測試如同剛剛出生的寧馨兒,目前的市場幾乎可以忽略不計。”
為什么國內(nèi)的軟件測試市場會如此嬴弱,到現(xiàn)在企業(yè)才開始關(guān)注呢?以筆者之見,究其主要原因,首先是因為企業(yè)對軟件測試的重要性理解不夠。很多人認為程序能試運行基本上就已經(jīng)成功,沒有必要成立專門的測試部門或設(shè)立測試崗位。
另一方面,軟件開發(fā)企業(yè)在為軟件開發(fā)支付費用后,就不希望再為軟件的測試支付新的成本,而項目甲方則往往認為開發(fā)合格的軟件是軟件開發(fā)企業(yè)的責任。即使有些項目的開發(fā)方或委托方有意對軟件進行第三方測試,也會考慮到在測試過程中往往需要軟件開發(fā)商提供源代碼,擔心其知識產(chǎn)權(quán)遭到侵犯。這是軟件測試市場無法長大的又一個重要原因。此外,軟件開發(fā)企業(yè)不重視利用外部的測試力量進行測試也是因素之一。
三、 困惑的軟件測試員
很多時候,投資在測試上的人力及財力,將由許多的因素來決定。而其中軟件測試人員是很重要的考慮因素。其實組織在軟件測試方面最大的成本開支就是測試人員上。在軟件工具及測試設(shè)備都比較接近的今天,競爭對手之間在軟件測試方面的競爭,主要就體現(xiàn)在軟件測試人員上。
近期的無憂指數(shù)顯示,軟件測試工程師已經(jīng)成為2007年最緊缺的人才之一,該類職位的需求主要集中在沿海發(fā)達城市,其中北京和上海的需求量分別占去了33%和29%;而從企業(yè)分布來看,民企需求量最大,占了19%,外商獨資歐美類企業(yè)需求排列第二,占了15%。目前,國內(nèi)軟件測試人才緊缺的現(xiàn)狀已經(jīng)凸現(xiàn)出來。
筆者認識一位朋友A,做專業(yè)的測試工程師已經(jīng)有一年多的時間了,目前仍然在做較為底層的測試。有時候也會寫寫測試需要的代碼,但還沒有開始設(shè)計整個項目測試案例。目前A正在為某一著名軟件公司做軟件測試,工作的流程非常嚴謹而明晰,這自然也意味著枯燥的重復(fù)。枯燥并沒有淹沒A的工作激情,發(fā)現(xiàn)一個Bug帶來很大的成就感,特別是想到每天將會有幾百萬人通過使用沒有這個Bug的軟件準確無誤的達到他們的目的。
前途在A心目中是非常明朗的,頗有一些“隨需”擇業(yè)的味道。曾經(jīng)有媒體報道過近來軟件測試工程師在職場需求中的風(fēng)光景況,盡管IT行業(yè)的總體需求仍然疲軟。在北京和上海等地,測試員的需求量占到了招聘總量的近1/3。另一方面,A認為從測試員成長為軟件項目管理者是更有優(yōu)勢的。
例如微軟的開發(fā)方式本來就是“測試驅(qū)動”的,在測試過程中發(fā)現(xiàn)了墻角還有沒涂到油漆的小塊,開發(fā)則根據(jù)這個思想再補上那一塊。測試的經(jīng)歷恰好讓人更能從用戶的角度來考慮問題,更能深入了解程序開發(fā)過程中可能出現(xiàn)的問題,這都是成為一個優(yōu)秀的項目管理者的必要條件。盡管可能一整天都為了一個小控件“循規(guī)蹈矩”地反復(fù)測試并撰寫測試文檔,這樣的重復(fù)被A當作了重要的積累。A喜歡新東方學(xué)校的徐小平新書《騎驢找馬》中的一句話:“重復(fù)做漢堡,就是麥當勞;重復(fù)煮咖啡,就是星巴克;重復(fù)教托福,就是俞敏洪;重復(fù)做好事,就是活雷鋒。”
測試工作,在好多公司說到底還是不夠重視。如果管理層從控制成本考慮,不打算對測試投入太多,例如對用了2年左右的測試工程師不想加更多的薪水留人怎么辦呢?那我們就要問了,什么是軟件成本?不僅僅是生產(chǎn)過程中產(chǎn)生的費用叫成本,未來因為產(chǎn)品缺陷產(chǎn)生的服務(wù)費用也是成本,如果產(chǎn)生了客戶退貨、產(chǎn)品召回,也是要算成本的哦!作為測試的工程師要學(xué)會使用數(shù)據(jù)說話,把產(chǎn)品缺陷造成的成本數(shù)據(jù)搜集起來,關(guān)鍵的時候拿出來給重視成本的領(lǐng)導(dǎo)或管理層查閱方能實現(xiàn)工作向工作量的轉(zhuǎn)變。
四、 測試的成本
測試成本的要素包含很多方面,是否寫了測試代碼只是其中一個重要部分,是否采用JUint以及Mock對象更加不是對其評價的決定性因素。對測試的更好評價應(yīng)該是額外代碼、測試可重復(fù)性、測試范圍和邊界值識別等綜合構(gòu)成(測試對設(shè)計的作用是更高級的判斷)。
對于涉及到數(shù)據(jù)庫持久方面的測試、涉及到UI(瀏覽器或者富客戶端)交互的測試以及多對象多方法過程的測試(也可體現(xiàn)為UI交互,這里是指獨立性質(zhì)的)等,以及上面說到的一些問題(不再重復(fù)),是我們現(xiàn)實測試實踐要面臨的問題。
對這些問題的解決,就會更多的涉及到項目具體情況的選擇和具體項目和團隊的情況來做最佳判斷,這就是成本的意義。
在軟件開發(fā)的早期,軟件開發(fā)只是編碼及部署。但隨著軟件行業(yè)的發(fā)展,開發(fā)企業(yè)開始在發(fā)布前進行測試。因此,這個意義上來說,軟件測試是成本。但從更普遍的意義上來講,軟件測試其實是一種提供軟件質(zhì)量的投資。
軟件測試看似成本,但其實可能就是一項可以減少將來若干不必要費用的投資,同時還可以為企業(yè)贏得良好的口碑。而達到這一目的解決方案,主要有:采用測試驅(qū)動開發(fā)方式;確保每個小功能的模塊都得到很好的測試,并建立可持續(xù)的資源整合環(huán)境;進行可靠的整體測試。軟件測試最終將轉(zhuǎn)化成為節(jié)約成本的開支。不論它是產(chǎn)品開發(fā)、軟件升級、或是軟件維護。
許多統(tǒng)計資料表明,開發(fā)過程每前進一步,發(fā)現(xiàn)和修復(fù)一個缺陷的平均成本要提高10倍.那么是不是說找缺陷就不重要了呢?當然不是。軟件測試的另一個經(jīng)濟目標是盡早發(fā)現(xiàn)缺陷,降低修復(fù)及售后服務(wù)成本。顯然,每一個已發(fā)布產(chǎn)品中的缺陷除了會影響產(chǎn)品及企業(yè)的聲譽外,還會直接增加產(chǎn)品的售后服務(wù)成本。無論是派人到現(xiàn)場調(diào)試,或研發(fā)、發(fā)布補丁程序都要遠比在發(fā)布前的修復(fù)成本昂貴數(shù)十倍,甚至數(shù)百倍。
五、 小結(jié)
軟件測試的必要性已經(jīng)完全為業(yè)內(nèi)決策人士所接受。這是因為軟件工業(yè)已經(jīng)發(fā)展到了與其他主要工業(yè)相當?shù)囊?guī)模。經(jīng)過十幾年的發(fā)展,少數(shù)天才們手工作坊的世界已經(jīng)轉(zhuǎn)化為大工業(yè)生產(chǎn)的天下。由于Java的流行,我們更看到了組裝生產(chǎn)線的模式。
在工業(yè)生產(chǎn)的傳統(tǒng)行業(yè)里,測試是生產(chǎn)的有機組成環(huán)節(jié),各道工序的測試、組裝測試、出廠測試及致破壞性試驗是生產(chǎn)目的實現(xiàn)的重要保證。
可以肯定,軟件開發(fā)面臨很多的困難,諸如發(fā)布時間緊、市場壓力大、投資過高等。這些不能成為擠壓軟件測試投入的借口。因為軟件測試是軟件開以生命周期一個非常重要的部分。筆者認為,對于一些基于產(chǎn)品的公司或組織,軟件測試作為一種投資可能更加適合一些,因為這樣可以節(jié)約銷售成本及技術(shù)支持成本。