国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向系統(tǒng)能力培養(yǎng)的程序設(shè)計(jì)綜合實(shí)踐課程改革

2022-03-25 04:44陳振邦徐建軍陳立前
軟件導(dǎo)刊 2022年3期
關(guān)鍵詞:測(cè)試用例評(píng)測(cè)程序設(shè)計(jì)

陳振邦,徐建軍,陳立前,沈 立

(國防科技大學(xué) 計(jì)算機(jī)學(xué)院,湖南長沙 410073)

0 引言

計(jì)算機(jī)程序設(shè)計(jì)能力是計(jì)算機(jī)相關(guān)本科專業(yè)培養(yǎng)的專業(yè)核心能力之一,也是計(jì)算思維能力的核心體現(xiàn),如何使學(xué)生具備良好的程序設(shè)計(jì)能力是計(jì)算機(jī)專業(yè)人才培養(yǎng)需要解決的核心問題之一。程序設(shè)計(jì)能力的培養(yǎng)需要在基礎(chǔ)理論知識(shí)學(xué)習(xí)的同時(shí)結(jié)合大量編程實(shí)踐,以不斷提升學(xué)生的軟件系統(tǒng)構(gòu)建能力。因此,很多高校在開設(shè)計(jì)算機(jī)程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)等課程后會(huì)再安排一門程序設(shè)計(jì)綜合實(shí)踐課,通過工程量相對(duì)較大的項(xiàng)目訓(xùn)練綜合提升學(xué)生的程序設(shè)計(jì)能力[1-2]。

國防科技大學(xué)的程序設(shè)計(jì)綜合實(shí)踐課是計(jì)算機(jī)學(xué)院各專業(yè)的基礎(chǔ)課,是計(jì)算機(jī)程序設(shè)計(jì)類課程的后續(xù)課程。課程的主要目的是通過一個(gè)較為真實(shí)的復(fù)雜工程問題,使學(xué)生完成系統(tǒng)的分析、設(shè)計(jì)和編程實(shí)現(xiàn),全面梳理學(xué)生學(xué)習(xí)的程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)和算法知識(shí),鞏固和提高其程序設(shè)計(jì)和系統(tǒng)能力,鍛煉學(xué)生獨(dú)立編程、從零開始編程以及系統(tǒng)級(jí)編程的能力,同時(shí)鍛煉其自學(xué)能力。該課程支撐計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程等專業(yè)學(xué)生達(dá)成具備計(jì)算機(jī)系統(tǒng)設(shè)計(jì)開發(fā)能力和程序設(shè)計(jì)能力的畢業(yè)要求。

程序設(shè)計(jì)綜合實(shí)踐課程的目標(biāo)定位、任務(wù)選擇、組織實(shí)施、考核等對(duì)于教學(xué)效果有重要影響。一方面,課程任務(wù)需要能夠綜合復(fù)盤學(xué)生在之前所學(xué)的知識(shí);另一方面,根據(jù)不同學(xué)校的學(xué)科背景和培養(yǎng)定位,課程任務(wù)需要能對(duì)學(xué)生進(jìn)行針對(duì)性程序設(shè)計(jì)鍛煉。在教學(xué)過程中,針對(duì)以上方面開展了3 年的改革和探索。

1 課程改革需求

具有系統(tǒng)觀的計(jì)算機(jī)專業(yè)人才培養(yǎng)是當(dāng)前關(guān)注的焦點(diǎn)[3-5]。系統(tǒng)能力是指具備計(jì)算系統(tǒng)層面的認(rèn)知和設(shè)計(jì)能力,主要包括系統(tǒng)軟硬件合理劃分能力、不同系統(tǒng)層次的抽象和封裝能力、整體系統(tǒng)性能的分析和調(diào)優(yōu)能力、各個(gè)系統(tǒng)層面的錯(cuò)誤調(diào)試和修復(fù)能力、程序的性能評(píng)估和優(yōu)化能力、面向具體應(yīng)用需求的系統(tǒng)構(gòu)建能力等[3-5]。國防科技大學(xué)計(jì)算機(jī)專業(yè)對(duì)具備系統(tǒng)能力人才的需求由來已久,特別是在大系統(tǒng)(例如巨型機(jī)、CPU、操作系統(tǒng)等)的研制過程中,具備較強(qiáng)系統(tǒng)能力的人才非常關(guān)鍵。

