第4代白盒测试方法实践之“VcTester持续集成框架的应用价值”

第4代白盒测试方法实践之“VcTester插装原理与各种覆盖率配置” VcTester与常见C/C++语言覆盖测试工具一样,提供多种覆盖率统计,已涵盖语句覆盖、分支覆盖、条件分支覆盖、MCDC覆盖。本文讲解VcTester的插装实现原理、描述该工具的覆盖率使用特点。VcTester插装实现原理VcTester是基于函数调用进行覆盖统计的,比如下面被测语句:int i = printf(”I am here”);源码经过插装改造,变为:int 阅读详情

VcTester是一款针与Visual C/C++配套使用的白盒测试工具(包括单元测试与集成测试),它除了支持常规的覆盖率测试之外,还提供功能强大的编辑、调试等功能,该工具遵循第4代白盒测试方法,调测理念较为先进。尤其更为难得的是,VcTester是一个高度开放的IT工具,其共享版本(所谓共享版本当然是免费的啦!)的价值已经与常见商用白盒工具相当,本文着重介绍VcTester工具在支撑持续集成开发模式的应用情况,重点讲解VcTester共享版在这方面的应用价值。

如果你还不熟悉VcTester,请到www.ezTester.com网站下载最新安装包,根据指示安装VcTester后请阅读帮助文档先了解VcTester基本功能。

持续集成是极限编程中一项重要实践,采用持续集成开发模式可大幅提高软件生产率,提升产品质量,但目前较成功的持续集成实践主要集中于java与C#项目,在嵌入式领域软件主要用C语言开发,开展持续集成的难度要高一些,VcTester的应用价值很大程度上体现在这里:它克服了编程语言的差异性,让持续集成实践在嵌入式软件开发中也能很好的应用起来。

持续集成对IT工具提出的需求

通俗一点讲,持续集成是“代码写一点测一点”的开发模式,“实现—验证—优化”的迭代循环过程加速了,即:为实现功能进行编码,编码后做测试,然后根据测试通过情况,进行改错或优化功能,之后进入下一轮编码与测试,这种递增循环过程在持续集成方式下,迭代更频繁,编码与测试的切换更快速,这对IT工具提出了较高要求:

1.         编辑、调试、测试一体化平台

持续集成模式下,代码写一点点就进入测试的循环迭代了,依据经验,嵌入式C语言开发环境下,一次功能迭代编写的代码量宜控制在20~200行范围,每写数十行代码调测应随即跟进。这种情况下,IT工具需支持编辑、调试、测试这3项操作之间能快速切换,三者应集成到一个IDE环境中。

2.         提高调测效率

不少商用的第2代白盒测试工具对一次性测试支持很好,工作效率能基本满足要求,但一换到持续集成模式下,暴露的问题就很严重,主要是测试效率跟不上,比如在RTRT环境下,编码、调试、测试与评估改进既不在同一平台进行,也没支持在线操作,被测程序要反复重起,编写的脚本不能在线的看到执行效果,并在线改进,迭代循环的效率自然大打折扣。

第4代白盒测试方法为提高测试效率提出两点建议,一是采用在线测试,二是重用调试过程,将调试操作自动转化为测试脚本,测试效率会提高不少。

3.       保证持续集成过程能平稳、可持续的推进

代码写一点测一点后,组织运作很容易失去控制,自觉些的会认真跟进测试设计,不觉得的可能退回到一次性测试模式,或者某些员也很想把持续集成规范的实施好,但操作中很难控制当前要测到什么程度才进入下一步功能迭代。

IT工具应提供机制来评估当前测试程度,评估结果应以简单明了的方式告诉用户,比如当前测试是否通过,覆盖率有没有合乎要求,测试充分程度有没有合乎要求。凡测试跟进滞后或实施欠充分的,应先改善测试然后才进入下一步迭代。

另外,评估机制还应尽量消除操作中出现的噪声,比如:测试评估范围可指定,非测试关注范围的源码不纳入测试程度评估,特定调用分支(如出错处理)经配置不纳入评估等。

