6

如何提高团队开发质量 - 锅叔

 3 years ago
source link: https://www.cnblogs.com/uncleguo/p/16435007.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

如何提高团队开发质量

  年轻的时候去面过一个相对于当时我的比较高端的管理岗位,当时的我情况是,开发经验相对丰富, 但管理经验还欠缺。对方当时面临一个具体的问题。 

  “我们最近生产上,出现了一个比较严重的事故,复盘的时候,开发喷测试,测试喷开发,都觉得是对方的问题。对于类似情况你有没有什么解决和处理的经验。如何提高软件质量”

我当时对这个问题回答的比较单薄,无非就说,大家要团结合作,开发要加强自测,测试要考虑全面,有责任心。这么说虽然没错,但是只有战略没有战术,也没实例经验。最终,显然对方也不是很满意, 无缘了这个岗位。

  如今的我已不再是曾经的那个少年,虽然错过的人已经错过, 但问题长存, 都说人在不同的阶段,对相同的问题,会有不同的答案,于是锅叔在这里重新回答一次……

  

2753310-20220704143842174-96427633.png

 

  具体这件事情,建议从三个层面来处理。  

  一、就事论事

这一层比较简单,具体问题要具体分析, 要了解下这个问题的出现的原因, 归属的类型,然后才能明确责任。 一刀切的让所有的生产Bug都由测试背锅是不科学的。

  • 如果需求明确,正向用例就应该覆盖到,没有被测出,那显然属于测试全责。进一步需要追查,这个部分的用例是谁编写的,是否遗漏,执行了没有,为什么没有测出。
  • 如果属于一些特殊数据,特殊流程下触发的bug,不能认为全是测试的问题,开发也需要承担部分。 可以具体分析下代码,是否属于那种开发人员容易意识到而“有意忽略”的问题。实际开发经验丰富的同学肯定容易理解,有些bug是,开发容易而且应该想到,而测试难以测出的。例如“并发减库存”这类问题,仅通过功能测试很难测出,在开发设计时,就应该进行考虑。
  • 也有可能存在开发,测试都很无辜,需求背锅的情况,做出来的东西就不符合用户的实际需要。或者需求,测试一起背锅的情况, 需求调整需要连带修改的需求,没有做出调整,测试也没有回归到。例如只考虑了新增输入校验,没有考虑编辑已有数据的校验等。

  二、举一反三

  复盘的目的,主要应该不是为了追责。而是为了优化流程。弄清事情的发生原因后,应该建立对应的流程,机制,避免类似的事情重复发生。例如,用例的执行应该能追溯,测试开发能力不足的,要培训,要编写对应操作规范等,缺少评审的流程加入评审。

  三、统筹安排

如果公司觉得此事暴露了软件质量的不足,期望改进开发质量,那么就要理解,软件的质量控制和软件测试,其实是不同范围的事情。质量改进包含的范围远大于软件测试,对这一点要在团队中进行宣贯,统一认识。

  提高软件质量不等于提高测试质量,质量控制是一个贯穿开发流程始终的活动,需要团队的所有角色共同参与,为交付质量共同负责。

loading.gif

   1、产品,需求人员的质量责任

  

2753310-20220704150557133-108131615.png

     非常容易想到的一个职责是——不能理解错用户的原始需求,否则就将带着整个团队南辕北辙了,但这其实只是一个最基本的要求。

  除此之外另一个重要的职责是——传达清楚,即把需求全面,准确的传达给用户。

  “准确”可以理解为要把你的需求描述清楚,条理清楚,避免歧义。实践中很多bug的产生,是因为开发人员遗漏一些细节需求导致的。这类bug的情况,通常功能较为细节,例如一些细节的校验,提示的文字,与同类功能的细小差异等。这类问题可以通过在需求编写形式上上,使用逐一列出,重点强调的方式会比把所有需求无差别写成一坨文字,降低发生的比率。歧义情况的出现,多是由于语言描述不严谨,不具体导致的,可以有意识多使用逻辑性描述,实践所占比例不高,适当注意即可。

  “全面”实际是一个非常难以达成的要求,需要需求人员有较高的素质。这类问题造成的bug在运行维护多年,持续迭代的系统上暴露的非常多。抽象来说就是修改了某功能,要对应修改系统中对于此功能为有依赖的其他功能。对于陈年老系统,要考虑周全非常困难。简单的例子如,为了增强账号安全,增加了注册用户名的长度,也允许加入特殊符号。需求人员应该想到,此处修改除了影响用户注册页面的用户名输入框校验规则外,也同时需要修改,用户登录页面的用户名输入规则,如果有其他客户端如移动端,也需要同步修改,如果后台有用户管理,搜索,用户名搜索框允许输入内容可能也要同步修改。甚至要求高的UI界面, 因为长度变化,可能会导致显示异常,也要一并考虑到。

  而产品架构,则是更高层次的要求, 要求需求人员对产品的功能,实体,概念,做恰当的抽象,并有一定前瞻性。 产品架构其实是技术架构的基础,如果产品没有一个需求上的框架,那技术架构也是无法恰当提出的,随机应变会成为日常,修改成本会升高,稳定性会变差。   

   2、开发人员

  

