软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程 (不信就请看 微博上的软工)。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。 经过几年的探索, 我总结了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划。这几年教书的过程中, 我学习了一些 好老师的建议, 还有些教课的心得, 也对中国大学的 IT 教育有些反馈。近两年高等教育有不少创新的尝试, 希望这个软件工程课也能实践一些创新的点子。
迄今有四十多所学校采用了 《构建之法》的理念和教程来教编程/软工课程。 它们大多采用了网上课堂 + 网上助教的形式,可以前往围观, 这是一个老师写的开课步骤 。教育界说了多年的网上教学,被2020年的疫情逼着成为现实,可以看看老师的总结。在这几年的教学和社区建设活动中,我得到了很多人的帮助,在此表示感谢。
最新版信息:
《构建之法 - 现代软件工程》第三版(第三版的豆瓣讨论,第二版,多看 电子版, 对我的采访,微博)课件(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 部分北航学生的感想:
所有讲义, 作业都可以分享给教师用于教学, 只要注明引用来源即可, 不必事先取得同意。
欢迎反馈和意见。