喬雨
(南京工業大學浦江學院計算機與通信工程學院,南京 211200)
《軟件工程》是高校計算機軟件相關專業中的一門核心課程,它的產生是為了適應計算機軟件不斷增長的需求,擺脫軟件危機的困擾[1]。《軟件工程》目前是計算機軟件學科中的一個重要分支,它的工程思想和設計方法能夠指導計算機軟件的開發和維護,嚴格遵循軟件工程方法,可以大大提高軟件開發的效率與質量,顯著減少軟件開發和維護中的問題[1]。
《軟件工程》這門課程主要介紹了軟件工程的基本原理、軟件開發過程及過程中使用的工具[2]。因此,結合《軟件工程》的學科背景以及課程特點[3],以聚焦軟件質量為基礎,將軟件工程的知識體系分為:軟件工程=工具+方法+過程,如圖1 所示。
由圖1 可見,“質量焦點”在金字塔的最底層,這不難理解,因為軟件工程就是為了應對軟件危機誕生的學科,其目標就是為了要關注軟件安全,構建和維護高質量的軟件。而要構建高質量軟件,則要重點關注軟件過程中可能出現問題的環節,將溝通、計劃、建模、構建和部署等過程進行有效地組織,而軟件過程就是指明從軟件的誕生到結束這一生命周期內,開發與構建系統時要遵循的步驟。

圖1 軟件工程知識體系
方法是指在整個過程中,如何構建系統的方法學。例如,如何分析用戶需求;如何對產品進行測試驗收;如何進行系統架構設計等。
了解了過程,掌握了方法,那么具體落到操作層面,就涉及到對工具的使用。通過輔助工具,可以幫助把一些流程規范起來,提高開發的效率。例如Bug 跟蹤工具、源代碼管理工具等。因此,軟件工程的核心內容就可以圍繞“軟件開發的過程、分析與設計的方法學,以及輔助工具”展開。
教學內容的設計是課程教學設計的首要問題,每一門課程都有其自身的結構,或者說本身就是一個概念體系[4]。在做《軟件工程》課程教學設計之時,首先將該門課程的知識點進行梳理和總結,形成知識架構。

圖2 《軟件工程》知識點思維導圖
在上面的內容中已經分析了《軟件工程》課程的總體內容,根據圖1 給出的公式,可以將該門課程的知識結構具化為如圖2 所示的思維導圖。通過梳理出的知識結構,教師能夠形成教學的知識脈絡,明細整個課程的教學目標和重難點;學生也能夠更清晰地把握本課程的知識分布,了解每一個知識點在整個課程知識體系中所處的位置以及知識點之間的相互聯系,進而達到幫助學生“善學習”的目標。
“理想的學習方式是讓學習者運用其產出的知識,并且使用特定的問題解決策略來解決有意義的問題。這樣有助于形成所謂的‘情境性知識’,亦即在特定情境下完成有意義的工作而產生的知識[5]。”《軟件工程》這門課通常安排在第五或者第六學期,這個階段的學生已經有HTML、Java 和數據庫等知識基礎,并且通過這些相關的課程設計或者學校的實踐項目,具備了一些軟件開發的經驗。基于這樣的前提,我們對《軟件工程》課程的教學方法進行改進,不再按照書本上進行“就理論講理論”[6],而是結合學生在實踐過程中可能遇到的問題,以及企業在軟件研發過程中遇到過的經典問題作為實例進行分析,實現“情境式教學”。
具體安排如表1 所示,首先將課本中知識按章節分別進行實例場景設計,用問題串的形式進行知識點導入,用解決問題(任務驅動)的任務目標讓學生帶著問題去學習章節中具體的知識點。這種面向專題化、實例化的教學過程設計,將傳統的講學轉變為導學為主,基于教材又高于教材,通過介紹核心理論知識、布置學習任務、確定討論主題等環節[7],引導學生在目標任務的前提下去主動地學習課程的知識點,并將理論方法應用于實際問題的解決,為他們日后能夠更加快速地適應研發類的工作打下基礎。

表1 軟件生命周期教學內容設計思路
進入《軟件工程》課程學習的學生已經具備了微、小型項目的實踐經歷,但是小型項目的實踐過程很難真正體會到軟件中的工程思想和設計方法,因此在《軟件工程》課程的教學設計中,根據軟件研發的生命周期“項目規劃→需求分析→設計→編碼→測試→運行維護”這六個階段,適當的組織小組討論或者角色扮演等環節。在這樣的教學環節中,教師分別對軟件研發周期中涉及到的主要崗位進行介紹(如表1),包括這些崗位所需要具備的知識技能、工作內容、工作職責以及崗位之間的聯系和差異等;通過這樣的方式間接地去引導學生對自己未來職業發展的思考(包括但不限于“我未來想從事哪一個崗位”、“這個崗位是干什么的?”、“我離理想的崗位還有多大的差距?”等等)。
通過這種結合崗位角色的教學設計能夠幫助學生在后續的就業擇業方面能夠做出更加理智地選擇,幫助緩解學生面臨就業時感到迷茫的狀態。
本文通過分析了應用型本科教育環境下,計算機軟件相關專業中《軟件工程》的課程地位和現狀,分析了課程知識體系及學生的知識儲備情況,提出將未來就業崗位相關的內容和性質融合到教學過程中,引導學生不僅善學習、會思考,還能為本科畢業后的就業提前做好準備,使得培養出的學生在學習和就業方面更加有擔當。