软件测试典型案例的研究及思考

2014-03-06 07:25:16冯济舟刘洪喜
航空标准化与质量 2014年5期
关键词:字段软件测试指针

冯济舟刘洪喜

(1.中国电子科技集团第三十八研究所,安徽 合肥 230088;2.空装驻安徽地区军事代表室,安徽 合肥 230088)

软件测试典型案例的研究及思考

冯济舟1刘洪喜2

(1.中国电子科技集团第三十八研究所,安徽 合肥 230088;2.空装驻安徽地区军事代表室,安徽 合肥 230088)

软件测试是软件能力成熟度模型集成的重要活动,通过对软件测试典型问题的分析和研究,提出了解决方法,对软件质量的提升具有实际意义。

软件测试;软件能力成熟度模型集成;解决方法

软件测试作为能力成熟度模型集成(CMMI,Capability Maturity Model Integration)验证(Ver,Verifcation)和确认(Val,Validation)过程域的重要实现手段,是软件生命周期模型中的重要阶段,是保证软件质量的重要途径 。近年来,随着软件规模和复杂程度的不断提高,软件测试的难度也不断加大。

本文根据实际工程经验,总结出软件测试过程中遇到的典型问题,并通过对这些问题的阐述和分析,提出了预防此类问题发生的解决方法,对提高软件质量具有积极意义。

1 软件测试典型案例分析及解决方案

1.1 接口报文中总汇信息数量字段判断不合理导致系统崩溃

1.1.1 场景复现

软件配置项间传递消息的接口报文中含有汇总下文信息数量的字段,且该字段的报文下文以枚举方式列举出汇总信息数量个数的数组结构元素内容信息,其报文结构如表1所示。对于将此种类型报文作为输入的被测软件,出于安全性方面的考虑,应进行对异常条件下软件的处理和保护能力的测试,以表明不会因为可能的单个输入错误而导致不安全状态。当接口报文中汇总下文信息数量字段设置为极大值后会导致被测软件系统的崩溃。

1.1.2 问题分析

在被测软件系统的读取过程中,当指针读取到报文如表1所示的“数组结构数量统计”字段时,系统会按照这一字段的数值大小在本地计算机内存中开辟动态空间用于存储报文下文中以“数组结构数量统计”字段值为个数的数组结构元素内容信息。假设在此字段读取过程中不加限制和判断,那么对于此读取过程来说,系统最大可以申请字节容量的内存空间,当程序申请的动态内存超过实际物理内存拥有的空间时,会导致系统崩溃。

表1 含有汇总下文信息数量字段的接口格式

1.1.3 风险控制方法

对于被测软件接收处理含有汇总下文信息数量字段的接口报文时,在对汇总下文信息数量字段数据进行读取时,要对此字段值进行判断和限制,以防止由于汇总下文信息数量字段值过大,引起系统崩溃。

1.2 帧头判断不合理导致数据丢帧

1.2.1 场景复现

通讯模块处理数据时按照通讯协议的内容首先对信息头的有效性进行判断,当且仅当报头为有效信息头后才继续接收后续数据,否则数据舍弃。程序设计时设置的通讯协议格式如图1所示,其中X Y表示信息头,省略号部分表示信息正文。在对此信息格式进行接口测试的过程中,采用猜错法测试被测软件,当接收到如图2所示信息格式异常的接口输入时,被测软件未能对X后具有正确格式的X Y+正常信息正文的信息进行解析处理。即在此情况下被测软件不能判断出正常数据信息,造成软件丢包现象。

1.2.2 问题分析

出现此现象的原因是程序在对信息头判断方式不合理而造成的,导致当程序接收到数据X X Y+正常信息正文时,会误把真正信息头的X当作是第一个信息头X的一部分,即将信息头识别成X X,并按照判断有效信息头的原则,将此有信息头问题的信息进行舍弃,从而导致被测软件接收不到正常数据,出现丢信息现象。

图1 正常通讯协议格式

图2 信息头异常的通讯协议格式

1.2.3 风险控制方法

