999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向系統能力培養的程序設計綜合實踐課程改革

2022-03-25 04:44:50陳振邦徐建軍陳立前
軟件導刊 2022年3期
關鍵詞:指令程序能力

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

(國防科技大學 計算機學院,湖南長沙 410073)

0 引言

計算機程序設計能力是計算機相關本科專業培養的專業核心能力之一,也是計算思維能力的核心體現,如何使學生具備良好的程序設計能力是計算機專業人才培養需要解決的核心問題之一。程序設計能力的培養需要在基礎理論知識學習的同時結合大量編程實踐,以不斷提升學生的軟件系統構建能力。因此,很多高校在開設計算機程序設計、數據結構等課程后會再安排一門程序設計綜合實踐課,通過工程量相對較大的項目訓練綜合提升學生的程序設計能力[1-2]。

國防科技大學的程序設計綜合實踐課是計算機學院各專業的基礎課,是計算機程序設計類課程的后續課程。課程的主要目的是通過一個較為真實的復雜工程問題,使學生完成系統的分析、設計和編程實現,全面梳理學生學習的程序設計、數據結構和算法知識,鞏固和提高其程序設計和系統能力,鍛煉學生獨立編程、從零開始編程以及系統級編程的能力,同時鍛煉其自學能力。該課程支撐計算機科學與技術、軟件工程、網絡工程等專業學生達成具備計算機系統設計開發能力和程序設計能力的畢業要求。

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

1 課程改革需求

具有系統觀的計算機專業人才培養是當前關注的焦點[3-5]。系統能力是指具備計算系統層面的認知和設計能力,主要包括系統軟硬件合理劃分能力、不同系統層次的抽象和封裝能力、整體系統性能的分析和調優能力、各個系統層面的錯誤調試和修復能力、程序的性能評估和優化能力、面向具體應用需求的系統構建能力等[3-5]。國防科技大學計算機專業對具備系統能力人才的需求由來已久,特別是在大系統(例如巨型機、CPU、操作系統等)的研制過程中,具備較強系統能力的人才非常關鍵。

系統能力要求學生對計算機系統的整機概念和層次結構具有較為深刻的理解和認識,對高級語言、指令集架構、編譯器、鏈接器、操作系統、應用程序等之間的關系具有較為深入的掌握,并且能深刻理解和權衡時空開銷、抽象和建模、并發和并行等概念,掌握現代計算機系統中最核心的技術和實現方法[3-5]。

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

2 課程設計

在上述教學需求的驅動下,以提升系統能力為目標,在程序設計綜合實踐課程方面開展了一系列改革,設計了基于匯編程序解釋器的課程任務,以下分別從課程目標,任務設置、組織與要求及其他教學措施等方面闡述該門課程的設計及相應思考。

2.1 課程對象與目標

程序設計綜合實踐課程是計算機專業學生大三上學期的專業基礎課,參與課程學習的為計算機科學與技術、軟件工程、網絡工程、信息安全、物聯網等專業的學生,之前已經學習了計算機程序設計(C 和C++)、離散數學、數據結構、計算機原理等專業課。同時,所有學生會在同一個學期學習操作系統,部分學生會學習編譯原理。該課程的主要目標是通過一個復雜工程問題鍛煉并提升學生使用C/C++語言進行程序設計的能力,對一定規模軟件系統進行分析、設計、編程實現以及測試、調試的能力,系統級設計、實現與調試能力,數據結構及算法設計能力,進而整體提升學生的系統能力。

2.2 課程任務

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

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

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

指令集語言是一個類匯編的語言,例如圖1 中的示例程序為計算0~100的和并輸出。該課程對學生實現的解釋器程序的輸入與輸出均作出了要求,要求通過命令行的-i、-m 和-o 輸入參數分別指定輸入的匯編源程序文件、初始內存狀態文件以及輸出文件,在提升學生對于程序命令行輸入參數理解的同時,也有利于課程開展自動評測。因此,學生在熟悉指令語言的基礎上需要實現以下基本功能:①匯編源程序文件、初始內存狀態文件的讀入和解析,同時還包括匯編指令及內存在解釋器中的數據結構表示;②指令的解釋執行,包括寄存器模擬、指令模擬執行以及信息文件輸出。

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

