为何要进行白盒测试

第4代白盒测试方法之“为什么要做白盒测试”  软件白盒测试是一个与黑盒测试相对的概念,是指测试者针对可见代码进行的一种测试。白盒测试通常再划分为单元测试、集成测试两大类,但依据不同的流程,对白盒测试细分的标准也不尽一致,比如在IBM的IPD流程之下,白盒测试可能划分为如下几类:模块单元测试、模块集成测试、模块系统测试、渐增Build集成测试、系统集成测试等。而在XP实践中,单元测试与集成测试之间的界限并不明显,统称为渐增迭代测试。  阅读详情

软件白盒测试是一个与黑盒测试相对的概念,是指测试者针对可见代码进行的一种测试。白盒测试通常再划分为单元测试、集成测试两大类,但依据不同的流程,对白盒测试细分的标准也不尽一致,比如在IBM的IPD流程之下,白盒测试可能划分为如下几类:模块单元测试、模块集成测试、模块系统测试、渐增Build集成测试、系统集成测试等。而在XP实践中,单元测试与集成测试之间的界限并不明显,统称为渐增迭代测试。

 一、从一个比喻开始

为什么要做白盒测试?这个问题比较复杂,我们先从一个比喻开始讲起。

假设有一台的面包机,从上面倒入面粉与水,开动机器后从下面出来的就是烤好了的面包,这个机器的功能比较单一,接口很清晰,输入是面粉与水,输出是面包。现在假定这个面包机多年未用,内部都生锈了,现在要清洗它,类似于我们开发的软件,软件有Bug,那得通过测试来清理。

图:清洗面包机

那如何更快速的清洗这台面包机呢?有两种洗法,一是拿水从上往下灌,这是系统测试的方法。另一种是拆开来洗,拆开机器后,拿抺布沾点清洁剂,把各零件的坑坑槽槽擦洗一遍,然后组装回来,再用水从上往下冲一遍,拆开来洗是白盒方法,组装回来用水冲是黑盒方式,相当于白盒测试之后再追加一次系统测试。

无疑,上面第二种方法是正确的,我们的前提是:清洗多年未用的面包机,铁锈够多,如果洗不干净,造出的面包都是致癌物质。当然,清洗面包机还只能算简单劳动,清理软件中的Bug要复杂得多,一个if语句有两条分支,一个while循环判断也是两条分支,还有break、continue、return等,想想看,一个1万行规模的软件能有多少个分支!一个分支就是一条坑坑槽槽,而且软件Bug还具备动态特性,不是静止的明摆在哪儿。

所以,软件的白盒测试不可或缺,因为遗留Bug的影响很大,就像面包机没洗净留铁锈会致癌,还因为软件系统远比面包机复杂,不拆开来怎么能洗干净!

 

二、白盒测试是高效测试

尽管白盒测试如此重要,为什么还有许多企业不愿做白盒测试,有一个很重要的原因是:认为白盒测试太低效,不值得去做。

实际上这种观点有许多误解成分,首先,决策者评估各阶段测试的有效性,仅以发现问题的数量为依据,这好比锈蚀斑斑的面包机,第一次冲水下去,看到大量浊水流出就很有成就感,其实这只是表象,思维方式有不足:把发现问题与解决问题割裂开来了。

我们测试的目标是按既定质量标准稳定推进产品研发进度,只做系统测试的结果是:第一次冲水,很有成效,第二次冲水,还能冲出点铁锈,第三次就没什么效果了。采用该手段并不能有效的达成既定质量目标。其次,研发质量改善,不只发现问题,还要定位问题、解决问题。白盒测试是拆开来洗,发现、定位与解决问题不仅是彻底的,也是直接的,效率非常高,所以,单以发现问题数评估一个测试过程是否有效不尽准确,我们应该综合评估一个问题从被发现,到定位、解决,以及针对它完成回归测试的总效率。

下图来源于Capers Jones与McGraw-Hill的“Applied Software Measurement”文章,从该统计数据可看出,针对一个功能点的测试,若将问题发现、定位与解决都计算进去,单元测试效率最高,是集成测试的2倍,是系统测试的3倍。

图:测试效率

认为白盒测试低效的另一个误解是,决策者并未认清一个bug若遗留到下一阶段须多付出多少代价。经验数据表明,编码阶段的一个问题遗留到验收测试去解决,所须费用将增加5倍,如下图,一个问题越遗留到后面阶段解决,付出代价就越高,而且是成倍递增关系。

图:解决遗留问题的费用

所以,越早测试就越能节约成本,白盒测试作为早期测试,跳过不做是得不偿失的。

