沈海波,朱雄泳
(廣東第二師范學院計算機科學系,廣州 510303)
隨著我國IT技術和行業的快速發展,軟件產品已廣泛應用于各行各業,軟件質量成了企業的生命線,軟件產品的質量控制與質量管理正逐漸成為企業生存與發展的核心,甚至是構建和諧社會的重要組成部分。隨著軟件項目越來越凸現大型化、復雜化,軟件開發中出現錯誤或缺陷的機會越來越多。所以,作為發現錯誤的重要手段的軟件測試在軟件項目實施過程中的重要性日益突出。軟件測試的地位和作用,越來越真正受到重視。同時,對軟件測試人才的需求也越來越大。軟件工程專業是培養軟件人才(包括軟件測試人才)的主戰場,而隨著互聯網的快速發展、廣泛應用和互聯網+在國家層面的戰略實施,越來越多的傳統企業已經開始結合互聯網優勢(人工智能、大數據、云計算、物聯網等)來升級或者創造新的商業模式,而軟件測試順應全球化和信息化發展趨勢,與這些都有密不可分的關系[1-2]。在互聯網模式的沖擊下,快速迭代、持續發布、不斷試錯成為軟件開發的關鍵字,這一切不斷沖擊著傳統軟件測試中賴以生存的“流程”、“規范”等優勢,給軟件測試帶來了極大的沖擊,對軟件測試人才的能力需求也越來越高。因此,如何基于軟件測試來進行軟件工程特色專業建設,是值得我們深入思考的問題。
軟件工程是一門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科。軟件質量的內涵包括三方面:完整的需求、正確的代碼和最少的缺陷。軟件測試,描述一種用來促進鑒定軟件的正確性、完整性、安全性和質量的過程。換句話說,軟件測試是一種實際輸出與預期輸出間的審核或者比較過程。軟件測試的經典定義是:在規定的條件下對程序進行操作,以發現程序bug(缺陷),衡量軟件質量,并對其是否能滿足設計要求進行評估的過程,可以盡可能減少研發、測試、售后的成本[3]。
在經典的軟件工程瀑布式模型中,軟件生命周期分為需求、設計、軟件開發、軟件測試、部署五大階段。可見,軟件測試是在軟件投入運行前,對軟件需求分析、設計規格說明和編碼的最終復審,是軟件質量保證的關鍵步驟,也是軟件質量保證的重要手段之一,在軟件生命周期中占據重要的地位,被稱為軟件質量的安全副駕駛。一個軟件的好壞、質量的優劣不僅取決于軟件的開發目標及其可行性的評估、功能需求的分析、軟件的設計以及程序代碼的編寫,還取決于軟件測試。軟件測試的作用,可以概括為如下幾個方面:
第一是確認軟件的質量。通過測試發現所要交付軟件產品的bug,特別是盡可能地發現各種嚴重的bug,降低或消除產品質量風險,提高客戶的滿意度,從而擴大市場份額。需要注意的是,現在質量的概念,已經不僅僅是bug,還包括用戶體驗滿意度,包含感覺和情感的成分。
第二是提供信息。對產品質量完成全面的評估,可以為軟件產品發布、軟件系統部署、軟件產品鑒定、第三方獨立測試的糾紛仲裁和其他決策提供信息。
第三是保持質量的持續、全面改進。通過持續的測試可以對軟件產品質量提供持續的、快速的反饋,從而在整個開發過程中不斷地、及時地改進產品的質量,并減少各種返工,降低軟件開發的成本,提高用戶的滿意度。
第四是防止錯誤重現。通過對bug進行分析,找出bug發生的根本原因(軟件過程中的問題,包括錯誤的行為方式)或總結出軟件產品的缺陷模式,避免將來犯同樣的錯誤或產生類似的產品問題,達到bug預防的目的。
我們通常把非互聯網的軟件稱為傳統軟件,傳統軟件產品通常以光盤、U盤為載體以類似于實物的方式進行生產和出售,軟件的產出方式也是嚴格遵守軟件工程的流程,對傳統軟件的測試一般遵循軟件測試流程:需求分析-測試設計-用例設計-測試執行-報告評審,重點在于測試過程。目的就是盡可能在測試前深入了解業務和實現,設計出各種組合的測試用例,最終保證產品的質量。但互聯網軟件的測試與傳統軟件的測試相比較,具有自己的一些特點。
(1)要求測試周期更短。互聯網軟件(特別是移動互聯網應用)通常采用敏捷開發模式,設計-開發-運營,快速迭代,持續改進,更新速度快,從而快速響應市場需求。在互聯網行業,如果一個產品半年發布一次,那么很快就會失去市場競爭力,被市場淘汰。因此,軟件測試周期更短、更平、更快,通常采用持續自動化測試。
(2)要求測試工作前移。軟件的質量很大程度上主要是代碼的質量,所以提高開發提交的代碼質量是一個很重要的問題。傳統的流程體系中,測試作為上線前的最后一道關,一般接入版本的時機較晚,并且以獨立的測試工作為主,較少的參與項目需求和設計方面的工作。測試的介入時機提前,與分析和開發同步,可從產品的概念和設計階段就介入,參與需求的分析和討論,特別是由軟件開發人員進行詳細的單元測試,將大大提高軟件的質量,修復bug的代價也越小。當然,測試工作的前移,需要以測試思維為主的思想。
(3)移動互聯網應用測試面臨更多挑戰。隨著移動互聯網的深入發展,移動應用在智能手機、平板電腦等移動終端設備中得到了廣泛應用,并深受廣大用戶的喜愛。但由于移動設備的多樣化、操作系統平臺的多樣性、網絡基礎設施和協議的多樣性、海量的用戶、不同瀏覽器的兼容性、大量的測試接口、各種測試工具等,對移動互聯網應用產品提出了更高的性能、安全性等方面的要求,也給移動互聯網應用的測試帶來了獨特的挑戰。
(4)新型IT技術的發展和應用帶來極大的挑戰。基于人工智能、云計算、物聯網、大數據等新型互聯網IT技術的發展和應用,出現了人工智能測試、云測試、物聯網測試、大數據測試等需求,它們需要一些新的測試方法、技術、平臺和工具,這就需要測試人員不斷學習這些新技術、新方法和新工具,才能有針對性完成相應應用軟件的測試工作。
互聯網行業最大的特點是更新速度快,因此產品或業務也是不停地迭代從而快速響應市場,適應用戶體驗需求。從這個角度上說對測試人員的要求也更高,不僅僅需要傳統的測試技能,更需要深入理解業務需求,挖掘用戶潛在的需求,并做好風險控制與防范,在做好功能測試的同時,對安全測試、兼容性測試、集成測試、接口測試以及用戶體驗性測試等方面提出了更高的挑戰。綜合各種IT企業的招聘需求,我們可以歸納出對軟件測試人員的總體能力要求:一個合格的軟件測試工程師應具有專業的知識背景、實際的操作經驗、逆向的思維能力、團隊的合作精神、快速的學習能力、優秀的書面表達能力、較強的溝通能力和責任心、工作細致認真和耐心。可以看出,互聯網時代需要是既懂軟件開發技術、又懂軟件測試技術、還要懂項目管理的高端軟件測試人才。
我們可以進一步把軟件測試人才的能力需求細分為基本、中級、高級三個層次。基本能力需求主要包括:具備計算機科學和軟件工程方面的基礎理論、基本知識、基本方法和基本技術;擁有軟件測試基本能力(軟件測試基本知識、主要測試工具的使用);職業基本素質能力(溝通和協作、書面表達能力、責任心和耐心)。這里要強調一點的是書面表達能力的重要性,撰寫測試計劃、測試方案、測試用例、測試報告、缺陷報告等各種測試文檔是測試工作必不可缺少的工作,它們是測試工作的重要成果。測試設計的基礎是分析,而分析的基礎是測試思維方式和思維能力,具備良好的開發能力且熟悉開發人員的思維和習慣,則可以更好地做好軟件測試工作。因此,中級能力需求主要包括:測試思維方式能力(逆向思維方式、組合思維方式、全局思維方式、兩極思維方式、比較思維方式、批判性思維方式等)、測試分析和設計能力(能根據需求設計出用戶場景、業務流程、分支流程和異常場景,并構建測試用例)、開發者測試能力(較好的編程能力、能熟練進行單元測試和集成測試等)。除了上述能力外,熟練掌握自動化測試工具,打造快速測試和持續交付能力,才能滿足互聯網應用快速迭代更新的需求。對于測試人員來說,如果不了解產品和業務,不理解產品的構建技術,測試工作很難開展。要成為測試領域技術專家、成為技術和測試團隊管理者,一定的測試管理能力是不可缺少的。因此,高級能力需求主要包括:業務理解拓展能力(業務理解與建模能力、缺陷管理和根因分析能力等)、快速自動化測試能力(各種測試工具的熟練運用能力、測試腳本開發與調試能力、新型測試方法和策略的掌握與運用能力、各種專項測試能力等)、測試管理能力(團隊領導能力、項目管理能力、決策與規劃能力等)。
上述能力需要相關的課程體系來培養。由于普通本科院校并沒有設置軟件測試專業(只有部分職業技術學院開設)[4],因此在目前的教學體系中,軟件測試只是作為軟件工程專業的一門主干課程進行開設,分別設置有理論部分、課程實驗和課程設計,但隨著互聯網時代行業對軟件測試人才能力要求的提高,特別是移動應用測試、Web安全測試、嵌入式測試、Web自動化測試的出現,一門課程和有限課時的實驗,是遠遠達不到行業的需求。因此,以軟件測試作為軟件工程專業特色,針對互聯網時代對軟件測試人才的能力需求的三個層次,需要系統化地設置軟件測試課程體系[5-6],這個課程體系要服務于上述能力的培養。我們根據高等學校本科軟件工程專業應用型人才培養指導意見(2016版),提出了課程體系,如表1所示。

