论文部分内容阅读
计算机网络技术的发展日新月异,网络规模不断扩大,通信协议的设计越来越复杂,复杂的协议设计和不断扩大的网络规模会导致网络出现故障的可能性增加。协议是网络的灵魂,是通信双方应共同遵循的标准和规范,为了保证协议实现和协议规范的一致性,有必要对其进行测试。按照测试者同被测系统的交互行为,协议一致性测试可以分为主动测试(也称为离线测试)和被动测试(也称为在线测试)。主动测试先根据协议规范生成测试序列,再向被测系统施加测试序列,并将其输出同协议规范预期输出进行比较。被动测试被动观察被测系统的输入输出,无须干扰网络设备的正常运行,适用于运行中网络的故障检查和定位。主动测试的优点在于能够通过外部控制被测系统的输入,因而能保证较高的测试覆盖率,状态跟踪和错误定位也比较容易。但是主动测试的测试序列长度同模型复杂程度有关,在被测系统状态和转换较多时,测试序列的生成较为困难。现有的一致性测试序列生成方法没有覆盖异常输入,因而存在一些错误无法被检测,另外存在一些特殊环境使得主动测试无法开展,而被动测试可以有效地弥补主动测试的不足,成为主动测试的有益补充。有限状态机是描述协议的最常用模型,本文主要研究该模型上被动测试的一些理论和方法,本论文的主要工作包括:1.被动测试中的观察缺失标识:在高速运行网络中,网络拥塞或低速的协议报文捕获会导致部分协议报文丢失(即丢包现象),而网络监控系统中关键协议报文的缺失会导致协议分析的失败。因而为了完成协议的连续分析,有必要对缺失观察的报文进行标识。本文将上述问题归结为状态间最小引导序列构造问题。先通过被动测试错误检测算法计算出系统在缺失观察前的可能状态,再运用回溯算法求出重新获取观察序列后的初始可能状态,最后构建子树森林,通过遍历子树查找符合条件的引导序列。2.被动测试中测试覆盖率分析:测试序列生成的目标就是用尽可能短的测试序列检测出尽可能多的错误,主动测试中,测试序列是在测试之前就静态确定的,因而覆盖率是固定的。被动测试中,观察序列在运行时才能确定,具有随机不确定性,因而对于相同长度的不同观察序列,其检测错误的能力可能不同。为了能够对观察序列检测错误的能力进行评价,有必要对测试覆盖率进行量化,木文提出了一种适用于分析被动测试测试覆盖率的方法,该方法先定义错误模型,再依据模型生成所有可能错误,最后使用变异测试的方法检测错误,通过理论和实验证明了通过增加观察步骤数或结合主动测试可以提高测试覆盖率。3.被动测试中的错误诊断:在用被动测试错误检测算法检测到协议实现和协议规范的差异后,如何分析和定位这些差异变得尤为重要。本文给出了如下两种方法解决该问题:扩展了一个经典的错误标识算法,在标记错误过程中记录该错误所导致的系统状态,再以该状态做为初始状态继续向前观察多步以区分错误。将模型诊断的思想引入到被动测试错误诊断中,设计了一个层次化的被动测试错误诊断算法,该算法首先记录被动检测过程中系统经历的转换轨迹,再用变异分析的方法生成候选诊断,再通过增加观察步骤数减少候选诊断集合规模,最后通过结合主动测试的方法进行错误区分,直至定位错误。该方法可以解决现有被动测试错误诊断算法无法区分等价错误,无法诊断重复错误,继续观察步骤数受限等问题。最后将该方法由有限状态机模型推广到通信有限状态机模型。4.被动测试中的增量实现标识:在Internet协议中,绝大多数协议的状态机是不完全的。主动测试中,基于状态机模型自动生成的测试序列往往是弱一致性测试序列。该序列只考虑覆盖规范中的转换,如果系统额外的实现了某个转换,主动测试序列检查不出该转换。本文提出的解决方法是:先用被动测试的方法检测被测系统是否存在额外实现的转换;检查出系统中存在增量实现后,分析被动测试轨迹,找出可能出现增量实现的状态和输入输出,结合运用交叉验证序列来标识增量实现。所提方法可应用于协议实现有差异的操作系统类型鉴定和程序异常检测。5.主被动测试相结合的协议一致性测试系统设计和实现:设计和实现了一个可高效执行的协议自动化测试系统。该系统能够在线配置测试参数,解决了传统测试中需手工配置被测体的问题;使用中央控制器控制多个虚拟测试器对系统实现进行测试,简化了协调控制和物理组网;使用XML文件组织测试用例和测试参数,解决了测试用例的批量连续执行问题;依据测试用例间的依赖关系决定用例执行顺序,根据用例的执行结果动态决定依赖测试例的执行结果,在不影响测试覆盖率的情况下,降低了测试开销;吸收被动测试作为主动测试的有益补充,提高了测试覆盖率。