在进行信息头协议判断时,应采用滑动窗口判断方法,如在处理信息格式为X Y+正常信息正文的协议时,如果判断信息头是X,而第二个信息头不是Y,则应重新判断下一个为X的字节,以免丢掉类似X X Y+正常信息正文的合法信息。

1.3 未考虑范围边界导致系统崩溃

1.3.1 场景复现

被测软件某功能运行的有效输入范围为(-1500,0)和(0,1500),但在对此功能的合法边界值和非法边界值进行输入时发现,当输入非法边界值为0时,软件系统崩溃;当输入非法边界值为-1500或1500时,程序计算出错。

1.3.2 分析及思考

程序在进行功能的有效边界值判断时,未明确有效输入范围的开区间、闭区间以及特殊值,导致软件系统崩溃及处理结果错误。

1.3.3 风险控制方法

在对功能的有效输入范围进行开发实现时,要严格按照软件需求规格说明中的规定,对边界值进行有效性判断,以防止非法边界值在参与程序计算过程中产生诸如除数为0、负数取对数等导致系统崩溃的结果。

1.4 迷途指针导致系统崩溃

1.4.1 场景复现

软件某功能模块源代码中存在所指向的对象被释放或者收回后,未对该指针做任何修改,以至于该指针仍旧指向已经回收的内存地址,当程序再次直接引用该指针时,导致软件系统崩溃。

1.4.2 分析及思考

本案例涉及的问题是软件开发中很难发现的一种错误,即迷途指针。当所指向的对象被释放或者收回后,如果未对该指针做任何修改,则该指针仍旧指向已经回收的内存地址,当操作系统将这部分已释放的内存重新分配给其它进程,而原来的程序又要重新引用现在的迷途指针时,将产生无法预料的后果。通常来说,若原来的程序继续往迷途指针所指向的内存地址写入数据,将破坏操作系统所分配的在此内存空间中存储数据的其他进程,进而导致不可预料的程序错误。这种类型的程序错误不容易找到问题的原因,通常会导致Linux系统的段错误和Windows系统的保护错误。如果操作系统的内存分配器将已经被覆盖的数据区域再分配,就可能影响系统的稳定性。

1.4.3 风险控制方法

在编码过程中,谨记指针指向的内存空间一旦被释放,就立即把该指针置为空指针的编程原则。因为当空指针被重新引用时,程序会立即停止,这样可以避免数据损坏或者出现某些无法预料的后果。

通过代码审查的方式在早期可以诊断程序的迷途指针问题。可以借助代码审查工具在软件实现完成之后或确认测试开展之前对编写的源代码进行代码审查,以发现与程序相关的可追溯性方面、逻辑方面、数据方面、计算方面、比较方面、接口方面、注释方面、输入/输出方面以及内存方面的软件代码错误、缺陷和隐患,从而排除如迷途指针错误的软件问题。

1.5 加密数据库文件的安全问题

1.5.1 场景复现

出于对软件系统安全方面的考虑,在对软件系统进行某些操作之前,要先完成相应操作的访问控制权限的验证,使用者只有通过访问控制权限的验证,才能对软件系统相应授权范围内容进行操作。访问控制权限的验证信息存储于97版本ACCESS数据库的加密MDB(Microsoft Database)文件中。但在对软件系统进行安全性测试过程中,通过对加密MDB文件进行攻击,获取到访问控制权限信息,成功获得软件系统操作权限,对系统的安全方面造成严重影响。

1.5.2 分析及思考

对于97版本的ACCESS数据库文件的有效密码是13位。不加密时,MDB文件的第67至79位是固定的(86 FB EC 37 5D 44 9C FA C6 5E 28 E6 13);加密时,分别依次用密码的每一位与上述对应的16进制数进行异或操作。根据97版本加密ACCESS数据库的特点,可以将未加密的MDB文件的第67至79位的固定字节数据替换到加密MDB文件的第67至79位字节位置,从而使加密数据库变为非加密数据库,进而可以对其内容进行随意读写。2000版本的ACCESS数据库文件原理与97差不多,区别在于每位密码对应两个16进制数,其中前一个的16进制数只起到迷惑作用,没有实际用处。2000版本ACCESS数据库的破解方法与97版本的ACCESS数据库破解方法类同。