4.       工具集成

持续集成过程涉及版本同步、版本比较,构建被测工程,实施回归测试、冒烟测试等操作,IT工具应具备较好的定制扩展外部工具的能力,能将各种相关操作集成一起。

VcTester共享版应用特色

VcTester较完整的遵循第4代白盒测试方法的要求,在较高起点提供各项功能。下面我们从编辑器、调试器、测试功能、平台集成这四个方面分别评估VcTester共享版的功能价值,然后下一节在此基础上,补充说明商用版在功能增强后的应用价值。

1.         编辑器

VcTester采用CSE的集成开发环境,它编辑器是采用SynEdit组件实现,与Delphi编辑器维持相同风格,也提供近似于Delphi的编辑功能,包括:提供与语法相关的关键字高亮显示,提示输入,定制的代码框架自动生成,支持较为完善的查找与替换功能,支持代码块缩进与缩出,此外该集成环境还支持函数与变量的定义跳转与回跳功能。

VcTester的编辑功能强过VC不少,但比SourceInsight稍弱,稍弱的原因主要是VcTester在交叉索引、定义跳转方面没有SourceInsight做得彻底,另外,VcTester编辑功能比较精简,SourceInsight功能很全面,两者风格不一样。

2.         调试器

VcTester共享版并未提供针对被测C代码的调试,只支持脚本的调试(具备基本的设断点、单步跟入跟出等功能),商用版才同时支持被测C代码与脚本的单步调试。

共享版只能借助VC实现单步调试,所幸的是,VcTester的集成环境与VC并不冲突,只要将被测工程在VC中按Debug方式启动,然后使用VcTester发起调测,在VC中设断点进行单步调试。此方式主要缺陷是两者功能未在同一IDE环境集成,少不了要经常切换,对工具使用效率带来一定影响。

3.         测试功能

强大的测试功能支持是VcTester共享版最大的亮点。在线测试驱动(写测试脚本读写变量与调用函数)、在线测试桩在共享版已充分开放,如果再结合VC profile,语句覆盖也有了,由此展开白盒测试已基本完整。共享版已较好的支持第4代白盒方法所要求的在线测试功能,用例的调测效率大为提高,该模式下测试设计所见即所得,很直观,符合多数开发人员的编程习惯。

4.         平台集成

VcTester共享版支持的工具扩展能力与商用版无差别,我们将VC的Build操作集成进来,使编码过程中用户可以随时按一个快捷键就编译被测工程,另外还可以集成PcLint代码检查功能,集成Visual Leak Detector(VLD)内存泄露功能。VcTester还针对捕获的VC编译或Pclint检查后的报错打印信息,提供快速跳转到出错源码行的功能。所以,VcTester共享版虽然免费,但它提供的功能着实不弱。

此外,还可以把VSS版本机操作集成到VcTester中,此举可有力支持每日构建、冒烟测试等持续集成实践。

外部工具集成也是VcTester的一个亮点,它提供可扩展能力并不逊色于SourceInsight平台。就上面举例的被集成功能中,Pclint是商用工具(售价约200美元,当然网上也有不少破解版本),Profile是VC专业版和企业版附带的,VLD是免费且开源的工具,VcTester共享版自然也是免费的,所以我们能以非常低的成本构造出功能强劲的持续集成研发平台。

总之,VcTester共享版已能较好的支持嵌入式软件的持续集成实践,突破测试效率门槛,其应用效果已与业界主流的商用白盒工具相当。值得一提的是:VcTester似乎只在“写一点测一点”的模式下才用得更好,比如提示输入、定义跳转等功能只在被测程序运行起来才具备,如果不是写一点测一点,被测程序都无法运行,提示输入、跳转等功能就没法用,导致整体易用性下降。再有,据已有实践反映,在VcTester下实施测试设计先行(Test Design First)相对容易,因为在线测试的所见即所得特点,让未见代码情况下写用例没那么让人感到惶恐。

