吉雪蕓,譚火彬,蔡為東
(1.保定學院 數據科學與軟件工程學院,河北 保定 071000;2.北京航空航天大學 軟件學院,北京 100191;3.北京趣拿軟件科技有限公司,北京 100089)
軟件測試是一門實踐性很強的軟件工程專業的主干課程[1],從理論知識的角度,測試是軟件工程的一部分;從工作實踐的角度,測試是軟件開發的一個環節;軟件測試是一門課程,是一個領域,也是一份職業。從發展前景來看,在互聯網+時代,我國計算機軟件行業人才缺口高達60萬,其中就包括開發、測試、運維等崗位,作為衡量或者保障軟件質量的重要手段,軟件測試技術得到迅猛的發展,市場對軟件測試人才的需求越來越大,企業需要更多對口資源的人才,尤其是高度職業化、專業化的測試人員[2],因此,加強軟件測試人才的培養成為高校相關課程的主要教學目標。
軟件測試覆蓋的領域很廣,從概念理論的角度,有軟件測試基本理論、黑盒測試和白盒測試等;從市場需求的角度,常用的有功能測試、自動化測試和性能測試等;從開發流程的角度,有需求測試、單元測試、系統測試和敏捷測試等;從技能點的角度,有測試用例的撰寫、缺陷報告的撰寫、自動化測試工具的操作等一系列實用技能。最重要的,還是軟件測試整體技術的把握和應用[3]。高校里沿用的教學方法,大多屬于理論概念的講述,雖然理論是實踐的基礎,但是和市場需求未免脫節;雖有將理論應用于實踐的環節,也只是針對知識點的應用,對軟件測試整體把握并無多大作用,加上軟件開發技術的更新換代,測試技術日新月異。一個測試工程師要有堅實的理論基礎,也要有必要的從業能力。畢業生兼有理論知識和實踐技能,是高校育人和企業用人的目標。
為了激發學生的學習興趣,鍛煉學生解決實際問題的能力,促進學生就業,為市場培養合格的軟件工程人才,高校以能力為導向的軟件測試課程研究應從行業、理念、模式、環節等各方面入手完成以下目標:①明確教學任務,總結職業技能;②調整教學內容,實現知識與技能的融合;③豐富授課形式,借鑒企業模式。
經過師生在軟件公司進行調研、見習和教學大綱的把握,確定了包括熟悉測試規范、制定測試需求、擬定測試用例、執行測試過程和撰寫文檔等在內的一系列職業技能。一般軟件測試的工作流程為測試需求分析、撰寫測試文檔、設計測試用例、執行測試、撰寫測試報告和測試總結。有的公司要求測試人員集體參與全部工作,有的公司則將分工細化到每個測試員工。無論哪種形式,都要求測試工程師具有良好的分析需求能力、溝通能力、理解和分析問題能力,再加上扎實的理論基礎和過硬的技術水平。如何提高學生的上述能力,實現與企業的對接,成為測試課程的主要教學任務[4]。
軟件測試課程的內容包含概念、技能和規范,選取的一部分內容見表1。

表1 軟件測試部分教學內容
從1到4,是一個由點到面的過程,1和2涉及的概念相對分散,需要學生花時間去記憶。3和4更強調整體能力。
理論是基礎,實踐出真知。為了將分散的知識點、技能點轉化成整體實踐能力,摒棄了表1中從1到4按階段實施教學的安排,將教學內容用模塊的形式加以組織,每個模塊都由理論知識、技能或規范和案例構成,教師提前安排理論部分的預習,課堂上用提問的方式引出技能點,解決學生疑問,以案例的形式加深對理論的理解、規范的熟悉和技能的掌握。教學案例選用由淺入深,最后形成螺旋式的軟件測試教學環節。
表2中列舉了5個模塊的教學內容。

