• Home
  • About
    • wanziの遇笺 photo

      wanziの遇笺

      一点随笔,一丝感悟,一些记录,一种成长。

    • Learn More
    • Instagram
    • Github
  • Archive
  • Category
  • Tag

TAPD实战故事——研发效能之再靠近一点点

04 Nov 2020

Reading time ~2 minutes

  • 一、前言
  • 二、背景
  • 三、迭代管理
    • 1. 迭代
      • 1.1 问题
      • 1.2 解决思路
      • 1.3 效果
    • 2. 需求
      • 2.1 问题
      • 2.2 解决思路
      • 2.3 推进
    • 3. 任务
      • 3.1 问题
      • 3.2 解决思路
      • 3.3 效果
    • 4. 缺陷
      • 4.1 问题
      • 4.2 解决思路
      • 4.3 推进
    • 5. 提测任务
      • 5.1 问题
      • 5.2 解决思路
      • 5.3 效果
  • 四、沉淀管理
    • 1. 测试用例
      • 1.1 背景
      • 1.2 效果
    • 2. wiki
      • 2.1 背景
      • 2.2 效果
  • 五、甘特图
    • 1. 背景
    • 2. 效果
  • 六、报表
    • 1. 测试报告
      • 1.1 背景
      • 1.2 效果
    • 2. 统计
      • 2.1 背景
      • 2.2 效果
  • 七、TAPD API度量体系
    • 1. 问题
    • 2. 解决思路
    • 3. 效果
      • 3.1 需求LeadTime
      • 3.2 Velocity-故事点
      • 3.3 跨项目线上问题分布
  • 八、小结

一、前言

  软件开发活动中,涉及多项目、多角色、多人员,跨组织、跨时间、跨地域。效率、质量、成本这三个问题, 夹杂在其中,反复权衡,但其实大家最终的目的只有一句话:保质保量的快速交付。

  提升研发效能,主要是关注业务交付链条中研发交付环节的品控和效率,最核心的是缩短优质代码到客户交付间的距离, 建立一个高速信息通道,量化可视化交付能力,最终形成反馈循环持续改进。

  在推进EP相关实践的过程中,需要充分利用现有的工具,搭建质量、效率的度量指标体系。其中在获取到相应数据前, 需要规范研发流程。利用TAPD管理研发全生命周期,缩短不必要的时间浪费,获取度量数据,进行可视化分析。 本文主要介绍了几个比较Highlight的TAPD使用方式,初有成效。

二、背景

  按照最开始设立的EP试点方案,等到了12月份,就开始准备总结,沉淀,发文了。只是近期部门内部知识分享小组的KPI发起, 加上不断有人询问,希望复制到其他项目组,而且TAPD的同事诚心邀请撰文。在这个档口,把原计划准备的内容,连夜赶文部分出来, 参加【TAPD实战故事】活动,算是提前总结顺便收获小礼品吧。

三、迭代管理

  在整个的迭代管理中,不同成熟度的项目,会在各个阶段遇到不同的问题,下面按照任务类型,着重挑出几个共性问题,进行展开。

1. 迭代

1.1 问题

  在使用TAPD时,每个角色关注的维度不一样,关注点也不一样,甚至在关注同一个事情的阶段也不一样。这些散落的关注点, 如果有一条线可以串联起来,所有的角色就可以on the same page,时刻知道项目roadmap的主线了。

1.2 解决思路

  考虑到产品、设计、开发、测试等角色的分工,安排给每个角色一个独立的任务,比如产品主要关注需求,开发关注任务和缺陷, 测试关注提测任务和缺陷。

  将所有的任务,放在迭代里面统筹管理,关系如下:

  • 每个迭代,只关注本迭代的需求、任务和Bug。
  • 如果Bug此期优先级不高,挂起之后挪到后面的迭代。

1.3 效果

  • 需求、任务、缺陷,全部放在了迭代里

  • 仪表盘查看需求、缺陷、任务完成情况

  • 进度图,实时查看需求状态分布图、需求规模分布图等

2. 需求

2.1 问题

  需求一般会经历产品规划→UI/UX设计→开发→测试→验收→上线,那么如何知道进度,并及时获知是否有风险呢? 通过某种方式(纸笔或者跟踪系统)来记录是可以达到的。

  那么问题来了,是来谁记录呢?如果工作全部交给一个人,需要此人对每个领域的专业术语都有认知, 并时刻去跟进。如果需求多了,那么这个人的就只能每天跟进进度了。如果项目团队里,没有一个这样的人或者角色来处理, 那该如何是好?需求先流动起来,才能看到价值,才能进一步推进需求的其他改善,比如拆解需求等。

