楊誼 喻德曠
摘 要:軟件工程具有很強的工程性和實踐性,在軟件工程課程教學中,“如何開展學習”以及“如何促進能力培養”是需要研究探索和實踐的重要命題。文章把深度學習思想引入到軟件工程的實踐教學中,從課程目標、內容設計、開展形式、教學指導模式等環節進行改革,詳細介紹了專題設計、創設場景、分析問題、自主探究和協作交流、自我總結與點評等具體措施,發揮學生的主體作用,培養學生深度加工知識信息、深度理解復雜概念、深度掌握核心技術的能力,進而建構個體知識體系用以解決現實復雜問題。
關鍵詞:軟件工程;深度學習;實踐教學模式
中圖分類號:G642 文獻標志碼:A 文章編號:2096-000X(2019)04-0066-04
Abstract: Software engineering has a strong engineering and practical nature. In the course of software engineering teaching, "how to carry out learning" and "how to promote ability training" are core propositions that need research and practice. This paper introduced the idea of deep learning into the practical teaching of software engineering, including course target, content design, teaching form and teaching mode, and introduced the special design, creation of the scene, analysis of problem, independent enquiry, cooperation and communication, self-summary-and-review in detail, to bring the students' initiative to its full extent, and to cultivate capability of processing knowledge information, understand the complex concepts, and grasp the core skills in depth, construct the individual knowledge system as to solve the complicated problems of reality.
Keywords: software engineering; deep learning; practice teaching model
《軟件工程》是計算機軟件和相關專業的重要課程之一。軟件工程以提高軟件質量,降低軟件的開發和維護成本為目的,將系統化、規范化、可度量的工程化方法應用于軟件的開發、運行和維護的過程,從而將經過時間考驗的管理方法和先進的開發技術結合起來。近年來,隨著新興經濟結構的產生,計算機技術領域的不斷發展,軟件產業已經成為世界各國在信息時代新一輪的競爭焦點。軟件工程專業以計算機科學與技術學科為基礎,強調軟件開發的工程性,不僅需要對軟件需求分析、軟件設計、軟件測試、軟件維護和軟件項目管理等基礎知識、基本方法熟練掌握,而且突出對軟件開發、測試、維護和軟件項目管理等專業技能的培養。目前國內外行業產業最需要的都是真正能夠很好實踐軟件工程的人才。
在軟件工程課程教學中,“如何開展學習”以及“如何促進能力培養”是兩個需要研究探索和實踐的核心命題。軟件工程教育界早已認同理論聯系實際,突出實戰能力的培養思想。而今,面對以碎片化為特點的淺層學習方式的滲透、覆蓋和影響,越來越多的教育者和學習者已經開始認識到,流行的快餐式教育和浮光掠影的學習方式遠遠不能適應軟件工程理論技術與實踐發展的需求。反之,對信息予以深度加工,深刻理解和掌握復雜概念的內在涵義,建構起具有個人特點的知識體系,通過知識的吸收、遷移、內化來獲得完成任務的能力,成為軟件工程學科所必須的教育和學習理念[1]。
一、深度學習模式概述
根據學習者獲取和加工信息的方式,可以分為深度加工和淺層加工。前者采用深度學習,這是一種主動的、批判性的學習方式。后者的淺層學習則是一種被動的、機械式的學習方式,被動接受、簡單重復和機械記憶信息,缺乏對知識的深度理解、自我加工及長期保持,猶如沙灘上構建大廈一樣沒有基礎,是無法實現知識建構、遷移應用及問題解決的[2]。
從學習目標的角度看,根據布盧姆(B·S·BLOOM)對認知領域學習目標的分類,包括“知道、領會、應用、分析、綜合及評價”這六個逐漸提高深化的層次,淺層學習的認知水平停留在“知道、領會”這兩個層次,主要是知識的簡單描述、記憶或復制,處于較低的認知水平,涉及低階思維活動;而深度學習的認知水平則可對應“應用、分析、綜合、評價” 這四個較高級的認知層次,不只涉及記憶,更注重知識的理解和應用,處于高級的認知水平,涉及高階思維活動[3]。顯然,深度學習的實現與高水平思維的運用密切相關,發展高階思維能力有助于實現和促進高級能力的獲得,有助于提高學習者的思維水平和學習效能。
從二十一世紀伊始,歷經二十年,數字化、網絡化、移動化的新型學習方式相繼出現、發展到盛行,而越來越多的來自大、中學的調查研究和統計結果卻表明,運用淺層學習雖然可以利用零星時間快速了解和接觸碎片化信息,但在整體學習效率和綜合效果上并沒有得到了實質性的提高,相反,由于對新型學習工具和技術的不恰當使用,有些學習活動反而受到了阻礙[4]。高度信息化的知識經濟時代更要求學習者能夠深度加工知識信息、深度理解復雜概念、深度掌握內在含義,進而建構個體知識體系,用以解決現實復雜問題。深度學習已作為一種重要而有效的學習方式和學習理念,引起教育者和學習者極大的興趣和關注。
二、深度學習模式在軟件工程實踐教學中的運用
深度學習通過調動學習者的積極性,注重知識間的內在聯系,強調知識應用,在學習者自主探究的過程中培養學生的終身學習能力、知識應用能力和知識創新能力,適合培養軟件工程人才的需要[5]。結合深度學習思想,本文探討把深度學習思想引入到軟件工程的實踐教學中,從實踐教學的課程目標、內容設計、教學指導模式等環節進行介紹,發揮學生的主體作用,培養學生自學能力和系統設計開發能力。
(一)課程目標
要求學生通過軟件工程實踐課程的理論學習與實踐練習,掌握運用工程化的方法開發軟件項目的方法和技能,開發過程中應遵循的流程、準則、標準和規范,具備進行軟件工程項目分析、設計、實現和進行有效的項目管理的基本能力。具體課程目標如下:
1. 掌握面向對象的軟件開發基本過程、方法和工具,能用軟件工程的方法開展軟件項目的分析、設計、實現和維護。
2. 掌握軟件需求分析的方法,包括結構化方法、面向對象、面向構件的方法等,學會根據需求進行合理的軟件建模,學會編寫符合規范、完整、明確的軟件需求規格說明。
3. 掌握軟件設計的方法,包括軟件體系結構設計、界面設計、數據設計和模塊設計等,學會建立軟件設計模型,編寫規范、完整、詳實的軟件設計文檔。
4. 掌握軟件實現的常用方法,學習使用合適的軟件開發工具開發軟件。
5. 掌握軟件測試的基本方法,重點在測試計劃和測試用例的設計,了解應做哪些方面的測試,測試數據如何設計,測試的內容和利用測試結果進行可靠性分析與預測。
6. 掌握軟件開發過程管理和質量控制的基本方法,包括定義合適的項目過程、進行充分的可行性研究、需求分析、階段劃分、人員組織與分工、質量評估、缺陷檢查與糾正、系統成本控制、系統配置管理和用戶溝通等。
(二)實踐教學內容設計
軟件工程的學科和課程最大的特性之一是“工程性”,因此實踐教學以培養學生的軟件工程能力和素質為核心,按照“案例導向、項目驅動”的設計思想,以項目開發帶動軟件工程的理論學習,又以軟件工程的理論來指導軟件開發的實踐。依據三個原則開展案例和項目設計:
一是實用性原則,面向行業產業,面向應用,選擇具有較強代表性的案例、項目,教學組討論發掘各個選題的參考解決方案,同時,積極吸收和引用合作技術企業已有的項目進行改編,使之符合教學要求。
二是可行性原則,主要看所選案例和項目對于學生來說有無理解、設計和開發的可能,要結合學生的專業方向、學習基礎、知識和能力水平、特長興趣等人員因素綜合考慮,同時還要考慮現有的實驗設備和環境資源等外在因素。
三是創新性原則。要在案例和項目中盡量體現發展和創造性,如是否發現了新問題、構建了新模型、運用了新技能、改進了新方法,讓學生通過學習和練習,不僅實現模仿,而且激發出創新的膽識和能量。
(三)實踐教學的開展
實踐教學分為課內實驗和課外實踐兩部分開展。
課內實驗的目標是鞏固所學章節的內容及技能,包括可行性研究與軟件工程標準化實驗、軟件開發工具實驗、軟件分析與建模實驗、代碼編寫實驗、軟件測試工具與單元集成系統測試實驗、軟件項目管理實驗等,按照“案例導向、項目驅動”的設計思想,指導教師分析案例,提出問題,學生結合所選具體項目進行相應的練習,達到對問題的理解和解決。在課堂上完成的內容主要包括:項目開發指導,實例講解,要點引導;小組討論,小組報告;項目問題答疑和解決;教師和學生對各小組項目的階段評審等。
課外實踐是一項綜合性的工程實踐,通過一個完整項目開發的全過程實踐,培養學生綜合性的軟件工程能力。要求學生組成項目開發小組,采取組長負責制,組織結構可以根據組員的特長、能力來組內自定,各小組成員進行不同的工作職位角色的分工,角色可以輪換,以培養成員全面的能力[6]。教師定期或不定期地對設計過程進行監控,可以召開小組會議,聽取匯報,面對面地答疑指導,還可以通過網絡在線形式開展交流。鼓勵項目組成員間利用目前流行的協同工作工具如GitHub、Teambox等進行交流和協同。課外完成的內容主要包括:項目調研和資料的查閱,項目各階段工作的完成,包括計劃、分析、設計、編碼、測試、編寫文檔等。通過模擬軟件企業的軟件項目管理和開發過程,使得學生全面接觸實際項目,積累開發經驗。
(四)實踐教學指導模式
1. 專題設計
通過研究課程教學目標和課程教學內容,確定核心概念、方法、技能和要點,結合課程知識點把軟件工程實踐技術分為8個專題,如表1所示。
2. 創設場景
深度學習圍繞某個場景展開,依據教學目標創設場景。結合教學目標創設場景是深度學習的關鍵一步,直接影響后面各個教學環節的完成情況。
在創設場景之前需要進行完善的評估,包括對課程的評估和學生的評估。對課程的評估要考慮知識點在知識體系的位置、所需的背景知識、難易程度、相關知識點的關聯關系、擴展學習方向等;對學生的評估主要針對學生的專業基礎、學習風格、興趣愛好等。在合理評估的基礎之上,根據專題要求和學生實際來采取合適的教學指導策略,激發學生深度學習的能力[7]。
創設的場景通常具備四個屬性:知識性,結合教學目標、覆蓋相應的知識點,明確學生應掌握的基本原理、基本技能;實用性,與實際中的問題相結合,讓學生感覺到“學有所用”,從而激發學生學習積極性;層次性,所設計的目標難度設定要適中,過于簡單的場景無法引起學生的探索興趣,而難度太高,則會讓學生退卻;擴展性,要為學有余力的學生留出發展空間,激發他們去做進一步的探索。
3. 分析問題
學生進入場景,對場景所展現的問題進行識別,對涉及的對象進行提取,對各項條件進行梳理,試圖發現和理解核心問題。教師起輔助作用,引導學生把實際問題與已經學習過的內容建立聯系,展開自主思考。學生在教師的引領下,盡快發現需要解決的問題或矛盾、需要實現的目標是什么,找到問題的切入點,提取出問題的框架,并初步建立解決問題的模型。這是培養和訓練學生自主學習和探索能力的重要環節,教師的指導十分重要,例如,教師應當在合適的時機提出問題,引起學生深入思考,要根據學生對場景的分析,判斷學生的思路方向是否合理,認識是否到位,問題的提取和模型的初步規劃是否合適等,教師需要時刻關注各小組的進展[8]。在這個階段,教師角色由傳統的“傳道、授業、解惑”向“引路人、輔助者”轉變,要求教師充分運用教學經驗,靈活運用多種引導方法,并仔細觀察,在學生探索的過程中了解其學習基礎、認知能力、興趣愛好、心理特征,對其思考能力和自我控制管理能力進行有意識的培養,為下階段學生自主探索解決問題做好鋪墊,實現有意義學習。
4. 自主探究和協作交流
本階段采用自主探究和協作交流的學習方式,在教師的引領下,學生開展自主學習、探究學習、交流學習。具體可以分為以下幾個步驟:
(1)選題。學生可在教師指定的課題中選擇,也可自選項目,需對所選項目進行調查研究,給出可行性分析結論。
(2)組隊。學生自我協調,組成相應的開發團隊,按照軟件工程的標準編寫軟件開發計劃,組內統一認識,并征求用戶意見,修訂完善。
(3)需求分析。學生團隊對系統和軟件進行需求調研和分析,按照軟件工程的標準編寫軟件需求規格說明書,并進行團隊間交叉評審,文檔和評審結果提交給評委(含教師、企業技術人員、市場推廣人員和用戶)。
(4)概要和詳細設計。學生團隊進行系統及軟件的設計,按照軟件工程的標準編寫相應的軟件設計文檔,并進行組內自我評審,文檔和評審結果提交給評委。
(5)軟件測試。學生團隊進行系統軟件測試,按照軟件工程的標準編寫相應的軟件測試文檔,包括測試計劃、測試用例、測試結果和分析報告等,提交給評委,作為項目驗收的標準。
(6)交付。學生團隊提交課題最終成果,包括可行性報告、需求分析規格說明、系統設計規格說明、技術文檔、源程序代碼、可安裝/執行軟件、用戶手冊等。
(7)項目驗收。由評委對提交的課題最終成果進行驗收測試,確認系統的狀態。
(8)項目管理。學生團隊執行項目管理的各階段任務,包括任務分解和責任分工、項目實施計劃、進度跟蹤、過程監督,項目的質量管理和控制,軟件的配置管理和版本控制等。
協作交流分為組內協作和組外交流,組內協作伴隨實驗的整個過程,每個成員要積極查閱資料,確定要解決的問題及問題的解決方法等,才能相互補充、相互完善、相互促進,圓滿完成實驗;組外交流是通過問答的形式完成,包括對其他小組的設計思路、系統結構、所運用的技術方法的學習,對其他小組存在的問題進行提問和討論。
這是以學生為主體開展訓練、逐漸掌握和熟悉方法技能、積累經驗的重要階段。教師通過課堂答疑、課外網上交流來提供參考意見和相關資料,幫助學生去尋找解決問題的可能方案,而不是直接告訴學生答案;同時,還應鼓勵學生有不同的想法,不同的解決手段,使之敢想、會想,激活其創造的火花。教師在此過程中的作用是定期或不定期地組織、協調、引導,控制討論對象不偏離主題,對具有較大爭議的問題進行引導,對難點問題進行答疑,在適當的時候為學生指明方向;整個過程充分發揮學生的主動性和積極性,從而使之在討論交流中加深對知識的理解、在知識應用中去感悟、在操作中去體會,最終共同提高,既提升能力,又體驗到深度學習的魅力。
學生只有在經過了認真的問題分析、資料查詢、自主探究、主動思考后,才可能進行有意義的協作交流,從而理順思路,觀點碰撞,成果分享[9]。經過這個階段,把學習引入一個更深的層次,學生進行復雜的思維活動,完成分析問題、深入思考、思辨理解,潛力得到挖掘,優勢得到發揮。
5. 自我總結與點評
自我總結與點評是深度學習的最后環節,是對所學知識進行深化、遷移和提高,有沒有總結點評、總結點評是否到位直接影響深度學習的效果。學生在教師的引導下對每個專題進行總結,對學習成果進行分析歸納,對當前知識點進行自我理解、吸收、運用與提高,并撰寫研究報告,對每個專題中的理論知識、關鍵問題、關鍵技術等進行分析歸納,包括要解決什么問題,能夠與哪些知識和技術進行關聯,在這個領域有哪些新的進展和應用,在解決問題的過程中出現了什么新情況和新問題,本組和其他小組的解決方案有哪些相似和區別之處,各自的優缺點是什么,能否對現有的解決方案進行改進提高等問題,通過這些深度思考、評價等等內容,得出本次訓練的收獲,并進行展示。教師對小組展示進行補充,并指導學生完成研究報告,實現書面化總結。這個階段促使學生學會反思、歸納和整理思路,對自己的知識體系進行調整,完成個性化知識體系的構建,獲得更深層次的學習體驗,以用于以后的開發實踐。
三、結束語
針對軟件工程內容廣泛、技術發展快以及實踐性強的特點,提出了深度學習的實踐教學模式。在教學理念方面,一是突出對軟件工程知識和方法等信息的深度加工過程,緊跟軟件工程學科和技術發展前沿,保持教學內容先進性;二是突出軟件工程專業特點,通過案例項目的教學和練習、探索性實踐等多種活動,幫助學生深度理解復雜概念、深度掌握軟件工程原理和技術框架的實質,進而建構個人化情景化的知識體系,得以解決現實復雜問題;三是通過軟件工程實踐,讓學生參與實際軟件項目開發,鍛煉學生實際動手開發能力,培養創新精神。
在具體教學方法手段方面,充分運用情境式、案例項目式、啟發式手段,創設真實的問題情境,與工作崗位產生有效對接,有利于學生以后快速適應工作環境;通過對具體的軟件項目案例的講授,帶動相關核心理論知識的模式學習,使學生能更加直觀和自然地感受軟件項目全貌、開發過程,培養學生的個人職業技能;采用啟發式教學,從學生的知識基礎,心理特點和接受能力出發,促使學生主動學習,自我構建知識體系;并以實際工作任務為目標,引導學生自主學習、互助交流和反思總結。
在教學形式方面,采用課內實驗和課外實踐結合,推行團隊協作模式,按照軟件企業的項目管理和開發摸式,幫助學生組成軟件開發團隊,以合作的方式完成軟件項目,經歷一個完整規范的軟件開發過程,以實現相應的個人能力和協作精神的培養。
參考文獻:
[1]R·基思·索耶.劍橋學習科學手冊[M].北京:教育科學出版社,2010.
[2]黃偉.教師基于博客群網絡學習行為的實證研究——以海鹽教師博客為例題[J].中國電化教育,2010(11):22-27.
[3]賈義敏,詹春青.情境學習:一種新的學習范式[J].開放教育研究,2011(5):30-37.
[4]王洪才,劉雋穎,解德渤.大學創新教學:理念、特征與誤區[J].中國大學教學,2016(2):19-23+47.
[5]杜紅樂,張燕.深度學習在實踐教學中的應用研究[J].微型電腦應用,2015,31(4):37-40.
[6]李祁,王鳳芹.DELC視域下的計算機基礎課程深度學習模式[J]. 計算機教育,2017(5):108-111.
[7]宋慧敏.深度學習:應用技術型人才培養之必需[J].黑龍江高教研究,2017(12):130-133.
[8]賴紹聰.如何做好課程教學設計[J].中國大學教學,2016(10):14-18.
[9]馬慶棟.新型工業化背景下應用技術型人才“協同培養”的邏輯起點及模式探討[J].中國職業技術教育,2016(32):69-72.