现代软件工程讲义 目录 《构建之法》

2022/8 更新: 最新的讨论和信息请看这里:《构建之法》课程讨论社区

软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程 (不信就请看 微博上的软工)。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。 经过几年的探索, 我总结了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划。这几年教书的过程中, 我学习了一些 好老师的建议,  还有些教课的心得, 也对中国大学的 IT 教育有些反馈。近两年高等教育有不少创新的尝试, 希望这个软件工程课也能实践一些创新的点子。 

迄今有四十多所学校采用了 《构建之法》的理念和教程来教编程/软工课程。 它们大多采用了网上课堂 + 网上助教的形式,可以前往围观, 这是一个老师写的开课步骤 。教育界说了多年的网上教学,被2020年的疫情逼着成为现实,可以看看老师的总结。在这几年的教学和社区建设活动中,我得到了很多人的帮助,在此表示感谢。

最新版信息:

《构建之法 - 现代软件工程》第三版(第三版的豆瓣讨论第二版多看 电子版, 对我的采访微博课件(PPT)

这套讲义有这样的特点:

理论和实践相结合,讲现代理论,同时讲体现理论的工具,结构紧凑,个人项目/结对项目/团队项目紧密配合, 能在14 周讲完。

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

结合实际,讲人在软件工程中的不同角色和作用,如:软件过程, 软件工具, 软件人员的技术能力和职业能力。

学生作业涵盖了阅读,分析,编程,团队合作,技能评估,作业经过了数年实战的考验,联系实际,覆盖面广。都有相当大的扩展性,能适合一般大学和世界一流学校的练习要求。 

扩展内容多:  参考书 (20 本),和众多的参考资料

吸收了众多高校师生在实际教学中的经验,每个学期的各种内容都有增量改进。

 

讲义内容:  

1. 概述

 

2. 个人开发技术

  1. PSP: Personal Software Process, 
  2. 程序效能分析   实例
  3. 单元测试    (在最小的编程单元上保证正确性)  &  回归测试   (保证程序在修改的过程中, 原有的功能保持稳定
  4. 单元测试的实践:详细的 Java 示例   C++ 示例   从命令行开始逐步培养编程能力 Java
  5. 技能的反面
  6. 练习与讨论 (个人技术) &  练习与讨论 (工程师的成长),软件工程师能力自我评定表

3. 两人合作

  1. 代码规范和代码复审
  2. 结对编程, 有记载的最早的结对编程发生在 1987年3月…
  3. 给人提意见的方式 - 送一个汉堡包
  4. 练习与讨论

 

4. 软件过程/方法论

  1. 各种方法概述 
  2. 敏捷方法:  酒后的敏捷敏捷宣言敏捷原则
  3. Scrum/Sprint,  TDD, FD 
  4. MSF-Agile
  5. 支持软件过程的工具 (TFS)  
  6. 练习与讨论: 团队与流程  &  敏捷 & MSF

5. 团队中的角色与合作

  1. 团队的类型团队合作的阶段
  2. 团队成员不同的投入和心态  - //鹦鹉  
  3. 角色 – PM   PM Spec, PM 的成长, 项目管理的细节    练习与讨论: PM
  4. 角色 – Dev   Dev 的成长  软件开发不是闭卷考试   顶级程序员的心得–Coders at Work 
  5. 角色 – QA & Test 质量保证和测试, QA 的闰年问题QA/Test 的角色和分工,练习与讨论: 测试质量保证

6. 需求

a. 项目需求分析和建议 

b. 用户调研的方法

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

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

e. 场景/典型人物,  spec

f. 练习与讨论

 

7. 设计和开发 

  1. 基本的分析和设计方法
  2. 模块API 的设计 (例子: elevator design,  mvc/mvvm,  interface)
  3. 开发阶段的日常管理
  4. 用户界面,用户体验的设计   
  5. 源代码管理 - 你的团队能做到这些么?
  6. 练习与讨论: 场景设计  &  软件设计与实现 & 用户体验 

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

a. 测试的计划和执行 

b. 关于闰年的测试

c. 从CC 到 ZBB, 到最后的软件发布

d. 练习与讨论

 

9. 软件和 IT 业的创新

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

b. 创新 - VCD 的故事

c. 创新的时机

d. 魔方的创新 

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

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

g. 练习与讨论

 

10. 软件项目的管理

  1. 绩效管理
  2. 代码量和树叶量
  3. Postmortem - 事后诸葛亮会议
  4. 软件工程师的职业道德
  5. 人的问题同学的感想
  6. 练习与讨论

 

附录, 参考书, 论文阅读

本教材的参考书和参考资料; 现代软件工程的教材和参考书(豆瓣列表); 有关创新的书(豆瓣列表)

 

 

 

作业汇总

说一千道一万,作业应该是怎么样的呢, 请看: 

-------

编程和软件工程课的作业汇总

-------

 

 

采用过这门教程的学校列表:

注:排名按照学校所在地大致由北向南排列, 一个学校采用《构建之法》 的情况有多种方式,包括:作为教材,作为参考书,使用课件或参考课件,采用 “做中学”的教学方法,采用有工程经验的助教帮助教学,等等。我们有老师和助教的微信群,欢迎加入。

 

 

学校

任课

教师

学生

级别

 

博客/Github (部分)

部分优秀学生博客

东北师范大学

杨贵福

研究生

课程名:软件项目管理  教学博客

 郑蕊 濮成林 演奏者

沈阳航空航天大学

张翼飞 大三 下 教师博客  助教博客
 薛鹏飞  Ray

北京工业大学 / 耿丹学院

冯花平

大三

老师博客 

周阳  

北京工业大学 (本部)

杨红丽

大三

助教博客  学生博客

 

清华大学 软件学院

 刘强

 大二 下

 学生博客:

http://www.cnblogs.com/juicygroup

 ZhaoYang

北京航天航空大学

计算机学院

 罗杰

大三

教师博客。 

学生博客列表:2014 个人, 2014 团队 2015 

SkyJoker 传奇 殷鹏程 zmpy VeryBigMan 黄可嵩 刘乾

团队1 团队2 助教

人民大学

刘青  

助教博客

 

北京电子科技学院

信息安全系

娄嘉鹏

大二

教师博客   学生博客

 

 lwr  刘伟康

天津大学

软件学院

章亦葵

 研一

学生博客:http://www.cnblogs.com/voidsh/p/4338183.html

http://www.cnblogs.com/hugozou/  

 

石家庄铁道大学

软件工程系

王建民

大二

教师博客:http://www.cnblogs.com/wangjm1975/

学生团队和个人博客:http://www.cnblogs.com/wangjm1975/p/4812581.html

http://www.cnblogs.com/wangjm1975/p/4812559.html 

 

齐鲁工业大学

软件工程系

 

赵培英

 大二

教师博客:http://www.cnblogs.com/qluZhao/

助教博客1:http://www.cnblogs.com/math/p/4567801.html

助教博客2:http://www.cnblogs.com/xiaozhi_5638/p/4490764.html

学生个人博客及Github列表学生团队博客列表

 

南通大学

计算机科学与技术学院

鞠小林

大三

教师博客:http://www.cnblogs.com/juking/

助教博客:宝玉 ; 学生个人博客列表

 苗中峰

安徽巢湖学院

卜华龙

大三

学生博客

 

上海海洋大学

葛艳 

大三

教师博客

 

河南职业技术学院

软件工程系

陈红根

大二上

助教博客:http://www.cnblogs.com/gmailcs/articles/4804157.html

老师博客

 

四川师范大学计算机系

 

廖雪花

研一,本科

教师博客 助教博客   

 

东华理工大学

软件工程系

李祥

研一

高级软件工程课 教师博客   学生博客

 

华中科技大学

机械学院

陈冰

大四

老师博客

 

中国地质大学(武汉)  

范萍  

老师博客

 

武汉大学

李小红  

教师博客

 

湘潭大学

宋小波  

教师博客

 

福州大学

数学与计算机科学学院

张栋

大三

教师博客 助教博客  学生博客

西瓜 少棉

福建闽江学院

测试课程

大三

教师博客  考核 助教博客

 

广州商学院

信息工程与技术学院

杜云梅

大二

教师博客 助教博客  学生个人博客列表  学生团队作业

 

微软亚洲研究院 创新人才培训班 (各个学校的优秀学生)

 

大四

团队博客代表  2015年 2014年 2012年  2011年

 

 

在正式编辑出版前,这套讲义在下面的学校正式课程中运用过:

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

 

 现代软件工程系列 学生精彩文章(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/

 

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

 

欢迎反馈和意见。

posted @ 2011-11-27 23:32  SoftwareTeacher  阅读(99174)  评论(33编辑  收藏  举报