依据上述原因,我们评估白盒测试效率时,通常将发现问题总数乘上一个系数K,以此为据再与其它测试方段的发现问题效率做对比,来权衡白盒测试值不值得去做。系数K取值与产品形态相关,按照实际经验,系数K取值区间为1.5~2.5,产品越复杂,出现问题越不容易解决的,K值要往大调。

 

三、白盒测试能彻底解决编码阶段引入的问题

前面我们分析了白盒测试是高效的测试,值得一做,下面我们要接着说明白盒测试必须要做,不可或缺。

先看一个案例,在某交换机产品的系统测试中,发现ISDN话机拨打某新业务号码时,在特定线路上,若一位一位的拨至18位,不会有问题,但如果先拨完号码再成组发送,会导致系统死机。这是一个导致死机的致命问题,最后定位出问题所在:呼叫处理的某段代码判断有误,本应小于18的判断,错写成小于等于18。

这个问题本该在单元测试去发现,由于单元测试没做,问题就遗留到系统测试,庆幸的是没把它遗留到网上,否则问题就大了。我们从另一个角度去反思,这个问题是特定线路下的特定终端,按特定方式拔打特定业务才暴露,在系统测试好不容易把它揪出来,但类似的其它问题呢?如何保证在系统测试阶段都能测得出来?

不同阶段的测试发现问题的特点各不相同,比如:单元测试阶段,容易发现逻辑问题、边界条件(如上例“小于18”的错误)、变量未初始化、内存越界等问题,而集成测试容易发现接口错误、任务配合问题等,系统测试容易发现业务流程问题、界面操作问题等。如果某阶段的测试没做,把问题遗留后面阶段,又如何能保证查错的彻底性。比如使用非法内存,出问题是否表现出来是随机的,如果操作非法内存当前被系统还认为是有效的,系统并不死机,但某些情况下,操作非法内存会死机,而另一些情况,非法内存操作将不期望变化的变量改写了,会导致其它莫名其妙的问题。类似这样的问题,在白盒测试阶段很容易发现,也容易定位解决,但遗留系统测试阶段,就很难去发现、去定位。

在V模型中,软件开发过程与测试行为具有不同层次的对应关系,如下图:

图:V模型

单元测试针对编码阶段引入的问题,集成测试与功能测试针对软件设计中引入的问题,验收测试针对需求与规格。单元测试不要或缺的重要原因是:编码阶段引入的问题占很高比例,不进行单元测试就难以保证系统最终的稳定性。

我们再来看一个实际案例:有两个产品形态接近的项目,A项目正式实施单元测试与集成测试,另一个项目B项目没正式做白盒测试(简单的拿调试当测试)。最后项目结束时对研发全过程的全部问题进行缺陷分析,如下图:

图:A项目缺陷分布

A项目的缺陷类型分析

图:B项目缺陷分布

B项目的缺陷类型分析

A项目的所有问题中,应该发现问题的阶段是白盒测试(单元测试与集成测试)的占50%,而B项目所有问题中,应在白盒测试阶段发现的仅占33%,另外,A项目发现逻辑错误占13%,而B项目只占8%。由这个统计数据表明,不做白盒测试必然导致大量问题漏测。

 

四、白盒测试要做到什么程度才算合适

既然白盒测试不可或缺,那么,白盒测试应做到什么程度才算合适呢?具体来说,白盒测试与黑盒测试应维持什么样的比例才算合适?

一般而言,白盒测试做多做少与产品形态有关,如果产品更多的具备软件平台特性,白盒测试应占总测试的80%以上,甚至接近100%,而如果产品具备复杂的业务操作,有大量GUI界面,黑盒测试的份量应该更重些。根据经验,对于大多数嵌入式产品,白盒方式展开测试(包括代码走读)应占总测试投入的一半以上,白盒测试发现的问题数也应超过总问题数的一半。

由于产品的形态不一样,很难定一个标准说某产品必须做百分之多少白盒测试,但依据历史经验,我们还可以进行定量分析的。比如,收集某产品的某历史版本在开发与维护中发生的所有问题,对这些问题进行正交缺陷分析(Orthogonal Defect Classification,ODC),把“问题根源对象”属于概要设计、详细设计与编码的问题整理出来,这些都是属于白盒测试应发现的问题,统计这些问题占总问题数的比例,大致就是白盒测试应投入的比例。

通过正交缺陷分析,还能推论历史版本各阶段测试的遗留缺陷率,根据“发现问题的活动”,能统计出与“问题根源对象”不相匹配的问题数,这些各阶段不匹配问题的比例就是该阶段的漏测率。

