欢迎来到乐问乐学!

15890125578

全国统一学习专线 8:30-21:00
首页 机构动态 软件测试中常见的难题有哪些

软件测试中常见的难题有哪些

发布时间:2022-11-10

软件测试中常见的难题有哪些?怎么解决?就知道你会问这个问题,我呀整理归纳了一下,听说这些问题90%的软件测试工程师都会遇到,送给你,希望帮你扫清前进道路上的障碍!

软件测试中常见的难题有哪些

其实软件测试这件事情本身的难度一点都不亚于软件开发,甚至可能更难一点,常见的难题主要有以下这些。

1测够了吗?

其实这是一个测试充分度的问题。

代码覆盖率是衡量测试充分性的起点,但远远不是终点。要回答”测够了吗“,至少还要考虑是否测了所有的场景、所有的状态、所有的状态转移路径、所有的事件序列、所有可能的配置、所有可能的数据等等等等。

即便如此,我们可能还是无法 确信我们已经测够了。可能我们最终只能做到非常趋近于测够了。

2bug发现能力如何?

如何评价一组测试用例的发现bug的能力,属于测试有效性的问题。

评价测试用例有效性可以通过正向的分析进行,例如,分析测试用例是否校验了所有在测试过程中SUT落库的数据。更具有通用性的做法是变异测试(Mutation Testing),即在被测代码里注入不同的“人造bug”,统计多少能被测试用例感知到。

3哪些测试用例是在浪费时间?

那么多用例,要花那么多时间去跑,这里面一定有很多时间是浪费掉的,但如何才能知道哪些是浪费掉的呢?

浪费的形式包括:

冗余步骤:有些是浪费在一些重复的步骤上,每个用例都要去做一些类似的数据准备,每个用例都要去执行一些中间过程。

等价类:一个支付场景,要不要在所有的国、所有的币种、所有的商户、所有的支付渠道和卡组的排列组合都测一遍?这么测,代价太高。有没有更通用的、而且比较完备和可靠的等价类分析的技术手段?

有N个用例,推测这N个用例里面可能存在M个用例,即使删掉这M个用例,剩下的N-M个用例的效果和之前N个用例的效果一样。如何识别是否存在这样的M个用例、如果存在的话是哪M个。

据说阿里内部职级晋升P9评审,曾经就出现过“测试用例很多,你怎么删”的问题,看似简单,其实很难。

4要不要做全链路回归?

很多团队都会纠结到底要不要做全链路回归、做到什么程度。

这个问题的核心点就是:有没有可能,只要把系统间的边界约定的足够好足够完整,就可以做到在改动一个系统的代码后,不需要和上下游系统进行集成测试,只要按照边界约定验证好自己的代码就可以确保没有任何regression了。

很多人相信那是可能的,但既无法证明,也不敢在实操中就完全不跑集成。

5如何减少分析遗漏?

分析遗漏是很多故障的原因。

开发做系分的时候,有一个corner case没考虑到、没有处理。测试做测分的时候,忘记考虑某个特殊场景了。兼容性评估,评估下来没有兼容性问题的,但结果是有的。

而且很多时候,分析遗漏属于unknown unknowns,我们压根就不知道我们不知道。

6用例自动生成

Fuzz Test、Model Based Test、录制回放、Traffic Bifurcation(引流)等都是自动生成用例的手段。有些已经比较成熟(例如单系统的录制回放、引流),有些多个团队都在探索(例如Fuzz),有些则一直没有大规模的成功实践(例如MBT)。

7问题自动排查

包括线上和线下。对于比较初级的问题,自动排查方案往往有两个局限性。

首先,方案不够通用,多多少少比较定制化。其次,比较依赖人工积累规则(说的好听点叫“专家经验”),主要是通过记录和重复人肉排查的步骤来实现。然而,每个问题都不完全一样,问题稍微一变,之前的排查步骤可能就不工作了。

8缺陷自动修复

阿里的Precfix、Facebook的SapFix等是目前比较有名的一些工业界的做法。但总的来说,现有的技术方案,都有这样那样的局限性和不足,这个领域还在相对早期阶段,后面的路还很长。

9测试数据准备如何提有效率?

测试用例的一个重要设计原则是:测试用例之间不应该有依赖关系,一个测试用例的执行结果不应该受到其他测试用例的执行结果(包括是否执行)的影响。

但如果每个用例所需要用到的测试数据都是自己来从头准备的,执行效率就比较低。怎么既不违背“测试用例之间不应该有依赖关系”的大原则,又能减少测试数据的准备时间?

10兼容性测试

代码和数据的兼容性问题有很多形式。例如,如何确保新代码能够正确的处理所有的老数据?有时候,老数据是几个月前的老代码产生的,例如,一个正向支付单据可能会到几个月以后才发生退款退票。

有时候,老数据可能就是几分钟前产生的:用户的一个操作,背后的流程执行到中间的时候代码被升级了。

验证这些场景下的兼容性的难度在于:需要验证的可能性太多了。今天的退款请求对应的正向单据,可能是过去很多个版本的代码产生的。一个业务流程执行到中间具体什么地方代码被升级了,可能性也非常多。

11防错设计

严格来说,防错设计并不是software testing范畴内的。

但做测试做久了就发现,有很多bug、很多故障,如果设计的更好一点,就压根不会发生(因此也就谈不上需要测试了)。

更多新闻详情进入上海中公优就业IT教育