作为软件产业的支撑学科,软件工程研究如何帮助人们在软件开发过程中提升效率和质量,具有过程性、抽象性、综合性、复杂性等特征,学生难理解、难运用、难发挥,如何将各种经典和新兴软件工程真实案例穿插入教学内容,并支持对不同类型软件开发工具和开发案例的在线体验与实操,成为软件工程在线课程长期面临的挑战性课题。
针对上述挑战,北京大学软件与微电子学院基于头歌打造了全新软件工程线上课程《软件工程理论与实践 —— 思政与实战相结合的能力训练》,提供了100多个配套实战案例,面向全国高校软件工程系列课程教师和同学开放!
学习和实战:/paths/2832
一、课程目标
经过多年的建设和实践,《软件工程理论与实践 —— 思政与实战相结合的能力训练》课程取得了良好效果。本课程也是北京大学软件工程数十年科教成果融会贯通的完美诠释。本课程的教学目标是培养具有一定的软件开发能力与软件项目管理能力,并且能参加大型软件开发项目的人才。同时,提升学生的战略思维、历史思维、辩证思维、创新思维、系统思维,为成长为高素质、高层次、实用型、复合交叉型、国际化的工程技术创新与管理人才打下坚实的基础。
二、课程特色
本课程面向新工科需求,基于成果导向教育(Outcomes-based Education,OBE)思想,以学生成长为导向,坚持立德树人,融价值塑造、知识传授、能力培养为一体,坚持人才培养与产业建设互联互动,重视营造良好的人才成长生态环境,调动主动性,激发创新潜能,尊重学生个性化成长,坚持育人者先育己、教学相长。
一、在知识体系构建方面,聚焦学生能力培养,打通软件工程的思想、方法、技术和实践脉络,融会贯通北京大学软件工程数十年科教成果,展现中国软件工程学科前沿,全面提升学生的专业认知深度和广度。
二、在工程案例体验方面,在线构建多样化软件开发案例,突破了需求分析、概要设计、详细设计、系统实现、软件测试、智能化开发、互联网开发等系列软件工程真实场景的在线体验和实操挑战,可快速提升学生工程认知水平,形成良性认知循环。
三、在智能教学辅助方面,全流程在线教学工具和工程实践平台的无缝对接、便捷服务,实现了任务驱动、闯关演练、循序渐进、即学即练、即练即评、快速反馈的教学闭环,有助于学生自主思考、自主探索、自我测评,提升主动学习和实践的快乐体验。
四、在课程思政融通方面,将思政体系、软工技术和实战案例全面融合,集价值观塑造、方法论熏陶、知识点传授、工程化训练为一体,培养思想道德正、政治站位高的高素质软件人才。
三、课程内容
本课程打通软件工程的思想、理论、方法、技术脉络,具有全流程在线教学和实验平台的无缝对接、便捷服务的特点。从软件工程概述和可行性研究,到结构化分析和设计,都挑选出极具有代表性的题目供学习者体验;从面向对象分析和设计到软件的测试与管理,也有相应的实践题目让学习者深层次体验。基于此,《软件工程理论与实践 —— 思政与实战相结合的能力训练》课程,结合经典教学案例建立了以下章节的课程和配套实验。
课程内容章节和知识体系
第一章软件工程初体验
第一节:软件危机来了
第二节:这个软件项目可行吗?
第三节:描述软件需求
第四节:紧耦合&高内聚
第五节:学画用例图
第六节:设计友好的人机交互
第七节:高质量的代码
第八节:找出代码中的bug
第九节:制定进度计划
第二章软件工程概述
第一节:软件危机
第二节:软件工程
第三节:软件过程模型
第三章 可行性分析
第一节:项目立项和可行性分析基本概念
第二节:对现有的系统进行分析
第三节:技术可行性分析和经济可行性分析
第四节:社会因素可行性分析以及风险分析
第四章 结构化分析
第一节:需求分析的基本概念
第二节:结构化分析的基本概念
第三节:结构化分析方法-数据流图
第四节:结构化分析方法-实体-联系图
第五节:结构化分析方法-状态转换图
第六节:结构化分析工具
第五章 结构化设计
第一节:模块及模块化设计思想
第二节:面向数据流的设计方法-1
第三节:面向数据流的设计方法-2
第四节:软件详细设计-1
第五节:软件详细设计-2
第六节:软件设计规约及评审
第六章 面向对象分析
第一节:面向对象分析的基本概念
第二节:面向对象分析之用例图
第三节:面向对象分析之类图
第四节:面向对象分析之顺序图
第五节:面向对象分析之活动图
第七章 面向对象设计
第一节:面向对象设计的基本概念
第二节:问题域分析基本概念
第三节:问题域分析部分设计实例
第四节:人机交互部分设计实例
第五节:控制驱动部分设计实例
第六节:数据管理部分设计实例
第八章 系统实现
第一节:编程语言
第二节:编程风格
第九章 软件测试
第一节:软件测试基础
第二节:黑盒测试
第三节:白盒测试
第四节:单元测试
第五节:集成测试和确认测试
第十章 系统运维
第一节:软件维护的基本概念-1
第二节:软件维护的基本概念-2
第三节:一起动手维护代码
第四节:Hexo博客系统部署
第十一章 软件项目管理
第一节:软件项目管理基础及软件项目规划
第二节:WBS工作分解及项目范围控制
第三节:项目进度控制及计划评审技术
第四节:软件项目成本管理
第五节:软件项目质量管理
第十二章 软件工程前沿技术
第一节:软件自动生成补丁
第二节:aiXcoder工具体验
第三节:SnowGraph工具体验
以上是《软件工程理论与实践 —— 思政与实战相结合的能力训练》课程的所有章节,每一章节都与经典教学案例紧密结合,下面将从结构化设计、UML自动化评测、系统运维、软件测试等方面重点介绍与展示本课程的核心知识点。
特色解读之一:结构化设计
结构化设计章节的目标是使学生了解模块化思想,掌握结构化设计的主要方法,理解软件设计规约及评审的概念。本章通过对网上商城系统案例的分析,使学生了解模块及模块化思想;通过对系统不同子模块的分析,让学生掌握面向数据流的设计方法以及数据流图映射到结构图的步骤,掌握软件详细设计时用到的各类工具;通过对软件设计规约及评审的讲解,让学生理解软件设计评审的概念、评审目标、评审原则,能够制作软件设计说明书。本章选取了经典的网上商城系统案例作为辅助教学,对案例进行了模块的分解,将网上商城系统拆分成了“订单系统”、“管理系统”、“购物系统”等不同子模块。本章第一小节从背景到功能需求对案例进行了详细的介绍,通过选择题的方式考察并加深学生对模块化的理解,如下图所示,通过举例的方式帮助学生理解不同的耦合及内聚。
第二、三小节让学生依次完成不同子模块的数据流图,左侧为相知识及闯关要求,右侧为学生作答界面。学生将按照指导步骤完成从数据流图到模块结构图的转换,以此来培养学生系统思维、战略思维以及结构化、模块化的思想。
第四、五小节对案例中的子模块进行详细分析,依次考察学生判定树、判定表、PAD图、N-S图以及程序流程图的概念及绘制,以此来培养学生的逻辑思维以及严谨、认真的工作态度。
第六小节对软件设计规约及评审中的概念及知识点进行讲解,考察学生对评审目标、评审原则以及软件设计说明书等知识点的掌握程度。
特色解读之二:UML自动化评测
UML自动化评测在本门课的多个章节均有所体现,无论是结构化设计章节,还是面向对象的分析与设计章节,都不可避免地使用到UML自动化评测机制。学生在平台中依据教学案例讲解画出符合业务的各类UML图,我们的自动化评测策略是解析UML图中的各个结点元素,通过比对UML图中核心元素的方式来进行打分,相比于像素对比方式,准确率大大提升,能够毫不遗漏的检测出学生所画UML图的完整性,评测方式不断趋向合理化。面向对象分析的目标是使学生理解面向对象分析的基本思想,掌握面向对象分析的主要方法,能够依照教学案例完成需求分析过程。本章通过对酒店管理系统案例的分析,使学生了解面向对象思想;通过对系统用例的分析,让学生掌握面向对象分析过程以及画出用例图;通过对系统案例对象和类的分析,让学生从问题域中发现对象,能够对类的抽象层次进行建模,画出类图;通过了解顺序图、活动图的主要概念及表示法,让学生能够根据教学案例,分析需求,画出相关顺序图和活动图。本章在具体的案例分析中培养学生业务系统的抽象能力、建模能力,进而提升统领全局的战略思维、系统思维。
面向对象分析章节内容
UML之用例图构建
UML自动化评测
特色解读之三:代码风格
关于代码风格的考查在系统实现章节。主要分为编程语言、编程风格两小节,教学目标为引导学生选择正确的编程语言、写出整洁、规范的代码,围绕命名、注释、布局、数据说明、语句构造等环节进行教学与关卡设计。
在每一个实训任务关卡中,依托头歌教学平台的技术环境支持,内置python脚本评测,对学生所提交的代码段进行自动检测、给予实时反馈。学生自主阅读课程提供的知识点、任务描述和闯关要求后,在右侧区域输入代码,点击评测按钮即可获得实时反馈。
在“代码的布局”关卡中,将竖直间隔、竖直顺序、空格和缩进等编码规范作为知识点呈现给学生,同时以一段类定义代码的实践环节融合并检验上述知识点,加深学生对知识的掌握,提升法治思维、底线思维。
特色解读之四:系统运维
软件维护是软件生命周期的最后一个阶段。它的任务是维护软件的正常运行,不断改进软件的性能和质量,为软件的进一步推广应用和更新换代做出积极的工作。在本章中,我们引导学生在Ubuntu系统上实际部署一个实际可用的博客系统,并跟着操作指南一步步配置,发现该系统存在的BUG,并进行维护,这在软件工程被称为改正性维护,通过具体案例,帮助学生逐步熟悉软件维护相关基本知识和具体工作步骤,具有能够在实际系统上部署软件并进行运维的能力。
总体界面图(左边学习材料,右边实际操作)
经典教学案例:Hexo博客系统的部署
本案例要求学生掌握Linux命令行操作,了解Node.js和npm工具。通过边看操作手册边实践的方式,帮助同学熟悉Ubuntu系统下的相关知识。如图所示,通俗易懂的讲解材料,学生可以自主阅读学习,在配套的Ubuntu系统中进行常用Linux命令行实践。
讲解材料
配套系统中实操图
经过本小节的学习,学生最终能够在Ubuntu系统中部署一个真实可用的博客系统,最终部署效果如下图所示:
在配套系统中访问已部署的博客
Ubuntu系统中的VIM编辑图
特色解读之五:项目管理
软件项目管理是指在软件项目活动中运用专门的知识、技能、工具和方法,使软件项目能够在有限资源限定条件下,实现或超过设定的需求和期望的过程。软件项目管理这一章节教学依托于重庆高校教学管理信息网建设这一案例展开,从知识目标、能力目标、素养目标多个方面展开教学。软件项目管理章节的教学内容主要包括软件项目规划、软件项目范围管理、软件项目进度管理、软件项目成本管理和软件项目质量管理等五个方面。通过基础知识的讲解和练习,提升学生学习兴趣,帮助学生掌握软件项目管理基础知识,培养学生统筹全局、运筹帷幄的管理能力。软件项目管理基础及软件项目规划章节旨在帮助学生了解项目和项目管理的基本知识,了解项目规划的目的和基本任务,掌握项目规划要点,学习相关的方法,工具和技术,能够根据项目案例设计项目规划。同时,通过项目规划的教学内容使学生明白“凡事预则立,不预则废”的道理。章节内容包含知识点讲解及案例资料,帮助学生学习相关知识的同时,结合右侧题目加深对案例的理解以及相关知识在案例当中的实际应用。
软件项目范围管理章节旨在帮助学生了解软件项目范围管理的基础知识,要求学生能够掌握WBS工作分解的基本原则、方法、标准。同时,通过WBS的教学目标,培养学生化繁为简、厘清思路的能力,学会从微观与宏观两个角度充分理解项目的思想。
项目进度管理章节旨在帮助学生掌握软件项目进度管理的基础知识,学习计划评审技术的基本概念与计算方法,掌握关键路径法的基本概念,了解两种常用的构造图,理解跟踪项目进展的方法。
本节通过实际案例的讲解,并给出详细计算步骤,帮助学生掌握关键路径法及三点估计法等进度控制方法,并通过右侧题目,结合案例进行练习和实践。
软件项目成本管理和质量管理旨在帮助学生了解软件项目成本管理的基础知识,了解项目成本的构成,理解成本估计和计划的方法,理解软件过程的度量及项目成本管控以及帮助学生掌握如何更好地定义软件的质量,了解如何使用能够增进质量的规程来开发系统。同时,通过质量保障的教学内容,促进学生对软件质量的重视,树立高质量发展的意识。
特色解读之六:软件测试
软件测试是指在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
软件测试这一章的目标是使学生理解软件测试的目标、准则、方法和步骤,掌握黑盒测试中的等价类划分法和边界值分析法,掌握白盒测试中常用的几种逻辑覆盖,掌握单元测试中的Junit单元测试和改进的Junit参数化测试。这一章通过对软件测试具体案例的分析,使学生能将所学理论知识应用于实践,加强学生对软件测试中实际问题的分析能力和解决能力。
四、作者介绍
本课程为北京大学朱郑州副教授、谢冰教授、王立福教授、李戈副教授、邹艳珍副教授、熊英飞研究员,以及一批优秀的研究生团队联合创作和研发。期间头歌平台与团队给以全方位的技术与资源支持。
课程教学团队先后获电子工业部科进步特等奖、教育部高等学校科学研究优秀成果奖科技进步一等奖、CCF科学技术奖技术发明一等奖、国家科学技术进步二等奖、北京市科学技术奖技术发明类二等奖、教育部科技进步一等奖、国家技术发明二等奖、北京大学科技进步一等奖、全国高校混合式教学设计创新大赛特等奖、CCF软件工程实践教学案例比赛二等奖、北京大学创新教与学应用大赛微课组二等奖。选课学生参加全国高等院校项目管理大赛、下一代互联网技术创新大赛、全国高校数据驱动创新研究大赛、北京大学挑战杯大赛,屡获大奖。
1.朱郑州
北京大学软件与微电子学院副教授,CCF高级会员,工信部ITSS应用示范区评估专家组组长,中国项目管理学会青年委员会秘书长,主持和参与了十多项国家自然科学基金、国家重点研发计划、国家重大科技攻关、高等学校博士学科点专项科研基金、863、核高基等项目。长期从事软件工程和软件项目管理领域的教学研究工作,曾荣获第二届全国高校混合式教学设计创新大赛特等奖、CCF软件工程实践教学案例比赛二等奖、北京大学第九届创新教与学应用大赛微课组二等奖。选课学生还曾在全国高等院校项目管理大赛、下一代互联网技术创新大赛、全国高校数据驱动创新研究大赛、北京大学“挑战杯”大赛屡获大奖。
2.谢冰
1970年生于湖南省,现任北京大学信息科学技术学院副院长,软件研究所所长,教授,国家杰出青年基金获得者,入选教育部新世纪优秀人才计划、北京市科技新星计划,获“中创软件人才奖”。
1998年毕业于国防科技大学计算机学院,获博士学位。主要研究领域包括软件工程、计算机理论科学和分布式系统等。作为课题负责人,先后承担了国家863计划、科技支撑计划、国家重点专项、北京市科委重点课题、国家自然科学基金委杰出青年基金等重点项目9项,参与973、863计划、基金重点等课题5项。在软件工程技术研发和国产软件工具研发与产业化方面做出了重要的贡献,主要成果在软件行业、信息服务业、国防军工领域、集成电路设计领域中广泛应用。在FSE、POPL、ASE等软件工程与程序语言领域顶级会议、主流会议和期刊上发表论文80余篇。学术兼职包括:中国软件行业协会理事、中国计算机学会高级会员,电子学报英文版编委。曾获国家科技进步二等奖(排名第3,“基于Internet、以构件库为核心的软件开发平台”)、北京市科学技术奖技术发明类二等奖(排名第1,“青鸟软件质量保证支撑工具体系”)、教育部高等学校科学技术进步一等奖(排名第1,“可信软件资源生产与共享环境Trustie-TSE”),国家技术发明二等奖(排名第2,“基于网络的软件开发群体化方法及核心技术”)。
3.王立福
北京大学软件工程国家工程研究中心副主任、信息科学技术学院计算机系教授、博士生导师,公安部信息安全标准委员会成员。曾参加国家重点科技攻关课题:“软件工程环境标准化与实用化”,“软件工程环境工业化生产技术与系统的研究开发”。发表学术论文30余篇,编著教材一本。曾获国家科技攻关先进个人、国家科技进步二等奖、电子工业部科进步特等奖、北京大学科技进步一等奖等奖项。
4.李戈
北京大学信息科学技术学院计算机科学技术系副教授,主要研究领域:程序分析与生成,深度学习与知识工程。毕业于北京大学计算机系,曾赴斯坦福大学计算机系人工智能实验室从事深度学习方面的合作研究,任职访问副教授,CCF软件工程专委会秘书长。所在研究团队聚焦于基于机器学习概率模型的程序语言处理、程序分析与生成等,在程序代码理解、代码自动生成、代码特征检测等方面一直保持着国际上领先的研究成果,在NIPS/AAAI/IJCAI/ACL/ICSE/ASE/ICPC/TOSEM/EMSE等发表论文70余篇,曾获教育部高等学校科学研究优秀成果奖科技进步一等奖,CCF科学技术奖技术发明一等奖。科研转化成果aiXcoder正在为多家头部企业的开发者提供服务。
5.邹艳珍
主要研究领域为软件工程、软件复用、知识图谱等,2002年于吉林大学计算机系获硕士学位,同年7月开始在北京大学任教。在北京大学计算机软件与理论专业获博士学位。目前已在国内外期刊、国际会议上发表学术论文50余篇,主持和参与国家自然科学基金、国家重点研发计划、863计划等10余项国家级项目。研发成果“软件资源库管理系统JBCLMS”、“软件项目知识图谱自动构造及智能问答SnowGraph”已在多家大型软件企业得到应用。参与完成的“基于Internet、以构件库为核心的软件开发平台”获得度国家科学技术进步二等奖;参与完成的“可信的软件资源生产与共享环境(Trustie-TSE)”获得教育部科技进步一等奖。
6.熊英飞
北京大学软件研究所研究员。熊英飞于从日本东京大学获得博士学位,-在加拿大滑铁卢大学工作,加入北京大学,现任新体制长聘副教授。熊英飞的研究兴趣是程序设计语言和软件工程,特别是程序分析、综合和修复。他提出了理论和方法降低程序编写和缺陷修复的代价。比如,基于差别的双向变换框架是最广泛使用的双向变换框架之一,ACS将程序修复技术在公共数据集上的正确率从此前不到40%提升到70%以上。他的工作也被工业界采用,比如新一代Linux内核配置项目、燕云DaaS系统、华为公司等。他是SATE18的程序委员会联合主席,也在ICSE、FSE、ASE、ISSTA等会议担任PC。