文章目录
1.数据驱动测试,基于规格说明的测试。
2.从用户观点和需求出发进行测试。
3.不考虑程序内部逻辑结构和内部特性。
1.检查是否有不确定或者遗漏的功能。
2.界面是否有错误。
3.在接口上,输入能否正确的接受,能否输出正确的结果。
4.是否有数据结构错误。
5.性能上是否满足要求。
6.初始化或终止性错误。
7.数据库的访进访出是否正常。
1.不用了解程序内部的代码以及实现。
2.与软件的内部实现无关。
3.从用户角度出发,很容易知道用户会用到哪些功能和问题。
4.基于软件开发文档。
1.代码覆盖率低。
2.自动化测试复用性低。
1.在任何情况下都必须采用边界值分析法,这种方法设计出来的测试用例对发现程序的错误非常有用的。
2.必要时采用等价类划分法补充测试用例。
3.对照程序逻辑,检查已经设计的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,则应当补充更多的测试用例。
4.如果程序功能说明中含有输入条件的组合情况,则应该一开始就选择因果图。
5.对于业务流程清晰的系统,可以利用场景法贯穿整个测试案例过程,在案例中综合试验各种测试方法。
输入三个整数 a 、 b 、 c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算 …
① 输入条件的要求:
(1)整数、(2)3个数、(3)非零、(4)正数、(5)两边之和大于第三边、(6)等腰、(7)等边。
② 假设1、2、3、4都满足
5不满足 非三角形
5满足,三边不相等 一般三角形
5满足,两边相等,等腰三角形
5满足,三边相等,等边三角形

是对于输入或输出的边界值进行测试。
注册功能的手机号注册应该是11位数字。
使用边界值设计测试用例
输入10位数字
输入11位数字
输入12位数字

表示输入条件和输出动作之间的因果关系
描述多种输入条件组合
与判定表结合使用,最终生成的是判断表

输入条件的约束
输出条件的约束

1.分析软件规格说明描述中, 明确哪些是原因(即输入条件或输入条件的等价类)和哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
2.分析软件规格说明描述中的语义,找出原因与结果之间,,原因与原因之间对应的关系,根据这些关系,画出因果图。
3.由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。
4.把因果图转换为判定表。
5.把判定表的每一列拿出来作为测试依据,完成测试用例设计。
第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
① 分析原因和结果
原因:
1 第一列字符是A
2 第一列字符是B
3 第二列字符是一数字。
结果:
21 修改文件
22 给出信息L
23 给出信息M
② 画出因果图

③ 根据因果图建立判定表

1.确定规则的个数。假如有n个条件,每个条件有两个取值(0,1),故2的n次方种规则。
2.列出所有的条件桩和动作桩。
3.填入条件项的取值。
4.填入动作项的取值,得到初始判定表。
5.简化,合并相似规则(相同动作)。
例子:打印机是否能打印出来正确的内容,有多个因素影响,包括驱动程序、纸张、墨粉等。(为了简化问题,不考虑中途断电、卡纸等因素的影响)
① 列出条件桩和动作桩
条件桩:
驱动程序是否正确
是否有纸张
是否有墨粉
动作桩:
正确打印内容
提示驱动程序不对
提示没有纸张
提示没有墨粉
② 生成判定表

③ 优化判定表
如果动作结果一样,对于某些因素取“1”或“0”没有影响可以合并。

