3 天交付新需求?极狐GitLab APP 「极限编程 XP」实践

近日,中移物联网有限公司、北京青云科技股份有限公司联合举办的 “2023 云原生重庆站技术分享会” 如期召开。会上,极狐(GitLab) 高级解决方案架构师刘剑桥带来《云原生极限编程 101》主题分享。本文整理自演讲内容,你可以阅读到:

  • 极限编程的 12 个核心实践

  • 极狐GitLab APP 如何落地极限编程,实现 3 天交付新需求

Enjoy~

极限编程(XP)是一个中小规模团队在面对模糊或者快速变化需求时,开发软件使用的轻量级方法论。

XP 由 KentBeck 在 1996 年提出,是敏捷软件开发中富有成效的几种方法学之一,它能够让客户满意度更高,更好地维护团队关系,更灵活且适配性更高。

极限编程的 12 个核心实践


XP 由一系列简单却互相依赖的实践组成。接下来,我们以软件开发的流程为主线,逐个讨论实用而具体的 12 个核心实践。

实践一:用户故事

用户故事主要解决需求澄清的问题。客户在提出需求之后,作为产品经理,需要对客户需求进行描述,形成相应的用户故事。

用户故事需要用户价值视角出发,是最小价值交付单位,例如手机号登录功能,对用户而言是有价值的;而如果描述为 “接口”,则是开发侧的任务。

实践二:计划游戏

计划游戏是研发团队与利益相关者举行的计划会议,包括两个层级:发布计划和迭代计划。客户以及团队中的所有开发人员都要参与到游戏中,实现合力。

  • 发布计划:团队和利益相关者/客户,基于用户故事共同决定在生产中交付的需求和功能以及时间。

  • 迭代计划: 团队将从列表中挑选最有价值的需求,并将其分解为任务,然后进行估计和承诺,在迭代结束时交付。

实践三:频繁发布

频繁发布(小发布,指需求很小)是指做完一个需求立刻发布,可以以最快的速度得到真正的市场价值,如果发现有问题也可以更快速度纠正;跟瀑布模式有着本质区别。

实践频繁发布,需要在开发的过程中,始终保持与客户的双向沟通,及时处理用户的反馈,长期去影响并且使得客户获取真正的商业价值,形成一个正向循环,实现成就客户。

实践四:简单设计

简单设计即不要超前设计,以能够满足需求的最简单的设计来完成任务;不要有重复的功能。

我们平时会碰到一些比较复杂的场景,在这些场景下,在极限编程中也有 Spike(探针,一个用来探索/寻找潜在解决问题的方法) 方式;后续有改动怎么办呢?还有重构与 TDD 来解决。

实践五:重构

重构是根据需要来重构,而不是根据猜测来重构,更不要在重构时变更外部行为。

同时,我们在实现产品的时候,有最小可行性产品(MVP)的概念,如果现阶段我们还不知道产品是否可行,那么,重构是一个实现最小可行性产品的具体技术方法。

实践六:测试驱动

测试驱动开发(TDD)指先写测试用例再写开发,确保后续的开发都可以以最快的速度形成反馈,并且得到极高的覆盖率(后端 90% 以上,前端 70% 以上);并且是开发来写单元测试用例。

包括 4 步:写测试用例 → 确保测试用例失败 → 写代码确保测试用例成功 → 有必要时重构。

实践七:结对编程

结对编程由指所有的源代码都是两个开发人员在同一台电脑上编程的,可以形成实时的 Code Review。两个开发人员其中一人是编程的角色、另一人是策略角色。并且定时进行角色互换。

实践八:持续集成

持续集成是指每次提交之后在服务器构建,并且在提交到主干之后,再在主干进行集成构建。

主干合并使用极狐GitLab 预合并分支功能,这样可以提前做一些预合并,防止对主干造成问题。持续集成的优点显而易见:可以快速发现问题,避免合并地狱,并且实现快速发布。

实践九:现场客户

现场客户即客户是团队的一员,参与团队开发,快速反馈需求,时刻跟进进展。

更多实践:代码集体所有制、代码标准、可持续发展

1. 代码集体所有制:团队中每个人都拥有 check out 任何模块并对其进行修改的权力,每个人并不是独立的,都不会被限制在自己的专业领域。

2. 代码标准:在 XP 中,团队开发人员都遵循着相对统一的编码标准,强调通过制定严格的代码规范来进行沟通,尽可能减少不必要的文档。

3. 可持续发展:软件开发不是百米短跑,而是一场马拉松。要以结果为导向,团队成员必须以一种有节奏的可持续的速度前进。

