加油!!

发布新日志

  • LR分析结果图功能说明

    2010-10-27 11:48:10

    1、Transation Sunmmary(事务综述)
    对事务进行综合分析是性能分析的第一步,通过分析测试时间内用户事务的成功与失败情况,可以直接判断出系统是否运行正常。

    2、Average Transaciton Response Time(事务平均响应时间)
    “事务平均响应时间”显示的是测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。
    例:随着测试时间的变化,系统处理事务的速度开始逐渐变慢,这说明应用系统随着投产时间的变化,整体性能将会有下降的趋势。

    3、Transactions per Second(每秒通过事务数/TPS)
    “每秒通过事务数/TPS”显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,使考查系统性能的一个重要参数。通过它可以确定系统在任何给定时刻的时间事务负载。分析TPS主要是看曲线的性能走向。将它与平均事务响应时间进行对比,可以分析事务数目对执行时间的影响。
    例:当压力加大时,点击率/TPS曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈。51Testing软件测试网.mrm5GD­J7l O

    4、Total Transactions per Second(每秒通过事务总数)
    “每秒通过事务总数”显示在场景运行时,在每一秒内通过的事务总数、失败的事务总署以及停止的事务总数。

    5、Transaction Performance Sunmmary(事务性能摘要)
    “事务性能摘要”显示方案中所有事务的最小、最大和平均执行时间,可以直接判断响应时间是否符合用户的要求。51Testing软件测试网3n/j,u5}1o0WC iT+j@
    重点关注事务的平均和最大执行时间,如果其范围不在用户可以接受的时间范围内,需要进行原因分析。

    6、Transaction Response Time Under Load(事务响应时间与负载)
    “事务响应时间与负载”是“正在运行的虚拟用户”图和“平均响应事务时间”图的组合,通过它可以看出在任一时间点事务响应时间与用户数目的关系,从而掌握系统在用户并发方面的性能数据,为扩展用户系统提供参考。此图可以查看虚拟用户负载对执行时间的总体影响,对分析具有渐变负载的测试场景比较有用。

    7、Transaction Response Time(Percentile)(事务响应时间(百分比))
    “事务响应时间(百分比)”是根据测试结果进行分析而得到的综合分析图,也就是工具通过一些统计分析方法间接得到的图表。通过它可以分析在给定事务响应时间范围内能执行的事务百分比。

    8、Transaction Response Time(Distribution)(事务响应时间(分布))
    “事务响应时间(分布)”显示在场景运行过程中,事务执行所用时间的分布,通过它可以了解测试过程中不同响应时间的事务数量。如果系统预先定义了相关事务可以接受的最小和最大事务响应时间,则可以使用此图确定服务器性能是否在可以接受的范围内。

    9、Web Resources(Web资源分析)
    Web资源分析是从服务器入手对Web服务器的性能分析。

    10、Hits per Second(每秒点击次数)
    “每秒点击次数”,即使运行场景过程中虚拟用户每秒向Web服务器提交的HTTP请求数。通过它可以评估虚拟用户产生的负载量,如将其和“平均事务响应时间”图比较,可以查看点击次数对事务性能产生的影响。通过对查看“每秒点击次数”,可以判断系统是否稳定。系统点击率下降通常表明服务器的响应速度在变慢,需进一步分析,发现系统瓶颈所在。

    11、Throughput(吞吐率)
    “吞吐率”显示的是场景运行过程中服务器的每秒的吞吐量。其度量单位是字节,表示虚拟用在任何给定的每一秒从服务器获得的数据量。可以依据服务器的吞吐量来评估虚拟用户产生的负载量,以及看出服务器在流量方面的处理能力以及是否存在瓶颈。
    “吞吐率”图和“点击率”图的区别:
    “吞吐率”图,是每秒服务器处理的HTTP申请数。
    “点击率”图,是客户端每秒从服务器获得的总数据量。

    3、HTTP Status Code Summary(HTTP状态代码概要)51Testing软件测试网.g*n I V |)Y3R_F3T
    “HTTP状态代码概要”显示场景或会话步骤过程中从Web服务器返回的HTTP状态代码数,该图按照代码分组。HTTP状态代码表示HTTP请求的状态。

    ~I%A s Oz8y0

    Yi$x A­Q[s%i04、HTTP Responses per Second(每秒HTTP响应数)51Testing软件测试网1K1k*V-r+O,wLh(j

  • loadrunner操作说明书

    2010-10-27 11:42:41

  • LoadRunner函数大全之中文解释

    2010-10-27 11:41:00

  • LR面试题

    2010-10-27 11:35:39

    1,EBCDIC translation有什么用?
    ebcdic translation就是计算器语言转换。EBCDIC (Extended Binary Coded Decimal Interchange Code)=【电脑】扩增二进式十进交换码。 EBCDIC 为国际商用机器公司(IBM)于1963年-64年间推出的字符编码表,根据早期打孔机式的二进化十进数(BCD, Bindary Coded Decimal)排列而成。


    2,编译器和解释器有什么区别?
    区别:运行目标程序时的控制权在解释器而不在目标程序。由于解释器的动态特性和可移植特性,在有些特定的应用中必须采用解释的方法.。编译器:是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;

    解释器:则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的;

    这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)。

    3,需要关联的数据怎么确定?

    4,LR的协议包分为多少类?

    5,树视图和脚本视图各有什么优点?

    6,LR中的API分为几类?

    7,action和init、end除了迭代的区别还有其他吗?

    8,HTTP的超时有哪三种?

    9,在什么地方设置HTTP页面filter?

    10,pot mapping的原理是什么?

    11,如何设置可以让一个虚拟IP对应到一个Vuser?

    12,什么是contentcheck?如何来用?

    13,network中的speed simulation是模拟的什么带宽?

    14,进程和线程有什么区别?

    15,生成WEB性能图有什么意义?大概描述即可。

    16,如果刷新controller里的脚本?

    17,WAN emulation是模拟什么的?

    18,如何把脚本和结果放到load generator的机器上?

    19,如何设置才能让集合点只对一半的用户生效?

    20,在设置windows资源图监控的时候,用到的是什么端口和协议?在这一过程中,会有大概哪些问题?(大概描述)

  • LR视频教程

    2010-10-27 11:34:31

    0 性能测试常见用语http://www.boobooke.com/v/bbk1577
    1 lr目录分析http://www.boobooke.com/v/bbk1574
    2.1 lr界面分析http://www.boobooke.com/v/bbk1735
    2.2 lr界面分析http://www.boobooke.com/v/bbk1736
    2.3 lr界面分析http://www.boobooke.com/v/bbk1737
    3 lr常用术语http://www.boobooke.com/v/bbk1620
    4 hp web tours 分析http://www.boobooke.com/v/bbk1762
    5 lr录制测试脚本http://www.boobooke.com/v/bbk1763
    6 lr回放测试脚本http://www.boobooke.com/v/bbk1764
    7 HTML和URL比较http://www.boobooke.com/v/bbk1771
    8 lr自动关联http://www.boobooke.com/v/bbk1778
    9 lr测试脚本的增强方法http://www.boobooke.com/v/bbk1772
    10 run time settingshttp://www.boobooke.com/v/bbk1782
    11 lr脚本编写实践过程http://www.boobooke.com/v/bbk1781
    12 错误处理http://www.boobooke.com/v/bbk1776
    13 脚本调试http://www.boobooke.com/v/bbk1777
    14 java虚拟用户http://www.boobooke.com/v/bbk1901
    15 调用dllhttp://www.boobooke.com/v/bbk1900
    16 lr录制sql脚本http://www.boobooke.com/v/bbk1526
    17 创建负载测试场景http://www.boobooke.com/v/bbk2145
    18 面向目标的场景http://www.boobooke.com/v/bbk2168
    19 分析场景http://www.boobooke.com/v/bbk2144
    20 lr手动关联http://www.boobooke.com/v/bbk2161
    21 配置端口映射http://www.boobooke.com/v/bbk2163
    22 性能分析基础知识http://www.boobooke.com/v/bbk2162
    23 LR使用指南-第一部分基础知识完结篇http://www.boobooke.com/v/bbk2201
    小布老师视频:
    测试工具概述,兼LoadRunner介绍 -1-4
    http://www.boobooke.com/v/bbk1046
    http://www.boobooke.com/v/bbk1046.zip
    http://www.boobooke.com/v/bbk1047
    http://www.boobooke.com/v/bbk1047.zip
    http://www.boobooke.com/v/bbk1048
    http://www.boobooke.com/v/bbk1048.zip
    http://www.boobooke.com/v/bbk1055
    http://www.boobooke.com/v/bbk1055.zip
    LR系列培训视频  - LoadRunner概述(上下)
    http://www.boobooke.com/v/bbk1059
    http://www.boobooke.com/v/bbk1059.zip
    http://www.boobooke.com/v/bbk1060
    http://www.boobooke.com/v/bbk1060.zip
    LR系列培训视频  - LoadRunner安装
    http://www.boobooke.com/v/bbk1061
    http://www.boobooke.com/v/bbk1061.zip
    LR系列培训视频  - 录制和回放测试脚本(1-3)
    http://www.boobooke.com/v/bbk1063
    http://www.boobooke.com/v/bbk1063.zip
    http://www.boobooke.com/v/bbk1064
    http://www.boobooke.com/v/bbk1064.zip
    http://www.boobooke.com/v/bbk1065
    http://www.boobooke.com/v/bbk1065.zip
    LR系列培训视频 - LoadRunner测试Tuxedo应用系统 1-4
    http://www.boobooke.com/v/bbk1067
    http://www.boobooke.com/v/bbk1067.zip
    http://www.boobooke.com/v/bbk1068
    http://www.boobooke.com/v/bbk1068.zip
    http://www.boobooke.com/v/bbk1071
    http://www.boobooke.com/v/bbk1071.zip
    http://www.boobooke.com/v/bbk1072
    http://www.boobooke.com/v/bbk1072.zip
    开源性能测试工具Curl-Loader快速实战 - 1
    http://www.boobooke.com/v/bbk1808
    http://www.boobooke.com/v/bbk1808.zip
    开源性能测试工具Curl-Loader快速实战 - 2
    http://www.boobooke.com/v/bbk1809
    http://www.boobooke.com/v/bbk1809.zip
    开源性能测试工具Curl-Loader快速实战 - 3
    http://www.boobooke.com/v/bbk1835
    http://www.boobooke.com/v/bbk1835.zip
    开源性能测试工具Curl-Loader快速实战 - 4
    http://www.boobooke.com/v/bbk1836
    http://www.boobooke.com/v/bbk1836.zip
    使用LoadRunner测试Oracle实例研究 - 1
    http://www.boobooke.com/v/bbk2159
    http://www.boobooke.com/v/bbk2159.zip
    使用LoadRunner测试Oracle实例研究 - 2
    http://www.boobooke.com/v/bbk2170
    http://www.boobooke.com/v/bbk2170.zip
    使用LoadRunner测试Oracle实例研究 - 3
    http://www.boobooke.com/v/bbk2171
    http://www.boobooke.com/v/bbk2171.zip


  • LR学习过程100816

    2010-10-27 11:29:22

    duration   是优先于迭代的。
    设置时间若小于脚本运行时间  脚本运行时间为先
    手工场景设置中关于虚拟用户的设置:    
    1、虚拟用户启动(加压)模式: 在现实中,Web应用系统的用户不太可能同时做相同的操作,因此为了让Web应用系统所承担的压力随时间均匀分布,建议虚拟用户依次启动,同时也避免大量用户同时登录造成系统阻塞。在单击“edit schedule”按钮,进入scheduled Ruilder 界面,在ramp up 页签下设置。 例如每30秒启动2个用户数。
    虚拟用户持续的时间:我们通常会选择加载完所有的用户,场景还用运行的时间 在duration 中选择第2项。第1项表示所有的虚拟用户只运行一遍脚本,场景停止运行。第3项是场景一直运行下去。
    2、虚拟用户减压模式:在单击“edit schedule”按钮,进入scheduled Ruilder 界面,在ramp down 页签下设置 ,通常选择第2项,stop(30)vusers very 00:00:30

    问题:
    1、多线程和单进程的区别?为每一个进程分配ip和为每个线程分配IP?
    2、场景运行类型? 手动 标准  手动中还有个设置总虚拟用户**%
    3、场景集合点策略:  
    场景中虚拟用户每一时刻执行的虚拟用户数跟设置多少个并发数无关?场景中虚拟用户运行如何进行的?
    4、迭代和并发,是完全不同的概念。没有什么关系。
    比如,一个用户迭代十次,还是一个用户的压力。
    5、10个用户执行一次,就是10个用户的压力。10个用户迭代10次,还是10个用户的压力。但他们都和参数化的数据有关系(也要看参数化是如何设置的,以及系统如何判断提交值的)。
    5、LR是如何实现迭代和并发:
    说一个比较容易理解的层面:迭代就是不停的反复调用同一脚本,反复执行,注意,对1个用户执行10次来说,只会分配一块内存。10个用户执行一次,是调用同一脚本10次,会分配10块内存。LR调用脚本,编译后,运行,按脚本发送数据。
    6、事务是用来做什么的?
    7、参数化输入怎么做?
    8、集合点用来做什么?怎么做?
    9、分析报告

    标题是 认识LR ,初学者有几个问题:
    1.那如何认识LR哪,从几个方面?
    2.学习LR 对基础有没什么要求,掌握到什么程度算是一个成手了哪?
    3.学完LR,怎样搭建性能测试哪 或如何开展 ...
    4.混合场景设置问题,我测试的是邮件系统:
    有一个需求是测试混合场景:即,SMTP发送/POP接收/WEB发送/WEB接收同时运行,在controller中可以分别增加这四种脚本运行。但场景的设置是个头痛的问题:
    因为有下面这种需求:
    平均一秒钟X个SMTP发送;一秒钟Y个POP接收;一秒钟M个WEB发送;一秒钟N个WEB接收;这些值都不同以上面这些值来持续一段时间跑这个脚本,比如十分钟,三十分钟,这样来确定系统的性能表现;但一个SMTP发送(POP接收/WEB发送/WEB接收)使用的时间都不同,有的不到一秒,有的可能需要10秒才能完成;这样我该设置多少用户数来跑呢?而且持续的这段时间又要维持那个值

    我的想法是:
    比如全部脚本都是要求一秒钟一个用户;而一个用户跑完需要0.5S,那这个脚本就增加思考时间0.5S,并设置1个用户跑;如果一个用户跑完需要10S,那这个脚本就设置10个用户跑;但这样算很麻烦,而且很不准确;大家遇到这样的问题时,都是怎么处理的啊?

     

  • LR参数表中select next row和update value on的设置

    2010-10-27 11:23:35

    参数表中select next row和update value on的设置
    LR的参数的取值,和select next row和update value on的设置都有密不可分的关系。
    下表给出了select next row和update value on不同的设置,对于LR的参数取值的结果将不同,给出了详细的描述。

    Select next row
    Update Value on
    实际运行结果
    sequential
    each iteration
    在某次循环中所有用户取值相同。
    所有用户第一次循环取第一行值,第二次循环取第二行值

    each occurrence
    在某次循环中或者脚本中使用参数的地方,所有用户取值相同。
    脚本中出现要使用参数的话,参数值就更新一次,循环一次值再更新一次。

    once
    在所有的循环中所有用户取值相同。
    所有的用户所有的循环中,只用一个值(即参数中的第一行值)

    random
    each iteration
    不同的用户,在不同的循环次数中,随机取值

    each occurrence
    不同的用户,脚本中出现要使用参数的话,随机取值一次,循环一次再随机取值一次

    once
    不同的用户,不管循环多少次,只随机取值一次。

    unique
    each iteration
    若选择手工自配参数,那LR按照每用户几个参数先分配参数,然后进行循环。
    若选择自动分配参数:
    Controller中edit schedule中run until comletion:按照循环次数先分配第一个VU(例如设置的循环次数为3,那分配给第一个VU 3个参数值),然后接下来的3个参数值分配给第二个VU,依次类推…...
    Controller中edit schedule中run for:若选择自动分配,LR将按照用户数均分参数,剩余的参数不使用。

    each occurrence
    只能手工分配用户,给每个用户分配好X个参数后,在脚本中有参数的地方,就使用已经分配好的X个参数。

    once
    按照用户数分配给每个用户分配一个参数而已。以后的循环这个用户就使用这一个参数

  • LR关联(带附件)

    2010-10-27 11:21:57

    1.什么是关联?

    关联是为了获取每次运行脚本的唯一数据值和通过嵌套查询生成的数据。关联提供了避免产生重复数据错误的数值以及优化代码(以避免嵌套查询)。关联是正常回放含有动态数据如Session IDsDatabase Primary Keys 和差不多所有的HTTP安全机制脚本的根本。关联的目的就是吧脚本中某些hard-coded数据转变成从服务器传过来的动态的,每次执行都不一样的数据。

    2.参数(化)和关联的区别

    参数(化)相当于代码编写中的变量。是某个变量向服务器输入不同的值,用来模拟真实的用户。运行脚本时,不同的数据集被发送给服务器。只能对某个具体的变量值进行参数化。参数化的对象在回放过程中即时没有被参数化也不会报错,只是像服务器输入了相同的值。但是关联的对象在回放过程中如果没有做关联,回放过程中就会报错。关联是对系统的动态数据(每次运行脚本都会变化的值,是从服务器传过来的)进行。简单的说,每一次执行时都会变动的值,就有可能需要做关联。

    3.动态关联和手工关联的区别

    动态关联是我们为关联设置规则,可以是具体的应用程序服务,这里的数据由所创建的规则替代。在手工关联中,我们想要关联的数值被扫描并且编写关联函数完成关联。VuGen内建自动关联引擎(auto-correlation engine,可以自动找出需要关联的值,并可以利用关联函数自动建立关联。

    手动关联需要自行查找关联的对象,然后自行插入关联函数。

    4.如何发现哪里需要关联?

    两种方式:首先回放扫描不同的值然后看哪些值需要关联。其次,我们可以录制2个脚本然后作比较。我们可以查看不同的文件决定需要关联的数据。在我实践的某个项目中,为每个用户提供一个唯一的ID,一个不确定的数字,是自动生成的,有序且值唯一。我需要关联这个ID值以防止在运行脚本是出现错误。我用的是扫描的方式关联。

    5.在哪里设置自动关联选项?

    网页自动关联可以在recording options -->correlation tab栏设置。这里可以为全部脚本设置关联并选择是在线问题信息还是离线actions,我们也可为这些关联定义规则。数据库的自动关联可以用输出窗口、关联扫描、找关联查询项并选择要关联的查询值。如果知道需要关联的具体值,只需要为这些值创建关联并指定这些值是如何创建的。

    6. 在网页录制脚本中,什么函数能捕获动态数据?

    Web_reg_save_param函数可以将动态数据信息保存到一个参数中。

    Web_reg_save_param函数语法:

    int web_reg_save_param (const char *mpszParamName, <List of Attributes>, LAST);

    以下表格列出了可获取到的属性. 注意属性值字符串没有大小写区分(例如:Search=all

    NotFound

    边界找不到或空字符串生成时的处理方法。默认值为“Error”,说明当边界值找不到时,VuGen可以作为一个错误提出。当设置为“EMPTY”,没有错误信息提出脚本继续执行。注意:如果脚本设置了Continue on Error项,则当边界值没有找到时,脚本也会继续执行,但会早Extend log文件中输出一个错误信息

    LB

    参数或动态数据的左边界。该参数必须是非空字符串。区分大小写。如果想忽略大小写,则用LB/IC。如果要指定二进制数据用LB/BIN

    RB

    参数或动态数据的右边界。该参数必须是非空字符串。区分大小写。如果不想区分大小写,则用RB/IC。如果要指定二进制数据用RB/BIN

    RelFrameID

    相对于请求的URLHTML页面的层次(hierarchy level)。可以是All或者是一个数字

    Search

    查询的范围去哪里查看分割数据。可选值有:Headers (search only the headers), Body (search only Body data, not headers), or ALL (search Body and headers)。默认值是ALL

    ORD

    可选参数。指定匹配项的顺序或出现数(the ordinal or occurrence number of the match)。默认值为1,如果指定是“ALL”,则将参数值保存在一个数值里。

    SaveOffset

    The offset of a sub-string of the found value, to save to the parameter. The default is 0. The offset value must be non-negative.

    Savelen

    The length of a sub-string of the found value, from the specified offset, to save to the parameter. The default is -1, indicating until the end of the string.

    Convert

    The conversion method to apply to the data:

    HTML_TO_URL: convert HTML-encoded data to a URL-encoded data format

    HTML_TO_TEXT: convert HTML-encoded data to plain text format

    7.HTML页面中的动态数据可能存在于:

            每次获取相关网页都变化的URL

            form提交过程中录制的字段(有时是隐藏的)

            JavaScritpt cookies

    1种情况:

    录制时,假设点击 “buy me now文字的超链接,VuGen录制的URL是:http://host//cgi-bin/purchase.cgi?date=170397&ID=1234因为date "170397" ID "1234"是在录制过程中自动生成的,每一次新的浏览会话重新生成新的dateID。当运行脚本时,“Buy me now!”链接的URL不再是录制时的URL而是一个新的了。因此,Web服务器不能重新获得URL

    2种情况

    考虑一种情形:提交一个用户填写了他的姓名和帐号IDform。当这个form提交时,一个唯一的序列号和该用户的数据同时也一起提交给了服务器。这个序列号是HTML代码中一个隐藏字段的值,被VuGen录制到了脚本中。因为这个序列号在每次浏览会话中都会变,所以Vuser不能成功回放录制的脚本。

    8.如果右界不一致,指定一个右边界是不够的,需要指定可选右边界。因为它不一致---例如有时是”@”有时是“&”。这种情况下,指定&为可选择的右边界。

     

  • LR录制不成功

    2010-10-27 11:19:24

    1、捕获等级改为Socket Level and WinINET level data

    2.系统属性,高级选项卡下,性能里面,单击设置按钮,修改数据执行保护为“只为关键windows程序和服务启用数据执行保护”

    3.IE6->工具->internet选项->高级 ,把"启用第三方浏览器扩展"前面的勾取消掉,再"确定"

    4.lr本身的稳定性,再加上在系统中安装软件时有可能会将其注册表修改掉,尤其是安装dotnet2005的时候,导致lr录制脚本时不能弹出IE页面。
    主要是LR的注册信息被修改,无法找到IE路径。重新注册LR:在lr的安装目录(例如D:\Program Files\Mercury\LoadRunner\bin)下,单击register_vugen.bat文件,注册信息被重新改写了。

  • VMware开机时提示“驱动器未就绪”

    2010-10-27 11:15:54

    点虚拟机,设置,硬件,选中floppy ,
    将其中的"Connected"(已连接)和"Connect at power on"(打开电源时连接)前面的勾去掉
  • 程序代码模块的内聚与耦合和测试的关系

    2009-01-06 21:49:30

      首先我们引出内聚与耦合的两个概念.内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计追求高内聚,低耦合。

    内聚按强度从低到高有以下几种类型:
    (1)偶然内聚。如果一个模块的各成分之间毫无关系,则称为偶然内聚。
    (2)逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。
    (3)时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。
    (4)过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
    (5)通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
    (6)顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
    (7)功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚
    耦合的强度依赖于以下几个因素:
    (1)一个模块对另一个模块的调用;
    (2)一个模块向另一个模块传递的数据量;
    (3)一个模块施加到另一个模块的控制的多少;
    (4)模块之间接口的复杂程度。

     耦合按从强到弱的顺序可分为以下几种类型:
    (1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。
    (2)公共耦合。两个以上的模块共同引用一个全局数据项就称为公共耦合。
    (3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。
    (4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。
    (5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。
    (6)非直接耦合。模块间没有信息传
      然后我们通过测试的角度来看一下这两个度量在测试中的意义:
    高内聚的模块,互相之间依赖性比较少,某个模块一但出现问题的时候,能把错误控制在一个模块内.不会因为一个模块出了问题,而影响了其他功能模块.保证了其他功能的完整性,不会影响用户的其他操作,能让给用户带来的麻烦降低到最低限度.程序员也能快速的定位出问题所在的模块,进行问题修改.模块之间没有太多的牵连,更便于程序员的问题修改.在问题修改后,也不会给其他功能模块带来太多的影响.测试人员在做单元或集成测试的时候,能够更容易把里面的程序模块之间的逻辑理清楚,能设计出高覆盖率的用例把程序代码后模块接口都能完全覆盖测试到.也能让测试人员在做回归测试时,降低一定的风险.

    耦合性高的模块,相互之间依赖性比较多,模块与模块之间的关系也比较复杂.就容易出现,一个程序模块出现了问题,导致其他功能模块都不能正常运行.而且由于关系的复杂性,给程序员定位及修改问题带来一定的不便.也影响了用户的所有操作,给用户带来更大损失.而且由于模块之间的复杂关系,即便程序员修改了一个问题后,也不能保证不会带来更多的缺陷.给测试人员做单元和集成测试带来了太多的不便.需要花大量的时间去理清内部的逻辑.在这样的情况下,可能也会给测试工作带来遗漏的地方,留下隐患.测试人员也要花更多的时间进行回归测试,来保证系统程序符合规定要求了.无形中给项目带来了更多的风险.

  • 关于批处理

    2009-01-06 21:47:53

    后缀是bat的文件就是批处理文件,是一种文本文件。简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令。那它有什么用呢?

    比如,在启动wps软件时,每次都必须执行

    C:\>cd wps
    C:\WPS>spdos
    C:\WPS>py
    C:\WPS>wbx
    C:\WPS>wps

    如果每次用WPS之前都这样执行一次,您是不是觉得很麻烦呢?

    如果有一个方法,只需编写一个批处理文件,就会自动执行刚才的所有命令,您想不想学呢?

    当您看完此节,自己编写的第一个批处理文件顺利执行时,您一定会大吃一惊的。

    此外电脑每次启动时都会寻找autoexec.bat这条批处理文件,从而可执行一些每次开机都要执行的命令,如设置路径path、加载鼠标驱动mouse、磁盘加速smartdrv等,可以使您的电脑真正自动化。

    echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符
    echo off 表示在此语句后所有运行的命令都不显示命令行本身
    @ 与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。
    call 调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)
    pause 运行此句会暂停,显示Press any key to continue... 等待用户按任意键后继续
    rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的


    例:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。

    批处理文件的内容为: 文件表示:

    echo off 不显示命令行

    dir c:\*.* >a.txt 将c盘文件列表写入a.txt

    call c:\ucdos\ucdos.bat 调用ucdos

    echo 你好 显示"你好"

    pause 暂停,等待按键继续

    rem 使用wps 注释将使用wps

    cd ucdos 进入ucdos目录

    wps 使用wps

    批处理文件中还可以像C语言一样使用参数,这只需用到一个参数表示符%。

    %表示参数,参数是指在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。

    例如,C:根目录下一批处理文件名为f.bat,内容为 format %1

    则如果执行C:\>f a: 则实际执行的是format a:

    又如C:根目录下一批处理文件的名为t.bat,内容为 type %1 type %2

    那么运行C:\>t a.txt b.txt 将顺序地显示a.txt和b.txt文件的内容

    if goto choice for 是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。

    if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
    1、if "参数" == "字符串" 待执行的命令
    参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
    如if "%1"=="a" format a:

    2、if exist 文件名 待执行的命令
    如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys

    3、if errorlevel 数字 待执行的命令
    如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2 DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码

    goto 批处理文件运行到这里将跳到goto 所指定的标号处, 一般与if配合使用。 如:

    goto end

    :end
    echo this is the end

    标号用 :字符串 表示,标号所在行不被执行

    choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……

    如: choice /c:dme defrag,mem,end
    将显示
    defrag,mem,end[D,M,E]?

    例如,test.bat的内容如下:
    @echo off
    choice /c:dme defrag,mem,end
    if errorlevel 3 goto defrag 应先判断数值最高的错误码
    if errorlevel 2 goto mem
    if errotlevel 1 goto end

    :defrag
    c:\dos\defrag
    goto end

    :mem
    mem
    goto end

    :end
    echo good bye

    此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。

    for 循环命令,只要条件符合,它将多次执行同一命令。

    格式FOR [%%f] in (集合) DO [命令]
    只要参数f在指定的集合内,则条件成立,执行命令

    如果一条批处理文件中有一行:
    for %%c in (*.bat *.txt) do type %%c
    含义是如果是以bat或txt结尾的文件,则显示文件的内容。

    autoexec.bat

    DOS在启动会自动运行autoexec.bat这条文件,一般我们在里面装载每次必用的程序,如: path(设置路径)、smartdrv(磁盘加速)、 mouse(鼠标启动)、mscdex(光驱连接)、 doskey(键盘管理)、set(设置环境变量)等。

    如果启动盘根目录中没有这个文件,电脑会让用户输入日期和时间。

    例如,一个典型的autoexec.bat内容如下:

    @echo off 不显示命令行

    prompt $p$g 设置提示符前有目录提示

    path c:\dos;c:\;c:\windows;c:\ucdos;c:\tools 设置路径

    lh c:\dos\doskey.com 加载键盘管理

    lh c:\mouse\mouse.com 加载鼠标管理

    lh c:\dos\smartdrv.exe 加载磁盘加速管理

    lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V 加载CD-ROM驱动

    set temp=c:\temp 设置临时目录
  • RUP测试的主要评测方法

    2008-11-15 20:29:54

    2008-10-14 10:20:56 / 个人分类:测试技术

      测试的主要评测方法包括覆盖和质量。

      测试覆盖是对测试完全程度的评测,它建立在测试覆盖基础上,测试覆盖是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的。

      质量是对测试对象(系统或测试的应用程序)的可靠性、稳定性以及性能的评测。质量建立在对测试结果的评估和对测试过程中确定的变更请求(缺陷)的分析的基础上

      一、覆盖评测

      覆盖指标提供了“测试的完全程度如何?”这一问题的答案。最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖。简而言之,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测,如用例的核实(基于需求的)或所有代码行的执行(基于代码的)。

      系统的测试活动建立在至少一个测试覆盖策略基础上。覆盖策略陈述测试的一般目的,指导测试用例的设计。覆盖策略的陈述可以简单到只说明核实所有性能。

      如果需求已经完全分类,则基于需求的覆盖策略可能足以生成测试完全程度的可计量评测。例如,如果已经确定了所有性能测试需求,则可以引用测试结果来得到评测,如已经核实了 75% 的性能测试需求。

      如果应用基于代码的覆盖,则测试策略是根据测试已经执行的源代码的多少来表示的。这种测试覆盖策略类型对于安全至上的系统来说非常重要。

      两种评测都可以手工得到(公式如下所示)或通过测试自动化工具计算得到

      a)基于需求的测试覆盖

      基于需求的测试覆盖在测试生命周期中要评测多次,并在测试生命周期的里程碑处提供测试覆盖的标识(如已计划的、已实施的、已执行的和成功的测试覆盖)。

      测试覆盖通过以下公式计算:

      测试覆盖 = T(p,i,x,s) / RfT

      其中:

      T 是用测试过程或测试用例表示的测试 (Test) 数(已计划的、已实施的或成功的)。

      RfT 是测试需求 (Requirement for Test) 的总数。

      在制定测试计划活动中,将计算测试覆盖以决定已计划的测试覆盖,其计算方法如下:

      测试覆盖(已计划的) = Tp / RfT

      其中:

      Tp 是用测试过程或测试用例表示的已计划测试 (Test) 数。

      RfT 是测试需求 (Requirement for Test) 的总数。

      在实施测试活动中,由于测试过程正在实施中(按照测试脚本),在计算测试覆盖时使用以下公式:

      测试覆盖(已执行的) = Ti / RfT

      其中:

      Tx 是用测试过程或测试用例表示的已执行的测试 (Test) 数。

      RfT 是测试需求 (Requirement for Test) 的总数。

      在执行测试活动中,使用两个测试覆盖评测,一个确定通过执行测试获得的测试覆盖,另一个确定成功的测试覆盖(即执行时未出现失败的测试,如没有出现缺陷或意外结果的测试)。

      这些覆盖评测通过以下公式计算:

      测试覆盖(已执行的) = Tx / RfT

      其中:

      Tx 是用测试过程或测试用例表示的已执行的测试 (Test) 数。

      RfT 是测试需求 (Requirement for Test) 的总数。

      成功的测试覆盖(已执行的) = Ts / RfT

      其中:

      Ts 是用完全成功、没有缺陷的测试过程或测试用例表示的已执行测试 (Test) 数。

      RfT 是测试需求 (Requirement for Test) 的总数。

      如将以上比率转换为百分数,则以下基于需求的测试覆盖的陈述成立:

      x% 的测试用例(上述公式中的 T(p,i,x,s))已经覆盖,成功率为 y%

      这一关于测试覆盖的陈述是有意义的,可以将其与已定义的成功标准进行对比。如果不符合该标准,则此陈述将成为预测剩余测试工作量的基础

      b)基于代码的测试覆盖

      基于代码的测试覆盖评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上。控制流覆盖的目的是测试代码行、分支条件、代码中的路径或软件控制流的其他元素。数据流覆盖的目的是通过软件操作测试数据状态是否有效,例如,数据元素在使用之前是否已作定义。

      基于代码的测试覆盖通过以下公式计算:

      测试覆盖 = Ie / TIic

      其中:

      Ie 是用代码语句、代码分支、代码路径、数据状态判定点或数据元素名表示的已执行项目数。

      TIic (Total number of Items in the code) 是代码中的项目总数。

      如将该比率转换为百分数,则以下基于代码的测试覆盖的陈述成立:

      x% 的测试用例(上述公式中的 I)已经覆盖,成功率为 y%

      这一关于测试覆盖的陈述是有意义的,可以将其与已定义的成功标准进行对比。如果不符合该标准,则此陈述将成为预测剩余测试工作量的基础

      二、质量评测

      测试覆盖的评估提供对测试完全程度的评测,在测试过程中已发现缺陷的评估提供了最佳的软件质量指标。因为质量是软件与需求相符程度的指标,所以在这种环境中,缺陷被标识为一种更改请求,该更改请求中的测试对象与需求不符。

      缺陷评估可能建立在各种方法上,这些方法种类繁多,从简单的缺陷计数到严格的统计建模不一而足。

      严格的评估假定测试过程中缺陷达到的比率或发现的比率。常用模型假定该比率符合泊松分布。则有关缺陷率的实际数据可以适用于这一模型。生成的评估将评估当前软件的可靠性,并且预测继续测试并排除缺陷时可靠性如何增长。该评估被描述为软件可靠性增长建模,这是一个活跃的研究领域。由于该类型的评估缺乏工具支持,所以应该慎重平衡成本与其增加价值。

      缺陷分析就是分析缺陷在与缺陷关联关系的一个或多个参数值上的分布。缺陷分析提供了一个软件可靠性指标。

      对于缺陷分析,常用的主要缺陷参数有四个:

      状态:缺陷的当前状态(打开的、正在修复或关闭的等)。

      优先级:必须处理和解决缺陷的相对重要性。

      严重性:缺陷的相关影响。对最终用户、组织或第三方的影响等等。

      起源:导致缺陷的起源故障及其位置,或排除该缺陷需要修复的构件。

      可以将缺陷计数作为时间的函数来报告,即创建缺陷趋势图或报告;也可以将缺陷计数作为一个或多个缺陷参数的函数来报告,如作为缺陷密度报告中采用的严重性或状态参数的函数。这些分析类型分别为揭示软件可靠性的缺陷趋势或缺陷分布提供了判断依据。

      例如,预期缺陷发现率将随着测试进度和修复进度而最终减少。可以设定一个阈值,在缺陷发现率低于该阈值时才能部署软件。也可根据执行模型中的起源报告缺陷计数,以允许检测“较差的模块”、“热点”或需要再三修复的软件部分,从而指示一些更基本的设计缺陷。

      这种分析中包含的缺陷必须是已确认的缺陷。不是所有已报告的缺陷都报告实际的缺陷,这是因为某些缺陷可能是扩展请求,超出了项目的规模,或描述的是已报告的缺陷。然而,需要查看并分析一下,为什么许多报告的缺陷不是重复的缺陷就是未经确认的缺陷,这样做是有价值的

      三、缺陷报告

      Rational Unified Process 以三类形式的报告提供缺陷评估:

      缺陷分布(密度)报告允许将缺陷计数作为一个或多个缺陷参数的函数来显示。

      缺陷龄期报告是一种特殊类型的缺陷分布报告。 缺陷龄期报告显示缺陷处于特定状态下的时间长短,如“提出的”。在龄期类别中,缺陷还可以按其他属性分类,如“拥有者”。

      缺陷趋势报告按状态(新的、已打开的或关闭的)将缺陷计数作为时间的函数显示。趋势报告可以是累计的,也可以是非累计的。

      测试结果和进度报告显示对测试的应用程序进行若干次迭代和测试生命周期后的测试过程执行结果。

      许多此类报告对于评估软件质量具有很高的价值。一般测试标准中包括有关特定类别(如严重性级别)中打开的缺陷数的陈述。通过缺陷分布评估可以轻松地核对该标准。对测试需求进行过滤或分类,该评估可以侧重于不同的需求集。

      要有效生成此类报告,一般需要工具支持

      a)缺陷密度报告

      缺陷状态与优先级

      应该给定所有缺陷的优先级,通常可行的做法是设定四种优先级中的一种:

      立即解决

      高优先级

      正常排队

      低优先级

      一个成功测试的标准可以表示为缺陷在上述优先级上所应体现的分布方式。例如,对于一个成功的测试标准来说,可能不存在优先级为 1 的打开的缺陷,而且优先级为 2 的打开的缺陷要少于 5 个

      缺陷状态与严重性

      缺陷严重性报告显示每种严重性级别的缺陷个数,例如致命错误、未执行主要功能、次要错误等严重性级别。

      缺陷状态与在实施模型中的位置

      缺陷起源报告显示缺陷在实施模型元素上的分布情况

      b)缺陷龄期报告

      缺陷龄期分析提供了有关测试有效性和缺陷排除活动的良好反馈。例如,如果大部分龄期较长的、未解决的缺陷处于有待确认的状态,则可能表明没有充足的资源应用于再次测试工作

      c)缺陷趋势报告

      趋势报告确定缺陷率并提供了一个出色的测试状态视图。在测试生命周期中,缺陷趋势遵循着一种比较好预测的模式。在生命周期的初期,缺陷率增长很快。在达到顶峰后,就随时间以较慢的速率下降

      四、性能评测

      评估测试对象的性能行为时,可以使用多种评测,这些评测侧重于获取与行为相关的数据,如响应时间、计时配置文件、执行流、操作可靠性和限制。这些评测主要在评估测试活动中进行评估,但是也可以在执行测试活动中使用性能评测评估测试进度和状态。

      主要的性能评测包括:

      动态监测 - 在测试执行过程中,实时获取并显示正在执行的各测试脚本的状态。

      响应时间/吞吐量 - 测试对象针对特定主角和/或用例的响应时间或吞吐量的评测。

      百分位报告 - 数据已收集值的百分位评测/计算。

      比较报告 - 代表不同测试执行情况的两个(或多个)数据集之间的差异或趋势。

      追踪报告 -主角(测试脚本)和测试对象之间的消息/会话详细信息

      a)动态监测

      动态监测通常以柱状图或曲线图的形式提供实时显示/报告。该报告用于在测试执行过程中,通过显示当前的情况、状态以及测试脚本正在执行的进度来监测或评估性能测试执行情况

      b)响应时间/吞吐量报告

      响应时间/吞吐量报告评测并计算与时间和/或吞吐量(处理的事务数)相关的性能行为。这些报告通常用曲线图显示,响应时间(或事务数)在“y”轴上,而事件数在“x”轴上

      除了显示实际的性能行为外,它在计算并显示统计信息方面也很实用,如显示数据值的平均偏差和标准偏差

      c)百分位报告

      百分位报告通过显示已收集数据类型的全体百分位值,提供了另一种性能统计计算方法

      d)比较报告

      比较不同性能测试的结果,以评估测试执行过程之间所作的变更对性能行为的影响,这种做法是非常必要的。比较报告应该用于显示两个数据集(分别代表不同的测试执行)之间的差异或多个测试执行之间的趋势


  • 如何编写更好的测试用例(四)

    2008-11-15 20:08:29

    2008-11-07 12:48:21 / 个人分类:测试技术

    用例学习

      这是一个故事,即五个软件质量分析师如何学会好的测试用例达到一个可测量的区别。他们经验丰富,自成管理小组,对于测试用例看起来应该像什么,每一个人都有不同的想法。一个用例罗列成从几十个杂乱、冗长的指导,到一个根本没有指导的一个矩阵。测试者是对软件几乎没有信心的商业用户。他们渴望测试,但经过一个星期后,花费的更多的时间是在试图找出做什么,而不是在实际测试中,他们非常无奈。他们的经理最后告诉分析师,他们已投入了他们议定的大量的时间,再没有更多的时间给他们了。在该点上不到一半测试才被执行。就这些,许多结果还只是个问号。一个测试者甚至在测试中写下愤怒的言辞。分析师表现出的测试者只是抱怨者,而不是很聪明的。

      在这痛苦的周期中,分析师遇到新的测试经理。她看着测试用例,并开始了一个培训和辅导方案。她展示了好的测试用例的模样,给了他们一份核查表,并让小组在下一个软件模块中用它来写用例。该用例将在两个月后安排测试。她一个接一个接触了他们每个人并在如何改善方面给了他们具体的帮助。每一个编写者开始产出达到标准的用例。第一个星期的编写进展很慢,但在两个月期间的最后,他们都达到生产率的目标。在下一个测试周期,用例就较短,每一个都有明确的目的和准确的通过或失败的标准。尽管如此,分析者仍担心测试将又一次是棘手的。

      测试者开始预期另一个负面的经历,但很快改变了他们的态度。他们发现,他们可以很容易地完成每一个用例,无需拨打电话或来到编写者的小隔间。他们的信心增长,而且有些人说,他们已害怕这个软件的改动,但现在他们可以看到它明显好于他们所使用的。这个话传到了销售人员,使他已经迫切地希望了解该软件。他们的经理来了,问是否他们也可以测试。测试经理在该周期并不需要更多的测试者,但和他们签约了下一个周期。技术编写者问是否他们也可以拥有用例的复件。

      测试经理保持着一些指标的提高。当她最初到来时,分析师一天花费2到3个小时和测试者排查不好的用例。他们安排的测试时间是每个测试用20分钟,而事实上他们平均用时约45分钟。除了与测试者花费的时间外,在当前的周期中,一些分析师还花费一个小时或两个天时尝试修改用例,而不是进行他们安排的工作 – 为下一个模块写用例。

      在培训和标准确定后,下一个测试周期的指标看上去更好。没有分析师再一天花费超过一小时来帮助测试者。即使有更多的测试,因为简短的测试用例的标准,测试者可以在20分钟内完成测试,而测试往往提前一天完成。在项目结束时,分析师和测试者已确信会加快发表一个月。

    附录A

    测试用例核查表

     质量属性

     ● 精确的 - 只测试描述中所说的将测试的内容。

     ● 经济的 - 只有对于它的目标所需要的步骤

     ● 可重用的、自立的 - 不管是谁测试它都是相同的结果。

     ● 适合的 – 不仅对当前而且对今后的测试者

     ● 可追溯的 – 对应到一个需求

     ● 可自我清理的 - 返回测试环境到未使用状态

     结构和可测试性

     ● 有一个名称和编号

     ● 有一个明确的目标,其中包括什么需求将被测试

     ● 有一个测试方法的描述

     ● 指定设置信息 - 环境、数据、前提测试、安全访问

     ● 进行的活动和预期结果

     ● 陈述需要被保存的任何证据,如报告或抓屏

     ● 留下干净的测试环境

     ● 使用生动的用例语言

     ● 不超过15个步骤

     ● 矩阵不需要超过20分钟的时间来测试

     ● 自动脚本用目标、输入、预期结果来注释

     ● 如果可能的话,设置提供前提测试的替代品

     ● 与其他测试处于正确的商业场景顺序中

     配置管理

     ● 使用命名和编号协定

     ● 以指定的格式、文件类型保存

     ● 对应版本和受测软件相匹配

     ● 包括用例需要的测试对象,如资料库

     ● 存储为可读取形式

     ● 以受控访问的形式存储

     ● 存储在网络备份操作处

     ● 现场外存档

    附录B

    附录C

     矩阵模


  • 如何编写更好的测试用例(三)

    2008-11-15 20:06:08

    2008-11-07 12:47:11 / 个人分类:测试技术

    用克隆提高生产率

      克隆测试用例的意思是用一个测试用例塑造另一个测试用例。如果一个测试用例适合一个分步用例的需要,同时有很容易被取代的变量,那么该用例是一个很好的克隆候选者。例如,您可能有一个维护一个供应商数据库的测试。很多,但并非所有的步骤,也将适用于托运人数据库。当你通过需求或原型、策划知道该软件的功能以相同的方式工作,您可以克隆测试用例。用克隆方式编写它们并不意味着它们需要一起被测试。您可以象克隆测试用例一样克隆步骤。

      文字处理和测试创作软件支持克隆功能,如“Save As”、“Copy”和“Replace。”校对这些用例非常重要,以确保所有原有的提述在克隆中被取代。您还可以在储存的文字和宏上节省时间,但不要试图以牺牲精度为代价使一个尺寸适合所有情况。环顾你的项目以获得克隆的机会,如其他人的用例、用户手册或桌面帮助教程。它们可能正在寻求和你交换测试用例。如果您是管理一个编写组,保持编写者目前的测试资料库,使他们能输送和分享用例。

      矩阵也可以克隆,特别是如果组织安排一节是相同的。变量将在字段的名称和数值方面改变。再次,请务必校对新版本。

      用测试管理软件提高生产率

      软件设计成支持测试创作对编写测试用例是单纯的最大生产率的推进者。它在文字处理、数据库或电子表格软件方面具有这些优势:

      ● 使编写和概述更容易

      ● 帮助用例和步骤的克隆

      ● 易于添加、移动、删除用例和步骤

      ● 自动编号和重编号

      ● 易于遵循模板来打印测试

      测试创作通常包含在现有的测试管理软件中,也可以定制编写。测试管理软件通常包含更多的功能,而不仅仅是测试创作。当您作为它们的代理而购买时,它们提供了大量的价格优惠。如果您正选购测试管理软件,它应该具有上面所列出的一切可用优点,同时附加了额外的功能:

      ● 以相同的格式输出测试

      ● 多用户

      ● 跟踪测试编写进展、测试进展

      ● 跟踪测试结果,或转向数据库或缺陷跟踪器

      ● 连接需求和/或创建覆盖矩阵

      ● 建立由用例组成的测试集

      ● 允许灵活的安全性

    错误和挑战

      七个最常见的测试用例的错误

      在每一个编写者的工作中,测试用例缺陷将集中围绕在某些编写错误。如果您正在编写用例或管理编写者,不要等到找到这些错误集前所有用例都已做出。应该每隔一两天就审查用例,寻找使用例难以测试和维护的故障。你将发现的可能是,提高的机会集中在最常见的七个测试用例错误之一:

      1. 制作用例太长

      2. 不完整的、不正确、或不连贯的组织安排

      3. 遗漏某一步

      4. 命名的字段已改变或不再存在

      5. 不清楚测试者或系统是否做出某活动

      6. 不清楚通过或失败的结果是什么

      7. 清理失败

      为好的测试用例对应挑战

      即使您使用最好的技术和标准,面对每一个测试编写工作,你还必须克服同样的挑战。让我们看看对于测试编写面临的共同挑战,并看到它们如何才能通过响应被管理,挽回了更好的质量。典型的挑战通常是强加于项目一级,而且必须在测试管理一级响应。如果它们强加于测试管理一级的编写者,编写者应做出响应。

      挑战:需求变化

      响应:

      1. 最好的防范是被通知到。在编写用例前,在每一个状态上,找出需求变化最大的风险所在。战略上何种用例会和不会受变化的影响。首先写下那些不会的。

      2. 建立以后你会返回来并填写的变量或“决定”。

      3. 请务必使预算人知道修改已经写好的测试用例的成本。量化每个用例花费多少。

      4. 让项目管理设定优先事项,哪些用例应当编写或修订。让他们看到你不能做所有的用例,并请他们来决定他们在哪里有最大的风险。

      5. 发表未经修改的不完全正确的测试用例。让测试者标出什么已改变。安排更多的时间来测试每一个用例,加上维护测试时间。

      挑战:安排变化

      响应:

      1. 如果测试的日期提前,让管理方参与测试用例将如何受到影响的选择。在不断变化的需求的挑战中,让他们选择他们想要什么风险。

      2. 在工作人员必须作为生产力前,只有时间允许一至二周的训练,才能增加人员,同时只能是您有某人来指导和审查他们的工作。

      3. 改变编写用例的顺序,使您首先写那些将优先被测试的。尽量保持用例领先于测试者。

      4. 在只有一个目标和组织安排下,即需求正在被测试时,您可以减少测试用例。这不是象临时测试一样糟糕,但管理方应该知道结果并不如用例完成后那么可靠。安排更多的时间来测试这种测试用例,同时安排时间在测试后完成用例。

      5. 提议让编写者做测试,并在他们测试时编写。安排更多的时间来测试和测试后完成编写。

      挑战:人员更替

      响应:

      1. 新的人员需要了解目前测试项目的目标、时间安排和组织,如果可能的话,这些应该以书面形式表示。口头介绍会失于混乱。

      2. 新的人员应集中于了解软件的业务使用,然后集中于需求和原型。他们可能会写更少的用例,但用例将是正确的。

      3. 新的人员应参加有关标准的操作培训,用许多如何应用标准的实际例子。他们的工作首先应被仔细检查。

      4. 尽量安排新的人员在一个良好的技术领域,该领域适合他们将要编写的用例。
    测试用例资产

      保护测试用例资产

      保护测试用例价值的最重要的活动是维护它们,使它们可测试。它们应该在每一测试周期后被维护,因为测试者会象发现软件缺陷一样,发现用例的问题。当测试安排被建立时,时间应分配给测试分析员或编写者来修复用例,此时程序员在修复应用程序缺陷。如果它们没有被修复,测试者和编写者将浪费时间在下一周期,来搞清楚是测试用例还是软件的错误。

      防止测试用例因缺少的版本和储存失败而丢失或损坏,整个的目的是使这些用例可重复使用。用例的配置管理(CM)应当由组织或项目来处理,而不是测试管理。如果组织不具备这种水平的过程成熟度,测试经理或测试的编写者需要提供这方面支持。无论是项目或测试经理都应该用下面的配置管理标准,来保护宝贵的测试用例资产:

      ● 命名和编号约定

      ● 格式,文件类型

      ● 版本

      ● 用例需要的测试对象,如资料库

      ● 只读存储

      ● 存取控制

      ● 异地备份

      测试管理需要有一个所有测试用例的索引。如果CM不提供,就创建自己的索引。资料库可以对关键项目、软件、测试名称、编号、和需求检索。有一个全文检索功能将更好。

      利用测试用例

      测试用例作为开发资产已具有超越测试的生命。他们表示出用平白的英语编写软件如何工作的一个完整的图画。即使重点是破坏性的,他们也必须证明所有业务场景按需要工作。通常用例是写给测试者的,测试者是商业用户,所以用例使用真实的世界语言和条目。一套用例对于正在努力学习或出售软件的其他人具有巨大的价值:

      ● 商业用户

      ● 技术编写者

      ● 桌面帮助技术员

      ● 培训师

      ● 销售和市场人员

      ● 网站管理员

      所有这些人看到软件取得成功会获得利益,所以也是潜在的测试人员。依靠组织,在测试编写者和这些组之间良好的意愿和开放的沟通下可以大大加快出品和发表的时间。

      综述

      教授良好的编写技术和建立测试用例标准的过程本身就是一个资产。这从来不是静态的,而必须是动态的教授、运用、审查、测量和改进。本文简要涵盖测试用例质量的过程和标准是什么,如何将其应用到各种测试用例中,如何利用它们来改善可测试性和生产率,如何解决对于测试用例质量的共同面临的挑战,以及如何保护测试用例资产。

  • 如何编写更好的测试用例(二)

    2008-11-15 20:03:26

    2008-11-07 12:45:32 / 个人分类:测试技术

    选择一个测试类型

      对一种类型的测试用例的偏好超过另一个,多起因于机构的文化和观念,而不是什么最适合于软件和测试计划。“我们一直这样做”已和一些难改的谬论相结合:

      谬论之一。分步测试用例要花太长的时间来编写。我们负担不起。

      事实:他们可能会或不会需要较长的时间来编写,粒度小使他们健壮和易于维护。他们是唯一充分测试一些功能的方法。

      谬论之二。矩阵始终是最好的选择。选用它吧。

      事实:一个长期存在的问题是如何把一个矩阵和适当的组织安排信息放在一起。这一组织安排信息往往被忽略,或更糟糕的是,如果输入的不同的组织安排或分类不能强加成一个带有类似组的矩阵,他们根本就不能被测试。

      谬论之三。技术是最好的。如果您可以自动化测试用例,就去做它。

      事实:使用自动化测试的决定应基于许多因素。

      谬论之四。我们没有时间编写手工测试用例。让我们自动化测试用例吧。

      事实:自动化测试用例的创建需要比其他两种类型更长的时间。

      如果一个有支配权力的人不懂装懂的说出这些谬论,一个不成熟的组织(一个更多地依靠杰出人士而不是过程的组织)是最容易认为这些谬论是正确的。他们的质量之路将是一个漫长的道路。他们会继续误解测试用例,直到他们经受打乱的时间表或经费损失为止,显然他们经受的这些起因于不良的测试。

      为工作使用最佳的测试用例类型的另一个约束是在文字和数字表达之间的接近状况。如果你擅长于一个或另一个,你可能更喜欢你可以直观地去做的测试用例类型。分步用例倾向于更多的文字,而矩阵倾向于更多的数字。良好的培训应建立起对于使用所有类型的用例的了解和信心,对于每一处它都是最有成效的。然而,个人偏好是一个不可忽视的因素。如果你是一个经理,你需要通过教育和范例克服困难。

      往往最有成效的途径是使用所有三种类型的用例。前两个用于单元、集成和系统测试;而自动化脚本用于回归测试。

    提升测试用例

      提高测试用例的可测试性

      准确的说,可测试性的定义是指易于测试。易于测量执行测试需要多久,在测试过程中测试者是否需要获得说明。准确意味着,如果测试者遵循指导,那么通过或失败的结果将会是正确的。

      用语言提高可测试性

      测试步骤应该编写在生动的用例中。告诉测试者做什么。例如:

      ● 做这个。做那个。

      ● 浏览购物车页面。

      ● 对比车中物品和屏幕捕获的物品。

      ● 点击<OK>。

      应始终明确的是,是测试者做一些事,还是系统做它。如果一个测试者读到, “按钮被按下,”这意味着他或她应该按下按钮呢,还是它意味着已经按下后验证系统显示它?搞乱测试者最好的一种办法是混淆活动和结果。比如,活动总是在左侧,结果在右侧。测试者做什么总是一个活动。系统显示什么或者做什么始终是一个结果。

      如果我们知道一个对象的内外,养成一个简单的习惯,就是以不同的方式提及相同的事情。测试语言要一丝不苟地命名显屏、字段、服务器、Web网页、或其他测试对象。在一个开发团队,我们习惯于在某些对象甚至是原型以前,一般就提到它,如“电子邮件答复屏幕,”而它的标签实际将指:“订单确认。”或者我们可能用数字指一个显屏,无论测试者在哪儿看它,数字都不会出现。测试必须有精确的参考来指导测试者。

      如果您为了测试者注意以后将核实的输入,建立了结构化的字段,测试可能加速。例如,如果你正在测试一个审核日志,你事先不能知道测试者将完成一个审核活动的确切分钟。如果你告诉他们注意它,它可能被胡乱地写在测试中,纸片上,或加进一个临时文件。他们可能不会找麻烦来标明什么是什么,并可能不得不到处搜寻来找到它。最好是在测试中留下一个标记的空格,在这里,他们可以写下输入,示例:

      删除条目日期:________时间: _______

      条目编号:________

      测试者登录ID :________

    通过控制长度来提高可测试性

      一个测试用例应该多长?一个好的分步用例长度是10-15步,除非测试者不节省他们的工作。保持测试这么简短有几个好处:

      ● 简短的用例用更少的时间来测试每一个步骤

      ● 测试者不太可能受迷惑,犯错误,或需要帮助。

      ● 测试经理可以准确估计需要多少时间来测试

      ● 结果更容易追踪

      不要试图在10-15个步骤的标准上作弊,把很多活动填满一个步骤。

      一个步骤应该是一个明确的输入或测试任务。您总可以在相同的步骤中添加一个简单的完成标志,如单击<OK>或按<Enter>。同样,一个步骤可以包括一套逻辑相关的输入。您不必对每个步骤都有结果,如果系统不响应某一步的话就不需用。

      保持单个测试简短的目标并不是不符合用最少数量的测试来测试应用系统的传统的目标。传统目标标准的目的是要精巧,当合理的测试业务场景或用例(use case)和需求一样多时,会工作到10-15步。该标准的目的还在于避免重复,即在一些测试中测试相同的需求。你可能不想通过使每一个测试都很长,来创建最低数量的测试,因为对于测试或维护来说,这将是一个恶梦。看老的“最低数量的测试,”的更好的方法是,衡量是否是一个“最低数量的步骤。”那么通过将50个步骤放入一个中以创造较少的测试是感觉不到好处的。

      对于一个矩阵,一个好的长度是可以测试约20分钟。

      自动化脚本的长度不是一个测试执行问题,因为测试通常是几秒钟。相反,问题是内容、维护和缺陷跟踪的管理。每个脚本一个业务场景或用例是足够的。它可以根据需要循环多次来加载数据或执行变量组合。

    累积用例的优点和缺点

      累积用例是那些依赖于以前的用例来运行的用例 — 在你测试#6以前,你得先运行测试 1-5。您的目标是让测试尽可能的独立。这给了安排测试最大的灵活性,并减少了维护时间。可惜的是,它落后的一面是,该标准可能会不符合其他标准,如保持每个测试用例简短和不重复覆盖。你如何达到这一点呢?

      ● 问问自己,是否你真正需要从另一个测试输入数据?如果是这样,测试必须是具有累积性的。

      ● 只要有可能,提供一个以前的测试的替代品。这意味着它们可以使用在以前的测试中建立的数据,同时它们也可以使用其他数据。例如:“你需要两个处于90天拖欠状况的帐户,如为逾期帐户的测试用例所创建的账户。”

      ● 提及其他测试时要象共有的一样尽可能在精确性上保持一致。不要只用编号提及一些测试。测试重编号后。如果您使用一个编号,还包括标题或说明。这可避免维护时的恶梦。

      改善可用性或可测试性的另一个问题是测试用例的顺序,它们应该根据业务使用排序。什么是最终用户通常首先做得,不是他们首先不得不做的,象在累积用例中一样?如果测试者是一个商业用户,他们将有一个他们希望完成软件任务的心理模式。通过复制其模式来适应他们,增加了他们的测试生产率。

      用模板提高生产率

      测试用例模板是一个带有标签字段的表单。附加的附录B是一个分步测试用例的模板。这是开始提高测试用例的一个重要的方式。它加快开始编写过程,并提供一个好用例的各个内容。这里是使用模板的一些其他的好处:

      ● 防止空白页的恐慌

      ● 对混乱现象给于帮助

      ● 用标准创建

      ● 打印好看的测试

      ● 协助测试者找到信息

      ● 可以包括与测试过程相关的其他字段

  • 如何编写更好的测试用例(一)

    2008-11-15 19:56:09

    2008-11-07 12:43:59 / 个人分类:测试技术

    投资于测试用例

      为了改进测试用例什么是值得做的?什么风险会促使你投资于更好地测试用例?在他们覆盖软件需求时,还不是足够的好吗?对这些问题的答案是,粗劣的测试用例的确会将你暴露于相当大的风险之下。他们在理论上可能覆盖了需要,但很难用来执行测试,并会获得含糊不清的结果。好的测试会获得更可靠的结果,而且会在以下三个范畴降低成本:

      1.生产率 - 更短的时间撰写和维护用例

      2.可测试性 - 更短的时间来执行他们

      3.计划的可靠性 – 估算时有更好的可靠性

      本文介绍如何避免因为粗劣的测试案例必然带来的损失。将让我们看到罩盖下各种不同的测试用例,并展示在控制风险的质量中,在何处以及如何建立测试用例。对如何提高生产率、可用性、计划的可靠性和资产管理,将给出切实可行的建议。一旦你了解测试用例是什么和为什么的问题,您可以使用一个标准的核查表,像附录A一样的一个附件,来确定风险领域并改善您当前的和未来的测试用例。

      在准备测试软件的过程中,最繁杂的工作是编写测试用例。建立健壮的测试用例的动机是由可能性来激励的,测试用例将被重用于维护版本。超过所有软件开发工作的半数的工作是维护项目。你怎么才能编写良好的测试用例,它将提供经济的测试,首次测试后,在回归测试时将再次使用?让我们通过掀起测试用例的罩盖,看看里面是什么,来开始我们的答案吧。

      ● 看测试用例内部

      ● 测试用例的内容(element)

      ● 针对我们的目标,一个测试用例是一套基于系统需求的,带有预期结果的活动。用例包括这些内容:

      ● 测试的目标或将被测试的需求的描述

      ● 它将被如何测试的方法

      ● 测试的设置:接受测试的应用程序的版本、硬件、软件、操作系统、数据文件、安全访问、时间、逻辑的或物理的起止日期、先决条件(如其他测试),以及对于被测需求(一个或多个)的任何其他有关的设置信息

      ● 活动和预期的结果,或输入和输出

      ● 任何校样或附件(可选)

      这些同样的内容必需被用在每一级测试——单元、集成、系统、或验收测试的测试用例中。对于功能、性能和可用性测试,它们同样有效。“预期结果”的标准并不适用于一个探索性质的诊断测试或其他测试。实际上诊断测试在其用例中需要其他内容。然而,如果测试是测量性能,那性能应属于一个范围,这个范围就是一个预期结果。

      测试用例的另一种描述是,说明、目标和组织安排是用例或规格说明。完成它的步骤被称为脚本。而另一种观点认为目标或说明是一个场景(scenario)或功能用例(use case)。这些观点都符合本文提议的质量评估和改进。

    测试用例的质量

      有一种误解,以为编写质量是主观的,就像看一幅画,哪里美丽只在观看者的眼睛里。

      事实上,编写质量是客观的和可测量的。就像附录A一样,建立一个测试用例的构成内容(目标、方法、组织安排、输入和输出等)的客观核查表,这是很简单的。然后走查每个用例。内容是有或者没有?除了其构成,用例也必须符合这些质量标准:

      精确的。它们只测试它们描述中所说的它们将测试的内容。

      经济的。它们只有对于它们的目标所需要的步骤或信息。它们不给出软件导航。

      可重用的,自立的。一个测试用例是一个对照试验。每一次不管是谁测试它,它都应当得到相同的结果。如果只有作者可以测试它并获得结果,或如果不同的测试者测试,得到不同的结果,那该测试用例就需要在组织或活动上做更多的工作。

      适合的。一个测试用例必须适合测试者和环境。如果它在理论上是合理的,但需要所有的测试者都没有的技能,那它将会被束之高阁。即使你知道谁在测试第一次,你也需要考虑维护和回归时的情况。

      可追溯的。你必须知道此用例测试的是什么需求。它可能满足所有的其他标准,但如果其结果是,通过或失败都无关紧要,那为什么还要费心做它呢?

      可自我清理的。运行后自动收起。它返回测试环境到预测试状态。例如,它不会留下测试系统设置在错误的日期。自动脚本可调用其他脚本来做到这一点。不要把这一标准与破坏性混淆。测试应该是破坏性的,包括试图通过可控制和可重复的方式打破一个模拟生产环境。

      这些标准也是客观的和可测量的。它们也可以被添加到您的核查表。

      如果谁知道需求和受测应用程序,那他应该填写该核查表作为一个同行审查的一部分。

      遵循多少标准只有测试后才能知道,但它们都是可测量的。对于新的测试编写者,这是一种特别有用练习,看看他们在哪块始终没有达到某一要素,或不符合某一标准。

    测试用例的格式

      一个测试用例看起来像什么呢?它们似乎分为三个主要群组:分步、矩阵和自动化脚本。当然自动化脚本将作为一个在线文件来运行,毫无疑问,其他两个必须是基于纸张的。他们也可以是在线的。让我们来看看每一个的格式:

      分步。图1显示了这个基本的格式模样。这个格式的一个完整的视图,在一个带有其他测试内容的模板中,作为附录B来显示。

    步骤

    活动

    预期结果

    1

    输入新的名称和地址。按<OK> 。

    显示屏幕008新名称的详细信息。

    2

    用自然的数据填充所有空格。抓屏。按<OK> 。

    显示屏幕005维护。

    3

    点击<Inquiry>按钮。

    显示屏幕009查询的详细信息。

    4

    从抓屏上输入名字。按<OK> 。

    显示屏幕010记录详细信息。

    5

    比较记录细节和抓屏。

    所有详细信息完全匹配。

    图1 - 分步测试用例详细信息

      矩阵或表格。图2显示了这个格式的基本模样。这个格式的一个完整的视图,在一个带有其他测试内容的模板中,作为附录C来显示。

    日期

    1/96后受雇

    401K

    生命险

    付款数

    10/25/99

    Y

    1

    3

    $24.50

    1/4/98

    Y

    3

    1

    $34.00

    3/6/96

    N

    2

    5

    $48.00

    8/15/96

    Y

    2

    5

    $86.25

    8/15/96

    N

    2

    5

    $105.00

    图2 - 矩阵测试用例详细信息

      自动化脚本。图3显示了这种格式的模样。

    # Open the Fax Form

    menu_select_item ("File;Fax Order...");

    set_window("Fax Order");

    # Retrieve the Fax Order information and compare it to data from the main window edit_get_text

    ("Arrival:", text);

    if(main_data["arr_time"] != text)

    {

    failure_msg = arrival_fr_mismatch;

    result = FAIL;

    图3 - 自动化脚本测试用例详细信息

       使用测试类型

      每种类型用例的最佳用途

      ● 分步用例多用于:

      ● 分步

      ● 一次性测试用例,每一个都不同

      ● 从一屏到另一屏展开的业务场景

      ● 许多处理规则

      ● GUI 界面

      ● 在矩阵中难以表示的输入与输出

      分步用例不一定需要如图1所示的有一个按键水平的详述。活动步骤可以在一个更高的水平,如:打开“my account”页面,寻找一个日期范围内的事务,注意该范围:______   ,打印报告,转送报告,等等。
    矩阵。矩阵用例多用于:

      ● 填写表格有许多变化,同一字段,不同的值、输入文件

      ● 相同的输入,不同的平台、浏览器、配置

      ● 基于显屏的字符

      ● 用矩阵表示出来最好的输入与输出

      几乎任何测试都可以表示成一个矩阵,但要裁定的问题是,对于测试,是否矩阵是最好的方式。最重要的是,矩阵要辅之以测试的一个描述、组织安排,以及如何记录结果。如何测试矩阵,对于编写者可能是显而易见的,但没有更多的指导时,测试者可能会做错。

      矩阵的一个变化是输入列表。它可以被插入一个分步测试或作为一个带有关于测试的解释性内容的矩阵。

      自动化脚本。使用自动化测试软件的决定,更多的与进行测试的规划和组织相关,而与将要测试什么关系不大。工具改变时,一些技术问题必然会遇到,但大多数应用程序都可以找到适合的技术。项目管理必须明白,编写自动化用例比手工测试需要花费较长的时间,因为手工测试必然首先是写成静态的。当界面稳定时,测试可以被录制。真正的自动化测试的回放是在软件生命周期的维护阶段。此时,脚本可以被反复执行,甚至无人值守,极大节省了测试时间。

      管理部门必须配备人员,用工具语言,如C++或Visual Basic 等来编程。简单的脚本可以用大多数测试分析工具录制,但功能更强大的脚本,往往使用自定义函数和对象,必须由程序员编写。一个组可以一起安排,几个人做普通的录制/回放脚本,一个人编程。

      和其他类型的测试用例相比,该用例适用于录制和回放,或数据驱动脚本。除了录制/回放脚本,自动化工具也用于性能和负载测试。他们可能会使用手工分步用例或矩阵,详细说明自动化工具将如何被用来创建虚拟用户,给出事务脚本,监控性能,和其他活动。


  • 白盒/黑盒

    2008-11-13 19:33:40

    1. 黑盒测试
      黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
         黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试。“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
    2. 白盒测试
      白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
      “白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。

    3. 灰盒测试
         灰盒测试,确实是介于二者之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。
    灰盒测试结合了白盒测试盒黑盒测试的要素.它考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计。
       灰盒测试由方法和工具组成,这些方法和工具取材于应用程序的内部知识盒与之交互的环境,能够用于黑盒测试以增强测试效率、错误发现和错误分析的效率。
          灰盒测试涉及输入和输出,但使用关于代码和程序操作等通常在测试人员视野之外的信息设计测试。
382/2<12
Open Toolbar