测试数字字段的清单

测试时,既有有趣的任务,也有复杂的逻辑,也有简单的任务,例如检查简单的字符串或数字字段。对于简单字段,您可以编写一次检查清单,然后重新使用它,只需对其稍作更改即可适合您自己的字段。



今天,我们将分析清单中的一个数字字段。首先,我将编写一个常规检查表,然后遍历每个项目并弄清为什么需要它,最后,我们将使用此模板编写检查表。



因此,我们在某个字段中需要输入数字。例如,注册时的“年龄”字段:







同时,您不能在18岁以下的站点上注册,其中存在禁止内容。



可以在此处进行哪些检查:



  1. 有效值
  2. 值不正确(超出有效范围或不合逻辑:200年88秒...)
  3. 边界值
  4. 边界值
  5. 小数-格式(以逗号和句点分隔)
  6. 小数-舍入(带有一小数位)
  7. 空字段
  8. 数量庞大(寻找技术前沿)
  9. 负数
  10. 非数值和非数值


放在一起-例如:年龄清单

好吧,在哪里练习-自己尝试!







有效值



想象一下,您实际上有5分钟的时间来测试功能。而且您只能从清单中执行前几个测试。您有一个清单:



  • 空字段
  • 0
  • -1


结果,执行了这些检查,您认为系统运行正常(很好,它发誓!)。她总是发誓,即使是正确的价值!不好。因此,我们记住以下规则:



始终首先是积极的,然后是消极的!






另请参阅:

正面和负面测试-了解有关从何开始的更多信息


对于具有年龄的字段,正确的值是什么?18岁以上:



  • 十八
  • 25
  • 38
  • 45
  • ...






在这里,我们必须明白,我们正在选择一些ONE值。每次都要避免农药的作用,这只是有所不同。



同样重要的是要了解我们可能有多个正确的值。这是当我们有多个范围,并且每个范围都有不同的条件时。



例如,同一年龄:



  • 如果未满18岁-请显示商店中的所有产品,香烟和酒精除外
  • 如果已满18岁,请显示所有产品


然后我们知道我们已经有两个“有效”范围。因此,我们需要从每个方面获取价值。例如16和26。







或者,如果我们根据驾驶经验来计算保险:



  • 0-1年-1000卢布
  • 1-3年-800卢布
  • 3-5年-600卢布
  • 5-10岁-500卢布
  • 10年以上-US $ 3.00


结果是5个间隔。我们需要从每个价值观中取一个价值。例如:0.5、2、4、6、15。







每次我们采用不同的值,但在本段中含义是相同的-从TK中获取正确的值。





无效的值



这里有不同的选择。不正确的值是什么意思?



  • 超出有效范围
  • 从计算机的角度来看是正确的(数字),但是没有意义(200年)


让我们回到年龄示例。正确的值是18岁以上。因此,我们必须提出以下问题:



-如果我们取“错误”范围内的值,会发生什么?如果我未满18岁怎么办?好,比方说10。







然后,我们仔细查看选定的时间间隔:



-嗯,但是年龄不能小于0。也就是说,我们有一个逻辑边界将两个不同的等价类分开:



  • 身体上可能,但根据传统知识无效(0-17岁)
  • 身体上不可能(0或更少)


因此,您需要从每个范围取一个值。然后得出10和“ -5”:







我们进一步思考:



-如果我们从下方有某个逻辑边界,则必须在上方。在我们的网站上注册的最大年龄是多少?它最有可能出现在55-65岁之间,因为老一辈不喜欢计算机。但是,您可以规定有条件的100-110岁的百岁老人。



我们再得到一个隐含边框的间隔。但是无论如何,值25和145会有所不同-一个是现实的而另一个则不是。因此,您也应该尝试一下!







然后再起农药作用。我们一次取145,另一次取6666666。



在这里,我们可能会遇到一个事实,即不能在字段中输入超过2-3个字符。开发商从“傻瓜”那里获得了再保险。这不是放弃并放弃支票的理由。因为开发人员很可能只是在字段上设置maxlength,所以很容易解决!



另请参阅:

如何从所有表单字段中删除最大长度-几种注意方法ツ







边界值



边界值将一个间隔与另一个间隔分开。他们必须经过测试!因为漏洞是最普遍的,所以它是在边界。为什么?因为它们属于两个范围,或者不属于两个范围。



