为什么bug越改越多?

一个软件写好了之后,过了一段时间再去看,它可能就不是你预期的样子了,可能早已经报了网关错误, 可能页面展示 500 错误,或者无法访问了。有很多原因可能造成这种混乱的状态,比如某个用户的操作触发了一个隐藏很深的缺陷,对程序造成了一个很小的修改,之后其他用户再进行了一些其他的操作, 也有可能是遭受恶意攻击等。

所以就算开发的软件已经接近完美,不再做任何修改和更新,你如果很长时间不去维护,软件也会变得越来越混乱。而在一个产品的实际研发过程中,我们还需要不停地为软件系统添加新功能,增加新特性,带来更多新信息,导致系统更加复杂,这些新信息会进一步增加软件的不确定因素。

为什么bug越改越多?
一个软件系统越复杂,影响的因素就越多。几乎所有的公司都想利用已经成熟的技术体系提高研发效率,但是实际上研发效率只会越来越低,一个产品往往是初创阶段研发效率高,越到后面效率越低。原因之一就是因为业务增长必然导致不确定性更高,干扰因素更多,从而拖慢研发进程,产生更多 bug。

哪些主要因素会增加系统的不确定性?

第一种因素是依赖的环境不确定。比如操作系统发生变化、数据库品牌和版本发生变化、访问的文件权限发生变化。

第二种因素是状态管理。可能发生变化的任何数据都处于某种状态,比如程序中的变量、数据库中存储的数据、文件中的数据。

第三种因素是程序的分支路径。如果你没有一个非常完备的定位系统,当你走在一条满是岔路的主干道上,你一定会迷路。

不确定性对软件测试的指导意义

不确定性对软件测试来说,软件测试人员需要计算哪些随机事件会对系统产生影响,然后想方设法提高确定性和一致性。

确定性高,每次运行这个程序几乎总是得到一个确定的结果,确定性越低,结果相反。但我们永远不能说它是确定的,发生的概率是 100%。因为如果程序依赖的环境变化了,结果也会发生变化。对于系统、数据库、客户端、版本号、解释器等所有的依赖,我们最好也纳入缺陷分析的范围中。我们可以使用确定性的工具来部署,尽量保证依赖环境的一致性,因此在测试时我们可以减少环境不确定性带来的权重,但是并不表示我们不需要测试环境本身。

而对于完全无法确定的随机用户数据,程序会编写分支语句来形成确定性的执行,这么多个分支是否运行就是概率问题。测试程序时就必须考虑,开发人员是否考虑了所有的情况。

为什么bug越改越多?
对于开发人员来说,尽量编写确定性高的代码,能有效抑制 bug 的产生。什么是确定性高的代码呢?比如编写纯函数,尽量减少对其他接口的依赖、不随意修改全局变量、不随意修改类中的属性, 尽量减少对文件、数据库等状态数据的依赖。

对于测试人员来说,则需要分析哪些特性适合编写纯函数、哪些地方的数据是系统生成的、分析用户输入会形成哪些分支代码、分析依赖了哪些数据库数据、文件数据、以及其他接口提供的数据,同时,测试人员自己编写的代码也应该参考这些情况,减少不确定性。

最后,多个程序之间、多个特性之间、多个模块之间相互调用形成的不确定性更加难以控制。功能越复杂,涉及到的数据会越多, 根据不同的操作顺序,形成的排列组合会成指数级上升。使用场景测试法、判定表等方案从理论上是可行的,但是实际测试过程中很难全部覆盖到。目前通过像智能化测试、精准测试这样的技术也许能缓解部分测试难题,但是这些技术手段本身的信息不确定因素就很高。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值