软件测试(第2版)_Paul学习04_01——Ch3测试人员的离散数学

除了其他生命周期活动外,测试本身还要进行数学描述和分析。这里给出的数学方法就是工具,测试工程师应该清楚地了解如何使用这些工具。通过这些工具,测试人员会变得严格、精确和高效,所有这些都会改进测试。一般来说,离散数学更适用于功能性测试,而图论更适合结构性测试。本章只讨论离散数学,主要包括集合论、函数、关系、命题逻辑和概论的一些基本内容,如需深入研究和学习还需参考专门的资料。

3.1 集合论

关于集合没有一个严格和精确的定义,可理解为一个包含了一些元素的整体。比如M1 = {4月,6月,9月,11月},表示"M1是元素为4月、6月、9月、11月的集合"

集合成员关系:集合中的项叫做集合的元素或成员,这种关系适用符号∈表示,比如4月∈M1,12月∉M1

集合的定义方式:

  • 简单列出集合的元素,Y={1812,1813,……,2011,2012}
  • 给出决策规则,Y={年:1812≤年≤2012}

    采用决策规则的优点是:无歧义要求使定义很清晰。有经验的tester都经历过"不可测试的需求。"很多时候出现这种情况的原因是:这种不能测试的需求来源于歧义的决策规则。第二个优点:利于适用决策表进行分析和设计。

    采用决策规则的缺点:有可能在逻辑上太复杂。

  • 通过其他集合构建。

韦恩(Venn)图:也叫文氏图,用于显示元素集合重叠区域的图示,集合被表示为一个圆圈,圆圈中的点表示集合元素。

软件测试(第2版)_Paul学习04_01——Ch3测试人员的离散数学_第1张图片

有30天的月份集合的韦恩图

 

集合操作:

A∩B = {x:x∈A ∧ x∈B}

A∪B = = {x:x∈A ∨ x∈B}

A' = {x:x∉A}

A - B = {x:x∈A ∧ x∉B}

A⊕B = {x:x∈A ⊕ x∈B}

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

 

无序对偶:(a,b)

有序对偶:

两者的差别是,对于a≠b,(a,b)=(b,a),但是

 

两个集合的笛卡尔积,是集合A×B = {:x∈A ∩ y∈B}

 

集合关系:

A是B的子集,A B

A是B的真子集,AB

A和B是相等集合,A=B

 

子集的划分

集合的一个划分是一种非常特殊的情况,对于测试人员非常重要。"划分"的含义是将一个整体分成小块,使得所有事物都在某小块中,不会遗漏。

定义:

给定集合B,以及B的一组子集A1、A2、……、An,这些子集是B的一个划分,当且仅当:A1∪A2∪…∪An = B,且i≠j → Ai∩Aj = ∅

软件测试(第2版)_Paul学习04_01——Ch3测试人员的离散数学_第2张图片

划分的韦恩图

第一部分保证B的所有元素都在某个子集中

第二部分保证B没有元素在两个子集中

划分对测试人员很有用,因为两个界定性质会产生重要保证:完备性和无冗余性。当研究功能性测试时,我们会看到功能性测试的固有弱点是漏洞和冗余性:有些内容没有被测试,而另外一些内容被测试多次。

功能性测试的主要困难之一,就是找出合适的划分。

