APP下载

基于敏捷开发的SSM Web 应用开发实践

2020-09-29龚兰兰凌兴宏

实验技术与管理 2020年2期
关键词:开发人员校友代码

龚兰兰,凌兴宏,2

(1. 苏州大学 文正学院,江苏 苏州 215006;2. 苏州大学 计算机科学与技术学院,江苏 苏州 215006)

Web 应用开发实践需综合前端、数据库、程序设计语言和框架等多门课程知识,是计算机专业学生进行完整系统开发的实践课程。目前项目实践的内容都是以较为传统的JSP+Javabean+Servlet 形式进行,缺乏对行业流行框架技术的理解和应用。另外,在系统开发过程中,采用传统的瀑布开发模型,效率较低,流程不规范,缺乏有效的管理和质量控制手段。本文将SSM 轻量级框架引入Web 应用实践,进行系统开发,同时采用敏捷开发模式进行开发流程的管理,指导学生通过规定环节循序渐进地完成项目的开发。

1 SSM 框架

SSM 是Spring、Spring MVC 和MyBatis 集成的框架,是目前比较主流的Java EE 企业级框架,适用于搭建各种企业级应用系统[1]。Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架[2]。它可以装载bean,利用这个机制,就不需要在每次使用某个类的时候进行初始化,很少用到关键字new[3]。Spring MVC 分离了控制器、模型、分发器以及处理程序对象的角色,这种分离让它们更容易进行定制。MyBatis 是一个基于Java 的持久层框架, 是对jdbc 的封装,它让数据库底层操作变得透明[4]。MyBatis 使用XML 或注解用于配置和原始映射,通过配置文件关联到各实体类的Mapper 文件,Mapper文件中配置了每个类对数据库所需进行的sql 语句映射[5]。可以说,MyBatis 是一个用来帮助管理数据增删改查的框架。

SSM 是标准的MVC 模式,将整个系统划分为View 层、Controller 层、Service 层和DAO 层4 层[3],用Spring MVC 负责请求的转发和视图管理,用Spring实现业务对象管理,用MyBatis 作为数据对象的持久化引擎[5]。由于DAO、Service 两层之间的低耦合特性,在开发时要独立进行;由于Controller、View 两层之间的高耦合特性,在开发时需要关联进行。

SSM 框架是迄今颇为主流的企业级架构方案,其简便易懂的特点是被许多公司广泛使用的重要原因。

2 敏捷开发

传统的软件开发一般采用瀑布模型,需求文档是架构设计的主要依据,前期定下需求和设计后,进行编码实现,开发过程中按照前期的设计进行。这种开发模式将开发过程和用户的需求分割开来,面对后期用户需求的改变,变更成本和复杂度较大。

敏捷开发(agile development)是一种以用户需求为核心,采用迭代、循序渐进的思路进行软件开发的方法[6],它的核心思想在于快速、增量式地交付可工作的软件。

常用的敏捷开发有XP 和Scrum 两种方法,本文采用Scrum 方法进行敏捷开发。Scrum 是一个包括一系列实践和预定义角色的过程骨架,是一种流程、计划、模式,用于有效率地开发软件[7-8]。

图1 是敏捷开发方法Scrum 的流程。项目的功能需求被分解成若干个用户故事(user story),整个项目分几个迭代周期来完成,每个迭代周期(sprint)在制定计划时选择实现其中一个或两个user story。每个user story 又被拆分成若干个迭代任务(task),开发人员每天完成其中的几个task。经过2~6 周的迭代过程,具备可视、可集成、可工作的特征,形成可交付的软件增量,团队成员每天讨论前一天完成的工作和当天的任务。

图1 Scrum 开发流程

在敏捷开发中,需求按迭代式进行收集,把原先软件过程前期的架构设计,分散到整个敏捷开发软件过程中。

采用Scrum 循序渐进的迭代式开发,降低了开发难度,对于没有开发经验的学生来说,更有利于引导他们规范、有序地进行项目开发,有利于他们掌握系统的开发流程。

3 Web 应用敏捷开发实施

