潘立琼 朱学颖 余久久 肖 刚
(安徽三联学院 计算机工程学院,安徽 合肥 230601)
软件敏捷方法以用户的需求进化为核心,采用迭代(循序渐进)的方式完成软件开发,其强调快速性及适应性。一个软件项目(产品)在构建初期被切分成若干个子项目,各个子项目在经过测试后具备可视化、可集成和运行使用的特征[1]。换言之,敏捷方法就是把一个软件系统划分为多个相互联系,但也可独立运行的子系统,并分别完成开发过程,而在此期间整个软件一直处于可使用(运行)状态。随着敏捷方法的发展,业内出现了Scrum(迭代式增量软件开发过程)、XP(极限编程)、Crystal、FDD(特性驱动开发)、精益软件开发、ASD(适应性软件开发)、DSD(动态系统开发)、AUP(敏捷统一过程)等诸多基于敏捷的软件开发模式(模型)。其中Scrum已广泛应用于各类轻量级软件开发项目中,其具有的快速及适应性过程取代传统开发方式中需求、设计、编码及实现的僵化流程风格[2]。Scrum已成为当前主流的软件敏捷方法。
在“互联网+”教育的时代背景下,“以教为中心”已逐渐被“以学为中心”的教学理念所取代。伴随着大数据及互联网技术的发展,以及MOOC(大规模在线开放课程)/SPOC(小规模限制性在线课程)等新型教学模式的出现,更展示出互联网学习的发展方向。自主学习系统让学生努力汲取更多科技知识的同时,也拓展了传统校园的界限,加之设计本身也充满了自己的个性,并且拥有庞大网络资源库,使学习环境多元化,让学习更随意、更随性[3]。目前,将智能移动终端作为学习工具进行移动学习,对于学习者来说方便携带,情境性强,同时,满足学习者利用碎片化时间随时随地进行学习的需求[4]。Android智能终端作为一种主流学习工具,被广泛运用于越来越多的移动自主学习环节。
本文运用Scrum敏捷方法,设计并实现出一个基于Android手机客户端的软件测试课程自主学习系统,为校内学生开展自主学习活动提供服务。该系统采用J2EE架构的SSH(Spring-Struts-Hibernate)三层组合框架,面向本地校园SPOC活动。把课堂教学与课程资源相融合,能够实现课程资源分享,以及教师与学生、学生与学生之间互动交流于一体,将SPOC充分应用于该课程的混合学习活动中[5]。
Scrum是目前IT业界采用较多的软件敏捷开发方法,其执行流程如图1所示。Scrum主要涉及三个角色:产品负责人(产品经理)、Scrum开发团队和Scrum Master(为Scrum开发团队提供有效指导与服务的负责人)。在Scrum执行流程中,强调快速提炼出用户需求,以用户故事的形式加以表述(“谁”使用系统的“什么功能”,能够实现“什么用户价值”),即从用户使用的角度来描述用户所期望拟开发系统能够实现的业务功能。
图1 Scrum执行流程
此外,Sprint在Scrum流程中指代工作(迭代)周期,一个Sprint通常不超过4周时间。在Scrum流程中,把整个软件产品的开发过程分解成若干个Sprint(迭代)周期。Sprint周期一旦确定,将保持不变(除非有很大的风险产生,不得不做调整时)。当每一个Sprint结束后,必须要发布(产生)一个基于原软件产品基础上的、可运行的、可用的、能够实现用户价值的软件产品增量。在一些敏捷项目管理平台中,新的Sprint在上一个Sprint完成发布之后,将会立即启动迭代[6]。
Android平台是Google公司发布的一款手机系统平台,采用四层软件叠层架构,基于Linux内核,自底向上分别是Linux核心层、中间层(包含各种函数库及Java本地运行环境)、框架层(提供使用Java语言编写的应用软件及其框架设计)、应用层(包含用户实际上网、使用电话、发短信等功能)[7]。Android平台使用便捷,优点明显,是一个非常适用于各类软件信息化及应用服务的平台,具有广阔的应用前景[8]。
SSH(Spring-Struts-Hibernate)是一个基于J2EE的适用于中、小型Web应用系统的轻量级三层组合框架,能较好地实现网络及系统管理等功能。客户端使用Android平台开发完成与服务器端的数据交互,以及自身的网络通信服务、数据库管理等[7]。Android客户端与服务器端运用了HTTP通信协议,通过无线网络与Android手机客户端完成数据交互,使整个服务器端的扩展性、稳定性及可维护性得到保证[9]。本自主学习系统采用SSH架构设计,如图2所示。
自主学习系统在实际使用时,会大量数据以Web页面形式在Android手机上分页显示,所以本系统采用了GirdView自动分页技术。为实现带缓存的数据分页显示,可开启SqlDataSomw数据源的“允许缓存”属性,以提高Web应用程序扩展性及程序的运行效率,并降低开发成本[10]。
图2 系统架构图
本系统开发采用如图1所示的Scrum敏捷方法,整个系统开发时间为2个月。由于用户需求的变更,在此期间共进行了4次迭代开发,也就是说一共产生了4个Sprint周期,每一个Sprint周期持续大约2周时间,在每一个Sprint结束之后都能在线产生(发布)一个可测试的、且运行稳定的系统版本。基于篇幅所限,这里仅介绍关于该自主学习系统在第一个Sprint周期的开发过程。
在开发团队方面,本系统Scrum开发团队一共4人,包括1名系统分析师、2名程序员、1名软件界面设计人员。作者本人充当项目负责人(产品经理)角色,负责把用户需求细化为拟开发软件产品的待办事项列表(Product Backlog)以及用户需求的变更,同时,也兼任系统设计与分析工作。相关部门领导担任Scrum Master的职责,为Scrum开发团队提供有效的技术保障与服务。
由于开发初期没有充裕的时间使开发团队完成对整个系统的功能需求分析,加之用户需求认知情况也是逐步完善的,也就是说实际上用户对该系统所需实现的功能也无法一次性确定。因此,从项目负责人(产品经理)的角度,在每一次Sprint开展之前只需要充分了解本次迭代开发需要为用户实现系统(产品)哪方面的价值,用户需要做的工作是什么,本次迭代的时间、工作如何完成等。主要内容包含:提炼用户需求,以用户故事的形式概括产品的待办事项列表,对每一个待办事项设置优先级;确认本次Sprint最终的任务列表并将信息传达给项目干系人,把用户故事中的每一个条目细化成为独立可执行的开发任务(Task)为Scrum开发团队中每一个成员分配各自的任务,团队内部讨论最优的工作流程等。根据与用户沟通,结合本项目敏捷开发实际,摒弃了传统的需求分析过程,Scrum开发团队把在第一个Sprint中所需要实现出的用户需求及其对应开发任务,以用户故事列表的形式制定出,如表1所示。同样,在本次Sprint中开发所涉及到的数据库表有用户信息表,课程资源表、发帖及回帖表等,因篇幅所限,这里不予列出。整个Sprint持续时间为2周时间。
表1 开发任务列表
在本次Sprint迭代开发中,要求Scrum开发团队在搭建SSH三层系统架构基础上,能在Android客户端上快速实现一个简单的课程自主系统,只要求能够实现表1所示的各项功能。此外,要求在本次Sprint中同时定义了系统的各个数据表结构,形成一个快速的、可运行的系统(版本),及时上线发布。下页图3—6分别展示了该系统的用户登录、用户注册、新建课程资料、论坛交流界面。在Scrum敏捷方法中,开发团队是一个技术能力综合型团队,并不区分明显的软件开发与软件测试岗位。也就是说,需要对每一个开发任务经过充分测试,以保证每个功能模块都能通过单元测试,并且能被依次集成,整个系统始终处于可运行状态。
在本次Sprint中关于项目管理方面,实际上项目组主要召开了三种类型的会议,以保障Scrum敏捷方法的有效实施。首先,每天清晨,Scrum开发团队定期召开一个15分钟左右的“每日站会”,即每位成员站着简要汇报“昨天完成了什么,遇到什么问题,今天要做什么。”,形成固定的会议制度。其次,在本次Sprint结束后由项目负责人主持召开一个评审会议,用于对本次Sprint中迭代开发的成果进行评审,便于发现问题并及时纠正。最后,在本次Sprint结束后还要确定在下一个迭代中要完成的用户故事及其开发任务,即计划会议。开发团队根据产品负责人排定的优先级,选择下一迭代任务,对选定的任务进行进一步的细化,并确定细化后的每项具体负责人[11]。例如,在即将进行的为期2周的下一个Sprint中,按照与用户沟通的结果,需要完成自主学习系统的课程考试功能。在大学软件测试课程学习内容基础上,增添课程考试功能,要求该功能实现后能够在原系统的基础上直接(增量)集成,形成一个新的系统(版本)并发布给用户。例如,图7为该新增功能中需要实现的“创建试题”任务的界面。
图3 用户登录界面
图4 用户注册界面
图5 新建课程资料界面
图7 创建试题界面
图6 论坛交流界面
本自主学习系统充分运用基于Scrum敏捷方法,通过4个Sprint迭代周期,总共持续大约8周的时间,线上快速发布V1.0版本,初步完成了用户对系统的期望价值,即为校园学生通过Android手机实现课外自主学习大学软件测试课程的目的。目前,系统页面展示流畅,运行稳定,较好地完成学生用户注册与登陆、选择课程资源学习、习题测试与管理、在线交流与论坛等各项指标。目前,该系统已作本地面向小范围学习人群的软件测试课程SPOC学习工具,能充分融入到线上+线下的混合学习活动中。通过与用户反复沟通,该系统面向SPOC方面的一些细节性功能(例如个性化信息推送、学习评价、在线考勤与管理、学习数据分析等)还将会以Scrum敏捷开发方式,在后面的版本中陆续添加与完善。
在未来的工作中,还需要对该系统就两个方面进行后续研究。一方面,是对外接口与系统集成,如何通过把系统与本地校园内与其他应用系统(如教务系统、学生管理系统等)有效集成,实现数据交换及自主学习功能的扩展。例如,与校园内部统一身份认证平台实现校内统一身份认证,集成邮件系统和第三方社交系统(如微信、QQ)等[12]。另一方面,还要从促进学生的学习积极性出发,因为自主学习活动的成效很大程度上取决于学生的认知能力和学习兴趣,例如,可以把起到激励学习活动的学习游戏程序集成到系统中,添加在线小游戏(实行学习关卡计分奖励策略),在间隙之余让学生放松精神,提高学生的学习兴趣[3]。
从用户使用价值出发,采用基于Scrum敏捷方法开发Android客户端平台的课程自主学习系统,不仅缩短了开发周期,而且能较好地适应变化的用户需求,进一步提升用户的满意度。该系统能紧密结合本地校园学习环境,也为当前开展大学软件测试课程SPOC混合学习活动提供了有力的支撑。本文采用的基于Scrum敏捷方法也为同类校园Web学习系统(平台)的敏捷开发提供了一个可充分借鉴的案例。