郭詠梅+張劍妹+韓冰
摘要:針對學生在軟件開發過程中操作不規范、實踐動手能力弱的問題,對《軟件工程》課程的實踐教學內容、方法、實施過程和考核方法進行改革。闡述了分層遞進的實踐教學過程、案例驅動的教學方法和重視實踐能力的考核方法,使學生在實際項目開發過程中不斷提高基本工程能力和創新能力。
關鍵詞:軟件工程;創新能力;實踐教學
DOIDOI:10.11907/rjdk.171690
中圖分類號:G434
文獻標識碼:A 文章編號:1672-7800(2017)006-0212-02
0 引言
《軟件工程》課程是計算機科學與技術專業的一門專業基礎核心課程,重點講授軟件工程的基本概念、原理和方法,使學生不僅認識和理解開發大型軟件的基本方法和過程,而且學以致用,將理論知識運用到軟件開發的分析、設計、編碼和測試等活動中,基本具備解決實際問題的軟件工程能力[1]。但在實際教學過程中,普遍存在著一些問題:教學活動重理論輕實踐,重知識傳授輕實踐能力培養;實踐教學缺少對學生工程能力和工程素養的訓練,學生實際動手能力不足;學生分析建模、設計算法和編碼測試不規范,其專業能力與軟件產業界的需求往往存在較大的脫節,難以滿足社會和企業用人需求。為此,應用型高校《軟件工程》課程教學必須區別于科學型和工程型學校,要以培養軟件應用型人才為目標,以培養學生工程基本能力為導向,針對教學中存在的問題,對《軟件工程》課程的實踐環節進行改革,探索行之有效的教學方法和教學手段,改革實踐教學的實施過程,提高學生應用所學知識解決真實問題的工程能力和職業素養,適應經濟社會發展對應用型人才的需求。
1 軟件工程基本能力分析
對于應用型軟件人才,其主要任務是將成熟的技術和理論應用到實際的生產和生活中,其培養的關鍵是強調對學生工程能力的培養[2]。在學生掌握《軟件工程》課程基礎理論知識的同時,重點培養以下基本能力:
(1)需求分析與系統設計能力。掌握軟件工程結構化和面向對象分析、設計方法,能夠用規范的方法獲取用戶需求,并進行需求分析、概要設計和詳細設計;熟悉常用的軟件分析與設計工具,能夠描述系統的功能模型、數據模型和動態模型,設計系統結構、模塊實現算法和用戶界面等;能夠閱讀理解和撰寫系統需求規格說明書、概要設計和詳細設計說明書等軟件開發文檔。
(2)編程能力和測試程序能力。根據設計階段的設計方案,在某一特定的開發平臺上,應用軟件工程的技術和工具,編寫程序實現軟件系統的功能并進行測試。要求學生熟悉一門高級語言編程語言,如Java、C++等,掌握軟件的編輯、編譯、運行和調試技術;遵循軟件工程要求的編程規范,養成良好的編程風格;掌握基本的軟件測試步驟、測試方法和常用的測試工具,能應用白盒測試和黑盒測試技術設計簡單的測試用例;能夠閱讀理解和撰寫軟件測試計劃、軟件測試報告等測試文檔。
(3)團隊協作能力和溝通能力。每個成員都要充分理解團隊合作的重要性,在具備個人工作能力和表達溝通能力的基礎上,能夠與小組成員分工合作,遇到問題能夠與成員討論協商,共同完成軟件項目開發。
2 軟件工程基本能力培養途徑
基本能力的培養要以課程知識為載體,通過一系列的教學活動來完成[3]。在教學過程中,以案例教學取代傳統的理論教學,強化實踐為主取代講授為主,精選實驗內容、改進教學方法和考核方法,多方面密切配合,有效培養學生的軟件工程基本能力。
2.1 構建分層遞進的實踐教學環節
《軟件工程》課程的實踐環節分為3個層次:案例解剖、課程實驗、課程設計。在整個教學過程中,由教師引導,從案例解剖入手,到分模塊的課程實驗,再到整體的課程設計,遵循學生的認知過程,讓學生由簡單到復雜,由模仿設計到創新設計,不斷提高學生的實際動手能力。
(1)案例解剖。在課堂教學過程中,教師緊緊圍繞一個典型的案例開展教學,將課程知識點與案例緊密結合,引導學生按照軟件開發的基本過程解剖案例,讓學生動手體驗案例開發各階段的主要活動。首先讓學生以用戶的身份實際操作應用案例,明確案例系統能夠完成的功能和具備的性能,然后教師引導學生以開發者的身份將系統的開發分為分析、設計、編碼測試3個主要階段,教師緊緊圍繞案例講解用戶需求獲取方法、需求建模方法和工具、系統設計方法、編碼規范、測試方法以及常用工具的使用,并讓學生動手模仿和驗證各階段的實際操作,讓學生真正看到一個應用系統是如何開發的,初步認識一個軟件項目的開發方法和過程,了解軟件項目開發流程和規范,養成良好的軟件開發習慣,加深理解軟件工程的基本概念、原理和方法在實際項目中的應用,建立初步的工程意識。
(2)課程實驗。根據課程的知識單元設計分模塊的實驗項目,主要類型包括設計性實驗和綜合性實驗,學生模仿案例的開發過程,舉一反三,以小組形式完成分模塊的課程實驗。例如面向對象開發方法實驗分為需求分析、設計和編碼測試3個主要模塊,學生以小組形式完成實驗內容,小組成員分工合作,用面向對象的分析方法和步驟需求分析,建立系統的對象模型、功能模型和動態模型;然后通過迭代完成面向對象的設計,最后編碼實現系統的主要功能,設計簡單測試用例進行類測試和系統測試,撰寫需求規格說明書、系統設計說明書和系統測試報告。在實驗過程中,一方面綜合應用Java語言程序設計、數據結構、數據庫原理等前修課程的知識,將理論知識與實際應用相結合,培養學生的獨立思維能力和應用知識解決實際問題的能力;另一方面使用分析、設計和測試的常用方法和工具,進一步訓練學生分析設計能力、編碼測試能力和分工合作能力,培養學生的工程素養,促進工程能力的提升。
(3)課程設計。課程設計是在整個課程結束后開設的綜合性實踐項目,時間1周,采用分組形式,每組3~4人,完成一個比較完整的軟件項目開發。該階段聘請企業有開發經驗的教師一起設計課程題目和內容,講解企業開發環境、基本開發過程和管理活動,使學生在模擬的企業環境中,進行角色體驗,在企業教師和學校教師的共同指導下完成軟件項目開發。課程設計過程可進一步促進學生開發項目的規范性,提高其軟件工程應用能力、軟件項目開發與測試能力,訓練學生團隊合作精神,提高其工程職業素質,為將來進入企業實訓打下良好基礎。
2.2 精選實踐內容、強化實施過程
(1)實踐內容選擇。案例、實驗和課程設計內容要精心設計和準備,主要考慮3個方面: 一是實踐內容要具有實際意義,與日常生活的應用緊密聯系,這樣能夠調動學生學習的積極性,讓學生在完成實踐的過程中體會到軟件工程知識在真實環境下的應用;二是要能夠綜合應用前修課程的知識,領會C語言程序設計、Java程序設計、數據結構、數據庫原理、算法分析與設計等在軟件開發過程中的應用;三是要考慮學生的接受能力,設計從簡單到復雜、從單項到綜合的實踐模塊,讓不同層次的學生都能完成一定的實踐內容,讓基礎比較差的學生能夠完成簡單的實踐內容,獲得成就感,讓學有余力的學生能發揮潛能,完成較為復雜的實踐內容。
(2)實踐過程實施。案例的講解過程主要是在教師的引導下,對案例分解、講解,讓學生動手驗證需求建模、設計算法、編碼測試的過程,體驗軟件的開發方法和步驟。課程實驗以學生為主、教師為輔,充分調動學生的積極性,要求學生模仿案例,通過小組討論,設計完成實驗的各個模塊。課程設計在企業教師和學校教師共同指導下,模擬企業環境進行項目開發活動,以開發團隊的形式開發一個具有一定規模的實際項目,重點訓練學生獨立思維能力,提高學生的基本工程能力和工程素養。
2.3 注重規范訓練和工具使用
在軟件開發過程中,注重軟件工程標準與軟件工程工具的使用,重點培養學生的工程意識和規范行為。以基于UML的面向對象為主,訓練學生學會使用Visio 2010或者starUML等工具建立需求模型,畫出用例圖、類圖、時序圖等,熟悉常用的軟件體系結構和設計原則,用流程圖描述功能模塊的算法。在程序代碼編寫過程中,統一標識符的命名規則,避免隨意命名的不良習慣,注重培養學生良好的編程規范。掌握基本的測試方法和測試步驟,學會運用常用測試工具完成簡單的測試要求,保證學生用規范方法和工具完成實踐的各個環節。
2.4 改進實踐環節考核方法
課程實驗和課程設計的過程都要注重小組成員的分工和小組協作,既要考核小組整個成果,也要考核小組成員的個人貢獻。課程實驗按教學內容分為結構化和面向對象兩個實驗內容,每個實驗分為需求分析、系統設計、編碼測試3個主要模塊,每個實驗具體評價內容與比例為:軟件需求規格說明 30%,軟件設計文檔30%,模塊代碼和軟件測試40%。
課程設計環節的考核與《軟件工程》課程考核分開進行,有獨立的學分和成績,需求分析占20%,系統設計占20%,模塊編碼和測試方法占40%,課程設計報告格式和圖表規范占20%。
注重實踐環節的考核和管理,分階段進行評審,督促學生嚴格遵守開發計劃、需求規格要求和操作規范,是保證軟件高質量的重要措施。
3 結語
作為計算機專業的核心基礎課程,《軟件工程》課程實踐環節對軟件應用型人才的基本工程能力培養起著重要作用。通過分層遞進的實踐教學環節,讓學生在學中做、做中學,理論和實踐緊密結合,真正領悟軟件工程抽象的理論方法在現實生活中的具體應用,從案例體驗到模仿設計,再到獨立設計和創新設計,從分模塊的實驗到簡單項目的完整開發,循序漸進地提高了學生分析和解決實際問題的能力,以及工程能力、團隊合作能力,使學生建立了規范開發軟件的工程意識。
參考文獻:
[1]劉強,陳越,駱斌,等.“軟件工程”課程教學實施方案教育[J].中國大學教學,2011(2):41-44.
[2]檀明,張向東,許強,等.以能力為導向的軟件工程專業應用型人才培養[J].計算機教育,2010(21):88-92.
[3]蔣宗禮.以能力培養為導向提高計算學科教育教學水平[J].中國大學教學,2008(8):35-37.
(責任編輯:孫 娟)