在Web 应用开发实践中,使用SSM 框架进行校友管理系统项目开发,采用Scrum 敏捷开发模式对整个开发流程进行管理,期望达成以下目标:(1)理解和掌握SSM 框架,使用框架对Web 系统进行设计和实现;(2)参与完整的系统开发流程,从需求分析、用户界面设计到业务逻辑和数据存储;(3)养成良好的专业素养,遵循软件开发规范,能够利用各种开发工具辅助编程、纠错和测试等;(4)掌握迭代开发的方法,学会将复杂系统分解成可执行的子任务,迭代实现分期目标;(5)提升团队组织和协作能力。

3.1 系统架构设计

校友管理系统主要包括:前台的校友信息采集、电子校友卡的注册和生成、活动报名等功能;后台的校友信息查询、审核、活动发布和统计等功能。

项目采用SSM 的4 层架构进行开发,将系统划分为View 层、Controller 层、Service 层和DAO 层。

其中View 层采用较流行的BootStrap 框架进行界面设计,Dao 层由Mapper 文件实现,Controller 层、Service 层、Dao 层之间的数据以Pojo 对象进行封装传递(见图2)。

图2 SSM 框架流程

在实现的过程中,具体编写流程如图3 所示。其中View 层(JSP 页面)和Controller 层之间相互关联,在编译开发时,两者必须同时进行。

3.2 用户故事系统需求划分

在Scrum 开发流程中,整个软件产品的需求被拆分为若干个用户故事(user story,简写为US),每个user story 主要描述:作为某一角色我需要做什么,以达到什么目的(as a ……I need to……so that……),即从用户的角度描述不同角色对于产品功能的具体需求。按照这样的拆分原则,我们将校友信息管理系统拆分为若干个用户故事,如表1 所示。

图3 SSM 各层开发流程

表1 产品用户故事

3.3 迭代计划

使用Scrum 方法,整个项目开发分成几个迭代周期(sprint)来完成。在开发过程中,需求分析也是迭代进行的,每个迭代周期针对当前的目标需求进行设计,随着每次迭代的进行,逐步调整架构设计。

每个迭代可以选择一到两个user story 来完成。在校友系统中,每个sprint 选择一个user story 为目标来进行开发,整个系统共分为4 个sprint 来完成。下面以其中的第一个sprint 为例,制定迭代计划,进行任务分解。一般由Scrum master 来负责迭代计划的制定,这里可以由教师或小组长来负责。

为了使学生更好地理解和进行Scrum 开发,克服畏难心理,增强成就感,在进行任务分解时,应尽可能使每个任务task 较小,可执行性较强,一般每个task预估完成时间最好在1~3 h。

制定第一个迭代计划时,根据SSM 框架的开发流程,将普通校友功能的开发工作分解为11 个task(编号为100-110),并且预估了每个任务的完成时间,如图4 所示。然后由开发团队的成员进行任务认领,或由Scrum master 进行任务分配。每个task 都可能处于待做(to do)、进行中(in progress)、审查(review)、测试(user test)、完成(done)和 待定(pending)等状态之一。

图4 迭代计划

开发人员开始做某个task 的时候,要把状态更新到in progress,做完后由开发组长(助教或教师)负责代码审查(code review),然后进行功能测试,测试完成后可以更改为done 状态。其中,在审查或测试阶段发现任何问题,可以暂停状态更新,并创建issue提醒相应的开发人员解决问题,暂时解决不了或者无法确定的更新为pending 状态。

在迭代开发过程中,团队成员每天开例会,讨论前一天完成的任务和当天要做的任务,以及开发过程中遇到的问题。在校友系统开发过程中,其他几个sprint 对应的迭代计划制定过程类似,不再一一叙述。

3.4 过程控制

在团队开发的过程中,尤其是在Scrum 开发流程下,为了更好地进行项目管理和过程控制,以下几个问题必须解决:(1)任务进度的管理;(2)开发人员代码的提交、合并;(3)版本的控制。为解决这些问题并有效提高开发流程的管理效率,必须借助一些工具。

TFS 或者Jira 是目前采用较多的两种项目管理与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域[9]。借助这些管理工具,能方便我们制定迭代计划、进行任务分解和任务状态跟踪等,将大大提高管理和开发的效率。校友管理系统使用Jira 作为Scrum 开发流程管理工具。

代码的版本控制问题是所有开发团队都不得不面临和必须解决的,即使不采用敏捷开发流程,即使没有其他项目管理工具,版本控制都是必不可少的。目前版本控制工具很多,本系统开发主要使用较为主流的Git作为版本控制工具,使用Gitlab 搭建代码库。