表1 軟件測試課程體系
加強專業特色建設是提升專業核心競爭力的關鍵。隨著軟件全球化競爭的加劇,為了提高軟件質量,降低軟件開發成本,軟件測試成為重要推動力。隨著互聯網+、移動互聯網、人工智能、云計算與大數據等IT新產業的迅速發展,專業化的軟件測試人才成為國內IT行業、軟件企業的迫切需求。如何基于軟件測試來建設軟件工程特色專業,本文作了一些有益的探索。
致謝:在本文的寫作過程中,參考了2017年8月在青島舉行的全國高校軟件測試教學師資培訓班上同濟大學朱少民教授、南京大學陳振宇教授及其他老師的講義,在此特致以謝意。
[1]王磊,黃璞,徐力杰.移動互聯網時代高校課堂管理方式的改革探討[J].現代計算機(專業版),2017(4):51-52.
[2]張泳.軟件工程專業移動互聯網方向應用型人才培養探索[J].中國大學教學,2015(5):53-55.
[3]朱少民.軟件測試方法和技術(第3版)[M].北京:清華大學出版社,2014.
[4]盧克,吳建玉.高職軟件測試專業課程體系建設的探索與實踐[J].職教論壇,2013(20):46-48.
[5]李靜,趙志升.軟件測試專業課程體系建設和教學改革[J].教育與職業,?2014(2):135-137.
[6]鞠小林,陳翔,文萬志,等.互聯網+背景下的軟件測試課程教學體系構建[J].計算機教育,2017(5):112-116.