APP下载

基于敏捷方法的校园拼单购物系统分析与设计

2018-02-02郭峰麻强

中国新技术新产品 2018年2期

郭峰+麻强

摘 要:在拼单购物系统开发过程中,应用了敏捷方法思想和原则,取得了较好的效果。在管理和过程方面应用Scrum原则和方法,在具体实施方法上采用极限编程的多项实践,在开发过程中采用版本控制工具来管理变更,提高了系统开发效率和软件质量。

关键词:敏捷方法;软件过程;拼单购物系统

中图分类号:TP311 文献标志码:A

0 引言

本文项目是北京市大学生科研与创业项目,由在校本科生自主选题,并在指导教师指导下开展研究与开发工作。

近十年来,电子商务发展非常迅猛,尤其是BtoC形式的在线购物对实体店造成巨大冲击,知名的购物平台如淘宝、京东、亚马逊、当当等每天产生大量的在线订单。但是随着人力成本的增加,购物平台的免运费限额逐步提高,网民购物时颇费脑筋,有时需要买的商品达不到免运费限额,只好多出运费或者拼凑一些暂时不需要的商品以节省运费,同时网购商家经常搞一些满减等优惠活动,但是通常一位用户如果参与该活动会出现购买的商品数量超出消费能力,于是拼单购物就成为受大众欢迎的一种购物形式。在这种背景下,由北方工业大学计算机专业5名本科生组成的开发小组,开发服务于移动拼单购物平台。

在软件开发过程中,开发团队往往对写代码比较重视,为了追求开发进度往往会忽略组织管理等工作,容易在工程进度、工程质量方面造成负面影响。本项目采用敏捷方法,取得了较好的效果。

1 敏捷方法概述

敏捷方法是对一类方法涵盖性术语。某些软件项目具有需求易变、快速交付的特点,传统的工程化方法过于严格,一些经验丰富的软件设计人员在开发实践中分别总结出多种独特而且有效的软件开发方法,被业界概括为敏捷软件开发方法。敏捷方法具有类似价值观,一般都具有以人为本、循环迭代、响应变化等特点,目标在于能高质量地快速交付客户满意的软件系统。其中最就有代表性的获得广泛应用的方法是“极限编程”和“Scrum”。

在《解析极限编程——拥抱变化》一书中提出了极限编程方法,极限编程包括了一组简单、具体的实践,这些实践都是编程活动中常见的技术方法,结合在一起形成一个敏捷开发过程。这些实践之间存在相互关联,共同支撑敏捷方法的价值观,如平穩的工作效率体现以人为本,根本目的还是要提高开发软件的效率和质量,现场用户体现与客户的合作重于合同的谈判,代码规范、测试驱动开发、集体拥有代码项目关联,集体拥有代码必然大量涉及项目成员之间的代码交流,代码规范使代码的可理解性强,测试驱动开发限制修改代码的随意性,持续集成、小版本发布使得用户能够尽早发现问题。极限编程所包括的实践不是特有的,而是一些通用的经过实际应用证明有效的开发方法,可以在软件开发中直接应用,也可以扩充一些实践,其中的某些实践也可以根据项目的各方面特点进行调整修改。

极限编程偏重技术方面,在管理和过程方面比较薄弱,Scrum起到互补的作用。Scrum提供了一个增量式的、迭代的过程框架。在基于Scrum的软件项目开发中,若干称为Sprint的较短的迭代组成一个完整的软件开发过程。每个Sprint的长度根据软件的复杂程度进行调整,一般在2~4周。Scrum方法中,软件需求通过产品Backlog来描述和管理,产品backlog采用用户故事的形式进行描述,这些用户故事按照商业上的优先级进行排序。采用Scrum的开发团队首先针对商业价值高的需求展开开发工作,将最高优先级的需求分配到最初的Sprint中,在后续的Sprint迭代周期中逐步实现较低优先级的需求。在每个迭代过程中,召开Sprint计划会议,对挑选出的需求进行讨论、分析和估算得到相应的任务列表,这些任务列表称为Sprint backlog。每个Sprint的工作完成之后,开发团队提交可交付的增量产品,这一产品通过评审意味着本次迭代结束。

2 基于敏捷方法的开发过程

本项目规模不大,需求不够清晰,需要在开发过程中逐步确定,在开发过程中,采用了极限编程和Scrum相结合的方法。在软件过程上采用了SCRUM中的迭代周期,具体的实现技术上采用了极限编程的最佳实践,如简单设计、测试驱动的开发、平稳的工作效率、持续集成等。

2.1 确定需求

从需求层次角度来看,本系统业务需求是明确的,但用户需求较难确定,由于本系统并非针对具体明确的用户进行开发,只能采用调查问卷的形式向潜在客户了解需求。

为便于准确了解需求及应对需求的变化,极限编程采用现场客户实践加强与客户的沟通。本项目潜在的用户无法通过驻留开发现场的方式参与系统的开发,通过调查问卷的方式了解潜在客户的需求,在开发过程中通过电话或者免谈的方式与潜在客户沟通,逐渐确定需求细节。

系统隐喻是极限编程方法中用于各方利益相关者沟通的基础,便于各方人员对需求有一个整体上的共同理解,由于对系统的业务需求比较清楚,在开发过程中没有特意构造一个系统隐喻。

2.2 简单设计

简单设计就是简化传统方法的设计过程和设计产品,能够表达主要的思想,而不追求文档的完整性和丰富性。基于简单设计的实践,本项目系统架构图如图1所示。