表2 軟件測試教學模塊
需要說明的是,重要的理論概念須進行合理地穿插,比如黑盒測試,在之前的模塊中已經出現過,在后續模塊中再次回歸;而每個模塊有各自的重點概念和技能。同樣地,測試用例的設計和撰寫也是每個模塊的必修環節,這一技能會隨著不同的概念、場景和應用反復錘煉,如在“測試的種類1”模塊,教學內容安排見表3。
作為一門和實踐活動緊密結合的課程,在介紹常用測試技術的時候,需要代入場景,學生才能深入理解。從這一角度來看,學生能力的培養,更需要企業工程測試人員的參與和引領。比如敏捷測試,由軟件測試工程師向學生進行講解,學生的接納性更高。因此,企業級項目測試人員參與到教學環節中是必要的。

表3 測試種類1教學內容
校企合作已經是軟件類課程必經之路,主要途徑有:通過企業工作場景的還原,接觸具體企業測試項目,學生的職業素養和能力可以得到提高。比如保定學院數軟學院將某企業實訓加入實踐課程,使學生了解到軟件開發設計模式的實用性;將企業工程師請入課堂,進行案例講解,教學內容可以雙方共同組織,也可以由企業人員制定。比如北京航空航天大學軟件學院的軟件工程課程,最后兩節大課就是由來自阿里達摩院的架構師和去哪兒網的測試經理完成教學任務。有經驗的測試工程師,會敏銳地捕捉到學生在實踐中存在的盲區,向學生傳授“一般情況下,此類問題應該如何解決”或者“應該有哪些思路”,使學生進一步認識測試的重要性,萌發職業興趣,產生從業欲望。即便是沒有企業入駐,也可參考企業中的工作模式,采用項目驅動的團隊管理方法,模擬企業工作場景,例如,Scrum是目前企業常見的開發方[5],同時也強調測試和開發的同步性,將Scrum工作方法引入到教學中,即將學生分成若干團隊,每隊6人,測試經理1人,測試團隊5人。每個角色都有各自的職責,協同工作。課堂開始,教師提出問題或工作場景,團隊討論后擬定測試需求,由測試經理撰寫測試方案,分配任務,執行任務,隨著方案細化,團隊將新的問題轉換為新的需求,如此重復,直到課堂結束。這里的課堂,指的是課上課下一個整體,教師在課上課下進行指點,直到學生需求結束。
每個模塊結束的時候,每個團隊有一份教師評價、一份自我評價以及一份同行評價(即同學評價)。教師評價主要從概念的理解、技能的運用給出評價;學生主要從自身欠缺和自我提升方面做出自我評價;同行評價則在自我評價的基礎上客觀地給出建議。所有的操作都錄制了視頻。教師和學生各存一份,便于回放和為以后的教學作準備。以“測試的種類1”模塊為例,其包含測試的概念、黑盒測試、功能測試、等價類劃分、測試用例、缺陷報告、錄制視頻等知識點或技能,分別擁有優秀、良好、合格、不合格等評價標準。
2017秋季,筆者使用新的教學模式開啟了教研探索之路。學生們熱情飽滿,求知欲很強,在接口測試和性能測試兩個模塊,利用空閑時間在機房裝軟件,使用工具進行測試,并撰寫測試報告;在概念的理解和工具的使用的過程中,學生們開始萌發對軟件測試的興趣;在分組迭代討論中,學生們主動發現需求中的問題,提出實現方案,給出測試用例,課下積極撰寫缺陷報告。期末,94位同學參與了教學評價,其中對課程內容表示很滿意的達到了83人。保定學院數軟學院15級軟件工程專業有一部分學生在2019年1月找到了與測試相關的實習工作。
隨著軟件開發過程地位的不斷提高,軟件測試已經成為軟件工程專業的重點專業課程[6],在市場需求的不斷刺激下,教師主動貼近軟件公司的用人要求,了解新技術、新模式,將靜態的理論和動態的技能結合起來,進行教學實踐,同時實施校企合作方案,加大學校和企業的合作力度,給學生更多接觸市場的機會,培養學生實踐能力,便于學生就業,構成一個良性循環,為軟件測試課程和軟件工程專業其他課程的教學起到促進、鋪墊和領引的作用。課程研究還有很多工作要做,比如測試平臺、測試方法層出不窮,不能一一介紹,全部掌握也不可能;學校畢竟和企業有差異,不能做到完全無縫銜接;測試是和開發結合在一起的,如何以測試平臺或工具的學習以點帶面,激發學生主動學習精神等,需要我們繼續探索和改革。