农行基于TFS工具的敏捷转型实践

“春天工程”项目组是应用开发二部最早采用敏捷模式的项目组,项目组在项目推进过程中使用Scrum框架,结合“看板+站会”形式,积极探索项目推进新措施。结合TFS工具逐步实现了电子工具与物理看板的有机融合,并在过程管理、版本管理、交付质量三大方面取得了突破。


物理看板作为“春天工程”项目组日常管理的核心工具,实现了从“影响地图”出发的需求研制与分析,利用“用户故事地图”将需求拆分成用户故事及任务,以两周一迭代的频度交付产品。


640?wxfrom=5&wx_lazy=1


截至目前,项目组已完成15轮迭代。“春天工程”团队依据自身特点,逐步摸索形成更加合理的团队组织结构,并明确了Scrum 主管、产品负责人(PO)、产品设计负责人、开发团队负责人(TL)等角色的职责定义。


敏捷宣言中有这样一句话:“个体和互动高于流程和工具”。物理看板有助于团队的互动和协作,有助于褒优贬劣,营造竞争氛围。将物理看板置于工作区内,所有人高度可见,以清晰把控和推进工作进度。尤其在试点初期,项目组基于项目具体情况,对看板系统作出变化调整。项目组在敏捷试点中深刻体会到物理看板的强大优势。


为进一步节约人力成本,沉淀历史数据,项目组不断摸索,结合TFS工具提供的强大功能,逐步实现了电子工具与物理看板的有机融合,在工作项、拉入请求、部署工作流等方面持续研究实践,最终通过七项措施,在过程管理、版本管理、交付质量三大方面取得了新的突破。


成果一:TFS工作项与物理看板相结合,使过程管理变得更加容易


物理看板具有易于实施、直观灵活、沟通快捷等特点,但也存在一些不便:


1.从物理看板上无法清晰看到用户故事与实施任务的层级对应关系2.已完成的需求和故事归档后,在需要复盘时查找起来比较费时3.过程数据的收集比较困难,需要人工整理便签并手动归档4.每轮迭代交付版本时,代码与故事的对应关系不够清晰


为了改进上述问题,充分发挥物理看板的优势,项目组启用了TFS工作项来管理需求和用户故事,在需求、用户故事和代码间建立了清晰的关联,过程数据的收集也变得更加容易。


措施一:通过TFS工作项管理需求和用户故事


使用TFS工作项管理需求和用户故事后,在积压工作中,可以清晰的展现需求与故事的对应关系。通过累积流图,可以清晰的统计出需求与故事的交付情况,便于及时发现问题,精准把控迭代进度。


640?


每日站会时,PO会根据物理看板上需求和故事的完成情况,拖动电子看板上对应工作项,及时更新工作项状态。PO只需在TFS中建立简单的查询,迭代评审回顾会时便可及时统计出迭代故事的完成情况,无需再进行人工统计。


640?


需要对用户故事复盘时,可以直接按迭代序号,查找出要复盘的需求和故事,操作简单、且清晰明了。


措施二:通过TFS工作项实现代码关联


通过TFS工作项维护需求和用户故事以后,开发人员只需输入工作项ID选择关联工作项,便可实现用户故事和代码的关联。在构建程序版本进行分支合并时,也能够清晰地知道本次提交的代码实现了哪些需求及用户故事。


640


成果二:使用代码库和拉取请求,让版本管理变的清晰有效


项目组前期使用git库进行代码管理,遇到以下瓶颈:


1.因项目包含的模块众多,开发过程中测试版本的匹配相对模糊2.多人开发的情况下,缺乏便捷的代码评审机制,评审后难以追溯代码的修改情况


为了解决上述瓶颈,项目组做了以下实践。


措施三:通过代码库拆分,实现代码隔离


项目组按模块对代码库进行了拆分,将原来的一个git库拆分为17个独立的git库,实现了不同模块代码的隔离,便于各模块独立更新代码,易于版本匹配。同时,基于Master分支分离出测试分支,实现开发、测试、投产代码的全隔离。


640?


措施四:设置TFS分支策略,保证代码评审简单有效


项目组在dev与rel,rel与Master分支间分别设置TFS拉取请求,在迭代中使用拉取请求的diff功能进行代码评审。代码经过评审并完成集成测试后合并至rel测试分支,进而完成部署版本的构建。


以dev分支为例,当开发人员提交本地代码至dev分支时,在拉入请求中可以清晰的看到上次合并以来所有的分支提交情况。同时,拉取请求还为代码评审工作提供了清晰的对比界面,在界面中评审人员可以直接在代码中添加评审意见,并设置意见的状态。代码的作者或其他评审人员可以直接对意见进行回复。程序作者可以根据实际情况把评审问题的状态置为“已解决”、“不是问题”、“已关闭”等。


640?


结合TFS分支策略,强制要求代码经过评审且审阅者批准后才能完成拉取请求,进行分支合并操作,保证了代码的质量。


640?


措施五:建立BUG分支,通过拉取请求实现问题修复