软件系统分为3个部分:基于安卓的移动客户端、基于Windows操作系统的后台服务器、存储数据的数据库系统。移动客户端通过HTTP协议将代表拼单信息的数据发送到后台服务器,后台服务器访问数据库进行数据操作,数据库系统处理访问请求后返回数据集,后台服务器根据返回的数据集进行处理并返回操作结果。

根据系统的功能需求,获得系统的软件结构图,如图2所示。

2.3 编码环节

在编程环节,本系统采用了测试驱动开发、编码规范、集体拥有代码、重构这些实践。

测试驱动开发目前软件开发中的常见做法,极限编程将其列为12个基本实践之一,按照一般的开发流程,需要先实现功能模块的代码,然后进行测试,测试驱动开发采用了逆向的技术路线,在编写功能代码之前要求先写出测试代码。系统基于Java进行开发,JUNIT包提供了单元测试的相关类,在设计工作完成之后,首先开发了核心类的测试代码。

在开发及维护过程中,由于需求的变化和调整或者设计缺陷不可避免地会出现修改代码的情况,随着修改量的增加,代码结构会逐渐混乱难以理解。重构就是提高代码可读性可礼节性的一种重要手段,重构是在不改变程序功能的情况下,对程序结构进行调整和优化的过程。按照极限编程的要求,在软件开发过程中,代码处于团队共享状态,每个人不只对自己写的代码有所有权,对任何团队成员写的代码也具有所有权,从而允许团队中的任何人有权利重构任何一段代码,但是要求重构后的代码一定要通过测试,测试驱动开发就变得非常重要,为重构以及代码共有提供了技术基础。

在编码规范方面,项目组制定了具体的程序风格,包括编程环境的背景色、文本的颜色字体、缩进的格式、注释的类型和要求、标识符命名的规范、界面元素的颜色样式等等。

因为团队成员少,极限编程中著名的也存在一定争议的结对编程,本系统开发过程没有采用。

2.4 人员管理

软件项目开发不是全速短跑,而是马拉松长跑,在人员管理方面采用了极限编程保持平稳的工作效率这一实践,更容易提高整体的工作效率和质量。在开发过程中,项目组成员尽量不通过加班加点解决问题,而是保持一种稳定的进度。

在scrum框架中,团队成员分为3种角色:产品负责人,项目经理和团队成员。项目组成员按照3种角色进行了分工。

2.5 开发过程

本系统开发周期为1年,5位同学参加该项目,由于还有上课任务,在scrum过程框架的基础上做了一些调整。系统开发过程如下:

(1)确定需求:首先通过调查问卷,小组会议的形式讨论系统的功能需求,并以用户故事的形式进行描述,将获得的用户故事按照优先级进行排列,形成产品需求列表,即Product Backlog。

(2)然后根据产品需求列表,估算待开发系统的规模,以千行(KL)为单位进行衡量,以系统规模为基础做初步的进度安排。

(3)接下来开始一个Sprint, 每个Sprint启动时召开Sprint计划会议,该会议的任务是从系统的产品需求列表中挑选一个用户故事作为本次迭代完成的目标, 本项目为每个Sprint迭代制定的时间周期是两个星期,然后细化本次选中的用户故事,形成更小粒度的用户故事,这些新的用户故事就是本次迭代要完成的任务,称为Sprint Backlog;根据Sprint Backlog為团队成员分配任务,每项任务应该在两天内能完成。

(4)上述Sprint迭代过程持续开展,直到所有的产品需求都已实现为止。

站立会议是敏捷方法中的显著特色,体现了高效灵活以解决问题为目的而不追求形式的特点,站立会议如字面所示参加会议的人员站着开会,每次会议控制在15分钟左右,团队成员介绍昨天的任务完成情况,并向所有成员承诺今天要完成什么任务,遇到不能解决的问题也可以在会议上提出,每个人介绍完成后,要更新自己的Sprint燃尽图,由于还有上课任务,本项目没有采用每天开会的形式,每周碰面一次,在开发过程中微信QQ交流为主。

2.6 版本控制

在软件开发尤其是团队形式的软件开发过程中,会产生大量的文档和代码,对文档和代码的管理和控制是一个关键的任务。这个任务如果靠人工完成,当软件规模较大时,会造成极大的混乱,由于软件开发中的文档和代码会不断修改,人工管理的方式只能通过对目录或者文件编号进行,难以有效地记录、跟踪、查找文档和代码的变化。本课题开发过程中采用的版本控制服务器软件为VisualSVN Server,以TortoiseSVN作为客户端,这两者都是免费的,项目组将开发过程中的文档和源程序保存在服务器端的中央版本库,服务器能够自动记录对文档和代码的修改,自动维护版本的变化,开发人员只需要从服务器上下载和上传相关文档和代码即可,简化了管理的难度,提高了开发效率。

结语

通过在拼单购物系统的分析和设计中应用敏捷方法,对软件工程这一学科有了更为深刻的认识,一方面在软件开发中要采用工程化的方法,另一方面要根据软件及开发团队的特点,采用灵活高效的方法和技术。敏捷方法和传统的软件方法不是对立的,存在一定的区别也有密切的联系,根本目的都在于如何提高软件开发的效率和质量。

参考文献

[1]普雷斯曼,郑人杰.软件工程,实践者的研究方法[M].北京:机械工业出版社,2011.

[2]桑大勇,王瑛,吴丽华.敏捷软件开发方法与实践[M].西安:西安电子科技大学出版社,2011.