【“研究性”示范研究生课程】面向工程能力培养的互动式教学模式——“研究性”示范研究生课程《高等软件工程》答记者问

点击数:    |    加入时间:2019-07-03

面向工程能力培养的互动式教学模式

——“研究性”示范研究生课程《高等软件工程》答记者问

记者 廉若菡

《高等软件工程》作为北航两个一流学科(计算机科学与技术、软件工程)的研究生专业基础核心课程,始终坚持以培养研究生软件工程能力为目标,不断改革创新,优化课程教学模式,构建起了“面向问题探究的互动式课堂”与“创新型课程项目实践体系”相结合的课程教学框架,使学生不仅在课堂上“听得懂”,课下实践也“做得出来”,系统性培养学生软件工程领域所强调的建模能力。此外,该课程还针对性地采用了“全过程跟踪”、“阶段性评审”、“多维度评价”等贴近实际工程的互动式教学模式。

在实际教学中,这种互动式教学模式具体如何设计与运行,如何培养学生的软件工程能力,学生又有怎样的体会与感受?带着这些问题,记者采访了课程负责人刘超、吴际,计算机学院教师张莉,课程团队的mentor以及曾选修《高等软件工程》的多名学生。

记者:能否介绍一下《高等软件工程》这门课的开设背景和定位,以及教学理念?

刘超:软件工程一直是北航的特色和强势学科,这门课程在全国较早的确定了以建模作为一个大的要点来开展教学,在全国也最早引进了UML建模语言、编写教材、研发相应的工具。经过多年建设,这门课被评为了学校的精品课、示范课程,也获得了“北京市教学成果二等奖”。

本课程的定位是让研究生了解软件工程的基本理论和核心技术,以及相关的研究发展。在此基础之上,培养研究生应用软件工程方法和技术解决实际工程问题的能力。课程的教学理念核心是如何通过互动有效培养研究生的工程能力。实际上,工程能力的内涵很丰富,涉及两个层面:工程学科的共性部分和软件工程学科的个性部分。共性部分强调如何分析问题,识别问题中的关键环节,抽取特征性、规律性的东西,从而系统性地去解决问题。个性部分则关注如何针对软件项目的具体特征开展分析、设计和验证等。

记者:怎样理解互动式教学模式?这门课程的教学模式如何体现工程能力培养?

吴际:互动式教学模式就是在授课和训练过程中,围绕问题进行互动,既让学生理解相关问题并掌握解决方法,又让老师及时了解同学们所面临的困难和共性问题,老师可据此采取办法来优化互动措施和提高工程能力培养效果。软件工程课程教学经常遇到的共性问题就是同学们“一学就会,一做就错”,其根本原因在于“一学就会”的往往是一般性工程原则和方法,但在面对具体项目时不知道如何应用所学内容来完成项目。互动是解决这个问题的一个关键手段,《高等软件工程》围绕课堂教学和项目训练设计了多方位互动措施。

工程能力首先体现在能结合项目具体特征来应用工程原则与方法,从而开展有效的分析、设计和验证等。工程能力的培养主要是做好两件事情:通过迭代方法逐步推进项目训练、多方位互动及时掌握动态。这门课程把项目训练划分为四个迭代阶段,设置了明确的时间节点,并与课程内容同步。在互动方面,课堂授课互动通过精心设计的案例和问题来引导;项目训练设计了四类互动:助教与项目团队互动提供跟随式指导,助教与老师互动及时沟通项目进展状况和存在的共性问题,在阶段评审时老师与项目团队进行互动,团队与团队互动表现在讨论区和互评。为了支持各类互动,课程组开发了相应的教学软件,保留互动过程中的数据。

记者:这门课的一个核心内容在于课程项目,无论是课程项目组织形式,还是团队完成项目的过程上都有许多值得探讨的东西,请谈一谈做课程项目的感受。

刘铠齐(计算机学院学生):在计算机学院,同学们公认这门课程任务重且难度大,是名副其实的“大课重课”。实际上一周除了正常上课,我们大概还要投入十多个小时到课程项目中。算起来,一个学期用在课程项目上的时间就像老师在课上所说的差不多200小时。通过这门课的项目训练,我熟悉了完整的软件开发过程,从领域分析,需求分析,到概要设计和详细设计,以及后续的几个阶段。我开始初步有能力去做实际工程的开发,而不是随意地写点代码。在此之前,我还真的不知道实际软件项目第一步应该要做什么。通过这门课做持续一个学期的项目,让我把整个流程串了起来,亲身经历了每个步骤,发现和解决了很多具体问题,感觉能力上有了一个很大的提升。