在测试过程中遇到问题时,项目组会基于测试分支(rel分支)新建一个BUG分支,BUG修复完成后提交至测试分支时创建一个拉取请求,通过拉取请求将修复后的代码提交至REL分支。代码归并至rel分支后,通过diff将完成修复的代码回退至dev分支,保证各环境代码版本的准确无误。


成果三:利用TFS部署工作流,提高交付质量和频率


在部署过程中,项目组陆续发现了以下不便:

1、开发、测试和投产代码构建缺乏隔离机制,可能会将开发中未经测试的代码带入生成分支;


2、项目组前期采用的是IDE手动构建WAR包,部署三个模块耗时较多,影响项目组的开发效率。


措施六:先隔离再归并,持续集成,实现部署过程自动化


为优化部署流程,项目各模块在自己的git库中通过拉取请求将迭代完成的代码匹配成正确的版本,归并至rel分支,同时触发自动构建和自动部署,持续集成,保证了发布版本的正确性。部署过程自动化,释放了人力成本,保证了版本正确,提高了部署效率。


640?


措施七:利用仪表盘功能,便于查看每日构建及部署完成情况


项目组rel分支自动构建和部署的基础上,对dev分支配置了每日构建和部署,并在项目首页添加了构建情况一览,可以清晰的看到每日构建的完成情况。


640?


总结


通过上述七项措施,春天工程项目组实现了需求和用户故事的的电子化跟踪,结合物理看板的使用,项目进度有了清晰的把控,度量数据的收集变得更加容易。通过代码库的拆分、需求及故事同代码的关联、TFS拉取请求及分支策略的运用,项目组建立了代码版本管理机制。通过自动构建及部署流水线的运用,提高了团队的持续集成和交付能力。


项目管理办公室与应用开发二部密切协作,持续深化产品经理思维,努力实现任务驱动型团队向自组织团队转变。目前应用开发二部敏捷试点项目已推广至8个,每个项目根据自身特点,增加电子看板试点,结合影响地图、用户故事地图、TFS、AXURE等一系列方法和工具,不断探索改进,团队分工更加明确,组织结构更加合理,研发效率稳步提升。


640?

640?


我们将会继续探索实践,坚持总结分享,希望所有试点团队能够少走弯路,尽快找到适合自己的敏捷模式。


原文地址:https://mp.weixin.qq.com/s/0uwqLiyGBcQ1sY4AQhPMmg


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6、XML数据处理

1、处理xml请求 两种方式,一是直接将请求体数据转成Document对象: 二是定义自己的解析格式将请求体进行解析: 2、返回xml格式数据响应 设置响应头格式为application/xml类型

.NET Core:新的快速开发平台

.NET Core 今年已经发布了 2.0 版本了。技术雷达最近将 .NET Core 从“评估”移到了“试用”阶段,意味着运用这项技术的风险在不断减小。本文将简要介绍基于 .NET Core 的快速开发的方式。.NET Core 产生于 2014年,是一个不折不扣的新开发平台。SmallTal…

7、play中的文件上传

1、基本的文件上传处理 将form的类型设置成multipart/form-data&#xff0c;请求的方式必须是POST类型&#xff0c;实例如下&#xff1a; 请求发到controller&#xff0c;controller中处理&#xff1a; public Result upload() {MultipartFormData<TemporaryFile> bod…

分布式高性能消息处理中心HPMessageCenter

HPMessageCenter高性能消息分发中心。用户只需写好restful接口&#xff0c;在portal里面配置消息的处理地址&#xff0c;消息消费者就会自动访问相关接口&#xff0c;完成消息任务。&#xff08;其实HPMessageCenter有两个版本&#xff0c;这次开源的是第二个版本。在第一个版本…

8、play框架中持久层操作

1、使用jdbc连接数据库 1、1 简介 JDBC是一个阻塞操作&#xff0c;它将导致线程等待&#xff0c;直接使用JDBC进行查询将导致性能降低 1、2 配置数据源 play提供了一个用于管理JDBC连接池的插件&#xff0c;可以根据需要配置任意多个数据库&#xff0c;想要使用此插件&…

DBCHM-最简单、实用的数据库表列批注维护工具

DBCHM支持SqlServer/MySql/Oracle/PostgreSQL/Sqlite等数据库的表列批注维护管理。DBCHM有以下几个功能表&#xff0c;列的批注可以编辑保存到数据库。表&#xff0c;列的批注支持通过pdm文件导入的方式进行更新到数据库。基于数据库中的表列结构(列ID/列名/数据类型/长度/精度…

浅谈Log4net在项目中如何记录日志

一 引入背景在软件开发周期中&#xff0c;无论是开发中&#xff0c;或是测试中&#xff0c;或是上线后&#xff0c;选择合适的工具监控程序的运行状态至关重要&#xff0c;只有如此&#xff0c;才能更好地排查程序问题和检测程序性能问题等。本篇文章主要与大家分享&#xf…

9、play中缓存的使用

