魏恒義,安 健,鮑軍鵬
(西安交通大學電子與信息工程學院,陜西西安710049)
ACM/IEEECS2013的重點是強調系統知識和系統能力的培養[1],系統能力包括系統分析能力、系統設計能力和系統驗證能力3個方面[2]。針對信息系統設計專題實驗綜合實踐課程包含內容廣泛、教學實施困難的問題,提出一個四維教學模型用于培養學生的系統思維方法和軟件開發能力。綜合運用多種知識解決復雜系統級問題是系統能力的重要表現[3],能刺激學生的首創精神和熱情[4],給學生一個“整體大于各部分的總和”的實際體驗[5]。
信息系統設計專題實驗的目標是培養本科生的軟件系統開發能力。該實驗是培養學生貫通程序設計、數據庫和軟件工程知識,以軟件產品開發為導向的綜合實踐教學活動,也是工程教育的實施過程[6]。課程實施中很容易使學生陷入局部的軟件編程中,無暇顧及涉及的方法和系統能力。教師在教學中也難以有的放矢地補充相關的知識和技能,幫助學生提高開發大型軟件的系統能力。針對該問題,我們設計了一個四維教學模型,綜合培養學生的系統思維和軟件系統開發能力,幫助學生在實踐中靈活運用知識和技能、在團隊協作中突出重點。
該維度的目的是引導學生將基礎理論和方法應用到實踐項目中。課程在面向對象程序設計基礎上補充面向對象的分析設計方法,構成軟件開發能力的基礎;在數據庫理論上需補充建模理論和方法,將軟件體系結構理論通過B/S結構、C/S結構、移動應用等技術具體落實。
好的工具可以讓學生體驗軟件開發方法的內涵和應遵循的標準規范。該維度對需求分析、設計、實現和測試各個階段采用的規范和工具進行實例教學,培養學生規范和準確表達軟件各個開發階段的模型,貫穿設計思想。課程采用需求描述模板對學生選題和分析進行起步導引,采用UML建模實例引導學生從用例圖開始建立系統需求模型。完整的應用示例幫助學生了解問題與設計模型的映射關系;實體類與關系數據庫模型實現方法的比較、數據庫建模工具的示范可以解決信息持久存儲問題。系統實現階段以Web應用、移動應用的范例教學為主,讓學生借鑒和模仿范例,提高編碼效率。
產品化是軟件的終極目標之一,該維度培養學生綜合考慮軟件功能需求、面向的領域、軟件分布架構、軟件配置、使用方式等產品特性。課程重點考慮如下兩個問題:①軟件分布結構和部署對軟件產品的影響;②軟件產品的功能和非功能需求。
軟件分布結構和部署看起來是兩個技術問題,但會影響軟件系統的可用性和受歡迎程度。軟件的分布結構和部署與采用的開發技術密切相關,開發小組可從產品市場化的角度選擇軟件結構和部署策略。在復雜的軟件開發中學會取舍與平衡也是學生創新能力的體現。教師應引導學生在開發中不忘系統的可擴展性、可配置性、網絡和通信協議、持久性、并發性等非功能需求,以適應市場需求。
針對耗時最多的編碼實現,教學中需要注意如下3個問題:①指定開發技術與學生自選技術對課程進度的影響:以指定技術為主線,教師可以通過精心準備的講義、實例、視頻和資料提高學生的效率。②編程框架與第三方軟件的采用:課程對Web應用框架的演變進行詳細講授,幫助學生選擇適合的Web應用服務器、數據庫系統和編程框架。③數據的持久化存儲問題:實體類圖與關系數據庫模型具有天然的不相容性。分析Java的持久性機制、持久性框架以及面向對象數據庫等解決方案,使學生能夠兼顧應用程序規模、復雜性、技術成熟度、學習成本與開銷等因素,選擇合適的數據存儲方式。
理論教學中軟件開發能力綜合知識之間的相互關系和協同往往被忽略,導致大學生創新能力培養績效不高[7],該四維教學模型是指導教師和學生提高系統及創新能力的導引。
該維度主要從以下3個主要問題入手,將學生的理論知識與實踐環節銜接。
1)面向對象分析與設計方法與軟件系統建模技術的對接。
面對一個實際問題,如何將面向對象的分析與設計方法落實到建模技術的具體視圖是首要解決的問題。深刻理解UML視圖對RUP4+1方法的具體表示,可以為UML模型精準體現分析設計的思想打下基礎。RUP4+1方法與UML視圖的對應關系有:①二者都采用用例視圖描述參與者對系統功能的期望,用邏輯視圖描述系統功能的內部設計和協作,用配置視圖描述軟件到硬件的映射及分布特性、依賴的庫和其他支持軟件;②RUP4+1中的實現視圖對應UML中的組件視圖,描述軟件實現模塊及其依賴關系、代碼的組織方式;③RUP4+1中的進程視圖對應UML中的并發視圖,描述系統的并發性及通訊,關注進程、線程、對象在運行時的交互問題。
2)面向對象模型與關系數據庫模型的映射。
數據模型是信息系統設計中的重要部分,將數據庫概念模型、邏輯模型和物理模型理論通過建模工具有效的實施,可引導學生完成數據存儲和訪問設計,加深對數據庫理論的實踐體驗。
3)軟件體系結構理論的落實。
教師應對B/S結構、C/S結構、移動應用等主流軟件體系結構進行示范,指導軟件架構設計,幫助學生綜合平衡項目需求、團隊技術基礎、成員興趣等因素,處理好宏大理想和32個有限課時的矛盾;要讓學生深刻體會利用建模工具表達自己的軟件分析和設計思想是重點,而不是工具本身如何操作。
工具承載了豐富的軟件開發思想和方法,課程對UML建模工具、關系數據庫建模工具、面向對象編程工具的要求是:①對建模工具StarUML進行示范,提供MOOC短視頻讓學生了解有關細節;②通過數據庫建模工具的示范,將概念數據模型、物理數據模型、正向工程、逆向工程、模型報告生成落到實處;③強調Eclipse加擴展插件的編程框架;④對關系數據庫MySQL、Tomcat應用服務器等相關軟件以實例示范為主,供學生快速學習模仿;⑤代碼管理工具推薦采用GitHub管理小組協同編碼。
為了培養大學生的創新創業能力,在應用領域與軟件產品維度上的教學要強調實踐項目的產品化特性。關注點一是項目的選題領域與規模,二是從軟件產品的角度考慮用戶需求和市場的適應性。對有創新創業意愿的學生,教師要在選題、設計和實現中進行重點關注,同時結合相似的產品軟件進行對比分析,以提高學生的市場意識。
面對新技術快速發展帶來的挑戰,任課教師必須不斷地更新課程內容,學生需要對新技術學習投入時間成本。讓學生針對具體項目需求選擇合適的實現技術并能快速學習掌握是本維度的難點。
1)實現技術的模仿與運用。
選擇合適的實現技術是軟件工程的核心之一,教學中對C/S、B/S以及移動應用結構的應用實例進行示范并提供原型系統供學生模仿,此種方式適合沒有額外時間投入的學生順利完成課程。
2)實現技術的學習方式。
在課程中靈活運用如下幾種教學方法,可以有效提高新技術的學習效率:①利用短課堂梳理理論主題。對面向對象方法、“RUP4+1”視圖等理論進行課堂歸納可以快速將方法引入實踐;對StarUML等工具,通過實例示范講授快速引導學生模仿和細化。②“干中學”對實踐課程尤為重要,可以解決技術細節學習。“干中學”的實施主要依靠小組內部溝通和師生互動環節。課程教學中設計了選題與項目可行性評估、需求模型、數據庫模型、設計模型和作品討論5個師生互動環節。③組織針對性的文字資料、MOOC短視頻、應用示范源代碼供學生進行細節學習和模仿,提供“為什么需要多個模型或視圖描述系統”之類的問答資料以及“用戶眼中的業務流程——活動圖”之類的短視頻示范。豐富的在線資料和幫助文檔構成技術細節的學習條件。④團隊精神培養通過在實踐中以問題為驅動、以團隊成員分工合作的方式,讓學生體驗感受團隊攻關的價值與樂趣[8]。在5個師生互動環節中,各個團隊可以相互觀摩、協同學習。⑤體驗學習的目的是軟件開發經驗的傳遞。一種形式是教師會提供一些高年級學生的作品作為示范資料;另一種形式是在5個師生互動環節中相互學習。
3)技術發展的適應性引導。
技術和工具的發展是必然的,指導教師在教學中的歸類理解、探詢本質、舉一反三,可培養學生求新求變的興趣,提高學生自學習、自適應的能力。
教學中對縱向4個維度的主題內容進行歸納、示范和推進,在橫向上進行交叉融合;對不同層次的學生和課時量,在保證主題內容完整的前提下,進行內容深度的裁減。
課程的選題分為教師指定和學生自選兩大類。教師選題包含信息管理、物流、電子商務等10余個選題。教師選題的應用細節由學生根據領域知識細化。自選題目來源于大學生創新實驗、參與的科研與社會實踐以及學生自主創業項目。
程序設計基礎、數據庫理論和軟件工程方法都會在課程中深入實踐。在“選題與項目可行性評估”互動環節中,每個小組用5min的PPT講解項目需求,與指導教師進行討論,根據小組成員的基礎和時間投入確定系統邊界,在四維框架下堅持課程主線內容,適當擴展個人興趣點并樹立信心。
培養框架的4個主題及其內容細節協同體現在需求分析、設計、實現和測試的各個階段,表1是目前課程的進度與內容安排,每次課程一般為4h。
(1)課程采用“原理性與工程性相結合、分析式與綜合式相互動”的教學方法[9]。課程設計的5個師生互動環節也是階段驗收和過程考核點。①選題與項目可行性評估是指導教師與各項目組互動的第一個環節,目標是落實項目小組,根據小組人力和技術基礎評估選題規模和時間可行性,處理好需求與有限課時之間的矛盾。互動結果是項目組能寫出項目需求描述。②需求模型討論中,教師針對小組匯報結果與小組討論,對系統邊界、功能、數據基礎等問題提出具體意見,完成第1次考核評分。③設計模型討論重點考查學生能否合理采用UML描述系統的結構、流程和處理方法,指導教師提出修改意見,完成第2次考核評分。④數據庫模型討論考查學生將面向對象的實體類映射成關系模型的結果,對模型進行點評,提出建議,進行第3次考核。⑤作品演示中,項目小組每位成員匯報自己開發的功能,回答教師的提問。現場檢查單是師生互動的憑據,學生填寫自己匯報的內容,指導教師評估作品等級,并在現場檢查單上記錄學生的貢獻度、代碼理解和調試情況。
(2)考核評分是針對每一位學生的,主要依據是小組作品等級、個人設計實現報告和5個互動環節中小組成員的貢獻。評分內容包括需求分析結果及討論10%;模型設計(含數據庫模型)結果及討論15%;作品演示驗收40%;設計實現報告25%;平時考核10%。

表1 課程的進度安排與內容
實踐教學是培養學生創新精神和實踐能力的一個重要環節,其體驗知識過程還伴隨著探究性的學習活動[10]。多年的教學中,該教學框架扎實提升了學生軟件開發的系統能力,對教師和學生也提出了新挑戰。要讓學生有興趣投入這個繁雜、綜合性和系統性強的課程,教師必須在知識的凝練、實驗范例準備、資料的完整性準備、MOOC短視頻的錄制、互動交流等教學環節投入精力。實施中的主要困難是部分學生的前序課程基礎薄弱,每年都有中途退課的學生。能堅持完成的學生都感受到課程系統性強、包含內容豐富,同時也對先修課程進行了夯實與運用。學生在報告中寫到“這應該是大學以來做過最難的實驗,也比較耗時間,前前后后投入了很長時間。聽學長說這個實驗很難,但當時還是選了,當然也收獲不少,真的切身體驗到學習的樂趣,感覺能做成一件事,還是很有成就感的”。