每个程序员都会遇到的一些有趣的bug.每一次都可总结出一些经验教训.下面是总结的最重要的经验教训,包括编码,测试和调试三个方面.潍坊UI培训为学员提供8对1服务,使学员就业得到保障.

(二)测试
作为一个开发人员,直到要测试了我才会去处理功能.至少,这意味着每一行新的或改变了的代码行至少已经被执行过一次.此外,单元测试和功能测试都很不错,但还不够.新的功能也必须进行测试,并在类似于产品的环境中探索.只有这样,我才能说我完成了一个功能.下面是我经历过的bug所教会我的关于测试的一些重要的经验教训:
8.零和null.如果可行的话,确保总是用零和null来测试.对于字符串,这意味着要测试长度为零的字符串以及字符串为null两种情况.又如:测试TCP连接的断开,要在发送数据给它发送之前.不使用这些组合方法测试是导致bug出现的首位原因.
9.添加和删除.通常,新的功能包括能够添加新的配置到系统中--例如,一个用于手机号码转换的新的配置文件.测试它能否添加新的配置文件是很自然的.但是,我发现我们很容易忘记去测试删除配置文件是不是同样ok.
10.错误处理.处理错误的代码往往是难以测试的.最好有能检查错误处理代码的自动测试,但有时这是不可能的.我有时会使用的一招是临时修改代码,使得错误处理代码运行起来.要做到这一点最简单的方法是反转if语句--例如,从if error_count > 0改成error_count == 0.另一个例子是拼错数据库列名,从而导致期望的错误处理代码运行.
11.随机输入.通常,揭露bug测试的一种测试方法是使用随机输入.例如,H.323协议的ASN.1解码使用二进制数据操作.通过发送随机字节去解码,我们发现了解码器中的几个bug.另一个例子是用测试呼叫来生成脚本,此时呼叫持续时间,接听延迟,第一方挂断等等都是随机生成的.这些测试脚本会暴露许多bug,特别是一起发生的事件会产生并拢干扰.
12.检查不应该发生的动作.通常测试包括检查期望动作是不是发生了.但我们很容易忽视相反的情况--忘记检查不应该发生的动作是不是的确没有发生.
13.拥有工具.我创建了自己的小工具,以使得测试更加简单.例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本.这个工具使得测试很多边界情况变得容易起来.另一个例子是可以进行API调用的一个命令行工具.通过启动逐渐添加所需小功能,我得到了一些非常有用的工具.自己写工具的好处是,我得到的正是我想要的.
在测试中发现所有的bug,那绝对是不可能的.有一个案例中,我更改了数字相关性的处理,数字由两个部分组成:路由地址前缀(通常是不变的),以及从000到999动态分配的数字.问题在于当找到相关性时,动态分配的数字的第一个数字会在呈现在表格中之前遭到误删.也就是说637变成了37.这意味着,到100之前它都是可以工作的,因此,前面100个电话是正常的,但是接下来的900个都是失败.所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题.
更多潍坊达内培训相关资讯,请扫描下方二维码