系統(tǒng)能力要求學(xué)生對(duì)計(jì)算機(jī)系統(tǒng)的整機(jī)概念和層次結(jié)構(gòu)具有較為深刻的理解和認(rèn)識(shí),對(duì)高級(jí)語言、指令集架構(gòu)、編譯器、鏈接器、操作系統(tǒng)、應(yīng)用程序等之間的關(guān)系具有較為深入的掌握,并且能深刻理解和權(quán)衡時(shí)空開銷、抽象和建模、并發(fā)和并行等概念,掌握現(xiàn)代計(jì)算機(jī)系統(tǒng)中最核心的技術(shù)和實(shí)現(xiàn)方法[3-5]。

國防科技大學(xué)計(jì)算機(jī)專業(yè)在程序設(shè)計(jì)課程中講授的是C 和C++語言,程序設(shè)計(jì)綜合實(shí)踐課程則安排在大三。雖然之前的課程內(nèi)容中安排了一定的程序設(shè)計(jì)時(shí)間,例如采用C/C++開發(fā)一個(gè)圖形界面程序、采用Java 或Python 開發(fā)一個(gè)安卓應(yīng)用或游戲等[6],但這些都是在應(yīng)用層面的編程實(shí)踐。雖然這些編程實(shí)踐具備一定的工程量,可以鍛煉學(xué)生的編程能力,但在學(xué)生系統(tǒng)能力、獨(dú)立編程能力、自主探索能力的培養(yǎng)上仍然沒有針對(duì)性,主要問題體現(xiàn)在以下幾個(gè)方面:①由于過度依賴于開發(fā)環(huán)境,學(xué)生對(duì)于程序編譯、鏈接、執(zhí)行等方面的理解不深,同時(shí)在程序架構(gòu)設(shè)計(jì)、優(yōu)化、調(diào)試等方面的能力仍然較弱,具有全棧開發(fā)和優(yōu)化能力的學(xué)生更是少見;②當(dāng)前互聯(lián)網(wǎng)和開源技術(shù)高速發(fā)展,代碼資源非常豐富,在提升開發(fā)效率和軟件設(shè)計(jì)能力的同時(shí),一定程度上減弱了學(xué)生從零開始設(shè)計(jì)、開發(fā)程序的能力,導(dǎo)致部分學(xué)生只能修改程序但不能自主從零開發(fā)程序,降低了其自主創(chuàng)新能力;③學(xué)生在自主學(xué)習(xí)探索方面存在不足,之前課程的大部分作業(yè)或?qū)嶒?yàn)可以通過上網(wǎng)搜索找到標(biāo)準(zhǔn)答案,如何體現(xiàn)復(fù)雜工程問題無標(biāo)準(zhǔn)解的特點(diǎn)是一個(gè)問題,如何調(diào)動(dòng)學(xué)生的課程學(xué)習(xí)積極性、激發(fā)其學(xué)習(xí)興趣也是一個(gè)問題;④學(xué)生的獨(dú)立編程能力存在不足,特別是在規(guī)模稍大的軟件開發(fā)實(shí)驗(yàn)上,通常是多人一組,存在“摸魚”現(xiàn)象;然而,一人一組的模式對(duì)課程的驗(yàn)收和過程控制也會(huì)帶來挑戰(zhàn),如何較為公平和高效地對(duì)學(xué)生編寫的代碼作出評(píng)測(cè)是急需解決的問題。

2 課程設(shè)計(jì)

