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