課程要求程序編譯和運行的操作系統平臺為64 位的Ubuntu 14.04,編譯器為GCC 4.8,并使用GNU Make 作為編譯系統。要求學生自學Linux 平臺的基本命令行操作、GCC編譯器的基本使用以及GNU Make的使用方法,并親自編譯程序的Makefile 文件,以加深對程序編譯、鏈接過程的理解。表1 給出了課程任務內容與系統能力要素培養之間的對應關系。

Table 1 Correspondence between the main tasks specified by the course and the elements of system development ability表1 課程指定主要任務與系統能力培養要素之間的對應關系

2.3 課程組織與評分規則

課程總計40 學時,在第一次課上給出課程任務需求并介紹簡單MIPS 指令集匯編語言,然后將課程分為3 個階段。表2 給出了每個階段的主要任務、目標、時間安排和評分要求,同時要求每個學生獨立完成課程任務。

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

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

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

2.4 其他教學措施

2.4.1 自動評測平臺

根據課程的任務內容和評分規則,學生需要及時獲取所開發的作品是否通過測試用例以及具體排名信息。為此,課程構建了自動化作品評測平臺,學生可以在每個階段于評測平臺上傳作品,該平臺會自動編譯、測試作品,然后將測試結果(例如哪些測試用例通過、哪些沒有通過)反饋給學生,同時在第三階段還可以實時給出學生作品的排名。自動化評測平臺可有效提高課程評測效率,激發學生的學習熱情。

2.4.2 指令模擬實現的缺陷定位輔助

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

2.4.3 作品查重

為了杜絕抄襲現象,在每個階段驗收后會使用JPlag 工具[8]對所有作品進行查重。JPlag 工具是Java 實現的代碼相似度評估工具,支持C、C++、Java 等語言程序的相似度分析。在前兩個階段,查重的規則是所有作品兩兩查重,然后每個作品的相似度是其與所有其他學生作品的相似度之和。查重結果會以相似度矩陣的形式公布給學生,老師通過作品相似度進行重點關注,在前面兩個階段被認定為抄襲的學生直接掛科,課程任務提前終止。在第三階段,除了開展前面兩個階段的查重,還會與往年通過課程考核的所有作品進行查重。查重功能也集成到了自動評測平臺。

2.4.4 課程資源與經驗分享

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

2.4.5 文檔與代碼提交

設計開發文檔的撰寫能力也是軟件開發能力的一部分。為了提升學生的文檔撰寫和文字表達能力,在第三階段結束后,要求每個學生提交一個課程任務總結報告,在報告中詳細描述課程任務開發過程中的架構和算法設計、實現細節、關鍵代碼片段、課程收獲和感悟等,最終課程成績中會綜合考慮文檔質量。在代碼方面,學生最終的代碼作品以第三階段在評測平臺上提交的代碼為準。

3 實踐效果

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

3.1 成績趨勢

圖2 給出了3 年課程改革的成績統計情況,平均成績分別為75.4、72.1 和75.9 分,課程通過率分別為98%(49/50)、79%(87/110)、97.5%(78/80)。分析其原因,第1 年是2人一組,存在“摸魚”現象(從學生后續的課程反饋中也印證了這一點);第2 年1 人1 組后,通過率和平均分有所下降;第3 年在1 人1 組的情況下,通過率和平均成績回升到與第一年相當的水平。此外,第1 年有26 個組至少通過1個第三階段中3 個針對程序優化的測試用例,有5 組3 個全部通過;第二年分別為22 和1;第三年分別為27 和7。這些統計結果證實了課程改革的成效。

3.2 代碼規模

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

Fig.2 Course grade statistics圖2 課程成績統計

Fig.3 Source code lines statistics圖3 作品代碼規模統計

3.3 提交次數

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

3.4 學生反饋

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

