1. 什么是软件的白盒和黑盒测试法
黑盒测试和白盒测试:
黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,
测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试。 “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。
白盒测试:
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
黑盒测试和白盒测试
任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?
2、在接口上,输入是否能正确的接受?能否输出正确的结果?
3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
4、性能上是否能够满足要求?
5、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
以上事实说明,软件测试有一个致命的缺陷,即测试的不完全、不彻底性。由于任何程序只能进行少量(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误
2. 软件工程 白盒测试
是采用的哪种测试方法,所有的条件都覆盖到了,所以就没有了(f,f)吧!
3. 软件测试的方法一共有几种
1、从是否关心内部结构来看
(1)白盒测试:又称为结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一种测试方法。
(2)黑盒测试:又称为数据驱动测试,把测试对象当做看不见的黑盒,在完全不考虑程序内部结构和处理过程的情况下,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
(3)灰盒测试:是一种综合测试法,它将“黑盒”测试与“白盒”测试结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术。
2、从是否执行代码看
(1)静态测试:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
(2)动态测试:是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
3、从开发过程级别看
(1)单元测试:又称模块测试,是针对软件设计的最小单位----程序模块或功能模块,进行正确性检验的测试工作。其目的在于检验程序各模块是否存在各种差错,是否能正确地实现了其功能,满足其性能和接口要求。
(2)集成测试:又叫组装测试或联合,是单元测试的多级扩展,是在单元测试的基础上进行的一种有序测试。旨在检验软件单元之间的接口关系,以期望通过测试发现各软件单元接口之间存在的问题,最终把经过测试的单元组成符合设计要求的软件。
(3)系统测试:是为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动、它是将已经集成好的软件系统,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
在系统测试中,对于具体的测试类型有:
(1)功能测试:对软件需求规格说明书中的功能需求逐项进行的测试,以验证功能是否满足要求。
(2)性能测试:对软件需求规格说明书的功能需求逐项进行的测试,以验证功能是否满足要求。
(3)接口测试:对软件需求规格说明中的接口需求逐项进行的测试。
(4)人机交互界面测试:对所有人机交互界面提供的操作和显示界面进行的测试,以检验是否满足用户的需求。
(5)强度测试:强制软件运行在异常乃至发生故障的情况下(设计的极限状态到超出极限),验证软件可以运行到何种程序的测试。
(6)余量测试:对软件是否达到规格说明中要求的余量的测试。
(7)安全性测试:检验软件中已存在的安全性、安全保密性措施是否有效的测试,
(8)可靠性测试:在真实的或仿真的环境中,为做出软件可靠性估计而对软件进行的功能(其输入覆盖和环境覆盖一般大于普通的功能测试)
(9)恢复性测试:对有恢复或重置功能的软件的每一类导致恢复或重置的情况,逐一进行的测试。
(10)边界测试:对软件处在边界或端点情况下运行状态的测试。
(11)数据处理测试:对完成专门数据处理功能所进行的测试。
(12)安装性测试:对安装过程是否符合安装规程的测试,以发现安装过程中的错误。
(13)容量测试:检验软件的能力最高能达到什么程度的测试。
(14)互操作性测试:为验证不同软件之间的互操作能力而进行的测试。
(15)敏感性测试:为发现在有效输入类中可能引起某种不稳定性或不正常处理的某些数据的组合而进行的测试。
(16)标准符合性测试:验证软件与相关国家标准或规范(如军用标准、国家标准、行业标准及国际标准)一致性的测试。
(17)兼容性测试:验证软件在规定条件下与若干个实体共同使用或实现数据格式转换时能满足有关要求能力的测试。
(18)中文本地化测试:验证软件在不降低原有能力的条件下,处理中文能力的测试。
4、从执行过程是否需要人工干预来看
(1)手工测试:就是测试人员按照事先为覆盖被测软件需求而编写的测试用例,根据测试大纲中所描述的测试步骤和方法,手工地一个一个地输 入执行,包括与被测软件进行交互(如输入测试数据、记录测试结果等),然后观察测试结果,看被测程序是否存在问题,或在执行过程中是否会有一场发生,属于比较原始但是必须执行的一个步骤。
(2)自动化测试:实际上是将大量的重复性的测试工作交给计算机去完成,通常是使用自动化测试工具来模拟手动测试步骤,执行用某种程序设计语言编写的过程(全自动测试就是指在自动测试过程中,不需要人工干预,由程序自动完成测试的全过程;半自动测试就是指在自动测试过程中,需要手动输入测试用例或选择测试路径,再由自动测试程序按照人工指定的要求完成自动测试)
5、从测试实施组织看
(1)开发测试:开发人员进行的测试
(2)用户测试:用户方进行的测试
(3)第三方测试:有别于开发人员或用户进行的测试,由专业的第三方承担的测试,目的是为了保证测试工作的客观性
6、从测试所处的环境看
(1)阿尔法测试:是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试
(2)贝塔测试:是用户公司组织各方面的典型终端用户在日常工作中实际使用贝塔版本,并要求用户报告
软件测试的内容:
1 得到需求、功能设计、内部设计说书和其他必要的文档
2 得到预算和进度要求
3 确定与项目有关的人员和他们的责任、对报告的要求、所需的标准和过程 ( 例如发行过程、变更过程、等等 )
4 确定应用软件的高风险范围,建立优先级、确定测试所涉及的范围和限制
5 确定测试的步骤和方法 ── 部件、集成、功能、系统、负载、可用性等各种测试
6 确定对测试环境的要求 ( 硬件、软件、通信等 )
7 确定所需的测试用具 (testware) ,包括记录 / 回放工具、覆盖分析、测试跟踪、问题 / 错误跟踪、等等
8 确定对测试的输入数据的要求
9 分配任务和任务负责人,以及所需的劳动力
10 设立大致的时间表、期限、和里程碑
11 确定输入环境的类别、边界值分析、错误类别
12 准备测试计划文件和对计划进行必要的回顾
13 准备白盒测试案例
14 对测试案例进行必要的回顾 / 调查 / 计划
15 准备测试环境和测试用具,得到必需的用户手册 / 参考文件 / 结构指南 / 安装指南,建立测试跟踪过程,建立日志和档案、建立或得到测试输入数据
16 得到并安装软件版本
17 进行测试
18 评估和报告结果
19 跟踪问题 / 错误,并解决它
20 如果有必要,重新进行测试
21 在整个生命周期里维护和修改测试计划、测试案例、测试环境、和测试用具
4. 软件工程黑盒测试以什么为依据 白盒测试以什么为依据
什么是黑盒测试和白盒测试?
任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?
2、在接口上,输入是否能正确的接受?能否输出正确的结果?
3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
4、性能上是否能够满足要求?
5、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
以上事实说明,软件测试有一个致命的缺陷,即测试的不完全、不彻底性。由于任何程序只能进行少量(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误。
5. 软件工程试题,谁知道答案
一, 单项选择题(每题1分,共10分):
1. ( ) 计算机系统就是:
A) 主机,显示器,硬盘,软驱,打印机等.
B) CPU,存储器,控制器,I/O接口及设备.
C) 计算机硬件系统和软件系统.
D) 计算机及其应用系统.
2.( )产生软件危机的原因主要与两个方面的问题有关:
A) 软件在计算机中很难识别,存在磁盘中也看不到.
B) 软件设计对人的智商要求很高,也要求很高的资金投入.
C) 软件产品本身的特点与其它工业产品不一样,而且在软件的开发和维护过程中用
的方法不正确.
D) 软件很难理解,硬件也很复杂.
3.( )软件开发瀑布模型中的软件定义时期各个阶段依次是:
A) 可行性研究,问题定义,需求分析.
B) 问题定义,可行性研究,需求分析.
C) 可行性研究,需求分析,问题定义.
D) 以上顺序都不对.
4.( )软件维护的四类维护活动是:
A) 改正性维护,适应性维护,完善性维护和预防性维护.
B) 适应性维护,完善性维护,抢救性维护和辅助性维护.
C) 改正性维护,适应性维护,完善性维护和辅助性维护.
D) 适应性维护,完善性维护,抢救性维护和预防性维护.
5.( ) 可行性研究主要从以下几个方面进行研究:
A) 技术可行性,经济可行性,操作可行性.
B) 技术可行性,经济可行性,系统可行性.
C) 经济可行性,系统可行性,操作可行性.
D) 经济可行性,系统可行性,时间可行性.
6.( ) 系统逻辑模型主要由以下内容:
A) 数据流程图,数据字典,简要的算法描述.
B) 程序流程图,Jackson图,IPO图.
C) 数据流程图,数据字典,ER图.
D) Jackson图,ER图,IPO图.
7. ( ) 耦合是对软件不同模块之间互连程度的度量.各种耦合按从强到弱排列如下:
A) 内容耦合,控制耦合,数据耦合,公共环境耦合.
B) 内容耦合,控制耦合,公共环境耦合,数据耦合.
C) 内容耦合,公共环境耦合,控制耦合,数据耦合.
D) 控制耦合,内容耦合,数据耦合,公共环境耦合.
8. ( ) 在详细设计阶段所使用到的设计工具是:
A) 程序流程图,PAD图,N-S图,HIPO图,判定表,判定树.
B) 数据流程图,Yourdon 图,程序流程图,PAD图,N-S图,HIPO图.
C) 判定表,判定树,数据流程图,系统流程图,程序流程图,PAD图,N-S图.
D) 判定表,判定树,数据流程图,系统流程图,程序流程图,层次图.
9. ( ) 按照软件工程的原则,模块的作用域和模块的控制域之间的关系是:
A) 模块的作用域应在模块的控制域之内.
B) 模块的控制域应在模块的作用域之内.
C) 模块的控制域与模块的作用域互相独立.
D) 以上说法都不对.
10. ( ) 包含所有可能情况的测试称为穷尽测试.下面结论成立的是:
A) 只要对每种可能的情况都进行测试,就可以得出程序是否符合要求的结论.
B) 一般来说对于黑盒测试,穷尽测试是不可能作到的.
C) 一般来说对于白盒测试,穷尽测试是不可能作到的.
D) 在白盒测试和黑盒测试这两个方法中,存在某一个是可以进行穷尽测试的.
二, 填空题(每题1分,共10分)
1.软件危机是指在( )所遇到的一系列严重问题.
2.在软件开发的各个阶段经过阶段评审后的文档和程序代码成为( ).
3.结构程序设计的基本思想是( ).
4.总体设计的第二项任务是设计软件的结构,即确定( ).
5.描绘物理系统的传统工具是( ).
6.如果模块内所有元素都使用同一个输入数据和产生同一个输出,称为( )内聚.
7.数据流程图按照信息流的类型主要分为( )两种.
8.( )年,( )和( )证明了SISO程序只需要三种基本控制结构.
9. 从应用特点分类,高级语言主要分为( ),( )和( )三类.
10. 黑盒测试又称为( ),白盒测试也称为( ).
三, 多项选择题(以下各题均有两个以上的正确答案.将正确答案的标号填入各题前面括号
内,注意多选或少选该题均不得分,每题2分,共20分):
1.( )软件开发各个阶段所耗费的时间或工作量是:
A) 可行性研究占5%;
B) 综合测试占40%;
C) 设计阶段在所有开发阶段所占的比例最大.
D) 编码和单元测试占20%.
E) 以上说法都不对.
2.( )对软件开发与维护,以下观点是正确的:
A) 为了加快开发速度,可以一边写程序,一边设计文档.
B) 对于软件而言,程序和软件配置成分是同等重要的,不能重此偏0.
C) 把软件漫长的生命周期划分为若干个阶段的出发点是降低开发的困难程度和
简化复杂性.
D) 可行性研究的主要任务就是确定软件项目的工程规模和目标.
E) 面向对象的方法学比传统的软件开发方法开发软件容易,开发效率提高.
3.( ) 对于以下图形工具的作用,
A) 数据流程图和数据字典共同构成软件的高层数据模型.
B) 层次图是用来描述软件结构的,不能用于描述数据结构.
C) IPO图能方便地描绘输入数据,对数据的处理和输出数据的关系,它是美国微
软公司发明并逐渐发展完善起来的.
D) ER图描述现实世界中的实体,不涉及这些实体在系统中的实现方法.
E) Yourdon图实际上也是结构图,所以它与层次方框图是等价的.
4.( ) 面向数据结构的设计方法有:
A) Jackson方法.
B) Warnier方法.
C) Halstead方法.
D) PAD方法.
E) G. M y e r s方法.
5.( )以下测试方法是白盒测试方法的是:
A) 判定覆盖和边界值分析法.
B) 等价划分和错误推测法.
C) 路径覆盖和判定/条件覆盖法.
D) 条件组合覆盖和语句覆盖法.
E) 条件覆盖和错误推测法.
6.( )以下关于集成测试的论述,正确的是:
A) 先对每个模块分别测试,然后统一组装成软件系统的方法称为非渐增式测试.
B) 自顶向下的集成测试本质上是渐增式测试方法.
C) 存根模块是渐增式测试方法中使用的,在非渐增式测试中也用不到桩模块.
D) 一般来说,存根模块和桩模块在用过以后,不会作为软件的正式模块而存在.
E) 由于是对程序进行测试,测试方案的设计一般在详细设计阶段完成以后才进行.
7. ( ) 对于程序设计,正确的陈述是:
A) 为了减少程序的长度,最好不要在程序中增加注释.
B) 变量名以简洁为好,名字太长了难以理解,增加了程序的复杂性.
C) 程序语句要求体现层次性,以使结构清晰明显.
D) 数据结构的组织和复杂程度在设计期间确定,但数据说明的风格是在写程序时确
定的.
E) 对所有的输入数据都要进行检验,以便确定其合法性.
8. ( ) 内聚标志一个模块内各个元素彼此结合的紧密程度.
A) 内聚是信息隐蔽和局部化概念的自然扩展.理想内聚的模块只做臆见事情.
B) 一个模块所包含的任务必须在同一段时间内执行,该模块的内聚为时间内聚.
C) 一个模块内的处理元素是相关的,必须以特定次序执行,称为过程内聚.
D) 顺序内聚和功能内聚是高内聚,而偶然内聚和逻辑内聚是低内聚.
E) 时间内聚,通信内聚,过程内聚是中等程度的内聚.
9. ( )McCabe方法对程序复杂程度的定量度量的结果称为程序的环行复杂度,
其计算公式是:V(G)=m-n+p.
A) 应用McCabe方法的前提是对应的程序图变换成强连通图.
B) V(G)代表程序图G的线性无关环的个数.
C) 一般对于结构化程序,p恒等于1.
D) m是有向图G中的弧数.
E) n是有向图G中的节点数.
10.( )详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统.
A) 详细设计阶段不具体的编写程序.
B) 详细设计阶段的设计结果基本决定了最终的程序代码质量.
C) 详细设计的目标不仅要逻辑上正确的实现每个模块的功能,而且对每个模块的处
理过程也应确保简明易懂,清晰具体.
D) 详细设计的关键技术是结构程序设计技术.
四, 基本概念题(每题2分,共10分)
1. 软件工程.
2. 软件测试.
3. 数据流图及其组成和作用.
4. 结构化分析方法.
5. 信息隐蔽原理.
五, 叙述分析题:(每题5分,共20分)
1. 试述对用户要求没有完整的认识就匆忙着手编写程序是许多软件开发工程失败的主要
原因.
2. 简述软件可靠性和可用性的定义,平均无故障时间的计算公式及应用.
3. 简述软件重用的定义,范围和主要技术.
4. 说明软件测试在软件开发阶段的地位和作用.比较测试和调试的异同点.
六, 设计,作图,计算题(每题5分,共30分)
1.以下是某系统的数据流程图,请将其转换成相应的SC图.
2. 研究下面的伪码程序,完成以下问题:
START
INPUT X,N
DIMENSION A(N),F(N)
DO I=1 TO N
INPUT F(I)
END DO
K=0
DO WHILE (KA(K)=0
DO J=1 TO N-K
A(K)=A(K)+F(J)*F(J+K)/(N-K+1)
END DO
PRINT K*X,A(K)
K=K+1
END DO
STOP
A) 画出等价的控制流程图,.
B) 判断是否结构化的,说明理由.
C) 写出对应的PAD图.
D) 用McCabe方法计算环行复杂度.
3. 为方便储户,某银行拟开发计算机储蓄系统.储户填写的存款单或取款单由业务员键
入系统.如果是存款,系统记录存款人姓名,住址,存款类型,存款日期,利率等信
息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户.
1)画出该系统的高层数据流程图和第二层细化流程图.
2)对数据流定义数据字典.
4. 某航空公司规定,乘客可以免费托运不超过20公斤的行李.当行李重量超过20公斤
时,对头等舱的乘客超重部分每公斤收费4元,其它舱的乘客收费6元.对残疾乘客超重部分
在舱位等次相同的情况下收费减半.用判定表描述行李托运费的处理过程.
5.设计程序,先读入三个整数值代表一个三角形的三条边,然后根据这三个值判断该三
角形属于不等边,等腰或等边三角形中的哪一种.请设计满足判定/条件覆盖标准的测试
方案.
6.设模块RootForSquare(int a,int b,int c,int *x,int *y) 的功能是一元二次方程求根.请使用
等价划分法来设计测试方案.
6. 什么是白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。 白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。 六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。 "白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。 白盒测试,有时称为玻璃盒测试,是一种测试用例设计方法,它使用程 序设计的控制结构导出测试用例。使用白盒测试方法,软件工程师能够产生 测试用例(1)保证一个模块中的所有独立路径至少被使用一次;(2)对所有逻 辑值均需测试true 和 false;(3)在上下边界及可操作范围内运行所有循 环;(4)检查内部数据结构以确保其有效性。
7. 请问那位大虾知道关于电子商务当中提到的 白盒测试与黑盒测试的问题!!!
一、黑盒测试在快速应用开发(rad)环境中的重要作用
软件测试方法一般分为两种:白盒测试与黑盒测试。其中,白盒测试又称为结构测试、逻辑驱动测试或基于程序本身的测试,着重于程序的内部结构及算法,通常不关心功能与性能指标。黑盒测试又被称为功能测试、数据驱动测试或基于规格说明的测试,实际上是站在最终用户的立场上,检验输入输出信息及系统性能指标是否符合规格说明书中有关功能需求及性能需求的规定。
随着rad环境的发展,软件工程面临新的挑战,其中包括:
●应用系统的规模越来越庞大,结构越来越复杂;
●开发团队人员越来越多,分工越来越细;
●项目投资日益提高,导致投资风险增大。
在这样一种背景下,软件质量面临着更大的危机,而解决问题的关键正是黑盒测试,可是由于传统的黑盒测试往往局限于手工测试,凭借工程人员的经验自发地进行,缺乏严格的测试管理机制,因而效果并不明显。
在分发一个应用系统之前,若没有经过科学、周密的黑盒测试,就相当于将大量隐含的缺陷(defect)交付到最终用户手中,这对于开发团队自身、项目投资方及最终用户来说都是不负责任的表现,也将严重损害三方的利益。
今天,软件的质量要求越来越受到重视,在对软件的质量监督中,黑盒测试起着重要的、不可替代的作用;而随着软件开发平台及软件设计思想的进步和发展,特别是rad技术的发展,对黑盒测试提出了更明确的要求,人们发现,必须遵循一定的测试理论,依赖于优秀的测试工具,才能进行科学、完备的测试。
二、黑盒测试的操作步骤
在传统的软件开发生命周期当中,测试工作往往被搁置到整个开发过程的后期进行,也就是说,当应用程序的编码工作已经基本完成,才开始进行测试,这样做的缺点在于:
a)由于应用程序庞大而复杂,测试工作千头万绪,测试人员难以组织科学、全面的测试用例,从而大幅度提高了测试成本,并严重影响测试的全面性和有效性;
b)由于缺陷所涉及的模块从开发到测试之间的时间间隔较长,使得程序员的修改和维护工作要付出更大的代价;
c)由于受到分发日期的限制,测试工作往往是在忙碌中结束的,而将大量的缺陷遗留给最终用户,也就是说,真正的测试工作实际上是由最终用户来完成的。
因此,为了保证测试工作科学、精确、全面、有序地进行,应该采取一边开发一边测试的策略,使得开发工作与测试工作平行进行,这也就是俗话所说的“越早测试越好”的概念。
一套完整的测试应该由五个阶段组成:
1.测试计划
首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
2.测试设计
将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。
3.测试开发
建立可重复使用的自动测试过程。
4.测试执行
执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。
5.测试评估
结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。
显然,黑盒测试只有严格按照步骤进行,才可能对应用程序的质量进行把关。然而,如果没有一种优秀的测试工具的帮助,单纯凭借手工测试,不但将耗费大量的人力、物力和财力,而且有很多测试工作是难以实现甚至是无法实现的。
三、手工测试与自动测试的比较
手工测试无法保证黑盒测试的科学性与严密性,这是因为:
●测试人员要负责大量文档、报表的制订和整理工作,会变得力不从心;
●受软件分发日期、开发成本及人员、资源等诸多方面因素的限制,难以进行全面的测试;
●如果修正缺陷所花费的时间相当长,回归测试将变得异常困难;
●对测试过程中发现的大量缺陷缺乏科学、有效的管理手段,责任变得含混不清,没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率;
●反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一,测试花费的时间越长,测试的严格性也就越低;
●难以对不可视对象或对象的不可视属性进行测试。
因此,自动测试成为最佳的解决方案。所谓自动测试,实际上是将大量的重复性工作交给计算机去完成,一个优秀的自动测试工具,不但可以满足科学测试的基本要求,而且可以节约大量的时间、成本、人员和资源,并且测试脚本可以被重复利用(包括被不同的项目所利用)。
8. 什么是黑盒测试和白盒测试
软件测试按照测试技术划分可以有:黑盒测试,白盒测试,灰盒测试
黑盒测试又叫功能测试
1.软件黑色盒子,里边的实现,看不见代码
2.输入,输出结果---功能测试的方法
这是因为在黑盒测试中主要关注被测软件的功能实现,而.不是内部逻辑。
在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员主要是验证系统功能与需求的一致性。
在绝大多数没有用户参与的黑盒测试中,最常见的测试有:功能性测试、容量测试、安全性测试、负载测试、恢复性测试、标杆测试、稳定性测试、可靠性测试等。
在我们软件测试行业中最常见的还是功能测试,考察个人对需求的掌握度和软件工程的基本知识。
白盒测试
1.白色透明的黑子;代码实现,功能逻辑;
2.开发--看代码---单元测试
是一种测试用例设计方法,在这里盒子指的是被测试的软件,白盒,顾名思义即盒子是可视的,你可以清楚盒子内部.的东西以及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一-个清楚的了解,并且基于这个知识来设计你的用例。
白盒测试技术一般可被分为静态分析和动态分析两类技术。
白盒测试优点:迫使测试人员去仔细的思考软件的实现;可以检测代码中的每条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底,最优化。
白盒测试缺点:无法检测代码中遗漏的路径和数据敏感性错误;不验证格式的正确性。
灰盒测试(补充)
1.介于白盒黑盒两者之间
2.了解实现流程逻辑,不需要知道具体代码
3.接口测试---使用方法
白盒测试和黑盒测试往往不是决然分开的,一般在白盒测试中交叉使用黑盒测试的方法,在黑盒测试中交叉使用白盒测试的方法。
最常见的灰盒测试是集成测试
9. 软件工程单元测试应该怎么写
单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。
测试用例设计
下面谈谈测试用例设计。前面已经说了,测试用例的核心是输入数据。预期输出是依据输入数据和程序功能来确定的,也就是说,对于某一程序,输入数据确定了,预期输出也就可以确定了,至于生成/销毁被测试对象和运行测试的语句,是所有测试用例都大同小异的,因此,我们讨论测试用例时,只讨论输入数据。
前面说过,输入数据包括四类:参数、成员变量、全局变量、IO媒体,这四类数据中,只要所测试的程序需要执行读操作的,就要设定其初始值,其中,前两类比较常用,后两类较少用。显然,把输入数据的所有可能取值都进行测试,是不可能也是无意义的,我们应该用一定的规则选择有代表性的数据作为输入数据,主要有三种:正常输入,边界输入,非法输入,每种输入还可以分类,也就是平常说的等价类法,每类取一个数据作为输入数据,如果测试通过,可以肯定同类的其他输入也是可以通过的。下面举例说明:
正常输入
例如字符串的Trim函数,功能是将字符串前后的空格去除,那么正常的输入可以有四类:前面有空格;后面有空格;前后均有空格;前后均无空格。
边界输入
上例中空字符串可以看作是边界输入。
再如一个表示年龄的参数,它的有效范围是0-100,那么边界输入有两个:0和100。
非法输入
非法输入是正常取值范围以外的数据,或使代码不能完成正常功能的输入,如上例中表示年龄的参数,小于0或大于100都是非法输入,再如一个进行文件操作的函数,非法输入有这么几类:文件不存在;目录不存在;文件正在被其他程序打开;权限错误。
如果函数使用了外部数据,则正常输入是肯定会有的,而边界输入和非法输入不是所有函数都有。一般情况下,即使没有设计文档,考虑以上三种输入也可以找出函数的基本功能点。实际上,单元测试与代码编写是“一体两面”的关系,编码时对上述三种输入都是必须考虑的,否则代码的健壮性就会成问题。
白盒覆盖
上面所说的测试数据都是针对程序的功能来设计的,就是所谓的黑盒测试。单元测试还需要从另一个角度来设计测试数据,即针对程序的逻辑结构来设计测试用例,就是所谓的白盒测试。在老纳看来,如果黑盒测试是足够充分的,那么白盒测试就没有必要,可惜“足够充分”只是一种理想状态,例如:真的是所有功能点都测试了吗?程序的功能点是人为的定义,常常是不全面的;各个输入数据之间,有些组合可能会产生问题,怎样保证这些组合都经过了测试?难于衡量测试的完整性是黑盒测试的主要缺陷,而白盒测试恰恰具有易于衡量测试完整性的优点,两者之间具有极好的互补性,例如:完成功能测试后统计语句覆盖率,如果语句覆盖未完成,很可能是未覆盖的语句所对应的功能点未测试。
白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合,在此不作讨论。跟条件有关的覆盖就有三种,解释一下:条件覆盖是指覆盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。老纳做过一些粗浅的研究,发现与条件直接有关的错误主要是逻辑操作符错误,例如:||写成&&,漏了写!什么的,采用分支覆盖与条件覆盖的组合,基本上可以发现这些错误,另一方面,条件值覆盖与条件值组合覆盖往往需要大量的测试用例,因此,在老纳看来,条件值覆盖和条件值组合覆盖的效费比偏低。老纳认为效费比较高且完整性也足够的测试要求是这样的:完成功能测试,完成语句覆盖、条件覆盖、分支覆盖、路径覆盖。做过单元测试的朋友恐怕会对老纳提出的测试要求给予一个字的评价:晕!或者两个字的评价:狂晕!因为这似乎是不可能的要求,要达到这种测试完整性,其测试成本是不可想象的,不过,出家人不打逛语,老纳之所以提出这种测试要求,是因为利用一些工具,可以在较低的成本下达到这种测试要求,后面将会作进一步介绍。
关于白盒测试用例的设计,程序测试领域的书籍一般都有讲述,普通方法是画出程序的逻辑结构图如程序流程图或控制流图,根据逻辑结构图设计测试用例,这些是纯粹的白盒测试,不是老纳想推荐的方式。老纳所推荐的方法是:先完成黑盒测试,然后统计白盒覆盖率,针对未覆盖的逻辑单位设计测试用例覆盖它,例如,先检查是否有语句未覆盖,有的话设计测试用例覆盖它,然后用同样方法完成条件覆盖、分支覆盖和路径覆盖,这样的话,既检验了黑盒测试的完整性,又避免了重复的工作,用较少的时间成本达到非常高的测试完整性。不过,这些工作可不是手工能完成的,必须借助于工具,后面会介绍可以完成这些工作的测试工具。