更深入的功能

VcTester共享版的功能已经很好了,想必商用版的功能更为强大吧?一点也没错,开发商对VcTester两个版本的定位如下图所示:

图:VcTester版本定位

VcTester共享版大致处于测试同比曲线的B点位置,商用版大致处于曲线的C点位置,A点是目前多数支持嵌入式白盒测试的商用工具所处位置。也就是说,VcTester共享版功能稍逊于业界知名品牌的商用工具,但在促进测试效率提升方面上仍优于大部分工具,与这些工具一样都处于“组织推动区”,当组织形态成熟、流程推动得力情况下是能将白盒测试做成功的,而VcTester商用版定位于再次大幅度提升测试效率,使白盒测试进入“自发推动区”。

VcTester共享版适合于个体测试应用,主要针对小型开发,商用版则适合企业级应用,为适应大型开发下团队运作及产品质量保证活动而增加相应功能,商用版具有如下特色:

1.         支持符合第4代白盒测试方法的测试评估体系,包括:

商用版提供LICC与LDCC两种代码覆盖率统计,对测试设计程度也提供评估,评估结果可以在线、直观的方式显示,评估标准可定制,另外还支持测试报告自动生成。共享版本没有这些功能。

2.         调测一体,支持将调试操作自动转化成测试脚本

商用版的检视器支持调试操作转脚本,该功能可以促进大家养成自发测试的习惯,摆脱不自觉的被动测试状态,检视器还支持更强大的脚本桩功能,如条件桩、PreCheck与PostCheck定义等。共享版没有这些功能。

3.         提供集成化的工作平台,可大幅提高开发效率

商用版的源码与测试用例在同一个IDE平台编辑、维护,以相同形式同时支持测试脚本与源码的一体化调试,集成界面支持设置断点,进行单步跟踪。共享版本没有单步调试功能。

VcTester提供出色的IDE编辑器,编辑功能强大,支持提示输入、全文查找与替换、函数调用关系分析,定义与引用跳转、在线查看各行调用覆盖情况。共享版本没有函数调用关系分析与在线查看调用覆盖的功能。

4.         支持完善的测试消息构造与解析

商用版提供用户数据UDT编辑器,可快速构造测试数据。共享版无此功能。

商用版还将提供通用消息编辑器、消息解析器,可以自定义消息模板。该功能特别适合通信协议测试,其消息解析器与编辑器还可以免费集成到用户产品或相关IT工具上,借助本功能,用户可以将VcTester工具延伸到协议测试、功能测试等领域。共享版本不提供这些功能。

在提升测试效率方面,商用版的调测一体环境让整个持续集成的开发过程效率更高,另外,调试操作可转化为测试,强化了重用,使测试设计效率提升不少,还有在构造测试数据、自动生成结果检查语句等方面,商用版提供更多功能,都有力促进了测试效率的提升。

总结

最后,我们跳出VcTester提供的功能,讲讲这个工具的设计风格。总体而言,VcTester的界面风格比较简捷、明快,没有繁杂操作过程,设置了不少热键,但并不是所有快捷按键都能在菜单或按纽得到提示,这对初学者多少有点障碍,但用熟后,多数用户都会喜欢上它的。比如,Alt+Up、Alt+Left、Alt+Right、Alt+Down这4个快捷键设置,概括了最常用的几项跳转操作,用熟了手感极佳,不像VC中此类快捷键的定义,键盘定位麻烦,用起来老觉别扭。

VcTester的简洁风格还顺应了测试模式的要求,比如,文件目录树只一层,并不支持虚拟目录,之所以如此,是因为每位开发者或测试者,应该只工作在产品的一个侧面,VcTester是假定用户只打开他所关心的某几个文件去编码与测试的。当然,这让工具缺失某些功能,容易招人垢病,但简洁风格维持下来了。

 

参考文献:

1.         ezTester(China),Wayne Chan,《第4代白盒测试方法介绍(理论篇)》

