侯之旭 任大飛
(長江師范學院大數據與智能工程學院,重慶 408100)
軟件工程的教學內容是軟件工程學科的基本概念、基本原理和基本方法,教學目標是培養學生用軟件方式解決應用問題的能力, 即鍛煉學生的分析需求、設計軟件解決方案并實現軟件的能力,這就決定了軟件工程必是一門理論與實踐并重的課程。 并且在課程教學中還表現出一些特點。 第一,軟件工程的學習通常需要一些前導課程做基礎,比如程序設計基礎、數據結構與算法設計、數據庫應用等,這些課程是從事軟件開發重要的基礎知識和開發技術來源,這些課程的學習質量直接影響軟件工程課程的學習質量甚至是興趣。 第二,課程理論知識具有抽象性且概念多、關系復雜,學習起來枯燥難理解。 第三,課程理論知識大多來源于大型復雜軟件開發,這讓幾乎無開發經驗的學生學習起來接收困難。 第四,課程實驗內容通常為軟件建模練習和文檔編制,這很容易被學生認為“無用”,對學生動手實驗的吸引力不大。 這些原因都給課程教學帶來極大困難,也給課程教學目標的達成帶來不利。
因此為了改善教學效果,促進課程教學目標的達成,需要結合課程實際,分析軟件工程實踐能力的內涵和培養途徑,再針對理論和實驗教學現狀中存在的問題給出相應的改革辦法。
具體到軟件工程課程需要培養的工程實踐能力,主要指:(1)能用軟件工程的原則、開發方法與技術實現軟件項目的開發與管理;(2)能適應軟件開發新方向。 要具備這些能力,首先,要在課程實驗環節,動手開發實際軟件項目,積累開發經驗;其次,要在課程理論學習中,理解軟件工程的概念、原則,學習主流的技術和方法,了解新技術等。 本文將從課程理論和課程實驗兩個方面分別描述課程教學現狀和改革措施。
首先,軟件工程課程理論具有概念多、名詞多,知識點之間關系不易把握的特點,學生學習很難產生主動的學習興趣。 比如,在第一章學習中,就會先后接觸到“軟件”“軟件生命周期”“軟件工程”“軟件過程”和“軟件過程模型”等概念,“軟件”是軟件開發的目標產品,“軟件生命周期”是軟件概念的補充,對指導軟件開發過程的活動安排有重要作用,“軟件工程”是一個以制造計算機軟件為目標的工程學科分支,強調綜合利用基礎科學知識, 能以最小代價開發出高質量軟件,“軟件過程” 是一次軟件開發各活動所形成的過程,即軟件工程的一次實踐等。 由此可見這幾個名詞在含義上相互之間有關系,且對課程學習目的的認識有重要作用。 但教材和常見學習資料通常僅給出名詞的經典定義,學生學起來難理解、難記憶,也很難產生進一步學習的興趣。
其次,課程理論知識大多數是來源于軟件開發領域的優秀經驗、標準規范等,且大多針對的是大型或復雜軟件,這些很難在幾乎無軟件開發經驗的學生頭腦中產生共鳴。 軟件工程課程為了能夠對各種規模、各種復雜程度、各種類型軟件開發問題都能起到指導作用,所以內容大多是以大型復雜軟件開發的需要所安排的,主要特征為規范嚴格、過程煩瑣、建模復雜以及文檔細致,這些特點與幾乎沒有軟件開發經驗的學生形成鮮明對比,實際教學中也很少有真實的大型復雜項目作為案例, 所以學起來很難有直觀的感受,即課程內容較難調動學生學習的主動性。
最后,由于課程實驗課時少,實驗內容決定了主要的理論教學內容為軟件需求和設計階段的知識,然而在實際軟件開發中,這兩個階段不直接產生軟件程序,對于沒有全過程軟件開發經驗和切身體會的學生來說,開發軟件就是編寫程序,可以運行的程序才最重要,編寫代碼技術好才是軟件開發的真本事,甚至是唯一需要的能力,而需求理解分析、軟件設計的建模和文檔似乎是沒有多大用的。 這就導致課程內容對學生吸引力不大。
首先,由于實驗課時少,所以只能將實驗內容選定為軟件需求、設計建模及文檔編制(因為軟件開發過程其他活動的知識有相應專業課學習), 而這些實驗內容學習成本較高(另外要學習UML 和建模工具)且無直接的可運行程序產出,對學生練習的吸引力很小。 其次,通常只有中大型軟件開發才必須要求規范的軟件建模和文檔編制,而學生實驗練習題目很難達到這樣的規模,一般是選擇需求能夠來源于常識中小型軟件題目,這就導致實驗內容的說服力不強。
鑒于現在課程教學中存在的問題,應該以工程實踐能力的培養為教學目標,有針對性的分別在理論教學和實驗教學中采取相應措施。
針對課程理論知識很難引起學生興趣,學習效果不好的現狀,在理論教學中可采取以下四種措施。
第一,利用與學生存量知識之間的接口,讓學生對知識的接收更容易。 比如,大多數學生通過前導課程的學習, 已有編寫計算機程序解決應用問題的經歷,了解軟件開發要從問題需求開始,所以在講解軟件開發過程(需求分析、軟件設計、編碼實現、測試、部署)時就可以充分利用這一點。 即軟件開發一定是為了解決現實中的某個應用問題,所以先要理解分析問題。 另外學生也都有中小學解數學應用問題的經歷,可以引導學生參照數學上解決應用問題的經典過程(如審題、設計算式、計算出結果、驗證結果),軟件開發也需要理解分析應用問題的需求,然后設計解決該問題的軟件解決方案,最后用程序設計語言實現該軟件,并由軟件測試保證軟件質量。
第二,重在講解知識點之間的聯系,具體知識點學習可充分發揮學生自學。 大多數學生都有較強的自學能力, 針對單個具體概念的學習是完全可以勝任的,鑒于課程概念多的問題,可以將講解的重點放在講清楚知識點之間的聯系上。 比如,在學習軟件設計活動時,通常依次要學習這三個概念:(1)軟件設計;(2)設計模型;(3)設計原則。 學生對這三個概念自學是基本可以理解的,自學的困難之處在于,不容易理解為什么要學設計原則,教師只需要講出來是設計模型的內容和質量要求以及設計活動所面臨的挑戰決定了必須要依照一些設計原則才能完成設計,才可能得出高質量的設計方案。
第三,理論知識講解時一定要結合案例,并且使用一個案例貫穿整個知識體系講解的全過程。 課程的核心內容就是軟件開發各階段的活動及相關方法和技術,講解這樣的內容,一定要充分借助一個有代表性的軟件案例,通過逐步介紹其開發過程和各階段的軟件制品,使學生有更具體的理解。 比如,在需求理解分析活動中,引導學生通過理解需求嘗試規劃系統功能用例和參與者,并構思之間的關系,嘗試表示出系統功能模型,然后給出一個標準的詳略適當的功能模型的“參考答案”,使學生自動的反思自己模型表示的優勢和不足之處,取長補短,提升能力。
第四,在理論知識講解過程中適時引入對軟件開發領域新方向、新技術。 軟件工程學科內容是為高效的開發出高質量軟件而準備的,自然也會因為社會對軟件要求的變化而發展,所以學習者在學習傳統的經典的軟件過程模型,掌握主流的軟件開發方法、技術的同時,也一定要了解軟件開發的新方向,比如現在處于發展中的基于構件的軟件開發、 敏捷軟件開發、面向服務的軟件開發以及持續集成等軟件開發新方向。比如,現在軟件開發時需求變化情況可能會發生在軟件開發和運行的各個時期, 甚至軟件開發可能是僅從創意開始的,軟件邊開發需求邊構思,軟件邊使用功能邊豐富,這要求軟件開發具有適應需求變化能力。
針對課程實驗內容的吸引力不大、說服力不強的處境和實驗目標難以達成的現狀。 在課程實驗教學中可采取如下四條改革措施。
第一,應該有針對性加強關鍵步驟演示,及時解決學生實踐環節的卡殼點。 在面向對象方法是主流的軟件開發方法的當下, 掌握UML 模型表示機制及其相關建模軟件是很有必要的。 所以學生要想順利地開展軟件建模實驗,首先要對UML 有比較深入的了解,這已經是比較大的學習任務了,而且實際中還要熟悉一款可以進行UML 軟件建模的工具, 這無疑又增大了學習任務。 所以要求在有限的實驗時間內進行軟件建模練習, 學生必然會在UML 學習及工具軟件熟悉過程中有困難和卡殼點,教師一定要結合自己實驗備課的體會,再加上主動收集學生實驗過程中的疑難問題,及時進行演示講解,助力學生順利開展課程實驗。
第二,合理組織實驗小組,精心確定軟件題目。 為了能夠模擬真實的軟件項目開發場景,實驗形式適合3~8 名學生組成項目小組, 這樣既可以承擔一定規模的軟件題目,又可以在實驗中鍛煉項目組成員分工協作。 另外軟件題目的以小組自擬加教師審核的方式確定,在自擬題目之前教師也可以提供數個題目供學生參考, 讓學生在參考中體會可以選擇的軟件類型、軟件規模等。 教師審核軟件題目和軟件需求這個環節必不可少, 一定要確保選擇的題目有開發意義價值,具備一定的規模,且具備可實現性。
第三,強化軟件開發過程控制。 在組成項目組,確定軟件題目后,應該要求學生根據每次實驗課安排的實驗任務, 對自己的軟件題目進行相應軟件建模,在本次任務完成后,要以實驗報告的形式提交當前軟件建模的成果。 在需求分析建模完成、軟件設計建模完成后,還要編制需求文檔和設計文檔。 雖不作為實驗成績的組成部分, 但鼓勵學生在實驗課時結束后,項目小組將軟件設計進行編程實現,將軟件開發完成。
第四,改進課程考核方法,強化實驗所占比例。 為了突出實驗練習在達成課程教學目標中的重要性,還可以將實驗環節在課程考核中的占比在一定范圍內加大,參考軟件工程的教學實施方案建議,將占比確定為40%,其中軟件建模結果和質量占20%,實驗報告情況占10%,規范化需求和設計文檔占10%。
作為計算機專業一門核心專業課,軟件工程肩負著培養學生軟件開發方面的工程實踐能力的重任。 良好的軟件開發能力不僅要求具有實際軟件開發經歷,也要求具備成體系的理論知識,所以實際教學中既不能輕視課程實驗對學生的鍛煉,又不能忽視課程理論知識的教學效果。 經過長達5 學期軟件工程一線教學觀察和思考,針對課程教學中存在的問題,先后逐步在教學中施以本文所述教學改革措施。 經過對比發現學生在理解知識點之間的關系和學習主動性方面有了明顯改善,在實驗方面也從模仿已有軟件模型到獨立設計軟件模型。 在教學目標達成方面取得了一定的成效。 鑒于教學課時有限,后續可以考慮將知識點之間的關系整理成學習資料,將建模工具軟件操作錄制成視頻等,持續推進課程建設。