参考文献:

1.         IPL, "Why Bother to Unit Test? "

2.         Wayne Chan, 《第4代白盒测试方法介绍》

3.         Yang Gu, from IBM, "Adopting ODC to improve software quality: A case study"

 
一、白盒测试概念、目的、测试策略(6种)、静态白盒测试 一、为什么要用白盒测试 白盒测试能够或更容易发现黑盒测试发现不了的问题 二、什么是白盒测试 又称为透明盒测试、逻辑驱动测试 是测试被测单元内部如何工作的一种测试方案(单元测试) 根据程序内部逻辑结构及相关信息来设计和选择测试用例,对程序的逻辑结构进行测试 可覆盖全部代码、分支、条件和路径等 三、白盒测试的目的 保证程序中所有关键路径的测试,防止由于没有执行的路径在实际投入运行后执行到意外... 阅读详情

相关推荐

【软件测试】白盒测试和黑盒测试

一般地,我们将软件测试活动分为以下几类:黑盒测试、白盒测试、静态测试、动态测试、手动测试、自动测试等等。黑盒测试又叫功能测试、数据驱动测试或给予需求规格说明书的功能测试。这种测试注重于测试软件的功能性需求。采用这种测试方法,测试工程师把测试对象看作一个黑盒子,不需要考虑程序内部的逻辑结构和特性,只需要依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试能更好更真实的从用户角度来考察被测系统的功能性需求实现情况。

wqda125的博客 3986

单元测试和白盒测试相关总结

单元测试和白盒测试相关总结!

网络资源是无限的 1万+

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

白盒测试作为软件质量保证中的重要一环,对产品稳定性起到至关重要的影响,不幸的是,由于实施白盒测试有较高技术难度,该软件过程常被嵌入式厂商忽略,因为难于实施,所以容易失败,失败后产生畏惧心理,就更不愿意进一步去尝试,如此形成恶性循环。更令人担忧的是:产品进度很少有不紧张的,大家习惯于在产品发布前补做测试,甚至把测试留给用户,成天陷于紧张的救火工作。研发进度总会被许多意外打断,在最终交付日要严防死守的

第4代白盒测试方法 5001

白盒测试(初)

一、白盒测试 1、白盒测试的概念 又称为结构测试或者逻辑驱动测试,是一种按照程序的逻辑和编码结构设计测试数据的方法 白盒测试是关注程序的内部逻辑实现的 2、白盒测试和调试 目的:白盒测试主要目的是发现问题,找bug(不一定是功能bug、逻辑bug,冗余代码、注释率、代码太复杂);改正问题,使得代码运行正常 角色:白盒测试也是由测试人员参与,开发人员可以做单元测试;开发人员完成调试工作 方法:白盒测试是一个较为系统、全面的过程,有丰富的测试方法(等价类、边界值、正交表等、判定表等);调试更多的经验的总结 3、

王大兴的王兴的博客 3412

Applied_Software_Measurement_3rd_Edition

Applied_Software_Measurement_3rd_Edition,Applied_Software_Measurement_3rd_Edition

滤波器初步入门(非常全面)

主要关注的是-3dB这个点,-3dB就是截止频率所对应的点,我们把功率降至50%以下的信号定义为被衰减掉了(但要跟实际情况相结合,有些信号衰减-3db不够,需要衰减更多)-3dB这个点对应我们的电压来说是0.707。设计电路可以留一定的余量,如果你把4k设计为截止频率,那么4k时候衰减倍数为-3dB通常是不够的,你可以将截止频率设为2k,那么4k的衰减就可以达到15dB(假设),根据自己的需要去设计对应的截止频率。理想的滤波器是当输入的信号频率大于截止频率时,大于部分的频率对应的电压信号直接归0。

yybyybds的博客 5720

白盒测试怎么做?

目录 前言 一、什么是白盒测试 二、白盒测试的分类 三、白盒测试的设计方法 四、白盒测试静态方法 五、白盒测试动态方法 六、白盒测试的特点 七、总结 前言 在企业内部,软件测试工程师基本处于“双高”地位,即地位高、待遇高。可以说他们的职业前景非常广阔,从近期的企业人才需求和薪金水平来看, 软件测试工程师的年工资有逐年上升的明显迹象。测试工程师这个职位必将成为IT就业的新亮点。 一、什么是白盒测试 白盒测试又称结构测试、逻辑驱动测试或基于代码的测试。 白盒测试是一种测试用例设计.

weixin_67553250的博客 3万+

实验六 存储器实验

