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. 个人开发技术

  1. PSP: Personal Software Process, 

  2. 程序效能分析

  3. 单元测试    (在最小的编程单元上保证正确性)  &  回归测试   (保证程序在修改的过程中原有的功能保持稳定 )

  4. 技能的反面

      

 

3. 两人合作

    a代码规范和代码复审

    b. 结对编程, 有记载的最早的结对编程发生在 1987年3月…

    c. 给人提意见的方式 - 送一个汉堡包 

 

 

4. 软件过程/方法论

  1. 各种方法概述 

  2. 敏捷方法:  酒后的敏捷,  敏捷宣言,敏捷原则

  3. Scrum/Sprint,  TDD, FD 

  4. MSF-Agile

  5. 支持软件过程的工具 (TFS)

 

5. 团队中的角色与合作

  1. 团队的类型,团队合作的阶段

  2. 团队成员不同的投入和心态  //鹦鹉  

  3. 角色 – PM   PM Spec, PM 的成长, 项目管理的细节  

  4. 角色 – Dev   Dev 的成长  软件开发不是闭卷考试   顶级程序员的心得–Coders at Work 

  5. 角色 – QA & Test 质量保证和测试, QA 的闰年问题QA/Test 的角色和分工, QA 的成长

 

6. 需求

a. 项目需求分析和建议 

b. 用户调研的方法

c. 目标和远景  反面例子画扇面

d. 计划阶段, 软件估计 (1) (2)

e. 场景/典型人物,  spec

 

7. 设计和开发 

  1. 模块API 的设计 (例子: elevator design,  mvc/mvvm,  interface)

  2. 开发阶段的日常管理

  3. 用户界面,用户体验的设计 

 

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/

 

 

所有讲义, 作业都可以分享给教师用于教学, 只要注明引用来源即可,  不必事先取得同意。

 

欢迎反馈和意见。