現代軟體工程講義 目錄
軟體工程牽涉的範圍很廣, 同時也是一般院校的同學反映比較空洞乏味的課程 (不信就請看 微博上的軟工)。 但是軟體工程的技術對於投身IT 產業的學生來說是非常重要的。 經過幾年的探索, 我總結了在16周的時間內讓同學們通過 “做中學 (Learning By Doing)” 掌握實用的軟體工程技術的教學計劃。這幾年教書的過程中, 我學習了一些 好老師的建議, 還有些教課的心得, 也對中國大學的 IT 教育有些反饋。近兩年高等教育有不少創新的嘗試, 希望這個軟體工程課也能實踐一些創新的點子。
迄今有三十多所學校採用了 《構建之法》的理念和教程來教程式設計/軟工課程。 它們大多采用了網上課堂 +
最新版資訊:
《構建之法 - 現代軟體工程》第三版(第三版的豆瓣討論,第二版,多看 電子版, 對我的採訪,微博)課件(PPT)
這套講義有這樣的特點:
理論和實踐相結合,講現代理論,同時講體現理論的工具,結構緊湊,個人專案/結對專案/團隊專案緊密配合, 能在14 周講完。
面向實戰,強調做中學 (learning by doing), 專案都公開發布,使用者數量和反饋是專案重要的評價標準。學生在公開的社群中獲得反饋。
結合實際,講人在軟體工程中的不同角色和作用,如:軟體過程, 軟體工具, 軟體人員的技術能力和職業能力。
學生作業涵蓋了閱讀,分析,程式設計,團隊合作,技能評估,作業經過了數年實戰的考驗,聯絡實際,覆蓋面廣。都有相當大的擴充套件性,能適合一般大學和世界一流學校的練習要求。
擴充套件內容多: 參考書 (20 本),和眾多的參考資料。
吸收了眾多高校師生在實際教學中的經驗,每個學期的各種內容都有增量改進。
講義內容:
1. 概述
- 課程教學方法 課程的底線 教學方案 - 這門課應該有什麼樣的師生關係? 作業能抄襲麼? 底線是啥?對於不同水平的學校和學生有什麼不同的教學計劃?
- 習而學的軟體工程教育 - 怎麼教工程類的專業?
- 軟體工程概述
- 專案剖析 微軟學術搜尋專案 10個版本的歷程
- 練習與討論
2. 個人開發技術
- PSP: Personal Software Process,
- 程式效能分析 例項
- 單元測試 (在最小的程式設計單元上保證正確性) & 迴歸測試 (保證程式在修改的過程中, 原有的功能保持穩定 )
- 單元測試的實踐:詳細的 Java 示例 C++ 示例 從命令列開始逐步培養程式設計能力 Java
- 技能的反面
- 練習與討論 (個人技術) & 練習與討論 (工程師的成長),軟體工程師能力自我評定表
3. 兩人合作
- 程式碼規範和程式碼複審
- 結對程式設計, 有記載的最早的結對程式設計發生在 1987年3月…
- 給人提意見的方式 - 送一個漢堡包
- 練習與討論
4. 軟體過程/方法論
- 各種方法概述
- 敏捷方法: 酒後的敏捷, 敏捷宣言,敏捷原則
- Scrum/Sprint, TDD, FD
- MSF-Agile
- 支援軟體過程的工具 (TFS)
- 練習與討論: 團隊與流程 & 敏捷 & MSF
5. 團隊中的角色與合作
- 團隊的型別,團隊合作的階段
- 團隊成員不同的投入和心態 - 豬/雞/鸚鵡
- 角色 – PM PM Spec, PM 的成長, 專案管理的細節 練習與討論: PM
- 角色 – Dev Dev 的成長 軟體開發不是閉卷考試 頂級程式設計師的心得–Coders at Work
- 角色 – QA & Test 質量保證和測試, QA 的閏年問題,QA/Test 的角色和分工,練習與討論: 測試, 質量保證
6. 需求
a. 專案需求分析和建議
b. 使用者調研的方法
c. 目標和遠景 - 反面例子畫扇面
f. 練習與討論
7. 設計和開發
- 基本的分析和設計方法
- 模組API 的設計 (例子: elevator design, mvc/mvvm, interface)
- 開發階段的日常管理
- 使用者介面,使用者體驗的設計
- 原始碼管理 - 你的團隊能做到這些麼?
- 練習與討論: 場景設計 & 軟體設計與實現 & 使用者體驗
8. 穩定階段, 釋出和維護
a. 測試的計劃和執行
b. 關於閏年的測試
d. 練習與討論
9. 軟體和 IT 業的創新
b. 創新 - VCD 的故事
c. 創新的時機
d. 魔方的創新
e. 如何提出靠譜的專案建議 (NABC)
f. 創新的出路 - 走進作坊; 創新的招數
g. 練習與討論
10. 軟體專案的管理
- 績效管理
- 程式碼量和樹葉量
- Postmortem - 事後諸葛亮會議
- 軟體工程師的職業道德
- 人的問題 (同學的感想)
- 練習與討論
附錄, 參考書, 論文閱讀
本教材的參考書和參考資料; 現代軟體工程的教材和參考書(豆瓣列表); 有關創新的書(豆瓣列表)
作業彙總
說一千道一萬,作業應該是怎麼樣的呢, 請看:
-------
-------
採用過這門教程的學校列表:
注:排名按照學校所在地大致由北向南排列, 一個學校採用《構建之法》 的情況有多種方式,包括:作為教材,作為參考書,使用課件或參考課件,採用 “做中學”的教學方法,採用有工程經驗的助教幫助教學,等等。我們有老師和助教的微信群,歡迎加入。
學校 |
任課 教師 |
學生 級別 |
部落格/Github (部分) |
部分優秀學生部落格 |
東北師範大學 |
楊貴福 |
研究生 |
課程名:軟體專案管理 教學部落格 |
鄭蕊 濮成林 演奏者 |
瀋陽航空航天大學 |
張翼飛 | 大三 下 | 教師部落格 助教部落格 | 薛鵬飛 Ray |
北京工業大學 / 耿丹學院 |
馮花平 |
大三 |
周陽 | |
北京工業大學 (本部) |
楊紅麗 |
大三 |
||
清華大學 軟體學院 |
劉強 |
大二 下 |
學生部落格: |
ZhaoYang |
北京航天航空大學 計算機學院 |
羅傑 |
大三 |
||
人民大學 |
劉青 | |||
北京電子科技學院 資訊保安系 |
婁嘉鵬 |
大二 下 |
|
lwr 劉偉康 |
天津大學 軟體學院 |
章亦葵 |
研一 |
||
石家莊鐵道大學 軟體工程系 |
王建民 |
大二 下 |
教師部落格:http://www.cnblogs.com/wangjm1975/ |
|
齊魯工業大學 軟體工程系
|
趙培英 |
大二 下 |
教師部落格:http://www.cnblogs.com/qluZhao/ 助教部落格1:http://www.cnblogs.com/math/p/4567801.html |
|
南通大學 電腦科學與技術學院 |
鞠小林 |
大三 上 |
苗中峰 | |
安徽巢湖學院 |
卜華龍 |
大三 |
||
上海海洋大學 |
葛豔 |
大三 |
||
河南職業技術學院 軟體工程系 |
陳紅根 |
大二上 |
||
四川師範大學計算機系
|
廖雪花 |
研一,本科 |
||
東華理工大學 軟體工程系 |
李祥 |
研一 |
||
華中科技大學 機械學院 |
陳冰 |
大四 |
||
中國地質大學(武漢) |
範萍 | |||
武漢大學 |
李小紅 | |||
湘潭大學 |
宋小波 | |||
福州大學 數學與電腦科學學院 |
張棟 |
大三 |
||
福建閩江學院 |
測試課程 |
大三 |
||
廣州商學院 資訊工程與技術學院 |
杜雲梅 |
大二 下 |
||
微軟亞洲研究院 創新人才培訓班 (各個學校的優秀學生) |
大四 |
在正式編輯出版前,這套講義在下面的學校正式課程中運用過:
2007 – 2010 清華大學理論電腦科學研究中心 (姚班) 主要是大四上學期
2009, 2012 北航計算機系 大三上學期
2010,2011,2012 秋季 中科大-微軟 計算機實驗班 (微軟亞洲研究院創新人才班 ) 大四上學期還有在北大合作的教學:
2007 - 2009 北京大學軟體學院 研究生課程 (課程名叫 - 微軟軟體實現技術, 我是講師之一, 只講了本課件的少部分內容)
學生上課之後感想如何呢? 請看
http://www.cnblogs.com/-OwO-/p/5116725.html
http://www.cnblogs.com/wx1306/p/5117461.html
http://www.cnblogs.com/malinlin/p/5058509.html
http://www.cnblogs.com/dasusu/p/5061566.html
http://www.cnblogs.com/maxx/p/5060565.html
http://www.cnblogs.com/lizanqirxx/p/5066399.html
現代軟體工程系列 學生的精彩文章 (6) 我們其實還不懂網際網路
現代軟體工程系列 學生的精彩文章 (3) 如何在Bug 不斷的情況下還能保持平常心... [zz]
現代軟體工程系列 學生的精彩文章 (2) 到底是誰的 bug?
2012 部分北航學生的感想:
所有講義, 作業都可以分享給教師用於教學, 只要註明引用來源即可, 不必事先取得同意。
歡迎反饋和意見。
本文系轉載,出處:http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html