场景法的应用是基于对软件业务(需求)的深入理解(业务层面),基于等价类划分(技术层面)。
测试软件的主要业务流程,主要功能的正确性和主要的异常处理能力。
基本流(正确流)
模拟用户正确的操作流程。
目的:验证软件的业务流程和主要功能。
备选流(错误流)
模拟用户错误的操作流程
目的:验证软件的错误处理能力。
1、根据说明,描述出程序的基本流及各项备选流。
2、根据基本流和各备选流生成不同的场景 。
3、对每一个场景生成相应的测试用例。
使用场景法分析程序:ATM取款
1、根据需求,找到基本流和备选流(找出正确的操作流程和可能出错的环节)
(1)基本流—正确取款
①插入银行卡:客户将银行卡插入ATM机的读卡器
②验证银行卡:ATM机从银行卡的词条中读取账号代码,并检查它是否属于可以接收的银行卡
③输入密码:ATM机要求输入密码
④验证密码:验证该密码是否正确
⑤进入ATM机主界面:ATM显示在本机中可用的各种选项
⑥取款并选择金额:客户选择“取款”,并选择取款金额
⑦ATM机验证:ATM机进行验证账户余额是否满足以及总取款金额是否满足要求,验证ATM机内现金是否够用
⑧更新账户余额、出钞:验证成功,更新账户余额,输出现金,提示用户收取现金
⑨返回主界面
(2)备选流—出错环节
①银行卡错误
②密码错误
③密码3次错误
④卡内余额不足
⑤超出当日可取
⑥ATM余额不足
2、根据基本流和备选流列出场景


3、根据场景编写用例
预设条件:
一张无效银行卡
一张银行卡:账户12345678901234密码123456
账户余额4000 当日限额20000
ATM机余额10000

账户余额40000 当日限额20000
ATM机余额50000

账户余额40000当日限额20000
ATM机余额10000

是黑盒、白盒混合用例的设计方法
状态迁移图
逻辑功能模型
1、明确状态节点。 分析被测对象的测试特性及需求规格说明书,明确被测对象的状态节点数量及相互迁移关系。
2、绘制状态迁移图。 利用圆圈表示状态节点,有向箭头表示状态间的迁移关系,根据需要在箭头旁边标识迁移条件。可以利用绘图软件绘制状态迁移图。
3、绘制状态迁移树。 根据状态迁移图,按照广度优先和深度优先搜索绘制状态迁移树。首先确定起始节点和终止节点,在绘制时,当路径上遇到终止节点时,不再扩展,遇到已经出现的节点也停止扩展。
4、抽取测试路径设计用例。 根据绘制好的状态迁移树,提取测试路径,从左到右,横向抽取,每条路径构成一条测试规则,然后再利用等价类和边界值等测试用例设计方法设计具体的测试用例。
实例:一个编辑文本的软件中有可以改变字体颜色的功能,其中可选的颜色共有黑、红、蓝三种颜色。
1、明确状态节点
该功能有三种状态:黑、红、蓝
2、绘制状态迁移图

3、绘制状态迁移树
假设起始状态是红色

4、抽取测试路径设计用例
导出规则

编写测试用例

基于以往的经验和直觉,参照以往软件系统出现的错误,推测程序中所有可能存在的各种缺陷和错误。
通过正交试验理论来指导测试用例的选取
1.提取功能说明:构造因子–状态表。
2.加权筛选,生成因素分析表。对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。
3.利用正交表构造测试数据集。利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。
例题:PPT打印需求
功能描述如下:
打印范围:全部、当前幻灯片、给定范围
打印内容:幻灯片、讲义、备注页、大纲视图
打印颜色/灰度:颜色、灰度、黑白
打印效果:幻灯片加框和幻灯片不加框两种方式
1.选择正交表
4因数4水平


2.生成表

整理生成表



行数(Runs):正交表中的行的个数,即试验的次数,也是通过正交实验法设计的测试用例的个数。
因素数(Factors):正交表中列的个数,即要测试的功能点。
水平数(Levels):任何单个因素能够取得的值的最大个数,即要测试功能点的输入值。
可分为:单一水平正交表 和 混合水平正交表。
假如我们确定有3因数2水平,计算n=3*(2-1)+1=4,应该表示为 L4(2 * * 3),那么我们看看有木有和这个正好相等的正交表,如果有,那么把变量值复制进去这个表中,如果没有,按照如下方法选取:
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。