2.         ezTester(China),Wayne Chan,《第4代白盒测试方法介绍(VcTester实践篇)》

3.         ezTester(China),《VcTester用户手册》

4.         ezTester(China),《使用VcTester实施持续集成的组织管理模式》

5.         ezTester(China),《使用VcTester构造持续集成及每日构建平台》

6.         ezTester(China),《如何将Pclint嵌入到VcTester中使用》

7.         ezTester(China),《内存泄露检工具VLD如何与VcTester配合使用》

8.         ezTester(China),《如何在VcTester集成自动构建功能》

 

=================== END =============================

本专题相关的文章:

 第4代白盒测试方法介绍--理论篇

 第4代白盒测试方法介绍--VcTester实践篇

 第4代白盒测试方法通俗释义

 

 第4代白盒测试方法之“为什么要做白盒测试”

 第4代白盒测试方法之“企业如何推行白盒测试”

 第4代白盒测试方法之“实施白盒测试的几个误区”

 第4代白盒测试方法之“如何选择嵌入式白盒测试工具”

 

 第4代白盒测试方法实践之“VcTester持续集成框架的应用价值”

 第4代白盒测试方法实践之“使用VcTester实施持续集成的组织管理模式”

 第4代白盒测试方法实践之“如何在VcTester集成自动构建功能”

 第4代白盒测试方法实践之“使用VcTester构造持续集成及每日构建平台”

 第4代白盒测试方法实践之“内存泄露检查工具VLD如何与VcTester配合使用”

 第4代白盒测试方法实践之“如何将Pclint嵌入到VcTester中使用”

VcTester 5.150 VcTester 5.150安装包 VcTester 由深圳市领测科技有限公司自主研发,专业服务于嵌入式白盒测试领域的测试工具,它遵循第4代白盒测试方法(4GWM,The 4th Generation White-box-testing Methodology),为有效实施针对C语言的单元测试、集成测试与协议测试,提供系统化的测试解决方案。 立即下载

相关推荐

常用嵌入式软件白盒测试工具介绍

介绍9种白盒测试工具,详细介绍每种测试工具的简介、功能特色、相关网站及获取方式(网上下载地址)。

调测工具VcTester攻略--搭建运行环境

关于VcTester工具 VcTester由ezTester公司推出,是业界众多VC调测辅助工具中功能最强悍的一款,为准确起见,我还是加上“之一”后缀,尽管VcTester很强,但仍有适用性限制,并非所有Visual C/C++代码在VcTester中都工作得很好(下面还有介绍),另外,本人尚不清楚今后是否还会冒出比VcTester更强的工具。 集众多工具的优势于一身是VcTester一个显著

huangxiangbo316的专栏 1691

C现代编程 集成开发环境、设计模式、极限编程、测试驱动开发、重构、持续集成(带详细书签).pdf

花井志生*的《C现代编程(集成开发环境设计模 式*限编程测试驱动开发重构持续集成)》从使用C语 言进行嵌入式开发的特点入手,主要讲解了如何将集 成开发环境、设计模式、*限编程、测试驱动开发、 重构、持续集成这些现代编程方法应用到C语言的嵌 入式开发中去,即将服务器端的通用设计方法、工具 的使用方法、开发方式等逐一“翻译”为可以在C语 言嵌入式开发过程中使用的方法。本书适合所有对C 程序开发感兴趣的读者阅读。

关于第四代白盒测试

今天无意中看到了wayne_chan的优快云博客,其中很详细的讲述了第四代的白盒测试,觉得很不错。我把相关网址贴出来跟大家一起分享。 第4代白盒测试方法介绍--理论篇 第4代白盒测试方法介绍--VcTester实践篇 第4代白盒测试方法通俗释义  第4代白盒测试方法之“为什么要做白盒测试” 第4代白盒测试方法之“企业如何推行白盒测试” 第4代白盒测试方法之“实

山野居人 1138

