閆 波,曹曉鵬
(北京理工大學 計算機學院,北京 100089)
卓越計劃,全稱卓越工程師教育培養計劃,是教育部貫徹落實《國家中長期教育改革和發展規劃綱要(2010—2020年)》和《國家中長期人才發展規劃綱要(2010—2020年)》的重大改革項目,也是促進我國由工程教育大國邁向工程教育強國的重大舉措,旨在培養造就一大批創新能力強、適應經濟社會發展需要的高質量各類型工程技術人才,為國家走新型工業化發展道路、建設創新型國家和人才強國戰略服務,對促進高等教育面向社會需求培養人才、全面提高工程教育人才培養質量具有十分重要的示范和引導[1]。
卓越計劃具有3個特點:①行業企業深度參與培養過程;②高校按通用標準和行業標準培養工程人才;③強化培養學生的工程能力和創新能力[2]。
軟件工程學科所涉及的內容十分廣泛,包含軟件生命周期各個階段所需要的知識、方法和工具。軟件工程不局限在理論之上,更重要在實踐上,良好的軟件工程實踐能夠幫助軟件組織協調團隊,運用有限的資源,遵守已定義的軟件工程規范,通過一系列可復用的、有效的方法,在規定的時間內達到預先設定的目標[3]。
軟件工程課程設計是面向計算機科學與技術專業和軟件工程專業高年級一門必修課,旨在通過實際軟件項目培養學生的需求分析和系統設計能力,并推廣于軟件生命周期全過程。相對于其他課程,該課程具有實踐性強、與計算機業界發展貼合緊密等特點。學生基于實際項目,完成軟件的分析和設計,嚴格遵照文檔規范,撰寫必要的項目工程文檔(包括需求文檔和設計文檔)。在實踐的過程中,使學生學以致用,鞏固軟件工程課程的知識,培養軟件研發工程化的意識和能力,掌握常用的軟件項目生命周期過程,深入理解和掌握軟件工程中需求分析和系統設計的過程與方法,為學生進一步地學習及走向實際工作崗位打下一個良好的工程基礎。
卓越計劃強調按照行業標準和企業標準培養學生,強調培養具有一定創新能力的優秀工程師,滿足社會要求和企業要求,強調實踐能力、工程能力和創新能力的培養[4]。軟件工程課程設計與卓越計劃要求具有良好的結合點,是北京理工大學計算機學院最早入選卓越計劃的課程之一。各個行業的優秀工程師教育規則不一樣,有相應的行業特點。面向卓越計劃的軟件工程課程設計應具有以下特點。
(1)實踐性。這是由軟件工程的自身性質決定的,面向卓越計劃的軟件工程課程設計有很高的實踐要求。
(2)工程意識和團隊協作。軟件項目開發有很強的工程特性,通過課程培養學生良好的工程意識,遵守軟件項目開發和管理規范。當前企業級軟件開發都是基于團隊合作,要求軟件工程師具備良好的協調和溝通能力。
(3)自學能力。計算機技術快速發展且廣泛應用于各行業,軟件工程師只有不斷更新自己的技能才能跟得上發展。
(4)創新意識和能力。大數據、物聯網、區塊鏈等計算機技術的發展要求軟件工程師要具有強烈的創新意識,發揮其創造性和主觀能動性。
在目前的軟件工程課程設計中,普遍存在學生參與性不強、案例與實踐脫節、注重個人主義忽略團隊配合、技術滯后、文檔不規范、評分標準不一致等問題,針對這些問題,圍繞卓越計劃的培養目標,筆者提出了面向卓越計劃的軟件工程課程設計方案。
當前,高校教師偏重學術研究,注重傳授理論知識,在課程設計中,只是適當地增加一些項目開發的案例,目的是對課堂上理論知識進行驗證。學生缺乏對實際工程項目直觀的認識,認識不到軟件工程的意義和價值所在,感覺課程枯燥,缺乏學習的興趣,學生的參與性不強,這是軟件工程類課程普遍存在的問題。
在軟件工程課程設計中,案例和實踐脫節的現象往往非常嚴重。在學習實踐過程中,學生難以驗證所學到的理論和技術方法,理論與實踐不同步。大多數軟件工程課程設計不能完全反映軟件工程理論,或者驗證涉及的理論相對較少且相對簡單。教學過程中教材的大部分理論內容都比較抽象,而課程設計只是讓學生編寫一些設計報告。所以,即使有豐富研發經驗的教師,有再多的案例介紹,但對于學生而言,對軟件工程課程的實際掌握基本上沒有多大幫助。學生只是完成了一項任務,如何在實際工作中使用還不得而知,教學和實驗的效果難以使人滿意、有效性得不到保障,學生對于課程知識的掌握以及動手能力的培養和提高都得不到有效的保證。
學生的計算機基礎參差不齊,在課程設計中,常常以小組的形式進行,課程設計成績的評定只取決于最終課程設計的成果,這往往只是小組內個別學生的勞動成果,難以落實到所有學生,而目前業界所有的研發項目都需要明確的角色定位、協同完成,學生的團隊協作能力得不到充分的培養。
軟件工程課程設計內容陳舊。當前軟件工程課程設計往往只是注重對課堂理論知識的驗證和鞏固。大多數的課程設計僅僅是局限于理論教學中所舉范例的驗證。計算機技術是一門高速發展的技術,很多內容更新換代的速度很快,而我們的課程設計提供給學生的案例大多內容陳舊,不能跟上計算機技術的發展速度[5]。
在軟件工程課程設計中,學生往往只考慮編程能力的提高,忽略了文檔的重要性,這種現象十分嚴重。學生沒有實際參與過重大工程項目,難以了解文檔的重要性。在實際軟件工程項目當中,一般認為代碼的工作量只占工程全部工作量的30%左右,與之相關的工程文檔如需求分析文檔、設計文檔等,才是整個軟件工程項目的核心所在。工程文檔的書寫比較枯燥,軟件工程文檔的多樣、復雜和高質量給學生形成一個很高的門檻。盡管教師十分強調文檔的重要性,但學生很難產生共鳴,依然認為文檔無用。
軟件工程課程設計的成績評定因學校、因教師而異,課程設計考核方式不明、缺乏量化,尚未形成統一的評分標準。
圍繞卓越計劃的培養要求,引入教師和企業聯合培養機制,通過企業IT專家的講座,讓學生充分了解企業實際的人才需求;由教師與企業聯合制定實踐用的軟件項目案例,有效解決案例與實踐脫節和技術滯后等問題;優化課程設計流程,明確課程設計考核方式,讓每個人在課程設計過程中都有自己的角色,從而解決了參與性不強、個人主義和評分標準不一致問題;通過企業案例的學習,學生可以接觸到規范化的工程文檔,引入軟件生命周期過程中的工具和框架可以有效培養團隊合作,量化工作,改善學生存在的文檔不規范等問題。
外聘經驗豐富的企業IT專家,介紹IT企業中軟件研發過程中的人才選擇、職業規劃、團隊組織、需求獲取等實際的問題和經驗,幫助學生拓寬思路和明確方向。外聘專家以企業實際案例為主進行講座,使學生可以直觀地了解到IT企業的人才需求和項目運作的方式,增加學生對業界的了解。每年的講座內容由教師和外聘專家共同制訂,從而保持先進性。
由教師與企業聯合制訂實踐用的軟件項目案例,案例來源于企業已經研發完成的實際軟件項目。項目若涉及商業機密,需進行脫密改造,如精簡項目案例當中的業務問題、強化軟件工程的流程性等。項目應當能夠通過嚴格的測試,并且在使用周期內運行良好。由教師和企業聯合評估技術難度,使案例可以符合教學要求。企業項目伴隨著相應的規范化開發文檔,對學生進行規范化軟件開發過程訓練有很好的示范作用,由企業負責整理需求和設計文檔,全部文檔應該符合公用標準規范,比如CMM規范等。
在軟件工程的需求分析和設計過程中,學生需要具備計算機應用知識,能選擇合適的技術手段,運用工程化的知識進行需求分析和系統設計,針對復雜的工程問題,能運用工具完成需求分析與建模和系統設計。通過流程優化來提高課程設計的合理性,以分組的形式來進行軟件工程的實踐活動,完成指導教師所分配的實際軟件項目,學生應用軟件工程中需求分析和設計的方法,以團隊協作方式完成項目的需求分析和設計(目前課程設計只支持需求和設計階段,后續會貫穿全過程),并提交規范的文檔。
指導教師提供實踐工程項目,學生分成小組協同完成項目的需求和設計工作,由小組組長分配任務協調工作,每周指導教師與學生面對面溝通項目實施情況,解決學生在項目需求和設計中存在的問題,小組內部以周例會或日例會形式溝通任務實施情況,協同推進項目的進展。通過每周與教師的溝通和研討以及小組協作,完成工程任務同時培養溝通和交流的基本素養。在工程實踐活動中,強調組長(項目經理)的職能,學生小組組長進行任務分配,組織項目的實施,協調組員之間的工作,通過每周的例會分配任務并檢查完成情況,平衡進度和質量。通過每周小組與指導教師的交互,澄清問題、跟進問題的解決,小組成員在組長的帶領下,分工協作完成項目需求分析和系統設計并完成文檔的撰寫。同時給組長賦予更大的權限,如匿名評價組員的工作,這樣形成制衡機制,解決了“大鍋飯”的問題,也使得成績評價更全面。
在評分方面,教師嚴格實踐軟件需求和設計過程階段的檢查,根據學生在軟件項目需求和設計的完成情況以及提交的綜合大作業,并結合學生個人在實踐中的參與程度和表現評定成績。同時,引入評價工具,使衡量更為客觀和量化。
軟件開發工具是用來輔助軟件生命周期過程的一系列專業工具。通常可以設計和實施工具以支持特定的軟件工程方法,從而減輕手動管理的負擔。熟練地使用軟件開發的工具,在軟件開發過程當中顯得尤為重要,可以達到事半功倍的效果。目前針對課程設計引入業界常用的一些工具和框架。
需求管理工具的使用貫穿于整個項目周期,有效地促進團隊溝通,幫助工程開發人員便捷地管理變更和評估變更可能帶來的影響。Rational RequisitePro是一個功能強大,易于使用的集成需求管理產品,為軟件工程生命周期的各個階段提供了強大而便捷的信息查詢、跟蹤和管理功能[6]。
在系統設計階段,設計工具可以幫助開發人員便捷地進行系統建模,典型的數據庫設計工具如PowerDesigner,它可以為系統設計和開發的不同階段提供數據庫設計開發和應用開發[7],而原型工具(如Axure RP)可以實現專業的快速原型設計。Rose可以應用于面向對象的需求和設計全過程。
在團隊協作和項目管理方面,業界有大量的優秀工具,如Microsoft Project是一個通用的項目管理工具軟件,凝集了許多成熟的項目管理現代理論和方法,可以幫助項目管理者實現時間、資源、成本的計劃、控制[8]。SVN(Subversion縮寫)是一個用于共享信息的集中式系統,可以記錄每次文件和目錄的修改,允許獲取以前版本的數據,以便可以檢查所做的更改,如果更改不正確,只需取消更改即可[9]。Git是一個開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。Teambition是國內團隊協作工具的倡導者,通過幫助團隊輕松共享和討論工作中的任務、文件、分享、日程等內容,讓團隊協作煥發無限可能。
在課程設計開始階段,由教師和企業針對這些開發工具的使用對學生進行相關的培訓,讓學生可以在完成課程設計的不同階段對相應開發工具進行實際上手,熟練掌握開發工具的使用。
應對大數據時代對卓越軟件工程師的需求,依據卓越計劃的標準,結合軟件工程課程設計的特點,軟件工程課程設計改進方案可有效解決目前軟件工程課程設計所存在的不足,培養學生的工程能力、溝通能力和團隊協作能力,有利于高層次軟件工程技術人才的培養。