2014/9 更新: 《构建之法 - 现代软件工程》已经出版
豆瓣讨论:http://book.douban.com/subject/25965995/
当当购买链接:http://product.dangdang.com/23553285.html
互动出版网购买链接:http://product.china-pub.com/3770489
亚马逊 链接
软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程 (不信就请看 微博上的软工)。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。 经过几年的探索, 我总结了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划。这几年教书的过程中, 我学习了一些 好老师的建议, 还有些教课的心得, 也对中国大学的 IT 教育有些反馈。近两年高等教育有不少创新的尝试, 希望这个软件工程课也能实践一些创新的点子。
这套讲义在下面的学校正式课程中运用过:
2007 – 2010 清华大学理论计算机科学研究中心 (姚班) 主要是大四上学期
2009, 2012 北航计算机系 大三上学期
2010,2011,2012 秋季 中科大-微软 计算机实验班 (微软亚洲研究院创新人才班 ) 大四上学期还有在北大合作的教学:
2007 - 2009 北京大学软件学院 研究生课程 (课程名叫 - 微软软件实现技术, 我是讲师之一, 只讲了本课件的少部分内容)
这套讲义有这样的特点:
理论和实践相结合,讲现代理论,同时讲体现理论的工具
结构紧凑,个人项目/结对项目/团队项目紧密配合, 能在16 周讲完。
面向实战,强调做中学 (learning by doing), 项目都公开发布,用户数量和反馈是项目重要的评价标准。
讲人在软件工程中的不同角色和作用 (软件过程, 软件工具, 软件人员的技术能力和职业能力)
有丰富的材料给教师/TA 使用 (见下面的 “学生作业”)
练习量大 (其实学生工作量和国际一流大学相仿), 内容多: 教材 (3 本), 参考书 (20 本)
讲义内容: (标题下没有链接的会在以后补充)
1. 概述
课程概述
习而学的软件工程教育
软件工程概述
项目剖析 微软学术搜索项目 10个版本的历程
2. 个人开发技术
PSP: Personal Software Process,
程序效能分析
单元测试 (在最小的编程单元上保证正确性) & 回归测试 (保证程序在修改的过程中, 原有的功能保持稳定 )
技能的反面
3. 两人合作
a. 代码规范和代码复审
b. 结对编程, 有记载的最早的结对编程发生在 1987年3月…
c. 给人提意见的方式 - 送一个汉堡包
4. 软件过程/方法论
各种方法概述
敏捷方法: 酒后的敏捷, 敏捷宣言,敏捷原则
Scrum/Sprint, TDD, FD
MSF-Agile
支持软件过程的工具 (TFS)
5. 团队中的角色与合作
团队的类型,团队合作的阶段
团队成员不同的投入和心态 - 猪/鸡/鹦鹉
角色 – PM PM Spec, PM 的成长, 项目管理的细节
角色 – Dev Dev 的成长 软件开发不是闭卷考试 顶级程序员的心得–Coders at Work
角色 – QA & Test 质量保证和测试, QA 的闰年问题,QA/Test 的角色和分工, QA 的成长
6. 需求
a. 项目需求分析和建议
b. 用户调研的方法
c. 目标和远景 - 反面例子画扇面
d. 计划阶段, 软件估计 (1) (2)
e. 场景/典型人物, spec
7. 设计和开发
模块API 的设计 (例子: elevator design, mvc/mvvm, interface)
开发阶段的日常管理
用户界面,用户体验的设计
8. 稳定阶段, 发布和维护
a. 测试的计划和执行
b. 从CC 到 ZBB, 到最后的软件发布
9. 软件和 IT 业的创新
a. 创新的迷思 连载 (1) (2) (3)
b. 创新 - VCD 的故事
c. 创新的时机
d. 魔方的创新
e. 如何提出靠谱的项目建议 (NABC)
f. 创新的出路 - 走进作坊; 创新的招数
10. 软件项目的管理
绩效管理
代码量和树叶量
Postmortem - 事后诸葛亮会议
软件工程师的职业道德
人的问题 (同学的感想)
附录, 参考书, 论文阅读
教材 (3本, 同学选择一本, 同时借阅另外两本) :
1. Rapid Development Steve McConnell (ISBN 1-55615-900-5)
中文版 快速软件开发斯蒂夫·迈克康奈尔 著 译者: 席相霖 等 ISBN 9787505372856
2. Code Complete (2nd Ed)Steve McConnell ISBN: 9780735619678
中文版 代码大全 (第二版)斯蒂夫·迈克康奈尔 ISBN: 7121022982
3. 移山之道 – VSTS 软件开发指南邹欣 (ISBN: 9787121071485)
主要参考书:
Dreaming in Code by Scott Rosenberg, ISBN: 9781400082469
中文版《梦断代码》, 译者 韩磊, ISBN: 9787121066795
其它相关博客 http://blog.csdn.net/SoftwareTeacher/archive/2010/11/20/6024185.aspx
现代软件工程的教材和参考书
有关创新的书
现代软件工程 作业 阅读和调查作业
一些有意思的程序员常去的博客 [zz]
-------
给学生布置的作业列表:
现代软件工程 作业 1: 个人项目
现代软件工程 作业 2: 结对项目
(电梯调度设计)
现代软件工程 作业 3: 团队作业 2012 团队作业
现代软件工程 作业 4: 个人阅读作业 (2011)
现代软件工程 作业 4: 阅读和调查作业 (2012)
现代软件工程 作业 5: 结对调查和分析作业 (2012)
-------
学生的感想:
现代软件工程系列 学生精彩文章(7) 宝贵的教训
现代软件工程系列 结对编程 两周写好3D 陆战棋
现代软件工程系列 学生的精彩文章 (6) 我们其实还不懂互联网
现代软件工程系列 学生的精彩文章 (5) 其实还是人的问题
现代软件工程系列 学生的精彩文章 (4) 为用户服务
现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心... [zz]
现代软件工程系列 学生的精彩文章 (2) 到底是谁的 bug?
现代软件工程系列 学生的精彩文章 (1)
2012 部分北航学生的感想:
http://www.cnblogs.com/jessica-song |
http://www.cnblogs.com/DOOM-lyx/ |
http://www.cnblogs.com/yinpc/ |
http://www.cnblogs.com/Tjamie/ |
http://www.cnblogs.com/felix1993 |
http://www.cnblogs.com/linlu1142/ |
www.cnblogs.com/coolcrow/ |
http://www.cnblogs.com/DOOM-zxz/ |
http://www.cnblogs.com/xyqhello |
http://www.cnblogs.com/quanfengnan |
http://www.cnblogs.com/DOOM-cbx/ |
http://www.cnblogs.com/honghong1191 |
http://www.cnblogs.com/ieverx |
http://www.cnblogs.com/Highestop/ |
所有讲义, 作业都可以分享给教师用于教学, 只要注明引用来源即可, 不必事先取得同意。
欢迎反馈和意见。