欢迎大家选修北京大学开设的软件工程MOOC课程。 随着信息技术的发展,软件已经深入到人类社会生产和生活的各个方面。软件工程是将工程化的方法运用到软件的开发、运行和维护之中,以达到提高软件质量,降低开发成本的目的。软件工程已经成为当今最活跃、最热门的学科之一。 本次软件工程MOOC课程是一门导论性课程,我们将全面介绍软件工程所涉及的各方面知识,包括软件过程、软件需求、结构化分析和设计方法、面向对象分析和设计方法、敏捷开发方法、软件测试、软件项目管理、软件开发工具和环境。通过课程讲授,让大家初步了解软件开发和维护的方法学,为进一步深入学习各专题打下基础。 课程还包含了实践环节,通过一个小型软件项目,大家可以体验软件开发的各个环节,并形成项目管理的意识。
该课程适合计算机专业和软件工程专业的本科生,以及从事软件开发和项目管理工作的人员。该课程帮助大家从整体上了解软件工程知识体系,熟悉一个软件项目开发的全过程。本课程并不强调编程,不需要特别的程序设计经验。
第一周:软件工程概论
软件的定义及特点
软件工程的起源和概念
软件开发的本质和基本手段
软件工程框架
软件的定义及特点
软件工程的起源和概念
软件开发的本质和基本手段
软件工程框架
补充材料-软件工程新视野
第一周:软件过程
软件生存周期过程的概念
软件生存周期过程的分类
软件生存周期模型的概念
常见的软件生存周期模型
软件生存周期过程的概念
软件生存周期过程的分类
软件生存周期模型的概念
常见的软件生存周期模型
第一周:课程介绍
课程宣传片
课程简介
第二周:软件需求
需求的作用
需求的定义
需求的分类
需求发现
需求规约的概念和格式
需求规约的作用
项目的需求及需求规约
需求的作用
需求的定义
需求的分类
需求发现
需求规约的概念和格式
需求规约的作用
第三周:结构化设计方法-1
结构化设计概念
初始模块结构图的设计
初始模块结构图精化的原则
【补充】总体设计案例
结构化设计概念
初始模块结构图的设计
初始模块结构图精化的原则
第三周:结构化分析方法
结构化分析方法的概念
结构化分析模型
结构化分析过程
需求规格说明书
【补充】结构化分析案例
【补充】需求验证
结构化分析方法的概念
结构化分析模型
结构化分析过程
需求规格说明书
第四周:结构化设计方法-2
初始模块结构图精化的启发式规则
接口设计
数据设计
初始模块结构图精化的启发式规则
接口设计
数据设计
第四周:结构化设计方法-3
详细设计工具
软件设计规约
结构化方法总结
【补充】软件设计评审
详细设计工具
软件设计规约
结构化方法总结
第一次课程实践
第五周:UML-1
面向对象的概念
UML的概念
表达客观事物的术语——类
面向对象的概念
UML的概念
表达客观事物的术语——类
第五周:UML-2
表达客观事物的术语——接口及其他
控制复杂性的术语——包
表达关系的术语——关联
表达关系的术语——泛化、细化、依赖及如何使用
表达客观事物的术语——接口及其他
控制复杂性的术语——包
表达关系的术语——关联
表达关系的术语——泛化、细化、依赖及如何使用
第六周:UML-3
UML的模型表达工具_概述
UML的模型表达工具_静态建模——类图
UML模型表达工具_动态建模——用况图
UML的模型表达工具_概述
UML的模型表达工具_静态建模——类图
UML模型表达工具_动态建模——用况图
第六周:UML-4
顺序图
状态图
UML总结
顺序图
状态图
UML总结
第七周:面向对象分析
面向对象分析概述
识别类
识别属性和操作
识别对象之间的关系
面向对象分析概述
识别类
识别属性和操作
识别对象之间的关系
【补充】面向对象分析案例
第七周:面向对象设计-1
面向对象设计概述
问题域部分的概念
如何进行问题域部分的设计
面向对象设计概述
问题域部分的概念
如何进行问题域部分的设计
第二次课程实践
第八周:面向对象设计-2
人机交互部分的设计
控制驱动和数据管理部分的设计
人机交互部分的设计
控制驱动和数据管理部分的设计
第八周:面向对象编程
程序设计范型和面向对象编程语言的特点发展
如何选择编程语言
程序设计范型和面向对象编程语言的特点发展
如何选择编程语言
第八周:敏捷开发方法
敏捷开发概述
极限编程
敏捷设计
Scrum模型
敏捷开发概述
极限编程
敏捷设计
Scrum模型
第九周:软件测试-1
软件测试的概念
软件测试过程模型和原则
白盒测试技术
软件测试的概念
软件测试过程模型和原则
白盒测试技术
第九周:软件测试-2
黑盒测试技术
软件测试的步骤
黑盒测试技术
软件测试的步骤
第十周:项目管理
项目管理的概念
项目管理框架和要素
软件项目管理的概念
项目管理的概念
项目管理框架和要素
软件项目管理的概念
第十周:CMM
CMM概念及发展
CMM的基本内容
CMM五级标准
ISO9000标准
CMM概念及发展
CMM的基本内容
CMM五级标准
ISO9000标准
第三次课程实践
第十一周:软件开发工具与环境
补充材料-移动web软件分析与优化
软件开发工具及环境的定义
工具集成模型
常用的软件开发工具和环境
软件开发工具及环境的定义
工具集成模型
常用的软件开发工具和环境
熟悉一门高级程序设计语言。
我们鼓励同学们积极地完成课程实践的练习,加深对课程的深入理解。 (1)平时Quiz占88% (2)课程实践占12%
提示:为了对学习者的在线学习过程更加严谨负责,保证平台证书权威性,从2019年9月份开始,中国大学MOOC将不再发放免费证书,原有认证证书的申请方式和流程不变。
•主教材
l 王立福,孙艳春、刘学洋. 软件工程(第3版). 北京大学出版社, 2009年.
•主要参考书
l Roger S. Pressman著, 郑人杰等译.Software Engineering-A Practitioner’s Approach (Eighth Edition), 北京: 机械工业出版社, 2015年.
l Ian Sommerville著,程成等译, Software Engineering(9th Edition). 北京:机械工业出版社,2011年.
l 邵维忠, 杨芙清. 面向对象的分析与设计. 北京: 清华大学出版社, 2012-12-25.
l 施瓦尔贝(schwalbe, K.)著, 杨坤等译, IT项目管理, 北京: 机械工业出版社, 2011.01.
l Patton,R.著, 张小松等译, 软件测试(原书第二版), 北京: 机械工业出版社, 2006.4.
Q : 如何获取到课程的PPT?
A : 在左侧“课件”栏目中有所有ppt可供下载。
Q : 软件工程包含工程学的部分。减小成本,控制开发周期等与系统工程所谓的寻找最优解有何区别?
A : 软件工程的目的是以工程的原理、原则和方法进行软件开发,以解决软件危机。所以软件工程的总目标不是寻求最优解。而系统工程的目标是寻求最优解。但软件开发中的软件需求分析、软件体系结构设计、软件的集成测试和软件的系统测试等活动,已经可以看作软件系统工程的工程活动。
Q : 现如今软件都主要应用哪些方面?
A : 方方面面,有计算机的地方就有软件的存在,因此现在的软件被应用在几乎任何领域之中。粗略按作用来分的话,软件可以包括为计算机使用提供基本功能的系统软件和为某一具体领域提供服务的应用软件。
Q : 测试的意义?
A : 测试是保证软件质量的重要一环,尤其在现在流行的敏捷开发中,在快速的迭代中主要依赖测试用例和自动化测试工具来保证程序的正确运行。
Q : 单元测试规定时间内没有做,还能拿到证书吗?
A : 只要最后的分数满足要求,就可以拿到证书。
Q : 证书的获取分数是多少,纸质的和电子版有不同分数区别?
A : 得分在50和80(不含80)之间可获得合格证书,得分在80(含)以上可获得优秀证书,证书需付费申请。纸质与电子版的分数要求无区别。
提示:为了对学习者的在线学习过程更加严谨负责,保证平台证书权威性,从2019年9月份开始,中国大学MOOC将不再发放免费证书,原有认证证书的申请方式和流程不变。
Q : 画数据流图好用的软件?
A : 可以尝试Office Visio。
Q : 视频不够清晰?
A : 网站对视频流进行了压缩,视频中看不太清楚的地方可以查阅课件。
Q : 软件工程是系统化的、严格约束的、可量化的方法应用于软件的开发,那未来的软件会不会像现在的工业产品一样,软件逐渐有自己的世界通用的框架,有模块化的功能,人们只需要根据自己的需求选择就能创造出一个应用。那如果未来会是可以自由选择创造应用的话,我们所处的时代是不是不断形成规范与标准的时代,而定制化的的应用会不断地被淘汰?做产品设计的话需不需多考虑低耦合的功能?
A : 你的问题很好。
希望软件工程未来能真正发展到像目前制造业那样流水线生产组装制造软件的模式,但即使到这一步,由于用户需求的千差万别,定制化应用也是需要的。我个人认为,定制化应用开发中,会复用一些满足部分需求的软件构件,同时还要开发一些新需求的软件构件,然后组装集成为最终的定制化应用。
做产品设计需要考虑低耦合的功能,只有这样,产品本身以及构成产品的软件构件才能有更长的生命周期。
Q : 错误处理为何不是设计约束呢?
A: 错误处理应该属于功能描述的范畴。对要执行的功能给出一个陈述外,还应规约如下相关内容:
(1)关于该功能输入的所有假定,或为了验证该功能输入,有关检测的假定。
(2)功能内的任一次序,这一次序是与外部有关的。
(3)对异常条件的响应,包括所有内外部所产生的错误。
(4)需求的时序或优先程度。
(5)功能之间的互斥规则。
(6)系统内部状态的假定。
(7)为了该功能的执行,所需要的输入和输出次序。
(8)用于转换或内部计算所需要的公式。
上述第三条就是说明错误处理属于功能描述范畴。设计约束规约限制系统或系统构件的设计方案,所以不涉及错误处理。