摘要:北京工業大學軟件學院在學生軟件開發能力培養方面開展了多年的探索與實踐活動,并凝練出進行實踐教學的案例和相關成果。文章在論述企業對軟件開發人員能力要求和高校開展案例實踐教學對軟件人才培養意義的基礎上,詳細介紹這些案例的設計過程、實際應用和最終成果,完整地給出案例實踐教學的實施方案,并綜合了學生對案例教學的反映。
關鍵詞:軟件開發;能力培養;案例教學
當前計算機專業或軟件工程專業的學生存在著學用脫節、實際開發能力偏弱等問題。盡管很多高校計算機專業、軟件工程專業在軟件方面的課程體系上是將整個學科專業的知識按一定順序和層次分解,使得學生能夠循序漸進地學習和掌握知識,這無疑是行之有效的。但掌握了軟件開發領域的知識,并不意味著同時具備了軟件開發的能力。事實上,學生雖然接受了系統的軟件開發專業知識的學習和軟件開發技術應用的訓練,但軟件開發能力低下的情況還相當普遍。要從軟件開發的“菜鳥”,成長為軟件開發的高手,或者稱之為“高級藍領”,必須通過長期的歷練,沒有捷徑。但好的教學案例和人才培養模式,對促進軟件人才的成長和開發能力的提升有很重要的作用[1]。
1軟件開發人員能力要求
由于軟件開發是一項技術綜合性很強的工作,因此,企業對軟件開發人員能力的要求也是綜合性的[2]。按照教育部對軟件學院學生實踐能力培養的要求和工程應用型人才培養的定位[3],軟件學院的學生在軟件開發過程中,既要能將用戶的需求映射到良好的軟件體系結構,在進行應用軟件總體設計時有大思路和大局觀,也要能運用現代軟件設計方法和編程技術在進行詳細設計時關注細節,實現高質量的軟件;在考慮軟件實際應用時,既要支持國際化及本地化的應用要求,也要支持軟件及運行平臺升級、操作系統遷
移的應用要求;在技術應用能力上,既要對使用的編程語言和開發環境有很好的把握,也要能綜合運用前期所學的操作系統技術、數據庫技術、網絡編程技術、圖形圖像處理技術、人機交互技術等專門技術;在軟件工程素質上,既要具有軟件工程技術和管理方面的知識,還要具備良好的團隊合作、交流和文字與口頭表達能力。上述這些就是現代IT企業對軟件開發人員的能力要求。
2案例實踐教學對軟件人才培養的意義
案例實踐教學對軟件人才培養具有以下優勢:
1) 學生通過案例學習不僅對理解和掌握計算機軟件的抽象概念及原理十分有用,而且對學習先進的軟件編程方法、使用先進的軟件開發技術、提高自身的軟件開發能力大有益處。
2) 學生通過對案例代碼的閱讀分析,可以使一些一知半解的概念突然變得清晰易懂,使一些久思不解的問題變得豁然開朗。
3) 通過案例學習,學生能夠零距離接觸到軟件高手,深深為他們巧妙的方法、過硬的技術、認真細致的精神、追求完美的態度所折服。
3實踐教學案例的設計
案例設計的內容、質量以及案例教學的水平是案例實踐教學的基礎,是案例學習成功與否的關鍵。
作者簡介:蔡建平,男,教授,研究方向為軟件工程、嵌入式軟件測試和數字媒體技術。
3.1案例設計要求
設計支持軟件開發能力,特別是綜合開發能力培養的實踐教學案例是許多高校計算機軟件類專業教學面臨的問題。
首先,這樣的案例對于高年級的學生要涉及到他們前期所學的計算機軟件開發各個方面的知識和技術,如程序設計、面向對象編程、數據結構與算法、操作系統、數據庫、網絡通信、圖形圖像處理、人機交互、軟件體系結構,等等;另外,要幫助這些學生在通過案例學習后,建立起軟件開發的大思路或大局觀,對軟件的質量要求(特別是可靠性要求)、維護要求(特別是軟件功能擴充及升級要求)有很清晰地了解,并能夠反映到軟件的設計和實現上。最后,學生學習完案例后,要了解支持軟件跨地域、跨平臺和跨時間的應用需求,并掌握保證這些需求得以實現的相關技術,如軟件的國際化和本地化、軟件及平臺的升級、平臺移植或系統遷移等技術。
在案例設計中最為關鍵的問題是案例能夠在各高校無障礙地推廣,不要因為經費、實驗環境等問題使案例設計成果沒有應用價值。因此,案例設計要求全部使用開源代碼或開源技術。事實上,開源軟件的使用,不僅有利于通過免費的開源軟件大大降低搭建實驗環境所需的條件,使學生能夠零距離地學習優秀軟件,全面提升自身的軟件開發能力和軟件開發素質,而且學生可以根據專業興趣或學時安排,有選擇地對其中的軟件和技術進行更深入的學習和專門的研究,形成自身的技術特長和研究方向。
案例設計中還有一點要特別注意:所選擇的案例不要涉及很深的領域專業知識,又是人們感興趣、經常接觸到的東西,這樣有利于激發學生的學習興趣;另一方面,希望案例涉及多種計算機軟件開發的主流技術,如面向對象程序設計技術、客戶/服務器技術、多線程技術、網絡編程技術、數據庫技術、圖形學、GUI等眾多軟件技術;最后,希望所設計的案例是綜合性的應用軟件,以適合學生綜合開發能力的訓練。
3.2案例詳細設計
基于上述的案例設計要求,以及早期項目的研發經歷,我們選擇股票軟件作為軟件綜合開發實踐教學的案例。首先,股票軟件不涉及很深的領域專業知識,又是現代社會人們非常關注、感興趣、且有可能經常接觸或身陷其中的事物,學生容易入門和感興趣;另一方面,這類軟件其工作模式主要是客戶/服務器的工作模式,涉及到面向對象編程技術、網絡通信技術、數據庫技術、圖形技術、用戶界面技術以及數據結構與算法等眾多軟件技術,其綜合性很強,對學生綜合開發能力的訓練非常合適;最后,我們所選擇的股票軟件Stock-0.0.9是一個早期的開源股票軟件,它是一個股票軟件的雛形,易于學生學習和完善,包括做第二次開發。將該軟件作為案例進行實踐教學可讓學生接觸和應用如下開源技術:
1)Linux操作系統及虛擬機技術;
2)GCC程序設計技術(包括編譯技術、調試技術及集成開發技術等);
3)MySQL數據庫應用技術(基于C/C++應用編程接口API的MySQL數據庫開發技術);
4) 基于套接字編程的網絡通信技術(支持TCP/IP協議的開源liptcp++庫的應用);
5) 基于Gtk+的界面設計技術(應用Glade支持界面的設計及應用框架的生成);
6) 股票軟件的結構化程序設計及面向對象編程技術等。
在對Stock-0.0.9進行編譯生成可執行目標代碼并建立其運行環境的過程中,學生能夠接觸和了解到程序設計的強類型機制、可靠性編程思想、軟件構造方法、C/S工作模式實現手段、開發環境及應用環境升級對策、軟件國際化及本地化應用要素、操作系統遷移或移植問題等方面的內容,使學生真正掌握基于復雜圖形用戶界面的大型應用軟件開發的方法和技術,理解現代軟件開發方法學和現代程序設計思想,增強他們解決實際問題的工程實踐能力。
4案例教學實踐及成果
4.1實踐情況
軟件學院針對教育部對軟件學院學生實踐能力培養的高要求和軟件工程碩士復合型工程人才培養的定位,以及學院學生(特別是非在職的工程碩士研究生)綜合性實踐能力太弱等實際情況,經充分論證,確定了提升學生軟件綜合開發能力的培養目標,分別于2006年下半年在學院為本科生開設了“界面設計”課程,為軟件工程碩士開設了“高級軟件編程技術”課程。這兩門選用同樣案例,講授了10多次,受益學生達800多人。在這期間,課程的教學案例和實踐資源也不斷得到補充和完善。
4.2實踐成果——教材建設
學院考慮到案例實踐教學的效果以及教學案例和實踐資源的成熟與完整,決定將案例和課程資源進行總結與提升,出版與之配套的實踐教材,推廣相關的實踐教學經驗,讓國內高等學校計算機和軟件相關專業的實踐教學從中受益。學校對此工作提供了經費支持,同時在清華大學出版社的支持下,完成了《軟件綜合開發案例教程——Linux、GCC、MySQL、Socket、Gtk+與開源軟件》的編寫工作,該教材已于2011年2月出版發行。
1) 教材的主要內容。
除了有大量篇幅講述計算機應用的主要開源技術外(如Linux操作系統、GCC編程語言、網絡Socket編程通信、MySQL數據庫管理、Gtk+界面設計),特別通過實際案例——Stock股票軟件將這些技術融會貫通在一起,并站在更高的角度上對軟件體系結構、應用軟件開發模式、軟件的國際化與本地化,軟件開發和應用環境升級方法以及平臺移植技術等充分地介紹和實例說明,以此達到授人以漁的目的。可以說這是一本集各種主要的計算機開源技術應用于一體的軟件綜合開發實踐教材。
2) 教材的特色。
① 能夠滿足計算機、軟件工程及相近專業高年級學生在前期學習了程序設計、操作系統、數據庫、計算機網絡等計算機專業基礎課程后,急需通過一個案例或一個項目來應用這些專業基礎知識和技術進行綜合性實驗或實踐,提高自身計算機技術綜合應用能力的需求。
② 除了對主流的計算機開源技術做了詳細地介紹和舉例分析外,還特別地突出了計算機開源技術在實際股票軟件項目中的應用,很好地支持著案例驅動式的實踐教學。
③ 教材所涉及到的實驗教學資源相當豐富,覆蓋面相當廣,且全是開源軟件或開源工具,保證了國內許多院校在辦學條件不足,實驗教學經費有限,無法全方位引進商用軟件工具的情況下,仍然能夠開設出軟件綜合性開發的實踐課程。
總之,該教材作為案例實踐教材,自始至終強調和灌輸現代軟件開發方法學和現代程序設計思想,強調軟件綜合開發能力的培養。該教材所涵蓋的大量技術內容、實操案例及問題解決方案,如果學生能夠完全掌握并能實際地用于軟件項目的開發,從軟件開發能力上說已達到一個高級藍領的要求了。
5案例實踐教學的實施方案
北京工業大學軟件學院在學生軟件綜合開發能力培養上分別針對軟件工程本科專業的學生和軟件工程專業學位的學生開設了選擇同樣案例和教材的不同課程——“界面設計”和“高級軟件編程技術”。下面我們主要以本科生為例,介紹在“界面設計”課程中案例實踐教學的實施方案或課程大綱。
5.1課程設計目的
學院在四年制軟件工程專業本科生的教學計劃中,為大三的學生在第二學期安排了“界面設計”的課程,60學時,2學分,共15個實驗單元(每個單元4學時)。
“界面設計”課程是按照教育部對國家示范性軟件學院培養工程化軟件實用人才的要求,以界面設計為立足點,對前期所學的主要計算機技術(如軟件開發、程序設計、網絡編程、數據庫應用等)進行綜合訓練。
要求學生在掌握界面設計的原則、方法和常用技術,掌握當前主流的開源界面開發工具Gtk+和開源界面設計工具Glade進行界面設計及實現等技能的基礎上,通過具體的案例——股票行情分析軟件,將計算機軟件開發所涉及到的相關知識綜合在一起,開展實踐活動。
通過該實踐課程,除了使學生掌握界面設計的全部流程和技術,培養學生界面的設計能力外,可使學生接觸和學習基于復雜圖形用戶界面的大型軟件開發的方法和技術,了解Linux操作系統、編程語言、程序設計、編譯應用、圖形界面、數據庫、網絡通信、軟件體系結構、應用軟件開發模式以及平臺移植等技術在實際軟件開發或應用項目中的具體應用,達到增強他們工程實踐能力的目的。
5.2課時安排
該課程設計以《軟件綜合開發案例教程》為實踐教材,其實踐教學方案主要是按照15個實驗單元并依據教材內容和知識單元組織進行制定的。
第1單元:對課程設計提要求,對Linux操作系統知識點進行講解,并安排學生進行Linux操作系統的實際應用,學會Linux虛擬機的安裝、配置和使用。
第2單元:對應用GCC進行軟件開發知識點進行講解,安排學生進行GCC開發應用實踐,學會編寫工程文件、用GCC編譯C/C++程序、調試程序、建立集成開發環境。
第3單元:對網絡通信及Socket編程知識點進行講解,安排學生進行網絡通信的Socket編程實踐,學會在libtcp++環境下建立客戶/服務器的工作模式。
第4單元:對MySQL數據庫應用知識點進行講解,安排學生進行MySQL應用的相關實踐,學會用MySQL C API進行數據庫應用的簡單開發。
第5單元:對Gtk+用于界面設計的知識點進行講解,安排學生進行Gtk+的界面設計實踐,學會用Gtk+和Glade進行簡單界面的開發。
第6單元:介紹股票交易的相關知識、股票軟件一般包含的內容和所涉及到的技術,安排學生學習和使用國內主流的股票軟件,學會股票軟件的使用方法和使用流程。
第7單元:對開源股票軟件Stock進行分析講解,并帶領學生將Stock源碼編譯成可執行的二進制碼,要求學生學會處理編譯和連接過程中出現的各種問題,特別是強類型問題。
第8單元:對應用軟件國際化和本地化相關知識和技術進行講解,對Stock軟件的Gtk+1.2界面實現方法進行分析,并帶領學生解決Stock軟件中文顯示問題,要求學生掌握在Gtk+的界面控件上和繪圖區中正確地顯示中文、英文及數字方法。
第9單元:對Stock軟件的數據庫應用編程、網絡通信編程等實現方法進行分析,帶領學生解決股票數據庫的建立、股票數據的導入等問題,要求學生掌握Stock軟件中用MySQL C API進行股票數據庫應用、用Socket進行網絡通信的開發技術。
第10單元:對Gtk+2.0特點進行講解,帶領學生解決Stock軟件從Gtk+1.2到Gtk+2.0升級中遇到的各種問題,要求學生掌握確保軟件能夠升級的軟件設計思想和問題解決方法。
第11單元:對在Windows上進行Gtk+應用程序設計的方法進行講解,帶領學生將Stock軟件從Linux上移植到Cygwin和MS VC上,并解決移植過程中的問題,要求學生掌握一般軟件移植的基本要點和基本方法。
第12單元—第13單元:學生按分工要求開展獨立實踐活動,并撰寫實踐報告。
第14單元—第15單元:學生按分工要求進行PPT的實踐匯報和實踐成果的演示。
5.3課程設計組織
課程設計以課題組形式開展,6人一組,每組必須完成6篇報告(Linux虛擬機使用總結報告、Linux下GCC編程總結報告、MySQL數據庫應用總結報告、基于TCP/IP的Socket編程總結報告、用Gtk+設計圖形用戶界面總結報告以及股票分析軟件實現技術總結報告),指定課題組長(完成報告6),課題組其他成員分別完成報告1~5,每人1個,不能重復。
課程設計以實踐為主,完成教材中所布置的實驗習題。作業以電子方式交付。
5.4課程設計考核
對每位學生,課程設計考核包括四部分:
1) 電子版課程設計報告(40分),對于報告其撰寫要求如下:
① 每個報告不少于1萬字(不能以圖表代文,論述為主);
② 報告的基礎是每章的實驗習題;
③ 報告可分4~5章(第一章概述,最后一章總結,其他章節自行組織);
④ 報告以教材為樣式進行排版;
⑤ 報告不要出現網上拷貝的痕跡,網上摘錄的要進行相應處理,嚴禁聊天用語、博客用語以及混亂的控制符和全角符號;
⑥ 圖表要清晰,重要的圖表要親自畫或截,不要拷貝。
2) 每位同學要準備總結報告的PPT匯報(10分鐘的匯報),匯報成績20分。
3) 每位同學要進行所選報告的成果演示,演示成績20分。
4) 考勤成績20分。考勤10次,每次2分,考勤缺席5次的無成績。
5.5基于案例的“界面設計”實踐教學效果
“界面設計”課程自2006年開設以來,學生普遍反映良好,口碑頗佳,軟件開發的綜合實踐能力得到了明顯的提升。
最近,我們對學生學習該課程的體會和感想進行了調查,學生普遍認為案例內容和實驗方案豐富、實用和生動,大大地開拓了他們的眼界。通過基于復雜圖形用戶界面的大型應用軟件開發方法和技術的學習和實踐,對現代軟件開發方法學和現代程序設計思想有了更進一步地理解,增強了軟件綜合開發和解決復雜問題的工程實踐能力。特別是對軟件開發有了大局觀,對軟件開發中軟件設計和高質量代碼編寫的重要性有了新認識,對優秀開源軟件和開源技術有了極大的興趣。下面是部分學生在課程設計實驗報告中對“界面設計”的案例教學談到的心得體會:
1) 通過這門課的學習,我基本掌握了Linux虛擬機的使用,以及Linux下的GCC編程,應用軟件圖形用戶界面GUI的界面設計,網絡數據庫應用技術和網絡通信技術,并能進行具有圖形用戶界面程序的開發,提高了應用C/S模式、管理數據庫數據等實際應用能力。由于平常主要都是理論課程,實踐機會比較少,大家組隊進行開發就更少了。通過此次實踐,我體驗到了團隊開發的重要性,學會了如何合作開發,并大大提高了我解決問題的能力,為以后工作學習增加了豐富的經驗。
2) 以前學習Linux時僅把它當作一種單純的操作系統,沒有在上面做開發,導致對Linux了解不多。經過半個學期基于Linux的股票案例學習后,我收獲頗多。我主動收集和閱讀了大量資料,并鍛煉了實際動手能力。我學到了如何在Linux環境下搭建開發環境、進行編程和開發,并對MySQL,GCC,Gtk+等開源軟件在Linux下的應用有了初步的認識,加深了對Linux下編程整體流程和工作細節的理解,知道了Linux下調試程序的方法,真正了解了程序在Linux下從編譯到運行以及排錯的全過程。
3) 這次課程設計我們的收獲非常多的,首先大家對于一款良好的軟件應該具有什么樣的功能和性能有了比較清楚的認識,這對于我們以后在軟件開發乃至今后的工作都是有益處的。其次,這次復雜的課程設計鍛煉了我們各方面的能力,包括團隊合作、資料查找、學習、融會貫通以及查錯能力,等等。可以說對我們的綜合能力是一次極大的考驗。在整個工程的過程里,大家接觸了很多以前沒有觸及過的知識并對其有了較為深切的理解。最后,本次課程設計溝通了我們幾位同學之間的感情,在辛苦工作的同時,也留下了難忘的回憶。
4) 我覺得這門課對我很有幫助,讓我學會了一個我以前不會也沒接觸過的有用的軟件,學會了如何使用Gtk+來進行圖形界面的設計。通過這一學期的學習,課上聽老師對一些知識的講解,對Linux更加熟識了,對如何在Linux下安裝各種有用的軟件更加清楚。在課后我們組成小組,分工明確,每個人認真地負責自己的那部分的工作,查資料,學相關的知識,然后再給小組的每個組員講,使組內的成員對大家的工作都很熟識,這樣合作起來就更加的融洽,而且也可以互相討論和幫助。在這門課上學到了很多知識,也鍛煉了動手能力,最后作報告培養了大家的語言表達能力。總之,我覺得這門課很有意義。
5)Stock股票軟件的成功運行讓我們對自己的能力充滿了信心。從最開始我們興致勃勃地組成一個小組,憧憬著成功的那一天開始,一路磕絆,直到今天我們看到一個完整的軟件,這里的每一個細小的環節都有著我們為之付出的艱辛努力。這與我們小組成員的團結努力是密不可分的,尤其是負責編譯、調試和排錯的組員。課程設計中遇到的問題,不但沒有將我們擊垮,而且在問題解決過程中,使得我們對許多知識又有了新的理解。感謝學院給我們提供了這樣一門自己動手的課程,它對提高我們的編程能力非常有幫助。
6) 這次課程設計使我建立起一種堅持到底不放棄的精神。之前的我總是缺乏恒心,一旦進展不順即想放棄。這次強迫我接觸很多不會的新東西,而且時間上有限制,令我不得不一次次與失敗和不順打交道。在翻越這一道道“溝壑”的過程中,我覺得自己的毛躁在逐漸退去,變得越來越穩健。我想精神上的成長可能比知識的增多對我來說意義更大。
6結語
我校專家對這種模式的案例實踐教學給予了充分肯定,指出計算機學院或軟件學院學生的軟件開發綜合能力培養一直是高等院校軟件人才培養的一個“短板”,一直缺少好的實踐教學方案、好的實踐教學案例和好的實踐教學教材。因此,軟件開發綜合能力培養的案例教學在傳統實踐教學的基礎上做了很有意義的探索和實踐,其成果顯著、資源完整,具有很好的推廣和普及基礎。學校為了強化該項成果在軟件工程專業學位研究生能力培養上的轉化和推廣,將研究生的“高級軟件編程技術”課程列為學校重點建設的精品課程。因此,我們相信,隨著精品課程建設的深入開展,軟件開發綜合能力培養的案例教學基礎將進一步夯實,其成果將會進一步凝練、宣傳和推廣。
參考文獻:
[1] 蔡建平. 軟件綜合開發案例教程[M]. 北京:清華大學