《MFQ&PPDCS》实践--Modeling---S-state在ARP协议测试中的应用

一.实践思路:

ARP是TCP/IP协议栈中最经典和基础的协议之一,它是一个有状态的协议。搞清楚ARP协议在实现的上下文,以协议的状态为分析视角是对ARP协议测试设计的一个不错的思路。当然同一个被测对象可以采用多种不同的设计对其进行测试分析和设计,这里没有绝对和最优的最优的答案。

二.实践过程:

2.1走读代码了解ARP协议在产品实现中所处的上下文环境:

Arp协议在产品实现中所处的上下文环境(整体架构,子系统、模块之间的协作关系等)
……略(此处不便展开具体介绍)

2.2 梳理ARP协议状态机:

ARP协议在产品实现中定义了五种协议状态:ARP_CLEAR、ARPF_WAITING、ARPF_INUSE、ARPF_ALWAYS_USE及ARPF_NOQUEUE。其中ARPF_NOQUEUE状态在目前的实现中基本上没有使用,为了便于理解,我自行定义了NULL这个状态。那么协议状态机如下图所示:
这里写图片描述
经过代码的学习和走读,得到如下的协议转换关系:

  • NULL(ARP实例未创建状态)状态的迁移:

1) NULL->NULL状态保持:
a) 收到并非请求本段IP地址的Arp Request。
b) 收到请求本段IP地址的Arp Request,但Sender处于非相同子网。
c) 收到target并非本端IP的Arp Reply
d) 收到target为本端IP的Arp Reply,但Sender处于非相同子网。

2) NULL->ARPF_ALWAYS_USE:
增加IP地址配置,为IP地址创建持久的ARP条目。

  • ARPF_CLEAR(暂态):

1) ARPF_CLEAR->NULL
当学习新ARP条目时,状态为ARPF_CLEAR的ARP条目当调用arp_find_free接口进行ARP实例分配时会被新的ARP实例所替换,此时老的ARP实例相当于状态就不存在了,即为NULL。

2) ARPF_CLEAR->ARPF_INUSE
对于被动接收ARP Request或ARP Reply 进行学习NULL->ARPF_CLEAR的ARP条目,状态直接转换到ARPF_INUSE。后续通过ARP Ageing Time老化时间对其进行维护。ARPF_CLEAR只作为暂态。

3) ARPF_CLEAR -> ARPF_WAITING
在报文主动发送时会发送Arp Request 尝试进行解析,报文开始发送时状态转换为为ARPF_WAITING。

  • ARPF_WAITING 状态的迁移

1) ARPF_WAITING -> ARPF_WAITING
在报文主动发送时会发送Arp Request 尝试进行解析,在等待回应和4次重传期间状态会保持在ARPF_WAITING。

2) ARPF_WAITING-> ARPF_CLEAR
在报文主动发送时会发送Arp Request 尝试进行解析,在等待回应和4次重传依然请求失败,状态会回退到ARPF_CLEAR。

3) ARPF_WAITING->ARPF_INUSE
在报文主动发送时会发送Arp Request 尝试进行解析,在等待回应和4次重传期间收到对应的Arp Reply状态置为ARPF_INUSE。

  • ARPF_INUSE

1) ARPF_INUSE-> ARPF_INUSE
在ARP Ageing Time周期内正常收到匹配Arp条目的报文。ARPF条目保持ARPF_INUSE

2) ARPF_INUSE -> ARPF_WAITING
超过ARP Ageing Time还未收到匹配ARP条目的报文。 即ARP老化状态回退为ARPF_WAITING。

  • ARPF_ALWAYS_USE 状态的迁移

1) ARPF_ALWAYS_USE-> ARPF_ALWAYS_USE状态保持
IP配置未被删除时对应的静态ARP条目时钟保持,不受ageing time的影响。

2) ARPF_ALWAYS_USE->ARPF_CLEAR
删除IP地址,同时会将对应的ARP条目状态置为ARPF_CLEAR。

2.3协议相关的其他:

学习其他ARP相关的实现要素,如:
ARP的定时器超时处理流程;IPv4通用收发包流程;ARP收发流程;ARP相关数据结构。此处不便不展开细致介绍。

2.4 ARP FT测试建模:

2.4.1测试模型的选择:

MFQ测试设计在TD阶段定义了5PPDCS种常用的测试模型: P-Process(流程)、P-Parameter(参数)、D-Data(数据)、C-combination (组合)、S-State(状态)。其中S-State是一种基于被测状态来建模的方法,对有“状态”的被测对象十分有效。根据被测对象的状态迁移条件进行覆盖。在测试状态迁移逻辑的同时也会测试到被测对象的功能。
ARP是有状态的协议,S-State模型进行测试建模有着天然的优势,故本次实践采用S-State的模型进行建模。

2.4.2 S-State测试建模:

首先,我们给上一章给出的ARP状态迁移图中的每个状态和迁移事件进行编号,得到新的状态图,这个新的状态图也是测试模型的一部分,如下所示:
这里写图片描述

通过上面的状态迁移图,我们又可以梳理出如下的状态迁移表:
这里写图片描述
上述的状态图和状态表即是S-State的测试设计模型,它和设计模型应该是高度一致的。从ARP功能测试的角度来说,对于状态迁移表中的每一个Events的覆盖就是基于状态机测试应该覆盖的基础用例。但是我们需要明确,任意一种模型只能从一个维度去覆盖,不要寄希望于采用了某一种模型就能达到无遗漏覆盖的目的。在基于Events覆盖的基础上可以再添加一些其他类型的测试,比如状态连续迁移的测试。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章