分享经典现代和前沿软件工程课程
分享经典、现代和前沿软件工程课程
随着信息技术的发展,软件已经深入到人类社会生产和生活的各个方面。软件工程是将工程化的方法运用到软件的开发、运行和维护之中,以达到提高软件质量,降低开发成本的目的。软件工程已经成为当今最活跃、最热门的学科之一。
本次软件工程MOOC课程是一门导论性课程,我们将全面介绍软件工程所涉及的各方面知识,包括软件过程、软件需求、结构化分析和设计方法、面向对象分析和设计方法、敏捷开发方法、软件测试、软件项目管理、软件开发工具和环境。通过课程讲授,让大家初步了解软件开发和维护的方法学,为进一步深入学习各专题打下基础。
软件工程的目的是以工程的原理、原则和方法进行软件开发,以解决软件危机。所以软件工程的总目标不是寻求最优解。而系统工程的目标是寻求最优解。但软件开发中的软件需求分析、软件体系结构设计、软件的集成测试和软件的系统测试等活动,已经可以看作软件系统工程的工程活动。
希望软件工程未来能真正发展到像目前制造业那样流水线生产组装制造软件的模式,但即使到这一步,由于用户需求的千差万别,定制化应用也是需要的。我个人认为,定制化应用开发中,会复用一些满足部分需求的软件构件,同时还要开发一些新需求的软件构件,然后组装集成为最终的定制化应用。做产品设计需要考虑低耦合的功能,只有这样,产品本身以及构成产品的软件构件才能有更长的生命周期。
课程还包含了实践环节,通过一个小型软件项目,大家可以体验软件开发的各个环节,并形成项目管理的意识。帮助读者系统而完整地梳理了软件工程的经典、现代和前沿理论、方法和技术,通过案例分析让读者了解其运用,并以浅显易懂的方式讲授业界广泛使用的方法和技术如敏捷开发方法、群智化开发方法-开源和众包、DevOps方法等,让读者理解和掌握现代业界使用的方法和技术。而且,作者结合北京大学和浙江大学在软件工程前沿的研究成果,首次在国内外软件工程教材中,系统化地介绍了人工智能(AI)、区块链(Blockchain)、云计算(Cloud Computing)、大数据(Big Data)、物联网(IoT)等新型技术驱动的前沿软件工程理论和方法,以此拓展读者的软件工程视野。
“人月神话”的意思,是指在软件开发过程中,人们往往以“人月”作为估计工作量的单位,并认为通过增加人手就能以同等比例缩短所需的开发时间,比如说10个人预计10个月的开发工作量,100个人应该可以在一个月内完成。这种想当然的意见往往与事实天差地别,因此被称为“神话”。
“人月神话”不能成立的原因:
一是“当任务由于次序上的限制不能分解时,人手的添加对进度没有帮助”。
二是“对于可以分解,但子任务之间需要相互沟通和交流的任务,必须在计划工作中考虑沟通的工作量”。
理论上说,一对一的情况下,三个人之间的沟通量是两个人之间沟通量的3倍,四个人之间的沟通量是两个人之间沟通量的6倍,考虑到多个人或者多个团队之间开会协商、一起解决问题的需要,增加人手的作用往往要大打折扣,甚至可能起到负面的作用。
以尽量精简的团队完成任务当然是最佳选择。但小团队毕竟无法承担大型软件开发任务,因为软件开发有其时效性,再高的效率,以大型软件的工作量计,也要十数年才能完成开发——这在商业上是没有意义的。
因此,就展开了本书讨论的主题:如何管理大型软件项目开发。
主教材
孙艳春, 黄罡, 邓水光. 软件工程:经典、现代和前沿 .
北京大学出版社,2024.2, ISBN 978-7-301-34801-7.
第一周:软件工程概论
软件的定义及特点
软件工程的起源和概念
软件开发的本质和基本手段
软件工程框架
补充材料-软件工程新视野
软件的定义及特点
软件开发的本质和基本手段
软件工程框架
软件工程的起源和概念
第一周:软件过程
软件生存周期过程的概念
软件生存周期过程的分类
软件生存周期模型的概念
常见的软件生存周期模型
软件生存周期过程的概念
软件生存周期过程的分类
软件生存周期模型的概念
常见的软件生存周期模型
第一周:课程介绍
课程宣传片
课程简介
第二周:软件需求
需求的作用
需求的定义
需求的分类
需求发现
需求规约的概念和格式
需求规约的作用
项目的需求及需求规约
需求的作用
需求的定义
需求发现
需求规约的作用
需求规约的概念和格式
需求的分类
第三周:结构化分析方法
结构化分析方法的概念
结构化分析模型
结构化分析过程
需求规格说明书
【补充】结构化分析案例
【补充】需求验证
结构化分析方法的概念
结构化分析模型
结构化分析过程
需求规格说明书
第三周:结构化设计方法-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软件分析与优化
软件开发工具及环境的定义
工具集成模型
常用的软件开发工具和环境
第十二周(补充内容):软件维护与再工程
软件维护的概念
软件维护活动
程序修改
软件再工程模型
逆向工程
参见: