APP下载

Scrum敏捷开发方法在跨境电商平台的实践

2018-01-23孙杰成颜锦奎

计算机技术与发展 2018年1期
关键词:开发方法代码电商

孙杰成,颜锦奎

(上海大学 通信与信息工程学院,上海 200000)

0 引 言

在Scrum框架中,人们可以解决复杂的自适应难题,同时也能高效并创造性地交付尽可能高价值的产品。Scrum框架由Scrum团队以及与之相关的角色、事件、工件和规则组成。框架中的每个部分都有其特定的目的,其对于Scrum的成功与使用至关重要。Scrum的规则把事件、角色和工件组织在一起,管理它们之间的关系和交互。

传统计划驱动型的瀑布模型将软件的开发过程划分为提出需求、制定计划、编码、测试等过程,相比之下Scrum将整个开发过程分为重复迭代式增量,称为Sprint冲刺。

1 Scrum敏捷开发方法

Scrum是一个重复迭代式增量敏捷开发框架,可以对客户提出的变化需求做出快速响应[1]。相比传统的计划型软件开发过程,比如以过程为核心的“瀑布式”开发方法,敏捷开发更加重视人在整个软件开发过程中的作用。Scrum于1995年由Advanced Development Methodologies,Inc提出,并在2001年“敏捷联盟(Agile Alliance)”形成后受到了更多的关注。2001年,以Kent Beck等为代表的敏捷开发拥护者共同签署了“敏捷软件开发宣言”,据Version One公司2013年的调查显示,在全球收集的3 501份调查报告中有88%的公司采用敏捷开发方法,Google、华为等大型软件公司也采用了敏捷开发[2]。Scrum名称来自于橄榄球比赛时,队员在争球时摆出的阵型,寓意为每个队员为了最后的胜利作为一个整体,一起去完成一个任务。为达到这种敏捷性,必须要坚持一些必要的设计原则和设计模式,敏捷的核心就是价值观、原则和实践[3]。

1.1 Scrum实践敏捷宣言

敏捷宣言中说到“我们总是在开发实践中探寻更加出色的敏捷方法,身体力行的同时也帮助他人”,由此建立了如下4条价值观:

(1)“个体和互动”高于“流程和工具”;

(2)“工作的软件”高于“详尽的文档”;

(3)“客户合作”高于“合同谈判”;

(4)“响应变化”高于“遵循计划”。

想要理解这四条价值观就要明白它的定义表示偏好,而不是可以彼此替代的选择,也就是说,尽管右项有其价值,但更加重视左项的价值。

Scrum很好地实践了敏捷的这4条价值观:

(1)个体与互动:自组织自管理的团队赋予团队以权利,同处一室,面对面交流,直接沟通,而非文档沟通;

(2)工作的软件:每个迭代可交付产品的增量;

(3)客户合作:直接与客户沟通需求,及时收集客户反馈;

(4)响应变化:每个迭代完成对于客户最有价值的功能,及时地基于用户反馈做出调整。

所以,通过这个实践可以给出一个Scrum的完整定义:Scrum是一个重复迭代式增量敏捷开发框架,由一个大约7个人的多功能,自组织的团队使用固定的迭代时长(冲刺/sprint)去开发可交付的产品增量。

1.2 Scrum中的“人”

Scrum方法中是以人为核心构建的,主要分成3个角色:产品负责人(product owner)、研发团队(team)和Scrum Master。产品负责人主要负责与客户沟通产品需求,以得到最大化商业价值为目标,决定产品路线,制定并管理项目的需求订单列表(project backlog)[4]。产品负责人需要根据商业价值调整功能的优先级,并且每一个sprint完成后要验收产品功能。任务(包括新功能、改进、缺陷等)的优先级由产品经过多个因素的分析后,独立判断决定。当迭代过程中出现更高优先级的任务时,首先这个任务肯定是出自产品经理之手,因为只有产品经理能够决定任务的优先级。在遇到这类任务时,请按照以下流程处理:将该任务的描述、类型、优先级等在产品清单中明确阐述,对于非Bug类任务,请Scrum Master、Tech Leader协调资源,评估任务的可行性和复杂度,并对任务进行初步的拆解或者细化;如果复杂度在当前剩余迭代中能够完成,就可以将任务加入当前迭代,(邮件)通知团队该任务已经加入迭代,请相关同事注意及时处理[5]。

研发团队是一支多功能团队,包括开发者、分析师、测试员等。每个人各有专长且能独立完成分析、设计、实现、测试和部署。他们归属于一个项目,同处于一个房间。研发团队是一支可以自组织和自管理的团队,自主承担开发任务,自主领取任务、安排工作,负责在冲刺结束前完成可交付产品增量。

Scrum Master负责保证所有人都能正确地理解并实施Scrum。Scrum Master要确保Scrum团队遵循Scrum的理论、实践和规则。原则上Scrum Master是由团队成员集体推选的,仅仅负责敏捷流程的实施和监督,最终目的是通过保证敏捷实施的质量,提高产品迭代开发的效率和质量。Scrum Master和产品负责人不能是同一人[6]。Scrum Master是一个Scrum项目成败的关键,但他并不是开发团队的管理员,而是服务于整个开发团队,为团队提供敏捷和Scrum的指导。在项目进行的时期,促成开发的流程,主要工作有组织会议,确保时间盒的执行和保持团队成员工作的可见性。当有其他项目干扰到Scrum的进程时,保护团队以防被外界干扰,维护Scrum的进程。Scrum Master以各种方式服务于开发团队,帮助开发团队创造高价值的产品;移除开发团队工作进展中的障碍以及在Scrum还未完全采纳和理解的组织环境中指导开发团队。

Tech Leader独立负责产品中一个子系统或模块;根据整体产品路线,规划、落实所负责模块的技术路线,推进团队开发进度;承担技术指导、技术支持和关键技术攻关;负责团队之间的沟通工作;负责团队建设;以身作则,实践敏捷开发。

Scrum角色如表1所示。

1.3 实施Scrum

Scrum分成三个步骤:

(1)项目启动。产品负责人根据用户现有需求制定产品路线,明确用户需求,将用户需求的价值最大化,根据需求的优先级管理需求形成产品的Product Backlog,那么各种类型的需求是如何制定的?目前经常接触到的任务类型,大致分为新功能(new feature)、改进(improvement)、缺陷(bug等)以及任务(task)。正常情况下,产品经理只能创建新功能、改进和缺陷;并且缺陷只能指向QA,目的是要经过QA验证;QA只能创建改进和缺陷;研发在开发中可以创建任务、子任务等;研发创建的新功能、缺陷要经过产品和QA的验证才能进入开发流程。由产品负责人在已经生成的Product Backlog中,选择要加入到Sprint Backlog的任务开始进行迭代。

表1 Scrum角色

(2)Sprint迭代过程。每一个Sprint开始的时候,项目相关人员(包括产品负责人、研发团队和Scrum Master)全部到场进行启动会[7]。产品负责人在会前将高优先级任务加入到产品清单,也可以在启动会最初开始是由Scrum Master和产品负责人协商决定这个Sprint将做什么。研发团队从产品清单里选择优先级最高的任务,研发团队中的每个人可以根据自己所擅长的技术领域,也可以根据自己在项目中最熟悉的模块入手,主动领取任务。如果有长度超过一个迭代的任务,研发团队人员应该告知产品负责人进行拆分。研发团队人员为每个领取的任务评分,将完成评分的任务放到产品清单。最后评审交付计划[8]。整个启动会时间要控制在1~2个小时以内。Sprint开始,Scrum中的所有成员要进行15分钟的每日站会。每日站会中,每个人向团队汇报进度,主要包括昨天做了哪些工作,今天要做什么工作和有什么障碍。要注意的是每日站会关注过程,不讨论任务细节,所有的问题线下讨论。一个Sprint结束后要进行评审会。评审会中产品负责人邀请Scrum团队和主要的利益攸关者参加,由团队成员向评审成员展示当前冲刺完成的功能。评审会成员对demo进行讨论并提问,产品负责人需要收集反馈并列入产品清单。时间限定在1~2个小时。评审会结束后,Scrum当前团队的所有成员参加回顾会。

