|
|
|
|
移动端

3.1.5 集合运算

《软件测试:一个软件工艺师的方法(原书第4版)》第3章面向测试人员的离散数学,本章和下一章将给出测试人员所需的数学知识。还是把测试人员类比成技艺师,此处介绍的各种数学方法就是工具,测试技师应该是知道如何用好这些工具的。本节为大家介绍集合运算。

作者:马琳/李海峰 译来源:机械工业出版社|2017-11-15 17:38

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


3.1.5 集合运算

集合论的大部分表达能力源自对集合的基本运算操作,如并、交和补。其他常用的运算还有相对补、对称差和笛卡儿积。下面逐一定义这些运算。在讨论每个运算时,首先研究论域U中两个集合A和B。运算的定义中使用了谓词演算中的逻辑连接符与(∧)、或(∨)、异或(⊕)和非(~)。

定义

给定集合A和B,各个运算的定义如下。

A和B的并集是集合A ∪ B:A ∪ B = { x:x ∈ A ∨ x ∈ B }。

A和B的交集是集合A ∩ B:A ∩ B = { x:x ∈ A ∧ x ∈ B }。

A的补集是集合A': A' = { x:x ? A }。

B对A的相对补是集合A ? B:A ? B = { x:x ∈ A ∧ x ? B }。

A和B的对称差是集合A ⊕ B:A ⊕ B = { x:x ∈ A ⊕ x ∈ B }。

以上集合运算的维恩图如图3-2所示。

维恩图直观的表达能力对描述测试用例之间以及被测软件之间的关系十分有用。分析

图3-2中的维恩图可以看出:

A ⊕ B = (A ∪ B) - (A ∩ B)

事实也正是这样,此外还可以利用命题逻辑证明这个关系。

维恩图在软件开发的其他方面也能派上用场:与有向图相结合,就构成了状态图表示法的基础。状态图是CASE技术支持的最严格的规格说明方法之一,也是IBM公司和OMG集团(Object Management Group)为UML选定的控制表示方法。

两个集合的笛卡儿积运算(也叫叉积)要复杂一些,它基于有序偶对的概念。有序偶对是两个元素的组合,这两个元素出现的顺序至关重要。无序偶对和有序偶对通常的表示法为:

无序偶对记为(a,b)

有序偶对记为< a,b >

二者的差别在于,对于a ≠ b,有(a,b)=(b,a),但是< a,b > ≠ < b,a >。这个差别对于第4章中的内容十分重要。可以看出,普通图和有向图之间的根本差别恰恰就是无序偶对和有序偶对之间的差别。

定义

两个集合A和B的笛卡儿积定义为:

A×B = { <x,y>:x ∈ A ∧ y ∈ B }

维恩图不能表示笛卡儿积,所以这里需要举一个简单的例子来说明一下。设集合A =

{1,2,3},B = {w,x,y,z},则A和B的笛卡儿积为:

A×B = { <1,w>,<1,x>,<1,y>,<1,z>,<2,w>,<2,x>,

<2,y>,<2,z>,<3,w>,<3,x>,<3,y>,<3,z> }

笛卡儿积同算术运算直接相关。集合A的势定义为A中元素的个数,记为|A|。(有的人喜欢用Card(A)来表示。)给定集合A和B,有| A×B | = |A|×|B|。在第5章中研究功能测试时,将利用笛卡儿积来描述多输入程序的测试用例。集合笛卡儿积的势的乘法特征意味着这种测试方法会产生大量的测试用例。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

The Ruby Way(第二版)中文版

本书采用“如何解决问题”的方式阐述Ruby编程,涵盖了以下内容:Ruby术语和基本原理;数字、字符串等低级数据类型的操作;正则表达式;国际...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