Fig.4 Statistics of the number of submissions圖4 作品提交次數統計

Fig.5 Student feedback statistics圖5 學生反饋統計

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

4 結語

針對計算機專業學生系統能力培養的問題與挑戰,對程序設計綜合實踐課程進行了改革實踐,設計了基于簡單MIPS 指令集匯編程序解釋器的課程任務以及基于3 個階段的課程組織形式;開發了支撐課程開展的自動評測平臺,通過自動評測、差異測試、自動查重、自動缺陷定位等手段,不斷提升課程質量和實驗效果,在學生系統能力培養方面取得了不錯效果。

在后續深入推進教學改革的過程中,將從以下幾個方面作出改進:①課程任務的進一步擴展和優化,包括引入其他經典的復雜工程問題或具有特定時代背景的問題,例如SAT 求解器和無人系統開發,同時設計更多指定優化任務;②進一步完善自動評測平臺的性能,為其他課程提供支撐;③針對后期有部分學生通過在作品中注入無效代碼以通過查重的現象,優化查重功能,提升查重精度。

猜你喜歡
指令程序能力
聽我指令:大催眠術
消防安全四個能力
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
大興學習之風 提升履職能力
人大建設(2018年6期)2018-08-16 07:23:10
你的換位思考能力如何
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
主站蜘蛛池模板: 成人国产精品视频频| 九色视频一区| 国产在线观看精品| 日韩美一区二区| 国产欧美视频在线| 青青青国产免费线在| 高清精品美女在线播放| 国产日韩av在线播放| 香蕉eeww99国产在线观看| 青草午夜精品视频在线观看| 亚洲日韩每日更新| 一级毛片无毒不卡直接观看| 亚洲国产成人精品一二区| 视频二区欧美| 久久香蕉国产线看观看亚洲片| 久久久波多野结衣av一区二区| 伊人久久精品无码麻豆精品| 精品国产一区91在线| 午夜视频免费一区二区在线看| 精品国产成人三级在线观看| 久久窝窝国产精品午夜看片| 91综合色区亚洲熟妇p| 欧美综合区自拍亚洲综合绿色| 亚洲无码熟妇人妻AV在线| 亚洲a免费| 久久久久人妻一区精品色奶水| 国产精品亚洲欧美日韩久久| 久久黄色小视频| 亚洲一级毛片在线播放| 伊人久综合| 欧美日韩免费观看| 国产超碰一区二区三区| 亚洲IV视频免费在线光看| 久久频这里精品99香蕉久网址| 国产精品福利尤物youwu| 亚洲高清免费在线观看| 午夜天堂视频| 99一级毛片| 亚洲AV无码久久天堂| 为你提供最新久久精品久久综合| 99这里只有精品在线| 少妇精品网站| 9久久伊人精品综合| 亚洲综合精品香蕉久久网| 久久伊人久久亚洲综合| 青草视频免费在线观看| 色成人亚洲| 伊人久久综在合线亚洲2019| 亚洲精品久综合蜜| 国产噜噜在线视频观看| 亚洲色图欧美| 精品中文字幕一区在线| 久久精品视频亚洲| 秋霞午夜国产精品成人片| 久久精品日日躁夜夜躁欧美| 国产96在线 | 色综合五月| 四虎AV麻豆| 日韩中文精品亚洲第三区| 亚洲av无码牛牛影视在线二区| 伊人天堂网| 五月天久久婷婷| 亚洲精品大秀视频| 欧美激情福利| 欧美成人一区午夜福利在线| 91视频日本| 极品私人尤物在线精品首页 | 日韩精品一区二区三区免费| 99九九成人免费视频精品| 就去吻亚洲精品国产欧美| 日韩精品无码免费专网站| 欧美视频二区| 日韩免费毛片| 好紧好深好大乳无码中文字幕| 欧美亚洲日韩不卡在线在线观看| 成人av专区精品无码国产| 亚洲精品色AV无码看| 99热这里只有精品免费国产| 美女被操黄色视频网站| 成人在线视频一区| 久久福利网| 男女精品视频|