戴建國 秦懷斌
摘要:本文對軟件工程的課程特點進行了簡單論述,并分析了該課程當前教學存在的問題,以及實踐教學的重要意義和實施方法,最后討論了在實操環節中需要注意的問題。
關鍵詞:軟件工程;實踐教學;案例教學;課程設計;面向對象
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2019)24-0164-03
軟件工程是計算機專業的核心課程,主要講授軟件過程模型、軟件需求、分析與設計、軟件維護與管理等方面的知識。本課程的開設旨在使學生掌握軟件項目開發和維護的一般過程和軟件開發常用的過程模型,能用軟件工程的方法參與軟件項目的分析、設計、實現和維護,為更深入地學習和以后從事軟件項目開發打下良好的基礎。軟件工程存在以下特點:(1)軟件工程的思想對于軟件行業來說至關重要;(2)理論很重要,但是實踐是理論的出發點和歸宿,只有通過實踐去學習理論并通過理論去指導實踐,理論的學習才有意義;(3)軟件行業發展非常迅猛,新技術層出不窮。軟件工程的這三個特點決定了軟件工程這門課程必須跟實踐緊密結合才能真正地學活、學好,實現開設這門課的初衷和意義。
一、軟件工程的教學現狀
我國各大專院校的計算機或者相關專業都開設《軟件工程》課程,受傳統教學思想影響,目前大學教育大部分還是以“填鴨”方式給學生灌輸理論知識,對于軟件工程這樣的工程性課程也不例外,教師在課堂上大講理論,由于學生沒有實踐的機會,對理論的掌握一知半解,從而總是認為軟件工程太難。仔細分析在軟件工程的授課過程中存在以下現象:
1.授課采用傳統的講理論的方式。比如在講軟件開發模型時還是采用課件+圖表的方式講軟件生命周期的理論,學生很難想象某種軟件過程的使用場合到底是怎樣的;對于常用的CASE(計算機輔助軟件工程)工具也只是演示其中的某幾種,學生沒有親自體會的機會;講分析和設計時也只是臨時舉一些小例子以當時能說明問題為標準。這些理論之間連貫性比較差,可能當時聽明白了,但是面對實踐還是茫然,沒有真正掌握。導致學生普遍認為軟件工程很枯燥,學習興趣不高,很難真正地掌握理論知識,甚至不明白這門課跟軟件開發之間是什么關系。
2.內容陳舊。計算機科學發展非常迅速,很多知識的更新換代也就是2—3年的時間,而相應教科書的更新無法跟上知識更新的速度,甚至落后很多,如果僅僅講授教科書上的內容,將會造成學和用的嚴重脫節。比如現在很多軟件工程的教材還在用大量的篇幅講瀑布模型、螺旋模型等,而對于現在研究的很熱的統一過程(UP)卻很少提及,或一帶而過,對于現在同樣火熱的敏捷軟件開發甚至都未曾提及。在分析和設計的部分也存在同樣的問題,很多教材講結構化分析和設計多,對于面向對象部分也涉及得較少,但是現在面向對象技術卻是研究的重點,學生自學也相對較難。造成的結果是學生工作后發現學過的知識能用到的很少。
3.實踐環節很弱。有些高校的軟件工程課程沒有實踐環節,有的高校即使開設了課程設計,但課程設計的質量很低,沒有達到有效的檢驗目的。
4.考核方法有限。由于實踐的缺失,考核時采用傳統的作業+筆試的方式,成績評定還是依靠在課堂上所學的干巴巴的理論和似是而非的概念,很難反映學生對軟件工程真正的掌握情況。
二、原因分析
軟件工程的教學往往容易忽視軟件工程實踐性強的特點,使得這門課老師不好教,學生不好學,教學效果不理想,為什么會有這樣的問題呢?認真分析認為存在以下原因:
1.傳統教學思想根深蒂固。編程語言類的課程實踐起來比較容易,題目提出后學生編程實現就可以了,也很容易檢查和評定學生的掌握情況。而軟件工程本身來源于實踐,學生對這門課的學習方法應該是:從實踐中學習,到實踐中檢驗。要實踐就必須以項目為依托,在項目中實踐,而合適的項目很難找。而且很多軟件工程的知識很難單獨實踐,如果沒有一定的軟件開發經驗,學習這些軟件工程的理論就會很抽象。傳統教學經驗在軟件工程的授課過程中很難起到好的作用。
2.高中教育的遺留問題。軟件工程的實踐過程要求學生有較好的理解能力、與人交流快速獲取信息的能力、從表面現象找出問題實質的能力、分析和解決問題的能力、快速的文檔閱讀與寫作能力等。高中階段的過早分科使得理工科大學生文檔寫作能力較弱,也害怕寫文檔。
3.實驗設計困難。軟件工程的方法和技術都是軟件開發實踐的經驗總結,實驗需建立在合適的項目上,在項目實踐過程中運用理論知識。不像傳統的實驗那樣各個實驗之間沒有關聯性,一個實驗考察某一個方面的知識,軟件工程的實驗之間的關聯性很強,比如需求分析是系統概要設計的前提,概要設計是詳細設計的前提等等,合適的項目比較難找,所以實驗設計困難。
4.軟件技術發展迅猛,新技術層出不窮,比如幾年前web開發是java和.net的競爭,現在動態語言成了異軍突起的第三股力量。以前函數式語言僅限于實驗室或者一些專用領域,一直沒有很流行,現如今它的復興幾乎可以被人們預料。極限編程的很多理念是對于傳統軟件工程思想的一個顛覆,而現在敏捷與UP的結合使用又成為人們應用這兩者的新方法。新的語言和新的軟件開發過程讓人眼花繚亂,教師的課堂和實驗教學很難完全跟上新技術的發展,使得學與用之間很容易存在一定的脫節現象。
三、實踐教學的意義
設置軟件工程課程的目的在于:通過這門課的學習使學生了解軟件生命周期、軟件過程、方法以及相應的工具,理解軟件開發的工程化思想,熟悉通用的軟件開發過程和常用的CASE工具,這些知識都是人們從實踐中獲得,也應該在實踐中去學習。針對軟件工程的教學現狀,開展實踐教學的意義在于:首先實踐教學過程遵循了軟件生命周期和規律,順應了軟件工程這門學科的特點,即源于實踐、為了實踐,使學生親身體會問題的提出,并自然而然地理解解決方案的意義;其次實踐過程本身就是一個開放的過程,必須要了解社會對軟件人才的需求及發展現狀,這樣的教學才具有針對性,培養出來的人才也更符合社會的需要。所以打破傳統教學思想的禁錮,全面開展實踐教學應該是軟件工程課程教學的一個好方法。
四、實踐教學的實施
實踐教學是一種教學方法,并不僅僅限于開設實驗或者課程設計。實踐教學的思想應該貫穿于教學工作的各個方面,總結一下有以下幾個著手點:
1.案例教學。在教學過程中,以某個案例貫穿整個理論教學活動,最好是某個軟件公司的實際項目或者某個科研課題。從項目的可行性論證到最終項目驗收完成,跨越軟件的整個生命周期。比如在講需求時,可以從實際做需求的過程出發,講解需求管理的方法、采用的工具、需求分析的過程、用例圖、概念模型圖等等;在講系統分析和設計時,可以一點點引導學生從系統的概念透視圖過渡到軟件透視圖,講解部分交互圖和類圖以及相應的代碼映射,讓學生去完成剩下的部分,再對比結果查找不足之處。這樣結合活生生的實例有利于激起學生的學習興趣并使其快速掌握理論知識。
2.開設連貫性的實驗。在設計實驗時,不能孤立地設計每個實驗,應該先設計好一些小的項目,然后對學生分組,大概4—5個人一個小組,每個小組一個題目,進行團隊開發,隨著教學過程的深入,項目也在不斷完善,最終,課程完畢時,一個項目也就完成了,這個項目可以作為學生最終成績的一個重要部分。在開發項目的過程中,學生一定會遇到很多的困惑,這些困惑不是在學習某一門語言時做一個小實驗可以遇到的,帶著問題去學習軟件工程的知識學得快,掌握得牢固,可以說只有這樣,才能把知識轉化成自己的能力。而且在完成項目過程中同時可以大大提高編寫代碼的能力,這些能力是在編程語言課上無法得到提高的,也是作為一個軟件開發人員必備的。
3.增加課程設計。如果在實驗中完成的項目比較簡單,需要進一步鞏固所學的知識,可以增加課程設計的內容,或者把實驗的內容與課程設計的內容結合起來,由于實驗時間有限,很多知識點當時分配的時間少,可以增加課程設計作為實驗項目的延續。
4.增大面向對象的內容。面向對象技術是研究的熱點,幾乎在各種分析和設計過程中都可以用到面向對象技術,而且面向對象的分析和設計能力也非常需要在實踐中增強,所以在課堂教學和實驗過程中應該要求學生用面向對象的技術去分析和解決問題。
5.在重點突出的前提下增加知識面,具備一定的寬度。技術發展日新月異,新技術層出不窮,或者老技術重新煥發生命力也很常見,在軟件工程教學過程中應該注重授課的知識面需要有一定的寬度,對于重點的知識點要有深度。就是讓學生在基礎扎實的前提下對軟件發展的現狀有一定的了解,以便他們在眾多令人眼花繚亂的技術中選擇自己感興趣和認為有前途的方向提前努力。
五、實踐教學存在的問題
實踐教學包含兩個層面的意思,一是教師和學生雙方都必須拋棄習慣的教學方法,在實踐中教(案例教學)與學(實驗或課程設計);二是教學活動要根據技術發展和社會需要的實際出發,既教給學生核心技術,又緊跟時代發展,這也是計算機學科的發展特點所決定的。實踐教學要真正落實對教師和學生都提出了更高的要求,首先雙方都要脫離傳統的教與學的思想,在教學活動中堅持從實踐中來到實踐中去,在實踐中獲取和檢驗知識;其次雙方都必須保持高度的學習熱情,尤其是教師。新技術發展太快,要不斷地學習和實踐,否則實踐教學就是一句空話;再次,實驗項目的設計和考核比較困難,已有的經驗比較少,需要摸索和嘗試。這些都是在施行實踐教學過程中所面臨的問題,既有主觀因素,也有客觀因素,對教師和學生都提出了很高的要求,需要在不斷的實踐中克服。
六、結語
軟件工程課程的重要性往往被忽視,使得教和學都處在一個比較尷尬的地位。學生在進入工作崗位之前并沒有做好這方面的準備,覺得能寫一些程序,掌握了一些編程語言就是學好了計算機專業,能夠勝任軟件開發的工作,大量低劣的軟件被重復制造。據統計現在有超過10%的軟件公司連版本控制工具都沒有,此現狀令人堪憂。大學是向社會輸送人才的重要基地,在大學教育的過程中教給學生規范的軟件開發方法和良好的軟件工程思想是非常重要的,實踐教學并不是全新的教學思想,但將它運用于軟件工程的教學是一種可以探索的教學模式,還存在很多需要解決的問題。
參考文獻:
[1]秦懷斌,戴建國.《軟件項目管理》課程分組討論式教學探討[J].教育教學論壇,2018,(22):183-184.
[2]李昕,劉益先,程維.軟件工程專業工程化實踐教學體系的建設與改革[J].計算機教育,2018,(11):49-52.
[3]王峰,韓苗苗.軟件工程專業學生工程能力培養模式的研究與實踐[J].課程教育研究,2018,(38):224-225.
[4]付麗梅,李緒成,任長寧.基于OBE的軟件工程專業一體化實踐教學體系改革[J].計算機教育,2018,(09):145-148.