在上述教學(xué)需求的驅(qū)動(dòng)下,以提升系統(tǒng)能力為目標(biāo),在程序設(shè)計(jì)綜合實(shí)踐課程方面開展了一系列改革,設(shè)計(jì)了基于匯編程序解釋器的課程任務(wù),以下分別從課程目標(biāo),任務(wù)設(shè)置、組織與要求及其他教學(xué)措施等方面闡述該門課程的設(shè)計(jì)及相應(yīng)思考。

2.1 課程對(duì)象與目標(biāo)

程序設(shè)計(jì)綜合實(shí)踐課程是計(jì)算機(jī)專業(yè)學(xué)生大三上學(xué)期的專業(yè)基礎(chǔ)課,參與課程學(xué)習(xí)的為計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程、信息安全、物聯(lián)網(wǎng)等專業(yè)的學(xué)生,之前已經(jīng)學(xué)習(xí)了計(jì)算機(jī)程序設(shè)計(jì)(C 和C++)、離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)原理等專業(yè)課。同時(shí),所有學(xué)生會(huì)在同一個(gè)學(xué)期學(xué)習(xí)操作系統(tǒng),部分學(xué)生會(huì)學(xué)習(xí)編譯原理。該課程的主要目標(biāo)是通過一個(gè)復(fù)雜工程問題鍛煉并提升學(xué)生使用C/C++語言進(jìn)行程序設(shè)計(jì)的能力,對(duì)一定規(guī)模軟件系統(tǒng)進(jìn)行分析、設(shè)計(jì)、編程實(shí)現(xiàn)以及測(cè)試、調(diào)試的能力,系統(tǒng)級(jí)設(shè)計(jì)、實(shí)現(xiàn)與調(diào)試能力,數(shù)據(jù)結(jié)構(gòu)及算法設(shè)計(jì)能力,進(jìn)而整體提升學(xué)生的系統(tǒng)能力。

2.2 課程任務(wù)

課程的基本任務(wù)是使用C/C++語言設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)單MIPS 指令集[7]匯編程序的解釋器。解釋器的輸入為一個(gè)簡(jiǎn)單MIPS 指令集匯編程序及初始的內(nèi)存文件(可選),輸出為包含程序中輸出指令與輸出內(nèi)容的文件。MIPS 指令集廣泛用于計(jì)算機(jī)體系結(jié)構(gòu)的教學(xué)中[7],選擇該指令集也是考慮到學(xué)生在大二下學(xué)期剛學(xué)習(xí)完計(jì)算機(jī)原理課程,對(duì)指令集、匯編等相關(guān)概念比較熟悉。

課程使用的指令集為一個(gè)32 位的Load/Store 指令集,主要包括內(nèi)存操作指令、I 型指令、R 型指令以及J 型指令4種,其中I 型指令為立即數(shù)指令,R 型指令為寄存器操作指令,J 型指令為跳轉(zhuǎn)指令。指令集中有32 個(gè)32 位寄存器,其中第一個(gè)寄存器R0的值永遠(yuǎn)是0,并且禁止被修改。指令集中包含算術(shù)與位運(yùn)算指令、移位指令、測(cè)試指令以及跳轉(zhuǎn)指令。圖1 給出了課程中使用的指令集語言文法(起始非終結(jié)符為P)及一個(gè)示例程序,其中IMM 和LABEL 分別為一個(gè)整數(shù)和一個(gè)標(biāo)識(shí)符,為了簡(jiǎn)潔省略了其定義。

Fig.1 Syntax of a simple MIPS assembly language and an example program圖1 簡(jiǎn)單MIPS 指令匯編語言語法與示例程序

