断言和标记

book Assertions and markup

这是非常重要的是要有一个好的过程,而写的测试套件。 我会谈谈这对于JLS的使用之一。

正如前面提到的最终产品的测试的数量。 之间有一个测试和规范的关系。 断言驱动的过程给出了一个主意了每个测试实际上是在规范的检查组。 利用这种关系,开发人员可以计算的覆盖面,得到了断言哪些测试是不写,等名单

断言是一个从一个可以被测试规范的声明。 而首要的第一步是确定在规范所有断言。 在这以后,开发人员可以编写测试。

断言的例子从爪哇语言规范: smt Assertions and markup

  • 一个编译时错误,如果同样的修改多次出现在接口声明。
  • 一个成员类型的二进制名称由封闭类型,其立即美元,其次,由该成员的简单名称,后面的二进制名称。
  • continue语句只能出现在一段时间,做或声明。

有可能是是非可测试的,或涉及不确定性的许多发言。 有时候,这些陈述包括“可能”或“可能”字样。 这是不正确的,如果一个句子有一个“可”字是不可测试的,但通常是这样的。

举例非测试的语句:

  • 我们不建议这样的数组声明为“混合符号”。
  • 那里的情况不是静态已知的对象类可能会导致运行时类型错误。
  • 但是,如果一个表达式的评价抛出一个异常,那么表达式是说突然来完成。

有许多讨论和争议的断言。 有人说,不应作为例子断言处理。 也有人说,每个语句是断言,有两个种:可测试和非测试的。 我个人的看法是,一个断言肯定是可测试的。 而且在大多数情况下的例子只是因为测试可以写检查特殊的例子断言。

在规范的过程称为断言识别标记。 有许多方法。 但在任何情况下,用户必须能够获取信息的声明是否是断言,不知怎么区分从另一说法。 有可能与他们的断言和ID的声明映射到一个单独的仓库。 我喜欢融入规范标记的想法。 这种方法是选中,是因为语言方面的Java SE的测试套件。 JLS的是写在FrameMaker中。 随着出口机制的PDF和HTML版本被创造了。 HTML的版本的过程中使用测试套件的创建。

在JLS的和一些特殊的锚JLS的2所确定的开始和结束的断言。 附加信息是assertionID短的发言摘要。 最终锚图像和链接的考验。 HTML视图和代码视图显示在相应的插图。 断言ID的是arr033,arr034,arr020等

JLC2 html1 Assertions and markup

JLC2 html code1 Assertions and markup

总的想法可以被描述为:

的<a name=assertionID> < - HTML注释shord描述为“ - >
在这里断言声明
<img src="pics/assert.gif">的<a href="path到test">测试ID,这是一>一样断言编号</

如果在不同部位的规范是由一个单独的语句测试测试的第一个标签将类似arr033_0,arr033_1,arr033_2。

这种体系结构是用于JLS的和JLS的2。 这是为JLS3略加修改,但主要的想法是保存。 我知道与非静态断言标识的一些方法的例子在一个单独的仓库,其中ID是一些散列值计算的基于内容的保存。 几个原因,是不是出现了一个很好的解决。 总有一个艰难的过程迁移到新版本的规格。 但在我看来,这是许多与静态ID的更容易嵌入到规范。




  • 股份/书签
Print This Post 打印此职位

规范,一致性,兼容性,测试...他们是什么一回事呢?

有时候,所有这方面似乎相当混乱。 或者它不如说他们通常甚至总是这样。 abstract Specification, conformance, compatibility, tests... What are they all about? 特别是当不同的人,企业了解他们周围的状况以不同的方式。 因此,让我们从头开始。

我们有很多围绕规格标准 韦伯斯特字典描述标准例如成立一些权威,习惯,或一般模式或同意作为 所以基本上它是规则列表中,其他人在使用必须服从。

让我们创建一个计算机语言。 首先,所有的规范是必要的,这将描述整个概念模型,告诉我们可以把一个程序,将如何行为,什么将被编译执行,在创建所有这些必要的文件等书面开发商 - 就是这样,可以停在那儿。 如果这个想法是不够好几个其他公司可能希望创建自己的实现:铁编译器和执行环境。 但他们必须遵守的规范。 否则,同样的程序将运行在一和运行不同,甚至失败的其他执行。 由指定的要求的落实执行所有被称为一致性

为什么会这样重要? money coins Specification, conformance, compatibility, tests... What are they all about? 那么,让我们说这个新的语言是用于创建股票交换计划。 想象一下,这是写在美国,在纽约证券交易所以及测试和使用。 它是那么好,其他国家在世界各地买了执照,他们开始使用这种新语言的执行情况。 如果实现不服从规范,可能做相同的程序与客户的钱不同的事情。 基本上这可能出售股票交换计划时商业代理人推“购买”按钮,或购买水果钢代替。

良好的问题可以是:“为什么会有不同的实现? 让我们创建一个并使用它。“。 有不同的答案。 有几家公司可能想用这个在不同的平台(Solaris,Linux操作系统,Windows)和设备(台式电脑,移动电话,掌上电脑,学生计算器等)的语言。 其他人想要他们的需要优化算法,铁等大型数据库的实施方案他们将是10倍的速度。

关键的一点是,几个不同的实现必须完全相同,根据该规范。 如果他们这样做,他们被称为兼容 坏的部分是,没有人可以肯定的。 这就是为什么核查机制是必要的。 通常它是一个测试套件,验证一致性和兼容性。 在这种情况下它是错误的说法几乎是兼容的东西或99%兼容。 有可能是或否。

no bug2 Specification, conformance, compatibility, tests... What are they all about? 让我们走向一个例子。 Sun公司发明的Java语言。 为了更准确的Java版本的几个不同的市场被创造了。 最有名的是 Java ME的 Java SE中 Java EE的 并为他们每个人有一个单独的规范。 Sun微系统有其自己的实现,这是最常用的。 然而,语言是那么好,有不少其他公司和它们的实现。 兼容性和一致性的目的有TCKs( 测试一致性工具包 )。 TCK的是一种产品,包括一系列的测试,它检查是否正确的实现是根据来自规范的规则。

我的打算是让一个什么样的规格,一致性,兼容性和TCK是,为什么他们是如此的重要思想。




  • 股份/书签
Print This Post 打印此职位