另外,感受比较深的还有这门课程以团队形式来完成项目训练。我觉得这其实是一个比较典型的软件开发模式,也很符合企业项目开发的实际情况。通过团队训练,大家更直观地了解到实际的软件开发中团队应该如何配合工作、会出现哪些问题、出现问题后要如何解决等。通过团队协作,更加认识到合作、沟通的重要性,同时也体会到每个人都要对自己的任务负责、对整个项目负责,所以这也是团队组织形式带给我们的积极影响。

记者:课程项目中的选题、查资料、遇到难题后的解决处理等一系列过程你们是如何进行的呢?老师和mentor提供了哪些帮助?这一过程给你带来了什么收获?

王宁(计算机学院学生):课程项目启动时,老师会提供涉及不同领域的备选题,我们根据自己的兴趣、能力和对某领域的熟悉程度选择题目,当时我们组选择了程控交换机项目。之后,我们会结合老师上课讲的内容和建议去查阅相关资料,然后开展分析和设计。我记得在两次阶段评审中,我们需求评审做的比较好;但在设计评审中,在交换链路方面出现了理解偏差,幸亏老师及时地给我们指出。这个过程中mentor也会定期和我们进行交流、帮助我们聚焦问题,通过沟通和指导帮我们解决了很多问题。

我觉得这个课程项目真正地训练了我们的软件工程建模能力。对于一个系统而言,我们之前往往只是从黑盒的角度去理解其功能。现在明白需要考虑系统结构,包括怎么定义系统边界、进行需求分析然后设计建模,需要考虑的东西变得多了,就更要求我们能够抓住核心问题,所以完成项目的过程就是能力提升的一个过程。

记者:作为mentor,你是如何开展工作的?你觉得给每个小组配备mentor这一组织机制有什么作用和效果呢?这项工作对于你自己的科研学习有什么帮助吗?

韩伦(研究生助教):我的工作主要是在整个学期内跟踪2个小组的项目进展,每周要参与他们的讨论并答疑。对于重要问题,我会将其汇总后跟老师讨论,再将指导意见反馈给同学们。在具体指导方面,我会给他们强调要把分析做细致,否则一旦出现跑偏的问题,容易导致返工。其实mentor在技术问题指导之外,还会就团队分工、任务分配等提供建议,有时甚至还帮助同学们做一些团队内的沟通和协调。

这门课的mentor和其他很多课程的助教有很大差异。每个小组都配备mentor虽然需要投入的人手和精力变多,但对于解决同学们的具体问题和提高师生间的沟通效率都有很大帮助,多方受益。同时,我当mentor时会把我曾经上这门课时所接受的指导以及所出现的问题等经验传授下去,也巩固和加强了我的软件工程专业知识,强化了我的软件工程能力,也促进了我的科研能力。

记者:软件开发建模是个抽象但内容又具体的主题,在课堂上老师一般会怎样讲授这些内容,又如何和课堂项目进行很好的匹配呢?上过这门课后,你对软件工程的认识是否有所变化呢?

王宇(仪器科学与光电工程学院学生):软件建模确实很抽象,老师在课程中使用了很多案例来进行讲解,我印象比较深的是地铁闸机系统这个案例。地铁闸机看着简单,刷卡进、刷卡出,就这两个简单操作,但老师带我们花了一整节课去分析。原来需要考虑的问题还真是很复杂,比如用户的各种非常规操作。在案例讲解过程中,老师一般都会先抛出问题让我们去考虑,然后进行总结归纳,进而再提出新的问题。不断迭代的互动带给我们的启发很多。

课件内容、案例讲解和项目也很匹配。老师讲完一段比较完整的内容之后,再给我们布置阶段任务,要求在规定时间内完成相应的工作并提交模型。整个学期有多个时间节点,基本保持和课程内容同步,我们必须主动投入,赶节点,不然整个项目就面临无法完成的风险。

我不是计算机学院的学生,课上讲授的很多内容之前也没接触过,原来对软件工程的认知就停留在写代码这个层次。但这门课让我了解到软件工程包含很多内容,从需求分析到架构、从建模到写代码和测试,通过建模训练,对领域分析、约束设计、抓住架构关键点等方面都收获了很多具体体验,从而在根本上改变了我对软件工程的认识。

记者:这门课包括了阶段评审、多方位评价、基于贡献度的评分等创新型的评价机制,你认为这些机制都有什么作用?

王宁(计算机学院学生):首先分阶段评审对确保项目的顺利进展非常重要。老师在课上多次强调“交付”的重要性,阶段交付可以让老师知道我们对知识的掌握程度,也可以暴露问题。阶段评审采用答辩形式,其实对我们来说压力挺大的。面对老师所提问题我们一开始不是很能理解,第一反应都是怎么解释或者辩论,但之后明白老师其实是采用问题引导的方法。从阶段评审得到的启发很多,不只是技术,还有如何去理解和沟通别人对你的工作所提的问题。

