某甲問道:「測試做太多的話,會不會使得bug解不完?」

    某乙回答:「還不簡單。只要不做測試,沒有bug.」

    上述對話,反應出許多軟件工作人員對于測試的想法。對多數(shù)軟件開發(fā)人員而言,測試大概是僅次于維護之外,令人討厭的工作。對軟件研發(fā)主管來說,測試是必要之惡:做得不夠后患無窮,做得過多又增加成本,延誤商機。因此,如何能夠規(guī)畫與執(zhí)行一個經(jīng)濟有效的測試工作,當是軟件研發(fā)主管們須研究的一個課題。

    軟件測試的困難,在于它不僅是產(chǎn)品的測試,更是產(chǎn)品設計程序的檢驗。由于關乎設計的測試,準則不易尋找,經(jīng)驗未必得以再用,他山之石也有應用的局限性,因此難度頗高。欲提高測試的效益,有賴全盤的規(guī)畫,確實的執(zhí)行,與事后的檢討改進動作。許多小型軟件研發(fā)單位,對于軟件測試并不重視,但從許多稍具規(guī)模的軟件公司均配置常設測試人員,乃至于測試品保部門來看,測試工作顯然有其學問與價值的。

    測試工作沒有佳方法可依循,是因為不同的軟件所需的測試手段不同。譬如小型軟件與大型系統(tǒng)的做法不同;訂制軟件與軟件包的要求不同;系統(tǒng)軟件的測試往往無法采用應用軟件所使用的技巧;游戲軟件與庫存系統(tǒng)有其各自需面對的測試標的。因此,測試人員必須因應軟件的特性與資源的限制,加上過去相關的經(jīng)驗,規(guī)畫適合的測試方式。并隨著經(jīng)驗的累積,不斷改進作法,才能找出佳的測試方法。

    由此可知,要做好有效的測試,不只是埋頭苦干而已,它需要良好的管理,使整件工作獲致佳的成果。關于測試的管理工作,可從組織、規(guī)畫、執(zhí)行與檢討幾個角度來探討。以下謹筆者粗淺的經(jīng)驗野人獻曝一番,希望提供讀者基本的協(xié)助。

    測試組織之設計

    由于人性總自認為自己的好正確,完全由軟件開發(fā)人員兼任測試人員,并不值得推薦。實務上往往因軟件開發(fā)單位的經(jīng)濟規(guī)模不夠,使得開發(fā)人員經(jīng)常兼任測試人員。但若可行,研發(fā)單位應盡可能配置專任的測試人員,尤其是獨立于開發(fā)小組之外的測試負責人員。盡管是否應設置獨立測試小組業(yè)界仍有爭議,許多人甚至以為保障軟件品質唯有從改進軟件開發(fā)的程序做起,但大部份美國的軟件公司均設有獨立測試或品保人員乃至于部門,這說明了獨立測試仍有其不可搖撼的地位。

    許多的軟件研發(fā)單位將測試視為次等的工作,從而配置次等人員負責相關工作。如此一來,人員無從參與,也缺乏意愿參與測試工作。結果軟件品質不易度量,研發(fā)的成果常常被不佳的品質抵銷,實為令軟件開發(fā)人員泄氣之事。主管是否能體認到軟件測試的重要性,通常是成功的關鍵。軟件測試固然是支持性工作,仍應配置合理的資源,以獲取整體之成效。在當前的環(huán)境下,給予測試人員較多的關注,毋寧是必要的作法。

    測試工作規(guī)畫

    測試工作的規(guī)畫,至少包含兩項要點:測試目標的訂定與測試資源的配置。攻擊需要目標,測試亦然。測試的目的在于找出軟件的問題,提供改進之參考。目標若不明,測試人員即不知如何著手。

    測試目標的訂定,重要的在于軟件通過的準則,亦即測試何時方可結束。常見的情形是:軟件開發(fā)的進度不斷落后,后剩余的時間僅有兩個星期,于是測試人員的目標是把后兩周用完,盡人事聽天命。究竟測試多完整,隱藏的多少錯誤,測試工作的生產(chǎn)力如何?皆一概不知。反正產(chǎn)品賣出去或上線后有的是時間改進。然而產(chǎn)品銷售后再改進,成本往往大幅增高,甚至原有開發(fā)人員離職他調,連亡羊補牢都倍感困難。經(jīng)驗一再顯示,事前的測試除錯比事后維護省時省錢,唯有賣不出去或不能用的軟件例外。

    對于測試的要求可簡單區(qū)分為二:一種是通過目標所訂之軟件品質;一種是在既定資源內達到佳成效。前者要求山頭一定要攻下,不達目的絕不停止。譬如目標為單位測試時間的錯誤發(fā)現(xiàn)率須低于某數(shù)字,若超過了得延長測試。此種方式適用于品質要求較高的軟件。至于后者則是上市時間已宣布,無法更改者,其目標著重于鏟除嚴重的錯誤。此種測試較著重測試的準備、經(jīng)常對測試執(zhí)行與除錯設定時限與數(shù)量要求,其中容易遵循的準則即為:重要功能永遠先測。這兩類測試的需求不同,足以影響到測試的計劃、測試的順序與關心的重點。讀者不可不察。

    至于測試資源配置適當性,則是評估測試目標能否達成的重要參考指標。測試人員需要合理的測試資源,譬如要求總研發(fā)人力的20%以上?倳r程的1/3以上。人力不足,測試流于形式,時程過短,找到錯誤也來不及除錯,均不可取。除了測試在研發(fā)的比重,也需注意測試工作本身在規(guī)畫管理、規(guī)格個案訂定、測試執(zhí)行、回歸測試、訓練準備工作的人力分配。人員的訓練與設備的安排尤其容易輕忽,需加以注意。不同階段測試的資源配置,也必須加以考量,如此可避免測試集中于功能測試,忽略系統(tǒng)測試。這些工作的適切安排,有助于協(xié)助測試工作時時都執(zhí)行重要,也有效的測試。

    測試執(zhí)行與管理

    測試工作執(zhí)行在管理上,首先需使測試與開發(fā)人員了解輕重緩急。測試人員常常不考慮測試的效果,而只依照測試的方便性來進行測試。譬如軟件有十大模塊,每一模塊有50個測試個案,于是他從第一個模塊的第一個個案開始測,測完一整個模塊,再進行第二個模塊的測試,執(zhí)行全部完成或無法進行為止。事實上,測試應從重要且常用的項目測起。

    開發(fā)人員的除錯,則往往從好改的改起。于是100個錯誤改了90個,系統(tǒng)主要的缺陷仍為克服。測試管理人員需特別注意此事,確保測試工作的效率。

    進行測試管理的好處在于隨時可掌握狀況,并因應需求及時調整測試策略。譬如測試一段時間后,發(fā)現(xiàn)某子系統(tǒng)的問題特別多,即可調整人力,增強該部份的測試;蚴悄承┤说臏y試績效較差,則可調整工作之分配,以求整體效果。當然,這些數(shù)據(jù)的取得有賴相關信息的搜集,包括數(shù)量與時間之信息。如果可行,可記錄不同測試工作耗用的人力時數(shù),計算耗用成本,以便未來進行測試規(guī)劃時擁有更精確的參考數(shù)據(jù)。

    進行相關資料的統(tǒng)計與分析,好運用工具來幫忙,以節(jié)省人力并增進效果。如果市面已有的測試管理工具符合需求,也可徑行采用。測試結果的統(tǒng)計資料,不妨公布在大家的眼前,使得測試成果可為大家了解,亦能促進工作同仁求取更佳的成績。附圖所顯示為一簡單的統(tǒng)計圖表,顯示每周的測試成果、除錯成果,與產(chǎn)品殘存的問題量,可協(xié)助主管決定測試終止及發(fā)行產(chǎn)品的時間。