|
引言测试人员的业务流程理解程度直接影响测试用例的准确性和全面性。为了提高测试用例编写水平和测试效率,有两个关键方面需要注意。首先,通过仔细阅读需求文档并与产品经理进行充分沟通的方式可以达到这一目标。其次,通过进行代码审查来提高代码质量、减少错误,并对团队合作产生积极影响。在这篇文章中,笔者将分享一些关于使用Go语言编写项目和进行日常代码审查的方法和实践经验。CodeReview方法和工具01使用工具goland:将代码clone到本地,可跟进代码逻辑和实现方式;同时还可设置断点、启动调试会话模式。版本控制git插件:通过git插件,可全局查看开发针对需求的实现逻辑,以及后期每次修改代码的变动点。postman:可通过工具模拟接口,向本地开启的服务发送请求,进行debug,从而定位bug。02切入点通过diff代码方式,查看改动点,缩小测试范围。通过接口方式,依据开发提供的接口文档,去跟进代码,来评估代码是否正确实现了所需的功能。通过日志记录方式,可辅助故障排查,定位代码位置。全局CodeReview实践项目提测前,测试人员如有充分熟悉项目的时间,那我们就可以大致走读一下代码。一般情况下,笔者会优先对数据层进行比对分析。如1.数据源的准确性代码最终获取结果的数据表是否满足项目需求,以及数据的筛选条件甚至是排序都可重点关注。那么如何去找到这些数据库表的位置?做法:①以笔者所测项目为例,找到接口定义如/list/account,定位到account.go类,分别跟进每个方法的调用,找到dao相关文件,即可发现调用的数据库表。一般表操作语句会有where、limit、order by 语句等获取数据的条件。②当分析完开发的代码,要与自己推断出的表及查询条件,进行对比和补充,并完善到测试用例,在用例评审时三方同时敲定、确认,避免重大错误的产生。③如调用方法过多,可将调用关系罗列出来,避免造成跟进混乱。2.数据存储的原子性和一致性对于数据库的访问,是否开启事务,如成功则提交事务;如失败则回滚事务。保证操作的一致性。所以我们就需要了解事务相关,关键词:Rollback()、Commit(),代码参考如下:案例:如订单审核功能,点击通过按钮,调用两张表的写入,一个是订单信息的表,一个是财务的表。异常:如没有事务的引入,则订单表可能插入失败了,但是没有被回滚,仍然去进行插入财务表,财务插入成功,这就造成了订单表和财务表数据的不统一,而引发功能性bug。3.分支逻辑覆盖我们可通过关键字如if else、 case,for等代码块,来分析判断逻辑是否合理、是否存在遗漏、是否冗余。功能逻辑的覆盖本来就要求测试人员对需求有全面、准确的了解,那么为了补足自身思想的局限性,我们就可以进行codereview,分析并补全测试用例。4.容易遗漏功能尤其功能发生异常时需要发送报警邮件、打印日志功能,注意err的位置,是否有sendMail、log相关关键词。关注发送邮件方法,亦可快速查看出邮件包含的主题、内容等,也能判断出发送内容是否完整。以上是新功能提测前,全局codereview的入手经验。测试过程中,我们还可关注一些细节的处理。1.如特殊字符、默认值、最值、空值等入库的处理,是否符合预期。关注对于参数是否调用strings内置包或者unicode内置包中的方法,进行了处理。 对于'\t', '\n', '\v', '\f', '\r'的特殊字符 对于收尾空格的处理 对于连续空格的处理2.如健壮性中异常处理问题,检查代码是否正确地处理了可能发生的错误和异常情况。确保代码不会因为错误而产生意外行为,此时多关注error和defer关键字,error代码块中根据实际需求return、doSomething()等,defer关键字确保资源有没有被正确释放。3.如健壮性中变量踩踏问题,一般可以大致看一眼方法内是否存在相同变量名称的赋值语句,是“:="还是"="。如有用":="赋值代码,可着重分析,其是否合理,笔者曾经遇到过一个不合理的赋值导致的bug。在上述示例中,需求本意是通过查询条件,取与全量数据的交集赋值给变量validIDs。但是由于红线部分②误使用“:=”赋值,那么一旦出了if的作用域,当前validIDs获取到的交集数据就失效了,造成在最下边③return时,返回的实际上是①的值。由此可见,当我们进行筛选后,返回的量并不是筛选后的,而是全量,从而引起功能逻辑错误。善用代码diff何时可进行diff呢?当需求为微小变更时,可优先使用diff策略,缩小测试范围。 如修改列表的升降序排序,查看db.order,DESC,ASC等关键字; 如新增一个枚举值类型,通过diff判断是否仅可测试新增内容; 如针对某个产品线特殊操作,通过代码比对,是否仅仅取出了某个类型处理,仅回归个别类型即可。当开发修改bug后,可优先使用diff策略。如定位所改函数getAccount();使用全局搜索功能,ctrl+alt+F输入方法;结果列表就是调用到本次修改的地方;那么再针对每个调用一一定位,反推代码是在哪个功能调用。以此来圈定回归范围,提升测试信心。CodeReview收益1 对于历史久远的已上线需求,没有明确的文档和负责人,此时codereview就起到作用了,当梳理完代码后,对于功能的认知更能加深一步。2 测试范围更加明确,以前对于修改代码后,需要回归的地方完全依赖于开发,那么现在可以自己根据调用关系来圈定范围,和开发互相补位。3 有效提升项目完成效率,测试过程中发现bug,可走读代码大致定位原因,将详细的复现步骤与错误代码位置相结合,提高开发修复bug的效率,也减少了给开发复现bug的时间,从而正向推送项目的进行。总结以上就是笔者在实际项目中使用CodeReview的一些经验和体会,CodeReview不仅能帮助我们更高质、高效完成项目测试任务,而且对自身的技术能力提升非常有帮助,强烈推荐在实际项目中多多使用。分享给第一个想到的人
|
|