多方位评价指助教和老师对各个团队的评价,也包括小组之间的互评。互评采用“盲审”,要求评价必须真实客观。通过互评可以发现自己项目存在的很多问题,这个过程让我们不仅学会如何对别人的工作进行评价,也学会如何虚心接受别人所提的问题。这个过程培养了我们的批判分析能力和对他人项目负责任的态度。其实出现过有同学在互评时不认真的现象,老师发现后专门就这个问题进行了讨论。我记得当时老师说,如果在课程学习上都不能把握住基本的评价尺度,那将来进入工作岗位怎么能客观公正地去评价别人的工作呢?又怎么相信别人会客观公正地评价自己呢?

基于贡献度的成绩评定其实对保持我们的积极性,学会合理分工和主动完成好自己的任务有很大帮助,组内同学基本都能做到积极主动和负责任地去完成各自的任务。

记者:成绩评价是一门课的重要问题,也是同学们最关心的一个问题。在设计这门课程的成绩评价方式时主要考虑了哪些因素?

吴际:确实,同学们都非常关心自己的成绩。一个合理的成绩评价方法一是能够区分出同学们对于课程所强调知识的掌握程度;二是能够追踪到同学们在课程学习过程中的活动;三是能够反映同学对团队最终结果的贡献情况。

在具体设计这门课程的成绩评价方法时,课程组首先考虑的是基于学习过程中的量化数据,其次采分点应有助于工程能力培养。这门课程的成绩评定主要采集的数据包括阶段评审、组间互评、助教评价和项目最终验收结果,实际上这些活动持续整个课程。为此我们组织力量开发了相应的课程教学系统,在项目训练过程中采集互动数据,通过数据来及时掌握互动效果,并在数据基础上进行成绩评价。

我们常说,学会“做人”,才能“做事”。在“做人”方面,首先强调诚实,例如每个团队提交的内容都会经过助教和老师的检查,在阶段评审时还会被老师提问质疑,不可能靠作弊混过去。其次,要客观公正,这反映在两个方面,一是组内所有成员要根据实际情况签订“贡献度分配表”,贡献度差异会带来成绩的差异;二是组间互评,要求所有同学都必须对其他组的模型进行评价,并提供依据。最后,强调虚心接受批评的态度。阶段评审很严格,要求项目组全部同学站在讲台接受质询,而这甚至有时会让同学们“下不来台”,但其实是采取了问题引导策略,先提问题,然后引导出解决方案。所以这几个方面的“做人”训练不是空洞说教,而是融入到具体教学事项中,以“细无声”的方式让同学们体会和实践如何“做人”。这是值得工程类课程重视的地方,也是今后“课程思政”更应关注的主要内容。目前很多人在讨论工程伦理问题,也有这方面的因素。

记者:要完成好《高等软件工程》这门课,学生和老师都需要投入很大精力,老师备课背后需要付出哪些,有哪些挑战,支持课程持续改进完善的动力是什么?

吴际:这门课的备课确实需要投入不少时间精力,既要结合软件工程领域新进展梳理技术内容,也要针对课程项目训练中的共性问题来补充内容和调整优化互动环节。备课的主要挑战在于怎么让学生把一般性工程原则与方法落地,涉及教学案例及互动问题设计、训练项目及评审问题设计等方面。

多年来,每个授课轮次都要投入大量时间进行改进完善。最基本的动力就是“良心”,实际上是教师的自我要求。作为老师如果讲课卡壳,学生会有感觉;课程内容年年一样,恐怕很难说老师做好了教学工作。其次,课程组老师都在做软件工程方向研究,在备课和讲课过程中,也会获得一些专业上的启发,所以教学投入对科研也有积极影响。

记者:您在这门课的多年教学中有什么感悟?对于教学团队新老教师之间的传承和配合有什么建议?

刘超:软件工程知识体系庞大,学科发展快,这导致软件工程能力的训练难度就大。重点是解决好“原理好理解”但“方法不会用”、“项目做不好”等难点问题,通过对软件工程活动的精细化设计和指导,让学生不仅了解软件工程的基本原理和知识,更重要的是使学生通过必要的训练具备软件工程实践能力。作为教师,要避免采用简单的“讲座式”授课方法,避免课下对学生的能力训练“放任自流”。

这就要求我们教师首先要对软件工程领域的主流方法和技术有持续研究,从而紧扣课程目标精选课程重点内容;二是要有必要的工程实践经验,深刻理解工程实践中的核心问题,从而有针对性地设计和细化软件工程实践活动;三是加强师生之间的互动和交流,调动学生的积极性和主动性;四是结合软件工程实践中遇到的难点问题,引导学生开展深入的分析研究,学习如何从实践中总结提炼解决问题的方法。这些方面都是我们课程逐年改革和完善所关注的重点。