(3)产品功能性测试,持续集成,持续发布。当整个产品完成了所有迭代,所有利益相关者参加产品验收会,当然这是在产品功能性测试通过后。产品验收成功后,软件产品进行集成发布到生产环境。但如果产品验收不成功,整个Scrum团队需要反思验收失败的原因和迭代过程中的缺陷及漏洞,并把这些经验添加到整个项目的wiki中由团队管理,最后把存在问题的功能重新加入到产品清单中,准备进行下一轮的迭代。

Scrum过程如图1所示。

2 Scrum在跨境电商平台的实践

2.1 跨境电商平台的背景

线下交易一直都是跨境电商的一个痛点,线下交易不仅过程周期长,手续繁琐,而且极其容易出错。所以自从2000年阿里巴巴电商开启了线上的市场需求后,电商平台如雨后春笋般涌现出来。近几年跨境电商平台成为电商发展的新方向,但由于客户与平台开发者由于地域和语言等障碍,开发进度缓慢,平台完成度不高以及开发出的平台与客户的需求有偏差等一系列原因,现将Scrum敏捷开发方法应用到跨境电商平台的开发迭代中,可以很好地解决上述问题。

图1 Scrum过程

2.2 平台架构

跨境电商平台需要解决的是在多种终端上建立起一个统一的交易平台,解决从选购到订单发货一站式服务。平台选择使用开源组织Apache提供的基于项目对象模型(project object model,POM)的Maven项目管理工具[9]。它包含了一个项目对象模型、一组标准集合、一个项目生命周期、一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。Maven可以让开发人员快速地构建一个项目,有效地解决包管理和项目发布问题,并且可以与持续集成进行无缝对接。对于大型系统,采用Maven作为项目管理工具,可以有效地进行分工协作。Maven有效地管理了项目对于外界jar包的名称和版本号等问题的依赖,也可以把现阶段开发项目的公共部分抽取出来当成对象模型,加入到所有的项目的依赖中。跨境电商平台的Maven依赖关系如图2所示。

图2 平台Maven依赖关系

将整个项目的名称定义成absolute,其中absolute-parent成为整个平台的根项目,包含其他3个项目,主要定义了本平台涉及到的依赖库及其版本。Absolute-website定义了平台的前台网站项目,主要包含客户注册登录模块、产品模块、订单模块和新闻模块等以客户为中心所要展示的项目。Absolute-admin定义了管理前台网站的后台服务项目,此项目主要针对前台数据进行管理。同时,Absolute-admin还进行了权限管理,财务、采购经理、销售经理和业务员登录到后台管理系统时,只能进行对应自己权限的操作,使得整个平台分工明确,高效运转。最后介绍这个架构最核心的部分Absolute-core。此项目定义了整个平台的实体类,包含基本数据、客户、产品、询价和订单等表结构的设计,Absolute-admin和Absolute-website都与Absolute-core相关,也就是说平台的前台网站和后台管理系统共用一套表结构,这样设计的目的是加快整个平台的开发速度,而且当前后台项目需要联通时,这样的设计更加符合整个业务逻辑,也更加方便并且有利于前后台逻辑代码的联调。

2.3 演进式设计

(1)多层测试。Scrum敏捷开发中的一个核心就是测试。将整个平台设计进行分层,分成基础服务层、业务层、Web层和页面展示层。每一层必须包含单元测试,以保证代码的覆盖率,更加明确地反馈出代码的质量与缺陷。之所以要将整个平台分层设计并进行多层测试,其目的就是Scrum敏捷开发的核心理念:适应。适应产品开发过程中的每次需求改动,保证每次需求改动或者添加不影响已有的功能,而且使调整工作可以尽快执行。

(2)持续集成和测试驱动开发。对于Scrum敏捷开发方法来说,持续集成(continuous integration)和测试驱动开发(test-driven development)同样是其两大基石。持续集成就是频繁地将代码合成到主干,尤其是在多人开发并使用GitLab这种代码管理系统时,每个人都在自己的分支上进行编码,但是如果同时有多人在编辑同一个文件,这样就容易造成冲突[10]。而持续集成就是要解决这样的问题。它的好处是快速发现错误,防止分支大幅偏离主干。持续集成的目的,就是让开发可以快速迭代,在保证开发速度的同时还要兼顾质量,这正契合了Scrum所提倡的敏捷原则。它的核心措施是,代码集成到主干之前,必须通过自动化测试,也就是说每一次的代码提交都触发了多层测试。哪怕只是有一个单元测试用例失败,就不能集成到主分支代码[11]。

