韦海兰
摘要:软件工程导论课程是软件工程专业一门理论性和实践性均较强的综合性核心专业课。为了克服传统教学方法产生的问题,取得良好教学效果,论文介绍了将项目和同伴教学法融入软件工程导论课程的教学设计与应用,以增强学生的自主学习、同伴合作学习的意识,提高学生的思维能力、沟通合作能力、建构知识和将理论运用于实践能力。
关键词:软件工程;软件开发;课程教学
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2023)06-0028-03
开放科学(资源服务)标识码(OSID)
0引言
软件工程导论课程是软件工程专业的核心专业课,该课程系统地介绍在软件开发、运行和维护中如何运用工程的概念、原理、技术和方法[1],帮助学生掌握规范的企业软件开发的基本过程和任务,提高学生将工程化的思想应用计算机软件的实践能力。
软件工程导论是集较强的理论性和实践性于一身的综合性课程。如果按照传统的“满堂灌”的教学方法,教师争分夺秒不断灌输知识,学生被动地接收,即使教师花费大量时间和精力备课、卖力讲课,抽象、复杂的理论仍使学生兴致不高,学习参与度较低,较难真正理解和掌握众多概念、原理和方法以及较好地将理论运用于具体的场景,提交的作业、实验报告缺少结合场景具体情况进行分析与设计的细节和深度,难以达到预期理解消化知识的教学效果。
項目驱动教学法以项目为载体,在项目中穿插讲授课程的理论体系,实现理论和实践、“教、学、做”的一体化,特别适合于实践性较强的课程[2]。邓娜等提出基于项目驱动的软件工程课程教学设计,以某工资支付系统软件项目的开发贯穿整门课程教学,涵盖软件项目开发的各个环节,学生通过实现一个完整的项目,并穿插学习相关理论知识[3],提升学生理论应用实践和团队协作的能力。但部分学生的实践积极性可能不高,周长敏等提出以毕业设计为驱动的软件工程教学方法,提高学生的学习动力,由被动学习转变到主动投入到软件系统的分析、设计[4],但实际需要调整毕业设计的部分工作安排时间。
同伴教学法是哈佛大学马祖尔教授1991年提出来的教学方法[5],该方法把传统的以教为中心的课堂,转变为以学为中心的课堂,即学习主要由学生刚开始的自主学习、与学生同辈合作探究并最终回归到学生个人对知识的理解消化,而不是由教师教授学生,教师则转变为在一旁指导的教练,它适合涉及批判性思维的学科。该教学方法通过让学生在课前学习完成知识的传递过程,教师在课堂通过与核心概念相关的问题进行教学,让学生先独立思考作答再在小组讨论中尝试说服对方,最后再次作答,在课堂完成知识的理解和消化,充分锻炼学生的思维能力[6],提升学生建构自身知识、在场景中运用理论分析和解决问题的能力。胡树煜等提出在软件工程导论课程中应用同伴教学法,学生合作学习,共同探讨问题,增长知识技能,培养沟通合作能力,通过互助精神共同进步[7]。
1 基于项目和同伴学习的教学方法
为克服软件工程导论课程实践教学中遇到的问题,改进教学质量,本文根据项目驱动和同伴教学法的特点,在课程教学中综合运用项目驱动法和同伴教学法的思想,通过项目引导学生自主与合作学习、提高其理论应用于实践的能力,通过与其毕业切身相关的毕业设计任务,进一步提升学生学习的积极性和参与度,并提高其主动学习、思考问题、分析问题和将理论应用实践以解决问题的能力。
1.1 教学设计实例
基于项目驱动教学法,教师以典型的工资支付系统[8]的设计和开发为例,贯穿本门课程的各个章节,内容涵盖软件项目的问题定义和可行性分析、需求分析、概要设计、详细设计、实现以及维护等各个环节,教学过程见表1。
基于项目驱动的软件工程导论课程教学过程的设计具体如下:
1)准备工作阶段
教师介绍工资支付系统开发相关背景,布置该项目及课程设计任务,包括项目各阶段结束后需提交的软件文档和源代码等。学生自由分组,因项目规模较小,每个小组的具体人数可根据小组成员对项目的熟悉度和编程语言等技术掌握情况设置3~8人,设置1名组长任项目经理,共同对课程设计选题,并明确小组成员的主要分工。
2)可行性分析阶段
小组成员自由分配任务,调查工资支付系统相关情况,进行可行性分析,研究现有系统,导出新系统的高层逻辑模型,经过技术、操作、经济、法律等方面可行性的分析,考虑不同定时处理要求划分的不同自动化边界等因素,导出可供选择的几种不同成本的物理实现方案,并从中推荐其中的最适合的方案,注意对该方案运用成本/效益分析法进行仔细分析,最后撰写可行性分析报告提交负责人和评审组审查。
为让学生初步体验企业真实环境下项目立项的情景,小组成员根据前期调查和可行性分析,对立项项目撰写项目立项建议书和软件开发合同。最后选择两个小组进行课堂展示,由项目经理先简要介绍项目的基本情况和本人担任的工作,再由本小组成员依次介绍自己在项目中分配的任务和实际完成的工作。
3)需求分析阶段
小组成员自由分配角色和任务,进行需求分析,利用Microsoft Visio等软件工具辅助建立功能模型、数据模型和行为模型,撰写需求规格说明书,并选择两个小组根据情景法扮演客户、项目经理、技术人员等角色,模拟与用户沟通获取需求的场景进行课堂展示。
4)总体设计阶段
小组成员自由分配任务,进行概要分析,进行体系结构设计、数据设计、接口设计等,详细设计提供基础。可用面向数据流的方法,复查并精化需求分析阶段得出的数据流图,设计软件结构并利用启发式规则不断优化,力争做到高内聚、低耦合,最后撰写概要设计说明书。教师在课堂上选择两组进行展示。
5)详细设计阶段
小组成员自由分配任务,进行详细设计,包括进行实现具体模块所涉及的主要算法设计和人机界面设计,利用程序流程图、盒图和判定树和伪代码等过程设计工具进行过程设计,并撰写详细设计说明书。教师在课堂上选择两组进行展示。
6)实现阶段
实现阶段主要分为编码和测试两部分。小组成员自由分配开发和测试任务,对系统模块按照编码规范进行编程开发和各种类型的测试,包括单元测试、集成测试和确认测试,通过白盒测试、黑盒测试等测试技术在不同测试阶段发现程序中的Bug,不断修复、完善系统,以提高软件的质量,最后撰写软件测试文档和开发文档。
7)维护
小组成员自行分配任务,进行软件维护,撰写维护文档,并以改正性维护为场景,选择两个小组根据情景法进行课堂展示,其中最终用户由其他小组成员交叉扮演,以让学生体验不同小组开发的软件系统。
1.2 融入同伴教学法的教学设计实例
在项目的各个环节中,基于同伴教学法重新进行教学设计,以其中的“软件过程”这一章节为例设计如图1。
详细步骤如下:
1)课前学习
在上节课结束前10分钟,教师提前布置本节课任务:阅读教材的“软件过程”章节,结合教师提供的相关资料,并通过互联网搜集相关资料,对以下问题独立思考分析,形成自己的答案并在线上提交。
针对以下应用场景开发软件,应适合采用哪种软件开发模型,并简要求说明原因。
① 乙单位为拓展自身业务,与甲方合作为其代理收取自来水水费。乙方需要对甲单位的自来水缴费系统进行接口开发,开发代收水费系统实现代收业务。甲单位提供的接口文档已明确记录其系统的相关业务功能和数据处理要求。
② 开发一个校务通系统作为学校的综合管理平台,涉及学校日常业务管理等相关功能如招生管理、学生日常管理、教务管理和考试管理等[9]。
③ 假设要为一家集生产和销售长筒靴业务一体的公司开发一个软件,用于跟踪其存货以及购买原材料、生产、发货给各个连锁店,直至销售给顾客的全过程,以保证各环节供需平衡,不产生停工待料或供不应求的问题[10]。
2)课堂问题提出
在课堂上,教师介绍课前任务的反馈,引出核心概念软件生命周期模型,并提出对开发讲解项目工资支付系统选择适合的软件生命周期模型的问题。
3)独立思考与独立作答
小组成员根据课前的资料阅读和知识储备进行分析,形成自己的初步观点,并在线上提交答案。
4)同伴讨论与再次作答
教师统计各小组答题情况,如果答题正确率少于30%,教师对相关的概念重新解释后,由学生再次独立思考并独立作答重新测验,接着统计学生答题情况。
对于课堂上提出的教学项目工资支付系统与课前问题①代收水费系统类似,业务算法、数据等需求较明确,业务规模不大且功能不复杂,风险较低,适合采用传统但至今仍用得很广泛的瀑布模型,严格确保项目每个阶段完成文档等任务的质量,提高软件的开发效率。但在教学实践中,有1个大班第一次独立作答选择瀑布模型的正确率低于30%,超过半数以上的学生选择了快速原型模型。大多数学生普遍认为快速原型模型是为克服瀑布模型最终开发出的软件产品可能并不是用户真正需要的这个缺点而提出,所以错认为快速原型模型在各方面完全优于瀑布模型,可取而代之。因此,该大班本轮未开启同伴讨论,而由教师根据学生的错误原因重点对瀑布模型的相关概念与应用情况再次讲解,由学生再次独立思考后独立作答。
如果正确率介于30%和70%之间,则开启同伴讨论进行同伴教学,原小组成员或就近成新小组的成员在规定时间内(一般不超过10分钟)依次阐述自己的答案和理由,并试图说服其他成员。教师巡视或旁听,可参与讨论,收集典型疑问做解答准备,或视小组情况适度演示提出一些建议但不给出答案。小组成员根据讨论结果独立进行第二次作答。若学生能基本达成共识达到70%以上的正确率,则展示答题分布情况并简要讲解后进入下一题。为锻炼学生的语言表达能力,可选择至少2组展示讨论结果及相关情况,本门课程结束时每个小组至少要展示一次。
5)教师总结
教师汇总整理学生知识点掌握情况,总结各组答案的优缺点,分析易错点和错误成因,归纳提炼本章节知识的重点和难点。小组成员结合教师讲解,对照分析小组讨论和教师答案的利弊,在纠正和补充完善中进一步领会相关的知识技能,并最终理解和消化,内化于心。
2 课程考核体系
为提高学生学习的积极性,综合考查学生的理论知识掌握和实践应用能力,软件工程导论课程成绩总评按100分计,由三部分组成:平时成绩占40%,考核论文成绩占60%。其中,平时成绩包括考勤10%、课堂表现20%和课后作业10%。考核论文主要考查其基础理论知识和方法的掌握和应用能力。
3 结束语
本文分析了软件工程导论教学存在的难点,提出了在课程教学中融入项目与同伴教学法,将一个项目貫穿课程始终进行教学,在项目中穿插理论学习,同时由学生自由分组,按小组申报一个选题进行课程设计,最后提交参照毕业设计论文的要求完成考核论文,为毕业设计打下良好基础;并通过同伴教学法使学生相互成为知识的传授者,在学习过程中相互扶助,增强团队合作和沟通能力,从而进一步提高学生学习主动性、理论素养和将软件工程项目理论运用于实践的能力。
参考文献:
[1] 张海藩,牟永敏.软件工程导论(第6版)学习辅导[M].北京:清华大学出版社,2013.
[2] 张白,周春艳,潘俊涛.基于虚拟仿真软件的项目驱动教学方法研究[J].计算机教育,2016(4):129-132.
[3] 邓娜,林松,熊才权,等.工程教育认证下基于项目驱动的软件工程教学设计[J].计算机教育,2019(1):104-107.
[4] 周长敏,佘佐明.以毕业设计为驱动的软件工程教学方法探索[J].现代计算机,2019(28):68-70.
[5] Mazur E.Peer instruction:a user's manual[M].Upper Saddle River,NJ:Prentice Hall,1997
[6] 同伴教学法[EB/OL].[2021-10-22].https://www.icourse163.org/learn/PKU-1449482161?tid=1468612458#/learn/content.
[7] 胡树煜,王琢.同伴教学法在软件工程导论课程中的应用[J].中国管理信息化,2017,20(4):222-223.
[8] 张海藩,牟永敏.软件工程导论(第6版)学习辅导[M].北京:清华大学出版社,2013.
[9] 韩万江,姜立新.软件项目管理案例教程[M].2版.北京:机械工业出版社,2009.
[10] 吕云翔.软件工程:理论与实践[M].2版.北京:人民邮电出版社,2018.
【通联编辑:王力】