2753310-20220704144601160-424703037.png

  ·   开发人员主要是要强调自测,对自己的交付物负责。实践中,开发人员常反怼说,我们又不是测试, 我们都测了要测试干啥。 因此也确实涉及到一个度的问题。实践中一个最基本的要求是, 对于需求对应的正向用例应该自测到,通俗说就是需求明确提到的功能开发自测应该覆盖。例如“新增的用户,点击用户名称,能够显示用户详情",开发人员至少要保证自测下, 新增一个用户,点击其用户名,显示详情这个流程。如果没有问题算通过。而测试人员则要考虑的更多。例如编辑的用户,导入的用户能不能正常显示?有特殊边界输入的,选填项不填的,显示是不是正常。

  情况往往也不会这么简单, 现代系统通常分工比较细,一个功能通常由几个开发人员合作完成,他们之前通常通过接口定义来衔接,也就是各自按约定的接口协议,实现功能即可。这种情况下,除了要求按照接口自测外,还要要求,这几个人中指定一个人负责串联的测试,保证功能正确。因为实践中接口难以定义的事无巨细。 这里的接口可能是前后台间的http接口,也可能是基于数据库表的接口(一个存,一个取)。如一个负责用户存的开发只验证了用户信息有没有写入数据库表。 另外一个负责展示的开发人员只验证了,自己在数据库手动填写的数据,能不能正常的被读取显示到页面上。 如果没人负责串联验证下这个过程,那接口对接环节的bug就无法发现,例如,存取的字段不对应,空值的表示不一致null与""等。

  开发人员自测确实可以更早的发现bug,降低bug修改的成本,不需要经过 ,“测试提”,"开发查","开发改","测试验"的过程。但锅叔觉得这只是开发自测收益中较小的一面,更大的收益在于,提高开发人员的质量意识,不是功能写完就算是开发完。通过结合其他追溯机制,可以推动开发人员,使用更合理的设计,主动进行重构优化。

   3、测试人员

   

2753310-20220704171624540-230531318.png

   测试人员在很多人的观念里,是天然的负责软件交付质量的人员,其质量责任主要就是做“好测试”。做好测试,无非依赖于,扎实的软件测试理论基础,和对系统业务的充分理解。 测试理论属于通用技能,只能通过学习思考,积累提高。而对系统业务的充分理解,对测试人员的稳定性是有一定要求的。 如果你们公司的测试人员是共享资源性质的,那应该尽量让他们稳定服务于,1个或几个项目。尤其对于长期迭代,周期较长的项目,人员稳定性非常重要,切换成本高昂。

  质量控制是测试工作的超集,因此提高软件质量,也要求测试人员额外承担一部分质量分析统计工作。因为Bug直接由测试人员记录产生, 由其来进行这类工作更为直接。常见的统计指标如,

  用例通过率,重激活Bug数,需求问题Bug数,未自测Bug数,遗漏需求Bug数,生产发现Bug数。

都是开发质量的评价依据,是复盘优化的基础数据。测试人员在测试工作中,或者生产环境支持过程中,在bug管理管理工具中,应对bug类型,进行识别归类, 用于日后统计分析。

  这也要求,测试人员要客观公正,真实反应质量数据。这里也提下,个人不赞成Bug与绩效明确的挂钩,否则容易造成开发测试对立,内耗严重,非常糟心。-_-||。

   4、管理人员

  

2753310-20220704145048076-974270719.png

  管理人员,首先明白,研发有其自身遵循的客观规律。所谓给技术以时间,凡事总有个测试,优化的过程,如果总是随意拍脑袋,削减研发评估的研发周期,那么,因为功能是显而易见,一定要交付的,所以首先被压缩的一定就是质量。例如一个系统计划开发一个月,测试一个月, 领导一拍脑袋,开发测试压缩成一个月, 那实际上,可能就开发3三个周,测试一个周,中间的各类评审也都被扔的七七八八,开发设计怎么方便怎么来, 测试就走走主要功能能用就行。这样质量就不要苛责了,相当于把测试交给最终用户,对于长期迭代的项目,也会累积不菲的重构债务。

  建立评审,复盘机制,是高级管理人员的职责。 重要的评审公司多小也应该具备,如需求评审,开发设计评审,测试方案/用例评审。同样复盘,如结项复盘,或以时间为周期的月复盘,季度复盘

基层管理人员,参与组织评审时,应保证评审不流于形式。如需求评审, 就是降低需求BUG的重要环节, 系统大了,需求人员自身的能力,也很难考虑的面面俱到,需要开发,测试共同,帮忙考虑,新需求对已有系统各处的影响。评审过程也是一个传达质量价值观的好机会, 在“好改,工作量小”和“规范,长远可维护”中尽量选择,规范的需求设计, 开发设计方案。要倡导细心和减少Bug是有非常有技术含量和挑战的事情,而不是一件麻烦的事情, 让开发多花精力在一次作对上。

   复盘是一个重要的回溯机制,质量问题应该都能追溯到个人,谁提的需求,谁写的,谁测的。 到不一定要跟绩效挂钩,但责任到人的方式,确实可以推动大家,建立质量意识,遵守质量规范。用例通过率低的模块的原因?需求Bug的数量较多,提示我们要重视需求编写,评审,提高需求编写人员能力,未自测bug多,提示开发人员责任心不强,生产的Bug数多,要分析,是否为常见问题,测试是否应该覆盖,如果是用户的日常操作,而回归流程却没有纳入,要考虑测试与用户多沟通,了解用户使用习惯。   

  OK先到这里,上面的回答,你给几分 :-)。 

  

2753310-20220704145939265-972716390.png

  曾经有一份真挚的爱情摆在我面前,但我没有珍惜,等到失去了我才后悔莫及,尘世间最痛苦的事莫过于此……o(* ̄︶ ̄*)o


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK