苏春芳 李娜
[摘 要] 针对软件测试课程知识覆盖面广、操作实用性强、行业面向性强的特点,在深入调研了软件行业对软件测试人员要求的前提下,提出基于敏捷开发模型的软件测试教学改革方案,目的在于让学生熟悉软件企业普通应用的开发模型以及软件测试的流程与方法,在提高学生专业学习能力的同时,重点培养学生综合应用知识、提出问题、解决问题的能力,从而提升学生在职场中的竞争能力。
[关 键 词] 瀑布模型;敏捷开发模型;Scrum;用户故事
[中图分类号] G712 [文献标志码] A [文章编号] 2096-0603(2016)27-0104-02
軟件质量问题一直是IT(Information Technology)行业关注的重要问题,不断提升软件产品的质量,成为软件企业研究的重要课题。瀑布模型(watefall)曾经是软件行业普遍采用的一种开发模型,在整个开发过程中虽然也要求测试人员和开发人员相互合作,但存在一定的阶段性。软件测试一般发生在需求分析、设计、编码阶段之后,当开发人员完成大部分的工作任务以后,测试人员才正式参与项目,软件测试人员在项目前期仅仅是做一些测试前的准备工作而已。即便软件公司拥有一支强大软件测试团队,也没有办法维持一个较低的、比较理想的bug率。近年来,软件行业开始认同一种新的开发模式——敏捷开发模式(Agile software development),随之而来的是软件测试行业也正在经历一场巨大的变革。敏捷开发模型将软件开发与测试融为一体,从而改变了软件测试人员与开发人员之间时间、空间上的界限。敏捷开发更强调“项目中的每一天都不例外”,每一次软件迭代,不仅包含开发的任务,也包含测试的任务,每一次成功的迭代都是团队共同合作的产物。为了适应软件行业的这种变化,本文深入研究了敏捷开发模型scrum,探索了软件测试课程的设计与教学模式。
一、课程总体设计
敏捷软件开发是一个逐步迭代的过程,将整个软件产品分为若干个迭代(Iteration),持续不断地向客户提交有价值的软件,当所有的迭代结束时,整个产品的开发任务就完成了。产品开发的每一轮迭代,都要向客户提交可以使用的产品,从某种意义上来说,每一轮迭代过程都是一个完整的软件开发过程,包括设计、编码、测试等过程。
鉴于敏捷开发的特点,软件测试的总体设计不仅要体现迭代的过程,还要兼顾软件测试的知识结构,主要从教学单元的划分、教学内容的设计、教学方法等几个方面对软件测试课程进行总体设计。
(一)模块任务设计
敏捷开发模型scrum将软件产品的开发过程定义为一个不断迭代的过程,因此,教学的项目应该具有可拆分、模块化的特点,本课程选取学生较为熟悉的“教学管理系统”作为教学项目,贯穿于整个教学中。该项目由本校师生共同开发,目前正在使用过程中,教学项目选择对“教务管理系统”进行测试,不仅具有实际应用价值,而且还能够增加学生的成就感,从而激发学生的学习兴趣。
教学单元的任务设计充分体现scrum迭代的特点,通常情况下,一个教学单元对应一个scrum的一轮迭代,每个教学单元都是一个完整的任务模块,而各个教学单元之间又是一个相对独立的、可延续的整体。遵循由简单到复杂、可迭代化、可拆分化的特点,将“教务管理系统”划分为用户认证、组织管理、学生管理、课程管理、成绩管理五大教学单元,教学单元之间是一种高内聚、低耦合的关系。
由于敏捷开发的每一轮迭代都包含若干个用户故事,通常在迭代会议结束之后,每个项目小组都会领取任务,因此在本门课程的设计中,借鉴软件企业的这种做法,将所有的特性分解成多个用户故事卡(Story Card),每一个用户故事就是教学单元中的子任务,下面以成绩管理为例,说明本门课程的教学任务设计。在以往教学中,存在教学任务划分粒度较大、任务描述不清晰的特点,本文借鉴scrum用户故事撰写的原则,在任务的命名中就明确了谁是用户、能做什么,这样使得任务的描述更准确化、清晰化,考虑到本门课程的连续性、完整性,本文将用户故事名作为任务名。
(二)教学环节设计
软件测试这门课程的理论知识主要是指软件测试方法、技巧,在以前的课程教学中,我们以工作任务为导向来组织教学,将各个知識点融入各个教学任务,取得了良好的教学效果,本门课程继续延用这种方法。同时由于scrum的每一轮迭代都会使软件测试的任务成倍的增加,给软件测试也带来了前所未有的压力,也正由于这一特点,才能保证测试的完备性,为了解决这个问题,本文在教学环节中增加了自动化测试的环节,加大自动化测试的比重。增加自动化测试的原因在于测试人员不仅要对上一轮的测试进行回归测试,还要对新的任务进行测试,如果没有自动化测试技术作为保障,测试人员是无法完成相应测试任务的,因此,在教学环节中,增加回归测试环节是必需的。
本门课程的教学环节,不仅增加了回归测试环节,而且还增加了团队互动环节。以往软件企业中的测试人员与开发人员虽然同属于某一个项目组,实际上他们的工作是相对独立的,他们之间的合作也仅仅发生在项目开发后期。由于在scrum中,项目组的划分是以用户故事为依据,以功能模块为基础,因此项目组就变成了开发人员与测试人员的结队,为了让学生适应软件行业的这种变化,在教学中增加了团队讨论环节,创造团队合作的机会,从而培养团队成员沟通、交流的能力。
二、课程单元设计
软件企业不仅要求测试人员具备测试知识、掌握一定的测试技巧,而且更看重软件测试人员的团队协作能力,为了培养学生以上的能力,本文深入探索了单元设计的思路与方案。在教学单元中不仅要讲解软件测试的理论知识,还要搭建测试人员与开发人员紧密合作的环境,从而培养团队成员之间的沟通与合作能力。单元设计包括对情景任务的设计、团队组成与合作形式的设计以及教学方法的设计。
(一)情景任务设计
在以往的教学中,引入任务部分常常以描述一个测试任务的形式提出,通过老师的讲解,由学生自己来提炼,往往有些学生在任务不明确、技术要求不清楚的情况下开始学习,从而导致学生不能全身心地投入课堂学习。为了能够在引入任务环节给学生一个清晰、明确、直观的认識,本课程采用用户故事(Scrum User Stories)方式来引入任务。用户故事往往包含三个部分,清晰明确地提出“终端用户是谁,用户想要什么,结果是什么”,常常使用简明、精确的语言描述一个具体的功能,例如,引入“学生查询成绩”这个任务可采用如下表所示的形式,这样的任务描述不仅明确告诉学生本次课的任务,而且还能够避免歧义的发生,以严谨、科学的方式传达信息。
(二)团队组成与合作形式
为了增加教师与学生、学生之间的互动,座位的排列通常按照教学内容的特点,分别可以采用全班、内外圈、小组、角色扮演、意见轴等形式排列,目的在于增加學生在做中学、教别人的机会。
团队讨论形式主要采用角色扮演的形式,让学生通过扮演开发人员和测试人员,分别完成各自的设计与测试的任务,在此基础上,采用辩论或交叉提问的形式,增加开发与测试人员的互动,让学生自己发现设计不合理的部分。经过2分钟各自的修正后,项目组提交一份完整的任务书,经过以上的讨论环节,使得整个任务的设计、开发、测试都是集团队成员的智慧于一体,从而改变了瀑布模型中设计由开发人员独立完成的现象,减少了设计阶段产生bug的几率,同时潜移默化地培养了学生团队合作的能力。团队讨论环节总时间一般控制在10分钟之内。
(三)知识点组织设计
紧紧围绕用户故事,设计所要讲解的知识点,以“查询不及格的课程成绩”为例来说明知识点的组织。用户想要看到的是自己成绩低于60分的课程成绩,而不是所有的成绩,60分、59分是两个比较重要的边界值。测试“查询不及格课程成绩”这一功能最有效的方法是边界值分析法,因此本节的理论知识主要包括边界值方法、等价类划分方法、回归测试,除此之外,还要增加自动化测试。在敏捷开发中自动化测试是测试人员必不可少的一项技能,每轮迭代都在增加新的功能,而迭代周期的时间相对固定,随着时间的推移,已实现的功能越来越多,这就要求越来越多的回归测试在时间相对固定的周期内完成。如果没有自动化测试,这是不可能完成的任务。如何培养学生在有效的时间内,完成比以往多几倍的测试任务,是本门课程考虑的另一个重点,鉴于以上原因,在知识点设置中增加自动化测试部分,对学生进行递进式强化训练。
总之,软件测试课程是计算机软件专业的必修课程,重在培养学生的软件测试能力,满足软件行业对测试人员的需求。为了适应当前软件行业开发模式的变化,基于敏捷开发模式scrum,本文提出针对软件测试课程的教学改革方案,对课程的总体设计、单元教学内容与教学方法进行了深入探索与研究,尤其在团队合作内容、形式方面进行了深层的探索,通过一年多的实施情况,达到了预期的目标,毕业生深受用人单位欢迎,接下来我们将再接再厉努力探索互动教学技巧,优化翻转课堂教案的设计。
参考文献:
[1]王敏.基于Scrum敏捷开发的软件过程管理研究[D].昆明理工大学,2010:20-22.
[2]任波.基于敏捷开发的游戏项目集成管理系统的迭代开发[D].上海交通大学,2006:23-24.
[3]王爱景.敏捷开发中软件架构的设计与实践[D].河南大学,2015:30-34.