3.5 质量控制

在以往的项目开发过程中,由于学生缺乏开发经验、没有形成良好的代码编写习惯,又缺乏统一的标准和过程管理,往往导致项目的代码质量较差,难于维护[10]。

Scrum 开发流程比较重视质量控制。要求开发人员每天开始新的开发工作前,先从代码库拿取最新代码与自己本地代码合并,然后进行开发工作。完成一个task 后提交自己的代码到代码库之前,一定要确保提交的代码是可以运行的,没有任何bug,否则会影响其他开发人员的开发工作和整个系统的运行。

在迭代过程中,可以采用以下步骤来保证和提高整个项目的代码质量:统一编码规范、代码样式;静态代码分析(static code review);单元测试;持续集成;代码评审和重构(review & refactor)[11]。

在系统开发过程中,为了保证代码质量,要求学生遵守良好的编码规范、代码样式,使用静态代码分析工具FindBugs 检测Java 代码质量。FindBugs 不需要运行代码,可直接对Java 文件和Class 文件进行分析,通过一些检查条件的设置,即可快速找到代码中的错误和潜在缺陷[12]。

另外,在迭代计划中设有专门的评审环节,主要是对提交后的代码做评审(code review),检查提交是否规范,是否存在其他问题。在code review 过程中发现问题后,可以建立相应的issue 或task,分派给对应的开发人员进行代码重构,待问题解决后可以更新task 的状态到用户测试。

在测试过程中,一方面是通过写单元测试案例对代码功能进行测试,借助测试工具检查代码覆盖率;另一方面是用户测试,主要是从界面操作对系统的功能进行测试。其间发现任何问题、需求变动或产生新的需求,都可以在迭代计划中建立对应的task,进行迭代需求分析和设计。

3.6 项目评审

传统的项目考核一般是在项目结束后验收软件作品,学生进行展示和答辩,作为对学生最终考核的依据。采用敏捷开发流程后,考核涉及整个开发流程的多方面内容: (1)完成的任务数量和难度。在项目管理工具Jira 里制定的迭代计划,每个任务的执行人和预估时间都是公开的;(2)提交(commit)的信息。在版本库Gitlab 里面可以看到每次commit 的时间、人员等信息。(3)代码质量。可根据代码评审时发现的问题数量及利用代码静态分析工具时的评分等作为考核参考。(4)项目进度。实际花费时间和预估时间的差,在Jira 系统中可通过燃尽(burn out)图体现。(5)软件功能实现情况。

通过以上5 个方面的考核,对每个开发小组进行评分,在考虑小组整体完成情况条件下,针对每个学生具体完成任务的数量、代码质量和开发时间等分别评分。

4 结语

将SSM 轻量级框架引入Web 应用开发,以校友系统为例进行任务驱动的案例式教学,旨在使学生学习和掌握目前流行的企业级架构框架,对多门专业课程进行综合理解、应用,提升专业知识水平和系统开发技术。

系统开发采用敏捷开发的Scrum 流程,通过用户故事分解、迭代计划制定、任务分解等过程,将一个复杂的项目分成几个子项目来迭代完成。每一个迭代周期只针对当前的目标进行需求分析、设计和实现,引导学生循序渐进地完成一个系统的开发,降低了完整系统开发的难度,提高了学生的开发兴趣和开发能力。

让学生体验了企业真实的开发流程,学习和掌握了除编程以外的过程控制、质量控制等技术手段和工具使用,提高了开发效率和软件质量,掌握了企业主流的技术工具,实现了与行业及市场的接轨,提高了理论知识应用能力。

总体来说,引入企业级应用框架技术及敏捷开发流程进行实践教学,使学生更加贴近企业真实开发环境,激发了学生的学习兴趣和积极性,从整体上提升了他们对工程问题的分析能力和解决能力。

猜你喜欢

开发人员校友代码
学习校友大名人 争做校园小名人——澄江中心小学以校友大名人引领校园小名人成长
校友风采
Semtech发布LoRa Basics 以加速物联网应用
校友风采
创世代码
创世代码
创世代码
创世代码
“互联网+”校友资源开发探索思考
后悔了?教你隐藏开发人员选项