当前位置: 首页 > 后端技术 > Python

统计几千行代码的bug率有意义吗?

时间:2023-03-26 19:04:53 Python

我的结论是:统计错误率是有意义的。但是统计几千行代码的bug率是没有意义的。为什么几千行代码的错误率毫无意义?一家公司最近想出了一个量化程序员工作绩效的计划。它被称为千行代码错误率。在一个统计周期内,程序员增加或修改的代码行数和QA发现的bug数按照以下规则计算:1000行代码,1个bug,则bug率为100%;2000行代码,4个1个bug,那么bug率就是200%;5000行代码,3个bug,那么bug率是60%n行代码,m个bug,那么bug率就是m/n*1000,不管规则本身有没有问题。我认为所有与代码行数挂钩的性能统计都是没有意义的。因为代码行数可以刷。如果一个表演需要尽可能少的代码行数,那么可以使用行数更少的写法;如果一个表演需要尽可能多的代码行,那么你可以使用更多行的编写方法。比如字符串赋值:a='今天天气40度,我要被烤了。',可以展开为:a=('今天的天气''40''度,我要''烤。')更进一步,可以展开为:a='今天的天气'b='有40'c='度,我要'd='烤。'e=(a+b+c+d)a=e的三种写法效果完全一样。还有一些功能可以用一行本机代码来完成。但是为了增加行数,特意使用了第三方库。这样第三方库的代码行数也算进去了。代码总行数的增加相当于分母的增加,几千行代码的bug率就降低了。缩写也很容易。在Python中,如果使用lambda表达式,可以通过非常圆滑反人类的写法,将通常的40行代码减少到1行。但是这样一行代码根本无法维护。为什么错误率很重要?对于一个实际的项目代码来说,bug的数量是系统性的错误,只能减少,但没办法变成零。也实现一个功能,好的程序员可以提前预知别人会怎么用,提前处理不合法的逻辑和不合理的数据流,从而减少bug的数量。而可怜的程序员,自己写的代码别人一用就出问题了。所以,我觉得用bug率来判断程序员的水平是合理的。但是从BUG的数量到BUG的发生率,这种计算方式还是要慎重设计的。如果公司在开发阶段有QA,在软件开发阶段,一般产品经理会先提出需求,然后拉开发和QA一起评估需求。QA将在需求评审会议后设计测试用例。这些测试用例是公开的,每个开发人员都可以看到。这些公开的测试用例,我觉得可以作为一个分母。程序员编写代码,但未通过某些测试用例。那就是程序员的水平不够。失败的测试用例数/所有暴露的测试用例数。可以作为衡量程序员水平的参考指标之一。一个好的程序员应该尽量让这个比例为0。但是有时候,在测试过程中,QA可能会临时添加程序员事先不知道的测试用例。那么如果这些case没有通过测试,也可以作为判断指标,判断程序员是否具备提前预防的能力。但是为了公平起见,可以乘以一个小于1的系数来降低它的权重:开发阶段的Bug率=(已经发布的测试用例数+系数×暂时增加的测试用例数)/总的测试用例数测试用例外行的话,今天我们先不考虑单元测试的数量和单元测试的覆盖率。因为据我所知,国内互联网公司的程序员,会主动写单元测试的太少了。有时候,一个原本想写单元测试的优秀程序员,进入一些大厂后,因为业务和进度压力,就逐渐放弃了。所以我们今天只考虑QA的测试用例。如果只看线上阶段的QA测试用例,面向QA的编程可能会出现问题。因为人很聪明,上有政策,下有对策。一个QA测试API接口的案例,输入5,输出10。程序员直接在代码里判断,如果输入是5,直接返回10,跳过中间所有逻辑。这将100%通过QA的所有测试用例。但这样做对产品本身没有任何价值。市场是检验代码质量的重要标准。节目质量好不好,上线后让用户评价。你永远不知道你的用户有多蠢,你永远不知道他们会如何使用你的产品。用户报告的Bug也可以用来评价代码的质量,进而反映程序员能力的高低。但是需要考虑以下两种情况:同一个功能,由两个程序员实现:程序员A写的功能一上线,用户一用就报错。程序员B写的函数已经上线很久了。几十万用户都在正常使用,但是一个沙雕用户搞砸了,不小心暴露了一个bug。大家凭主观判断都知道,程序员B应该比程序员A好。我们再考虑第二种情况。程序员A实现功能X,程序员B实现功能Y:功能X每天被使用数百万次,一周发现20多个bug。函数Y在一个月内总共被使用。3次。在没有发现bug的情况下,我们没有办法根据bug的多少来判断AB和AB两个程序员哪个更好。也许程序员B写了函数X,一天可能会发现数百个bug。于是,基于这两种情况,我绞尽脑汁总结出一个经验公式:某个函数线上的Bug率=Bug数/(log(函数使用数+1)+1)其中log是对数以10为基数。因为一个功能可以轻而易举地被使用数百次或数千次,而bug的数量一般是个位数或两位数。因此,计算使用次数的对数,避免错误率过小。公式中的两次+1。一是因为不能计算0的对数,二是分母不能为0。我们可以计算程序员开发的多个在线函数的bug率统计如下:程序员在线bug率=一个函数的在线bug率函数importancecoefficient+BfunctiononlineBugratefunctionimportancecoefficient+...其中重要度相同的函数应该有相同的函数重要系数。对于不同重要性的函数,函数越重要,系数越大。在这里,我们可以讨论这个系数应该使用功能重要性系数还是功能复杂性系数。个人觉得还是用importance比较好。一方面,代码复杂度不容易量化。二是因为程序员的代码质量和业务不能分开来看。对于重要的职能,要优先考虑,更加重视。多注意的情况下还有这么多bug,不代表能力差吗。对于不重要的功能,最后执行。后面可能来不及了,仓促完成有些bug。但是因为这个功能没有人用,所以对业务影响不大,有一些bug也无妨。在综合开发阶段和上线阶段,我们可以得出一个综合的公式。一般来说,XX率的取值范围应该是0-100%。这两个公式相加后,结果很可能大于1,所以我们改个名字叫程序员Bug指数:程序员Bug指数=开发阶段Bug率*开发阶段系数+程序员在线Bugrate*coefficientintheonlinestage指标越高,程序员的能力越差。最后强调一下,以上公式只是我的脑洞,仅供参考。但是我觉得它的价值应该远高于千行代码的bug率。最近为初学者整理了数百G的Python学习资料,包括电子书、教程、源码等,免费分享给大家!想上“Python编程学习圈”,发“J”免费领取