调试程序心得-1

多总结,多思考,多沟通是一种很好的工作方式。很多事情看似简单和随意,但将这些事情书写出来和在脑子里打转,对以后工作的effect factor是有很大差别的。于是,写下今天调试代码的心得。


调试的过程就是从现象追溯会源头的过程。关于现象的观察,可以使用强大的debug工具,也可以使用最原始的方法——打印出错信息。很多事情,我都是使用后一种。关于现象的观察,粒度有粗有细。比如,今天我调试一个程序时,需要检查程序的正确性,编写了一段测试代码。该代码中使用了绝对值函数abs()来计算error ratio。具体的计算方法如下:


(abs(real_value - expected_value) / expected_value) * 100%


检查结果发现error ratio有很大的误差。于是,我进行细粒度的观测,将abs去掉,观测error_ratio的正负值。观测结果是所有的real_value都大于expected_value。这就表明了real_value由于计算错误,将其值算大了。然后,检查源程序中涉及到计算real_value的代码。计算real_value的代码中有判断结构,首先要查看判断结构的中判断条件是否正确,尤其是边界值。如果正确,然后在查看判断结构内的循环结构的边界值。关于边界值的判断,我的经验是列出所有涉及到边界值的实例,然后one by one检测每个实例是否能够得到正确的结果。最后,检测顺序语句,顺序语句中容易出现变量名忘记更改的情况,这主要是由于编程时粘贴代码造成的。


编程时,尽量不出现完全雷同的代码,如下所示:

for i in range(0, NUM_TOWER):
	sum = 0
	for k in range (0, APP_CATE):
		for j in range(0, MINUTE):
			sum += Matrix_Down[k][i][j]
	err = (sum - Matrix_Sum_Down[i])/Matrix_Sum_Down[i]
	output_1.writelines('down err ratio is: ' + str(err) + '\n')
output_1.close()
	
for i in range(0, NUM_TOWER):
	sum = 0
	for k in range (0, APP_CATE):
		for j in range(0, MINUTE):
			sum += Matrix_Up[k][i][j]
	err = (sum - Matrix_Sum_Up[i])/Matrix_Sum_Up[i]
	output_2.writelines('up err ratio is: ' + str(err) + '\n')
output_2.close()
这种代码可以归并在一起,这不仅可以缩短代码的长度,提升代码的美感,增加易读性,更重要的是便于对程序进行扩展。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值