极限编程的落地案例:极狐GitLab APP 3 天交付新需求


极狐GitLab APP 是极狐GitLab 团队在 2022 年底启动的项目,通过外包,全远程开发,实现了 90% 以上的代码测试覆盖率,目前已经在 Apple Store 上架。这个项目应用了极限编程在内的诸多相关实践。我们重点分享其中 6 项:

计划游戏

首先,我们用了极限编程的计划游戏。极狐(GitLab) 作为客户,通过每日站会,每周迭代计划会以及需求梳理会,与外包供应商保持沟通。

除了实时同步沟通还有异步沟通,异步沟通使用极狐GitLab 中的议题看板,根据需求挪动需求状态。同时,我们注意到,看板上的所有项目,其 label 可以自定义而且互斥,这样可以更好地对需求进行更新。

用户故事实践

我们将极狐GitLab APP 关键需求形成用户故事,启动 3C 公式、DoD、AC、故事点

1. 3C 公式:卡片(Card)、交谈(Conversation)、确认(Confirmation);

2. DoD(Definition of Done) :明确 Done 的标准;

3. AC(Acceptance Criteria ):明确制定验收标准;

4. 故事点:预估每一个用户故事的大小,更准确算出团队的吞吐量。

简单设计 + 按需重构实践

如下图,有一个把 RESTful 改成 GraphQL 来提升速度的提交。这在最开始阶段是不需要的,最开始需要把 MVP 做出来,当后期性能不足时,在进行性能提升。

这里使用了极狐GitLab 推送规则功能,让每一条提交都讲明白它是做什么事情,以及它的 issue 号是什么,使得整个提交都非常干净。

另外,项目还使用了极狐GitLab 自动化流水线,实现自动检查、自动打包(包括安卓和苹果制品包)与每天超过十次以上的构建。

测试驱动实践

极狐GitLab APP 也使用了 TDD 测试驱动实践,每次都是先写测试用例,再写开发,测试覆盖率是在 93% 左右。这不仅仅是一个数据,最主要的是我们可以在不影响老需求下,更快地将新的需求上线。

同时我们使用了极狐GitLab 合并请求批准功能,限制了用户不能随意提交只有功能没有测试的代码,强制执行 TDD。

最后,从价值度分析可以看出来,交付时间是非常快,一个需求从提出到上线只需要 3.1 天,即可投入到市场,提供商业价值。

有兴趣的同学欢迎点击查看👉极狐GitLab APP 代码仓库。以上就是今天的分享,谢谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java调用chatgpt接口,实现专属于自己的人工智能助手

文章目录前言导包基本说明请求参数响应参数创建请求和响应的VO类代码编写使用最后说明前言 今天突然突发奇想,就想要用java来调用chatget的接口,实现自己的聊天机器人,但是网上找文章,属实是少的可怜(可能是不让发吧)。找到了一些…

【数据结构与算法】什么是双向链表?并用代码手动实现一个双向链表

文章目录一、什么是双向链表二、双向链表的简单实现一、什么是双向链表 我们来看一下这个例子: 在一个教室里,所有的课桌排成一列,如图 相信在你们的读书生涯中,老师肯定有要求你们记住自己的前后桌是谁。所以该例子中&#x…

J 砍竹子

砍竹子 【问题描述】 这天,小明在砍竹子,他面前有 n 棵竹子排成一排,一开始第 i 棵竹子的高度为 hi . 他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。魔法可以对连续的一段相同高度的竹子使用,假设这一段竹子的高度…

菜鸟刷题Day5

⭐作者:别动我的饭 ⭐专栏:菜鸟刷题 ⭐标语:悟已往之不谏,知来者之可追 一.一维数组的动态和:1480. 一维数组的动态和 - 力扣(LeetCode) 描述 给你一个数组 nums 。数组「动态和」的计算公式…

为了之后找工作不被虐,每天刷3道《剑指offer》Day-1

本文已收录于专栏🌻《刷题笔记》文章目录前言💖 1、二维数组中的查找题目描述思路💖 2、替换空格题目描述思路💖 3、从尾到头打印链表题目描述思路一(反转函数)思路二(递归)思路二&a…

Celery使用:优秀的python异步任务框架

目录Celery 简介介绍安装基本使用Flask使用Celery异步任务定时任务Celery使用Flask上下文进阶使用参考停止Worker后台运行Celery 简介 介绍 Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。 它是一个…

文心一言 vs GPT-4 —— 全面横向比较