只读存储器(ROM)是一种在正常工作时其存储的数据固定不变,其中的数据只能读出,不能写入,即使断电也能够保留数据,要想在只读存储器中存入或改变数据,必须具备特定的条件。当地址为00000101时,会分别在数据位宽为8,16,32的只读寄存器中找到地址为00000101所对应的十进制地址位置,也就是地址为5的数据,并将其分别以8位,16位,32位输出。因此,输出保持为0。因此,当异步清零信号为1时,无论其他输入信号是什么,触发器的输出都会被强制清零,输出为0。1)寄存器输入0011,使能端1,异步清零0。

wenmou1111的博客 3001

白盒测试方法

一、概述: 白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。 白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。但即使每条路径都测试过了,仍然可能存在错误。因为: 穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。 穷举路径测试不可能查出程序因为...

努力进阶的小菜鸟 8万+

迪文串口屏开发环境搭建全流程:从DGUS Tool到串口联调

串口屏作为嵌入式人机交互的核心组件,通过串口通信实现主控MCU与显示终端的指令交互。其工作原理基于变量地址映射,主控读写VP地址即可驱动屏上控件,兼具低功耗与高稳定性。在工业控制、医疗设备及智能家居面板等场景中,串口屏能显著降低开发门槛与硬件成本。迪文屏凭借DGUS Tool上位机与自定义串口协议,成为主流选择。掌握DGUS Tool版本匹配、串口驱动安装及VP地址规划,是快速搭建开发环境的关键。

weixin_33937499的博客 603

Simulink与CANape联动教程:模型调试阶段如何快速标定参数观测信号

本文详细介绍了如何通过Simulink与CANape联动,实现模型参数的实时标定与信号观测,从而避免反复编译,提升开发效率。核心在于正确配置Simulink中的标定量与观测量,生成A2L描述文件,并利用XCP协议建立通信,为新能源汽车与自动驾驶系统的快速原型开发提供高效解决方案。

weixin_29006187的博客 376

软件测试之白盒测试

白盒测试与黑盒测试相反,需要了解软件中的结构。白盒测试也叫结构化测试,玻璃盒测试。白盒测试又称为结构测试或逻辑驱动测试,它是把测试对象看成一个透明的盒子,它允许测试人员利用程序内部的逻辑结构设计测试用例,对程序所有逻辑路径进行测试。对于软件测试中的白盒测试来说,主要需要了解白盒测试的基本概念,静态和动态白盒测试的方法,内容较黑盒测试来说逻辑性会更强一些。同时,值得注意的是,在动态测试中的基本路径测试法中,线性无关路径的识别要尤为小心,在计算过程中很容易出现多写的问题。

菲菲的博客 6236

一篇文章带你快速入门 MATLAB

文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一

南淮北安的博客 5126

白盒测试总结

逻辑覆盖法是通过对程序逻辑的遍历实现程序的覆盖。 逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。 以上六种覆盖标准发现错误的能力依次由弱到强。 覆盖率:用来度量测试完整性的一个手段; 覆盖率=至少被执行一次的item数/item的总数; item指的是语句、判定、条件、判定条件、条件组合、路径。.........

心皿月的博客 5114

基于STM32L4XX、HAL库的ESP32-S3-WROOM-1-N4 WIFI模块驱动程序设计

/ 检查是否收到完整的一行(以\r\n结尾)// 例如: 解析AT命令响应或MQTT消息等。// UART2初始化已在CubeMX中配置。// USART2初始化函数(由CubeMX生成)// 缓冲区溢出,重置。// 如果需要等待响应。// 处理接收到的数据。// 处理接收到的数据。// 等待ESP32模块启动。// 主循环其他任务。// 启用UART全局中断。// 发送HTTP GET请求。// 发送AT测试命令。// 连接Wi-Fi。// UART中断回调函数。

zhusl6688的博客 286

“探索thumbdata4文件的奥秘:编程中的神秘存在“

综上所述,thumbdata4文件在编程中是一个常见的存在,与图库应用程序和图片浏览器密切相关。通过使用适当的库和工具,我们可以读取和处理thumbdata4文件中的缩略图数据,以提供更好的用户体验。我们首先读取8字节的块头,其中包含了下一个缩略图块的大小。你可以根据自己的需求来定义对块数据的处理方式,例如将其保存为图像文件或进行其他的分析操作。thumbdata4文件通常以二进制格式存储,其中包含着设备上浏览过的图片的缩略图。因此,你可能需要根据具体的thumbdata4文件结构进行适当的解析和处理。

JieLun_C的博客 792

黑盒白盒测试的区别