2.2 解决思路

  在TAPD里,设置需求的工作流之后,按照角色划分职责,各司其职,每个阶段处理人一般都只分配一个人, 形成Owner意识。比如:

  • 产品负责:
    • 「新建」到「规划」
    • 「已上线」到「已完成」
  • 开发负责:
    • 「规划」到「开发中」
    • 「开发」到「待提测」
    • 「测试通过」到「已上线」
  • 测试负责:
    • 「待提测」到「测试中」
    • 「测试中」到「测试不通过」「测试通过」

2.3 推进

  从质量侧进行推进:

  • 提测时候,严格要求需求必须是「待提测状态」,才开始测试。
  • 需求为「测试不通过」,发送测试不通过报告,无法上线。

  进一步推进:

  • 需求长期处于开发中,拉长战线,那么是否可以拆解,并对拆解后的小需求提测上线。 需求拆解可参考:
    • 内网[【DevOps】从提高研发效率的角度聊聊产品需求拆解]
    • 本站庖丁解牛-需求拆解的十种策略
  • 需求预计开发结束时间快到了,是否可以提前计划测试人力

3. 任务

3.1 问题

  一个需求,可能涉及到很多人,包括不同团队的,包括前端、后端、移动端等等。如果全部挂在这个需求上, 没有Owner意识感。如果创建很多需求,每个人分配有一个,倒显得刻意为之,增加很多状态扭转的工作量。

3.2 解决思路

  用轻量级的任务,给研发同学或者其他参与同学提供一个方案,显得便捷很多。任务只涉及到「未开始」 「进行中」「已完成」三个状态。

  • 当涉及到多个端的时候,每个端都可以有一个任务,甚至可以多加一个联调的任务。
  • 每个任务都可以进行预估时间,时间会自动叠加到需求上去。

3.3 效果

  将需求拆解为研发任务,可以提前估算需求的大致时间,也给开发同学列了一个ToDo List逐步开发。

4. 缺陷

4.1 问题

  每次测试出来好多Bug,如何高效跟进?

4.2 解决思路

  • 创建时候,增加Bug的相关信息,比如优先级、严重程度、版本、模块等,便于快速筛选。
  • 解决时候,填写产生原因、解决办法,便于迭代末进行缺陷的ODC分析。
  • 关联时候,关联到迭代、需求上。
  • 抛出问题时,一键拉群,小群解决。
  • 添加TAPD机器人,定期辅助提醒。

4.3 推进

  • 及时组织Bug Review,高级筛选剩下关注的Bug,快速决定Bug的处理状态
  • 及时添加评论,根据评论查看重要信息(不用翻聊天记录)
  • 处理人原则,不是自己名下的Bug,及时分配出去(后面结合报表-统计来看)

5. 提测任务

5.1 问题

  测试同学在测试的时候,有可能是多个需求进行一起提测,有可能是多个Bug进行提测,或者是集成测试提测需要 涵盖的Scope需要一个地方单独指明。那么如何标记每一次的提测呢?每一次提测的测试要点是什么呢?放在哪里管理呢?

5.2 解决思路

  • 如果说任务是开发专属,那么提测任务就是测试专属任务了
  • 明确提测须知,比如提测任务里的需求一定要全部变为待提测;提测信息必须写清楚测试点和期望上线日期等。
  • 目前TAPD里暂不支持对自定义任务进行甘特图绘制,因此单独维护了一份提测任务甘特图

5.3 效果

四、沉淀管理

1. 测试用例

1.1 背景

  产品和项目的区别在于,一个产品可能需要好几个项目的支持,其中每个项目只支持部分模块。作为私有化的 项目交付时候,有可能需要导出一些测试用例进行交付。以往的时候用Excel管理测试用例,就意味着需要维护 很多份测试用例。线下传递,或者网盘上传,或者因为外包同学权限不够无法使用企业微信的腾讯文档。

  TAPD测试用例启用之后,在线保存测试用例集,关联到需求上,支持大家自定义筛选、导出。可以查看一个 用例关联了多少的Bug,由此进一步确定测试用例集的等级。

1.2 效果

2. wiki

2.1 背景

​  现在有很多文档沉淀工具,比如公司层面的iwiki、KM、腾讯文档、网盘等。面向的对象不一样,场景不一样。

​  考虑到有部分外包同学参与项目,目前采用TAPD wiki,主要是以项目为维度,进行知识体系的沉淀, 包括日常的Retrospective和Showcase的记录、本TAPD项目的流程规约等等。

  如果是文件比较大的一些资料包,则会上传到网盘。对于团队的沉淀,则会放在iwiki。对于个人知识和影响力的沉淀, 则会放在KM。

  对于需要实时协作,还没落地的材料,则会选择腾讯文档,比如正在编写的架构设计方案。

2.2 效果

五、甘特图