1、简介 对于存储在缓存中的任何数据&#xff0c;都需要放置一个再生策略&#xff0c;以防数据丢失。这一理念是play基本原则之一。对于进程内缓存&#xff0c;Caffeine 通常是最佳选择。如果需要分布式缓存&#xff0c;play提供了Memcached和Redis的第三方插件。 2、添加缓存…

10、使用ws调用Rest api

目录 1、简介 2、添加WS配置 3、发送请求 4、处理请求 5、常用模式和用例 6、自定义BodyReadables和BodyWritables 6、独立WS 7、访问AsyncHttpClient 8、配置WS 1、简介 有时我们想从一个play应用程序中调用其他HTTP服务。Play提供了WS库来进行异步HTTP方法调用。 …

拥抱开源,Office 365 开发迎来新时代

前言作为全球最大的开放源代码托管平台&#xff0c;Github在上周迎来了它的十岁生日。自从2008年正式上线以来&#xff0c;Github上面汇聚了数以千万计的开发人员和各种项目&#xff0c;它几乎成为了开源的代名词和风向标&#xff0c;各大软件巨头都纷纷支持&#xff0c;在广大…

11、OAuth和OpenID服务

1、OAuth 1、1 简介 OAuth是发布受保护数据并与之交互的简单方法。对于人们来说&#xff0c;这也是一种更安全的访问方式。例如&#xff0c;它可以用来访问你的用户在Twitter上的数据。Play仅提供对OAuth 1.0的支持。 1、2 基本工作原理 在build.sbt中添加配置&#xff1a;…

求凸函数极值 CSF迭代法(雾)

简介 本算法用来求解凸函数极值点的问题&#xff0c;由我在写ACM习题时想到&#xff0c;在网上并未找到这样的算法&#xff0c;拿出来给大家分享一下&#xff0c;如果网上没有的话&#xff0c;我决定给它起名叫做 CSF迭代法&#xff0c;如果这个算法早已经存在&#xff0c;那就…

12、play整合Akka

1、简介 Akka使用actor模型来提高抽象级别&#xff0c;并提供一个更好的平台来构建正确的并发和可扩展的应用程序。在容错方面&#xff0c;它采用了“Let it crash”的模式&#xff0c;这种模式在电信行业获得了巨大成功&#xff0c;用于构建永不停止的自我修复系统应用程序。…

ASP.NET Core 添加统一模型验证处理机制

一.前言模型验证自ASP.NET MVC便有提供&#xff0c;我们可以在Model(DTO)的属性上加上数据注解&#xff08;Data Annotations&#xff09;特性&#xff0c;在进入Action之前便会根据数据注解&#xff0c;来验证输入的数据是否合法&#xff0c;下面介绍以下如何统一处理验证并返…

13、play中实现信息国际化

目录 1、指定应用使用的语言 2、语言配置文件 3、在Controller中使用 4、在模板中使用 5、改变当前请求的语言 6、格式化信息 1、指定应用使用的语言 在conf/application.conf中进行配置&#xff1a; 这些语言标记将用于创建play.i18n.Lang实例。要访问应用程序支持的语…

讨论过后而引发对EF 6.x和EF Core查询缓存的思考

前言最近将RabbitMQ正式封装引入到.NET Core 2.0项目当中&#xff0c;之前从未接触过这个高大上的东东跟着老大学习中&#xff0c;其中收获不少&#xff0c;本打算再看看RabbitMQ有时间写写&#xff0c;回来后和何镇汐大哥探讨了一点关于EF和EF Core的内容&#xff0c;于是乎本…

CF297E-Mystic Carvings【树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/CF297E 题目大意 2∗n2*n2∗n个点的圆&#xff0c;nnn条圆上不交的弦&#xff0c;选择三条使得每条弦对应的弧上的点数量相等。 解题思路 就这5种情况&#xff0c;其中满足条件的是222和555&#xff0c;我们用容斥去掉1,3,41,…

14、使用play搭建一个web应用用例

目录 1、play下载 2、启动play项目 3、将项目导入到eclipse 4、play项目中前端开发 5、添加bootstrap ace页面模板 1、play下载 找到官网&#xff0c;直接下载即可 2、启动play项目 解压文件&#xff0c;进入到项目顶级目录 等一会&#xff0c;下载jar包&#xff0c;第一…

EF Core 2.0使用MsSql/Mysql实现DB First和Code First

环境Visual Studio 2017 最新版本的.NET Core 2.0 SDK最新版本的 Windows PowerShell开始搭建1、在 Visual Studio 2017 中创建新项目“文件”>“新建”>“项目”从左侧菜单中选择“已安装”>“模板”>“Visual C#”>“.NET Core”。选择“ASP.NET Core Web 应用…

基于SSM+JBPM的智能化OA办公平台

目录 1、项目介绍 2、业务架构和技术架构 3、数据模型 4、界面展示 写在前面&#xff1a;如果有小伙伴儿想获取智能化OA办公平台管理系统的对应源码和数据表结构&#xff0c;可以关注博主然后给博主发私信哟。 1、项目介绍 本项目是一款智能化OA办公平台&#xff0c;其目的…