对于教学团队建设,要遴选优秀青年教师,形成新老结合的团队,确保教学工作的稳定和延续。新老教师要共同备课和授课,一起开展教学研究,同时要充分发挥青年教师的优势和特长,鼓励他们创新教学方法,充实教学内容,开发教学支持平台,加强国内外同行之间的教学交流与合作,青出于蓝而胜于蓝,从而持续改进和提升教学效果。

记者:您如何评价《高等软件工程》这门课的课程形式以及教学效果?

张莉(计算机学院老师):这门课建设的历史比较长,是我们软件工程领域的强课。这门课在老师和学生中反映都非常好,虽然学生、老师都比较辛苦,但是学生觉得很有收获。这门课也应邀在全国多个计算机和软件工程的教学会议上进行过交流,在国内同行里有一定的影响力,我觉得它与国内的同类课程相比是处于前列的。

这门课程经过多年的发展,授课老师也在不断尝试一些新的教学模式,特别是多方互动,如同学之间互评、助教与同学们的交流,在阶段评审中老师和同学们的现场提问和回答等。实际上交流讨论是培养软件工程能力的重要途径,学生提交了作业,需要老师提供反馈来促进能力的不断提升。因此加强互动,是这门课做的有益尝试。

课程组老师在这门课的投入大家也是公认的,近几年不断探索新的教学方法和模式,并且投入了大量时间和精力在教学实践中进行应用和改进,确保了这门课的持续改进效果。

记者:您对未来的课程设计和发展有什么想法?

吴际:关于未来的课程设计,我们希望能够适度结合学术研究,基于真实数据或案例数据带领学生去探讨软件工程一些比较有挑战性和开放性的问题,比如如何去评价一个需求和设计的质量,培养学生的基本学术研究能力。在课程团队上,一个老师的思维总是有局限性,我们希望引入更多青年教师加入教学团队,为这门课程注入新鲜的活力;同时更加注重学生团队意识、创新意识和能力的提升。

【点评】

校研究生教学督导评估组专家、计算机学院金惠华教授

《高等软件工程》课程的教学设计和实践很好地体现了研究性教学的基本理念:以知识教育为依托、以能力培养为主要内容,把学习、研究、实践有机地结合,引导研究生高度参与和主动性的充分发挥,并且创造性地运用知识和能力,自主地发现问题、研究问题和解决问题,在研讨中积累知识、培养能力和锻炼思维,同时养成科学研究精神和态度。这门课的主要特点是:

1、以学生为中心。把研究生摆在学习的“中心者”位置,教师的作用转变为指导与辅助。教师避免简单的“讲座式”授课,对研究生的能力训练绝不“放任自流”。调动研究生的积极性,研究生课上、课下的学习时间一般都在1:4到1:5。

2、多方互动,全程指导。课堂上,针对案例问题,让研究生尝试解决,然后教师讲解,教师和研究生相互提问、讨论。在课程项目中,助教和每个小组沟通讨论。在阶段评审中,老师和同学当场提问,当场回答,同学之间互评、交流。培养软件工程分析问题能力。

3、强化研究生软件工程的实践能力。通过对软件工程实践活动的精细化设计和指导,让研究生不仅了解基本原理和丰厚知识,更通过必要的训练具备了软件工程的实践能力。解决了本课程“原理好理解”但“方法不会用”、“项目做不好”的问题。

4、模拟软件开发团队的模式,组织研究生通过团队合作的方式来学习、研究和实践。全面增加研究生进行思维训练的机会,同学之间的深入互动,不同观点的碰撞,使他们掌握的知识得以细化和系统化,对知识的理解也更加充分和深入。培养现代工程师必备的工程素养,即团队合作和终身学习能力,做到负责任、会沟通、有能力。

5、全面准确的评价研究生、评价教学效果,跟踪本领域最新研究,不断改进教学。为了使研究生深度参与教学,开展线上各类互动,实现广泛的互评讨论,为了公平公正评价研究生学习效果,吴际老师设计了一个课程教学系统,支撑研究型教学。

凡是采用研究型教学方法,都会大大地增加教师和研究生的负担,能不能顶住因此带来的各种压力,是课程改革成败的关键。今天这门课程能顶住压力实现改革,其他的核心课程应当也不是问题。

打印
分享
更多新闻
04 月
09
教育部副部长吴岩到北航调研

点击数:
加入时间:2024-04-09
04 月
10
04 月
09
慕尼黑工业大学副校长一行访问北航

点击数:
加入时间:2024-04-09
04 月
09
04 月
08
04 月
08
北航召开教代会代表双月通报交流会

点击数:
加入时间:2024-04-08
04 月
08
04 月
07