指令集語言是一個(gè)類匯編的語言,例如圖1 中的示例程序?yàn)橛?jì)算0~100的和并輸出。該課程對(duì)學(xué)生實(shí)現(xiàn)的解釋器程序的輸入與輸出均作出了要求,要求通過命令行的-i、-m 和-o 輸入?yún)?shù)分別指定輸入的匯編源程序文件、初始內(nèi)存狀態(tài)文件以及輸出文件,在提升學(xué)生對(duì)于程序命令行輸入?yún)?shù)理解的同時(shí),也有利于課程開展自動(dòng)評(píng)測(cè)。因此,學(xué)生在熟悉指令語言的基礎(chǔ)上需要實(shí)現(xiàn)以下基本功能:①匯編源程序文件、初始內(nèi)存狀態(tài)文件的讀入和解析,同時(shí)還包括匯編指令及內(nèi)存在解釋器中的數(shù)據(jù)結(jié)構(gòu)表示;②指令的解釋執(zhí)行,包括寄存器模擬、指令模擬執(zhí)行以及信息文件輸出。

課程任務(wù)的基本要求是解釋器能夠正確支持語言中所有指令的解釋執(zhí)行。同時(shí),為了體現(xiàn)差異并進(jìn)一步提升學(xué)生的算法設(shè)計(jì)及程序優(yōu)化能力,課程設(shè)置了兩個(gè)固定的高級(jí)優(yōu)化任務(wù):一是基于數(shù)據(jù)流和控制流的指令切片;二是基于并行分析的指令并發(fā)解釋執(zhí)行。此外,學(xué)生也可自由選擇其他任務(wù),例如浮點(diǎn)指令的支持、面向高級(jí)語言的MIPS 指令翻譯、執(zhí)行效率提升機(jī)制解釋等。

課程要求程序編譯和運(yùn)行的操作系統(tǒng)平臺(tái)為64 位的Ubuntu 14.04,編譯器為GCC 4.8,并使用GNU Make 作為編譯系統(tǒng)。要求學(xué)生自學(xué)Linux 平臺(tái)的基本命令行操作、GCC編譯器的基本使用以及GNU Make的使用方法,并親自編譯程序的Makefile 文件,以加深對(duì)程序編譯、鏈接過程的理解。表1 給出了課程任務(wù)內(nèi)容與系統(tǒng)能力要素培養(yǎng)之間的對(duì)應(yīng)關(guān)系。

Table 1 Correspondence between the main tasks specified by the course and the elements of system development ability表1 課程指定主要任務(wù)與系統(tǒng)能力培養(yǎng)要素之間的對(duì)應(yīng)關(guān)系

2.3 課程組織與評(píng)分規(guī)則

課程總計(jì)40 學(xué)時(shí),在第一次課上給出課程任務(wù)需求并介紹簡(jiǎn)單MIPS 指令集匯編語言,然后將課程分為3 個(gè)階段。表2 給出了每個(gè)階段的主要任務(wù)、目標(biāo)、時(shí)間安排和評(píng)分要求,同時(shí)要求每個(gè)學(xué)生獨(dú)立完成課程任務(wù)。

Table 2 Three course stages of the curriculum表2 課程的3 個(gè)階段

第一階段只需要完成文件的讀入及解析,因此該階段要求將解析后的指令程序及內(nèi)存信息按照固定格式輸出到結(jié)果文件(-o 參數(shù)指定的文件)中,然后根據(jù)文件內(nèi)容判斷測(cè)試用例是否通過。第一階段和第二階段會(huì)給學(xué)生一些測(cè)試用例用于本地測(cè)試,這些測(cè)試用例會(huì)涵蓋所有指令,同時(shí)在規(guī)模和程序功能上具有一定的差異性,但這些測(cè)試用例與每個(gè)階段用于評(píng)測(cè)的測(cè)試用例沒有交集。第三階段的最后3 個(gè)測(cè)試用例是專門針對(duì)指定高級(jí)優(yōu)化設(shè)計(jì)的,這些用例會(huì)保證如果沒有進(jìn)行指令切片或并行執(zhí)行的優(yōu)化,將不能在限定時(shí)間內(nèi)得到結(jié)果。

