轟轟烈烈開展了一學期的《軟件工程》教學改革終於告一段落,宜乘熱打鐵,總結如下。分三個部分進行:(1)教師和學生基本情況介紹;(2)教學內容(含理論知識、案例實踐安排);(3)實際教學組織情況分析,附帶經驗、教訓小結及原因分析。
一、師生基本情況
教師:2014年博士畢業,專業是軟件分析與測試。在此之前,我在南通大學任教,主要課程是《軟件工程》及軟件工程相關專業。其中《軟件工程》課程教過超過10輪次。對《軟件工程》理論知識有一定的研究和心得的,對軟件工程的主要知識點也有基本的理解。在學習階段曾在國內實力較強的軟件公司短期實習。助教寶玉:曾經在著名軟件公司任技術顧問,目前在國外留學,有着豐富的軟件項目開發實戰經驗。學生:南通大學杏林學院計131、132(大三)學生,共計44人。大一時候學過C++編程、部分同學自學過Java編程。有一定的編程經驗。
二、教學內容
(1) 理論教學
目的主要是傳授軟件工程知識點,包括軟件開發、測試的知識、軟件項目管理知識等。采用教材是《構建之法》-現代軟件工程(鄒欣著 第二版,人民郵電出版社),與市面上的其他軟件工程教材不同的,這本書的寫作風格相當詼諧有趣、采用很多比喻,將很多軟件工程理論融入到這些類比的故事當中。(這也帶來了一個問題: 讀者需要一定的“幽默細胞”才能讀懂這些故事。好比某人講了個笑話,台下聽眾卻聽不懂,就不好玩了,正所謂好故事,也需要好的聽眾!)。這本書的教學內容安排大致如圖1:
圖1 軟件工程教學知識圖譜 V2.0 (建議第三版《構建之法》是不是增加個類似的知識圖譜,可以一目了然)
這里我略去了第16、17章 IT行業的創新,這兩章章有些哲學的意味,我覺得這兩章留給學生們自己閱讀、慢慢體會比較好。此外,還有第九章 PM部分,建議也是留給學生自己閱讀領會。
第一章(概述部分),主要用於回答什么是軟件工程、為什么要研究軟件工程。 我覺得寫得非常好的地方在於用了個很好的類比,將軟件開發的不同階段類比為各種不同飛機的制作。另外一個寫得非常好的地方是對項目特點的概括:Build to Learn、to Show、to Server、to Win。
第二章:我覺得最好與第三章合並在一起講授,圍繞的是個人能力和成長過程。此外,我覺得2.1 單元測試在這里(ch2)可做簡要介紹,詳細講解可以放在后面“軟件測試”章節。我知道鄒欣老師介紹過“三文魚”模型,猜想是可能出於對應該模型的需要。3.3 節可作為課堂討論的議題,還是很有辯論意思的。總體上,我覺得教材第二章、第三章內容可以合並在一起講授。
第四章:寫得非常好,感覺比第一章的還有味道,就不多說了。
第五章:團隊和流程,采用例子很清晰地說明團隊、非團隊的區別。 接着列舉了10種團隊模式(頭大)和6種開發流程(事實上,本章最后拋出引子,提及了后面將要介紹的敏捷流程、MSF)。我建議講授時:(1) 分清團隊模式的分類標准。可以將列舉的已有模式進行更簡潔的分類,讓學生一目了然,能很快明白各種團隊組合的利弊。(2) 我建議在這一章將簡單講授一下開發流程,拋出引子。軟件開發流程的知識點將放在第六章、第七章主要講解。如果時間來不及,可以將將第7章作為附錄,讓學生課外閱讀學習也不錯。
第八章、第十章寫得很不錯。其中在講用戶調查時,可以先講各種方法的分類,讓學生有總體的認識,至於各種方法學生自己閱讀即可。我在想這部分省出的時間,可以設計一個課堂的需求分析—— 用戶調查。此外,第十章 的10.4 節功能驅動設計僅作簡單介紹。設計部分留在后面設計階段(第十一章)講。
第十一章講軟件設計與實現,前面(Page 224)講設計方法可以進一步加以概括文字文檔驅動的設計方法、圖形模型驅動的設計方法兩類(當然這兩類還可以進一步細分)。接下來主要介紹第二類設計方法。最后11.5 略講。
第十二章,用戶體驗,可以結合學生平常使用QQ、手機QQ、微信、微信公眾號的一些體會來講解,先讓學生自己總結,教師在一邊引導。
第十三章 用戶測試 內容及其豐富,可講內容實在太多,實際學習內容要有取舍。除了一些基本概念要求掌握外,要求學生掌握PIE模型,基本的軟件測試用例設計方法,能夠掌握簡單的覆蓋測試工具使用。
第十四章,軟件質量保障。本章軟件質量部分(14.1)可以提前到第一章緒論部分講解,軟件質量保障可以穿插到流程部分講解。
第十五章,穩定和軟件發布。 其實發布相對簡單好理解,倒是本章最后的寓言故事很是讓人回味無窮,但願我的學生也能領悟到其中的奧秘。否則,鄒欣老師辛苦寫出這樣的故事,弦斷不知幾何。
剩下兩章,我前面說過,比較適合學生自學。畢竟很多道理不是老師教出來的,而是學生自己悟出來的。但願鄒欣老師的知音能再多一些。
(2) 實踐環節
首先,在學期初,我們首先進行了C++ 學習情況摸底調查、接着開展學生使用軟件的調查,第一節課就要求每個學生在博客園開通博客,並以博客的形式完成作業。按照要求,應該在第一次課程結束后開通博客,但存在不足之處:是學生博客開通速度不夠快,有少量同學,第三周才勉強開通博客。這里面有學生的客觀需要:一個新的作業方式的適應過程。
第一次實踐作業是設計一個簡單的矩陣加法,結果遇到了不少困難,從Eclipse環境搭建、不少同學還得先自學Java語言語法。結果可想而知,我和寶玉忙着給同學們補課:從Eclipse環境配置、Java語言的技術輔導、到面向對象編程思想(習慣)逐項在QQ群和QQ好友中講授,希望能提高他們的技能。直到有一天,我和助教突然想起,這門課程的目的在於軟件工程的知識素養,放棄了手把手教的方式。
第二次實踐是“設計一款爸媽使用的手機”,以游戲的形式開展課堂討論,不可否認,這是一次非常成功的課堂組織教學。我和寶玉事先精心設計的課堂的討論環節,將44人同學分成11組,分組討論,分組設計,分組演示,課堂辯論。同學們對功能、性能等方面設計投入心血,考慮非常深入,從事后各人整理的博客(需求分析博客)也可以看出來,同學們的積極性被空前調動了。因此,總體上看,第二次實踐算是很成功。
第三次實踐是用戶體驗。要求同學們關注“南通大學教務管理”微信公眾號,通過使用,分析其在用戶體驗方面的不足。對應地,同學們也提出了不少用戶體驗方面的缺陷與不足。
考慮學生動手能力普遍較弱,最初設想的軟件開發項目最終也沒付諸實施。加之由於時間有限,實踐環節就沒有繼續開展。
三、教學組織情況
本學期《軟件工程》教學主要模式:課堂教學(討論)+課外實踐+博客作業(助教點評、學生反饋)
經驗在於課外實踐(曾經充分調動學生積極性)、建立“QQ教學改革群”。在群里、博客園及時分享有用的鏈接、觀點等。信息溝通較為方便,美中不足的是學生、教師、助教的雙向交流並不頻繁、體現為老師、助教作業點評之后的師生交互上 學生學習是作業驅動型還是占絕大多是。
總結上述情況,得到了如下啟示:(1)對新的教材內容需要盡快了解掌握,需要加強學生了解不夠,早期布置實踐作業偏“難”,進度安排前松后緊。需要從系統設計實踐教學案例,並且從一開始就抓緊督促學生,保持進度;(2)要持之以恆。學期伊始,滿腔熱情。在學生作業拖了后腿之后調整周期過長。更需要持之以恆的決心和信心。(3)心太軟。消極怠工的學生批評不到位、作業期限一拖再拖,反過來也影響了教學的進度。並需要一開始就堅決執行嚴格的打分規則。(4)博客點評問題。與學生的互動不充分。在對學生的博客作業點評之后跟蹤不夠,沒能帶動學生積極反饋的勢頭。需要引導一批學生對老師的點評積極反饋,形成一個好學習氛圍。
后記:明年春季還有四個班的教學,既然開了頭,就沒有回頭的道理。