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

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

2007 – 2010   清华大学理论计算机科学研究中心 (姚班) 主要是大四上学期
2009,  2012    北航计算机系  大三上学期       
2010 – 2011   中科大-微软 计算机实验班 大四上学期       
2012  秋季      微软亚洲研究院创新人才班

还有在北大合作的教学:      
2007 - 2009 北京大学软件学院 研究生课程 (课程名叫 - 微软软件实现技术, 我是讲师之一, 只讲了少部分内容)

这套讲义有这样的特点:

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

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

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

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

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

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

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

1. 概述

  • 课程概述
  • 习而学的软件工程教育
  • 软件工程概述
  • 项目剖析 微软学术搜索项目 10个版本的历程

2. 个人开发技术

  • PSP: Personal Software Process,  技能的反面
  • 程序效能分析
  • 单元测试    (在最小的编程单元上保证正确性)  &  回归测试   (保证程序在修改的过程中, 原有的功能保持稳定 )

3. 两人合作

  • 合作的阶段和影响对方的方式
  • 代码规范和代码复审
  • 结对编程, 有记载的最早的结对编程发生在 1987年3月…

4. 软件过程/方法论

  • 各种方法概述
  • 敏捷方法:  酒后的敏捷,  敏捷宣言,敏捷原则
  • Scrum/Sprint,  TDD, FDD
  • MSF-Agile
  • 支持软件过程的工具 (TFS suite)
  • Postmortem - 事后诸葛亮会议

5. 团队中的角色与合作

  • 团队的类型
  • 团队成员不同的投入和心态  - 猪/鸡/鹦鹉
  • 角色 – PM   PM Spec, PM 的成长, 项目管理的细节
  • 角色 – Dev   Dev 的成长  软件开发不是闭卷考试   顶级程序员的心得–Coders at Work
  • 角色 – QA & Test 质量保证和测试

QA 的闰年问题

QA/Test 的角色和分工    QA 的成长

6. 需求

a. 项目需求分析和建议

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

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

d. 场景/典型人物

7. 设计和开发

  • 模块API 的设计 (elevator design,  mvc/mvvm example,  design interface example)
  • 开发阶段的日常管理

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

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

a. 测试的计划和执行

b. CC, ZBB, Release Candidate, and RTW

10. 软件和IT 业的创新

a. 创新的迷思  连载   (1) (2) (3)

b. 创新 VCD 的故事

c. 创新的时机

d. 魔方的创新

e. 如何提出靠谱的项目建议 (NABC)

f.  创新的出路 - 走进作坊;  创新的招数

11. 软件项目的管理

  • 绩效管理
  • 代码量和树叶量

12. 软件工程师的职业道德

人的问题 (同学的感想)

13. 附录, 参考书, 论文阅读

教材 (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)

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

欢迎反馈和意见。

现代软件工程讲义 目录相关推荐

  1. (转)五年教学实践与思考的结晶——推荐邹欣老师的《现代软件工程讲义》目录

    (转)五年教学实践与思考的结晶--推荐邹欣老师的<现代软件工程讲义>目录 2011-11-28 07:15:21 按:自打2007年结识邹老师,出版他的第一本书<移山之道>,从 ...

  2. 软件工程讲义 0 微博上的软件工程

    [现代软件工程讲义] 有舌尖上的美味, 也有微博上的软工.舌尖上的美味各有千秋, 而微博上对软工的抱怨都是相似的. 下面是我在新浪微博收集到大学生对软件工程教学的反馈: 师生关系(不限于软件工程) 教 ...

  3. 现代软件工程讲义 6 用户调研

    [现代软件工程讲义 的一部分] 软件开发的过程, 就是 "用户最需要的东西" 在下面这一链条中传送,转换,实现,扭曲或丢失的过程. 用户最需要的 > 用户表达出来的 > ...

  4. 现代软件工程讲义 8 软件的血型

    [这是 现代软件工程讲义 的一篇] 一个软件团队经历了计划/设计/开发等阶段, 达成代码完成 (Code Complete) 这一目标,似乎后面的事情就水到渠成了.  其实不然, 软件生命周期的最后阶 ...

  5. 现代软件工程讲义 5 项目经理 Program Manager

    在一个软件团队里, 不同的人有不同的投入, 我们在 猪,鸡和鹦鹉 的故事里已经说明了. 不同的人还要在团队中担负不同的任务, 我们也要讲一下. 开发人员 (大部分内容在: 现代软件工程讲义 2 工程师 ...

  6. 现代软件工程讲义 2 工程师的能力评估和发展

    Advanced Software Engineering  现代软件工程  讲义 软件工程师的能力评估和职业发展 介绍:  个人软件流程,  职业发展, 个人绩效的衡量和提高, 软件开发是科学, 工 ...

  7. 现代软件工程讲义 1 软件工程概论

    现代软件工程讲义 1 软件工程概论 几乎所有程序员都知道 "数据结构+算法 = 程序 " 这句名言.但是在实际的学习和工作中,也有不少人产生了疑问. 例如: 1.       我写 ...

  8. 疯狂android讲义目录

    内容简介 计算机便携化是未来的发展趋势,而Android作为最受欢迎的手机.平板电脑操作之一,其发展的上升势头是势不可当的.而Android应用选择了Java作为其开发语言,对于Java来说也是一次极 ...

  9. 现代软件工程讲义4 Scrum/Sprint

    Advanced Software Engineering, Development Process, Scrum/Sprint 软件开发的流程有很多 (看 各种方法论概述), 我也写过一篇博客 (酒 ...

最新文章

  1. CSS属性:font-family
  2. Shell中常用的引号
  3. hadoop本地模式部署_hadoop启动模式、基本配置、启动方式
  4. SAP CRM Fiori 应用的 offline 离线支持开发笔记
  5. cad画1000线太长了_为什么你画CAD图没别人快?今天就教你几招!
  6. java 接口表单提交_Java http 调用接口提交表单以及文件
  7. 后端开发 java_Java后端开发三年,你不得不了解的JVM
  8. 前端开发 表格的补充 注释 标签的嵌套规则 0228
  9. require.jsAMD模块化编程
  10. Android 刘海屏来袭,全网最全适配技巧
  11. openmeetings(开源视频会议系统)的详细安装步骤 (windows版)
  12. javascript 源代码加密保护
  13. 【FPGA入门一】一个简单的LED流水灯
  14. Kali渗透-MSF木马免杀技术
  15. [css]画圆形标签
  16. Mac | M1芯片 JD-GUI 无法打开的问题处理
  17. python github 12306 文贤平_抢票工具成了GitHub热榜第一,最新支持候补抢票,Python跑起来...
  18. 电容触摸按键原理和实现
  19. UV汞灯-UVLED光源能量计、强度计通用品牌-WKM-UV1
  20. 百度地图的驾车路线规划

热门文章

  1. laravel的重定向
  2. Nginx+Fastdfs
  3. Android 3D emulation 架构理解
  4. CRITICAL_SECTION 学习
  5. 买家和卖家也可以这样对话
  6. 我的作品-图书馆信息管理系统
  7. Web 服务策略断言语言 (WS-PolicyAssertions)
  8. 数据结构——图的C语言实现
  9. python之模块导入
  10. 配置信息的优化,类型转换器