一.黑盒测试(Black-box Testing) 黑盒测试也称功能测试,测试中把被测的软件当成一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据与输出数据。 不看软件代码,只对功能进行测试 对软件进行操作,观察结果是否和我们想象的一致 黑盒,顾名思义就是:把测试对象看作一个不能打开的黑盒子。测试时,测试人员完全不用考虑盒子里面的逻辑结构和具体运作,只依据程序的需求规格说明书,检查程...

HU1656的博客 1万+

风电功率预测项目技术白皮书:短期、超短期、中长期全尺度算法详解与工程落地

聚焦风电功率预测的时间尺度与算法:短期(0~72h)以XGBoost/LightGBM/CatBoost及深度学习为主,超短期(0~4h)采用ARMA+LSTM,中长期用LightGBM等,并涵盖概率预测、多气象源融合、AI大模型+物理模型混合策略、极端天气应对及工程运维要点。

算法工程师 324

白盒测试及用例编写

白盒测试白盒测试白盒测试是什么白盒测试用例设计方法逻辑覆盖法语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖路径覆盖基本路径测试法总结 白盒测试 白盒测试是什么 白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。 优点:代码覆盖率高,针对代码逻辑测试。 缺点:覆盖所有代码路径难度大;业务功能可能不全;测试开销大。 使用场景:首先会进行黑盒测试进行系统功能测试,然后用白盒测试进行对重点代码部分进行代码逻辑测试。 白盒测试用例

one23_man_show的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

测试:白盒测试(白盒测试是什么 & 白盒测试的优缺点 & 白盒测试中有哪些测试方法)

一、什么是白盒测试? 白盒测试也称结构测试或逻辑驱动测试,通过分析被测组件内部工作原理,通过测试来检测被测组件内部的运行是否符合产品规格说明书的规定 对应于黑盒测试,白盒测试要求测试人员打开软件黑盒,去了解开发人员的代码实现细节,这些细节包括数据流和控制流 数据流方面:进出组件的数据是否能被正确地处理、组件中用于计算使用的数据是否被正确使用、是否有冗余、其数据类型是否运用得当 ...

dangzhangjing97的博客 1万+

深度学习工具包 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")

什么是白盒测试

白盒测试又称。

m0_54901781的博客 1880

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

白盒测试?看这一篇就够了

白盒测试技术分析内部结构、使用的数据结构、内部设计、代码结构和软件的工作,而不仅仅是黑盒测试中的功能。它也称为玻璃盒测试或透明盒测试或结构测试。白盒测试也称为透明测试或开盒测试。白盒测试是一种软件测试技术,涉及测试软件应用程序的内部结构和工作原理。测试人员可以访问源代码,并使用这些知识来设计可以在代码级别验证软件正确性的测试用例。白盒测试也称为结构测试或基于代码的测试,用于测试软件的内部逻辑、流程和结构。测试人员创建测试用例来检查代码路径和逻辑流,以确保它们满足指定的要求。

gerouhsius的博客 4109

白盒测试及其应用

白盒测试白盒测试概念静态测试动态测试白盒测试用例设计方法程序插桩例题断言语句逻辑覆盖语句覆盖例如判定覆盖例如条件覆盖例如条件判定组合覆盖以上例子的测试用例编写基本路径测试程序控制流图控制流图的图形符号程序流程图和控制流图计算程序环路复杂性如何求解环路复杂性基本路径测试法步骤程序的静态测试源程序静态分析如何进行源程序的静态分析生成各种引用表错误静态分析人工测试桌前检查代码审查走查其他白盒测试方法简介域测试符号测试Z路径覆盖程序变异白盒测试中各种测试方法的应用策略 白盒测试概念 白盒测试也称为结构测试或逻辑驱动

weixin_48960448的博客 3195

白盒测试详解

白盒测试:侧重于系统或部件内部机制的测试,类型分为分支测试(判定节点测试)、路径测试、语句测试。控制流分析(基于程序结构):控制流分析是一类用于分析程序控制流结构的静态分析技术,目的在于生成程序的控制流图,在编译器设计程序分析、程序理解等领域都有重要应用。逻辑覆盖测试(对判定的测试)的原理:以程序内部的逻辑结构为基础的用例设计方法,它通过对程序的逻辑结构的遍历,来实现测试对程序的覆盖。测试覆盖率:度量测试完整性的指标,是测试有效性的一个度量。

huace3740的博客 1948
上一篇: 单元测试的基本方法
下一篇: 单元测试框架CppUnit 快速指南
workdog
博客等级 码龄20年 40粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值