关于覆盖率的那些问题

image.png
在2021年年末告别了老东家,12月加入了蚂蚁金服,在熟悉节奏的第一个迭代中 让我惊讶的第一件事就是对交付质量要求之严格,其中SIT环境准入的一项指标就是代码的行覆盖率和分支覆盖率达到90%和80%。(最严格的话 会达到100的)(代码被单元测试覆盖的比率,粒度是行+if语句的各种条件被单测覆盖的情况)
因为在之前的公司 亦或是实习的京东金融,没有对这两项有这么严格的要求,所以还是有些手忙脚乱的,看了一下其他的项目才稍微有了些头绪,但是整体进度还是比较慢,2000多行代码的迭代,搞这个覆盖率搞了一个星期,弄得我就想 要求这么高的覆盖率,是不是真的有用?ROI是不是太低了?是不是不该对所有的应用都是一个标准?
但是想了想,自己的代码被写出来,就是为了执行。为了执行就需要验证一下是不是都能执行得到,再加上蚂蚁金融属性的公司,质量的弦一直是崩的紧紧地,我其实是比较认同这点的,质量无小事,所以也就无所谓产出比了。虽然实现的时候很痛苦,但是没办法,拥抱变化吧(自我安慰。

在我短期的、不成熟的实践中看来,分支覆盖率相比于行覆盖率更难提升,需要很多用例,分支覆盖的详细解释:

分支语句需要判断条件取真和取假分支至少经历一次才能完全覆盖。100%条件覆盖率含义:在测试时,首先设计若干个测试用例,然后运行测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次 ,即判断的真假值均曾被满足,变更覆盖率中部分覆盖算不覆盖 。如:if(A&&B)需要满足A和B都要为true和false,至少需要写三个用例A=false && B=true和A=true&&B=false,A=true&&B=true
if(A||B) 需要A=true||B=false 和A=false||B=true ||只要满足第一个条件,后面的条件就不再判断,还需要加一个A=false||B=false ,至少也需要写三个用例。

如果一个if方法中有3个条件 用短路与连接的话,基本就会很痛苦,然后我隔壁组的一个兄弟就像我介绍了一下他们的做法:把if语句的复杂boolean值在if语句上面,用lamdba表达式配合工具类实现简化,形成一个Boolean值,这样只用处理两种情况 就可以满足分支覆盖,这就是人民群众对于分支覆盖的智慧。

Boolean same = Objects.equals(Optional.ofnullable(user).map(User::getId).orElse(-1L)  ,  originId);
if (same){}

公司外面的风景.jpg

发表回复

蒙ICP备2022000577号-1