1.5.3 风险控制方法

开发人员在选取构件产品进行应用开发时应遵循如下流程。分析并列举备选使用构件产品的特性及缺陷;在使用备选构件产品前要详细分析其缺陷对所用软件开发功能的影响;对于有影响的,考虑能否通过增加最小技术手段来弥补;对于无法通过技术手段弥补或者付出代价过大的,考虑选择其他软件工具并重新开始分析;对于无影响的或者通过增加最小技术手段即可避免其缺陷对所开发应用带来影响的构件产品,则采用。对于本案例涉及的加密数据库文件安全性问题的解决方法,可以遵照以上的流程和原则,考虑通过对写入ACCESS数据库的记录进行加密的技术手段来弥补97版本加密ACCESS数据库容易被破解的问题。如此即使打开了加密数据库文件,但是文件里的内容也都是密文形式存储,无法辨别其代表的明文内容,这样也就无法获取文件中的访问控制权限信息以对系统安全性方面造成影响。

1.6 过24点后时间信息不一致导致系统瘫痪

1.6.1 场景复现

对需要实时处理显示的软件系统来说,时间信息是决定软件系统能否正常运转的关键。在对此类型软件系统进行安全性测试时,考虑在模拟仿真环境下从时间的“24点”、穿越“24点”以及从两个方向趋近于“24点”作为输入值测试软件系统功能实现的正确性,发现软件系统在经过24点后,无法继续显示系统处理的结果信息,系统出现瘫痪。

1.6.2 分析及思考

出现以上问题的原因在于实时系统间传输的报文信息时间表示不一致,导致系统误判。通常有两种表示过24点时间的方法:其一,将一天表示成86400分钟,当系统时间达到86400分钟后,程序通过取模运算使时间值翻转,系统即而从0开始重新累加计时;其二,系统时间达到86400分钟后,程序采用单调递增方式继续累加直至系统时间达到所能表示的最大数值。当实时系统时间采用这两种不一致的处理方式时,由于对方系统发来的实时信息的时间与本系统不一致,本系统会错判对方发来的实时信息不是本系统需要的实时信息,导致本系统从此刻开始不再处理对方发来的任何实时信息数据,导致系统瘫痪。

1.6.3 风险控制方法

在软件架构设计时即要统一、明确系统内各软件构件关于时间信息的表示方法,以避免实时软件系统间由于“时间一致性”而导致系统瘫痪问题。

2 结束语

本文通过对软件开发过程中的典型测试案例的分析和描述,总结出问题的解决方法和预防措施,对确保软件系统的可靠、安全、稳定的运行具有积极意义,对软件开发人员及软件测试人员的工作具有实际的指导意义。

[1] 万江平,孔学东,杨建梅. 集成能力成熟度模型(CMMI)的研究[J]. 计算机应用研究,2001,(10).

[2] 李兴兵,李孟军,谭跃进. 军用CMMI模型的建立初探[J]. 兵工自动化,2003,(06).

(编辑:劳边)

TP306

C

1003–6660(2014)05–0038–04

10.13237/j.cnki.asq.2014.05.011

[收修订稿日期] 2014-07-13

猜你喜欢
字段软件测试指针
图书馆中文图书编目外包数据质量控制分析
基于OBE的软件测试课程教学改革探索
计算机教育(2020年5期)2020-07-24 08:53:20
偷指针的人
娃娃画报(2019年5期)2019-06-17 16:58:10
EXCEL和VBA实现软件测试记录管理
电子制作(2018年16期)2018-09-26 03:27:18
关于软件测试技术应用与发展趋势研究
电子测试(2017年15期)2017-12-18 07:19:20
为什么表的指针都按照顺时针方向转动
软件测试工程化模型及应用研究
基于改进Hough变换和BP网络的指针仪表识别
电测与仪表(2015年5期)2015-04-09 11:30:42
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述