软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较乏味的课程。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。 经过几年的探索, 我总结了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划。

这套讲义在下面的学校正式课程中运用过:

 

2007 - 2010 清华大学理论计算机科学研究中心 (姚班) 主要是大四上学期
2009           北航计算机系  大三上学期
2010 – 2011 中科大-微软 计算机实验班 大四上学期
还有在北大合作的教学:
2007 - 2009 北京大学软件学院 研究生课程 (课程名叫 - 微软软件实现技术, 我是讲师之一)

 

这套讲义有这样的特点:

理论和实践相结合,讲现代理论,同时讲体现理论的工具

结构紧凑,个人项目/结对项目/团队项目紧密配合, 能在16 周讲完。

面向实战,强调做中学 (learning by doing), 项目都公开发布,用户数量和反馈是项目重要的评价标准。

讲人在软件工程中的不同角色和作用 (软件过程, 软件工具, 软件人员的技术能力和职业能力)

有丰富的材料给教师/TA 使用 (见下面的 “学生作业”)

练习量大 (其实学生工作量和国际一流大学相仿), 内容多: 教材 (3 本), 参考书 (20 本)

 

讲义内容: (标题下没有链接的会在以后补充)

 

  1. 概述
    1. 课程概述

http://www.cnblogs.com/xinz/archive/2011/05/16/2048044.html

  1. 软件工程概述

http://www.cnblogs.com/xinz/archive/2011/05/22/2053838.html

  1. 个人开发技术
    1. PSP 

部分在:  http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html 

技能的反面  (http://www.cnblogs.com/xinz/archive/2011/08/07/2129751.html)

  1. 程序效能分析 

http://www.cnblogs.com/xinz/archive/2011/11/20/2255809.html

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

http://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html

 

  1. 两人合作
    1. 合作的阶段和影响对方的方式

http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html  (http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html)

  1. 代码规范和代码复审

http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html 

  1. 结对编程 (need intuit story)

http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html

 

  1. 软件过程/方法论
    1. 各种方法概述 (rapid development) (http://www.cnblogs.com/xinz/archive/2011/10/07/2200511.html)
    1. 敏捷方法:  酒后的敏捷  (http://www.cnblogs.com/xinz/archive/2011/04/27/2031118.html)
      1. 敏捷宣言,原则  http://www.cnblogs.com/xinz/archive/2010/12/11/1902849.html)  http://www.cnblogs.com/xinz/archive/2010/12/10/1902725.html)
    1. SCRUM,  TDD, FDD
    1. MSF-Agile

http://www.cnblogs.com/xinz/archive/2011/11/21/2257663.html

  1. RUP (TBD)
  1. 支持软件过程的工具 (tfs suite)
  1. Postmortem

http://www.cnblogs.com/xinz/archive/2011/11/20/2256310.html

  1. 团队中的角色与合作
    1. 团队的类型 (rapid development)  (http://www.cnblogs.com/xinz/archive/2011/10/07/2200511.html)
    1. 不同的心态  - //鹦鹉   http://www.cnblogs.com/xinz/archive/2011/03/14/1983620.html
    2. 角色 - PM

http://www.cnblogs.com/xinz/archive/2011/11/07/2239150.html 

  1. PM Spec
  1. PM 的成长
  1. 角色 - Dev

http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html 

  1. Dev 的成长   顶级程序员的心得–Coders at Work 

 

  1. 角色 - QA

http://www.cnblogs.com/xinz/archive/2011/11/14/2247980.html

QA 的成长

  1. 需求
    1. 项目需求分析和建议 

http://www.cnblogs.com/xinz/archive/2010/12/01/1893323.html

  1. 目标和远景  - 反面例子画扇面:

http://www.cnblogs.com/xinz/archive/2011/03/13/1982585.html

  1. 软件估计

http://www.cnblogs.com/xinz/archive/2011/04/05/2005978.html;   http://www.cnblogs.com/xinz/archive/2011/04/06/2007294.html

  1. 场景/典型人物

http://www.cnblogs.com/xinz/archive/2011/10/30/2229236.html

  1. 设计和开发 
    1. 一个理想的流程 (mvc example, design interface example)
    1. http://www.cnblogs.com/xinz/archive/2011/10/30/2229255.html
  1. 用户界面,用户体验的设计 

http://www.cnblogs.com/xinz/archive/2011/11/06/2237801.html 

  1. 稳定阶段, 发布和维护

测试的计划和执行

http://www.cnblogs.com/xinz/archive/2011/11/19/2255542.html

CC, ZBB

 

  1. 软件和IT 业的创新

创新的迷思   (http://www.cnblogs.com/xinz/archive/2011/07/09/2102052.html)

http://www.cnblogs.com/xinz/archive/2011/07/10/2102310.html

http://www.cnblogs.com/xinz/archive/2011/07/11/2102667.htmlhttp://www.cnblogs.com/xinz/archive/2011/07/09/2102027.html

 

创新的时机http://www.cnblogs.com/xinz/archive/2011/08/08/2130505.html

魔方的创新  http://www.cnblogs.com/xinz/archive/2011/08/04/2128015.html

创新的出路 

  1. 如何提出靠谱的项目建议 (http://www.cnblogs.com/xinz/archive/2010/12/01/1893323.html)
  2. 出路 (TBD)

 

  1. 软件项目的管理 (人件)
    1. 绩效管理  http://www.cnblogs.com/xinz/archive/2011/05/01/2033927.html)
    2. 代码量和树叶量  http://www.cnblogs.com/xinz/archive/2010/12/11/1902864.html)
  2. 软件工程师的职业道德  http://www.cnblogs.com/xinz/archive/2011/03/28/1997566.html
  3. 附录, 参考书, 论文阅读

教材 (3本, 同学选择一本, 同时借阅另外两本) :

1. Rapid DevelopmentSteve 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 Codeby Scott Rosenberg, ISBN: 9781400082469

    中文版《梦断代码》, 译者 韩磊, ISBN: 9787121066795