孫昌愛
(北京科技大學(xué) 計算機(jī)與通信工程學(xué)院,北京100083)
軟件工程學(xué)科發(fā)展迅速,具有理論與實踐相結(jié)合特點,要求計算機(jī)專業(yè)本科生應(yīng)具備較強的軟件工程動手能力?!袄蠋熤v、學(xué)生聽”傳統(tǒng)的理論教學(xué)模式,不利于高質(zhì)量計算機(jī)專業(yè)人才的培養(yǎng)[1]。近年來,筆者講授了多門軟件工程類課程,基于課程考核與教學(xué)反饋意見發(fā)現(xiàn),盡管絕大多數(shù)學(xué)生能夠理解軟件開發(fā)的原理與方法,但運用起來仍然有困難。近年來企業(yè)招聘的反饋結(jié)果表明,計算機(jī)類專業(yè)的畢業(yè)生(特別是本科生)動手能力比較欠缺,一個直接的例證是90%以上的剛就業(yè)的本科生需要近半年的培訓(xùn)才能上崗。另一方面,筆者連續(xù)多年參與了計算機(jī)專業(yè)研究生入學(xué)復(fù)試工作,基于編程工作量方面的作答情況,感到考生在本科階段的編程訓(xùn)練不足(編碼量少于5千行代碼)。由于軟件工程動手能力方面較為欠缺,計算機(jī)專業(yè)畢業(yè)生無法滿足工業(yè)界需求,也影響了他們在研究生階段的科研水平。
軟件開發(fā)是一種構(gòu)造性活動,需要很強的創(chuàng)造性思維[2]。軟件工程的基本原理來自于“最佳實踐”,不同于數(shù)學(xué)學(xué)科中“公理”、也不同于物理學(xué)科中的各種“定則”。軟件工程學(xué)科的新特點對計算機(jī)專業(yè)本科生培養(yǎng)提出了新的挑戰(zhàn)。特別值得指出的是,軟件工程動手能力培養(yǎng)是計算機(jī)專業(yè)本科生培養(yǎng)中的一個難題。
以單元測試中常用的語句覆蓋測試技術(shù)為例,語句覆蓋技術(shù)的基本原理如下:對于給定的某個待測程序P(通常是程序模塊),如果某個測試用例集中TS的測試用例能保證P中所有可執(zhí)行的語句至少執(zhí)行一次,則稱TS符合語句覆蓋準(zhǔn)則。顯然,理解語句覆蓋測試技術(shù)的基本原理并不困難,但在實際中有效運用該技術(shù)并不簡單。具體說來:①由于程序中可能存在不可達(dá)路徑,如何有效識別這些路徑并排除相關(guān)的不可達(dá)語句,是正確實施語句覆蓋測試的前提;②對于一個較大的程序(1 000行以上)進(jìn)行語句覆蓋測試時,通常離不開測試工具的支持;采用人工的方式追蹤與記錄每個測試用例覆蓋的語句集,不僅效率低而且容易出錯;③工業(yè)界軟件測試實踐表明,采用隨機(jī)測試方法對大規(guī)模軟件進(jìn)行語句覆蓋測試時,語句覆蓋率并不高(通常低于20%)。筆者在講授單元測試時布置一個作業(yè),要求學(xué)生對一個50行左右的程序進(jìn)行語句覆蓋測試。遺憾的是,只有極少數(shù)學(xué)生能正確、高效地完成該作業(yè)。未能完成該作業(yè)的部分原因是無法運用合適的單元測試工具。
軟件工程動手能力的培養(yǎng)應(yīng)從兩個方面著手:①軟件開發(fā)實例的重復(fù)實踐,可以使學(xué)生有效地理解與掌握“最佳實踐”;②通過軟件工程工具的運用,促進(jìn)學(xué)生理解與把握工具背后的軟件工程方法學(xué)思想與原理。事實上,由于軟件的復(fù)雜性,軟件開發(fā)活動通常離不開軟件工程工具的支撐,要想有效運用軟件工程工具離不開對其背后的方法學(xué)的把握。圍繞如何在軟件開發(fā)中有意識地運用軟件工程原理,如何系統(tǒng)地分析、設(shè)計、測試構(gòu)造出合格的軟件系統(tǒng),如何將軟件工程工具引入到軟件開發(fā)活動等重要問題,可以從人才培養(yǎng)定位、教學(xué)內(nèi)容、授課手段、課程考核方式等方面出發(fā),解決計算機(jī)專業(yè)本科生的軟件工程動手能力培養(yǎng)難題。
(1)教學(xué)模式改革的準(zhǔn)備。以各種方式調(diào)研國內(nèi)、外多所高校在軟件工程課程教學(xué)方面的一些做法;參加全國軟件與應(yīng)用學(xué)術(shù)會議軟件工程教學(xué)研討會,與國內(nèi)同行交流軟件工程方面先進(jìn)教學(xué)經(jīng)驗;分析與借鑒荷蘭格羅寧根大學(xué)軟件分析與設(shè)計本科生課程教學(xué)模式[3];全程觀摩美國普渡大學(xué)軟件工程本科生課程與軟件測試研究生課程教學(xué)[4]。通過不同層次高校調(diào)研、同行教學(xué)經(jīng)驗交流、國際著名大學(xué)軟件工程課程教學(xué)觀摩,為軟件工程動手能力培養(yǎng)的課程教學(xué)改革提供理論依據(jù)與經(jīng)驗參考。
(2)專業(yè)培養(yǎng)計劃修訂。加強軟件工程動手能力培養(yǎng)的頂層設(shè)計,對計算機(jī)科學(xué)與技術(shù)專業(yè)本科生培養(yǎng)計劃進(jìn)行修訂。特別地,在2017版計算機(jī)科學(xué)與技術(shù)專業(yè)培養(yǎng)計劃中將軟件工程由選修課課程改為必修課程,與國際通用的計算機(jī)專業(yè)培養(yǎng)方案無縫接軌;增加軟件工程課程設(shè)計部分,增強軟件工程原理與方法的運用。
(3)軟件工程類課程教學(xué)大綱調(diào)整。從教學(xué)內(nèi)容方面加強軟件工程動手能力的培養(yǎng)規(guī)劃,對多門軟件工程課程的教學(xué)大綱進(jìn)行調(diào)整。特別地,在軟件工程、軟件測試等多門軟件工程課程中增加案例實施的教學(xué)內(nèi)容,在軟件測試課程增加軟件工程工具應(yīng)用的教學(xué)內(nèi)容。從2014年秋學(xué)期開始,在軟件測試本科生課程教學(xué)中首次嘗試案例實施與用具應(yīng)用相結(jié)合的教學(xué)模式,部分學(xué)時用于軟件測試工具應(yīng)用的實踐教學(xué)。此后,在其他多門軟件工程類課程教學(xué)中推廣案例實施與工具應(yīng)用相結(jié)合的教學(xué)模式。
(4)軟件工程實驗室建設(shè)與完善。完善軟件工程實驗室建設(shè),為提升計算機(jī)專業(yè)本科生軟件工程動手能力提供環(huán)境支撐。我們購置了多種軟件開發(fā)與測試工具,包括IBM公司研制的項目管理工具、建模工具、測試工具、版本配置工具,邀請IBM技術(shù)人員對軟件工程課程本科生進(jìn)行了測試工具和版本配置工具培訓(xùn)。軟件工程實驗室有力支撐了各門軟件工程課程的實踐教學(xué),同時還鼓勵本科生在實驗室開展科技創(chuàng)新活動或完成本科畢設(shè)。
案例實施與工具應(yīng)用相結(jié)合的軟件工程動手能力培養(yǎng)的教學(xué)模式契合了近年來國內(nèi)外計算機(jī)專業(yè)人才培養(yǎng)改革的趨勢。一方面,我國計算機(jī)教育界開始關(guān)注與推廣案例教學(xué),中國計算機(jī)學(xué)會軟件工程專委會主辦的“2018年全國軟件與應(yīng)用學(xué)術(shù)年會”上首次舉辦了“CCF-SE軟件工程案例征集及比賽”活動;另一方面,美國普渡大學(xué)非常注重計算機(jī)專業(yè)學(xué)生的軟件工程動手能力培養(yǎng),該校從2015開始在計算機(jī)本科生培養(yǎng)計劃中增設(shè)軟件工具課程,要求學(xué)生了解與掌握常見的軟件工具。
在軟件測試、軟件工程與課程設(shè)計等本科生課程教學(xué)中進(jìn)行案例實施與工具應(yīng)用相結(jié)合的教學(xué),不僅可以增加案例實施與軟件工具應(yīng)用教學(xué)內(nèi)容,而且能夠促進(jìn)軟件工程原理與方法的掌握與高效運用。
軟件測試課程教學(xué)中,在系統(tǒng)講授軟件測試的概念、原理、技術(shù)與過程的基礎(chǔ)上,增加案例實施與測試工具應(yīng)用的教學(xué)內(nèi)容。以“字符串正反向搜索程序”等案例探討等價類劃分、邊界值分析等黑盒測試技術(shù)的運用;以“西門子程序集”為案例探討語句覆蓋和判定覆蓋、基本路徑測試、控制結(jié)構(gòu)測試、數(shù)據(jù)流測試、變異測試等白盒測試技術(shù)的運用。特別地,課程教學(xué)中介紹開源測試工具JUnit,并要求學(xué)生運用JUnit進(jìn)行語句覆蓋和判定覆蓋測試。
軟件工程與課程設(shè)計課程教學(xué)分為軟件工程理論教學(xué)與課程設(shè)計兩個階段。軟件工程理論教學(xué)階段,以通用ATM系統(tǒng)的開發(fā)為案例初步理解與運用軟件工程原理,要求遵循軟件工程的規(guī)范與過程(結(jié)構(gòu)化方法或面向?qū)ο蠓椒ǎ┩瓿稍撓到y(tǒng)的開發(fā),提交一份規(guī)范的技術(shù)報告,包括需求分析、總體設(shè)計、關(guān)鍵模塊的詳細(xì)設(shè)計、測試與項目管理;建議采用UML表示法,并使用常見的建模工具(如Rational Rose);設(shè)計測試方案,并說明如何實施測試;初步估算軟件規(guī)模與工作量,并描述估算依據(jù);提供可行的進(jìn)度安排(以周為單位)。
軟件工程課程設(shè)計階段,結(jié)合軟件工具使用、高效完成某個案例系統(tǒng)的開發(fā)。可供選擇的案例系統(tǒng)包括:①基于B/S結(jié)構(gòu)的會議室教室預(yù)約管理系統(tǒng):以某個學(xué)院會議室/教室預(yù)約為對象,分析、設(shè)計并實現(xiàn)一個預(yù)約管理的網(wǎng)絡(luò)電子化系統(tǒng),方便教師、學(xué)生進(jìn)行會議室、教室的借用。該系統(tǒng)應(yīng)具有一定的實用性,考慮基本的權(quán)限管理,考慮數(shù)據(jù)存儲如何滿足可擴(kuò)展性需求;②人臉簽到(“刷臉”)系統(tǒng):以本班同學(xué)的人臉庫為基礎(chǔ),設(shè)計一個簽到系統(tǒng),包括手機(jī)APP設(shè)計與實現(xiàn)、數(shù)據(jù)庫設(shè)計、考勤管理、是否需要服務(wù)器等。應(yīng)考慮用戶管理、用戶交互、數(shù)據(jù)安全等基本需求;③圖書收集與查詢管理系統(tǒng):以豆瓣、當(dāng)當(dāng)、亞馬遜的中文圖書為對象,把相應(yīng)的圖書元信息(題目、作者、出版社、圖書簡介、目錄等)及相關(guān)社會信息(標(biāo)簽、打分、評論等)爬取下來,進(jìn)行整理與入庫,然后設(shè)計并實現(xiàn)相應(yīng)的圖書信息查詢與管理系統(tǒng)。軟件工程課程設(shè)計階段的課程考核放棄傳統(tǒng)的考試方式,采用技術(shù)報告與口頭答辯的方式考核案例實施完成情況。
我校計算機(jī)科學(xué)與技術(shù)、信息安全、物聯(lián)網(wǎng)工程3個專業(yè)按照計算機(jī)專業(yè)大類招生,每年招收本科生240人左右。案例實施與工具應(yīng)用相結(jié)合的教學(xué)模式改革的相關(guān)舉措直接影響了計算機(jī)專業(yè)本科生,有助于進(jìn)一步提升計算機(jī)類專業(yè)本科生的軟件工程動手能力。近年來,我校多名計算機(jī)專業(yè)學(xué)生在中國大學(xué)生計算機(jī)設(shè)計大賽、全國大學(xué)生物聯(lián)網(wǎng)創(chuàng)新創(chuàng)業(yè)大賽、全國大學(xué)生軟件測試大賽、全國服務(wù)創(chuàng)新大賽、全國軟件原型競賽以及一系列國際競賽中獲獎。在教育部高等教育軟件工程專業(yè)教學(xué)指導(dǎo)委員會主辦的2016年全國大學(xué)生軟件測試大賽中,我校一名計算機(jī)專業(yè)本科生進(jìn)入了全國總決賽,其突出的表現(xiàn)得到軟件工程領(lǐng)域?qū)<业母叨日J(rèn)可。我校計算機(jī)專業(yè)本科生積極參與創(chuàng)新創(chuàng)業(yè)活動,“秋菠網(wǎng)”“賞金獵人”“天兵天將”等一批軟件創(chuàng)業(yè)項目獲得天使基金資助。一名本科生開發(fā)了多個iOS游戲,被邀請參加蘋果公司2016年全球開發(fā)者大會。通過參加軟件工程類科技競賽與創(chuàng)新創(chuàng)業(yè)活動,培養(yǎng)與鍛煉了計算機(jī)專業(yè)學(xué)生的創(chuàng)新能力與實踐能力。
基于5年來的案例實施與工具應(yīng)用相結(jié)合教學(xué)模式改革的實踐,為使該教學(xué)模式更加富有成效,做到如下4點非常關(guān)鍵。
(1)教材建設(shè)。在理解軟件工程的基本原理的基礎(chǔ)上,如何在不同類型的軟件開發(fā)項目上合理地運用這些原理非常具有挑戰(zhàn)性。特別地,在沒有案例引導(dǎo)與參考的前提下,讓尚不具備大量編程經(jīng)驗的本科生真正地掌握與運用軟件工程原理則更加困難。以軟件工程課程為例,不同出版社、不同作者出版了近百種版本的中文教材。絕大多數(shù)的教材側(cè)重介紹軟件工程的概念、過程、原理、方法,僅有部分教材能夠結(jié)合一些案例討論軟件工程原理與方法的應(yīng)用,部分教材僅僅簡單介紹了一些軟件工具的特色與功能。由此可見,教材建設(shè)將是影響該教學(xué)模式改革的關(guān)鍵問題之一。
(2)案例開發(fā)。部分教材介紹的案例通常較為簡單與陳舊,與實際的軟件項目差別較大、而且不夠豐富。解決案例開發(fā)問題的一個有效途徑是開發(fā)一個公共平臺(類似于開源代碼平臺),收集與整理各個高校開發(fā)的軟件工程案例。2018年CCF-SE軟件工程案例征集及比賽,可謂是對該問題的一次有益嘗試。
(3)工具教學(xué)。軟件項目通常牽涉多種人員、多個步驟、多種技術(shù)、復(fù)雜的管理過程,相關(guān)的技術(shù)與管理都離不開軟件工具的支持。針對相同的技術(shù)與管理需求,則存在不同類型與不同版本的軟件工具。例如,支持單元測試的軟件工具就多達(dá)數(shù)十種。那么,如何選擇軟件工具、選擇何種軟件工具是進(jìn)行該教學(xué)模式改革的一個不可回避的問題。
(4)教學(xué)管理與環(huán)境。與傳統(tǒng)教學(xué)模式相比,案例實施與工具應(yīng)用相結(jié)合的教學(xué)模式對授課教師提出了更高的要求,也增加了授課教師的工作量。一方面,僅懂軟件工程原理而缺乏軟件開發(fā)經(jīng)驗的教師很難勝任此類教學(xué)模式;另一方面,授課教師不僅需要開發(fā)案例,還需要指導(dǎo)學(xué)生在案例實施過程中遇到各種問題。由于案例實施過程中存在頻繁、深度的交互,上述教學(xué)模式比較適合小班教學(xué)(我國僅有部分高校具備這樣的條件[3])。此外,多種軟件工具的購置與維護(hù)則牽涉到實驗環(huán)境建設(shè)與教師配備問題。
我校較早設(shè)置了計算機(jī)科學(xué)與技術(shù)、信息安全等計算機(jī)類本科專業(yè),相關(guān)專業(yè)培養(yǎng)方案中開設(shè)了軟件測試、軟件工程、軟件課程設(shè)計、軟件應(yīng)用實踐等軟件工程類課程。在中央級普通高校改善基本辦學(xué)條件專項資金的支持下,2013年初步建成了軟件工程專業(yè)實驗室,購置了軟件配置管理工具、軟件測試工具、軟件建模工具等。鑒于計算機(jī)類專業(yè)本科生在軟件工程動手能力方面的不足,在北京科技大學(xué)本科教育教學(xué)改革與研究面上項目“案例實施與工具應(yīng)用相結(jié)合的軟件工程動手能力培養(yǎng)探索與實踐”的資助下,筆者探索了如何培養(yǎng)計算機(jī)類專業(yè)本科生的軟件工程動手能力,嘗試了案例實施與工具應(yīng)用相結(jié)合的計算機(jī)專業(yè)本科生軟件工程動手能力培養(yǎng)的教學(xué)改革,在軟件測試、軟件工程與課程設(shè)計等多門課程教學(xué)中進(jìn)行了實踐。案例實施與工具應(yīng)用相結(jié)合的課程教學(xué)模式通過在軟件工程類課程教學(xué)中增加案例實施,增強學(xué)生對軟件工程原理的理解與掌握;通過增加軟件工具應(yīng)用,促進(jìn)學(xué)生對現(xiàn)代軟件工程方法的把握與高效運用。案例實施與工具應(yīng)用相結(jié)合課程教學(xué)模式實踐與舉措,對于提升我國計算機(jī)專業(yè)本科生軟件工程動手能力有重要的借鑒意義。