王小平 裴喜龍 衛志華
(同濟大學電子與信息工程學院計算機科學與技術系 上海 200092)
面向計算機專業的軟件開發技術課程集成發現教學法探索
王小平 裴喜龍 衛志華
(同濟大學電子與信息工程學院計算機科學與技術系 上海 200092)
在調研和分析國內外高等院校計算機和軟件工程相關專業課程體系及其存在問題的基礎上,面向信息技術高端人才需求和新舊體系調整的要求,基于軟件開發中的抽象思維(對象思維、模式思維和架構思維),提出了以運用能力為主要目標的集成發現教學法和教學模式。并且,進一步探討建立以軟件開發方法及其綜合實踐為核心的應用軟件課程教學體系,重組基礎課程、核心課程和相關平臺應用課程關系, 使這些課程內容聯系更加緊密, 銜接更加順暢,有利于學生運用能力和創新能力的培養。
軟件開發技術 課程改革 集成發現教學法 抽象思維
隨著信息技術和計算機學科的發展,軟件系統的重要性在整個計算機系統中所占的份額及其本身的復雜性迅速地提高,使得它的開發代價和重要性超過了基本硬件系統。目前,相對于信息技術發達的國家而言,我國信息技術及其產業的發展面臨“技術少標準、開發缺規范、生產無檢驗、質量無保證”落后壓力。本科生教育是信息技術人才的主要源頭,問題求解、程序設計、軟件開發和創新能力是計算機專業人才優劣衡量標準中最重要的方面之一。然而,軟硬件能力的培養并非一兩門課可以完成的,而是需要一個長期的、有目的的修養過程。系統及其運行信號的非直觀可視性,又使得這種能力在很大程度上依賴于邏輯思維方法、抽象思維能力,以及對學科發展過程中不斷深化的自頂向下、逐步求精、分而治之等思想,依賴對計算理論、抽象建模、系統設計和實現三個過程的基礎內容掌握程度。另外,不斷涌現的新問題求解、新系統設計和創造、新技術應用,也凸顯了本學科創新思維和能力培養的重要性,要求學生對目前的軟件開發技術和研究發展狀況有很好的理解和掌握,以適應當前應用及未來發展的需要。計算機專業教學內容和形式也在發生深刻的轉變,要求傳統的 “教導”或“灌輸”、自底而上的單一展現模式,逐漸構建為自頂而下的“集成式”、目標導向的“發現式”、問題求解的啟發式,甚至是這些模式的混合體。這些教學方法和教學模式的研究、發展和逐漸成熟,將會受到廣泛關注,作為教學方法論的參考,也會逐漸被開放式背景下類如MOOCs和SPOCs在線形式教學方式所接受,使得更為廣泛的受教育者獲益。
2013年底 IEEE & ACM聯合發布 CS2013[1],這一版本與CC2001和CS2008比較起來,在知識體系有了較大的變化。CS2013包括18個知識領域,其中軟件開發基礎(SDF)和系統基礎(SF)作為兩個新的知識領域被正式提出,并列出了各種不同類型大學的80個課程樣本和5個完整的課目樣本。現有的課程包含不同知識領域的論題,可以用不同方法組合成一個完整的課目,在課時數滿足的前提下覆蓋所有課目的知識單元。
計算機科學與技術作為一門學科的邊界很廣闊,學生興趣又各有不同,這就要求專業的課程體系為學生在本科階段的學習提供不同的選擇。但無論如何,學校課程的教學體系也有責任保證,不論學生的選擇是什么,都能學到計算機系統的核心知識和主要專業技能。例如,軟件開發方法學作為一門新的專業課程在國內許多高校相繼開設,包括天津大學計算機專業自2011年開始開設“軟件開發方法論”,北京大學、西安交通大學、西安電子科技大學等都先后開設了類似的課程,相應的教材也開始編寫。但系統性不強、內容陳舊,應該與非計算機專業的《軟件開發技術基礎》教材要求有較大的區別。不僅要求學生掌握軟件開發各個階段的技術方法,還要求掌握軟件開發全過程的技術方法,這是計算機專業培養系統能力的重要入口,如軟件建模、構件技術、軟件架構和基于平臺的開發技術,并且強調可盡量采用新的技術、管理方法和新工具,與軟件開發技術的行業標準相適應。北大青鳥軟件開發培訓課程作為國內IT職業教育的知名品牌,迄今已持續十多年,一方面說明不同層次軟件開發人才需求旺盛,另一方面也說明了目前學校專業教育的短板。只有在理論、技術和實踐能力都有較高水平的教學要求,并付諸實施,才能滿足目前信息產業高端人才的緊缺需求。
本文在調研和分析國內外高等院校計算機和軟件工程相關專業課程體系及其存在問題的基礎上,面向信息技術高端人才需求和新舊體系調整的要求,基于軟件開發中的抽象思維(對象思維、模式思維和架構思維),提出了以運用能力為主要目標的集成發現教學法和教學模式。最后,進一步探討建立以軟件開發方法及其綜合實踐為核心的應用軟件課程教學體系,重組基礎課程、核心課程和相關平臺應用課程關系, 使這些課程內容聯系更加緊密, 銜接更加順暢,有利于學生創新能力的培養。
在IEEE & ACM CS 2013中,包括18個知識域[2]:算法與復雜性、體系結構與組織、計算機科學、離散結構、圖形和可視化、人機接口、信息保障和安全、信息管理、智能系統、網絡與通信、操作系統、基于平臺的開發、并行和分布式計算、程序語言、軟件開發基礎、軟件工程、系統基礎、社會議題和專業實踐。其中,軟件開發基礎,過去叫編程和系統導引,包括算法、設計、編程和軟件開發過程。它是一些基礎軟件開發概念的組合。系統基礎也是一個新的知識領域,包括操作系統、網絡、計算機體系結構的常用論題。為了并行計算的普適性和計算機安全更好理解的需要,加入了并行和分布式計算、信息保障和安全和基于平臺的開發等課目。比以前關注較少的內容包括數字邏輯、數值方法、網頁設計、檢索引擎、語言翻譯等,在CS2013中算作選修材料。CS2013還概括了CS研究生除專業技術之外與專業實踐有關的一些特征,譬如溝通能力、團隊合作和倫理道德,也是大學生經驗的一部分。
值得關注的軟件開發方法新要求,要求教學中論及一種軟件開發方法時, 應該考慮以下因素: 開發全過程, 在各階段間的模型轉換和技術銜接;便于在開發各階段人員之間的技術交流和迭代性改進;支持有效解決問題的綜合決策和管理; 支持系統設計和實現的各種不同途徑;支持軟件正確性的檢查、測試和驗證;滿足在系統需求中有關抽象設計、系統環境和性能的約束;支持設計師和程序員創造性的勞動;支持系統生存周期的演化; 高效率使用一些自動化工具。 此外, 所有階段軟件開發成果物都應該是可預見和可控的。這些新要求對軟件開發的專業教學提出更高的標準,應該可演示、可轉移、可重復驗證,并且在技術實現上是開放的。
如何把計算機專業的一門軟件工程學科有效地分解為初級課程和多門高級課程?如何解決現有課程體系中計算機硬件與系統課程中的裁剪和求精問題?如何在專業教學初期引入軟件工程的觀念,并將其在教學中與程序設計、軟件職業、團隊交流溝通相結合?南京大學軟件學院在軟件工程學科建設實踐中,依據國際軟件工程學科教程CC-SE2004建議,軟件工程專業教學計劃的技術課程包括初級課程、中級課程、高級課程和領域相關課程[3],其中初級課程包括離散數學、數據結構與算法兩門公共課程,另三門組成計算機科學優先方案(程序設計基礎、面向對象方法和軟件工程導論)和軟件工程優先方案(軟件工程與計算概論、軟件工程與計算II、軟件工程與計算III);中級課程覆蓋計算機硬件、操作系統、網絡、數據庫以及其他必備的計算機硬件與計算機系統基本知識;高級課程包括6門課程,覆蓋軟件需求、體系結構、設計、構造、測試、質量、過程、管理和人機交互等;領域相關課程、與具體應用領域相關的選修課程可以結合各自學校辦學特色開設。因此,在求精計算機硬件與軟件系統課程的基礎上,強調在專業教學的早期培養學生的軟件工程觀和計算機系統觀,融合軟件工程基礎、程序設計、職業團隊等知識實踐的“軟件工程與計算”系列課程,通過案例教授中小規模軟件系統構建;圍繞大中型軟件系統構建知識分領域,組織軟件工程高級課程;圍繞軟件工程應用領域,建設領域相關課程。在教材建設上編寫了《軟件工程與計算》三卷本教材(《軟件工程的編程基礎》、《軟件開發的技術基礎》和《團隊與軟件開發實踐》)作為軟件工程本科專業的入門課程教材。
目前專業課程教學中不同程度地存在的一些共性問題: 對于教師和課程體系而言,課程之間聯系不夠緊,課程實踐缺少系統安排,指導不夠。計算思維的方法把握和指導不夠; 教學手段單一化,教學方法不能緊跟發展需要,教師參與和提升教學能力和水平的動力不足。對于學生而言,知識點聯系缺口比較多,對自學能力不強的學生存在不少障礙; 學生學習和能力提高要么盲目,要么不夠主動,效率較差。抽象建模能力弱,專業思維能力有待提高;對軟件工具、開發環境、軟件不同階段常用的成熟開發技術和管理手段把握不夠;實際的比較復雜軟件項目參與少,創新能力缺少基礎。顯然,對于教師、課程體系和授業對象學生,其中有些問題是相對存在的,比較突出的是課程體系集成性先天不足,不利于激發學生發現問題和解決問題的興趣,培養學生的專業思維能力和系統觀,需要從高度集成性和問題發現、知識挖掘入手,使學生在專業素質和能力培養有較大的上升空間。
2.1 軟件開發中的抽象思維
計算機科學中很多涉及到算法、設計、系統的問題歸結到計算機問題求解,這樣思維技能的培養,可以是科學思維(例如大數據中挖掘科學規律)、算法思維(例如,根據領域原理設計和應用算法求解問題)、效率思維(計算、通信和控制體現在不同領域都有效率問題,有計算效率、經濟性的效率),還有創新思維(例如,計算機網絡環境下可以支持協同工作,不同專業的人員甚至普通大眾可以參與到任務完成的眾包問題求解,強調社會計算的思維等)。計算思維實際上不是只來源于計算機,而是更多地來自于自然和社會中人工系統設計和應用中比較共性的東西,總結出計算模型應用的模式、策略和規律來,方便交流和思考問題。從思維的角度而言,軟件開發的本質就是要實現概念世界到設計模型和物理模型的映射, 實現高層處理邏輯到低層處理實現的映射。抽象思維有很多思路和方法,對軟件開發而言,對象思維、模式思維和架構思維很重要,三者是從微觀到宏觀遞進的相互關聯關系。
(1) 對象思維 是結構化思維的進一步發展。在結構化程序中,程序=數據結構+算法,結構化思維用“過程”來刻畫數據間關系,結構化中,數據是死的,全部依賴算法操作,結構化思維更像是一個人在解決所有問題。面向對象程序,對象=(算法+數據結構),程序=(對象+對象+…)。對象思維直接用類表達數據間關系;對象思維中,數據是活的,“她”知道自己的信息(屬性),并能完成自己的工作(操作);對象思維更像是一個團隊的分工協作。當然,相對而言,對象思維是一種揚棄,不是否定結構化思維。如果說結構化編程是一種符合機器指令執行過程的一種實現,那么對象思維就是符合客觀世界對象靜態構成和動態交互行為的一種實現。面向對象的軟件分析和設計時,不是直接面向程序代碼的實現,而是需要先根據實際需求建立業務過程模型,思考應該如何去抽象描述和實現這些業務過程。從這個意義上而言,軟件只是一個實際業務的載體,其中最重要的目標是業務過程的實現。統一建模語言UML及其可視化設計工具是這種對象思維的最好實現,作為設計活動交流手段,也支持軟件過程的迭代和改進。以用例描述和刻畫需求,以多個靜態視圖和動態視圖建立對象元素之間的聯系和交互行為,使對象系統實現建立在系統分析和設計的藍圖之上,許多流行的IDE都支持這種集成性的實現。面向對象程序設計語言的抽象數據類型、封裝性、繼承性(泛化)、多態性、消息和事件機制等,保證了對象思維成果的代碼級轉換。
(2) 模式思維 可以認為是對象思維的高級形式。如何應用設計模式?其實,任何復雜對象聯系問題都可以通過增加一個間接層次來解決,即所謂的抽象層。設計模式的核心思維, 用一句話來高度概括就是:多態包容是諸多設計模式中都反復出現的經典技術,通過多態來適應各種變化。而所謂多態包容是指宿主對象中包含抽象基類(或接口)的引用,而實際行為委托給這個引用所指向的實際對象,從而使這些行為可以根據該引用所指向的實際對象不同而不同。因為在對象級模塊設計階段,最關鍵的問題是系統設計的要素及其關系是經常變化的,對象設計方法上需要適應和包容這些變化[4]。如果只是試圖捕捉和描述這些變化,還是停留在分析階段;當然,如果設計的對象模塊只是能夠面向未來,相對于軟件開發成本和時間而言也是不允許的。實踐表明,分析和設計兩個階段存在必要的轉換和迭代,但過分的分析和設計都是事倍功半的。如果在分析階段能夠判斷變化將要發生,到設計階段能夠判斷變化將會在哪里發生,并且包容這些變化,這樣就形成了幾個著名的面向對象設計原則,也是對象復用設計的經驗總結。例如,針對接口編程而不是針對實現編程;優先使用對象組合和聚合,而不是應用繼承。考慮設計中哪些要素是可變時,什么原因導致設計改變有時并不重要,而不會引起重新設計的封裝才是復用設計的重點。也就是說,封裝變化的概念是模塊設計的主題。掌握這一問題的思維方法,我們才需要學習重構技術影響最大而且最成功的應用, 這就是GoF 的 23 種設計模式,在 GoF 設計模式中,把設計模式分為結構型、創建型和行為型三大類,從不同的角度討論了軟件重構的方法。
(3) 架構思維 架構思維是總體宏觀思維,也是高層思維。架構思維“只可意會,不可言傳”,它是一門與實踐緊密結合的藝術。設計模式和軟件架構技術是軟件復用新技術,是構件技術的發展和延伸。類庫和構件庫主要側重于代碼及其物理上的復用,而設計模式則側重于軟件分析和設計階段的業務過程對象的復用。軟件架構介于二者之間,它把軟件的應用領域需求和特征與軟件的基礎架構中的要素有機地結合起來,可以認為是一種宏觀的可復用構件,是一種框架技術。主要包括三個方面的思想,一方面架構的設計起源于需求分析,另一方面架構設計更加關注軟件系統的質量需求(即非功能性需求);第三方面,架構的實現還依賴于好的開發環境和項目管理。所以,軟件架構設計是一個系統工程,它需要系統架構師有很寬的知識面和實施能力,從需求分析、架構設計到模塊設計和實現,直到軟件測試、運行和維護都需要有透徹的理解。 而對于初學者而言,設計是架構、構件、接口以及系統其他特征定義的過程,需要適應企業需求和變化的架構模型元素有哪些?如何通過分層應對復雜性和變化,構建穩定的架構?如何通過分包,實現構件化開發?這些問題是非常基本的。
借鑒古代三國的英雄角色,可以理解架構中的角色和功能怎么匹配的?如圖1所示一個Web應用框架[7]。可以參照根據架構模型元素和三國故事情節之間的隱喻關系如下:單一入口相當于守衛荊州的“門神關羽”; 路由相當于劉備的引路人徐庶; 控制層相對于掌柜曹操; 業務模型層相對于鞠躬盡瘁的勞模諸葛亮; 表示層相對于戰神呂布; 異步處理相對于劉備的幕后英雄趙云; 接口層相對于孫權的外交官魯肅; 數據層相對于曹營的后方夏侯敦; 緩存層相對于曹操五個良將之一的張遼; 通用類庫相當于曹操的謀士郭嘉,三國演義中說“天生郭奉孝,豪杰冠群英。腹內藏經史,胸中隱甲兵。” 這樣陣容的精英團隊組合在三國時代打天下也無敵了,那么架構的思維就是謀天下的大思維,要學會結合對象思維和模式思維,從局部到整體集成上理解架構思維。離開了架構思維,專業知識的集成和能力創新就無從談起。