在我们的示例中,传统知识的条件是“仅针对18岁以上的人进行注册”。这意味着开发人员必须在程序代码中进行以下逻辑处理:



  • 如果x> 18 THEN寄存器
  • 如果x <= 18然后我们给出一个错误


如果开发人员忘记将值18添加到范围之一,则可能不会导致错误。因为在这种情况下,通常使用if else构造。并且开发人员将最后一个“ else”放在以防万一-也就是说,如果突然输入的值不属于上述任何条件:



  • 如果x> 18 ...
  • elseif x <18 ...
  • 否则...


但是,如果开发人员将值18一次添加到多个范围中:



  • 如果x => 18 ...
  • elseif x <= 18 ...


那么该程序将不知所措,应该选择什么?而且它很可能会掉下去!



通常,错误在边界处比在间隔内更常见。因此,请务必对其进行研究!在我们的传统知识中,“超过18年”有明确的边界。因此,我们测试数字18:







如果根据TK有几个间隔,我们将分别检查每个边界。这些是传统知识强加的任意边界。



但是边界的类型不同:



  • 任意的
  • 脑筋急转弯
  • 技术的


随意检查?让我们走得更远。遵守逻辑是关于逻辑的一切(在60分钟内,一个人不能“减去一岁”,等等)。让我们将其应用于示例。



从下面开始的边界:



-年龄不能小于零是合乎逻辑的。所以0是边界。测试!







从上边界:



-Nuuuu ...年龄几乎不会超过35岁。尽管是什么阻止了祖母进入该网站?也许65岁? 88?



在这里很难找到边界。从“我不太相信”范围内取一个值很容易,但是没有特定的边界。因此,没有什么可测试的。顶部没有逻辑边界。



我已经在单独的项目中搜索了技术前沿,因此我们稍后再返回。无论如何,这比调和传统知识中的有效边界没有那么重要。



另请参阅:

以洗衣机的边界类型为例

为什么测试边界值



如何在客户端和服务器上查找边界

宝马助记符以查找边界值






边界值



如果我们有边框,那么就有边框值。而且还需要检查!

在年龄示例中,边界为18.因此边界值为17和19.







为什么要检查边界值?是的,那么,开发人员可能在代码中犯了一个错误,并在此处指出了一些边界。



if x > 18
if x > 17


如果我们的边界发生偏移,并且我们不测试边界值,那么我们可以轻松地跳过此错误。毕竟,我们检查了:



  • 边框-18.18> 17,所以一切正常
  • 左侧范围中的无效值是10。10 <17,因此引发了错误。


我们得出的结论是一切正常,尽管事实并非如此!因此,请务必检查边界线值。



但是是否有必要测试双方的边界值?整理出17项,您需要。还有19吗?假设开发者向另一个方向密封:



if x > 18
if x > 19


我们将通过检查边界值18来发现此错误。如果它适用于18且适用于范围内的数字(例如26),则代码编写正确。也就是说,为了确保代码中存在错误,请注意以下问题:



if (x == 18 or x > 21) …


这只能是有目的的))好吧,如果您依靠一个愚蠢的开发者以这种复活节彩蛋的形式开辟了恶作剧,那么您只需要做一个半身像就可以了。因此,让我们将同事视为合适的人。



但!如果开发人员描述代码在多个时间间隔内如何工作该怎么办?然后,如果出现拼写错误,范围将重叠:



if x <= 19 () …
if (x > 18 and x < 55) …


数字18不会捕获错误,因为18 <= 19,并且它不属于第二个范围。因此,将存在一种情况,该情况在边界处起作用,在范围内起作用,但在边界值处不起作用。



因此,如果无法访问代码,则值得检查双方的边界线,否则您永远不知道错字在哪里出现?



如果您不仅可以在该字段中输入整数,还可以输入小数,则事情将变得更加有趣。那么临界值是什么?值得从小数点后一位开始。在我们的示例中,它们分别是17.9和18.1:







好的,我们检查了一下:



  • 整个边界-17和19
  • 分数边界-17.9和18.1


但是,如果这样的价值观正常地四舍五入,这是否意味着其他人也会四舍五入呢?如果输入值17.99999999999(小数点后有11个9,并且四舍五入的结果是碰到边界),会发生什么?



如果我们谈论要四舍五入的分数,则这些是不同的等价类:



  • 小数点后一位
  • 许多迹象


这两个都值得一试!因此,我们添加了新测试:17.99999999999和18.00000000001









小数(格式)



