测试,测试,1、2、3,测试

我是卫斯理大学(’18)的计算机科学和戏剧双专业,整个暑假都在Flatiron学校(FS)学习。 由于我一生都是学生,所以我习惯于进行测验,学习测验,在测验前拖延,以及受到测验的情绪影响(无论好坏)。 我认为大多数人都可以同意的事实是测试很糟糕。 但是,就编码而言,从长远来看,测试可以节省时间和金钱,并且可以产生更完善,更完美的应用程序。 要进行大量测试,对于一篇博客文章而言,测试太多了,但让我们对其进行分解。

我们都很熟悉XCode向我们提供的红色或绿色小菱形,其中包含支票或’x’。 我们都看着颜色从红色变成绿色,有时又回到红色。 最后,我们全都翻了个白眼,甚至在看到红色的眼睛时甚至撞到了墙上,而在看到绿色的眼睛时就为喜悦而跳了起来。 作为程序员,成功是保持我们编码的动力。 小小的成功是使头脑振奋值得的。

想象一下,如果等到所有编程完成后才知道代码是否按预期进行编译和运行,您会头疼。 这就是为什么测试是一种绝妙的做法。 测试使我们能够构建声音产品并对其功能进行检查。

对于新编码员,养成优雅的习惯很重要。 测试是一种习惯,可能会改变您对编程的看法。 编写测试可能有些繁琐,因此尽早开始很重要。 您越早开始编写和练习进行测试,就会越好。

测试方式

这是几个不同测试选项的简要说明。 Specta和Expecta是不错的选择,因为它们不需要您输入返回类型,并且可读性强。 总体Specta和Expecta使得语法更加简单,易于编写和阅读。 这直接转化为开发人员的生产力” Harry Hornreich )。

XCode提供了一个测试构建框架,使编写测试更加容易。 XCode框架很好,但是IMO最多不过是万不得已,因为它总比没有好。 XCode框架的问题在于,无法知道您正在包括最有意义的测试。 有很多UITesting工具(例如XCode)作为唯一的测试源都不可靠。

有意义的测试

测试有各种形状和大小。 编写测试可能并不像提出测试那样困难。 例如,假设我们在Pig-Latin中编写代码字。 “ in”和“ as”之类的词保持不变。 如果程序员不熟悉该语言,则他们可能会忽略此细节,并让其代码返回“ niay”和“ saay”。 或者,他们可能会记住该规则,却忘记了以元音或以“ sh”或“ ch”开头的单词在其中辅音必须保持在一起的单词的规则。 这种代码中有太多的出错机会,这就是为什么使用测试有益的原因。 如果没有遵循的准则,没有规则,那么如何使程序员避免使程序充满错误?

测试的目的是消除运行时错误(与语法等编译器问题相对)。 测试不是为了弄清楚如何使用内存空间,也不是为了提高速度和效率。 测试以二进制形式进行:您通过或失败,直到通过。

有被迫失败的事情。 强制失败用于指示代码是否朝着不应执行的方向行进。 如果存在某种情况,您担心会发生并且不希望发生,那将是包括强制性失败的充分理由。

右BICEP

Right-BICEP是我经过多年编程学习的一种助记符设备。 Right-BICEP是考虑编写代码的绝佳方法。

正确是指检查结果是否正确。

然后,您必须检查输入和输出的边界条件。 边界是任何代码中的极限,即最小值和最大值。 可以帮助定义常见边界情况的首字母缩写是“正确”。 (请参阅页面底部。)

是要执行的重要测试。 例如,如果使用平方根,则需要有正数和负数的大小写。

接下来,您必须查看是否存在另一种获取所需信息的方法。 例如,您可以使用NSLog 交叉检查您的答案。

我还提到了以前的强制失败,这是代码中错误的一个示例。

最后是Performance ,其中包括大量输入数据,以允许运行测试。

测试是使代码保持计划,组织,高效和强大的一种便捷方法。 我坚信测试领域,希望我能有效地传达出一些原因。 快速回顾一下。

  1. 测试是如此重要,它可能会压垮您,或者可能会带来超额回报。
  2. 这是一种逐步查看代码的方法。 首先编写测试,然后分块处理代码。 这将有助于确保您的代码按预期运行。
  3. 不仅要进行测试,还要使测试有意义。
  4. 一切都测试!!!
  5. 使用Right-BICEP确保一切都按计划进行。

资料来源:

TDD与Specta和Expecta
在我关于Testing iOS的第一篇文章之后,我开始了一段旅程,亲自了解Test Driven Development的发展方式……

第6章:要测试的内容:正确的BICEP [书]
第6章要测试的内容:正确的BICEP很难看一个方法或一个类,并且很难预料到所有的错误…… www.safaribooksonline.com

正确-摘自http://richard.jp.leguen.ca/tutoring/soen343-f2010/tutorials/what-to-test/

一致性-当值与预期格式不匹配时会发生什么? 该方法是否期望将某些内容格式化为电子邮件地址? 它只期望非负数吗?

排序-是否存在以特定顺序期望的值(或操作)或缺少该值(或操作)? 更改顺序会发生什么?(这在处理数组和集合时很重要)

范围-是否有可能的最小值和最大值?

参考-您的方法是否具有任何可能影响其状态的外部依赖关系?

存在-如果值为0或为null,会发生什么? 如果网络中断或URL返回404怎么办?

基数—如果您的值太少或太多,会发生什么?

时间-是否有线程或并发问题?

想要更多这样的帖子吗?
输入您的电子邮件订阅! powered.by.rabbut.com