課程基礎(chǔ)成績?cè)u(píng)分規(guī)則為:完成第三階段的基本要求(通過第三階段的前7 個(gè)測(cè)試用例和第二階段的10 個(gè)測(cè)試用例)后的得分至少為65 分,否則視為課程掛科;然后對(duì)所有滿足基本要求的作業(yè),在第三階段的10 個(gè)測(cè)試用例上根據(jù)性能(執(zhí)行時(shí)間)進(jìn)行排序,這個(gè)排序會(huì)保證最后3 個(gè)性能優(yōu)化設(shè)計(jì)的測(cè)試用例權(quán)重較高,通過最后3 個(gè)任一測(cè)試用例的作業(yè)一定比3 個(gè)都沒通過的作業(yè)排名靠前,最后3個(gè)測(cè)試用例的權(quán)重一樣,前7 個(gè)測(cè)試用例的權(quán)重也一樣;最后,在對(duì)通過基本要求的作業(yè)進(jìn)行性能排名的基礎(chǔ)上給出基礎(chǔ)成績,在95 分(排名第1)到65 分(最后1 名)之間根據(jù)排名均勻分布。在基礎(chǔ)成績之上,結(jié)合前兩個(gè)階段的歷史扣分情況、作品創(chuàng)新性(如其他性能增強(qiáng)方法、浮點(diǎn)指令支持等)、分享活躍度、提交時(shí)間等方面綜合給出學(xué)生的最終成績。

2.4 其他教學(xué)措施

2.4.1 自動(dòng)評(píng)測(cè)平臺(tái)

根據(jù)課程的任務(wù)內(nèi)容和評(píng)分規(guī)則,學(xué)生需要及時(shí)獲取所開發(fā)的作品是否通過測(cè)試用例以及具體排名信息。為此,課程構(gòu)建了自動(dòng)化作品評(píng)測(cè)平臺(tái),學(xué)生可以在每個(gè)階段于評(píng)測(cè)平臺(tái)上傳作品,該平臺(tái)會(huì)自動(dòng)編譯、測(cè)試作品,然后將測(cè)試結(jié)果(例如哪些測(cè)試用例通過、哪些沒有通過)反饋給學(xué)生,同時(shí)在第三階段還可以實(shí)時(shí)給出學(xué)生作品的排名。自動(dòng)化評(píng)測(cè)平臺(tái)可有效提高課程評(píng)測(cè)效率,激發(fā)學(xué)生的學(xué)習(xí)熱情。

2.4.2 指令模擬實(shí)現(xiàn)的缺陷定位輔助

解釋器程序的調(diào)試比較困難,主要體現(xiàn)為程序中的缺陷難以定位。同時(shí),由于第二、三階段評(píng)測(cè)使用的測(cè)試用例與用于本地測(cè)試的測(cè)試用例不同,可能會(huì)存在本地測(cè)試用例通過但在評(píng)測(cè)平臺(tái)不通過的問題。為此,筆者為本地調(diào)試提供了參考實(shí)現(xiàn)的可執(zhí)行程序,用于指令模擬實(shí)現(xiàn)中的缺陷定位。缺陷定位的主要思路為通過差異測(cè)試定位可能導(dǎo)致的指令失效。參考實(shí)現(xiàn)可以將測(cè)試用例中指令程序每執(zhí)行一條指令后的寄存器狀態(tài)以及執(zhí)行的指令輸出,學(xué)生也可以在自己作品中實(shí)現(xiàn)相同格式的寄存器狀態(tài)和指令輸出,然后比較參考實(shí)現(xiàn)和自己作品的輸出差異,第一個(gè)不一樣的狀態(tài)及指令就可能是導(dǎo)致缺陷的原因。此外,自動(dòng)測(cè)試平臺(tái)上也提供了相同的在線缺陷定位功能,為學(xué)生在無法獲得測(cè)試用例情況下的缺陷定位提供一定輔助。

2.4.3 作品查重