如果系统允许您输入分数值,则在测试正确的值时,我们将在步骤1中对其进行检查。我们只是打破了“正确数字”的概念:



  • 整个
  • 小数


我们进一步细分“分数”项。毕竟,分数可以写成:



  • 点-6.9
  • 逗号-6.9


如果其中一种方法有效,则并不意味着第二种方法即可!我什至有一个使用两个以不同方式处理小数的计算器的示例-http://bugred.ru/calc/



另请参见:

不要在错误中输入“输入6.9”!-分析计算器中的错误


因此,我们需要确保两种方法都可以使用。至少如果他们应该工作。如果只有一种有效,因为标准禁止使用另一种-请检查第二种是否返回错误!



对于年龄,正分数是多少?最有可能的一半-例如20.5岁:







您检查过吗?加工?然后我们看一个逗号-20.5:







原则上已经检查了分数工作的事实。好的。





小数(四舍五入)



特别令人感兴趣的是接近临界值的值,而不是任何分数值。当以小于计算精度的距离接近边界时,我们会陷入一种情况,即值的有效性检查成功通过,但计算失败。



因此,如果您可以输入一个非整数,请确保在小数点后尝试多个9,接近值的边界(在上一段中我们已经这样做):







检查句点和逗号的舍入没有意义。这将是不必要的重复测试。我们单独检查:



  • 格式-以句点或逗号分隔
  • 四舍五入-小数点后一位或多位


另请参阅:

在测试中,我们总是从简单开始!-为什么您不应该混合支票








我们总是测试零。随处可见。只要记住这是一个公理即可。仅仅因为错误通常为零。



因为这通常是边界。它可以是显式的(在TK中阐明)或隐式的(它不是用TK写的,但很明显年龄不能为负数)。



如果我们谈论的是数字字段,那么我们尝试输入数字0。尽管测试中的“零”当然超出了质数。







另请参见:

零非零等效类—了解有关测试零的更多信息,而不仅仅是数字字段!








因为我们总是检查零,所以我们不会忘记边界值-一。



实际上,这通常是“最小可能价值”,如果我们不是在谈论小数价值:



-逻辑上说,如果我们下订单,我们至少要买一本书,一件衣服或一公斤面粉……

-最低年龄是1天/月/年

-最少的时间-1秒

-最少的工作经验-1天/月/年

-...



所以一个魔数字至少等于零。我们也检查它!





空字段



实际上,这也是零检验。不仅不是数字“零”,而是输入字符串的长度为零。



毕竟,如果我们输入“ 0”,则结果是一个字符。

如果我们正在研究一个字符串的长度,那么不仅要检查一个,而且要检查



请记住,零不仅仅是数字。即使在数字字段中,我们也将至少有两个零-一个空字符串和数字“ 0”。可能会有更多的零-不要忘记输出中的零。但是在我们年龄的例子中,事实并非如此。





数量很大



必须输入非常多的数字才能找到技术前沿。例如,9999999999999999。







我们正在尝试尽可能地扩大距离。但不要太难-应该是一次测试,两次。



首先,您可以从数值开始-通常为数字字段选择此数据类型。如果您设法超过它,只需在现场检查25或45个9。没跌倒吗 好吧,很奇怪。没有技术边界,但至少我们试图找到它。



另请参阅:

如何生成大字符串,工具-您无需手工完成))法律

提示中的技术前沿-实际错误的示例


如果该字段允许输入负值,则我们检查带有加号和减号的``许多九'',进行两项测试:



  • 99999999999999999999999
  • -99999999999999999999999


让我提醒您,如果您不能在一个字段中输入很多字符,这并不是放弃并说“无法检查技术边界!”的理由。因为如果你不能输入的字符在一个领域,则很可能是一个最大长度每场,这是很容易获得周围。我们取消了对客户端的限制,并确保服务器也具有万无一失的保护。



另请参阅:

如何从所有表单字段中删除maxlength

如何在客户端和服务器上查找边界






负数



当我们有一个数字时,我们总是记住它可以是:





同时,根据我进行的采访的经验,我可以肯定地说,很少有人会想到“如果您输入负值”的支票。但是系统可以以不同的方式工作:



  • 给出错误“没有这样的年龄/商品数量,请输入正数”;
  • 剪掉负号并将负数视为正数。


除此之外,对于某个字段,负数可能非常正常(例如,如果我们要节省收入/支出)。