文心一言 vs GPT-4 —— 全面横向比较 3月15日凌晨,OpenAI发布“迄今为止功能最强大的模型”——GPT-4。我第一时间为大家奉上了体验报告《OpenAI 发布GPT-4——全网抢先体验》。 时隔一日,3月16日下午百度发布大语言模型——文心一言。发布会上&#…

4万字企业数字化转型大数据湖项目建设和运营综合解决方案WORD

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。部分资料内容: 3.1.4沙盒管理 利用Docker, 基于kubernetes主打的容器技术与微服务应用基础平台,HDFS和YARN均可依此建模,为上层应用提供微服…

不愧是2023年就业最难的一年,还好有车企顶着~

就业龙卷风已经来临,以前都说找不到好的工作就去送外卖,但如今外卖骑手行业都已经接近饱和状态了,而且骑手们的学历也不低,本科学历都快达到了30%了,今年可以说是最难找到工作的一年。 像Android 开发行业原本就属于在…

学习 Python 之 Pygame 开发魂斗罗(十)

学习 Python 之 Pygame 开发魂斗罗(十)继续编写魂斗罗1. 解决敌人不开火的问题2. 创建爆炸效果类3. 为敌人跳入河中增加爆炸效果4. 玩家击中敌人继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗(九)中,…

深度长文 | 数据安全共享技术发展综述及在能源电力领域应用研究

开放隐私计算 编者按数据要素的流通共享与协同应用是数字时代中数据要素市场培育的核心内容,数据安全共享技术能够有效实现数据的安全共享,避免“数据孤岛”现象、隐私泄露事件等.本文对国内外数据安全共享技术研究成果及进展进行了全面综述.首先&#x…

[前端笔记037]vue2之vuex

前言 本笔记参考视频,尚硅谷:BV1Zy4y1K7SH p105 - p116 vuex简介和基本使用 概念:专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应用中多个组件的共享状态进行集中式的管理(读/写&…

CVPR 2023 | 旷视研究院入选论文亮点解读

近日,CVPR 2023 论文接收结果出炉。近年来,CVPR 的投稿数量持续增加,今年收到有效投稿 9155 篇,和 CVPR 2022 相比增加 12%,创历史新高。最终,大会收录论文 2360 篇,接收率为 25.78 %。本次&…

烤鱼界头牌半天妖发文致歉,背后暴露了哪些问题?

3月24日,半天妖烤鱼官方针对“两家门店食品安全问题”,发表致歉声明,并宣布将两家涉事门店永久关停。半天妖烤鱼爆出的食品安全问题再次提醒我们,加强门店监管和管理工作,保障消费者的健康和安全,成为了行业…

7.避免不必要的渲染

目录 1 组件更新机制 2 虚拟DOM配合Diff算法 3 减轻state 4 shouldComponentUpdate() 4.1 基本使用 4.2 使用参数 5 纯组件 5.1 基本使用 5.2 纯组件的比较方法 shallow compere 1 组件更新机制 当父组件重新渲染时,父组件的所有子组件也会重新…

如何理解AQS

AQS核心数据结构 AQS内部主要维护了一个FIFO(先进先出)的双向链表。 AQS数据结构原理 AQS内部维护的双向链表中的各个节点分别指向直接的前驱节点和直接的后续节点。所以,在AQS内部维护的双向链表可以从其中的任意一个节点遍历前驱结点和后…

【尝鲜版】ChatGPT插件开发指南

3月23日,OpenAI官方发布了一则公告,宣告ChatGPT已经支持了插件功能,现在处于内测阶段。插件的意义不仅仅在于功能的扩展,它直接让ChatGTP拥有了联网的能力!简直是猛兽出笼、蛟龙出海,要让ChatGPT大杀特杀啊…

phpstorm断点调试

环境:win10phpstorm2022phpstudy8lnmp 1、phpinfo(); 查看是否安装xdebug,没有走以下流程 2、phpstudy中切换不同版本php版本,有些版本不支持xdebug(如php8.0.2),有些已经自带了(如php7.3.9&a…

Java奠基】Java经典案例讲解

目录 卖飞机票 找质数 开发验证码 数组元素的复制 评委打分 数字加密 数字解密 抢红包 模拟双色球 二维数组 卖飞机票 需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格: 旺季&…

技术分享——Java8新特性

技术分享——Java8新特性1.背景2. 新特性主要内容3. Lambda表达式4. 四大内置核心函数式接口4.1 Consumer<T>消费型接口4.2 Supplier<T>供给型接口4.3 Function<T,R>函数型接口4.4 Predicate<T> 断定型接口5. Stream流操作5.1 什么是流以及流的类型5.2…