為了杜絕抄襲現(xiàn)象,在每個(gè)階段驗(yàn)收后會(huì)使用JPlag 工具[8]對(duì)所有作品進(jìn)行查重。JPlag 工具是Java 實(shí)現(xiàn)的代碼相似度評(píng)估工具,支持C、C++、Java 等語言程序的相似度分析。在前兩個(gè)階段,查重的規(guī)則是所有作品兩兩查重,然后每個(gè)作品的相似度是其與所有其他學(xué)生作品的相似度之和。查重結(jié)果會(huì)以相似度矩陣的形式公布給學(xué)生,老師通過作品相似度進(jìn)行重點(diǎn)關(guān)注,在前面兩個(gè)階段被認(rèn)定為抄襲的學(xué)生直接掛科,課程任務(wù)提前終止。在第三階段,除了開展前面兩個(gè)階段的查重,還會(huì)與往年通過課程考核的所有作品進(jìn)行查重。查重功能也集成到了自動(dòng)評(píng)測(cè)平臺(tái)。

2.4.4 課程資源與經(jīng)驗(yàn)分享

課程先后使用確實(shí)(Trustie)平臺(tái)和頭歌(Educoder)平臺(tái)作為在線課程平臺(tái),用于課程資源的發(fā)布和學(xué)科管理,包括發(fā)布課程任務(wù)的文檔、膠片,管理學(xué)生信息、學(xué)生最終提交的設(shè)計(jì)實(shí)現(xiàn)文檔等。此外,為了促進(jìn)學(xué)生之間的交流,激發(fā)其學(xué)習(xí)熱情,課程先后使用Trustie 平臺(tái)和知士薈(LearnerHub)平臺(tái)鼓勵(lì)學(xué)生發(fā)貼交流程序開發(fā)過程中的經(jīng)驗(yàn)和教訓(xùn),并且會(huì)在最終課程成績中綜合考慮發(fā)帖情況。

2.4.5 文檔與代碼提交

設(shè)計(jì)開發(fā)文檔的撰寫能力也是軟件開發(fā)能力的一部分。為了提升學(xué)生的文檔撰寫和文字表達(dá)能力,在第三階段結(jié)束后,要求每個(gè)學(xué)生提交一個(gè)課程任務(wù)總結(jié)報(bào)告,在報(bào)告中詳細(xì)描述課程任務(wù)開發(fā)過程中的架構(gòu)和算法設(shè)計(jì)、實(shí)現(xiàn)細(xì)節(jié)、關(guān)鍵代碼片段、課程收獲和感悟等,最終課程成績中會(huì)綜合考慮文檔質(zhì)量。在代碼方面,學(xué)生最終的代碼作品以第三階段在評(píng)測(cè)平臺(tái)上提交的代碼為準(zhǔn)。

3 實(shí)踐效果

從多個(gè)方面闡述課程3 年改革實(shí)踐的效果。第一年,考慮到是課程改革初期,同時(shí)評(píng)測(cè)平臺(tái)也是剛開始構(gòu)建,需要評(píng)測(cè)服務(wù)器的性能,課程采取2 人1 組,一共50 個(gè)組99名學(xué)生(有一組是1 個(gè)學(xué)生);第二年,采取1 人1 組,一共110 名學(xué)生;第三年也是1 人1 組,一共80 名學(xué)生。

3.1 成績趨勢(shì)

圖2 給出了3 年課程改革的成績統(tǒng)計(jì)情況,平均成績分別為75.4、72.1 和75.9 分,課程通過率分別為98%(49/50)、79%(87/110)、97.5%(78/80)。分析其原因,第1 年是2人一組,存在“摸魚”現(xiàn)象(從學(xué)生后續(xù)的課程反饋中也印證了這一點(diǎn));第2 年1 人1 組后,通過率和平均分有所下降;第3 年在1 人1 組的情況下,通過率和平均成績回升到與第一年相當(dāng)?shù)乃健4送?,? 年有26 個(gè)組至少通過1個(gè)第三階段中3 個(gè)針對(duì)程序優(yōu)化的測(cè)試用例,有5 組3 個(gè)全部通過;第二年分別為22 和1;第三年分別為27 和7。這些統(tǒng)計(jì)結(jié)果證實(shí)了課程改革的成效。