例如:三角形问题的划分

  1. 三角形和非三角形
  2. 等边三角形、等腰三角形、不等边三角形和非三角形
  3. 等边三角形、等腰三角形、不等边三角形、直角三角形和非三角形

    初看起来这些划分没有问题,但是仔细研究会发现最后一个划分有一个问题,即不等边三角形和直角三角形并不是不想交的。也就是不满足第二部分保证:i≠j → Ai∩Aj =

    集合恒等式:

    名称

    表达式

    等同律

    A∪∅=A

     

    AU=A

    支配律

    AU=U

     

    A∩∅=

    幂等律

    AA=A

     

    AA=A

    求反律

    A''=A

    交换律

    AB=BA

     

    AB=BA

    结合律

    A∪(BC=ABU C

     

    A∩(BC=AB)∩C

    分配率

    A∩(BC=AB)∪(AC

     

    A∪(BC=AB)∩(AC

    迪摩根定律

    AB' = A'B'

     

    AB' = A'B'

     

    3.2 函数

    函数是软件开发和测试的核心概念。例如,整体功能分解范例就隐含使用了函数的数学概念。所有的功能性测试的基础都是函数。

    定义:给定集合A和B,函数f是A×B的一个子集,使得对于ai、aj∈A,Bi、Bj∈B,f(ai)=bi,f(aj)=bj,定义域A,值域B。

    函数的类型:

    上函数:f是A到B的上函数,当且仅当f(A)= B

    中函数:f是A到B的中函数,当且仅当f(A)B

    一对一函数:……

    多对一函数:……

    函数的合成:

    h。g。f(a)= h(g(f(a)))

    = h(g(b))

    = h(c)

    = d

     

    函数合成链对于测试人员可能是一个问题,尤其是当一个函数的值域是函数合成链"下一个"函数定义域的真子集时。

    软件测试(第2版)_Paul学习04_01——Ch3测试人员的离散数学_第3张图片

    数据流图中的因果流和非因果流

    3.3 关系

    集合之间的关系:

    定义:给定两个集合A和B,关系R是笛卡尔积A×B的一个子集。

    定义:给定两个集合A和B,一个关系,关系R的势是:

    一对一势,当且仅当R是A到B的一对一函数

    多对一势,当且仅当R是A到B的多对一函数

    一对多势,当且仅当至少有一个元素a∈A在R中至少有两个有序对偶

    多对多势,当且仅当至少有一个元素a∈A在R中至少有两个有序对偶,且至少有一个元素b∈B在R中至少有两个有序对偶

     

    定义:给定两个集合A和B,一个关系,关系R的参与是:

    全参与,当且仅当A中的所有元素都在R的某个有序对偶中

    部分参与,当且仅当A中有元素不在R的有序对偶中

    上参与,当且仅当B中的所有元素都在R的有序对偶中

    中参与,当且仅当B中有元素不在R的有序对偶中

     

    测试人员需要关心关系的定义,因为关系的定义直接与被测软件性质有关。例如,上参与/中参与的差别,直接与我们称之为基于输出的功能性测试有关。

    单个集合上的关系:

    我们使用两种重要的数学关系,即排序关系和等价关系。

    定义:设A是一个集合, 是定义在A上的一个关系,∈R,关系具有四个特殊属性:

    关系是:

    自反的,当且仅当所有a∈A,∈R

    对称的,当且仅当∈R ∈R

    反对称的,当且仅当∈R 、∈Ra=b

    传递的,当且仅当∈R ∈R

     

    关系是排序关系,如果R是自反、反对称和传递的。

    排序关系在软件中很常见:数据访问手段、杂凑代码、树形结构和数组,都利用了排序关系。

     

    关系是等价关系,如果R是自反、对称和传递的

     

    如果从定义在一个集合上的等价关系开始,则可以根据与该等价关系相关的元素定义子集。这就是划分,叫做由等价关系归纳的划分。这种划分中的集合叫做等价类。最终结果是划分和等价关系可以相互交换,而这一点对于测试人员来说是很重要的概念。划分有两个性质,即完备性和无冗余性。将这些性质带到测试领域中,可使测试人员做出关于软件已经测试的广度的有力、绝对的说明。不仅如此,只测试等价类中的一个元素,并假设剩余的元素有类似的测试结果,可大大提高测试效率。

    与关系相关的测试方法:等价类

    3.4 命题逻辑

    (1)命题,真、假

    (2)逻辑操作符,与∧或∨非,如果-则(IF-THEN)(

    (3)逻辑表达式,真值表

    p

    q

    p→q

    q→p

    (p→q)(q→p)

    ((p→q)(q→p))

    1

    1

    1

    1

    1

    0

    1

    0

    0

    1

    0

    1

    0

    1

    1

    0

    0

    1

    0

    0

    1

    1

    1

    0

     

    逻辑等价:

    定义:两个命题p和q是等价的(记做),当且仅当其真值表相同。

    定义:永远为真的命题是重言式,永远为假的命题是矛盾式

    与命题逻辑相关的测试方法:决策表

    3.5 概率论

    在研究软件测试时,有两种情况需要使用概率论,一是研究语句执行特定路径的概率,二是将其泛化为叫做操作剖面的流行行业概念。

    定义:结果可能性相等的有限样本空间S中的时间E的概率,是p(E)=|E|/|S|

    总结

    本章只是简单介绍了功能性测试用到的数学基本概念,要很好的在实践中从容应用,还需根据实际需要深入研究。就本章来说,是在本人看过的所有软件测试书籍中唯一一本讲了数学基础的书籍,有一种突然为软件测试找到了理论基础和数学支撑的"踏实感",因为有了这些软件测试再也不是一门简单随意的行业。

你可能感兴趣的:(软件测试)