为了规范软件测试的内容、方法和过程,在对软件进行测试之前,必须创建测试计划。
一份良好的测试计划,其主要内容包括以下几个方面:
(1)测试目标:(2)测试需求和范围:(3)测试风险: (4)项目估算:(5)测试策略:(6)测试阶段划分: (7)项目资源:(8)日程: (9)跟踪和控制机制:
测试需求分析需要做两方面的事情,一是详细了解并深挖需求,二是进行测试范围分析,确定测试范围。
测试范围分析 业务清单

测试建模是将测试思路或测试内容形成条理清晰、系统全面的模型的过程。
一般地,可以针对系统中复杂的业务逻辑和功能进行建模,通过业务建模的方式来梳理这些复杂的业务逻辑和功能。

复杂的功能与业务在完成业务建模后,可以通过覆盖基本业务路径进行测试用例的编写。
采用路径覆盖法设计测试用例,可以降低测试用例设计的难度,只要搞清了各种业务流程,就可以设计出高质量的测试用例来,而不需要测试人员有太多的测试方面的经验。

代码提交测试之后,测试工程师就可以在测试环境中开始测试,这时往往先会执行冒烟测试。
冒烟测试:在一个编译版本发布后,先运行其最基本的功能,例如启动、登录、退出等。如果这些简单的功能运行都错误的话,测试人员没有必要进行下一步的深入测试,直接把编译版本退回给开发人员进行修改。
回归测试:测试执行过程中,回归测试往往要重复进行多次,在不断修复缺陷的过程中,测试工程师经常需要对主要流程及功能进行再次测试。为了提高测试人员的工作效率,可以将回归测试进行自动化处理,这也是自动化测试应用很重要的一个方面。
1. 缺陷分析
1)缺陷密度 缺陷密度是指缺陷在软件规模(组件、模块等)上的分布,如每千行代码或每个功能点的缺陷数。一般来说,发现更多缺陷的模块,隐藏的缺陷也更多,在修正缺陷时也会引入较多的错误,结果产品的质量更差。所以说,缺陷密度越低意味着产品质量越高。
2)缺陷清除率
首先引入几个变量,F为描述软件规模用的功能点;D1为在软件开发过程中发现的所有缺陷数;D2为软件发布后发现的缺陷数;D为发现的总缺陷数。因此,D=D1+D2。
对于一个应用软件项目,则有如下计算方程式(从不同的角度估算软件的质量):
质量 = D2/F
缺陷注入率 = D/F
整体缺陷清除率 = D1/D
假如有100个功能点,即F=100, 而在开发过程中发现了20个缺陷,发布后又发现了3个缺陷,则D1=20, D2 =3, D=D1+D2=23
质量(每个功能点的缺陷数)=D2/F=3/100=0.03(3%)
缺陷注入率=D/F=23/100=0.23(23%)
整体缺陷清除率=D1/D=20/23=0.869(86.96%)
整体缺陷清除率越高,软件产品的质量越高。缺陷清除率越低,质量也越低。
2. 编写测试报告
测试报告基于测试中采集的数据以及对最终测试结果的分析,形成一份包含测试过程和测试结果的文档。测试报告是测试阶段最后的文档产出物,一份详细的测试报告要包含足够丰富的缺陷分析信息,还要包括对产品质量和测试过程的评价。

很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的: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?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/