Debug与测试心得

最近完成了一个项目,为了debug写了不少测试代码,踩了不少坑,因此写一下这篇博客记录一下。

写代码之前

因为我做的是密码工程,相当于需要对某一密码方案:签名or密钥封装or公钥加密等。
因此,在开始码代码之前一定要对需要实现的密码方案整体要理解熟悉。包括你后面需要用什么类型去实现都取决于里面数的范围。并且有些不是明确的写在密码方案里面的,就需要自己去体会理解。例如一些函数输入的范围,输出的范围。并且在写代码之前,你需要在大脑里面有一个框架,这个代码需要哪些函数,需要哪些文件。
一般我这边软件实现的一般是在Linux环境下的,因为我自己电脑是windows系统的,所以我是安装wsl子系统,IDE用的是vscode,通过编写makefile编译链接多个文件生成可执行文件运行。

写代码中

因为我们这个项目其实是一个算法的变体,因此有参考代码并不需要从零实现。对于几个核心操作分模块实现然后测试。首先是多项式乘法部分,先确定流程,从原理上保证流程是正确的,再根据流程进行实现。完成一个模块的实现后要立马进行测试验证正确性。我这里就做的不太好,我在实现了一个模块之后没有进行测试直接嵌入了主模块里面,导致整体代码出现问题后很难排查错误。在测试的时候也尽量测试到所有情况,尤其是一些边界情况。

写代码后

尽管可能所有模块都写完了,并且测试完成了正确性,在写主模块流程的时候还有可能出现问题(bug)。在我完成所有代码后,进行测试发现不对,这个时候我的方法是查看中间变量的计算结果,看是否在合理范围内,如果不是可能哪个计算步骤漏了,或者没有进行约减操作,这样也比较方便进行错误的定位。当然仅仅通过观察变量计算结果也很难发现错误。这时候我会单独的把一些计算流程拿出来写测试代码进行测试对比,尤其是涉及到很多矩阵向量,向量向量,多项式运算。并且每次输入都是随机的,这个时候我选择单独写测试代码固定输入,这样也方便查看最后结果进行对比。

写在最后

感觉debug的过程有点像侦探寻找犯罪分子的过程,其中需要推理寻找线索再不断缩小范围。一个好的debugger需要有充足的编程基础,这样才能保证假如不小心写了一些简单的语法错误一眼就能发现并改正。当然语法错误是最最好改的,借助编译器的提示信息和搜索引擎很容易就能改好,逻辑错误才是很难改的。假如你发现了错误在哪个范围,但是由于你对算法流程、原理不够清楚,你就只能瞎猜是哪个函数写错了,是不是这个有可能会出问题。这样就会浪费很多时间。并且增加测试的工作量。当然一个好的programmer肯定会尽可能少写bug。我不算是一个好的programmer,我总结的一些教训就是不要在自己精神状态不佳的时候去写代码,写代码的时候一定要全神贯注。并且不要为了偷懒省事ctrl cv后忘记改一些参数等等。这些都会增加整个工程项目的工时。当然如果有人和你一起合作的话可以让别人帮你一起看看代码,有的时候自己写的一些很傻的错误自己很难发现。
希望看到此文的大佬轻喷,多给小白一些建议。也希望这篇文章能够给正在debug的你一些新的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值