李志博 周剛 楊奎武 侯雪梅 廖琪
[摘 要]軟件工程學(xué)科課程體系建設(shè)需要保證學(xué)生知識結(jié)構(gòu)完整性與課程知識體系先進(jìn)性,兼顧學(xué)科發(fā)展與學(xué)生綜合素質(zhì)能力的培養(yǎng)。文章探討結(jié)合軟件工程學(xué)科課程理論抽象、實踐性強(qiáng)的特點(diǎn),在實施全方位教學(xué)方法改革的同時,督促學(xué)生積極參與學(xué)科相關(guān)競賽,以賽促學(xué),實戰(zhàn)演練,全面提升學(xué)生軟件工程綜合素質(zhì)能力。
[關(guān)鍵詞]軟件工程學(xué)科建設(shè);以賽促學(xué);實戰(zhàn)演練;專題培訓(xùn);軟件測試大賽
[中圖分類號] G642 [文獻(xiàn)標(biāo)識碼] A [文章編號] 2095-3437(2019)08-0066-03
軟件工程學(xué)科是一門綜合性、實踐性強(qiáng)的學(xué)科,對培養(yǎng)學(xué)生的工程思維能力、實踐能力、創(chuàng)新能力、溝通能力和團(tuán)隊合作精神具有重要作用[1-2]。軟件工程學(xué)科課程具有以下特點(diǎn)[3]:(1)理論抽象。因為軟件工程中的核心技術(shù)和開發(fā)原理均來源于實際軟件開發(fā),經(jīng)提煉形成原理和方法并引入課程。(2)實踐性強(qiáng)。因為軟件工程是從工程的角度講述軟件開發(fā)與維護(hù)的原理、技術(shù)和方法。實踐和理解相結(jié)合的融會貫通對于學(xué)好此類課程非常重要[4]。
一、軟件測試課程的教學(xué)現(xiàn)狀
軟件測試是軟件工程課程中的一個部分,內(nèi)容涉及的知識點(diǎn)多而繁雜且概念抽象,測試標(biāo)準(zhǔn)和規(guī)范類的教學(xué)內(nèi)容偏多[5]。由于缺乏軟件測試經(jīng)驗,學(xué)生普遍認(rèn)為課程內(nèi)容抽象枯燥,因而學(xué)習(xí)興趣不濃[6]。
1.教學(xué)內(nèi)容理論性較強(qiáng),難以調(diào)動學(xué)生學(xué)習(xí)主動性
課程內(nèi)容抽象,包含大量軟件測試的概念、方法、技術(shù)和規(guī)范,大多數(shù)學(xué)生沒有軟件項目的實際開發(fā)經(jīng)驗,課程內(nèi)容的概括性與抽象性增加了學(xué)生對課程內(nèi)容的理解難度。
2.傳統(tǒng)教學(xué)方法不能充分激發(fā)學(xué)生的求知欲
基于多媒體的概念、理論和測試方法的講授會讓學(xué)生缺乏對課程內(nèi)容的感性認(rèn)識[6],從而難以積極思考如何在學(xué)習(xí)中將理論知識運(yùn)用到實踐當(dāng)中,這就影響到其學(xué)習(xí)興趣。
3.缺乏測試方法和技術(shù)案例的應(yīng)用
軟件測試課程具有很強(qiáng)的實踐性和靈活性,學(xué)生只有充分參與實踐才能熟練掌握軟件測試的基本方法,了解軟件測試的具體流程,鍛煉靈活應(yīng)用知識來解決問題的能力[7]。實踐教學(xué)在整個課程中占一定比例,內(nèi)容是較簡單的教學(xué)案例,但這些實踐案例是理想化的,與實際的項目案例相比,在復(fù)雜性和規(guī)模上還存在很大的差距。
筆者針對教學(xué)過程中發(fā)現(xiàn)的問題,對軟件測試的教學(xué)內(nèi)容及教學(xué)方法等方面進(jìn)行了較為深入的探索與研究,在實施全方位教學(xué)方法改革的同時,督促學(xué)生積極參與學(xué)科相關(guān)競賽,將軟件測試?yán)碚摻虒W(xué)與全國大學(xué)生軟件測試大賽相結(jié)合,以賽促學(xué),實戰(zhàn)演練,通過理論強(qiáng)化、大賽專題培訓(xùn)、實戰(zhàn)演練等方式,激發(fā)學(xué)生的學(xué)習(xí)興趣,全面提升學(xué)生的軟件工程綜合素質(zhì)。
二、構(gòu)建具有完整性與先進(jìn)性的軟件工程課程體系
要系統(tǒng)、規(guī)范地培養(yǎng)軟件工程人才,首先要保證軟件工程課程體系的完整性與先進(jìn)性。由ACM和IEEE/CS聯(lián)合工作組制定的“軟件工程知識體”SWEBOK(Software Engineering Body of Knowledge)[8],吸引了來自世界七十多個國家和地區(qū)的著名大學(xué)、軟件企業(yè)和研究院所參加,集中了軟件工程領(lǐng)域眾多科學(xué)家、教授的智慧和期望。
軟件工程知識體把軟件工程劃分為軟件需求、軟件設(shè)計、軟件構(gòu)造、軟件測試、軟件配置管理、軟件工程管理、軟件工程過程、軟件工程模型和方法、軟件質(zhì)量和軟件工程職業(yè)實踐等知識域。
軟件工程知識體同時給出了作為軟件工程學(xué)科知識領(lǐng)域的相關(guān)學(xué)科,包括認(rèn)知科學(xué)和人的因素、計算機(jī)科學(xué)、計算機(jī)工程、管理和管理科學(xué)、項目管理、系統(tǒng)工程和數(shù)學(xué)。軟件工程知識體為確定軟件工程的學(xué)科地位打下基礎(chǔ),是軟件工程教育的里程碑。制定課程體系時遵循軟件工程知識體,才能保證課程體系的完整性與先進(jìn)性,引導(dǎo)學(xué)生構(gòu)建合理、全面的專業(yè)知識結(jié)構(gòu)。
三、采取靈活有效的教學(xué)方法,打牢學(xué)生的理論知識基礎(chǔ)
筆者根據(jù)軟件工程學(xué)科特點(diǎn),對多種教學(xué)方法進(jìn)行了探索,包括研討分析教學(xué)法、項目驅(qū)動教學(xué)法、激勵教學(xué)法、崗位實踐教學(xué)法。
1.研討分析教學(xué)法
為促進(jìn)學(xué)生對專業(yè)知識的掌握和深入了解當(dāng)前國內(nèi)外專業(yè)領(lǐng)域的學(xué)術(shù)研究情況,教師在實際教學(xué)過程中,可在對基本教學(xué)內(nèi)容進(jìn)行講解后,在課堂內(nèi)開展討論式、分析式教學(xué)[8]。教師提前安排學(xué)生查找相關(guān)研究方向的國內(nèi)外學(xué)術(shù)論文和其他資料,學(xué)生制作課件并在課堂上講解,教師和其他學(xué)生對學(xué)生的講解內(nèi)容和過程提出質(zhì)疑并進(jìn)行集體討論。這種研討式的教學(xué)模式,充分調(diào)動了學(xué)生的主動性和積極性,有利于培養(yǎng)學(xué)生發(fā)現(xiàn)問題、提出問題、解決問題的能力。
2.項目驅(qū)動教學(xué)法
為了進(jìn)一步促進(jìn)學(xué)生對知識的掌握并提升為崗位適應(yīng)能力,可開展項目驅(qū)動教學(xué)[9-10]。根據(jù)學(xué)生的基本情況和個人特點(diǎn)進(jìn)行分組,各組學(xué)生自主選擇創(chuàng)新型題目開展實踐活動。學(xué)生要提交項目實施計劃、實施方案及最終的作品。教師對學(xué)生項目進(jìn)行全程跟蹤和方向性指導(dǎo),最后根據(jù)成果和組織過程給予評分。項目驅(qū)動教學(xué)法能夠有效促進(jìn)學(xué)生在項目中的交流、合作,培養(yǎng)團(tuán)隊合作能力,提升實踐能力和未來崗位的任職能力。
3.激勵教學(xué)法
教師在教學(xué)過程中,請來相關(guān)專業(yè)的高年級研究生、業(yè)務(wù)人員開展專題講座,在職業(yè)規(guī)劃、特長培養(yǎng)、未來發(fā)展、行業(yè)現(xiàn)狀等方面與學(xué)生交流,提前為學(xué)生講解單位、生活、工作中遇到的問題和解決方法,對學(xué)生學(xué)習(xí)和能力培養(yǎng)進(jìn)行激勵,傳遞正能量,促進(jìn)學(xué)生對自身的認(rèn)知和對未來的把握。激勵教學(xué)法有助于學(xué)生合理剖析自我,提升責(zé)任意識、集體意識以及愛崗敬業(yè)的主動性,為其走上工作崗位奠定良好的心理基礎(chǔ)。
4.崗位實踐教學(xué)法
在教學(xué)過程中,教師可積極鼓勵學(xué)生到專業(yè)對口的用人單位進(jìn)行實踐學(xué)習(xí)和課題攻關(guān)[11],由業(yè)務(wù)單位的指導(dǎo)老師對學(xué)生進(jìn)行與業(yè)務(wù)相關(guān)的專業(yè)指導(dǎo)。通過面向用人單位的崗位實踐教學(xué)方法,讓學(xué)生提前適應(yīng)今后的崗位要求,提升崗位任職能力。在業(yè)務(wù)單位指導(dǎo)老師的幫助下,學(xué)生將理論知識轉(zhuǎn)化成實踐能力,填補(bǔ)理論和實踐之間的鴻溝,完成從校園學(xué)習(xí)到崗位工作的平穩(wěn)過渡。
四、以賽促學(xué),實戰(zhàn)演練,全面提升學(xué)生軟件工程綜合素質(zhì)的實踐性探索
軟件工程學(xué)科課程理論抽象、枯燥,僅通過理論知識的講授,難以調(diào)動學(xué)生的學(xué)習(xí)積極性。通過鼓勵學(xué)生參與相關(guān)學(xué)科競賽[12],用理論知識指導(dǎo)實踐應(yīng)用,讓競賽激發(fā)學(xué)生的興趣和挑戰(zhàn)其斗志,使其學(xué)習(xí)由被動變?yōu)橹鲃覽13]。
我院教師積極組織學(xué)生參與學(xué)科相關(guān)競賽,如ACM國際大學(xué)生程序設(shè)計競賽、全國大學(xué)生軟件測試大賽、“泰迪杯”全國數(shù)據(jù)挖掘挑戰(zhàn)賽、CCF大數(shù)據(jù)與計算智能大賽等,通過以賽促學(xué)、實戰(zhàn)演練的方式,全面提升學(xué)生的軟件工程綜合素質(zhì)。
隨著軟件規(guī)模的增大、復(fù)雜性的增加,軟件質(zhì)量已經(jīng)成為軟件工程行業(yè)中的關(guān)注點(diǎn)。軟件測試是軟件質(zhì)量檢測手段。軟件測試涉及的內(nèi)容煩瑣,既包括軟件測試方法和技術(shù),又包含軟件測試規(guī)范和體系,而且課程知識抽象,內(nèi)容覆蓋面廣,理論知識較枯燥[14]。通過將其與全國大學(xué)生軟件測試大賽緊密結(jié)合,使學(xué)生掌握軟件測試中的基本理論、方法和技術(shù)的同時,培養(yǎng)學(xué)生較強(qiáng)的實踐動手能力,激發(fā)學(xué)生學(xué)習(xí)軟件測試的興趣,增強(qiáng)學(xué)生的軟件質(zhì)量意識。
1.軟件測試大賽
2016年首屆“全國大學(xué)生軟件測試大賽”[15]由教育部軟件工程專業(yè)教學(xué)指導(dǎo)委員會、中國計算機(jī)學(xué)會軟件工程專業(yè)委員會、中國軟件測評機(jī)構(gòu)聯(lián)盟、中國計算機(jī)學(xué)會系統(tǒng)軟件專業(yè)委員會和中國計算機(jī)學(xué)會容錯計算專業(yè)委員會在南京大學(xué)聯(lián)合舉辦。大賽旨在提高大學(xué)生的軟件質(zhì)量意識,增強(qiáng)其軟件測試能力,深化軟件工程實踐教學(xué)改革。大賽個人賽分為以下四個分項賽。
(1)開發(fā)者測試:大賽組委會提供來自開源社區(qū)的Java程序代碼,在慕測WebIDE或者Eclipse客戶端完成JUnit測試腳本。以分支覆蓋率和Bug檢測率作為評分標(biāo)準(zhǔn)。
(2)移動應(yīng)用測試:大賽組委會提供來自企業(yè)的待測移動應(yīng)用和測試需求,在慕測的WebIDE或者Eclipse客戶端完成Appium測試腳本。Appium腳本的測試需求對象覆蓋率和眾包測試的Bug檢測率為評分標(biāo)準(zhǔn)。
(3)嵌入式測試:大賽組委會提供基于互聯(lián)網(wǎng)的模擬嵌入式測試任務(wù),對模擬嵌入式應(yīng)用程序進(jìn)行基于工具的自動化黑盒測試,在慕測WebIDE或者客戶端完成ETest測試腳本。使用ETest作為測試環(huán)境,被測件為嵌入式教學(xué)工具箱中的嵌入式軟件。
(4)Web安全測試:大賽組委會提供一系列不同知識點(diǎn)的Web安全測試靶機(jī),參賽選手通過解題獲得相應(yīng)題目中的flag(旗標(biāo)文件),并提交至評分系統(tǒng),評分系統(tǒng)審核確認(rèn)flag正確后自動將積分傳遞給選手,選手以此獲得相應(yīng)的分值。根據(jù)賽題的得分點(diǎn)和得分時間綜合計算比賽成績。
軟件測試大賽雖然以軟件測試為主題,但僅以軟件工程課程中所涉及的軟件測試內(nèi)容來備戰(zhàn)是遠(yuǎn)遠(yuǎn)不夠的。傳統(tǒng)課程教學(xué)重點(diǎn)在于傳授理論知識,是基礎(chǔ)部分,比賽考查的是專項的實戰(zhàn)能力,是升華部分。因此,要結(jié)合學(xué)生特點(diǎn)以及軟件工程課程的實施情況,制訂緊貼競賽實戰(zhàn)、提升學(xué)生全面測試能力的方案??煞謩e從理論強(qiáng)化、專題培訓(xùn)、實戰(zhàn)演練等方面開展針對軟件測試大賽的專項能力培養(yǎng),將基礎(chǔ)理論與實際比賽案例相結(jié)合,以此調(diào)動學(xué)生對課程的學(xué)習(xí)興趣和學(xué)習(xí)積極性。
2.強(qiáng)化理論
軟件測試大賽雖然注重對學(xué)生測試實踐能力的考查,但軟件測試?yán)碚撝R是基礎(chǔ),因此要強(qiáng)化理論基礎(chǔ),具體包括以下幾方面。
(1)基礎(chǔ)理論:軟件測試基本原理、軟件質(zhì)量模型、驗證與確認(rèn)、錯誤、失效、缺陷、軟件測試、軟件調(diào)試、測試用例、測試用例集、測試充分性、測試腳本、測試流程(單元測試、集成測試、系統(tǒng)測試、驗收測試)。
(2)測試用例設(shè)計方法:黑盒測試(等價類劃分、邊界值分析、錯誤推測法、場景分析法、因果圖法、判定表法、正交試驗法、功能圖法)、白盒測試(基本路徑法、邏輯覆蓋法、循環(huán)覆蓋、Z路徑覆蓋、控制流覆蓋、數(shù)據(jù)流覆蓋)、靜態(tài)測試、動態(tài)測試等。
(3)測試用例編寫:測試用例標(biāo)識、測試用例類別、前置條件、測試步驟、測試輸入、預(yù)期輸出結(jié)果等。
軟件測試基礎(chǔ)理論部分以相應(yīng)的測試案例為授課背景,增加學(xué)生對軟件測試的感性認(rèn)識和學(xué)習(xí)興趣,讓學(xué)生形成分析測試需求、設(shè)計測試用例、發(fā)現(xiàn)缺陷、分析缺陷并提交內(nèi)容明確且有效的缺陷報告的思考模式。
3.專題培訓(xùn)
由于軟件測試大賽的個人賽由4個分項賽組成,每個分項賽有各自考查的測試類型及對應(yīng)的測試工具,因此在學(xué)生掌握基礎(chǔ)的測試?yán)碚撝?,便可進(jìn)行每個分項賽的專項練習(xí)。每個分項專題主要包含以下知識點(diǎn)。
(1)開發(fā)者測試:java基礎(chǔ)、junit測試、單元測試、測試用例設(shè)計、邏輯覆蓋準(zhǔn)則、變異測試(用于評估測試用例集測試充分性)、mujava變異測試、PITest變異測試。
(2)移動應(yīng)用測試:Selenium、Appium自動化測試框架、UIAutomation、眾包測試。
(3)嵌入式測試:Python基礎(chǔ)、嵌入式操作系統(tǒng)基礎(chǔ)、嵌入式硬件基礎(chǔ)、嵌入式軟件測試基礎(chǔ)、ETest測試實戰(zhàn)演練——測試環(huán)境搭建(新建測試方案、構(gòu)建仿真模型、編寫接口協(xié)議、配置規(guī)劃目錄、設(shè)計測試腳本、設(shè)計測試監(jiān)控、測試執(zhí)行及結(jié)果分析)、測試需求分析、測試用例設(shè)計、測試腳本編寫、測試運(yùn)行與調(diào)試、bug報告。
(4)Web安全測試:Web漏洞掃描、SQL注入、程序逆向、漏洞挖掘、Web滲透、加密解密、數(shù)據(jù)隱藏、遠(yuǎn)程利用、Appscan、Wvs、Bursuite等。
4.實戰(zhàn)演練
軟件測試大賽的選題都是來源于真實的企業(yè)案例,充分利用大賽預(yù)賽及往年賽題,學(xué)生可以熟悉比賽環(huán)境及賽點(diǎn),并通過分析賽題測試需求,在慕測平臺[15]用慕測WebIDE模擬參賽,進(jìn)行實戰(zhàn)演練。這種實戰(zhàn)演練的方式更能激發(fā)學(xué)生的求知欲,鍛煉其測試實戰(zhàn)能力。
借助慕測平臺的練習(xí)題功能,教師從題庫中選擇相應(yīng)的分項賽練習(xí)題(題庫中包含有往屆的分區(qū)賽與總決賽題目),建立不同分項賽的練習(xí)群。學(xué)生選擇進(jìn)入對應(yīng)分項賽的練習(xí)群,自主模擬練習(xí)。同時,教師可以分析學(xué)生的練習(xí)情況,并對其中的常見失分點(diǎn)進(jìn)行分析講解。
慕測平臺可以針對每個分項賽的學(xué)生進(jìn)行模擬出卷,學(xué)生需要在模擬答卷時間內(nèi)下載模擬案例題目,分析測試需求、配置測試環(huán)境、設(shè)計測試用例、編寫測試腳本、執(zhí)行測試、針對需求判定測試結(jié)果、及時發(fā)現(xiàn)缺陷,最后還需提交詳盡的測試用例設(shè)計報告及缺陷報告。學(xué)生通過模擬比賽,完整體驗了比賽的全部流程,提高了綜合測試能力,增強(qiáng)了參賽信心。
五、結(jié)語
構(gòu)建具備完整性與先進(jìn)性的軟件工程課程體系,能使學(xué)生建立合理、全面的專業(yè)知識結(jié)構(gòu)。根據(jù)軟件工程學(xué)科課程理論抽象、實踐性強(qiáng)的特點(diǎn),提出了全方位教學(xué)法,打牢學(xué)生軟件工程學(xué)科課程基礎(chǔ)。以賽促學(xué)方法,從理論強(qiáng)化、專題培訓(xùn)、實戰(zhàn)演練等方面開展針對專項能力的培養(yǎng),有利于全面提升學(xué)生的軟件工程綜合素質(zhì)。
軟件工程課程體系中的軟件測試課程內(nèi)容豐富、知識量大、實踐性強(qiáng),可結(jié)合全國大學(xué)生軟件測試大賽,將軟件測試基礎(chǔ)知識靈活應(yīng)用于比賽項目中。學(xué)生通過參賽獲得了對軟件測試的深層次理解,學(xué)習(xí)效果顯著。
[參考文獻(xiàn)]
[1] 王秀珍,汪群山.關(guān)于軟件工程學(xué)科建設(shè)的思考[J].中國校外教育,2012(21):157+168.
[2] 羅鐘鉉.把準(zhǔn)雙一流建設(shè)坐標(biāo) 推進(jìn)軟件工程學(xué)科發(fā)展:大連理工大學(xué)校長助理羅鐘鉉教授專訪[J].計算機(jī)教育,2016(11):1-7.
[3] 岑宇森,熊芳敏.軟件工程課程項目教學(xué)法研究[J].計算機(jī)教育,2009(21):83-85.
[4] 涂飛,張小川,王森.軟件工程專業(yè)學(xué)生職業(yè)素養(yǎng)培養(yǎng)研究與實踐[J].教育教學(xué)論壇,2018(11):136-138.
[5] 鄭煒,王文鵬,胡德生,等.基于MOOC的軟件測試課程教學(xué)建設(shè)[J].計算機(jī)教育,2017(1):31-37.
[6] 王法勝,熊耀華,康玲,等.TOPCARES-CDIO引導(dǎo)的軟件測試課程設(shè)計[J].軟件工程,2016(10):60-62.
[7] Software Engineering Body of Knowledge(SWEBOK) | IEEE
Computer Society[EB/OL].[2018-09-13].https://www.computer.org/education/bodies-of-knowledge/software-engineering#__NO_LINK_PROXY__.
[8] 李雯睿,張鵬程,楊種學(xué).基于主動學(xué)習(xí)策略的軟件測試教學(xué)方法初探[J]. 教育與教學(xué)研究,2012(8):54-57.
[9] 林若欽.項目驅(qū)動軟件測試實驗教學(xué)改革的意義與方案探討[J].價值工程,2017(3):226-228.
[10] 陳翔,鞠小林.卓越計劃驅(qū)動下的軟件測試技術(shù)課程教學(xué)改革[J].計算機(jī)教育,2013(13):14-17+21.
[11] 楊秋輝,洪玫,郭兵,等.軟件測試課程實踐教學(xué)改革研究[J].計算機(jī)教育,2016(2):106-109.
[12] 蔣湘濤,辛動軍,黃輝,等.學(xué)科競賽促進(jìn)軟件工程專業(yè)實踐教學(xué)模式探索[J].軟件工程,2018(4):58-60.
[13] 卜令瑞,陳靜.基于技能大賽的《軟件測試》課程設(shè)計[J].信息技術(shù)與信息化,2017(11):32-34.
[14] 李繪卓,唐峻,范勇.基于敏捷測試的軟件測試實踐教學(xué)[J].計算機(jī)教育,2017(3):155-159.
[15] 2018全國大學(xué)生軟件測試大賽[EB/OL].[2018-09-13]http://www.mooctest.org.
[責(zé)任編輯:龐丹丹]