今天收到某个群友转发的《2020国内软件质量调查报告》,其中的很多报告论点很有意思。今晚抽时间写了篇博客,针对其中的某些论点,谈谈个人的一些看法。
报告下载:公众号回复质量报告,自动获取。
PS:提前说明,看法只代表个人基于工作履历和经验所做的判断,而非代表某一方的利益。由于报告第一篇是背景,这里跳过不表。因此标题是从第二开始,且其中内容是挑选某部分觉得有意思的来谈。
2.3团队大小分布情况
先说结论:敏捷模式,在国内依然是被玩坏的。很多有技术管理背景的人,简历都写熟悉scrum模式,有敏捷证书。最终的结果是:质量和交付效率依然没有明显好转,围城中的人还是痛不欲生。
还有另一个论点:依据团队规模来判断是否采用了敏捷模式。从我个人看法来谈,敏捷模式是一种抽象的东西,而非和团队成员人数或者迭代交付速率有直接关系。
2.4团队开发模式情况
结论:敏捷依然不是大部分公司的研发交付流程主导,所谓的持续迭代快速交付,是要适配业务类型的。成熟的业务,需要的是稳定增长,而不是快速迭代去试错来匹配市场速度。
不成熟或者在机会期观望期的业务,部分会尝试所谓的211模式,但以我个人经历来看,成效依然难以言表。
2.5产品交付周期情况
结论:交付速度取决于业务类型,高层决策以及流程管理等很多因素。
业务越上浮,交付更快,越下沉越重的业务,交付越慢。
质量和沟通协调之间的gap依然是巨大的鸿沟。
还有一点,高层管理对故障的容忍性!
3.1线上问题
报告中有个观点,有20%的参与调查企业发生过生产严重崩溃事件。在归因时候,原因定义为软件质量偏低和性能测试不足。线上服务稳定性,永远是软件服务提供者最关心的,因为出问题会影响用户,涉及资损。
业内通用的观点是:变更带来更多的线上问题。如果能降低线上变更,那么线上问题的几率会降低很多。但很多时候,线上的变更又是紧急的,必须且迫切的。
这就是很矛盾的一个问题,如何寻找其中的平衡,需要很多手段和意识去自上而下的推动这些。
3.2质量管理
观点:进度和质量,是否真的只能二选一?
结论:没有非此即彼,需要寻找平衡。这脆弱的平衡,需要很多因素和手段去维护,比如:
1)可以进行质量度量的指标大盘;
2)实时有效准确的监控及问题处理复盘流程;
3)自上而下的质量文化建设;
4)最重要的一点,质量是否直接影响KPI。
3.3管理组织
观点:从管理和组织角度来看,需要确定质量标准、重视质量。
结论:对测试的定义是做着QA的活儿,没有QA的话语权和资源,却承担同样甚至更多的线上故障归责。
很多人反馈需求质量差?原因是什么?又是什么角色反馈质量差?有什么保障或者提高需求质量的手段么?
很抱歉的是,报告中都没有提及。大家都在说需要需求评审、技术方案评审、测试用例评审,还需要有良好的评审检查机制,越想越觉得可笑。
很多人拿着药方抓药,却没想清楚到底是什么导致了需求质量差。
从很早前的软件设计相关的经典文章中,就说到软件质量是设计出来的,是内建的,而不是测试出来的。
而很多时候测试成了背锅侠,测试不是QA,却成了话语权卑微的物种。
当然,在某些企业,研发或者运维偶尔也是这个背锅侠。
最终,我们要回到问题的开始,如何保障设计质量?
报告中提到了很多有意思的,业内都在讲也在做的事情,比如:
1)加强设计评审;
2)制定设计规范;
3)选用成熟的设计模式;
4)培养/配置能力强的架构师和相关角色;
5)邀请测试、运维等技术角色共同参与评审;
其实我想表达的是:我经历过的几家公司或者和朋友聊起过他们的公司,这些事情都在做,而且做得更详细,但实际上,交付的质量和效率,依然很稀烂。项目中的人,痛不欲生。
为什么是这样?围城中的人,都觉得有问题,但又觉得很正常,打工人,谁不是呢?
代码质量如何衡量?就拿我司来举个例子,现在关于代码质量在做下面的一些事情:
1)单元测试,甚至包括case评审,覆盖率指标衡量;
2)code review,每个版本都在做的,而且要落地可执行的优化方案;
3)自动化测试覆盖,包括API和UI的,还会制定详细的落地计划以及指标衡量;
4)有效代码行数,千行代码BUG数,该有的都有;
但结果呢,业务跑的很快,技术永远是跟不上业务迭代速率的。技术债越来越多,稳定性又从何谈起呢?
报告中提到的一个技术指标:CMMI 5级水平(0.86 Bug/KLOC),让我意想不到的是都2021年了,还有很多官方或者管理者很看重这个指标。
真有意思。
纵观全文,整个报告都在讲质量,那么,谁该为质量来负责呢?
幸好报告里已经开始有点觉悟:抓质量不是抓测试能力和规范水平。
中午和几个同行聊起来,真的是感触颇多。
不过幸好的是,质量问题,线上稳定性保障,现在越来越多的公司开始看重这点,并且在着手优化。有些互联网企业甚至成立了稳定性小组OR稳定性团队,对服务和业务的稳定性负责。质量和效率,与其说是技术的问题,个人觉得,更多的是商业模式和业务类型的痛点。
偶尔跳出问题本身来看问题,也许能获得更好的观点。
从事实出发,根据数据推导背后的逻辑,然后形成观点,更值得思考。