概率性的bug比较恼人(软件质量不是一句废话)

972 篇文章 329 订阅
309 篇文章 11 订阅

       在软件开发中, 必现的bug比较好定位修改, 但是概率性的bug有时就很难搞定了。

       测试组的MM提出一个概率低于1%左右的bug偷笑, 真不知道她们是怎么确定的。  要解决, 咋办?  首先, 要定位, 因此至少要重复100次左右的操作, 假设运气好, 复现了, 那好, 看日志。 晕, 竟然没有记录的日志。  所以只能加日志, 重新编译, 把新版本刷进去, 继续重现。 又要搞100次左右。  假设运气好, 重现了。 好, 分析日志, 假设运气好, 日志中刚好有记录信息。 现在你要分析日志啊, 要定位啊, 要修改啊。 修改后,重新编译, 再把版本刷进去。 可别高兴太早, 还要进行改后的测试呢, 至少要重复100次吧, 到100次后, 发现没有出现问题。 这个时候, 你仍无法判断是原来那个bug没有出现, 还是修改后才没有出现的。 所以要继续测试100次左右。 假设运气好, 还没有出现, 这个时候, 你仍然不能肯定自己修改好了。 没办法, 只能提交修改单。 

       然后测试的MM继续测试, 假设运气好, 那个问题确实修改好了, 那还算ok, 假设测试MM测试的时候又重现了, 把你叫过去, 你能咋办? 哭吧大哭! 

 

       软件开发的成本就类似于这样。 一般而言, 概率性的bug多数是由于程序猿考虑不周全造成的, 所以严密的逻辑思维和良好的程序风格是多么重要啊。 

 

       下面来看一个例子:

 

#include <iostream>
#include <ctime>
#define MAX_CHAR_VALUE 127
#define MAX_MSG_LEN 100
#define LEN 24

using namespace std;

int main()
{
	// 客户端
	unsigned char head[LEN + 1] = {0};
	int i = 0;
	srand(time(NULL));
	for(i = 0; i < LEN; i++)
	{
		int randNum = rand();
		head[i] = randNum % (MAX_CHAR_VALUE + 1);
	}

	
	char message[MAX_MSG_LEN + 1] = {0};
	_snprintf(message, sizeof(message) - 1, "%s%s", head, "xxx");




	// 服务端会对head长度进行校验

	return 0;
}

     

 

        上程序中, 模拟客户端给服务端发送消息, 服务端校验了消息头的长度。 容易知道, 上述程序可能会出概率性bug, 改为如下比较好:

 

#include <iostream>
#include <ctime>
#define MAX_CHAR_VALUE 127
#define MAX_MSG_LEN 100
#define LEN 24

using namespace std;

int main()
{
	// 客户端
	unsigned char head[LEN + 1] = {0};
	int i = 0;
	srand(time(NULL));
	for(i = 0; i < LEN; i++)
	{
		int randNum = rand();
		head[i] = randNum % (MAX_CHAR_VALUE + 1);

		if(0 == head[i])
		{
			head[i]++;
		}
	}

	
	char message[MAX_MSG_LEN + 1] = {0};
	_snprintf(message, sizeof(message) - 1, "%s%s", head, "reset");




	// 服务端会对head长度进行校验

	return 0;
}

 

        不多说。

 

 

        现在这个年代, 手机不常关机的人很多, 假设一个手机连续运行一个星期后, 会死机一次, 作为用户, 你肯定会抱怨。 作为开发人员, 遇到这种问题,要定位分析并修改并自测试, 也是相当头疼的事情。 所以软件质量, 真的不是一句废话。
       

 

 

       习惯会改变人的一生。 你要好的, 还是坏的, 习惯?

 

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值