盡管組建一支高效的測試團隊是一項復(fù)雜、艱巨的任務(wù),需要軟件企業(yè)投入足夠的關(guān)注和一批高素質(zhì)的技術(shù)、管理人才,但是,這項工作帶來的長期效益卻是巨大的。
在目前的軟件行業(yè)氛圍下,一提到軟件質(zhì)量,肯定有不少業(yè)內(nèi)人士的第一反應(yīng)是ISO、CMM、6σ之類的標(biāo)準(zhǔn),進而反映出的詞匯就是SQA (軟件質(zhì)量保證)。因此,不少軟件企業(yè)和機構(gòu)都紛紛組建了SQA部門,把提高質(zhì)量的希望全部都寄托于此。這當(dāng)然是好事,至少說明了質(zhì)量意識的普遍覺醒,但高層管理者卻往往認(rèn)識不到“質(zhì)量工作是由多個部門各司其職共同完成的”。
這樣的大環(huán)境造成不少企業(yè)和機構(gòu)的軟件質(zhì)量保證部門與軟件測試部門關(guān)系尷尬:究竟是讓測試部門下屬于質(zhì)量保證部門,還是應(yīng)該單列測試部門使其以獨立、中立的姿態(tài)出現(xiàn)?另外,測試部門與質(zhì)量保證部門的權(quán)力和職責(zé)分配如何把握,誰更有權(quán)在必要的時候?qū)δ硞€開發(fā)項目、某個開發(fā)人員出示“紅牌”、“黃牌”,誰更應(yīng)該對用戶投訴的產(chǎn)品技術(shù)問題負(fù)責(zé)?
分清SQA、SQC和SQM
目前廣泛認(rèn)可的衡量軟件質(zhì)量的標(biāo)準(zhǔn)是“軟件產(chǎn)品能否較好地滿足用戶相關(guān)的各類需求”。然而,用戶對軟件的需求往往包羅萬象,如功能需求、性能需求、約束性需求、潛在需求,甚至包括相互沖突的需求以及技術(shù)上不可實現(xiàn)的需求等,這就導(dǎo)致等軟件產(chǎn)品生產(chǎn)出來再驗證“產(chǎn)品是否滿足用戶需求”容易成為一件引發(fā)供需雙方爭執(zhí)的麻煩事,而且對于軟件企業(yè)而言這種質(zhì)量工作未免代價過高、風(fēng)險太大,一旦查出嚴(yán)重問題,毫無補救措施。鑒于此,目前業(yè)內(nèi)解決這個問題的核心策略是控制軟件工程的品質(zhì)以及軟件產(chǎn)品(包括階段性產(chǎn)品)本身的品質(zhì)。前者主要涉及企業(yè)在工程過程中選用什么樣的質(zhì)量體系以及如何監(jiān)督標(biāo)準(zhǔn)的執(zhí)行,稱為SQA,后者主要涉及驗證產(chǎn)品在各個階段具體品質(zhì)如何、有無偏離用戶需求等,稱為SQC(軟件質(zhì)量控制)。
那么,軟件測試在軟件質(zhì)量工作中應(yīng)處于一個什么樣的位置呢?筆者認(rèn)為軟件測試應(yīng)是SQC的核心內(nèi)容和重要組成部分。由此看來,目前沸沸揚揚、閃亮登場的CMM、6σ等標(biāo)準(zhǔn)和體系,雖然被部分管理者頂禮膜拜,但充其量也只是SQA的一個組成部分,它們不能囊括質(zhì)量工作的全部。相反,軟件測試是SQC的核心,它更貼近質(zhì)量工作本來的要義,理應(yīng)受到更多關(guān)注。
SQA和SQC各司其職,相輔相成,統(tǒng)一于軟件質(zhì)量管理(SQM)。拿一部汽車來做比喻吧,質(zhì)量控制(QC)就是所有那些告訴你汽車當(dāng)前運動狀態(tài)的儀器儀表; 質(zhì)量保證(QA)包括各類標(biāo)準(zhǔn),是告訴你所有部件操作方法的用戶手冊; 而質(zhì)量管理(QM)則是你要追求的目標(biāo),比如希望能平安、高速地駕駛汽車。可以看出,為了實現(xiàn)質(zhì)量管理的目標(biāo),質(zhì)量保證和質(zhì)量控制都是不可或缺的部分。
建設(shè)高效測試團隊的方法
俗話說“工欲善其事,必先利其器”,要做好測試工作,首先需要建立并維護一個高效的測試團隊。然而,許多小型軟件企業(yè)卻將測試作為產(chǎn)品面臨發(fā)布時的一個小“插曲”,往往臨時抽調(diào)幾名程序員對產(chǎn)品的功能粗略測試一下即交付客戶(甚至在進度和成本不足時首先砍掉這一塊)。這種倉促完成的產(chǎn)品通常質(zhì)量問題很多,所以我們首先應(yīng)拋棄小企業(yè)慣常的思維模式,不計較一時一地之利益,立足長遠(yuǎn),著手組建高效測試團隊。
第一步:招募測試人員
在國內(nèi)的軟件企業(yè)中有一種普遍做法,那就是把那些剛涉足軟件行業(yè)的技術(shù)新手或業(yè)績不突出的開發(fā)人員安排去做測試工作。筆者認(rèn)為這絕對是一種欠妥當(dāng)?shù)男袨椤J聦嵣希瑢σ粋€系統(tǒng)進行有效測試所需要的技能絕對不比進行軟件開發(fā)所需要的技能少,測試從業(yè)者甚至可能面對許多開發(fā)人員都不會遇到的技術(shù)難題。那么,測試團隊需要招募什么樣的成員呢?這里,筆者總結(jié)了以下兩點:
首先,測試人員要具備良好的溝通能力、自信心、外交能力、遷移能力以及懷疑精神。其中,溝通能力是指測試者必須能夠同測試涉及到的所有人進行溝通,具有與技術(shù)人員(開發(fā)者)和非技術(shù)人員(客戶、管理人員)進行交流的能力。自信心是指測試者必須對測試工作的價值具有足夠信心,不會因開發(fā)者指責(zé)測試結(jié)果沒有意義甚至反唇相譏而影響工作情緒。外交能力是指測試人員在與其他人員交流的時候,要注意自己的辭令和行為方式,不要刻意夸大錯誤的嚴(yán)重性,也不要礙于面子替開發(fā)人員掩飾重大程序錯誤。遷移能力是指測試人員應(yīng)能將以前曾經(jīng)遇到過的類似錯誤從記憶中挖掘出來,并遷移到當(dāng)前測試活動中。懷疑精神是指測試人員對任何可能出錯的地方都親自測試一番,不聽信開發(fā)人員毫無意義的保證,堅持以事實說話的工作作風(fēng)。
其次,測試組成員應(yīng)具備良好的專業(yè)技能或者技術(shù)學(xué)習(xí)能力。由于測試組各個崗位需要的技能各有差異,所要掌握的測試技術(shù)也千差萬別。比如測試管理人員需要對測試管理工作的內(nèi)容及相關(guān)輔助工具的使用胸有成竹; 自動化測試人員需要對相關(guān)自動化測試工具爐火純青; 測試腳本撰寫人員需要對腳本語言的領(lǐng)悟了然于胸;手工測試人員應(yīng)對相關(guān)測試中最易發(fā)現(xiàn)問題的地方如數(shù)家珍; 而測試團隊負(fù)責(zé)人則必須既熟悉被測軟件系統(tǒng)的概念模型、設(shè)計模型,又要掌握開發(fā)過程中涉及到的相關(guān)開發(fā)工具。除此之外,測試經(jīng)理還必須深刻掌握測試流程的裁剪、測試環(huán)境的搭建、測試計劃的撰寫、測試活動的組織與開展以及測試效果的評價等必備技能。
當(dāng)然,新招募的測試人員不可能像上面說的那么理想。關(guān)鍵是他們是否熱愛測試這項工作,對相關(guān)的工作內(nèi)容是否感興趣以及他們的學(xué)習(xí)能力如何。
第二步:測試團隊制度建設(shè)
良好的制度可以規(guī)范測試團隊的工作開展,同時也便于對團隊成員進行業(yè)績考評。相反,則很有可能導(dǎo)致人心渙散,滋長負(fù)面風(fēng)氣。建設(shè)良好的測試團隊制度,可以考慮以下幾個方面:
● 匯報制度 團隊成員匯報本周工作情況及下周工作計劃、遇到的問題以及需要提供的幫助,培養(yǎng)團隊成員的匯報及計劃習(xí)慣。
● 工作總結(jié)制度 成員每個階段匯報上階段工作經(jīng)驗和教訓(xùn),并在部門例會上交流、分享經(jīng)驗及教訓(xùn),避免同樣的問題重復(fù)出現(xiàn)。
● 獎懲制度 對于貢獻突出的成員予以獎勵,對于業(yè)績差的提出批評,有效地保持測試團隊的工作熱情。
● 測試件審核制度 對測試件進行審核,去粗存精,鼓勵測試人員使用和提出改進,保證提交到測試團隊知識庫的測試件的質(zhì)量。
● 會議制度 定期召開部門例會,討論、解決工作中的問題,并提供部門內(nèi)的學(xué)習(xí)平臺。
目前,已有不少軟件企業(yè)推行給測試人員區(qū)分級別的制度,獎優(yōu)罰劣。這無疑是一個好的做法,但成員業(yè)績的具體考評辦法,目前尚無可供參考的標(biāo)準(zhǔn)文件,所以筆者建議應(yīng)盡量做到公正客觀,以免挫傷團隊成員的工作積極性。
第三步:測試團隊內(nèi)部的職責(zé)分工
明確測試團隊內(nèi)部各類測試人員的職責(zé)分工可以使測試團隊內(nèi)部各類測試人員能集中精力在較短的時間內(nèi)完成特定崗位必需的知識儲備和經(jīng)驗積累,同時也使得測試團隊的管理更科學(xué),真正做到“用其所長,避其所短”。這里列出一種可行的測試團隊內(nèi)部職責(zé)分工方案,如表所示。
第四步:測試流程建設(shè)
測試流程,通俗地講是指測試團隊按照什么樣的流程和順序組織開展軟件測試活動。通常來說,測試流程如圖所示。
其中,計劃測試階段是根據(jù)對測試需求的分析制定測試大綱、測試計劃,并對具體要采用的測試技術(shù)做大致剪裁; 設(shè)計測試階段是對測試大綱、測試計劃作進一步細(xì)化,從而形成更為細(xì)致全面的測試用例集、具體測試活動安排以及相應(yīng)的測試進度; 執(zhí)行測試階段是執(zhí)行相關(guān)測試用例(包括自由測試),具體落實各項測試活動; 分析測試階段是對計劃測試、設(shè)計測試、執(zhí)行測試階段的工作做出評價,評估測試的有效性。以上是測試流程的大致組成,不同測試團隊采用的測試流程在細(xì)節(jié)上可能會有出入。我們可以通過以下步驟來建立適合本單位的測試流程:
1. 測試團隊負(fù)責(zé)人員根據(jù)對公司現(xiàn)有測試狀況的了解,及個人的測試經(jīng)驗,起草測試流程及相關(guān)的模板;
2. 通過一到兩個項目的實踐,記錄測試流程草稿中的問題及不足之處;
3. 根據(jù)實施經(jīng)驗,完善測試流程,得到測試流程初稿,并起草相關(guān)實施指南;
4. 選擇一個到多個項目,實踐上述測試流程初稿及實施指南,記錄實踐過程中出現(xiàn)的問題;
5. 根據(jù)上述實踐工作的反饋,組織修改測試流程初稿及實施指南,并把修改后的測試流程繼續(xù)應(yīng)用到項目實踐中去,根據(jù)反饋進一步完善成熟;
6. 測試流程及其相關(guān)文件基本趨于穩(wěn)定狀態(tài)時,可以考慮發(fā)布測試流程(含測試流程、模板、表格、指南),并在以后的實踐中不斷改進和完善。
第五步:團隊成員能力的逐步提高
有了明確、合理的職責(zé)分工后,需要針對這些分工對團隊成員進行有意識的引導(dǎo),穩(wěn)步提升團隊成員的技能。測試團隊負(fù)責(zé)人需要負(fù)起監(jiān)督和促進員工能力提升的任務(wù)。監(jiān)督和促進測試團隊成員能力提高,主要做好如下三個方面的工作: 一是,提倡資深測試人員在測試團隊內(nèi)部進行經(jīng)常性的培訓(xùn)和測試經(jīng)驗交流,通過該渠道幫助資歷淺的測試人員大幅提升業(yè)務(wù)技能,做到新老員工之間的知識傳播和繼承。二是,測試團隊?wèi)?yīng)充分利用好測試件知識庫,對于納入到測試團隊知識庫的測試件應(yīng)充分消化和學(xué)習(xí),在此基礎(chǔ)上進一步鼓勵測試團隊成員對這些測試件提出改進性意見。三是,測試人員除了需要注重自身的測試技能提升,在條件許可的情況還應(yīng)適度開發(fā)部門的基本知識,這樣能減少與開發(fā)團隊協(xié)同工作時的領(lǐng)域障礙。 |