IP网络的测试方法
随着IP附应用时及和深入,IP网络的建设、维护和故障诊断面临着巨大的挑战:网络的规模越来越大、组成网络的设备越来越复杂、在网络中运行的软件系统越来越庞大、网络承载的业务越来越多.
网络测试是保证网络高性能、高可靠性和高可用率的基本手段,它在IP网络建设和发展中的重要意义正得到日益广泛的认可。
网络测试
网络是一个很复杂的系统,通常人们把网络分为不同的层次予以简化。在网络测试中,我们可以把网络分为3个不同的层次:设备层、系统层和应用层,因此网络测试正是轩对这3个层次来进行的。
网络设备测试主要包括功能测试、性能测试、一致性和互通性测试等几个方面。网络系统测试包括物理连通性、基本功能和一致性的测试、网络系统的规划验证测试、性能测试、流量测试和模型化等。网络应用测试是测试网络系统支持各种应用的能力。完整的网络测试包含完成上述3个层次的所有测试。
网络测试主要包括测试方法、测试工具和测试经验等3个方面的内容。无论是测试方法的设计、测试工具的发明和运用还是测试经验的积累,都有很高的技术要求,其中测试方法是核心。网络测试的方法和手段因测试的目的而有所不同。典型的网络设备测试的方法有2种:第一种方法是使用网络测试设备单独对产品进行测试;第二种方法是将设备放在具体的网络环境中,通过分析该产品在网络中的行为对其进行测试,这种网络环境多数是用仿真的方式实现的。测试工具主要有线缆测试仪、协议分析仪和网络智能分析仪等。实际的网络在设备、拓扑、管理维护等各方面千差万别,可能出现的问题也是五花八门的,测试人员除了要掌握必须的网络知识外,还需要有丰富的系统集成和现场测试的经验。
网络系统的建设一般经历规划、设计、部署、运行和升级五个阶段。网络测试应贯穿其中的每个阶段。由于技术或者经济的原因,实际网络测试的应用和理论上还有较大的差距。无论从经济的角度还是从时间的角度来看,用户都很难自己来完成所有的测试。用户在选购设备时可以参照由设备提供商提供的第三方测试机构对其设备的测试报告,依据测试报告和自身的需求选择设备。在网络设计施工完成之后,应该由施工单位以外的测试机构对网络进行网络系统测试,以检验工程质量。最后在试运行阶段对网络承载业务和应用的能力进行测试,即进行网络的应用测试。但是, 我国网络测试起点较低,虽然已经成立,了多家开展网络测试的机构,但至今还没有形成相对比较权威的网络测试机构,我国的网络测试技术和市场都有待发展。
IP网络的测试技术
IP网络测试和上述所有的网络测试一样,包括对网络设备层、系统层和应用层的测试。与其它网络测试不同的是:(1)IP网络中的设备与电信网中的设备在性能、安全性和稳定性方面有较大的区别,它们原先更多的是用于计算机互联的设备;(2)IP网络是IP网络测试的目标,它的网络层协议采用IP协议,IP 协议并不保证网络数据的可靠性,它采用“尽力而为”的方式转发数据包;(3)IP网络以传输数据业务为主,业务高很高的突发性,IP网络几乎可以承载任何业务,因此网络应用层的测试比较复杂。
IP网络设备测试
我们就以太网交换机的测试为例说明具体的网络设备测试。
首先要分析交换机的物理特性,即对诸如外观(包括颜色、重量、尺寸和包装等)、端口配置、扩展能力等用户可以直接了解的设备信息的测试,主要的测试方法是目测。这些参数和交换机本身的功能和性能没有关系,但是对用户来说则很重要,将直接影响用户对设备的评价。一款颜色:搭配不和谐、尺寸很大的交换机,显然不会成为用户优先选择的目标。
进一步的测试需要一台带有收发端口的测试仪。测试仪与被测交换机有两种连接方法。
在第二种连接方式下,如果测试仪(发送)和测试仪(接收)之间没有计算机的控制,则无法完成部分精度要求较高的测试项和在发送与接收之间有时间或逻辑关系要求的测试顶,如流量测试等。
在测试仪与被测设备连接完成以后,在开始测试之前,还要首先配置被测的交换机,包括对软件和硬件的配置,特别是配置交换机支持的协议并予以激活。
首先是对交换机进行功能测试,目的是检测设备是否能够完成交换机这类设备所应具备的功能,如帧的转发、过滤、流量控制、VLAN、生成树协议等。
接着进行性能测试,目的是了解交换机完成各项功能时的性能情况。交换机性能测试的参数包括吞吐量、时延、帧丢失率、处理背靠背数据帧的能力、地址缓冲容量、地址学习速率等。RFC1242和RFC2285分别定义了网络互联设备和LAN交换设备测试的基准术语,RFC2544和RFC2889则分别定义了网络互联设备和LAN交换设备测试的基准方法。这几个RFC是测试网络设备时参考的标准。
完成上述测试之后,需要进行一致性和互通性测试,以验证交换机是否符合各项规范的要求,包括协议的一致性,确保交换机和其他的网络设备进行互联时不会出现问题。
对交换机设备的测试最终应提供一份完整的测试报告,测试报告对在这次测试中的测试对象、测试工具、测试环境、测试内容、测试结果等进行详细论述。测试报告中包括对各测试项目的测试结果,应以数字、图形、列表等方式记录下来。完整、客观的设备测试报告是购买设备的重要参考。
IP网络系统测试
IP网络系统测试的第一步是了解所测网络的状况,包括网络所属单位的情况、网络设备情况、网络主要应用、使用该网络的人员情况、网络中存在的问题等等。对网络状况的调查可以明确测试的对象、目的、要求等,为制定详细的测试方案做好准备,对网络设备的调查可以为所测网络建立详细的网络文档。网络文档的内容包括网络拓扑结构图,路由器和交换机的生产厂家、型号、内部参数配置,服务器和工作陆的生产厂家、型号、内存、硬盘、网卡的序列号和MAC地址等,IP地址、防火墙和操作系统参数配置等。
了解了网络基本状况后,就可以根据测试要求拟定详细的测试方案。
物理连通性、基本功能和一致性的测试是最基本的网络系统测试内容,其中主要是线缆测试,用以查明所测线缆及布线是否符合设计要求和国际标准。如果线缆的安装不符合各类标准,就应该绘出具体的各种类型电缆管脚的连接图。
模拟和仿真是规划验证测试的两个基本手段。模拟即用软件的方法建立虚拟的网络系统及其运行模型,通过设置配置参数模拟实际环境下的网络运行,并给出对该网络的评价。仿真则是建立真实的试验环境来模拟实际的网络运行。模拟和仿真对大型网络的规划设计很有意义,它可以在网络实际建设之前了解网络的特性,或者发现规划设计中的缺陷,大大降低网络建设的风险。但是模拟和仿真本身需要许多资金和时间,因此在网络建设中各单位会参照具体情况来决定是否要做这项测试。
性能测试可以分为被动测试和主动测试。被动测试就是用仪表监测网络中的数据,通过分析采集到的数据判断网络性能状况。被动测试在不影响网络正常工作的情况下测试。主动测试通过向网络中发送特定的数据包来分析网络系统的性能。不论是被动测试还是主动测试,都需从网络中采集数据。一个IP网络系统可以分为物理层、数据链路层、网络层和应用层。IP网络系统的性能测试应该分别针对物理层、数据链路层和网络层进行。如以太网,物理层的测试包括碰撞分析、错误统计和是否有随机能量、无格式的帧和信号回波等,数据链路层的测试包括流量分析、错误帧(FCS错误帧、长帧、短帧和延迟碰撞)统计等,网络层的测试包括响应时间测试、网络层协议分析、IP路由分析等。
流量测试和模型化的工作有利于提高整个网络的运行效率,其中涉及到运用一些很深的数学工具和丰富的网络经验,许多关键技术还有待研究。
IP网络应用测试
完成IP网络设备测试和系统测试之后就可以在网络上加载各种应用,各种网络应用的性能水平与网络的类型、网络本身的性能有直接关系。IP网络应用测试是 IP网络测试中最高层次的测试内容,主要测试IP网络对应用的支持水平,如网络应用的性能和服务质量的测试等。另外,IP网络应用测试和网络应用本身直接相关,对于不同的网络应用,有不同的测试内容和测试方法。在部署VoIP时,需要测试网络中的交换机和路由器设备能否有效地支持语音流量和语音QoS等, 在测试用于视频传输的网络时,需要测试视频传输在IP网络中的性能以及网络用户是否能够得到满意的视频质量等
提高测试覆盖度
测试覆盖度评估是衡量阶段性软件测试执行状态的重要手段之一,来确定测试是否达到事先设定的测试任务完成的标准。测试覆盖率则是测试覆盖度评估中一种量化的表示方法,一般通过被测试的软件产品需求、功能点、测试用例数或程序代码行等来进行计算。
软件测试覆盖率常用的计算公式:
功能覆盖率= 至少被执行一次的测试功能点数/ 测试功能点总数 (功能点)
需求覆盖率= 被验证到的需求数量 /总的需求数量 (需求)
覆盖率= 至少被执行一次的测试用例数/ 应执行的测试用例总数 (测试用例)
语句覆盖率= 至少被执行一次的语句数量/ 有效的程序代码行数
判定覆盖率= 判定结果被评价的次数 / 判定结果总数
条件覆盖率= 条件操作数值至少被评价一次的数量 / 条件操作数值的总数
判定条件覆盖率= 条件操作数值或判定结果至少被评价一次的数量/(条件操作数值总数+判定结果总数)
上下文判定覆盖率= 上下文内已执行的判定分支数和/(上下文数*上下文内的判定分支总数)
基于状态的上下文入口覆盖率= 累加每个状态内执行到的方法数/(状态数*类内方法总数)
分支条件组合覆盖率= 被评测到的分支条件组合数/分支条件组合数
路径覆盖率= 至少被执行一次的路径数/程序总路径数
除此之外,覆盖率还包括类覆盖率、函数覆盖率、代码块覆盖率等,如EMMA中
测试评估可以说贯穿整个软件测试过程,可以在测试每个阶段结束前进行,也可以在测试过程中某一个时间进行,目的只有一个,提高测试覆盖度,保证测试的质量。通过不断的测试覆盖度评估或测试覆盖率计算,及时掌握测试的实际状况与测试覆盖度目标的差距,及时采取措施,就可以提高测试的覆盖度。
测试覆盖度的评估依赖于不同的测试阶段或不同的测试方法。如在单元测试中,测试覆盖率是建立在被测试的代码行、程序分支和程序路径等的度量之上,从软件质量保证的要求出发,单元测试的覆盖率要达到80%之上。白盒测试方法主要以程序语句、判定-条件、条件组合和(基本)路径等覆盖率来衡量,和单元测试是吻合的。而在系统功能测试中,则以功能点、测试用例、需求数等覆盖率来衡量。
要获得、提高测试覆盖率,常常需要借助测试工具。下面就以两个测试工具为例。
1. EMMA
EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具,支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是能测出某一行是否只是被部分覆盖,如条件语句短路的情况。EMMA能生成 text、xml、html 等形式的报告,以满足不同的需求,其 html 报告提供逐层细化查询功能,能够从 package 开始一步步链接到我们所关注的某个方法。EMMA 能和 Makefile 和 Ant 集成,效率很高,便于应用于大型项目。
EMMA 是通过向 .class 文件中插入字节码的方式来跟踪记录被运行代码信息的。EMMA 支持两种模式:On the fly 和 Offline 模式。On the fly 模式往加载的类中加入字节码,相当于用 EMMA 实现的 application class loader 替代原来的 application class loader。On the fly 模式比较方便,缺点也比较明显,如不能为被 boot class loader 加载的类生成覆盖率报告,也不能为像 J2EE 容器那种自己有独特 class loader 的类生成覆盖率报告。这时,必须求助于 Offline 模式,Offline 模式是在类被加载前,加入字节码。EMMA 也支持两种运行方式:Command line 和 Ant。
2. Rational PureCoverage
PureCoverage 是一个面向VC, VB 或者Java 开发的测试覆盖程度检测工具,可以自动检测测试完整性和未被测试的范围,在每一个测试阶段生产详尽的测试覆盖程度报告。PureCoverage 将在一个对话框中列出所有应用程序模块,开发人员只需针对每个应用程序构件,就可以简单地设置基于代码行或函数的代码覆盖级别。不仅可以查看每次程序运行的图形化覆盖数据,还可以直接地、实时地控制覆盖数据的记录。对于最关心或最重要的功能模块,可以详细地收集覆盖数据;而对于不太重要的模块,只收集较常规的覆盖数据,帮助开发人员进行有效地测试。
系统的测试活动,依据测试目标,建立在至少一个测试覆盖策略基础上,而覆盖策略帮助进行测试覆盖度的有效评估。覆盖策略有
- 基于需求的测试覆盖评估,依赖于对已执行/运行的测试用例的核实和分析,所以基于需求的测试覆盖评测就转化为评估测试用例覆盖率:测试的目标是确保100%的测试用例全部成功地执行。
- 基于代码的测试覆盖评估,是对被测试的程序代码语句、路径或条件的覆盖率分析。如果应用基于代码的覆盖,则测试策略是根据测试已经执行的源代码的多少来表示的。这种测试覆盖策略类型对于安全至上的系统来说非常重要。
如果测试需求已经完全分类,则基于需求的覆盖策略可能足以生成测试完全程度评测的量化指标。例如,如果已经确定了所有性能测试需求,则可以引用测试结果来得到评测,如已经核实了90%的性能测试需求。除此之外,如果测试软件的数量较大,还要考虑数据量。