欢迎大家选修北京大学开设的软件工程MOOC课程。
随着信息技术的发展,软件已经深入到人类社会生产和生活的各个方面。软件工程是将工程化的方法运用到软件的开发、运行和维护之中,以达到提高软件质量,降低开发成本的目的。软件工程已经成为当今最活跃、最热门的学科之一。
本次软件工程MOOC课程是一门导论性课程,我们将全面介绍软件工程所涉及的各方面知识,包括软件过程、软件需求、结构化分析和设计方法、面向对象分析和设计方法、敏捷开发方法、软件测试、软件项目管理、软件开发工具和环境。通过课程讲授,让大家初步了解软件开发和维护的方法学,为进一步深入学习各专题打下基础。
课程还包含了实践环节,通过一个小型软件项目,大家可以体验软件开发的各个环节,并形成项目管理的意识。
该课程适合计算机专业和软件工程专业的本科生,以及从事软件开发和项目管理工作的人员。该课程帮助大家从整体上了解软件工程知识体系,熟悉一个软件项目开发的全过程。本课程并不强调编程,不需要特别的程序设计经验。
熟悉一门高级程序设计语言。
为积极响应国家低碳环保政策, 2021年秋季学期开始,中国大学MOOC平台将取消纸质版的认证证书,仅提供电子版的认证证书服务,证书申请方式和流程不变。
电子版认证证书支持查询验证,可通过扫描证书上的二维码进行有效性查询,或者访问 https://www.icourse163.org/verify,通过证书编号进行查询。学生可在“个人中心-证书-查看证书”页面自行下载、打印电子版认证证书。
完成课程教学内容学习和考核,成绩达到课程考核标准的学生(每门课程的考核标准不同,详见课程内的评分标准),具备申请认证证书资格,可在证书申请开放期间(以申请页面显示的时间为准),完成在线付费申请。
认证证书申请注意事项:
1. 根据国家相关法律法规要求,认证证书申请时要求进行实名认证,请保证所提交的实名认证信息真实完整有效。
2. 完成实名认证并支付后,系统将自动生成并发送电子版认证证书。电子版认证证书生成后不支持退费。
•主教材
l 孙艳春, 黄罡, 邓水光 . 软件工程:经典、现代和前沿. 北京大学出版社,2024.2,ISBN 978-7-301-34801-7.
本课程的主教材《软件工程:经典、现代和前沿》是由北京大学出版社于2024年最新出版的教育部计算机领域本科教育教学改革试点工作计划“101计划”软件工程课程主教材。
本书的作者长期从事软件工程教学和科研工作,希望通过本书的编写,帮助读者系统而完整地梳理了软件工程的经典、现代和前沿理论、方法和技术,通过案例分析让读者了解其运用,并以浅显易懂的方式讲授业界广泛使用的方法和技术如敏捷开发方法、群智化开发方法-开源和众包、DevOps方法等,让读者理解和掌握现代业界使用的方法和技术。而且,作者结合北京大学和浙江大学在软件工程前沿的研究成果,首次在国内外软件工程教材中,系统化地介绍了人工智能(AI)、区块链(Blockchain)、云计算(Cloud Computing)、大数据(Big Data)、物联网(IoT)等新型技术驱动的前沿软件工程理论和方法,以此拓展读者的软件工程视野。
本书系统地介绍了软件工程经典、现代和前沿的理论、方法和技术,以“101计划”软件工程课程的建设目标为导向,全面覆盖了“101计划” 中的《软件工程》课程知识体系,同时结合了国际最权威的软件工程知识体系—IEEE SWEBOK(Software Engineering Body of Knowledge),并且增加了前沿软件工程的理论、方法和技术。通过大量案例深入浅出地讲授软件工程理论、方法和技术,既体现了知识的系统性,也体现了知识的先进性和实践性。本着基础理论和工程实践并重的宗旨,本书不仅要使学生们掌握软件工程理论、方法和技术,而且要能够对现实世界中的复杂问题进行系统分析和设计,并能选用相应的开发平台和框架进行软件系统的开发、维护和管理,培养学生的工程实践能力和软件项目管理的能力。本书通过案例分析、实践设计和前沿软件工程的讲授将极大地提升学生们的软件开发综合实践能力和创新能力。
本书内容包括经典软件工程、现代软件工程,以及前沿软件工程三大模块:
(1)经典软件工程包括第1章软件工程概述、第2章软件过程、第3章软件需求工程、第4章结构化开发方法、第5章面向对象开发方法、第6章编码实现、第7章软件测试、第8章软件集成、交付与部署、第9章软件开发工具和环境、第10章软件维护和演化、第11章软件项目管理等,共11章;
(2)现代软件工程包括第12章敏捷开发方法、第13章群体化开发方法-开源和众包、第14章DevOps方法等,共3章;
(3)前沿软件工程包括第15章面向智能化应用的软件工程、第16章区块链驱动的软件工程、第17章云计算驱动的软件工程、第18章大数据时代的软件工程、第19章面向物联网的软件工程等,共5章。
本书不仅满足高校计算机专业和信息大类专业的软件工程课程的本科教学需求,同时也满足双一流高校拔尖软件工程人才培养的需求。本书同时可以作为软件工程从业者的参考用书。
•主要参考书
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.
l 张效祥主编,计算机科学技术百科全书(第二版),北京:清华大学出版社,2005.11 l 郑人杰、马素霞、殷人昆等,软件工程概论,北京:机械工业出版社,2009.11.
l 朱少民等,软件测试实验教程.北京:清华大学出版社,2019.6
Q: 如何获取到课程的PPT?
A:在左侧“课件”栏目中有所有ppt可供下载。
Q:本课程的单元quiz与课程实践的发布时间与截止时间具体都是什么时候?
A:单元quiz与课程实践均在开课时间(即2024年9月9日早10:00)同时发布,所有的单元quiz在课程结课时截止(即2024年12月31日晚23:30);而由于课程实践有互评环节,因此所有课程实践都会比单元quiz早10天截止(即2024年12月21日晚23:30),接下来的10天(从2024年12月22日早6:00到2024年12月31日晚23:30)为学生互评时间。
Q : 单元测试规定时间内没有做,还能拿到证书吗?
A : 只要最后的分数满足要求,就可以拿到证书。
Q:开课途中才进行了选课,还能正常完成学习吗?
A:所有课程内容的有效期都一直持续到学期结束,即使中途加入课程也可以正常完成学习。
Q : 证书的获取分数是多少?
A : 得分在60和80(不含80)之间可获得合格证书,得分在80(含)以上可获得优秀证书,证书需付费申请。
提示:为了对学习者的在线学习过程更加严谨负责,保证平台证书权威性,从2019年9月份开始,中国大学MOOC将不再发放免费证书,原有认证证书的申请方式和流程不变。
Q :软件工程包含工程学的部分。减小成本,控制开发周期等与系统工程所谓的寻找最优解有何区别?
A: 软件工程的目的是以工程的原理、原则和方法进行软件开发,以解决软件危机。所以软件工程的总目标不是寻求最优解。而系统工程的目标是寻求最优解。但软件开发中的软件需求分析、软件体系结构设计、软件的集成测试和软件的系统测试等活动,已经可以看作软件系统工程的工程活动。
Q : 现如今软件都主要应用哪些方面?
A : 方方面面,有计算机的地方就有软件的存在,因此现在的软件被应用在几乎任何领域之中。粗略按作用来分的话,软件可以包括为计算机使用提供基本功能的系统软件和为某一具体领域提供服务的应用软件。
Q : 测试的意义?
A : 测试是保证软件质量的重要一环,尤其在现在流行的敏捷开发中,在快速的迭代中主要依赖测试用例和自动化测试工具来保证程序的正确运行。
Q : 画数据流图好用的软件?
A : 可以尝试Office Visio。
Q : 软件工程是系统化的、严格约束的、可量化的方法应用于软件的开发,那未来的软件会不会像现在的工业产品一样,软件逐渐有自己的世界通用的框架,有模块化的功能,人们只需要根据自己的需求选择就能创造出一个应用。那如果未来会是可以自由选择创造应用的话,我们所处的时代是不是不断形成规范与标准的时代,而定制化的的应用会不断地被淘汰?做产品设计的话需不需多考虑低耦合的功能?
A : 你的问题很好。
希望软件工程未来能真正发展到像目前制造业那样流水线生产组装制造软件的模式,但即使到这一步,由于用户需求的千差万别,定制化应用也是需要的。我个人认为,定制化应用开发中,会复用一些满足部分需求的软件构件,同时还要开发一些新需求的软件构件,然后组装集成为最终的定制化应用。
做产品设计需要考虑低耦合的功能,只有这样,产品本身以及构成产品的软件构件才能有更长的生命周期。
Q:错误处理为何不是设计约束呢?
A:错误处理应该属于功能描述的范畴。对要执行的功能给出一个陈述外,还应规约如下相关内容:
(1)关于该功能输入的所有假定,或为了验证该功能输入,有关检测的假定。
(2)功能内的任一次序,这一次序是与外部有关的。
(3)对异常条件的响应,包括所有内外部所产生的错误。
(4)需求的时序或优先程度。
(5)功能之间的互斥规则。
(6)系统内部状态的假定。
(7)为了该功能的执行,所需要的输入和输出次序。
(8)用于转换或内部计算所需要的公式。
上述第三条就是说明错误处理属于功能描述范畴。设计约束规约限制系统或系统构件的设计方案,所以不涉及错误处理。