保姆级教程:用K210麦克风阵列模块实现声源定位(附完整Python代码与坐标计算)

本教程详细介绍了如何使用K210麦克风阵列模块实现高精度声源定位,包括硬件连接、算法解析与实战代码。通过Python代码示例,展示了从原始数据获取到三维空间坐标计算的完整流程,适用于智能家居、机器人导航等场景。

weixin_42558093的博客 226

在Unity中为Sentis部署的YOLOv8模型集成NMS层并实现移动端性能优化

本文详细讲解了在Unity中利用Sentis部署YOLOv8模型时,如何通过代码动态集成NMS层以解决移动端性能瓶颈。文章核心在于避免导出时绑定NMS,转而使用Sentis原生API在运行时高效构建NMS处理流程,并分享了关键的GPU数据操作与移动端性能优化技巧,确保模型在移动设备上流畅运行。

p1q2r的博客 1093

【单元测试】单元测试介绍

一般来说,做单元测试均采用的是商用的测试工具或自行开发的测试工具,用例的编写都是在测试工具上完成,测试用例都是一些测试脚本,都以文件的方式来保存,故其用例的执行过程主要是由测试工具根据所编写的具体的测试用例脚本来完成,这样对于用例的管理和执行也非常灵活。千万不要误解测试覆盖,测试覆盖并不是我们最求的目的,它只是评价测试的一种方式,为测试提供指导和依据。测试用例的优化主要是指用例的合并、修改和删除,减少冗余的无价值的测试,其优化依据来源于测试后的测试数据分析和评估,其中测试覆盖也是用例优化的主要参考。

加油站发光博主 3153

creo二次开发使用映射

在creo进行二次开发时,一些无法直接通过访问底层代码来对特征进行操作,比如“镜像装配”,这个时候就可以使用映射(Mapkey)来完成一键镜像。 注:这是镜像装配的代码 ProError status; ProMacro macro; wstring Macro; strMacro = L"mapkey(continued) ~ Command ProCmdMirrorAssem ; mapkey(continued) ~ Activate mirror_component_dialog Sy

qq_49328512的博客 1607

常用C语言单元测试工具介绍

单元测试是保证软件质量非常有效的手段,无论是从测试理论早期介入测试的理念来看或是从单元测试不受UI影响可以高速批量验证的特性,所以业界所倡导的测试驱动开发,这个里面提到的测试驱动更多的就是指单元测试驱动。但一般开发团队还是很少的系统化的执行单元测试,针对应用软件的测试更多是由专业测试团队来执行黑盒测试。单元测试的最大的难点不在于无法确定输入输出,这毕竟是模块开发阶段就已经定好的,而在于单元测试用例的编写会耗费开发人员大量的工时,按照相关统计单元测试用例的时间甚至会远超过功能本身开发的时间。

实践出真理,接毕设/课设项目开发指导 1839

Dify工作流自动化:如何用Trae AI助手10倍提升你的开发效率(含避坑指南)

本文详细介绍了如何利用Trae AI助手自动化生成Dify工作流,实现开发效率的10倍提升。通过构建DSL示例库、精准需求描述和四步实战法,开发者可将重复的配置工作交给AI,快速生成可运行的工作流,并提供了关键的避坑指南。

weixin_29062865的博客 369

8位2路选择器设计

8位2路选择器设计

好好学习,天天向上 4288

第4代白盒测试方法实践之“如何将Pclint嵌入到VcTester中使用”

VcTester工具提供了强大的外部命令嵌入功能,本文描述如何将Pclint嵌入到VcTester的集成开发平台中。首先我们简单认识一下Pclint与VcTester这两个工具,PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。VcTester是ezTester公司开发的针

第4代白盒测试方法 3909

大语言模型与ROS集成的自然语言机器人控制:开源框架与应用实例