1. 背景

  在跟进项目过程中,信息不对齐,信息过期是一个常见的问题。尤其是产品、开发各自维护一个自己版本的 项目进度Excel。将开发人员的预计开始时间、预计结束时间填写到TAPD的需求/子需求/任务上:

  • 按照事项行查看,可获悉项目的整体进度,同时,在预计结束时间点附近,测试同学可询问是否提测, 以规划接下来的测试安排。
  • 按照人力查看,可获悉某一个开发同学在某一天同时在几个任务上工作,工作负载情况等。

2. 效果

六、报表

1. 测试报告

1.1 背景

  发送测试报告,比较常见的方式是发邮件,这就涉及到邮件模板,邮件归类,邮件归档保存了。在测试报告内容中, 如果需要列举出现的bug及其状态,需要手动copy或者导出,然后画表。

  在TAPD报表里面启动项目报告,自定义模板,关联到本次提测的需求和缺陷,就可以省掉一部分编写邮件的时间, 同时只要在项目中的成员,哪怕是新人,都能看到历史所有的测试报告,不用一封封转发过去的邮件了。

1.2 效果

  • 测试报告归档

  • 测试报告内容可直接关联需求、缺陷、提测任务

2. 统计

2.1 背景

  所谓“一图胜千言”,数据可视化往往能将枯燥的文字等信息,转变成只管的图表,增加视觉冲击力。 在群里发一长段,当前的状态,最近的趋势,远不如一张数据图来的直观。

  统计里面有缺陷类和需求类:

  • 缺陷类经常被用来跟踪具体的缺陷,或者迭代末进行分析Bug 的ODC分析等
  • 需求类经常用来查看迭代整体进度,EP趋势度量分析等

2.2 效果

  • 缺陷统计-处于Open状态的Bug,可以用来跟进Bug

  • 需求统计-需求个数趋势图,可用来查看项目一段时间的需求趋势

七、TAPD API度量体系

1. 问题

  TAPD的报表能满足项目大部分的日常需求,但是暂未支持对于多个项目的横向对比、整体统计;暂未支持对 自定义任务的图表创建;或者无法满足有业务含义的定制类统计。

  在推进EP实践过程中,有两个重要的指标:需求的LeadTime和迭代的Velocity,需要手动获取需求的各个 字段,进行一定的逻辑计算,画图。

  • Leadtime分为:

    • 需求总体Leadtime = 测试通过时间 - 进入开发时间
    • 需求的开发LeadTime = 待提测时间 - 进入开发时间
    • 需求的测试LeadTime = 测试通过时间 - 进入测试时间
  • Velocity分为:

    • 每个迭代,粗略的预计开发时间
    • 将预估时间转换为归一化的Story Point

2. 解决思路

  • 调用TAPD Open API,获取需求上的各个属性,比如status、story_change等
  • 经过业务逻辑计算处理,存入到数据库
  • 利用Grafana绘图

  下面是一段调用API,然后生成原始数据的过程:

def get_story_changes_map(workspace_id, iteration_map):
    count = get_story_count(workspace_id)
    print('本 {} 下需求数为:{:d}'.format(workspace_id, count))
    page = math.ceil(count / 50)
    story_changes_map = {}

    for cur in range(1, page + 1):
        infos_by_page = get_story_map_by_page(workspace_id, cur)
        story_ids_by_page = []

        for info in infos_by_page:
            story = info['Story']
            story_changes_map[story['id']] = Story(story['id'], story['parent_id'],
                                                   story['status'],
                                                   story['category_id'],
                                                   story['iteration_id'],
                                                   (iteration_map[story['iteration_id']]
                                                    if story['iteration_id'] in iteration_map else ''),
                                                   story['created'],
                                                   story['completed'],
                                                   story['effort'])
            story_ids_by_page.append(story['id'])

        change_infos_by_page = get_story_changes(workspace_id, story_ids_by_page)
        analyse_story_change(change_infos_by_page, story_changes_map)

    sorted(story_changes_map.keys())
    set_leaf_stories(story_changes_map)
    # set_story_points(story_changes_map, workspace_id)
    return story_changes_map

3. 效果

3.1 需求LeadTime

  从最左边,刚刚开始统计的时候,状态挪动不明显,需求没有拆解,中间沟通信息不完善,到后面EP实践的推进,可以初见成效,看到需求整体LeadTime的减小。

3.2 Velocity-故事点

  从最左边开始,需求任务进行预估时间,进行排期,到后面任务的拆解、更细致管理,可以看到每个迭代的容量逐步提升。

3.3 跨项目线上问题分布

  跨多个TAPD项目,进行问题的归类分析。

八、小结

  有人会问,我也是用的TAPD,为什么和你的TAPD长的不一样?诚然,对于TAPD工作流的设置,功能的启用,每个团队 都有每个团队不一样的痛点,或者使用场景。在调研了质量部负责不同项目的同学之后,本文结合自身实践,列举了一些 共性问题,不在于面面俱到,旨在抛砖引玉,希望读者能有所启发,欢迎讨论~



devopstencent Share Tweet +1