3.2 代碼規(guī)模

圖3 給出了3 年來課程提交代碼規(guī)模的統(tǒng)計(jì)信息,每年的平均代碼規(guī)模均為750 左右。雖然平均代碼行數(shù)不多,但都是從零開始編寫,設(shè)計(jì)和調(diào)試的工作量比較大。通過平時(shí)學(xué)生反饋可知,大部分小組在完成課程任務(wù)的過程中都對(duì)代碼進(jìn)行了多次重構(gòu)。同時(shí),可以觀察到第二年平均代碼量相比第一年有所下降,原因與之前課程平均成績下降的原因一致。第3 年的平均代碼量相比前2 年有所提升,同時(shí)大于1 000 行代碼作品的數(shù)量(19 個(gè))和比例(23.7%)也最高,這些結(jié)果證實(shí)了課程改革的有效性。

Fig.2 Course grade statistics圖2 課程成績統(tǒng)計(jì)

Fig.3 Source code lines statistics圖3 作品代碼規(guī)模統(tǒng)計(jì)

3.3 提交次數(shù)

圖4 給出了作品提交次數(shù)的統(tǒng)計(jì)結(jié)果,橫軸為提交次數(shù),縱軸為時(shí)間。第1 年和第2 年的平均提交次數(shù)接近,均為23 次左右,第3 年的平均提交次數(shù)為64 次。原因是第1年課程改革伊始,考慮到評(píng)測(cè)系統(tǒng)的穩(wěn)定性以及服務(wù)器性能,作品評(píng)測(cè)設(shè)置的是每45min 一次,導(dǎo)致學(xué)生平均提交次數(shù)偏低。之后兩年學(xué)生在上傳作品后可以馬上進(jìn)行測(cè)試,但第二年由于是首次1 人1 組,課程要求對(duì)部分學(xué)生有一定難度,存在部分學(xué)生放棄的現(xiàn)象,提交小于5 次的有25組,因此整體拉低了平均提交次數(shù),但有學(xué)生最高提交了303 次。提交次數(shù)整體趨勢(shì)基本與課程成績一致。

3.4 學(xué)生反饋

課程成績公布以后,要求學(xué)生在評(píng)測(cè)平臺(tái)上給出對(duì)課程的反饋與建議,部分學(xué)生沒有反饋。圖5 是根據(jù)學(xué)生的反饋信息人為分類后得到的結(jié)果,其中“無法判斷”是指學(xué)生在反饋與建議中沒有提及自身收獲方面的情況,因此無法判斷。3 年的課程改革過程中,學(xué)生明確表示有收獲的比例分別為80.3%(37/46)、70.3%(61/87)、57.3%(43/75)。從2 人1 組切換到1 人1 組后,學(xué)生反饋有收獲的比例降低,也符合預(yù)期。此外,3 年中每年都有1 組反饋沒有收獲,其中前2 年的原因是認(rèn)為課程任務(wù)難度和工作量大,希望后續(xù)老師能提供更多幫助,第3 年的1 組是覺得任務(wù)偏簡(jiǎn)單。

Fig.4 Statistics of the number of submissions圖4 作品提交次數(shù)統(tǒng)計(jì)

Fig.5 Student feedback statistics圖5 學(xué)生反饋統(tǒng)計(jì)

