您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 安全软件验证与确认中的单元模块测试技术
!第!卷第#期原子能科学技术$%&’!!(%’#!))*年#月+,%-./0123456/.21/271892/:1%&%45;12))*安全软件验证与确认中的单元模块测试技术李!铎!张良驹!冯俊婷清华大学核能与新能源技术研究院!北京!=)))*!$摘要!核动力厂保护系统实现数字化必须解决的一项关键技术是如何完成安全软件的验证与确认$e$$!以证明和确认执行安全功能的软件自身的安全性和可靠性%软件单元测试是$e$过程中的重要环节!主要目的是验证和确认软件代码开发过程中!软件的设计转变为软件代码是适当&正确和完整的%本工作初步研究了安全软件的单元模块测试技术!着重讨论如何保证测试的完整性&建立测试环境&建立测试用例及实施单元模块测试等方面!并以某数字化保护系统安全软件单元模块测试实例说明单元模块测试的具体过程%关键词!安全软件#单元测试#验证与确认中图分类号!9I?#!!!文献标志码!+!!!文章编号!=)))H#@?=))*$)#H)GG=H))#5$’@)&O*$A(,P)&+5$0+&)B(A#1A$+;#(A+1,$L$,&A&’1+&()1)L12&1+&()IJE%!PM+(QI.714HN!_0(Q;1H,.14#$%&%’%()*E’1:(4-4#,E(F#(-=0C(1/#):)=0!C$=/’4G#&H(-$&%0!;(&==)))*!!2/$890+,1’+’9:2V25.SS273.S.14O3%-8.4.,7&.Y7,.%1%O,:2327/,%3U3%,2/,.%1S5S,2-O%31/&273U%R23U&71,.S:%R,%/7335%,[23.O./7,.%1718[7&.87,.%1$e$$!,%82-%1S,37,2718/%1O.3-,:2S%O,R732,:7,U23O%3-S327/,%3S7O2,5O1/,.%1S.SS7O271832&.7T&2’F12%O,:2-%S,.-U%3,71,U3%/2SS2SO%3S%O,R732$e$.S1.,,2S,.14!R:./:[23.O.2S718[7&.87,2S,:2S%O,R732/%8.14T7S28%1/%1/2U,82S.41O%3/%1S.S,21/5!/%332/,12SS718/%-U&2,212SS83.14S%O,R73282[2&%U-21,’9:2U7U23S:%RS7U32&.-.1735S,85%1,:2,2/:1.c2O%31.,,2S,.14%OS7O2,5S%O,R732$e$!O%/S.14%1S/:7SU2/,S7S:%R,%/%1O.3-,2S,/%-U&2,212SS!:%R,%2S,7T&.S:,2S,U&7,O%3-!:%R,%82[2&%U,2S,/7S2S718:%R,%/7335%,1.,,2S,.14’9:2,2/:1.c28.S/SS28:232R7SS//2SSO&&5S28.1,:2R%3V%O1.,,2S,.14%1S7O2,5S%O,R732%O78.4.,7&327/,%3收稿日期!))H)=H?)#修回日期!))H)?H?基金项目!国家自然科学基金资助项目=)?#)=?$作者简介!李!铎=@=*$!男!辽宁抚顺人!副研究员!博士!反应堆仪表与控制专业U3%,2/,.%1S5S,2-’:$;(,0’S7O2,5S%O,R732#1.,,2S,.14#[23.O./7,.%1718[7&.87,.%1!!核动力厂仪表控制系统进入了数字化时代!如何有效地保证并证明执行安全功能的软件自身的安全性和可靠性是实现数字化必须解决的关键问题%按照有关核安全法规的要求!必须通过独立的验证与确认$e$$过程!这是保证安全软件质量的重要举措和必要步骤!是对安全软件的强制要求%安全软件只有通过了独立$e$过程!才能被允许应用于核电站的安全功能%安全软件的$e$是一个按严格的步骤评定软件产品的过程!贯穿于软件产品的整个生命周期%按照软件工程的定义!软件产品的生命周期包括从其构想开始到退出使用为止的整个过程!通常分为软件需求分析阶段&设计阶段&实现阶段&系统集成与测试阶段&安装与调试阶段&运行与维护阶段!在软件生命周期的每个阶段均有相应的$e$活动%其中!一个重要步骤是软件实现J-U&2-21,7,.%1$阶段或称编码A%8.14$阶段的$e$%在软件实现阶段!软件的设计转变为软件代码及相关的机器执行码!软件实现阶段$e$的任务是验证和确认这种转变是正确&完整地!保证软件设计说明书中定义的各个软件模块的功能得到了正确实现!未在编码中引入错误!要求的编程规范&习惯和约定在编码中得到了正确贯彻和落实%软件实现阶段$e$的主要目的是’跟踪软件设计和代码的实现!验证产生的代码是与设计相符合的#发现设计和需求阶段的问题错误或含混的描述$导致的软件错误#发现在编码过程中引入的错误%软件实现阶段$e$的活动包括对软件单元模块静态分析和动态测试两部分内容%单元测试是对软件基本组成单元逐个进行的测试!单元测试必须执行白盒测试!关注的是软件单元的具体实现&内部的逻辑结构&数据流向等!不能以仅关注输入&输出特性的黑盒测试代替%本工作着重讨论安全软件单元模块的测试技术!包括如何保证测试的完整性&建立测试环境&建立测试用例&实施单元模块测试的过程%=!单元测试的完整性安全软件$e$的单元测试必须执行白盒测试!要求对软件单元的逻辑结构实现完整的测试%度量测试完整性的主要指标是测试覆盖率!对安全软件的单元模块测试必须达到=))‘覆盖率%覆盖率的种类很多!一种覆盖率只针对软件代码的一个方面!各种覆盖率是不能互相代替或包含的+=,%对安全软件单元模块逻辑结构的测试需要选择哪几种覆盖率测试才能保证达到完整的测试覆盖要求!是需首先解决的重要问题%对这个问题没有简单&统一的答案!须结合具体的软件代码设计特点分析确定%本工作在安全软件设计中采取了以下措施’=$整个软件系统采用模块化设计#$单元模块内采用简单结构!没有软件嵌套#?$不使用操作系统支持!软件源代码完全透明#!$不使用中断!软件代码的执行流程是完全确定的%在这种前提下!为满足测试完整性要求!在单元测试中选择了语句覆盖&分支覆盖和更改条件判定覆盖%语句覆盖6,7,2-21,A%[23742$的含义是!在测试时设计若干测试用例!使程序中的每个可执行语句至少执行=次%当测试用例使语句覆盖率达到=))‘时!可保证每个可执行语句均得到测试%语句覆盖存在=个缺点’软件的设计不可能逐条语句顺序执行!包含很多语句分支!语句覆盖未反映各个语句分支的执行是否正确!因此!需增加分支覆盖%分支覆盖X371/:A%[23742$也称判定覆盖E2/.S.%1A%[23742$!它的含义是!在测试时设计若干测试用例!使程序中的每个判断条件的真&假值均曾被满足!从而使每个判断至少取真分支和假分支各执行=次%当测试用例使分支覆盖率达到=))‘时!可保证软件中的每个语句分支均得到测试%分支覆盖还存在以下不足’当复合条件用于控制分支时!虽能保证每个分支均被测试!但由于一个特定分支的执行是由两个或多个条件项的组合逻辑值决定的!分支覆盖可能只测试了其中的=种组合!而产生同一逻辑值的其他组合可能未被测试到%可使用判定条件覆盖E2/.S.%1A%18.,.%1A%[23742$实现复合条件的完全测试!其含义是!设计足够多的测试用例!使得判断中每个条件的所有可能值为真为假$至少出现=次!且每个判断本身的判定结果为真为假$也至少出GG原子能科学技术!!第!卷现=次%判定条件覆盖理论上可实现复合条件的完全测试!但在组合的条件项增加时!测试用例的增加将呈指数上升!实际上很难实现测试的=))‘覆盖!因此!在安全软件测试中采用更改条件判定覆盖%更改条件判定覆盖B%8.O.28A%18.,.%1S-E2/.S.%1A%[23742!BA-EA$是判定条件覆盖的一个变体!它要求’=$被测试程序每个软件分支的入口点和出口点必须至少被走=次!且每一个程序判定的结果至少被覆盖=次#$通过分解逻辑操作!程序的判定被分解为基本的布尔条件表达式!每个条件独立地作用于判定的结果!覆盖所有条件的可能结果%应用分解逻辑操作可防止测试用例的指数增长!使软件分支判断式中的复合条件测试实现=))‘覆盖成为可能%在安全软件采用模块化&简单结构&不使用中断等条件下!软件的行为具有确定性!在单元模块测试中使用了语句覆盖&分支覆盖和更改条件判定覆盖?个覆盖率指标!即可实现一个安全软件单元完整的逻辑结构测试%!单元测试环境的建立待测试的软件单元本身不是一独立的程序!并未构成一个完整的可运行的软件系统!因此!需为它建立一个测试环境%建立单元测试环境的工作实际就是开发驱动模块和桩模块%在大多数应用中!驱动模块只是一个接收测试数据!并把测试数据传给待测试模块!然后输出相关结果的(主程序)%桩模块的功能是替代那些隶属于待测模块被调用$的子模块!这种桩模块可能要使用子模块的接口!才能做一些数据操作!并验证输出结果的信息!然后返回%单元测试环境示于图=%为一个单元模块建立测试环境的主要工作有’=$建立驱动模块!构造最小运行调度系统!用以模拟被测模块的上一级模块#$建立桩模块!模拟实现单元接口!实现被测单元需调用的其他函数接口#?$模拟生成测试数据或状态!为单元运行准备动态环境%然后!即可开展测试并收集测试结果数据!形成测试报告%在安全软件的单元测试中使用了软件自动图=!单元测试环境_.4’=!K1.,,2S,.14S/:2-2测试工具$2/,%3A+69!运行界面示于图!它提供的功能可辅助建立=个单元测试环境!包括’=$分析需要增加的测试用例!以提高测试结果的语句覆盖&分支覆盖和更改条件判定覆盖的覆盖率#$通过用户配置!生成必要的驱动模块和桩模块!并连接成一个完整的程序!以实现测试用例的运行#?$自动运行测试用例并采集测试结果!整理测试报告%图!$2/,%3A+69的运行界面_.4’!KS23.1,23O7/2%O$2/,%3A+69C!测试用例的建立单元模块测试的主要工作是为每个待测单元模块建立测试用例!包括编辑测试输入值和期望输出值!以判断程序是否正确执行了预定的功能#同时!分析需要设计哪些测试用例!以实现测试结果中语句覆盖&分支覆盖和更改条件判定覆盖的=))‘覆盖率!达到安全软件逻辑结构要求的测试目标%每个测试用例的建立是针对具体的软件单元模块进行的!一般需经过以下步骤’=$分析软件的设计说明书!清楚待测软件单元需要完成的功能&测试输入值和期望输出值的取值范围#$建立第=个测试用例!按软件正常运行时的期望值设计测试输入值!运行测试用例!以?GG第#期!!李!铎等’安全软件验证与确认中的单元模块测试技术验证待测软件可实现设计功能#?$结合软件流程图和软件源码分析已建立测试用例的测试结果!建立新的测试用例!以增加测试覆盖率!新的测试用例通过修改测试输入值实现!使其执行待测软件中某个期望的语句&分支!或=个分支中某种期望的组合条件#!$因每个测试用例的设计目的是为了增加测试覆盖率!在每个新的测试用例编辑并执行测试后!检查当前的测试结果!验证是否增加了测试覆盖率!如果测试覆盖率无变化!说明当前的测试用例是无效的!需进行编辑修改#G$重复上述?$&!$步骤!直至建立全部需要的测试用例%测试用例的建立可使用辅助编辑工具!如图所示为采用$2/,%3A+69编辑测试用例时的界面%N!单元测试的实现应用上述讨论的软件单元测试技术!在一个数字化保护系统安全软件$e$的过程中完成了单元测试!下面结合=个示例单元模块的测试过程说明安全软件单元测试的实现%示例程序(42,00%,0%O0?’/)是保护系统逻辑符合单元执行(-?)三取二$符合运算的函数!软件的源代码为’/%1S,0DDFD^\=#-%42,42,00%,0%O0?%O,:322.1U,87,7!!,:2
本文标题:安全软件验证与确认中的单元模块测试技术
链接地址:https://www.777doc.com/doc-1260871 .html