吉雪蕓,譚火彬,蔡為東
(1.保定學(xué)院 數(shù)據(jù)科學(xué)與軟件工程學(xué)院,河北 保定 071000;2.北京航空航天大學(xué) 軟件學(xué)院,北京 100191;3.北京趣拿軟件科技有限公司,北京 100089)
軟件測試是一門實(shí)踐性很強(qiáng)的軟件工程專業(yè)的主干課程[1],從理論知識的角度,測試是軟件工程的一部分;從工作實(shí)踐的角度,測試是軟件開發(fā)的一個(gè)環(huán)節(jié);軟件測試是一門課程,是一個(gè)領(lǐng)域,也是一份職業(yè)。從發(fā)展前景來看,在互聯(lián)網(wǎng)+時(shí)代,我國計(jì)算機(jī)軟件行業(yè)人才缺口高達(dá)60萬,其中就包括開發(fā)、測試、運(yùn)維等崗位,作為衡量或者保障軟件質(zhì)量的重要手段,軟件測試技術(shù)得到迅猛的發(fā)展,市場對軟件測試人才的需求越來越大,企業(yè)需要更多對口資源的人才,尤其是高度職業(yè)化、專業(yè)化的測試人員[2],因此,加強(qiáng)軟件測試人才的培養(yǎng)成為高校相關(guān)課程的主要教學(xué)目標(biāo)。
軟件測試覆蓋的領(lǐng)域很廣,從概念理論的角度,有軟件測試基本理論、黑盒測試和白盒測試等;從市場需求的角度,常用的有功能測試、自動(dòng)化測試和性能測試等;從開發(fā)流程的角度,有需求測試、單元測試、系統(tǒng)測試和敏捷測試等;從技能點(diǎn)的角度,有測試用例的撰寫、缺陷報(bào)告的撰寫、自動(dòng)化測試工具的操作等一系列實(shí)用技能。最重要的,還是軟件測試整體技術(shù)的把握和應(yīng)用[3]。高校里沿用的教學(xué)方法,大多屬于理論概念的講述,雖然理論是實(shí)踐的基礎(chǔ),但是和市場需求未免脫節(jié);雖有將理論應(yīng)用于實(shí)踐的環(huán)節(jié),也只是針對知識點(diǎn)的應(yīng)用,對軟件測試整體把握并無多大作用,加上軟件開發(fā)技術(shù)的更新?lián)Q代,測試技術(shù)日新月異。一個(gè)測試工程師要有堅(jiān)實(shí)的理論基礎(chǔ),也要有必要的從業(yè)能力。畢業(yè)生兼有理論知識和實(shí)踐技能,是高校育人和企業(yè)用人的目標(biāo)。
為了激發(fā)學(xué)生的學(xué)習(xí)興趣,鍛煉學(xué)生解決實(shí)際問題的能力,促進(jìn)學(xué)生就業(yè),為市場培養(yǎng)合格的軟件工程人才,高校以能力為導(dǎo)向的軟件測試課程研究應(yīng)從行業(yè)、理念、模式、環(huán)節(jié)等各方面入手完成以下目標(biāo):①明確教學(xué)任務(wù),總結(jié)職業(yè)技能;②調(diào)整教學(xué)內(nèi)容,實(shí)現(xiàn)知識與技能的融合;③豐富授課形式,借鑒企業(yè)模式。
經(jīng)過師生在軟件公司進(jìn)行調(diào)研、見習(xí)和教學(xué)大綱的把握,確定了包括熟悉測試規(guī)范、制定測試需求、擬定測試用例、執(zhí)行測試過程和撰寫文檔等在內(nèi)的一系列職業(yè)技能。一般軟件測試的工作流程為測試需求分析、撰寫測試文檔、設(shè)計(jì)測試用例、執(zhí)行測試、撰寫測試報(bào)告和測試總結(jié)。有的公司要求測試人員集體參與全部工作,有的公司則將分工細(xì)化到每個(gè)測試員工。無論哪種形式,都要求測試工程師具有良好的分析需求能力、溝通能力、理解和分析問題能力,再加上扎實(shí)的理論基礎(chǔ)和過硬的技術(shù)水平。如何提高學(xué)生的上述能力,實(shí)現(xiàn)與企業(yè)的對接,成為測試課程的主要教學(xué)任務(wù)[4]。
軟件測試課程的內(nèi)容包含概念、技能和規(guī)范,選取的一部分內(nèi)容見表1。
表1 軟件測試部分教學(xué)內(nèi)容
從1到4,是一個(gè)由點(diǎn)到面的過程,1和2涉及的概念相對分散,需要學(xué)生花時(shí)間去記憶。3和4更強(qiáng)調(diào)整體能力。
理論是基礎(chǔ),實(shí)踐出真知。為了將分散的知識點(diǎn)、技能點(diǎn)轉(zhuǎn)化成整體實(shí)踐能力,摒棄了表1中從1到4按階段實(shí)施教學(xué)的安排,將教學(xué)內(nèi)容用模塊的形式加以組織,每個(gè)模塊都由理論知識、技能或規(guī)范和案例構(gòu)成,教師提前安排理論部分的預(yù)習(xí),課堂上用提問的方式引出技能點(diǎn),解決學(xué)生疑問,以案例的形式加深對理論的理解、規(guī)范的熟悉和技能的掌握。教學(xué)案例選用由淺入深,最后形成螺旋式的軟件測試教學(xué)環(huán)節(jié)。
表2中列舉了5個(gè)模塊的教學(xué)內(nèi)容。
表2 軟件測試教學(xué)模塊
需要說明的是,重要的理論概念須進(jìn)行合理地穿插,比如黑盒測試,在之前的模塊中已經(jīng)出現(xiàn)過,在后續(xù)模塊中再次回歸;而每個(gè)模塊有各自的重點(diǎn)概念和技能。同樣地,測試用例的設(shè)計(jì)和撰寫也是每個(gè)模塊的必修環(huán)節(jié),這一技能會隨著不同的概念、場景和應(yīng)用反復(fù)錘煉,如在“測試的種類1”模塊,教學(xué)內(nèi)容安排見表3。
作為一門和實(shí)踐活動(dòng)緊密結(jié)合的課程,在介紹常用測試技術(shù)的時(shí)候,需要代入場景,學(xué)生才能深入理解。從這一角度來看,學(xué)生能力的培養(yǎng),更需要企業(yè)工程測試人員的參與和引領(lǐng)。比如敏捷測試,由軟件測試工程師向?qū)W生進(jìn)行講解,學(xué)生的接納性更高。因此,企業(yè)級項(xiàng)目測試人員參與到教學(xué)環(huán)節(jié)中是必要的。
表3 測試種類1教學(xué)內(nèi)容
校企合作已經(jīng)是軟件類課程必經(jīng)之路,主要途徑有:通過企業(yè)工作場景的還原,接觸具體企業(yè)測試項(xiàng)目,學(xué)生的職業(yè)素養(yǎng)和能力可以得到提高。比如保定學(xué)院數(shù)軟學(xué)院將某企業(yè)實(shí)訓(xùn)加入實(shí)踐課程,使學(xué)生了解到軟件開發(fā)設(shè)計(jì)模式的實(shí)用性;將企業(yè)工程師請入課堂,進(jìn)行案例講解,教學(xué)內(nèi)容可以雙方共同組織,也可以由企業(yè)人員制定。比如北京航空航天大學(xué)軟件學(xué)院的軟件工程課程,最后兩節(jié)大課就是由來自阿里達(dá)摩院的架構(gòu)師和去哪兒網(wǎng)的測試經(jīng)理完成教學(xué)任務(wù)。有經(jīng)驗(yàn)的測試工程師,會敏銳地捕捉到學(xué)生在實(shí)踐中存在的盲區(qū),向?qū)W生傳授“一般情況下,此類問題應(yīng)該如何解決”或者“應(yīng)該有哪些思路”,使學(xué)生進(jìn)一步認(rèn)識測試的重要性,萌發(fā)職業(yè)興趣,產(chǎn)生從業(yè)欲望。即便是沒有企業(yè)入駐,也可參考企業(yè)中的工作模式,采用項(xiàng)目驅(qū)動(dòng)的團(tuán)隊(duì)管理方法,模擬企業(yè)工作場景,例如,Scrum是目前企業(yè)常見的開發(fā)方[5],同時(shí)也強(qiáng)調(diào)測試和開發(fā)的同步性,將Scrum工作方法引入到教學(xué)中,即將學(xué)生分成若干團(tuán)隊(duì),每隊(duì)6人,測試經(jīng)理1人,測試團(tuán)隊(duì)5人。每個(gè)角色都有各自的職責(zé),協(xié)同工作。課堂開始,教師提出問題或工作場景,團(tuán)隊(duì)討論后擬定測試需求,由測試經(jīng)理撰寫測試方案,分配任務(wù),執(zhí)行任務(wù),隨著方案細(xì)化,團(tuán)隊(duì)將新的問題轉(zhuǎn)換為新的需求,如此重復(fù),直到課堂結(jié)束。這里的課堂,指的是課上課下一個(gè)整體,教師在課上課下進(jìn)行指點(diǎn),直到學(xué)生需求結(jié)束。
每個(gè)模塊結(jié)束的時(shí)候,每個(gè)團(tuán)隊(duì)有一份教師評價(jià)、一份自我評價(jià)以及一份同行評價(jià)(即同學(xué)評價(jià))。教師評價(jià)主要從概念的理解、技能的運(yùn)用給出評價(jià);學(xué)生主要從自身欠缺和自我提升方面做出自我評價(jià);同行評價(jià)則在自我評價(jià)的基礎(chǔ)上客觀地給出建議。所有的操作都錄制了視頻。教師和學(xué)生各存一份,便于回放和為以后的教學(xué)作準(zhǔn)備。以“測試的種類1”模塊為例,其包含測試的概念、黑盒測試、功能測試、等價(jià)類劃分、測試用例、缺陷報(bào)告、錄制視頻等知識點(diǎn)或技能,分別擁有優(yōu)秀、良好、合格、不合格等評價(jià)標(biāo)準(zhǔn)。
2017秋季,筆者使用新的教學(xué)模式開啟了教研探索之路。學(xué)生們熱情飽滿,求知欲很強(qiáng),在接口測試和性能測試兩個(gè)模塊,利用空閑時(shí)間在機(jī)房裝軟件,使用工具進(jìn)行測試,并撰寫測試報(bào)告;在概念的理解和工具的使用的過程中,學(xué)生們開始萌發(fā)對軟件測試的興趣;在分組迭代討論中,學(xué)生們主動(dòng)發(fā)現(xiàn)需求中的問題,提出實(shí)現(xiàn)方案,給出測試用例,課下積極撰寫缺陷報(bào)告。期末,94位同學(xué)參與了教學(xué)評價(jià),其中對課程內(nèi)容表示很滿意的達(dá)到了83人。保定學(xué)院數(shù)軟學(xué)院15級軟件工程專業(yè)有一部分學(xué)生在2019年1月找到了與測試相關(guān)的實(shí)習(xí)工作。
隨著軟件開發(fā)過程地位的不斷提高,軟件測試已經(jīng)成為軟件工程專業(yè)的重點(diǎn)專業(yè)課程[6],在市場需求的不斷刺激下,教師主動(dòng)貼近軟件公司的用人要求,了解新技術(shù)、新模式,將靜態(tài)的理論和動(dòng)態(tài)的技能結(jié)合起來,進(jìn)行教學(xué)實(shí)踐,同時(shí)實(shí)施校企合作方案,加大學(xué)校和企業(yè)的合作力度,給學(xué)生更多接觸市場的機(jī)會,培養(yǎng)學(xué)生實(shí)踐能力,便于學(xué)生就業(yè),構(gòu)成一個(gè)良性循環(huán),為軟件測試課程和軟件工程專業(yè)其他課程的教學(xué)起到促進(jìn)、鋪墊和領(lǐng)引的作用。課程研究還有很多工作要做,比如測試平臺、測試方法層出不窮,不能一一介紹,全部掌握也不可能;學(xué)校畢竟和企業(yè)有差異,不能做到完全無縫銜接;測試是和開發(fā)結(jié)合在一起的,如何以測試平臺或工具的學(xué)習(xí)以點(diǎn)帶面,激發(fā)學(xué)生主動(dòng)學(xué)習(xí)精神等,需要我們繼續(xù)探索和改革。