第26卷
v01 26
第12期
他 12
计 算 机 工 程
Computer Engineering
2000在 12,9
December 2000
- 软件工程应用与实践专题 · 文章编号:1000--342~,(2[100)I 2—_008々—_04 文靛标识码:^ 中图分娄号: I.P311-5
软件白盒测试的方法与实践
8]~ 毫袅 , z
lT 观珊畦 关键词:白盘剥试:静态刹试分析,软件可雏护性度量;覆盖剥试分析。运行时错误捡剥 >l J1 1
The Methods and Practice 0f.Software WhlteLbox Testing
FEN(;Liang- 、。A.N Shaoqing
(1'he 32ndt3 ectroaicRea r.1ruhI口stilu¨ ofInfi)niI|a|io II1d I Ministr v, Sh tnghai 200233~
I.~bstraetl l his paperinIrodueestile m ethod s,Illoi s alld praclir~( I,“ⅥRre~~biIe box qestiag.in cluding 0n Tf slali c aaMv sis,coverage
testin aiid rlllllimP er JOr checkiEg
IK ywordslW hIlc—boxlesting;StaIi~atlal3 sis Xlcasu J ·¨ ¨ ¨ r川aimainabilI ;(overa~ctc sting:Ru¨tIIlle crF(Fr[h eckin
白盒测试是保证并提高软件质量的常规手段之一 E贯
穿于软件开发的整十周期 (包括单元测试、集成测试 验证
测试,系统测试 )。本文涉厦的鳊程语言均为( (’一语言.
1软件静态测试分析
软件静态测试分析工作 包括 需求规格说明与设计文档
等软件开发各阶段文档资料的静态测试 稚代码评审与走
查、以及应用cAsE工具对嚣程序进行质量分析和编程规则
方面的检查.本文主要舟绍结合f^ sE工具逆行的款件静 态
剥试分析
l-1对源程序进行度量分析与质量分类
依据Is0儿Ec 9126标准,采取度量统计的方法能够分析
程序的某些质量因素.通过对软件进行度量 获得各领域以
厦各作用域的度量元,结合适当的质量模型,蛆台计算相关
度量元作出某质量子特性的评价,进而组合计算相关质量子
特性能娉给出瓣程序采质量特性的评价 目 具有比较成熟
的度量方法与质量模型可以对软件可维护性作出比较客观的
评价 .
(1】度量的领域
对源程序进行度量 可以针对不同的领域进行,比如 ÷
程序的 “文本 、注释 数据流 结构进行度量.
11对程序 文奉”进行度量 选种度量方法依据程序中使用的
捧作数与操作符的^数进行.可以指示与理解代码相关酌司题,屺
如代码重复部分是否太多,函数或语句的规模是吾过于虎大
对程序 支奉 进行度量,主要 考察5十度量元-①nI -T-问
曲操作符个数 ②NI一操作符出现的次数:@n! z同的操忙数
八敷;@N2一替作毂出现的次数:@蝴 Ml一话句教
算中前4个度量元一是HMsIcad度量法的基础 度量元 I'M r是
凶数 的 共和 结束 的 走括 号之 问 的 可 以被 机 圩 的语 句救 (
tateMenIs),这个度量元能够较好地指示函数的可单护性,语句
址与HMstead度量珐中定奠-的走多数的度量元是州 毛的 函敷中包
鲁的语句数越多,其包台的拇作符与捷作数也造多 意昧着理解此
凶数所需作出的努力更多.因此,每个函数中的 辛句敷应当受到 限
制 为了遵小函数的规模,可以将其分解为凡^ f函数,这种分解
有助干为程序建立曼好的函数层次结构.从而改善可雏护性.
IIalsleall度 量法假设程序是 由挺 作符和掉作敷 组成 ,发展 了从
较少的参数中推导程序产品质量特性的理屯.谊理论在n1 NI
n2 N2这4个基奉度量元的基础上建卫 了针对程序长度 程序客
量.算法的实现层次 蝙程使用的语言垭副等的规则.
Halslead度量理论 中定艾了词汇量 (词1[量n: l+n2) 程
序长度 I程序长度N:N=NI+N2)两十度量元.并且提供了程序容
量、(也称为程序信 息量 程度能力 )、潜在吝量V 程序级别
l、智力舍量1 程序困难度D、语言级别IA"vlB等的诗算,厶\式.
通 过 (^s 工 具 可 以 直 接 运 用 这 一度 量 理论 . 剖 如 工 具
l OGI (()PE能够提供 l¨,NI 2¨、N2这4个基本度量元,我们根
据程序喜量计算公式 (V=N。l 岛n)新增(NI l 2 0 (¨l+n2)的计
算蛄果作为组夸度量元 估算模块太小.
在测试工作 中我们还使用了这样两十 “文本 度量元:AVGS
(平均语 句太小,AVGS=(、I+N2)/$1ⅥT J 、 OCF(词 汇颤度 ,
VOCF 1一N2)/In卜n2)).显然,这 些指标的度 量鲒果也 直接 关
系到程序的可维护性。
2)对程序中注释的度量 对于注释的度量主要针对函数定殳前
的、函数 中的 龚定殳前的 娄中的注释块数 注释行敷 注释 字
符数进行,检查译程序中的注释是吾克舟
3】对程序中数据流的度量 这种度量方法基于时函数精^末数
十数 程序 中使用的变量或宏指夸十数等进行计算 用来评价对程
序的理解或傍改所需的努力.
对 数据 流 的度 量 主要 针对 函数 的调 用 波敏 l包括 娄 中 的 函
敷 ) 变量的个数、宏指令的^数,函数参敷的十数 类击各种属
性的情况、类的耦夸情况等进行.
4)叶程序中结构的度量 这种度量万法可“碧出函数控制流复
杂性酌量化结果.可以用来评价理解程序算法或 试其各十路径所
需的努 力.
时程序中结构的度量主要幸}对函数 (包括龚的成员函数 )中的
分支 路径 入口点,出口点,环路复杂度等进行度量.我们采用
M c(abe度量法对程序结构复杂性进行度量.
M cCabe提 出,由程序 流程 圈改造 连通 圈( 中的环路数 V(GI
基金面 目: 电科院软件工程化资助项 目
怍者简介 封 亮 (1 977~),男.工程师.主要从事软件测试工
作;严少清.高工
收稿日期 2000-l1—o8
— 87—
维普资讯
~
第26卷第12期
脑 12
计算凯工程 剖JOO年 12月
Decem ber 2000 Computer Engineering
·软件工程应用与实践专题· 立章蜻号 1刷刷-342阳~ItOO) 12一-1l0S咛一-1l-l 立献标识码=、 申固分类号 TP311 实
软件白金测试的方法与实践
8l平 (叫产叫品捍卫海 100233 )丁r~ I1 可之
:1:1组TZZrut:;7227TJ出了写μ;山软件晗
The Methods and Practice of Software 呐1hite-box Testing
H飞Cl 叶ng 、4.:'<吨haoqing
(The 32[]d Jlccrru Tl Î也民‘ õll'"nh I[] 、 ntuh' or (nft)! 削:l tllln IndL川町、'1inlslr~.'. Shau立h川 200133)
E 、 Dst.-at'l l I hl!'! pap~r in4rodu('l"~ tlt i' m盯ho,、, tll (þt~ a Jl u [Iractlu: '1 f 、 or",、 arc ~hI4('-b()飞 4e :o; I川~. illdodìn c:、oft~ 民 1 1" ~tattc a Tl al~si~. ('onra:!!~
"、 tHlg 3 1l d rU Tl 41mC error checkillg
(....1'"). word~ I 、.\'hitc-bo飞 t l" ~ti[]g; ~ra们c anal、、1、、 1(' :1、Ll J emt'll t~ fllr 川 ::u n tfH Il a lliH f)电【。、 cragl' tl' ~t lll'l~: nUlltÎm(' l' rror lh~ t' ktn l!!
白主制试是保证并提高软件质量的古砚于段之一,它贯
守于软件开友的整个周期(包括单元测试、草成测试、验证
澜'1试电革统测试) .本主涉及的揭程语言均均c.:("~ 语言.
l 软件静态测试分新
软件静态副武分析工作包括 需求规格祠,明与设计文档
手软件开皮各阶段主桔青料的静态测试‘耳!代码讶审与走
查、 U及应用 CÁSE工具对#章程序进行质量?祈和蝙程规 W'J
f面的检查.本主主要介绍结合,ASr:工具吐行的民牛静,芒
测试#析田
1. 1 对源程序进行度量分析与质量分类
依据ISO/IEC 9126标准,禾取度量统计的主法能哺句户和
程序的某些质量因素.通过对软件进行度量 1 获得各领域u
及各作用域的度量元嘈结合埠当的质量模型!组合计耳相关
是量元作出某质量于特性的评价.进而组合τ十茸相是晴量f
特性能够给出珠{i!f某质量特性的许价. fl ft: 具有比较成熟
的度量方法与质量模型可以对软件可维护性叶出比较客观的
评价.
(J)度量的领域
对报程序进行度量‘可且针对不巧的何域进行1 己如.:
程序的"王本"、 r玉释‘数据流‘结构进行IÏ.量-
们叶程序‘主本"进行Jt量这种Jt量方'"依据程序中使用的
操作提与操作耳的本提进行!可叫指示与理解仇码相关的 l斗翅 I 比
如代码重且部分是否太多,品提或诗句的电模是 1, -<i于且大
叶程序"主本币吐行Jt量 玉要考事雪个Jt奄-t: (!ìll] 不同
叶操作怦个数,(<叫1 操作耳出现的次敦 白1l.!-7.,司的操性数
八tt; ④~~ 操作敬出现的次敬!⑦飞mll 一语句敌
其中前4个月t量Jt,是HaIs4t'3 d庄量法的基础庄量Jt刷、H是
函数的头和结束的大括号ζ间的可以被机叮的话。〕歇(
7、 latt'i\hllh) .这个庄量元能唱桂忏地指示晶磊史的可维护性 语/.)
位与 HalsteadJt量法中定义的大要般的Jt量凡是吁n 元的、曲阜生中凡
含的培句数越多 其包含的操作耳与操作挂在越家 意咋舌理解此
尚敬所需作出的每力更多-因此,每个函握中的诗句数应当走到 ril
舍l 为了民 .1 函耻的址模、可μ持其分解力几 Þ-._{_ ,L,软、 4种分解
~f助于为程房建立且好的品数层次结构!从而改~可维护性-
1...4c叫庄量法但武程序是由操作轩和操位数组....在展T 从
轻少的本数中椎导程序产品质量特性的理诠1 摄理性在川 、 1
n2. "'I1i主4个基本Jt量品的基础上建立了轩叶程序长度 程序容
量 t 耳法的实现层次‘皇岛程使用的语言且别苦的姐回OJ.
H .a lslcad庄量理论中电正了坷 i[.量{坷正量 ri=nl+n2 J 程
房长Jt l 程序长&..-:"<1. !\=j\-I+ J\-:! J 两个月t量元 砰且提供了程序在
量、(也称均程序信息量‘程度能:IJ J • !i-在事量 V‘程序级别
t 智力含量l 程序困难度D 语言且1i'lI \\阳等的计算公式-
通过《、时工乒可叫直将运用 1互一且暨理-if:.制如工具
t 川;1....(OP I<.~唱提供n 1 吁 ~I. 112 、0,左川基本庄量Jt.在们根
据程序容量计算企式 l 飞 =~'1 1l岛口)新增刊 l' 叫 2) 1 叫仙 l+n2)的甘
耳结旱件均组合Jt量元时估算模生是大 .1 ‘-
在斗~I试工作中在们还使用了这样两 1、』文本啊庄量元 wιs
{平均语句大 .1‘咱也寻 GS~(飞 1+叫2νSl \1T ) 飞 nc.. (词,L幅度电
VOl F=斗'\i }-;'\2川 ul-n~) ) .里 .tt .这些拮杠的Jt量结果也直格是
革到程序的可维护性.
2 1 叶程序中毛主悖的Jt量叶于法悖的Jt量主晏针叶品挂电义前
的 出握中的 是电义前的 桌中的埠悸地缸‘注释卓tt主 J至非丰
吁数进行 检查#程序中的运释是否走仿
31 时程序中数据班的庄量"'-种庄量方法基予计画缸输入本提
个提程序中使用的茸量或军指令 i、挂号进行计算,周末评价叶程
序的理解轧修改所需的努力.
对敬梧流的庄量主要针叶函数的调用次提!包括韭中的函
数) 主量的个数、定指令的水扯吁品提参数的个数‘主 b各种属
性的情,兄、主的辑合晴:兄手进行.
-1)叶程声中结曲的庄量这种庄量万法可川蛤出函监控制埠草
#性的量也结旱!可川用来坪价理解程应.,.法或地试其各 i、唔径所
需的每力
咛程序中结构的度量主要针时函提(包括是的成员函提}中的
分主‘略任‘气口主唱出口点,耳路直是Jt手进行Jt量 我们革用
\Oh( ::t be&..量法叶程序结构t,*性进行!t量
、h( ::t be提出.由程序,在程图改造的连咀圄 G中的环路提川G)
基童项目=电科院软件工程化资助项目
作者简介 封皇(1 971-) .勇,工程师 l 主要从事软件测试工
悻1 严~、清 l 高工
收稿日期, 20田-l1 -{)B
-87
能表示程序的复杂度,它可“接以下,厶、式计算
(: E—n+2
算中E是固G中节点与节点之间的迫数 n是图(冲 的节点数
显然冬一程序如不其环路复杂度vfG J值越大.程序结构就迪复害.
需要 芷惠的是使用谊计算值作为衡量程序复杂性的一十足度时.应
谊把 B有多种选择的”SwiIch Case”型结构作为例
茁我们的测试工作中使用c^ sE工具LOGISCOPr.其中Ⅵ(-1
的诗车与 上理论太致相同.另有一些补克.即时于有一十或凡牛
进八 [ 和一个或几十出口的程序部件,其控制流囤不是连通图,、
(t:J 计算公式傍致如下
r e(,I=E 2一AEn十^ 【X
巾^rIq是辅助进八 口的^敷、AEx是辅助 退 出【J的个救
Iz下举嗣说 口月V(( l韵计算方击:
I语言程序 中熹一部件的曲代码表示如 :
、t¨【I
、’hile 剌断
n state LIII(*Ill“
if e判断2I
乜代码在程序的中部有一退出口.相丘的控制流圈与V1(,J蛙果
如 图 I所 示 .
辅助退 出口
一
,
个指夸块 控制站构站束
_£拉制结构开始
此控 制流咀中
E=8
A
it=
E
8
n 0
VfGl=8-8I 2+it+I=3
辞 寺九。 新件 拙口
whil 控制站掏 开始
图 I控制流图与V ((,)结果
逼 吐使用V(G}度量元对程序控制站拘的复杂性进 量也,可
找 q=路复杂度较高的程序部件.高的环路复牵度’著 是由于函
数 包含 过多的可执行语 句 1起 的,因此可采取战 少吾 几敏 切分
函数 或分解包含的重复代码等措施 切分函数搏导致哇王包含原
函数徘 炙的部分控制站构的于程序,对于原来具有高{ 雌复杂度的
函数, 复杂性将分布到几个都有夸理环路复杂度的函数中 采取
这些描施对政善程序的可堆护性有显著的作用.
【2)度量元的作用域
-上讨论了可以进行度量的领域,H下按作什 域对度量
元进产}划舟 作用域指定使用度量元旨勺瓣 代码的元素 各种
作用域是:
函数作用域.例如 “局部变量个数L VAR 是一个函
数作用域的度量元.
· 类作用域,例如 “类中的注释行数LCOIk 是一个
熹作川域的度量元
应用作用域,函数之间和娄之间的关系可 ,S来测量
应用岣体系结构复杂性.检测的关系包括:函数l 】的调用关
茉.1列如度量元 “调用关系上的递归情LGA f、CLE
(’++娄之间的继承关系.倒如度量元 ”重复继承的十数Gtt
I RI
(3)结夸质量模型进行质量评价
j■程序进行度量,可 获得程序 “丈奉 ,挺据流、桎
常 结啕,体系姑构方面的信息,也许能够直接腻驿到桌函
数 类、或者程序某一方面的质量 (比如注释是否充分 ),
但如果要对整寸软件的质量特性进行评价.尚需要结夸质量
模型进行.在质量模型中给出各种软件质量特性与度量元之
间的关系以及质量分类计算方法
在我们使用的针对软件可维护性的质量模型中特质量子
特性function STABILITY"(函数稳定性 )定叉为以下这4十
度量元的组告·NBCALLING (谓用的个数 ) RETU (返
回语句的个数 )、DRCT CALl S(直接调用的个数 )
PARA (参 数 个 数 ); 将 质 量 子 特 性 function
—
TESTABII IT't(函数可删性 )定义为以下4十度量元的组
合 DRCT CALLS、LEVL(层次数 ) P,AI、H (路径的个
数 ) PARA:特质量子特性function ANAL",ZABILIT~'
(函数的可分析性 )定=;L为以下4个度量元的组台:VG (环
路复杂度数 ) STMT (语句十敷 J V^Gs(平均语句大
小 },COMF(注释 频度 ) 将质 量子 特性 function
CHANGEAB|¨ TY (函数的可变性 )定义为以下4个度量元
的组合 GOTO (GOTO语 句的个数 J、~ OCF(词正频
度 、LVAR(局却变量的个数 ) PARA.根据质量模型
中的计算方法对程序部件的上述4个质量子特性进行评价.
最后根据模型中质量特性 “函数可维护性 的计舡舟式
r以 作 出 可 维 护 性 评 价 . 此 公 式 为 : function
1^AINTAINABII 『11Y ( 函 数 可 维 护 性 } ; function
4、AI Z 4B1LITj +fuuction aHA、GE.A肌 ,厂j 一
funotion S FAB/L1TY+funcfion FESTAB『LI1’Y.
也可以直观地理解为:函数稳定性 函数可刹性、函数
曲可分析性、函数的可变性这些质量子特性决定了质量特·}生
函数的可维护性 ,而质量于特性由蛆台计算相关度量元
获得。类 压用系统的可堆护性同样也有相应的计算方法
1.2编程规则遵守情况的检查
利用CASE工具制定蝙程的规则,然后依据所制定的规
则对源程序·晴1兄进行拴查 如果不符夸规别的代码得到及时
修正,可以到远增加程序的可理解性、降低堆护成本的 目
的。进一步可以将编程规则划分为编码规则与命名规则。
编 码规 剧 可 针对程序指夸、运算符 代码结构 声明
等方面制定规剐并持查.比如:为了保证程序模块的结构化.可以
规定不得使 用GOIo语 句 为了增加代码可靠性 .避免 笔误 ”造
成损失 可以规定在代码中不得测试赋值操作的结果 (彤如语句:
if1r¨f.1 J 不使用 二.卢.一=等运算符,迁可以规定不得在(1程
序 使用Ci+ 兰键芋
名艘 可咀对程序中局部变量.奎局变量 类等的命名
制定规刖并检查。程序鳊制过程中命名规则的建立与辁查直接有 l
÷增加程序的可理解性 可雏护性.
1.3源代码静态质量分析工具
我们使用的潭代码静态质量分析 工具为VI.~RII OG的
I 州 Is( PE.它可以结夸依据!SO/IEC9 126标准制定的质
量模型对部件 (函数 ) 类,以及整个应用系统的质量特性
作山评价.也可眦根据我们的需要在LOGISC()PE提供的基
本度量结果的基础上制定质量模型、或者在 已有质量模型 中
加^所关一 的质量子特性 在潭代码静态分析的过程中,
I (N;ISCOPE还可吼产生部件的控制流图,类的继承围 部
件间的调用图 有刺于~.fq-的堆护
LoGIsc0PE中的Rulechecker工具用于鳊程规则的制
维普资讯
能在手程序的主#在‘它可川在安U下公式计耳
、 1(~)=E-8+2
其中 E是因U中节β 与节品之闹的边毫史、 n是面们中的节占戳
显然与二一程序如果其环路主串在\'~GI值越大 i 程序拮构<t<t且异 i
需要玉茸的是使用统计耳佳作为衡量程序且杂性的二个尺度时 应
该把具有1种选#的啃wilch. . ...Casf'''型结构作为非|命←
在轧们的酬i;t.工作中使用C-\SE工具LOGIs,corr ,其中、"叶
的甘耳与队上理性大致相同,另有一些扑克 i 即时于有 介或几入
进入口和一乍或几个血口的程序部件 其控制流固不 31,主通面!飞
tq时计耳公式停改如下
飞~(;)二 ['n-2一、F. n+ 、 E 飞
仨叫价也 r,是辅助进入口的A数 AE"是辅助退出口叫个放
"下举例证呐、((,性斗计算方态
4 丁叠言程序中某一邮件的曲代码在示如T
、 md
川,,1叫判断 IJ
m 、t::.te18("8 川、 l 、
" ~岁 l 隐于21
Ifturß;
此代码在程序的中部有一退出口国相应的控制沈国与飞 tt;)乡土果
如圄 l 所示.
辅助<!:l:口
甲
f、指今决 控制结构结#之
一「一)jf;控制结构开始
一「飞一一一
此拉普叫 A围中
[=;11
11=8
.\.En=fl
、 F 、~I
飞 ~G!=S.~12+n+l=3
百
部斗八口 • 部件出口
wbile控制结构开始
固 t 控制茸固与飞. I t; 、结果
it cl:使用、 IGI 1I'量元叶程!j.控制结抖的且在性进 j' 量也 可
.Ä执口吓冉互韭1l桂高的程序部件.高的耳路主J告度守主l 是由于.ÆI
敦包含 4辜的可执行语句引起的 因此可示取凰少去的]、敬 切""
品数 或分解包含的垂直代码等措艳,回?函致将导致哇立包含斥
..,数沛灭的部分控制结构的于程序‘叶于原来具有品品略主l~度的
品数 宾主手持性将分布到几俨都有合理耳碍:tà~司 Jj-!:丈中 示~,
这些抖他对改善程序的可维护性有显著的作 J司-
i 2) 度量儿的作用域
J上计论了可以进行度量的领域,以下按作Il; J~当.对度量
ι进行记l舟、作用域指定使用度量元的晶代码的t幸 各种
作用或是
函数作用域国例如"局部主量个数LVAR" Æ.二个 Jj
数作J丰l 域的度量元.
"是作用域,例如"韭中的正梓行数LCOBr呵是一个
是 f~ .II)域的度量元
JJi 用作用域、函数之i可和韭之间的关幸言T ~ .~ [日在圳量
应用均体手、结构复杂性 l 检测的关草包措 函数州的调用关
草, WJ如度量元"调用关罩上的逆归情况G-\ r、 (V,,"
('++主主f司的继承是耳.例如在量元"重主继承的 í~ -tt r. H
1 Rl"
13) 结合质量模型进行盾量件价
司程序进行度量,可时获得程序"文本啕.fl:拮JE、在
京结"'. {辛辛、结构万面的信息、也许能够直接呵,毕王l某品
且对
数是、或者程序在一方面的质量[比如正非是否克分 f.
但如果要对整斗软件的质量特性进行坪价i 尚需要结合质量
模型进行,在晴量模型中给出各种软件植量特性与度量元之
1司的关革时及质量分是计耳幸法.
在我们使用的针叶软件可维护性的庸置模型中将质量于
特性function STABrLrTY (函数稳定性 l 定立为时下这4 个
度量元的扭合 NBCALUNG (调用的个数) . RETll \ i且
曰语句的个数) • DRCT CALLS \直接调用的个数)、
PARA (事数个数)同将质量于特性 [unction
TESTABrLlT飞(函数可测性)定义)1)>;λ 1'~个度量元的组
合 DRCT CALLS. LEVL (层次数 PA I'H \罩在径的个
扯) . PARA; 特质量于特性 [unction 主'\AL\ ZABILJT\
(函数的可分析性)定1为叫1'4 个度量元的组合 飞 GI 环
路t杂度极)、、iTMT \语句个敦 J 仙'G纠(平均语句大
小 1 . COMF \ ;王释频度} 将质量于特性 function
CHANGEABII ,ln (函数的可主性)定λ为以下4个度量元
的组合 GOTO iGOTO语句的个数 1 、飞。CF \词汇蜻
度 .L、、RI 局部直量的个数) . PARA. 根据质量模型
中的计耳万法时程序部件的上述4个晴量子特性进行呼价
最后根据棋型中植量特性"函数可维护性"的计算企式
可川作出可维护性评价 1 此公式坤 [unction
~IAlNTAfNABlUTY \函数可维护性}二 [unction
、、生LYZ.~BIUT、 +fullction C'HA,\-r:; E."-RIL1T\
function STAR1L1T\' +[unction TESl.-\BrLIT\
也可叫直观地理解为:函数稳定性、函数可剧性‘函数
的可分析性.函数的可史性这些腐量于特性决定了质量特性
崎函数的可维护性P 、而睛量于特性由组合计耳相关度量元
获得 主、反用手统的可维护性同样也有相应的计算幸法E
编程规回1)遵守情况的锥查
利用f 崎E工且制定辑程的规则、然后依据所制定的规
~'I 对源程序情况进行检查.如果不符合规则的代码得到及时
件正!可以到达增加程序的可理解性 降低维护成革的目
的.进一步可以将编程规则划分为编码规则与命名规~<J.
揭碍IÆJl1 可队针时程序指令 .!Ê J牛持、1\'马结构、声明
平方面制走且~I 并暗查 比如 为了保证程序模块的结构也i 可 u
d见走不得仕用 GOIO语句 l 为了增如代码 'T靠性 l 道克丛革误"~
"损失 , "Tr..!. 去Vt 在 f\码中不得剧i;t.盹值操作的结果(Jtj如语句
if 1 、=叫 :...J I .不快明*=,0'''''. -=手远捍吁;>E可叫现电不得在t 程
;>.中使用 t 户头\t宇
<f>-$/JlJl1 可队叶程序中局部主量 全局主量 是辛的命名
制定性别并桂查 程序蜻制过程中命在战剧的建立与桂查直接有-f'l
斗士曾加程序的可理解性 可维护性.
1..3 i且代码静态质量分析工具
我们使用的探代码静态质量分析工具为\'l:Rl 的
LOi;I,(ηPE,它可时结合依据ISO!IE(盯26标准制定的质
量模型叶部件 i 函数)、韭. }:A且整个应用军挠的质量特性
叶止叶价 i 在可叫根据我们的需要在LOGISCOPE提僻的基
乍If-量咋呆的基础上制定质量模型、点者在已有唾量模型中
扣人所关心的质量于特性.在掠代码静态骨折的过程中、
J.(X;ISCOPE还可U产生部件的控制流固.主的蛙承图,邮
件间的调用图、有利于软件的维护.
LOG I5COPE中的RuleC'hecker工具用于蝠程规则的制
疋 与检 查.
2 程序覆盖测试分析
程序覆盖测试分析工作考虑对程序内部逻辑的覆盖程 判断
皮,日前常用的一些覆盖标准从低到高分 是:语句覆盖、
判定覆盖,条件覆盖、判定/条件覆盖、条件组合覆盖 覆
盖测试的日的在于设计测试用 倒,尽可能多地执行程序的路
径,以考察程序执行是否出现异常,尤其是某些复杂的和 判断
“正常”情况下不易执行的路径.
21覆盖 l试标准
在我们的测试工作中,将覆盖测试分为部件级与应用系
统级两个层 次.
部件级的覆盖测试针对程序模块或者说是函数的内部逻
辑进行,测试的级别由低到高划分为3十级肌 即:
指夸决 (Instruction Blocb,tB】.
判断到判断的路径 (
改 进 的 条 件 /判 断 覆 盖 fModified
l,a[1l .D1)P】:
(ondIIi0n,1) cIsion
(ovcrage,MCDC).
应 用 系统 级 的覆 盖测 试 针 对过 程 到 过程 的路 径 引。 ¨
Procedure to—Procedure Paths.PPP)进行
{I)IB覆盖
指令块表示部件中必然被连续执行的一纽语句序列.
【B覆盖相当于语句覆盖,一般认为语句覆盖是不充分的一种
标准.
(2)DDP覆盖
判断到判断的路径 {Decision to-Decision Paths DDP)
是 一部分代码,一组语句,它的开始是一十控制指令给定的
利断 【if,while,⋯⋯),结束是下一个判断.部件的开始和
鲒束,分别作为一个判断.一十DDP的开始点与结束点之间
不能再有判断 (if,while,⋯⋯).进行DDP覆盖的测试,在
DDP覆盖率选到100%的情况下,可 确保程序中函数的八
口与出口至少被调用一次,程序中每个判断的每十分支至少
被测试 了一次.对关键的应用,DDP的应用要接近1 00%.
DDP覆盖相 当于判定覆盖.
图2说明了DDP的划分方法.
(3)MCDC覆盖
欧美的航空/#K天制造厂商和使用单位联合制定了针对
”安全.关键”软件的RTCAdDO.178B标准.此标准中最严格
的为A系统级,与”异常行为能够造成或者有助于系统功能
垃障从而导致出现悲惨飞行器事故发生的条件”的软件相对
应 RTC:~DO.178B标准推荐 了MCDC覆盖锄试方法,并
且规定A系统级软件必频进行McDc覆盖刹试
进行MCDC~ 测试,要求选到以下两点标准:
(1)被洲程序中,部件的八口与出口必须至 被调用
一 班,程序中判断的每一个分支必须至少被执行一次
【2)对于程序中通过逻辑运算(AND,OR,等)组成判断
的基本布尔条件,每十条件必须取遍所有可能的值且每一个
务件对制断的结果具有独立的作用,也就是说,判断结果随
某个单独的条件的变更而变更.
进行MCDC覆盖测试的原 因是高级语 言击.台有AND
或or的逻辑表达式中,某些条件会抑止其它条件,比如对
于(话 言中的判断表达式AAND(BORc】,考察按以下布尔
奈件取值进行两次测试的情况.
裹1两班测试的情况
布尔条件 ^ 布尔奈件B 市尔夺件(’ 判断表速式蛄果
r T F T
F T F F
从 上情况看来,判断表达式的结果已经取遍了共所有
可能的值:T和F.已经满足了分支覆盖 的要求.然而这两
次测试时,布尔条件B与布尔条件c的取值没有发生任何变
化.假如布尔蒂件B包含一个复杂的计算过程,如果不测试
此条件取值为F时的情况,则显然测试工作是不充分的.表
2针对判断表达式A AND(B OR 0提供一组符&MCDC覆盖
标准的测试用倒。
表2测试用倒
测试用倒 布乖条件A 市尔条件B 布尔夺件( 判断表速式站果
Icl l' T 1
1 c2 T F T T
Ic3 T F I‘
Tc4 r F F
观察这纽测试用倒,首先判断表达式的蛄果已经取遍 了
#所有可能的值:T和F,其次所有的布尔书件也分别取遍
了#可能的值 ,且测试用例 TcI”与 Tc4”体现 了布尔
夺件A的独立性:测试用倒 “TcI”与 To3”体现了布尔条
件B的独立性:测试用倒 “Tc2”与 “Tc3”体现了布尔条件
C的独立性,故满足了MCDC覆盖标准.
显然对 于判 断表 迭式A AND(B OR C1进行McDC覆
盖,测试用倒组合不只有唯一的选择,可以再提供一组测试
用倒,如袁3所示.
在这一组测试甩倒中, Tcl 与 To2”体现 了布尔
条件A的独立性 测试用例 Tc3”与 c4 体现了布尔条
件B的独立性;测试用倒 Tc2 与 “Tc3”体现了布尔条件
89
维普资讯
三与检查
2 程序覆盖测试分析
程序覆盖测试分析工作寺虑对程序内书逻辑的覆盖程
庄、目前常用的一些覆盖标准且低到高分别是语句覆盖、
判定覆盖嘈串件覆盖、判定/帚件覆盖、杏件组合覆盖 覆
盖测试的目的在于设计司"1武用例,尽可能多地执行程序的路
径在寺察程序执行是否出现异常嘈尤其是旱些主杂的和
叶正常"情况下不晶4M于的路径.
2 , 1 覆盖到试标准
在我们的测试工作中电将覆盖测试分为部件级与应用,f,
扭级两个层次
邮件级的覆盖~'l试针对程序模块或者说是函数的肉部逻
辑进行1 测试饰级别由低到高划分为3小组乱 即:
指今坡( Instroctìo [l Blo('~ , ro I ;
"1'听到判断的路径( DedslO础→协DCiè ision J'a <h",U))P I
且进的串件 J 割断覆盖仙'1odifled ('Il!ldllio l1
C 4n'crngc ,MCDι').
判断
部件开始
(BJuckl)
r (串件1) ttlell
(ßLock2)
Elst
lBlodù)
E l1d ,r
步情 -pr r 串件1.) tb凹
~Block4)
I:IM'
End 】『
(Block盯
邮件结束
串件I
H]ockl 应用革统级的覆盖测试针对过程到过程的路径
: Pro四dure-to-Procedure Paths1PPP) 进行
( 1) Iß覆盖
指令块在示部件中必然被连续执行的一纽语句序 J'l I
[ß覆盖相当于语句覆盖,二般认为语句覆盖是平直分的一种
标准.
(z) DDP覆盖
判断到判断的路径( Decision-fo-Dec . ion Pafhs [)DP )
是一部分代码,一组语句,它的开始是一个控制指+给定的
割断 (if, while咱. .... ) ,结在走下一个.t'l断部件的开始和
结牢,分别作为一个判断一个DDP的开姑点与结束点之间
不能再有判断 (if, while咽,. .,. ) .进行DDP覆主的精l试 1 在
DDP覆盖牢达到 100%的情况下,可且确保程序中函数的人
口与出口至少被调用一次,程序中每个判断的每个分支王 :Y
被测试丁一次.对是键的应用, DDP的应用岳接近100%.
DDP覆盖相当于判定覆盖.
困2说明 TDDP的划分方法.
(3) MCDC覆盖
欧吴的航空/航天制造f商和使用单位联合制定丁针对
"夺去-关键"软件的RTCA!DO-[78ß标准-此标准中最严格
的为A,f,统组,与"异常行为能够造成或者有助于革统功能
故障且而导致出现悲惨飞行器事故发生的条件川的软件相对
R , RTCAJDO.[78ß标准推荐丁 MCDC覆盖地试方法*
且规定也革统组软件必须进行MCDC覆盖测试z
进行MCDC覆盖测试,要求达到以下两I占标准
([)拔制程序中,部件的人口与出口,且斗国至少被调用
一次电程序中判断的每一个分主必须至少被执行一次回
( 2) 对于程序中通过逻辑运耳(AN口,OR嘈手)组成判断
的基本布 ;jc串件,每个牵件必须取追所有可能的值且每一个
牵件对非l断的结果且有植立的作用 1 也就是说1 判断结果随
某个单挫的杏件的主重而宜重-
进行MCDC覆盖测试的原因是高组语言也 l 告有 AND
或OR的逻辑在达式中,某些串件会抑牛其它牵件,比如对
于 f语言中的判断在达式AANDIßOR 口,考草按>:,i下布 J巾
牵件取值进行两次加l试的情况.
和l断在达式站果
I
F
从旧丰情况看来,判断在达式的结果已经取遍了其所有
可能的值 T和1 已经满足丁分支覆盖的垂卓.然而这两
次溃l试时,布*串件B与布,乍条件C的取值没有发生任何主
化-假如布,乍条件B包含一个主杂的计算过程,如果不测试
比串件取值为F时的情况,则显然测试工作是不充分的.在
2针对判断在达式AAND(ßOR C)提供一组符合MCDC覆盖
标准的测试用倒.
表2 ;1试用制
'111试用制 布尔牵件A 布尔串件B 布尔串件《 判断在边式结果
rd T F 1
11:2 T F T T
1<3 T F 1, '1' F
T,. F 『 b F
观察这纽剧试用例咱首先判断在达式的结果已经取遍了
其所有可能的值 T和F嘈其次所有的布t条件也分别取追
了其可能的值,且测试用例 "TcI"与 "Tc4" 体现丁布-1'
杏件A的稳立性,测试用例 "TcI"与 "Tc3" 体现丁布牢条
件B的拉立性:测试用例 "Tc2"与 "TeJ" 体现τ布t杏件
C的稳立性,故满足了 MCDC覆盖标准.
显然对于判断在达式,<\. AND(ß OR C)进行MCDC覆
盖,测试用伽l组合不只有唯-的选择1 可以再提供一妞测试
用例,如在3所示
在这一组测试用例中, 恤Tc1"与比T,2胃体现丁布尔
在件A的技立性,测试用制 "TcJ"与'ïc4'" 体现了布t牵
件E的独立性;测试用例 "Tc2" 与 "TcJ"体现丁布t条件
一- 89 一一
表3另一蛆剥试用例
试ii】倒 l布 :争件A 布尔夺件B l布尔条件( 判斯表达式站矍
I I! 1. r I I }
l_2 I F I
1— I I I l
hl l I r l -·
4)PPP覆盖
程到过程的路径(])Foce(1tl to Protedurc paths)对 肛
于两1、部件间的调用关系 它指应用程序调用关系巾的一 々
边 I'PP覆盖情、兄反映压用程序部件 1日J的调甩 卑是否成
王 ]时是对程序部件接口间数据流的剥试
2.2测试用倒的设计
打覆盖_驯试 剥试用啻c选择的原则是要针 表测试辽
的分 互、条件或调用关系.假设一个程序部件雨5,。I)1)P、
使 I十测试用倒进行覆盖测试,结果如表4所寺
表4覆盖测试 的结果
\ I,I,P 刹试用例的 此 试 I} 俐单牲获
\ J。 2 3 DDP覆盖率 得酌川,J 寝盖幸
6 c1‘ 2‘l “
40。 Il _
fj 4f’ %
I - ·1‘ ·
I I【_【2+l 3 f4 【CIlJ 。
毒.4中测试用例 r4 的DDP覆盖率为40 1旦是它所
覆盖竹DDP已经被测试用例 Tl”所覆盖 故 观其为无
效的列试用例.还可以用目的形式表示这4个剥札网倒对 整
个非序部件所有5个DDP的覆盖情况
f 一、、 ’' s 、
. .
图3覆盖情况
脚3进一步说明只有测试用倒 “¨ ” 12” 13”
是有教的_剥试用例,目为它们时整夺程序部件的POP覆盖垒
有 单独的贡献”
j 外对于MCDC覆盖测试来说 目前可以采 ( s !
具来 :成分解判断表选式并选取测试用例的工
2.3覆盖测试工具
我 们 使 用 LOGISCOPE NuMcga rruc(( r
Pun(’overage这3种工具进行覆盖测试,其审l(JfN~,(OPL
可 造行ll{ DDP MCDC PPP的覆盖测试 可以辛}攫
盖 在部件控制流图,MCDC~'I试用例表 、 件 调用
囝 直观地显示 其 中其可以进行 I^CDC覆盖逼 试的优势
对 笑些 嵌入 式领域 尤其 重要 NuMega llrue(overage与
I】ur (iorer~ge可以进行语 句扭的覆盖测试 乒在此基础上
得到函数的调用情况等信息
3运行时错误检测
款件中那些出现备件不固定 导致程序中断 退出甚至
死机的问题为软件的可靠运行埋下隐惠 买际上这些问题太
多是由于内存使用不当造成的,因此必须进行这方面的检
测, 使用c,c+一语言所编写的程序.在Windows平台下可
检剥是否存在 下可能造成运行时错误的问题:API与
f)LE方面的错误 内存错 误 指针 与泄漏错误
以 基一倒说明运行时错误捡测的重要性 在我们的剥
试二作中.多次发现有如下形式的【?q-q-代码
cllar :
new charl IOOI)
= asdfgh⋯ 一‘’
使用这样的代码,编译发现 了问题,执行鲒果也可能
没有异常 但是章在内存的分配使用上犯了错误 这段代码
的本意是要在”堆“空间上开辟大量内存使用 .S~flCW char
lIOO0l:这一每指令在”堆”空间上分配了1000个字节的至
1 而 =“asdr巳}Tl-_⋯ ⋯”:这一条指令则直接使用了”栈“上
的内存望间 指针被重新赋值造成l000个字节的内存泄漏
集系统在编码中存在上连问题 且盂由于其类似的错误撵佧
在 栈 上消耗的空间根走 数据容易爱损 表现为控制计
掉机向某外部设备发连的指夸有时候能够奏效,有时则不能
成功下达 极太地影响了系统的可靠性 正砖的方法是将语
句 asdfgh⋯ ⋯ .”:替 换 为 语 句 strcpy~s.”asdfgh
. 一
”
l:
运行对错误还有许多,此娄错误的检测可以而且有丑要
在生元驯试,集成剥试 确n测试、系统翊l;斌等测试的各个
阶段进矸
l运行时错误检删工具
在 目前厂泛使用的各种择竹系统平台下部有相肛的连暂
时错 误 检 ;昊_.工 具 , 比 如 Purify for wln、T n S0Iaris.
NuMega Bouad sChecker for~Vin95198,'N F/2000 此 外
NuMega与Pure系列中还有针对蝙程语言为 va Delphi、
VB (++Builder等的测试工具
4小 结
通过使用CASE:r-具进行软件白盒黔试,我们收到了良
好的效果,深切体会到源代码静态质量分析与连暂时错误检
测是封以程序逻辑覆盖为基础的传统白盒剥试概念的有力辛}
屯 在覆盖测试方面 运用cAs 工具设计 ·试用倒也能选
到提高剥试质量 效率的目的
参考文献
I 1.r man R Sofr~&re En~inee u ing:A Prat.titiolle r’ gpproat.h
(f0u rth Editk~ln1 M cGra~"一Itill,lq9
:柬鸿 金盎紫软件质量保障与刺试 北京:斟学出版社 I
j却^ 齄件二蛙 高级)北京:清华 学出版社 【 lu
J葶g-4Z计算机鞋件质量保证的万浩和宴践 北市:斟擘出版社 【999
维普资讯
《的主'_1 性
I程到过程的路径(Prot:edure-to-Procctlnrc 11川h....) ,lt 日
子雨?部件J司的现闭关单、它拮应用程序调用是 A 中的 '
过 I)PP覆盖情况反映应用程序部件 l可l 的调 fJ;是命'是否峰、
主 斗时是叶程序却件接口丙乾据注的 -"1试
测试用例的设计
注 1T覆盖副武、;t'1试用制选择的啤则是要针£天Á!'!i武二止
的讨之 条件或苟同用关革.假设一个程序部件有当\Illlr 、
使用川、叫试用{叫进行覆盖剧试1 结果如在科r o;o
\
\
"I .a- ,1
L
IHU"曲号
fI
"
lJ
r.
::!+ 13 • 14
幸A 擅量测试的结果
I iJ'J试用制的 此署1 、:J,. lt; 11': 旦在t,ej;,
J ,.当
DDP./lJ呈李 碍的川,Jllt孟宇
~---二
毛 V 6(1""
、毛 .0叶"
升、 -10"" ~I) u.. v v l』lllrolb 4H4" v 、 飞'、'飞J
手.4中油l试用例"'[4"的DDP覆盖幸地4W'‘ 但是它时
覆盖 ~JDDr已经被测试用管lμT1"所遭盖 故司吨j冉均 t
吐的剧,Ji.用,,'1 边可以周围的形式在7于这4个仄:h式呵例叶整
个程中部件所有雪个lJlJP的覆盖情况m
一二-一~
yllhll4
1( 1 3
" 固3 擅董情况
时3进一步说明只有测试用例 "11" , "'12" "LI'
是有吱的副试用叫咱国非它们叶整Þ,>!I1f部件的!lf IP,自且主
1f "丰柱的盲献啊
儿叶叶于MCO( 覆盖如lJi式来说咱 !=J 1前可uιl斗( .-\,~L_:r::
且来,"成分解毕l断在达式并选取制试用例的工壮
覆盖测试工具
拭们 R 用 LOGISCOPE , Nu、'lcga Trnd (川盯布即
Pun' l. 'o... t."ra~l'这3种工具进行覆盖,JIJ iÃ. 其è> L()( , I~(()PI
可υ ,~行川、 DDP、 \K'DC ‘ PPP的覆盖孙l试 问「可叫#覆
盖峙,且在邮件担制,ι图嘈 MCUC剧试用#~-f.. 号i\伴同制 I~
困~ ~观地显示咱其中其可以进行~IC日〈撞盖.~"试的仇斗
q41
天 i 丑些嵌入式领域 t其重要、、"、lega Trn c( o"\'L'ragc 与
}lurd 'oH"r:fgt."吁"进行语句且的覆盖剧式 严在此革础 ζ
得圭1] 函数的调用情,且等信息 E
3 运行时错误检测
蚊件中哪些出现串件不国定 导致程序中断‘三是出甚至
。L机的 J可题为壮件的可靠运行埋下隐患 草际上4些)斗题大
喜是由于内存使用不当造成的,因此必须进iTl主万面的检
叫田对使用C/C+~语言所辑写的程序 l 在响 imh阳坠斗古下可
川 :.t~-剧是否存在以下可能造成γ主行时错误的 101 题 ,\P I 与
OU 万面的错τ主 休1 存4如"指针与址漏错误,
以 τ达一位h.:tB,月 4行时错误捡圳的重要忖】在我俐的测
风-作中 事iI;.堤1也有如下形式的('++代码
ε lI ar'" ~;
、二 n("\'r charll州。|电
、二剖df,只 10
使用这样的代码,编译在现芋了 l斗题!执行结果ι可能
决有异常吨但是其在内冉的分配使用上在了错误在段代码
的本章是要在h堆"空间上开辟大量内冉使用 1 、 =new char
IIUII的|‘这一条指令在".堆"空间上分配了 IIHI() 个字节的空
'l.而、="州Irgh...... 气远一条指令刚直#使用了..枚"土
竹内冉立t叮电~~针被重新赋值造成 l侧11 个字节的休H号洁漏 m
草 k 统在蝙码中存在上述问题咱且王由f其主似的错误操作
在 u椅俨土,自耗的空间很大电数据容品,主损、在现市控制计
)1.机向革叶部设备在边的指导〉有时候能够毒吐,有时则不能
~'Vh下达电机t地影响了革扭的可靠性 正梢的-1;法是将语
句'F"a~dfgh.. ...";替换句语句划时py4~:'asdfgh
运行3寸4如星还有许事,此#c错误的检剧可叫而且有,且要
!f-'在元剧式,草i>.剧武、确认我战 斗在扭曲试辛剧认的各本
叶11进;f
主 l 运行时错误检测工具
在 3 前「泛使用的各种操件革扭干古下都有相屈的工主吁
It 错误栓0;1':工具,比如 Pnrir... ror \\'川、 T: "i nn ~olari、
飞u 、 le J.: a ßoundsChecker for WinQ5 .1 98:NT/20011 此外
飞u '1e~a与 Pnn:革叫中还有针叶皇岛程语言力J川 a , Delphì.
飞 H 、 C++ Bnllder等的制试工且z
4 小结
通过使用【生SE工具进行软件白盒测h式、我付1收到了良
叶的吐旱,深切体会圭1]现代码静态质量分析与远行时f苦才是检
,~Ij 是町叫程序主辑,d盖为基础的传统由盒Jj.]"",概念的有力科
t 在覆盖剧也万面咱运用CA咀』工冉设计;jl'试用倒也能达
到提画剧试植量、放串的目的 u
参考文献
IJrt'、 ~man R ~.~币。1'" are Engin"t'nn民龟 p,描 l tJtlυ lIt! r 川、、 r~ n
(f. ollrth f. .dltÎ <l II). I\ 1ct-:;;ra、.,. -H iII嘈 JI'9i
三呼,~咱壶,在常软件噎量性障与if1JU(,北京斗学出血丰:L 1 1)<)-;'
5 吓人木蚊件工哇 t 高级)北京清华大学出版社 l咐'"
--l 'J'f 圣 11.计耳机软件质量悻证的万法和在战北卓科学出版桂( lJI'4