《软件测试的艺术》读书笔记(二)

由于所在团队很小,项目团队一般由前端/移动端、服务器、底层逻辑开发人员组成,每个角色都只有一个人,测试也偏向于功能测试,直到最近我才了解到代码走查的概念。

或许在短时间内我负责的项目仍然缺失这个测试环节,甚至为了追求效率(实际上是大家都没有在规范的大团队呆过的缘故,压根也不知道规范是什么),连代码评审都没有。

项目开发的工作流程都是通过长期合作磨合出来的结果,更多的时候是凭借经验和直觉推进项目进度。

但个人认为还是有必要去了解完整的测试流程,或许就可以受到启发尝试如何在现有的基础上对流程做出优化,提升软件的质量和开发效率。

第 3 章 代码检查、走查与评审

多年以来,软件界的大多数人都持有一个想法,即编写程序仅仅是为了提供给机器执行,并不是供人们阅读的,软件测试的惟一方法就是在计算机上执行它。

直到今天,恐怕大多数的程序员仍然抱有这个观念:只要程序能够正常运行,代码写的是否符合规范一点也不重要。

然而,除非这个程序是个一次性产品,否则必然需要后期维护。

而在人员流动性如此大的今天,没有一个程序员能够保证自己能够陪伴一个项目到终结,这就必然会出现他人接手项目进行维护的问题。

可见,代码检查不仅是发现错误的手段,同时存在着更加长远的意义。

我见过最夸张的代码是一个简单的脚本竟然写了几十万行代码,开发者还沾沾自喜引以为豪,觉得自己能够写出这么多代码是一件了不得的事情。

错误发现得越早,改正错误的成本越低,正确改正错误的可能性也越大。

代码检查的意义之一,就是在交付验收前,通过查看代码发现疏漏和错误。

根据经验,一个错误越晚被发现,要想修正它,除了要考虑相关功能会不会受到影响,对于已经上线有实际用户的产品来说,更需要考虑的是修正错误会对现有用户产生什么影响。

有一款上线 8 年的产品,用户累计数量已达到千万级,月活跃用户数也有几十万,而在设计初期存在着设计缺陷。

这种情况还需要进行细分,比如新的解决方案明显优于现有设计,不会对老用户造成任何负面影响。

另外一种情况就是,虽然新的方案比现有设计更合理,但老用户已经习惯了“错误的设计”,并在此基础上做出了调整以达到预期的使用体验(在开发平台和工具上更容易遇到这种问题)。

一旦做出改动,老用户升级到新版本反而发现原本运行正常的程序出现了问题。

新的方案就要考虑如何兼容缺陷设计,当然这属于产品设计的内容,在此不做赘述。

3.1 检查与走查(Inspections And Walkthroughs)

代码走查:在代码走查中,一组开发人员(三至四人为最佳)对代码进行审核。参加者当中只有一人是程序编写者。

疑问:这里说的开发人员,必须是和编写者使用同样编程语言的程序员吗?例如前端的代码,走查小组中是否必须都是前端开发?

对于小团队来说,可能整个项目也就只有一两个前端。

代码走查的优点

1. 精准定位。因为是直接查看代码,哪里有问题一目了然,不像平时测试只能通过复现表象问题,找到规律才能定位问题。

2. 错误数量。发现代码的逻辑错误,就很容易联想到有类似代码的功能也存在相同的问题,而功能测试只能看到表面的问题,很难发现内在联系。

代码走查的重要性

在典型的程序中,这些方法通常会有效地查找出 30%~70%的逻辑设计和编码错误。

这里说的错误数量,不是说只要进行了代码走查,测试就能少发现这么多错误。

而是能够发现代码中存在的错误数量的占比。

修改一个现存的程序比编写一个新程序更容易产生错误(以每写一行代码的错误数量计)

还是以我自己的经验为例,有时候面对一个很久没更新的项目,很难想起来不同模块之间的联系,有时候改了一个变量名字,就会导致其他地方出现问题。

有些程序员的不良编程习惯,比如不写注释、代码冗余,使得代码可读性非常差。

每个人的编写习惯和风格大相径庭,修改别人写的代码更是难上加难。

3.2 代码检查(Code Inspections)

代码检查是以组为单位阅读代码,它是一系列规程和错误检查技术的集合。

在我看来,代码检查和走查的区别在于,前者更偏重于自查。

通过代码检查,程序编写者在逐句解释代码的过程中发现存在的问题,就像产品经理编写需求文档和使用说明来强迫自己对软件进行解释,以发现一些忽视的错误和冲突。

要使检查过程有成效,必须树立正确的态度。如果程序员将代码检查视为对其人格的攻击、采取了防范的态度,那么检查过程就不会有效果。
代码检查的目标是发现程序中的错误,从而改进软件的质量。
应对代码检查的结果进行保密,仪限于参与者范围内部。
和上一章提到测试应该正视测试的目的是发现更多的错误一样,程序员也需要正视代码检查的作用,最终是为了提高软件的稳定性,而不是对个人工作能力的质疑。
在工作中,不少程序员对自己编写的程序存在错误这件事十分敏感,无法接受“即使是大神也不可能编写完美的程序”这个事实。
面对问题反馈时,不是抱着解决问题的心态,而是第一时间否认,常见的就是“我什么也没动”“不可能存在问题”类似的言论。
对于最后一点,作者着重强调,代码检查不应该作为管理层评判程序员能力的标准,初衷也是为了最大限度的减少开发人员对代码检查的抵触。
在 OKR 理论中,员工考核更应该注重的是结果而不是过程。
但这并不是说,程序员编写的程序错误很多,多次代码检查仍然存在错误导致项目延期也不需要纳入考核。
这同样适用于其他岗位,产品可能存在需求设计漏洞,测试可能会漏掉测试点,如果对项目进度和软件线上版本没有造成大的影响,就不需要计入考核。
而如果因此导致项目出现重大损失,就要另当别论了。

代码检查的优点

1. 对于程序员。通过互相查看代码,了解不同的编程风格、算法选择和编程技术,互相学习和提升。
2. 对于后期测试。发现更容易出现错误的模块,在后面的测试中着重测试这部分。
 
posted @ 2022-09-15 17:01  丸子233  阅读(59)  评论(0编辑  收藏  举报