下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 单元测试码重构方法在安全相关软件中的应用 上官霞南蒋剑沈昕摘 要:结合目前软件单元测试技术的研究现状,本文对提高软件单元测试质量和效率的测试模式及方法进行了深入的分析和研究,提出了包括如何命名单元测试用例以便交流出其测试意图、如何更有效地进行单元测试组件之间的依赖隔离及如何验证被测单元的间接输出以提高代碼行为覆盖率等测试码重构方法,并给出了相应的技术措施和具体应用。关键词:模块依赖;代码行为覆盖率;硬编码测试替身;可配置的测试替身一、绪论软件代码行为的自动验证是最近几十年开发方法方面最大的进展之一,单元测试是软件测试过程中最基本的测试,其能
2、够尽早暴露大量软件缺陷,降低软件工程整体开发成本,是前期测试中公认的、最有效的保证软件质量的活动之一。测试不光只能运行,还需要对其进行后期维护。然而目前很多公司级软件测试项目中的测试坏味道包括模糊测试、缓慢测试、脆弱测试、甚至在产品代码中包含测试逻辑等,1由此问题导致的高维护成本表明如果缺少正确的方法,引入单元测试不一定能提高生产力,因此如何识别及排除这些坏味道并重构测试,让测试变得更易理解和维护、更健壮及可复用成为目前亟待解决的问题。二、测试码重构方法本文我们将以嵌入式c语言为例,测试工具使用c+test,阐述下面提出的几种测试码重构方法是如何在安全相关软件的单元测试实践中运用的。(一)测试
3、用例命名应该能交流出其测试的意图一个好的用例名称至少需要传达以下几方面信息,包含被测代码函数/方法名、与被测代码执行相关的所有输入值的重要特征及本用例预期输出的抽象描述。这样我们通过测试工具ide的用例浏览器中可以很清楚的看到每个用例测试的不同场景,达到良好交流其测试的意图的目的,比较好的命名方案如下:test_其中:被测函数/方法的名称;:被测试功能场景的描述;:被测试场景下的期望行为。(二)测试中应尽可能设计可配置的测试替身,而不是硬编码的测试替身测试替身是出于运行测试这一明确目的而安装代替实际组件的任何对象或组件,对依赖组件doc的调用通常返回某个值、更新其它参数或抛出异常。2硬编码的测
4、试替身由测试人员将依赖组件每个用例的返回值直接编码进替身组件中,而可配置的测试替身它将返回值或异常在用例运行时实时传递,这样我们可以以更简单的方式控制被测代码的间接输入,并使测试核心逻辑在用例体可见从而避免出现“神秘访客”,下面为可配置的测试替身的实现。statice_sysbool s_isreceived = e_false;/*可配置的测试替身 */void setreceivemsgdatastatus(e_sysbool inrecivestatus)s_isreceived = inrecivestatus;e_sysbool isreceivemsgdata(void)retru
5、n isreceived;(三)应能验证被测代码的间接输出以减少未测试的代码行为很多时候,被测代码sut产生的行为在其自身组件中存储,通过直接访问组件状态可以验证该行为,但是有时也会产生一些预期的副作用,比如有一个组件里有一个函数,该函数什么也没返回,或者至少没有什么可以用来确定它是否正确实现了其功能,在这种情况下,我们别无选择,只能从“后门测试”,通常程序对记录故障代码的调用没有返回表示正确完成的信息,确定其是否正常运行的唯一方法是,通过其它某个接口(一个允许检索故障类型的接口)与它交互。static uint32 s_faultcode = 0ul;/*一个允许检索故障代码的接口 */ui
6、nt32getfaultcode(void)return s_faultcode;/*记录故障代码接口实现 */uint32recordfalutcode(uint32 infaultcode)s_faultcode = infaultcode;/*测试用例中验证了记录故障代码的行为 */voidtest_checklinkstatus_notreceivedcycleovermaxnum_linkfalut(void)/* pre-condition initialization */setreceivemsgdatastatus(e_false);s_commerrorcount =c_m
7、axcommerrornum;/* tested function call */e_sysbool islinknormal = checklinkstatus();uint32 vfaultcode = getfaultcode();/* post-condition check */cpptest_assert_equal(e_false,islinknormal);cpptest_assert_equal(c_commfalut,vfaultcode);三、结语本文选择的几种测试码重构方法经公司lkj-15c安全认证项目中应用,证明其可以帮组开发人员在进行自动化单元测试实践时在几种可选项之间做出正确的选择,最终使我们设计的测试用例能够达到帮助理解被测代码、提高设计质量及降低代码缺陷引入风险等目标。参考文献:1gerard meszaros.xunit test patterns:refactoring test code.addison-we
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学历史学(考古学)试题及答案
- 2025年中职(建筑工程施工)砌体结构阶段测试题及答案
- 2025年大学畜牧兽医(家禽养殖)试题及答案
- 2025年高职(工程造价)工程索赔综合测试题及答案
- 2025年中职老年护理(老年护理应用)试题及答案
- 2025年中职会计(成本会计基础)试题及答案
- 2025年高职教育学(教育管理学)试题及答案
- 2025年中职心理学(社会心理学应用)试题及答案
- 2025年高职(新能源汽车技术)整车控制系统综合测试题及答案
- 2025年大学本科(会计学)会计信息系统应用阶段测试题及答案
- 心内科病例讨论与分析
- 肝硬化顽固性腹水护理查房
- 企业防诈骗宣传课件
- 海尔卡萨帝复式洗衣机C8 U12G1说明书
- 银行客户经理(对公业务)考试题库
- 堡垒机使用管理制度
- 新生儿肱动脉采血操作规范
- 湖北省黄冈市黄冈中学2025届数学八下期末学业水平测试模拟试题含解析
- 2025年中考道德与法治三轮冲刺:常考主观题答题术语速查宝典
- 靶向及免疫治疗及护理
- 青少年非自杀性自伤的识别和干预
评论
0/150
提交评论