近年来,大语言模型(LLM)与机器人操作系统(ROS)的集成逐步成熟,使得自然语言驱动的机器人控制成为可能。用户输入“捡起绿色方块”或“把微波炉里的饭热好端过来”这类日常语句,机器人能够自动拆解步骤、规划动作并执行。本文梳理2026年前后发布的三个代表性开源框架——ROS-LLM、ROSClaw以及LLM+Nav2基准测试系统,介绍其技术路径与工程落地情况。

Studying…… 633

调测工具VcTester攻略--敏捷开发方式下调测组织过程

调测工具VcTester攻略之敏捷开发方式下调测组织过程作者:网际游民,成稿于2010年2月 关于本系列文章本系列文章罗列如下:《调测工具VcTester攻略之:搭建敏捷开发环境》《调测工具VcTester攻略之:使用快捷编辑功能》《调测工具VcTester攻略之:快速定位问题》《调测工具VcTester攻略之:敏捷开发方式下调测组织过程》《调测工具VcTe

张元礼-门道科技创始人|16年IT从业经验(抖音号:mtesting) 2915

Qt5.14.2开发Mqtt应用程序

然后,你就做不下去了…很明显,大部分博主写的东西不是缺头就是缺尾,带偏了许多读者。,因此我们需要clone的是这个分支版本,而不是这个默认的。然后将编译产物中include里的所有.h文件复制到。下载完后直接默认安装即可,这一步没什么好说的。看到了没,这个才是正确的操作方式,而主线的。信号来判断,自行实现自己的槽函数。然后选择构建方式,这里我选择的是。信号来判断自行实现自己的槽函数。信号来判断自行实现自己的槽函数。源代码,如下图所示,双击打开。收到下行消息时,可以通过连接。

Bruce.yang的嵌入式之旅 2310

第1.2章 机器人SLAM计算机基础总结(二):VSCode教程及 AI等效率插件推荐

如何高效编写代码?怎样快速调试程序?**别担心,今天就给大家带来一款超强大的编程神器 ——VSCode,以及能让编程之路 “一马平川” 的实用插件推荐,无论你是新手小白还是资深大神,都能从中受益!

行知SLAM 1861

第4代白盒测试方法实践之“使用VcTester构造持续集成及每日构建平台”

先理解几个概念在《使用VcTester实施持续集成的组织管理模式》一文中,我们讲述了VcTester平台下的持续集成操作包括调试方式与发布方式两种工作形态。调试方式是指日常代码与脚本的编写与调测,这部分是开发的主体,发布方式则是正式的、阶段性的工作。如下图: 项目组或产品组成员围绕着版本服务器展开工作,服务器既承担日常版本管理,如开发过程中源文件Check in、Check out

第4代白盒测试方法 3359

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第4代 白盒测试测试方法

关键词: 白盒测试 第4代 测试方法 4GWM 在线测试 持续测试 灰盒 脚本驱动 脚本桩摘  要: 本文是第4代白盒测试方法的理论介绍,描述3个关键领域内9项关键特征的概念与固有特征。同时介绍白盒测试发展历程,对比说明第4代白盒测

tracysha的专栏 1579

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

调测工具VcTester攻略--使用快捷编辑功能

调测工具VcTester攻略之使用快捷编辑功能作者:网际游民,成稿于2010年1月 关于本系列文章本系列文章罗列如下:《调测工具VcTester攻略之:搭建敏捷开发环境》《调测工具VcTester攻略之:使用快捷编辑功能》《调测工具VcTester攻略之:快速定位问题》《调测工具VcTester攻略之:敏捷开发方式下调测组织过程》《调测工具VcTester攻

张元礼-门道科技创始人|16年IT从业经验(抖音号:mtesting) 3050

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

测试工具大全(各类测试工具简介)

企业级自动化测试工具WinRunner 提名理由:Mercury Interactive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳

zhangxinrun的专栏 2656
上一篇: 第4代白盒测试方法之“如何选择嵌入式白盒测试工具”
下一篇: 第4代白盒测试方法实践之“使用VcTester实施持续集成的组织管理模式”
wayne_chan
博客等级 码龄21年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值