摘 要:针对“软件工程”课程教学中存在的理论体系抽象、繁杂,实验教学脱离实际、流于形式等问题,提出一种基于软件过程工具的Scrum敏捷开发模式。该实验模式引入类软件公司开发场景进行项目实战,即学生根据自身的能力与爱好承担团队中相应的软件过程角色,选择多样化的项目作为实验课题,开发模式采用根据师生特点调整的Scrum敏捷方法,并加入软件过程工具技术实践。此举旨在加强实验与实际相结合的实施,并有序规范地贯彻整个软件开发过程。
关键词:软件工程;实验教学;软件过程工具;敏捷开发;Scrum;项目实战
中图分类号:TP311.5;G642 文献标识码:A 文章编号:2095-1302(2024)03-0-04
0 引 言
随着互联网技术的迅猛发展,传统行业与互联网的结合越来越紧密,相关行业对软件产品的需求也逐日增加[1]。同时,互联网软件产品具有生存周期短、需求不演化等特点,所以软件行业对从业人员提出了更高的要求。因此,各高校在当前形势下培养出高素质有实战能力的软件人才刻不容缓。在教育部出台的《工程教育认证标准》中,明确指出高校毕业生应具备实践能力解决复杂工程问题[2]。“软件工程”课程作为一门高校软件相关专业的核心课程,旨在让学生掌握软件开发的流程、工具及方法,并提升其软件工程素养和软件项目实战能力。由此可见,该课程在培养软件人才方面将起到至关重要的作用。
通常“软件工程”课程教学大纲分为理论教学和实验操作两个部分,而实验的开展需要建立在理论基础之上。然而,很多学生在学习完理论知识之后,并未真正将所学内容应用到实践中,实验过程往往缺乏真正的投入,导致实验教学成效与课程目标相差甚远,这一现象一直以来都是一个教学痛点[3]。为了解决此类问题,软件工程实验教学改革一直在不断进行。
1 Scrum敏捷实验教学方案
由于“软件工程”课程的理论体系繁杂抽象,很多学生对该课程的理论学习缺乏兴趣。在课程结束后,由于缺乏有效的理论指导体系,学生很难将所学的理论知识应用到实验中。此外,一些教师的企业实战经验有限,因此也无法深入指导实验环节,导致整个实验过程经常出现无序、不规范等问题,最终影响了教学效果。
为了改善上述问题,本文在白晓颖等人[4]提出的基于敏捷软件开发的实验教学方案基础上,结合我校师生的实际情况,对Scrum敏捷开发过程进行了优化。这些改进措施旨在确保整个实验流程在师生教与学的过程中更加有条不紊,协作紧密,同时能够高效顺畅地实施。
1.1 Scrum敏捷开发模型
敏捷开发是一种以人为本、不断迭代、小步快跑、注重产品的轻量级开发模型,它的价值观强调个体和互动、可工作的软件、响应变化、与客户合作[5]。Scrum是敏捷模型中的一种开发方法,包含产品负责人(Product Owner, PO)、团队教练(Scrum Master, SM, 类似项目经理)和团队(Team)。开发过程如图1所示。
1.2 敏捷开发实验实施过程
为了充分发挥Scrum敏捷开发模型在软件工程课程中的作用,本实验教学方案采用学生团队协作开发项目的方式。为了确保教学流程流畅和教学效果良好,课前需要学生自主组建团队,并确定团队要开发的项目主题和内容。这样可以提高学生的主动性和参与度,同时更好地发挥团队协作的优势。具体安排如下:实验筹备工作在开课前完成,大约耗时2周;教学周的前3周用于需求分析,第4~15周共安排4个迭代,每个迭代的时长为3周,第16周用于实验考核。流程如图2所示。在课堂上,教师主要进行流程讲解和引导,学生则需要及时消化吸收并仿照执行。在课下,学生需要继续学习并不断调整以按规范进行实验,教师则需要批阅学生提交的过程文档和软件增量,督促团队按照规范和计划进行,确保团队完成高质量的实验项目。
1.2.1 实验筹备阶段
(1)组建团队。学生根据自身的兴趣和能力担任不同的Scrum角色。考虑到学生如果完全自由组队,可能出现部分团队整体水平偏弱,无法规范地开展实验。因此,团队组建采用“半自由”原则,即教师事先收集学生所愿承担的角色,再参考学生以往学习成绩进行微调,划分出角色组别。角色组别包括PO组、SM组、开发组和测试组。其中,开发组再根据编程能力分为A、B、C三组。采用这种方式组建团队,在尊重学生个人意愿的同时,尽量使团队实力均衡,让团队成员以强带弱,互相取长补短,从而保证实验顺利实施。
(2)项目选题。本实验体系的选题采用“双重选择”机制,即团队开发的项目可以选择教师提供的校企合作题目,也可以来源于自己的创意。进行此类项目实战的好处是,不仅可以激发学生实践的兴趣,而且能够让他们体验到产品实现后的成就感。
1.2.2 实验实施阶段
(1)需求梳理。团队确定选题后,即可进入需求分析与整理阶段。在此过程中,扮演PO角色的同学将收集到的需求表述成用户故事,再根据用户的目标和需求的价值进行优先级划分。在这个阶段,教师扮演用户和课程管理者的角色,及时了解学生作品需求和进展情况。
(2)迭代计划。每个迭代开始时,团队将召开迭代计划会议。在会议中,团队开发人员根据自身的开发能力和需求优先级,从需求列表中挑选出该迭代待开发的需求。团队成员需要明确该迭代的目标,主动领取任务,并将用户故事拆解成可用于估算工作量的任务。考虑到学生团队实战经验有限,让其独立完成该过程的内容存在一定困难,因此教师在实验开始前通过案例分析讲解,使执行过程有章可循。
(3)迭代开发。在开发过程中,研发人员会先进行详细设计,然后编码,接着完成自测,最后提交代码。测试人员则会根据需求进行测试用例设计,在开发人员集成代码后再进行集成测试、功能测试和性能测试。缺陷跟踪管理由SM执行。团队需要进行每日站会和冲刺会议。整个迭代开发过程相对繁琐,教师需要全程跟踪,及时纠正团队开发过程中遇到的错误,确保团队遵循规范执行。每个迭代结束后,团队将会输出与迭代清单对应的软件增量。
(4)迭代评审。迭代评审是确保团队开发进程中质量的关键环节。除了展示本迭代已完成的功能,还需要重点讨论问题和解决方案。在评审会上,学生可以分享经验和知识,互相帮助解决问题,这有助于提高团队协作和技术能力。此外,教师还可以指导学生如何准确理解用户需求,如何衡量每个功能的优先级和价值,帮助学生做出更加合理的开发决策。最终,通过迭代评审,团队可以不断改进和优化产品,提高开发效率和产品质量。
(5)部署增量。部署增量的目的在于能够随时提供当前版本的产品供用户使用,方便他们及时了解产品。此处的用户由教师和学生共同扮演,他们的主要工作是根据需求文档和产品原型检测团队当前输出的软件产品是否符合需求和计划,并根据实际情况提出修改意见。通过该环节,教师可以及时掌握每个团队的进展情况,并提供相应的指导。
(6)迭代回顾。在每个迭代结束前,团队需要由SM组织全员召开一次迭代回顾会议。在会议上,教师协助团队回顾该迭代的总体情况,包括总结成功的经验和分析需要改进的点。教师还提出相应的改进措施,以帮助团队在下一个迭代中持续改进。
1.2.3 实验考核阶段
为了更全面地评估学生在实验课程中的表现,我们不仅注重团队的最终成果,还要评估每个团队成员的个人贡献度以及实验过程中的软件增量。学生的课程成绩由团队作品得分和个人贡献度系数的乘积组成,以此来反映每位学生在团队中的贡献以及其在实验过程中所表现出的能力。这样的评估方式不仅可以激发每个学生的积极性和责任感,还可以更全面地评价整个实验的过程和成果。
2 基于软件过程工具的敏捷开发实验教学
2.1 敏捷开发存在的不足
基于第1.2节所描述的实验方案,经过两个学年的实践后,我们发现仍然存在一些不足之处。究其原因,主要包含两点:首先,学生往往只注重Scrum过程的实施,而忽视了技术实践的重要性。实际上,技术实践是软件开发中不可或缺的一环,也需要在实验中得到充分的关注和实践。其次,Scrum作为一种敏捷开发方法,重点在于迭代开发和快速响应需求变化。但是,Scrum无法覆盖所有软件开发过程,例如产品原型设计、数据库设计、单元测试等环节也需要在实验中得到足够的关注和实践。因此,在实验过程中需要注重软件开发中关键阶段的技术实践,以确保实验过程更加全面和完整。
2.2 基于软件过程工具的实验措施
根据上述分析,本文认为在实验过程中应该增加对产品原型设计、数据库设计、单元测试等环节中工具的介绍和使用,并输出对应的成果作为实验考核指标。
(1)产品原型设计。产品原型是一种工具,它可以通过可视化方法展现人的想法和需求。在开发互联网软件产品时,产品经理在需求分析阶段难以梳理出准确、完整、合理的需求。往往需要借助产品原型与相关利益方探讨细节,逐步细化并完善产品需求,以便为后续的设计、开发和测试做好准备。现在国内主流的原型设计工具有Axure RP、墨刀、xiaopiu等。通过课堂讲解原型设计工具的使用,学生能够在1个课时内基本掌握该类工具的操作。在需求分析阶段结束后,每个团队需要上台展示所完成的产品原型,并作为课程考核的成果。
(2)数据库设计。在确定产品原型和需求之后,即可进行软件设计。这个阶段中,数据库设计是至关重要的一步。在多年的教学观察中,发现学生一般会直接在数据库管理工具上创建数据表和设置字段,但是这种方式存在一些弊端。例如,开发人员无法直接查看表间关系和字段说明,影响了开发效率。因此,高效的数据库设计通常需要借助一些工具,而PowerDesigner就是其中之一[6]。该软件是一款经典的数据库建模、业务流程建模、UML设计的工具。它既能设计多种常见的数据库管理系统(DBMS)的模型,如MySQL、Oracle、SQL Server等,也能绘制UML相关图形,具有适用范围广、初学者容易掌握等特点。一般来说,设计人员是根据实体关系图(ER图)在PowerDesigner上进行数据表、数据字段和表间关系的建立,如图3所示。创建完成之后,还可以根据所选的DBMS生成对应的建库SQL语句,以便后续开发和维护使用。学生使用该工具将使实验项目的开发效率大大提升,数据冗余和关系混乱的现象也可随之减少。此外,我们建议教师采用录制教学视频的方式介绍该工具的使用,让学生可以根据自己的进度和需要进行学习和理解。在第一个迭代开发期间,学生需要提交数据库设计模型(PDM文件)作为课程考核成果,教师评阅该文件并给出修改建议。
(3)单元测试。单元测试是集中检测和验证软件中的最小单元。它与编码同属于实现阶段,由开发人员提供测试用例代码,借助自动化测试工具执行。值得重视的是,单元测试是保证软件质量的第一道屏障,高覆盖率的测试用例可更大程度地减少潜在的错误。然而,通过对学生的问卷调查发现,多数学生对单元测试缺乏了解,或者只停留在理论层面。因此,有必要通过课堂实操教学给学生演示单元测试是如何进行的,使其对单元测试有更深入的了解,同时也为迭代开发做好准备。本文以JUnit为例。JUnit是一种自动化测试的简单框架,可以对Java源代码进行单元测试[7]。使用JUnit编写的测试用例代码可重复使用,而开发人员只需关注运行状态,无需记住源代码的运行结果。此外,其他经典流行的编程语言(如C++、Python、C#等)的自动化测试框架与JUnit相似,因此,学生很容易通过类比方式将JUnit的使用方法应用到其他语言上。在整个迭代开发期间,开发人员需要及时提交单元测试用例代码,并以测试用例覆盖率和错误数量作为考核标准。
3 软件过程工具在敏捷开发实验中的应用效果
在Scrum敏捷开发实验中,基于软件过程工具的实施方案获得了良好的成效。从实验教学过程和输出成果来看,主要体现在以下几个方面:
(1)通过使用软件原型工具,学生完成的作品能够更好地满足用户需求,同时教师在实验过程中也能更加清晰地了解软件的功能和界面。此外,使用原型工具还增强了团队协作和沟通能力,方便更好地进行项目管理,提高了敏捷开发实验的质量和效率。
(2)通过使用数据库设计工具,学生能够更快更准确地完成数据库设计,并且提高了数据库的维护性和扩展性。同时,与其他敏捷开发工具的集成形成了完整的敏捷开发环境,提高了开发效率和协作能力。
(3)使用单元测试工具能够帮助学生在软件开发迭代过程中更加及时地发现错误,避免因开发新功能出现新的错误。这也显著提高了团队在敏捷开发实验中的代码质量和开发速度,同时提高了软件的可维护性。
从学生获得的综合能力来看,主要体现在以下几个方面:
(1)提升学生实践能力。通过引入软件过程工具的敏捷开发实验教学,学生能够更好地掌握敏捷开发的方法和工具,从而提升实践能力。在2019年至2022年期间,我校学生表现优异,在中国大学生计算机设计大赛中共获得国赛二等奖1项和三等奖5项;在海峡两岸信息服务创新大赛中获得一等奖2项、二等奖1项、三等奖4项;在大学生创新创业训练计划项目中获得国家级立项2项、省级立项3项。
(2)提高学生就业竞争力。学生通过实践敏捷开发和使用软件过程工具,提高了工程素养和实战能力,从而增强了就业竞争力。在近四年间,有20余名学生在校期间能够参与实际产品开发,在我校的校企合作实验室研发出4款实际应用的产品,包括基于机器视觉的鞋模喷胶系统、高校快递代领服务系统、实验室人脸监测报警系统、基于OptaPlanner的智能排产平台[8-10]。
4 结 语
“软件工程”课程中的实验环节承担着提升学生软件项目开发能力、培养优秀软件开发工程师的重要任务。为了规范师生的实验过程,加强教师对学生的指导以及提升学生的学习兴趣,有必要对课程的教学模式进行改革。通过个性化的团队协作、多元的选题设置、参照Scrum敏捷开发方法来设定实验流程,并结合师生特点进行调整,同时引入软件过程工具,有效规范实验流程,促进实验更加贴合实际。实践证明,该教学方案可以整体提升学生的软件开发水平,培养出更具实战能力和竞争力的软件开发人才。
参考文献
[1]张少华,杨兴云. 数字经济背景下软件企业多元化经营探析[J]. 决策咨询,2021,62(2):64-66.
[2]佚名. 工程教育认证标准(2017年11月修订)[J]. 电气电子教学学报,2019,41(1):1-4.
[3]王凤领,张波,巫湘林,等. 应用型本科软件工程专业创新人才培养模式的研究[J]. 计算机教育,2018,16(5):115-122.
[4]白晓颖,李山山,李明杰,等. 基于敏捷开发的软件工程实践教学探讨[J]. 实验技术与管理,2018,35(4):6-11.
[5]李栋,孙世文,李红杰. 基于敏捷开发模式的计算机教学实践探究[J]. 现代信息科技,2022,6(19):188-190.
[6]陈思琪. 关于PowerDesigner软件工程技术的研究[J]. 现代盐化工,2019,46(6):80-81.
[7]张苏,杨元峰,陆公正. 软件测试中单元测试案例教学实践[J]. 电脑知识与技术,2020,16(13):132-135.
[8]陈俊仁,高凤强,熊魁. 基于机器视觉的鞋模喷胶系统设计与实现[J]. 物联网技术,2019,9(5):40-42.
[9]邱璐璐,陈俊仁. 基于SpringBoot和Vue框架的高校代领系统设计与实现[J]. 信息技术与信息化,2021,46(4):25-27.
[10]李舜,陈俊仁. 基于树莓派的人脸监测报警系统设计与实现[J]. 信息技术与信息化,2021,46(12):13-16.
作者简介:陈俊仁(1988—),硕士,讲师,研究方向为计算机软件和人工智能。