在課程改革過程中,根據(jù)學(xué)生的反饋、經(jīng)驗(yàn)分享以及平時(shí)的答疑情況,發(fā)現(xiàn)學(xué)生在計(jì)算機(jī)程序設(shè)計(jì)能力方面得到了較好鍛煉,具體包括數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)與選擇、C/C++程序中的內(nèi)存操作、GCC 中編譯優(yōu)化的使用、文件讀寫與解析、優(yōu)化算法設(shè)計(jì)、代碼調(diào)試與優(yōu)化等多個(gè)方面,這些都與系統(tǒng)能力培養(yǎng)直接相關(guān)。此外,學(xué)生普遍反映自身自主探索、獨(dú)立編程能力得到了提升。在資源分享平臺(tái),學(xué)生自發(fā)分享的設(shè)計(jì)開發(fā)經(jīng)驗(yàn)帖子有70 個(gè),內(nèi)容涉及到上述各個(gè)方面。這些經(jīng)驗(yàn)分享在幫助后續(xù)學(xué)生開發(fā)程序的同時(shí),也為課程任務(wù)的更新提出了挑戰(zhàn),一些面向高級(jí)功能需求的開發(fā)任務(wù)與編譯原理(解析、面向高級(jí)語言的代碼生成)、操作系統(tǒng)(基于多線程的并行執(zhí)行)課程也形成了聯(lián)動(dòng)。此外,課程評(píng)測(cè)平臺(tái)的功能和性能也在不斷迭代優(yōu)化,例如在第二年加入了自動(dòng)缺陷定位功能,同時(shí)開發(fā)了Java 版本的解釋器參考原型以及基于隨機(jī)測(cè)試的匯編程序隨機(jī)生成工具,用于輔助各個(gè)階段的測(cè)試用例設(shè)計(jì)。

4 結(jié)語

針對(duì)計(jì)算機(jī)專業(yè)學(xué)生系統(tǒng)能力培養(yǎng)的問題與挑戰(zhàn),對(duì)程序設(shè)計(jì)綜合實(shí)踐課程進(jìn)行了改革實(shí)踐,設(shè)計(jì)了基于簡(jiǎn)單MIPS 指令集匯編程序解釋器的課程任務(wù)以及基于3 個(gè)階段的課程組織形式;開發(fā)了支撐課程開展的自動(dòng)評(píng)測(cè)平臺(tái),通過自動(dòng)評(píng)測(cè)、差異測(cè)試、自動(dòng)查重、自動(dòng)缺陷定位等手段,不斷提升課程質(zhì)量和實(shí)驗(yàn)效果,在學(xué)生系統(tǒng)能力培養(yǎng)方面取得了不錯(cuò)效果。

在后續(xù)深入推進(jìn)教學(xué)改革的過程中,將從以下幾個(gè)方面作出改進(jìn):①課程任務(wù)的進(jìn)一步擴(kuò)展和優(yōu)化,包括引入其他經(jīng)典的復(fù)雜工程問題或具有特定時(shí)代背景的問題,例如SAT 求解器和無人系統(tǒng)開發(fā),同時(shí)設(shè)計(jì)更多指定優(yōu)化任務(wù);②進(jìn)一步完善自動(dòng)評(píng)測(cè)平臺(tái)的性能,為其他課程提供支撐;③針對(duì)后期有部分學(xué)生通過在作品中注入無效代碼以通過查重的現(xiàn)象,優(yōu)化查重功能,提升查重精度。

猜你喜歡
測(cè)試用例評(píng)測(cè)程序設(shè)計(jì)
次時(shí)代主機(jī)微軟XSX全方位評(píng)測(cè)(下)
次時(shí)代主機(jī)微軟XSX全方位評(píng)測(cè)(上)
基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
基于Visual Studio Code的C語言程序設(shè)計(jì)實(shí)踐教學(xué)探索
從細(xì)節(jié)入手,談PLC程序設(shè)計(jì)技巧
攻坡新利器,TOKEN VENTOUS評(píng)測(cè)
基于混合遺傳算法的回歸測(cè)試用例集最小化研究
Canyon Ultimate CF SLX 8.0 DI2評(píng)測(cè)
高職高專院校C語言程序設(shè)計(jì)教學(xué)改革探索
PLC梯形圖程序設(shè)計(jì)技巧及應(yīng)用