圖1 一個Web應用架構中的隱喻
2.2 集成發現教學法
2002年美國學者James F. Kurose和Keith W. Ross在《計算機網絡:自頂向下方法》 [Computer Networking: A Top-Down Approach]一書[5]中提出的極富盛名的“自頂向下”教學法是從計算機網絡的原理及其協議教學中總結出來的,從高層的應用層協議開始沿協議棧向下層講解,可以從實現、應用的角度更好地理解各層網絡協議的意義,教學中強調應用層范例和編程接口,學生可以在實際應用程序環境中進行學習、模仿和創造。傳統的計算機課程體系人為地割裂了解決問題時所需技能的綜合性。例如匯編語言、計算機原理、計算機系統結構、操作系統和編譯原理分別從不同角度介紹了計算機的硬件和軟件系統,但是隨著多核系統日漸成為主流,這種軟硬件分離的教學方法變得不切實際。國內外大學都在這方面展開了探索,即如何用一種綜合的方法來講授計算機系統的相關內容。卡內基·梅隆大學的《深入理解計算機系統》是目前比較成功的探索,它主要從程序員視角來講解計算機系統,內容偏向系統軟件(特別是操作系統)。美國佐治亞理工學院計算機系教授Umakishore Ramachandran提出在《計算機系統》課程實踐中更多地強調采用軟硬件集成的方法[6],系統地講解了計算機系統的軟件和硬件知識及其相互關系,從發現問題入手揭示系統架構與操作系統之間的高度集成,學生才會融會貫通。例如,“什么是內存管理?”,一旦理解了內存管理的需求,再探討內存管理所需的軟件技術和相應的硬件支持,才有比較清晰的理解。計算機的內存系統可能是決定計算機性能最為關鍵的因素。如果內存系統不能以匹配處理器速度的方式提供執行程序所需的代碼和數據,處理器速度再快也毫無意義。由于技術的進步,內存系統的大小一直在跨越式發展,但應用程序使用內存的胃口也在以同樣的速度增長著。因此,內存也是寶貴資源,操作系統的作用之一就是保證用好資源。從問題發現和提出入手可以有效地集成軟硬件知識,理解關于有效管理內存的操作系統算法以及相應的體系結構支持,進而把握內存層次問題,可以幫助降低處理器在訪問代碼和數據時的延遲。
軟件開發技術是計算機科學與技術專業中最活躍、發展最快的部分,大部分計算機和軟件工程的本科畢業生都從事相關的工作。當今軟件開發技術中,框架、架構、面向對象分析和設計、設計模式、契約式編程、測試驅動開發、面向方面的編程、模型驅動架構、基于組件的開發、敏捷軟件開發、元編程、面向服務的體系結構、面向特征的編程等許多新技術領域已經接近成熟,但據了解國內多數院校在開設和講授軟件開發技術相關課程中,都只涉及到其中部分領域,基本上沒有應用自頂而下的集成發現教學方法。部分原因在于教學理念落后,教材建設滯后,教學團隊建設存在先天不足,沒有與行業技術專家合作教學。軟件開發技術課程如何應用集成發現教學方法呢?下面以框架技術的學習為例來進行探討。在一些著名企業招聘Java開發人員時,有不少經常提到的問題,以判斷應聘者對基礎知識的掌握情況。例如,請解釋一下Session的工作原理,沒有很好基礎的應聘者往往感到一頭霧水。對于初學者而言,各種技術書籍汗牛充棟,仍然對學習各種框架疲于奔命,并不知道如何發現和解決學習中的問題,獲得集成性的技術理解。如果先熟悉Java EE中關于Servlet API 中常用的類和方法,在此基礎上學習某個框架的使用,最后閱讀HTTP協議的內容。對HTTP協議的深入了解,一旦發現和掌握了這些基礎的內容,初學者就會發現使用框架甚至自己開發一個業務框架是多么容易,很自然地會引導他學習設計一個框架所用到的各種技術,其中主要包括類加載器、依賴注入、線程本地、事務管理和安全控制等。進一步地,對于初學者而言,應該學習經典的MVC架構Struts和最流行的ORM框架Hibernate,并能夠熟練使用JSP+Struts+Hibernate開發小型Java Web應用程序。但對于技術框架的演化而言,要適應既復雜又安全的應用需求,適應業務需求變化和QoS目標需求,對這些企業級應用核心需求和技術有深入的把握。所謂企業級應用,一般具有數據持久化需求、高并發訪問、巨型或海量數據、應用規模龐大、界面需求復雜、生命周期長等特點,高級學習者不能僅停留在早期經典的架構技術和解決方案上。眾所周知,在產業界隨著Spring框架的問世,意味了企業級J2EE春天的到來,Spring+Struts+Hibernate三個框架組合(SSH)被廣泛應用于Web開發。高級學習者在實踐中會發現以前的SSH已經顯得重量級了,許多大型企業級應用會放棄掉一些技術,如Struts、Hibernate和JSP等,但Spring目前仍然是主流,尤其是Spring MVC,足以取代Struts。同時輕量級JDBC框架MyBatis也可以取代Hibernate,目前企業級Java EE架構的首先變成了Spring+Spring MVC+MyBatis , 簡稱SSM。
當然,對于軟件開發技術的課程學習者而言,開發框架并非是完整的技術解決方案,他們需要在技術方案中提出和解決虛擬文件系統、緩存、文件處理框架、模板語言、數據庫訪問層、數據庫水平擴展、服務層、流程引擎、元數據、展現層、Web層、統一界面框架、Restful Web服務和模塊化等滿足企業級應用的核心需求。例如[8],應對大數據量存儲和高并發訪問業務,需要在解決方案中考慮將應用服務和數據服務分離;為減少數據庫高頻并發訪問的壓力和服務器負荷,一般使用一些服務器緩存技術,如本地緩存、分布式緩存服務器上的遠程緩存。盡管這樣服務器訪問壓力得到一定的緩解,但單一應用服務器能夠處理的請求連接是有限的,在并發訪問高峰期應用服務器又成為整個系統的性能瓶頸,這時服務器集群技術的選擇就非常必要;使用緩存后大部分數據讀操作訪問可以不通過數據庫服務器連接就能完成,但是仍有一部分緩存不命中或緩存過期的讀操作和全部的寫操作都需要訪問數據庫,在用戶數達到一定規模后,服務器因為負載壓力過高而又成為系統性能的瓶頸。這時在架構上有利的決策選擇,可以通過配置數據庫主從關系,實現數據庫讀寫分離,從而進一步改善數據庫負載壓力。繼而,如果從一臺服務器拆分成多臺服務器提供集群服務,隨著應用系統業務的發展依然不能滿足需求,這時就需要使用分布式數據庫和大數據的系統架構。可見。解決方案中技術發現之旅,也是技術架構因需求變化而演化和重構的路徑,集成和發現是一種軟件技術教學的啟發式途徑。除此之外,還必須認識到技術和管理需要有效的結合,作為技術解決方案自然有很多可以自由選擇的領域,有很多受限的前提條件。這些外圍因素往往還與系統背后的個人、團隊、企業的價值觀以及非IT能力有關。
2.3 教學模式
對從事軟件開發行業的計算機專業學生而言,長期的職業發展途徑大致分為三個階段:軟件工程師階段、軟件設計師階段、架構設計師或項目管理師階段。俗話說,不想當元帥的士兵不是好士兵,不想當架構設計師或項目管理師的程序員也不是好的程序員。從專業知識集成性和能力培養的成長路線而言,本科生期間需要學習和掌握的開發應用軟件主要理論、方法和技術可以歸結如下:
(A) 基礎理論知識,如操作系統、計算機組成原理和體系結構、編譯原理、數據結構與算法、計算機網絡、信息安全等,一般的計算機相關專業培養方案和教學計劃都視為核心課程。
(B) 1~2門程序設計語言,主要面向對象程序設計語言,Java/C++/C#/Python等。如果從事Web開發的話, 還要學習一些網絡編程技術、腳本語言、XML等。
(C) 面向對象方法學,面向對象思想、基于構件的開發CBD、面向方面編程AOP等。
(D) 關系型數據庫及DBMS,例如,ORACLE/SQL Server/DB2/MySQL等。
(E) 軟件開發集成開發環境和軟件測試技術,例如,IntelliJ IDEA/Eclipse/MyEclipse/VS.NET等。
(F) UML建模工具,例如,Rational ROSE/VISIO。
(G) 軟件過程管理,例如,RUP/XP/CMM等,通過軟件過程模型和持續改進,使開發流程規范化,軟件質量可控。
(H) 軟件源碼管理Git/GitHub、項目管理、軟件架構、框架、開源軟件、軟件開發的經濟學等。
對多數學生而言,恰當的學習路線應該是:(B)→(C)→(E)→(F)→(G)→(H)。進一步地,軟件工程師著重于(B)、(C)、(E)、(D);軟件設計師著重于(B)、(C)、(E)、(D)、(F);架構設計師著重于(C)、(F)、(H)。
專業教學培養體系中,軟件開發課程群設置以初學者自頂向下地集成知識和發現知識、提高運用能力為導向,以軟件開發方法學、工具和環境支持為教學核心。其中,軟件開發方法學比較成熟的內容和做法是,從不同的軟件類型,按不同的觀點和原則,對軟件開發中應遵循的策略、原則、步驟和必須產生的軟件產物進行解構性教學,從而要求學生掌握軟件開發規范化和工程化的基本技術。教學內容設置上應該覆蓋軟件開發模型和一般方法、軟件開發平臺與工具、系統分析與建模、軟件架構技術、軟件設計模式、IT規劃與咨詢、軟件開發項目管理、軟件開發標準和案例等內容。通過這些課程群的設置和教學實施,學生很容易掌握在操作系統、數據庫、多媒體、網絡等應用環境中軟件的基本開發方法及技術,以及在軟件開發過程中要解決的數據結構與常用算法的實現,學生在掌握了開發軟件所必需的基礎知識、基本開發方法和常用開發技術之后,今后面臨的職業發展道路就更加有信心和目標。在同濟大學計算機科學技術系的教學實踐中,我們部署了如下的教學方案(要點):
1) 知識目標
(1) 教授以軟件開發的發展、主要方法、常用工具的使用為主線。包括:軟件開發的基本概念、基本原理、常用的軟件管理方法、常用的建模工具等。
(2) 關鍵的知識講授:軟件需求獲取方法、需求規格說明撰寫與評審方法、軟件設計的基本概念、結構化設計方法、體系結構設計、面向對象UML的軟件分析方法、UML建模方法、構件化軟件開發技術等。
(3) 通過該課程的教學活動,學生應具備軟件開發基本理論知識。
2) 能力目標
(1) 運用軟件開發的概念、原理、技術和方法開發與維護軟件的能力。
(2) 編寫相關技術文檔的能力。
(3) 分析問題和解決問題的能力和團隊工作交流能力。
3) 素質目標
(1) 職業素養的培養:對軟件開發領域常見的職業要求、團隊合作精神進行培養與灌輸。
(2) 專業素養的培養:對軟件管理過程中常見的問題能夠予以準確判斷,明確解決思路。
4) 教學方案及其改進要點
結合IEEE & ACM CS 2013課程體系, 2014 年我校計算機科學與技術專業又一次修訂培養計劃[9], 并開始制定課程教學大綱和實驗教學大綱, 進一步完善教學體系、教學團隊相關支持。其中, 軟件技術系列的課程包括原有的: 高級語言程序設計、匯編語言程序設計、數據結構與算法、數據庫系統、操作系統、編譯原理、軟件工程、程序設計方法、服務計算概論等, 又增加了計算機系統實驗(必修)、軟件開發方法(必修)、Unix 系統分析(選修)、軟件形式化技術(選修) 等課程。這也體現了目前國際上計算機科學學科知識體系在系統基礎和軟件開發基礎方面有了較大的變化,其中, 前者對應一個新的知識領域, 包括操作系統、網絡、計算機體系結構的常用論題, 強調系統思維方法和系統能力的提升。而后者過去主要依賴前期程序設計、數據結構和算法課程以及后期的軟件工程課程, 按照 CS2013 的觀點, 算法、設計、編程和軟件開發過程是一些基礎軟件開發概念和技術的組合, 其中軟件建模和基于平臺的軟件開發是信息技術應用和創新的最重要基礎部分。
在計劃調整過程中,以培養和提高學生復雜軟件系統的構建和實現能力以及新技術應用能力為目標, 建立軟件開發全局性的目標矩陣和技術能力矩陣, 各門課程的建設相互聯系、相互支持。例如:
(1) “軟件開發方法”中構件技術、設計模式以及流行的軟件開發環境和工具,與“高級語言程序設計”課程中面向對象程序設計、“軟件工程”中面向對象的分析與建模, 教學上聯系起來, 培養學生軟件開發的分析、設計建模和實現能力; 程序設計是軟件架構實現的核心,通過代碼可以完成對現實世界的虛擬化:概念的虛擬化、能力的虛擬化、實體的虛擬化、記憶的虛擬化、協作的虛擬化,例如,概念的虛擬化:對應一個業務概念的類定義;能力的虛擬化:一個方法對多個輸入數據進行加工并返回結果;實體的虛擬化:一個類的實例,即具體的數據;記憶的虛擬化:一條關系型數據庫的行記錄;協作的虛擬化:遠程方法調用。程序代碼是計算機的指揮者,通過代碼把人類智慧「賦能」給計算機的一種語言。對象設計模式主要支持功能性需求;而架構模式支持非功能性需求。現代軟件架構設計的原則來自于軟件復用,軟件復用是指重復使用“為了復用目的而設計的軟件”的過程。
(2) “程序設計方法”與 “軟件形式化技術”、“軟件可靠性與容錯”與“軟件測試”課程聯系起來, 培養學生軟件設計驗證、性能優化與質量保證能力。
(3) “軟件開發方法” 課程中將軟件體系結構與“服務計算概論”中的面向服務架構聯系起來, 將軟件建模與“電子商務技術”中業務建模聯系起來, 培養學生對復雜軟件架構和軟件開發環境的應用能力和創新基礎。
(4) 將先期的軟件技術課程和后期的“數據庫系統原理”、“計算機網絡”、“Web技術”、“軟件工程”課程教學聯系起來, 培養學生軟件過程改進與迭代、 軟件開發組織、管理和溝通能力。
(5) 適當注意本科階段與研究生階段課程與實踐在深度和廣度上的銜接和聯系。
2014年培養計劃和教學方案調整基本體現了集成發現教學法的精神。在軟件開發技術系列課程建設上,試圖建立從程序設計到軟件工程之間一系列課程的連接橋梁。課程的建設標準以工程專業認證通用標準(12 條)為基準, 達成預定的技術能力矩陣, 并在教學中強調課程的畢業達成度評價和持續改進。在課程實踐環節,聘請校外技術專家參與教學和指導環節。
本文從計算機專業中軟件開發技術課程設置和教學改革的要求出發,分析了新舊教學體系的特點和目前存在的主要問題。基于軟件開發實踐中的抽象思維(對象思維、模式思維和架構思維),提出了一種適合于軟件開發技術課程的集成發現教學法和教學模式。本文探討了如何建立以軟件開發方法及其綜合實踐為核心的應用軟件課程教學體系,如何引導和支持學生自主地發現所學知識,提高應用實踐的集成運用能力,是需要借助于很好的教學設計、合理的教學計劃支持。
今后需要重點關注的是,創新和創業已經成為現階段我國經濟轉型和企業升級的重要發展策略, 而技術創新驅動商業模式創新已成為 IT 創新的一個重要范式。 軟件開發方法創新能力的培養起點高、難度大,有必要重點研究軟件新技術的教學實踐。例如,現在從事企業軟件開發,掌握企業信息系統軟件開發中構件技術的應用很有好處。目前電商系統架構、大規模信息服務架構、大數據應用架構、云計算架構、物聯網架構都有應用, 教學實踐中一方面重點介紹成熟的構件技術及典型的分布式架構技術, 但作為創新的基礎訓練, 可以結合一些新的選題, 提供給學生足夠的學習支撐和技術支持, 例如, 開源軟件架構、網構軟件及其自適應演化技術、面向方面的軟件開發、高安全的形式化驗證、面向 Agent 的軟件開發、敏捷軟件開發、面向移動應用 App 開發、包管理系統Docker與分布式服務框架、云件開發等,引導學生創新的思維和計劃實施能力的提高。希望這部分的內容可以根據實際需要和可能在課程項目、課程設計、專業實習和畢業設計期間有序地安排和實施。
[1] Joint Task Force on Computing Curricula,Association for Computing Machinery (ACM) and IEEE Computer Society.Computer Science Curricula 2013:Curriculum Guidelines for Undergraduate Degree Programs in Computer Science[M].ACM,2013.
[2] 閔應驊.計算機科學課目CS2013[OL].http://blog.sciencenet.cn/blog-290937-803714.html.
[3] 駱斌,丁二玉,劉欽.軟件工程與計算(卷2):軟件開發的技術基礎[M].北京:機械工業出版社,2012.
[4] 謝新華.軟件架構設計的思想與模式[OL].中科院計算所培訓中心,高級軟件系統架構師培訓.http://www.TCICT.cn.
[5] Behrouz A Forouzan,Firouz Mosharraf.計算機網絡教程:自頂向下方法[M].陳鳴,譯.6版.北京:機械工業出版社,2013.
[6] Umakishore Ramachandran,William D Leahy.計算機系統:系統架構與操作系統的高度集成[M].陳文允,譯.北京:機械工業出版社,2015.
[7] 應用Web框架模塊設計三國演義篇[OL].2015-09-16.http://weibo.com/p/1001603887721239202407.
[8] 大型網站架構演化歷程[OL].2015-06-03.http://blog.csdn.net/zhaoxuejie/article/details/46347063.
[9] 同濟大學計算機科學與技術本科生專業培養計劃(2014版)[OL].http://see.tongji.edu.cn/09/fb/c319a2555/page.htm.
RESEARCHONTHEINTEGRATEDDISCOVERYTEACHINGMETHODOFSOFTWAREDEVELOPMENTTECHNOLOGYCURRICULUMFORCOMPUTERSCIENCEMAJOR
Wang Xiaoping Pei Xilong Wei Zhihua
(DepartmentofComputerScienceandTechnology,CollegeofElectronicandInformationEngineering,TongjiUniversity,Shanghai200092,China)
There are some problems with the computer software engineering curriculum system in our investigation and analysis of domestic and foreign universities. In order to meet the requirements of high-end talents for information technology and the adjustment of old and new systems, based on the abstract thinking (i.e. object of thinking, design pattern thinking and architecture thinking) in software development, we propose an integrated discovery teaching method and teaching model aiming at main target of the ability to use for undergraduate students of computer science. Moreover, to further explore the teaching system of application software course based on software development methods and comprehensive practice as the core, the relationship between application of reorganization of courses basic courses, core courses and related platform, make the curriculum more closely, converge more smoothly, which is conducive to the cultivation of students’ innovation ability.
Software development technology Curriculum reform Integrated discovery teaching method Abstract thinking
TP3
A
10.3969/j.issn.1000-386x.2017.09.005
2016-10-09。同濟大學2015-2016年度教學改革課題資助。王小平,教授,主研領域:智能算法,軟件技術,社會計算,安全關鍵系統。裴喜龍,講師。衛志華,副教授。