|
COM技术在软件可测试性中的应用7 s& E$ Z% O( }- A9 P8 k$ t
4 p. R" y/ P' [, T. j
张健, 孟晨, 王 成
. d* v3 a) |5 a! N(河北石家庄 军械工程学院导弹系测控教 050003)
/ c5 j4 p# J* Q3 _9 j+ v, r7 g; T
摘要: 为解决某导弹自动测试系统软件测试难度大的问题,介绍了常用提高软件可测试性的方法和DLL技术。并运用COM技术设计出该系统的组件软件,显著提高了自动测试系统软件的可测试性。3 p! G0 h1 A# n0 E% Y" }
关键词:组件软件,可测试性,自动测试系统2 i! X! A+ m3 c7 @ }
; M8 v* A4 l6 b% w1 d Application of COM Technology in Improving ATS Software Testability
+ ?9 ~: f5 _/ E$ g9 iZHANG Jian,MENG Chen,WANG Cheng
6 n) _" D9 n0 r% O( s, Q(Ordnance Engineering College,Shijiazhuang 050003,China)5 W* D% E, ^& X. r4 M5 m3 r" g5 C: ]
Abstract: In order to solve problems in testing course, we introduced some methods and DLL technoloygy. we design a software based on the COM technology for a missile weapon systems. The practices have proved that it can improve the software testability greatly.
% y% t9 ^1 C# j. l$ q3 d6 | Keywords: component software, testability, ATS.
: O# G2 p; W& s* g4 G: l
+ ]1 Z0 d' b' d3 `$ z
8 e* I7 o3 _4 ^8 A# ?+ z引言
; I: c: w* K" j+ d
! y5 h* j( O+ m6 A 软件的可测试性指对软件测试以保证其无错误和满足规约的难易程度[1]。事实说明,软件的可测试性越好,软件存在的错误越容易被及早发现,修复费用也越低。大型装备测试系统软件一般代码都在上万行,而且由于与硬件打交道,测试人员往往难以看懂开发人员写出的程序。这样在开发阶段就必须考虑软件的可测试性,这也正是可测试性设计的精髓,这样可以减少软件中的错误,从而大大降低费用。& z. `9 _- x2 _
. S% e- X+ N0 T! Y% _ L常用软件测试方法和DLL技术
& w8 _0 O2 f C0 ^* _& j2.1 常用软件测试方法2 O) r/ D* w D+ g. ^6 G$ O
软件测试从不同的观点上可以分为黑盒测试、白盒测试、单元测试、系统测试、回归测试和插装测试等[2]。从实用角度出发常见的测试方法有增加测试点:例如,' C: ?7 Y) E# A- @) _9 {
在进行循环测试时,在循环的开始和结束放置计数器就能知道循环执行了多少次;程序划分:在编写程序时,通常依据具体的功能而将实现各个功能的代码封装为函数,而在主程序中调用函数;程序切片[4]【5】:即在测试软件时,只考虑对测试变量有影响的代码行(详细内容可参阅文献[5])。
9 ` _$ {1 ^3 E3 ^5 k7 N2.2 DLL技术6 \! t2 P8 I+ b
使用DLL技术,将完成某项功能的代码封装为动态链接库,然后在主程序调用动态链接库中的导出函数,可以有效提高软件执行的速率和相互独立性,给测试带来很大的便利。这种技术在跨平台时使用尤其方便。例如程序中使用的定时器的精度要在微秒的数量级上时,可考虑使用QueryPerformanceFrequency和QueryPerformanceCounter这两个API配合来达到定时的目的。而如果测试程序是在Labwindows\CVI平台下开发的,测试程序不能直接调用这两个API,则可以在Visual C++平台下将QueryPerformanceFrequency和QueryPerformanceCounter这两个API封装为Win32动态链接库中的导出函数,这样就可以在测试程序中调用了,而且在软件测试时,可以将主程序和动态链接库分开测试。动态链接库测试完成之后,在测试主程序时可以不考虑测试动态链接库的导出函数,加强了测试功能模块的内聚,减少了模块间的耦合,提高了软件系统的可测试性。( W4 z+ F& { @" A. T5 s7 W
; r5 @7 Z! o+ G
COM技术[6,7]( B, ?; `3 D9 M" g2 q: w3 g
3.1组件软件【5】的设计
# q! j2 }# V' P, [. [ 随着技术的进步,测试系统越来越庞大,软件在计算机自动测试与故障诊断系统中的作用越来越重要,如果按照计算机软件发展早期那样做,一个应用系统往往是一个单独的应用程序。程序将变得非常庞大,软件的可测试性将很差。
, m' n, O- m+ e8 d+ ]1 i 从软件模型角度来考虑,一个很自然的想法就是把一个庞大的应用程序分成多个模块,每一个模块保持一定的功能独立性,在协同工作时,通过相互之间的接口完成实际的任务。我们把每一个这样的模块成为组件,一个设计良好的应用系统往往被切分成一些组件,这种按组件模型组合得到的软件称为“组件软件”【5】 ,而组件之间的接口时组件软件的关键,因为接口是组件之间通信的基础。因此,软件组件应该遵循统一的标准,而在目前通用的 Windows操作系统上,COM就是这样一个大家一致推崇的组件标准。COM组件之间还可以通过包容和聚合两种方式来实现可重用性,从而在组件1中可以调用组件2的所有或者部分接口。
1 \( ^# j2 _1 S( G8 L7 K 图1为某导弹基于COM技术的组件软件框图。整个组件软件由控制管理组件、自动测试组件和故障诊断组件构成。) }1 o: y1 f8 J1 O6 F: u
* U$ x: f; e/ S1 e ( P0 D0 I- ]4 [5 s! ^2 b
. \6 z8 N, c4 b7 I1 V- o
4 K8 E( o. B/ c
$ k$ a6 `9 _* I; P0 R& u + H- I! j1 u0 \; r$ E1 \
+ ~1 T% O+ ~% W6 n
: s, c( f8 t4 F$ ^: V3 J2 r! U- P! n
d% c% d+ T1 t# b5 ]
! E% j* Q8 D% x! d; C) ~+ f. O* k
/ [7 w" E$ R6 `) J$ s& x: q1 N
% [8 t9 e. T( T9 {9 L 1 Q7 ~4 l' @1 e
- B! @6 B) g; Q0 W
图1某导弹基于COM技术的组件软件框图
0 X r, O8 k. R' }9 J6 e* o 在测试组件软件时,首先测试打印显示组件、通信组件、系统自检组件和数据处理组件、主控组件、驱动程序组件、测试流程组件和测试结果保存组件、故障规则组件、知识库维护组件、数据库管理组件和故障诊断组件;测试成功后,再测试控制管理组件、自动测试组件和故障诊断组件;测试成功则组件软件测试成功。这样,软件测试分块而有序,不像过去庞大的系统测试时只能按照测试流程从头测到尾,测试起来非常混乱;显著改善了软件测试性。2 i$ Y. v4 d% p, B7 }
3.2组件的测试
3 Y: X* ^: l2 j% G( b/ Y 测试COM组件之前首先要将该COM组件在所用计算机上注册,然后就可以通过使用标准的COMAPI函数来创建一个COM组件实例,并返回指向COM对象的接口指针。客户程序就可以利用该接口指针来调用接口所支持的方法。从而就像测试函数一样,给函数选择一个合适的测试用例,并在程序中通过增加观察点的方法来观察函数设计是否满足要求,一个好的测试用例都是应该能较容易地发现缺陷.它们都是NP完全问题,即测试规模随着软件规模的增长呈指数级增长。由于软件测试是NP完全问题,因而穷举测试是不可行的.但是在软件测试中随机测试是非常有用的,尤其是在测试初期,因为随机测试十分自然并且避免了要考虑测试用例的生成.对于软件测试,输入可以是数值、字符和数据结构.它们编码应为二进制,并且这些二进制序列能解码为实际的输入,从而能够采用随机测试[5]。
& K5 n" q+ T6 @$ H 本文以通信组件为例来说明组件的测试。如果有了一个通信组件是用来提供串口通信服务的,而且该组件包含有读串口和写串口两个方法。在测试该组件写串口方法时,则在得到该组件的接口指针之后,随机产生一个字符串,利用该接口指针调用写串口方法,然后在串口的另一端接收,判断串口上传送的数据是否与随机产生的字符串完全相同,相同则说明该组件写串口的方法测试成功。在测试该组件读串口方法时,则在得到该组件的接口指针之后,随机产生一个字符串,在串口的另一端发送该字符串,利用该接口指针调用读串口方法,判断串口上读到的数据是否与随机产生的字符串完全相同,相同则说明该组件读串口的方法测试成功。当组件的所有方法测试完毕,并且都成功时,则该组件测试成功,否则测试失败。; i; k; o& O) K9 ^7 B$ v
* _ k$ K9 T" c0 E& _: e
结论
9 o& b5 A) t- l* s7 E 运用COM技术来设计某导弹自动测试系统的组件软件,相对过去测试系统就完全按照测试流程和需要编写一个测试程序来说,显著提高了自动测试系统软件的可测试性,节约了大量的测试时间。
6 X; O7 P t; q参考文献3 b& g) J+ w4 O" d; F# ]
[1] 朱鸿,金凌紫.软件质量保障与测试.北京:科学出版社,1997: I- w6 V% [: x3 G+ n# y
[2] Ohtake S, Inoue T, Fujiwara H, Sequential test generation based on circuit pseudo-transformation[A]. Proceedings of the 5 th Asian Test Symposium[C]. Taiwan: Institute of Electrical and Electronics Engineers, 1997.62-67.
9 N; L% m" x5 c+ y4 ^ Z$ ^! }" ][3] Saravia Y. A pragmatic approach to the design of selt-tseting circuits[A].1989 Int Test Conf[C].Washington: IEEE Pub ,1989.745-754.
- W) L3 J* ]9 P A5 v[4] Weiser M. Program slices: Formal ,psychological , and practical investigation of an automatic program abstraction method[D]. Ann Arbor : University of Michigan ,1979.- i" o, B3 ]# m
[5] 刘穆进, 徐拾义. 软硬件测试的一致性[J]. 同济大学学报. 2002(10): 1186-1189.
% {4 g3 V7 ?7 {+ e[6] 潘爱民. COM原理与应用[M]. 清华大学出版社. 1999:10-11.
' W8 ^! p0 I$ c1 ~7 t. u[7] 汪红.虚拟仪器软件系统的组件化设计[J].工业控制计算机,2000(06):29-30.
& W) Q" W' `) g, @+ u: h* o9 z2 W' _! M. r4 y5 \$ z# p# _
关注www.lunwen118.com可以参阅更多的精品论文。。 |
|