我们在本节中测试什么?



  • 如果输入负数会发生什么,该数的模数是正确的:在我们的示例中为-26
  • 试图找到技术界限:-99999999999999999999999






非数值和非数值



如果您认为要检查一个非数字值就足以驱动“ hello”之类的任何字符串,那么您会误会)))



行也可以不同,它们可以分为以下几种:



  • 程序将许多字符串解释为数字;
  • 程序无法将其解释为数字的大量字符串。


这篇文章很好地涵盖了`` 不太数字''值的测试:表示数字的字符串的等效类



我不会完全重写它,只需将其添加到本例的检查清单中即可。我们还没有看到的:



  • 绝对不是数字-“测试”
  • 前导零-“ 025”
  • 数字前的空格-“ 25”
  • 数字内的空格-“ 2 5”
  • 通过e书写-“ 1.2e + 2”
  • 十六进制值-“ 0xba”
  • 布尔值-TRUE / FALSE(可以解释为0/1)
  • 无限(是的,就像在文本中那样,我们写)
  • N


在我们的案例中,使用18岁以下的正确年龄值,“数字中的空格”项变得更加有趣。这取决于系统的逻辑。这里有不同的选择:



  • 发誓如果输入了多个单词
  • 切断第一个空格之后的所有内容-“ 2 5”→“ 2”
  • 删除空格并假装它不存在(在数字中被视为错字)-“ 2 5”→“ 25”


同样带有字母。该系统可以在看到它们时发誓,也可以将它们扔掉。因此,让我们看看新的测试选项:



  • 小于18岁的太空-2 5
  • 长达18年以上的时间-25 6
  • 空格后-25测试
  • 在空格文本之前-测试25


请注意,在界面中,我们仅输入一些值,而无需指定数据类型。但是,如果我们正在测试REST API和其中的json消息,那么我们绝对应该尝试将数字传递给字符串:



  • 数:3
  • 编号:“ 3”


这些是不同的含义。如果未引用的值是数字。如果带引号是字符串,即使它看起来像一个数字。也许开发人员会将类型转换为代码,然后“接受”第二个选项,或者可能不会。还是值得一试!





放在一起:年龄清单



写下测试的想法,并讨论了每个想法。现在,让我们将所有要点放在一起,并为我们的示例编写清单。



让我提醒您情况-注册时我们有一个“年龄”字段。同时,您必须在18岁以下才能在该网站上注册,其中包含被禁止的内容。







在草拟清单时,我们会考虑上述所有要点。但是,我们不要忘记优先事项。我们总是从基本检查开始,而不是以“锤打零,负数并通常尝试以各种可能的方式打破它”开始。



检查一下 结果
18 25
18 18
18 16 : « 18 »
21.5
21,5
18 17 : « 18 »
, 17.999999999999999999 : « 18 »
18* 18.00000000000000001
/
0 : « 18 »
( , , )
1 : « 18 »
999999999999999999999 : « »
. -999999999999999999999 : « »
: « »
025 , 25
25 , 25
2 5 : « 18 » ( )
18 25 6 , 25
25 , 25
25 , 25
1.2e+2 : « »
0xba : « »
Boolean TRUE : « »
Infinity Infinity : « »
NaN NaN : « »


*如果18.000000000001有效,则检查整数19毫无意义。如果系统不接受小数,则是,我们检查19。



当然,来自“非整数”块的检查不是非常重要。有时,您可以并且应该得分。尤其是如果我们知道系统不应该分析任何内容,删除空格,丢弃文本等……那么从该列表中取一个值就足够了。其余的用于农药的作用,即每次使用新版本的“不是数字”。



但是为了减少多余的部分,您必须首先学习如何产生很多想法!这就是我们今天与您一起练习的内容=)



另请参阅:

Strainer中数字字段的备忘单(您需要登录)

在哪里获得测试建议(有用的链接的选择)




自己尝试



为“驾驶经验”字段编写清单。保险是根据服务时间来计算的。左侧的所有间隔都具有数字“包含”,而右侧没有。



  • 0-3年-1000卢布
  • 3-6岁-700卢布
  • 6-10岁-500卢布
  • 10年以上-US $ 3.00


该表格不允许您输入数字以外的任何内容(此限制在客户端上)。小数的值是不可接受的,我们有多少年的经验,所以我们写。



PS-有关更多有用的文章,请查看我的博客下的“ useful”标签有用的视频在我的YouTube频道上



All Articles