测试驱动开发的基本思路就是通过测试来推动整个开发的进行。而测试驱动开发技术并不只是单纯的测试工作。测试驱动开发就是通过编写测试用例,先考虑代码的使用需求(包括功能、过程、接口等),而且这个描述是无二义的,可执行验证的[12]。通过编写这部分代码的测试用例,对其功能的分解、使用过程、接口都进行了设计。但是在实际应用到跨境电商平台上时,发现测试先写测试代码并不高效,此时对需求的了解还不够充分,即使写出了测试代码,当写功能代码时经常还会修改原先的测试代码,这样反复的过程并不高效。为了提高Scrum敏捷开发方法以及测试驱动开发的效率,把书写测试文档作为测试驱动开发的开始。通过书写文档,梳理整个需求链路,确定类、方法的名称,以及方法的返回值和参数列表,然后按照文档先写测试代码,再写功能代码,效率明显提升[13]。

(3)重构与简洁设计。及时重构。重构时坚持单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖反转原则,及时避免设计糟糕、逻辑混乱的意大利面式代码[14]。保证设计演进,以满足每次需求改动或者添加。简洁设计保证不过度设计以致难以重构。

3 结束语

针对传统的计划型驱动开发模式不考虑需求变化,随着计划进行对需求的修改代价越来越高等致命缺陷,把Scrum敏捷开发方法引入到跨境电商平台的开发过程中[15]。让开发能适应变化,将反馈代码质量,反馈产品需求是否满足,反馈迭代流程是否有效,反馈设计思路是否正确等Scrum的优点通过演进式设计都运用到平台的开发过程中,明显提高了效率,保证了迭代质量。

[1] SCHWABER K, BEEDLE M.Agile software development with scrum[M].[s.l.]:Prentice Hall,2001.

[2] ALLIANCE A. Manifesto for agile software development[J].Lecture Notes in Computer Science,2001,37(12):26-34.

[3] 胥 康.Scrum方法在软件项目管理中的应用[J].信息系统工程,2017(1):55.

[4] 丁顺莺.基于Scrum敏捷方法的出租屋用电管理系统研究[J].计算机时代,2016(11):8-10.

[5] 尚会斌.CMMI和敏捷开发过程的分析比较[J].通讯世界,2016(13):294-295.

[6] 王万意.Scrum敏捷开发在线教育系统[J].电子技术与软件工程,2016(8):70-71.

[7] 蔡振凡.基于J2EE的跨境电商平台的设计与实现[D].长春:吉林大学,2016.

[8] 陈国栋,罗省贤.Scrum敏捷软件开发方法实践中的改进和应用[J].计算机技术与发展,2011,21(12):97-99.

[9] 芮雄健,王忠民.基于敏捷软件开发方法的基金管理信息系统开发[J].计算机应用,2004,24(11):162-165.

[10] DINGSØYR T,NERUR S,BALIJEPALLY V G,et al.A decade of agile methodologies:towards explaining agile software development[J].Journal of Systems & Software,2012,85(6):1213-1221.

[11] CMMI Product Team.CMMI for development,version 1.2[M].Pittsburgh:Carnegie Mellon University Software Engineering Institute,2006.

[12] 谢 琳.基于SCRUM的小型团队软件项目开发应用与研究[D].长春:东北师范大学,2011.

[13] 张智海,周国祥.Scrum方法的研究与分析[J].合肥工业大学学报:自然科学版,2010,33(2):197-200.

[14] 张敬周,钱乐秋,朱三元.Agile方法研究综述[J].计算机应用与软件,2002,19(6):1-9.

[15] 施拥军.上海贝尔敏捷SCRUM模式下软件质量改进措施的研究[D].上海:复旦大学,2013.

猜你喜欢

开发方法代码电商
电商助力“种得好”也“卖得火”
高中英语校本教材的开发方法
创世代码
创世代码
创世代码
创世代码
电商鄙视链中的拼多多
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
电商下乡潮
基于模型开发方法(MBD)的ABS控制器开发