文章目录
今天仍然拼命看书,因为明天就要考了。学期的成绩就全仗这两天挣,现在更感到考试无用与无聊。——季羡林



测试分类
①按测试方法
白盒测试、黑盒测试、灰盒测试
②按测试方式
静态测试、动态测试
③按测试过程
单元测试、集成测试、系统测试、验收测试
④按目的
功能测试、接口测试、用户界面测试、健壮性测试、性能测试(强度测试、压力测试、负载测试)安全性测试、可靠性测试、恢复测试、安装/卸载测试、兼容性测试、文档测试。
α测试和β测试
属于验收测试阶段。
α测试:开发者在开发环境下或模拟用户环境下进行测试,发现问题,提交修改。完成后测试软件称为β版。
β测试:用户在实际环境测试,提交测试报告。
负载测试和压力测试
负载测试指的是最常见的验证一般性能需求而进行的性能测试。因此负载测试主要是考察软 件系统在既定负载下的性能:
①负载测试是站在用户的角度去观察在一定条件下软件系统的性能表现。
②负载测试的预期结果是用户的性能需求得到满足。此指标一般体现为响应时间、交易容量、 并发容量、资源使用率
■压力测试是为了考察系统在极端条件下的表现,极端条件可以是超负荷的交易量和并发用 户数。注意:这个极端条件并不定是用户的性能需求,可能要远高于用户的性能需求。
■区别:压力测试和负载测试不同的是,压力测试的预期结果就是系统出现问题,而我们要 考察的是系 统处理问题的方式。
比如说,我们期待—个系统在面临压力的情况下能够保持稳定,处理速 度可以变慢,但不能系统溃。因此,压力测试是能让我们识别系统的弱点和在极限负载下程 序将如何运行。
如何测试B/S系统的容量?
即确定并发用户数,属于压力测试。
先使用ramp-up测试逐步增压,每几秒增加一些新的用户,得到最大范围;再使用flat测试一次性加压,在最大范围中一次性加载所有的用户,然后在预定时间内持续运行。
比如一次加500,到一个点之后达到峰值,得出范围,之后在已知范围内用flat一次性加载2000,发现可以则再一次性加载到3000,也可以接受则以此类推。
非功能测试包括哪些?
性能测试、压力测试、容量测试、安全性测试、可靠性测试、容错性测试等。
下列自动化测试工具中,用于功能测试的是(A)?
A. Selenium B. JMeter C. LoadRunner D. QA Load
其余三者是性能测试。
静态测试的方法有哪些?
符号测试、代码检查法、静态结构分析法。
例题:
某 C 语言版本规定,标识符以字母或下划线开头,后跟字母、数字或下划线 的任意组合,有效字符 16 个,标识符不能是保留字,标识符应先声明后使用, 同一声明语句中标识符必须有一个。若应用等价类测试方法,设计如下等价类表, 请填写完整。
答:
| 输入条件 | 有效等价类 | 无效等价类 |
|---|---|---|
| 标识符开头 | ⑴以字母开头 ⑵以下划线开头 | ⑶以非字母非下划线开头 |
| 标识符组成 | ⑷由字母、数字、下划线组成 | ⑸由非字母非数字非下划线组成 ⑹是保留字 |
| 标识符长度 | ⑺长度1-16 | ⑻长度大于16 ⑼长度小于1 |
| 标识符使用方式 | ⑽先声明后使用 | ⑾先使用后声明 |
| 标识符个数 | ⑿至少 1 个 | ⒀小于 1 个 |
| id | 输入 | 预期 | 覆盖 |
|---|---|---|---|
| 1 | int num;num=6; | 有效 | ⑴ ⑷ ⑺ ⑽ ⑿ |
| 2 | int _num; | 有效 | ⑵ |
| 3 | int 1num; | 无效 | ⑶ |
| 4 | int num@; | 无效 | ⑸ |
| 5 | int for; | 无效 | ⑹ |
| 6 | num=1;int num; | 无效 | ⑾ |
| 7 | int ; | 无效 | ⑼ ⒀ |
| 8 | int aaaaaaaaaaaaaaaaa; | 无效 | ⑻ |
只要一个点覆盖了后面就不用了再写这个点了;一个测试用例尽可能多的覆盖有效等价类;一个测试用例只覆盖一个无效等价类。
例题:
给定三角形问题的程序代码,
int a,b,c
input(a,b,c)
if (a<(b+c)) and (b<(a+c)) and (c<(a+b))
if (a==b) and (b= = c)
outpur (“等边三角形”)
else if (a= =b) or (b= =c) or (a= = c)
output (“等腰三角形”)
else output (“一般三角形”)
else
output (“不构成三角形”)
答:
(1)见下面白盒测试的路径覆盖。


(3)
| 方法 | M | N | S | C | R | NR |
|---|---|---|---|---|---|---|
| 一般值 | 13 | 3 | 4 | 0.75 | 3.25 | 4.3 |
S是本来输出的结果数(等边,等腰,一般,不构成)
N是测出来的(等边,等腰,一般)
也叫判定表,注意能简化(-)就需要简化。
例题:
某保险公司提供车险服务,申请者 21 岁以下需要额外收费; 21-26 岁女性适用 A 类保险;26 岁以下已婚男性或26 岁以上男性适用 B 类保险;21 岁以下女性或 26 岁以下单身男性适用 C 类保险;其他情况适用 A 类保险,请用决策表设计测试方案。
答:
条件取值表:
| 条件名 | 取值 | 符号 |
|---|---|---|
| 年龄 | 年龄21岁以下 | A1 |
| 年龄21-26 | A2 | |
| 年龄26以上 | A3 | |
| 性别 | 男 | Y |
| 女 | N | |
| 婚姻 | 已婚 | Y |
| 单身 | N |
决策表:
| 年龄 | A1 | A1 | A1 | A1 | A2 | A2 | A2 | A2 | A3 | A3 | A3 | A3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 性别 | N | N | Y | Y | N | N | Y | Y | N | N | Y | Y |
| 婚姻 | N | Y | N | Y | N | Y | N | Y | N | Y | N | Y |
| 额外收费 | √ | √ | √ | √ | ||||||||
| A类保险 | √ | √ | √ | √ | ||||||||
| B类保险 | √ | √ | √ | √ | ||||||||
| C类保险 | √ | √ | √ | √ |
合并后:
| 年龄 | A1 | A1 | A1 | A2 | A2 | A2 | A3 | A3 |
|---|---|---|---|---|---|---|---|---|
| 性别 | N | Y | Y | N | Y | Y | N | Y |
| 婚姻 | - | N | Y | - | N | Y | - | - |
| 额外收费 | √ | √ | √ | |||||
| A类保险 | √ | √ | ||||||
| B类保险 | √ | √ | √ | |||||
| C类保险 | √ | √ | √ |
正交表L9(34):9次试验9行、4个因素、3个水平
极差R=最大K-最小K
主次顺序:极差R从大到小排序
优水平:最小K
优组合:大于4.54考虑水平和因素的选择是否正确
(
插播反爬信息)博主CSDN地址:https://wzlodq.blog.csdn.net/
例题:
在某B/S应用系统测试中,研究系统的响应时间,采用正交试验方法设计测试用例,影响因素即水平主要包括:并发用户数(50,100,500)、网络带宽(1,10,100)MB、服务器CPU速度(2、2.6、3.0)GHz和内存大小(1、2、4)GB。采用正交表L9(34),在下表中,确定各试验的因素水平,使用极差分析法,确定各因素的主次顺序、优水平和优组合。
答:
| 试验号 | 并发用户数A | 网络带宽B | CPU速度C | 内存D | 响应时间(ms) |
|---|---|---|---|---|---|
| 1 | ①50 | ①1 | ①2 | ①1 | 5 |
| 2 | ①50 | ②10 | ②2.6 | ②2 | 6 |
| 3 | ①50 | ③100 | ③3.0 | ③4 | 4 |
| 4 | ②100 | ①1 | ②2.6 | ③4 | 6 |
| 5 | ②100 | ②10 | ③3.0 | ①1 | 5 |
| 6 | ②100 | ③100 | ①2 | ②2 | 3 |
| 7 | ③500 | ①1 | ③3.0 | ②2 | 8 |
| 8 | ③500 | ②10 | ①2 | ③4 | 6 |
| 9 | ③500 | ③100 | ②2.6 | ①1 | 5 |
| K1j | 15 | 19 | 14 | 15 | |
| K2j | 14 | 17 | 17 | 17 | |
| K3j | 19 | 12 | 17 | 16 | |
| K1j/3 | 5 | 6.33 | 4.67 | 5 | |
| K2j/3 | 4.67 | 5.67 | 5.67 | 5.67 | |
| K3j/3 | 6.33 | 4 | 5.67 | 5.33 | |
| 极差R | 1.66 | 2.33 | 1 | 0.67 | |
| 主次顺序 | BACD | ||||
| 优水平 | A2 | B3 | C1 | D1 | |
| 优组合 | A2 B3 C1 D1 |
如K11=第一列①所在指标和=5+6+4=15,K32=第二列③指标和=4+3+5=12。
如R1=最大-最小=K3j/3-K2j/3=6.33-4.67=1.66。
例题:
超短波跳频分组无线网络由超短波调频电台构成,采用分组的方式实现电台之间的信息传输,各电台之间可以互为中继,其测试软件界面如图。研究传输时间的影响因素,主要由电台个数、报文间隔、报文长度。采用正交表L9(34),方差法分析各因素影响。

答:
| 试验号 | A | B | C | 空列 | s |
|---|---|---|---|---|---|
| 1 | ① | ① | ① | ① | 9 |
| 2 | ① | ② | ② | ② | 7 |
| 3 | ① | ③ | ③ | ③ | 4 |
| 4 | ② | ① | ② | ③ | 23 |
| 5 | ② | ② | ③ | ① | 22 |
| 6 | ② | ③ | ① | ② | 10 |
| 7 | ③ | ① | ③ | ② | 34 |
| 8 | ③ | ② | ① | ③ | 28 |
| 9 | ③ | ③ | ② | ① | 14 |
| K1 | 20 | 66 | 47 | 45 | |
| K2 | 55 | 57 | 44 | 51 | T=151 |
| K3 | 76 | 28 | 60 | 55 | |
| K12 | 400 | 4356 | 2209 | 2025 | |
| K22 | 3025 | 3249 | 1936 | 2601 | |
| K32 | 5776 | 784 | 3600 | 3025 |
T=45+51+55=151
CT=T*T/9=2533.4
SSA=(400+3025+5776)/3-CT=533.6
SSB=(4356+3249+784)/3-CT=262.93
SSC=(2209+1936+3600)/3-CT=48.27
SS空列(误差)=(2025+2601+3025)/3-CT=16.9
SS误差Δ=SS误差+SSC=16.9+48.27=65.17(因为SSC比SSA和SSB小太多)
Va=SSA/2=266.8
Vb=SSB/2=131.47
Vc=SSC/2=24.135
V误差=SS误差/2=8.45
V误差Δ=SS误差Δ/4=16.29
FA=Va/V误差Δ=266.8/16.29=16.38
FB=Vb/V误差Δ=131.47/16.29=8.07
FC=Vc/V误差Δ=24.135/16.29=1.48
注:
F0.05(2,4)=6.94, F0.01(2,4)=18.00,
F0.05(2,3)=9.55, F0.01(2,3)=30.82,
F0.05(1,3)=10.15, F0.01(1,3)=34.12

例题:
为下列代码段,设计测试用例,满足语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。注意测试用例三要素。
if(x>0) and (y>10)
y=y/x
else if(x<-10) or (y<0)
y=-(x+y)
other statement
答:
语句覆盖
| id | 输入x/y | 预计输出x/y | 覆盖 |
|---|---|---|---|
| 1 | 1/11 | 1/11 | 1 2 |
| 2 | -11/0 | -11/11 | 3 4 |
判定覆盖
| id | 输入x/y | 预计输出x/y | 覆盖 |
|---|---|---|---|
| 1 | 1/11 | 1/11 | 1 2 |
| 2 | -11/0 | -11/11 | 3 4 |
条件覆盖
| id | 输入x/y | 预计输出x/y | 覆盖 |
|---|---|---|---|
| 1 | -15/-5 | -15/3 | F1 F2 T3 T4 |
| 2 | 1/11 | 1/-12 | T1 T2 F3 F4 |
判定条件覆盖
| id | 输入x/y | 预计输出x/y | 覆盖 |
|---|---|---|---|
| 1 | -15/-5 | -15/3 | F1 F2 T3 T4 else if |
| 2 | 1/11 | 1/-12 | T1 T2 F3 F4 if |
条件组合覆盖
| id | 输入x/y | 预计输出x/y | 覆盖 |
|---|---|---|---|
| 1 | -15/-5 | -15/3 | F1 F2 T3 T4 |
| 2 | 1/11 | 1/-12 | T1 T2 F3 F4 |
| 3 | -11/11 | -11/0 | F1 T2 T3 F4 |
| 4 | 11/-1 | 12/-11 | T1 F2 F3 T4 |
路径覆盖
对于不可测的路径直接写不可测即可。
| id | 输入x/y | 预计输出x/y | 覆盖 |
|---|---|---|---|
| 1 | 1/11 | 1/12 | 1-2-5 |
| 2 | -15/-5 | -15/3 | 1-3-4-5 |
| 3 | -1/9 | -11/0 | 1-3-5 |
答:
MTTF
MTTF(meantime to failure)平均故障失效时间,对于不可修复系统,失效时间即产品寿命,
M
T
T
F
=
∫
0
x
e
−
λ
t
d
t
=
1
λ
MTTF=\int_{0}^{x}e^{-\lambda t}dt=\frac{1}{\lambda}
MTTF=∫0xe−λtdt=λ1
例题:
设有5个不可修复产品进行寿命试验,它们发生失效的时间分别是1000h、1500h、2000h、2200h、2300h,问该产品的MTTF的观测值?若已知该产品服从指数分布,则其故障率是多少?在平均寿命内的可靠度是多少?
答:
MTTF=1800h;
λ
\lambda
λ(t)=0.00056h;R(t)=e-1
MTBF
MTBF(meantime between failure)平均故障间隔时间。和MTTF一样,不过针对的是可修复系统。
例题:
设有一个电子产品累计共工作10万小时,共发生故障50次,问
该产品的MTBF的观测值?如果该批产晶服从指数分布,间其故障率
是多少? MTBF内的可靠度是多少?
答:
MTBF=2000h;
λ
\lambda
λ(t)=0.0005/h;R(t)=e-1
串联模型
R可靠度产品各单元可靠度的积
λ
\lambda
λ故障率是产品各单元故障率的和
并联模型
R
s
(
t
)
=
1
−
∏
i
=
1
n
[
1
−
R
i
(
t
)
]
R_s(t)=1-\prod_{i=1}^n[1-R_i(t)]
Rs(t)=1−∏i=1n[1−Ri(t)]

基于缺陷分析的产品质量评估
例题:
假设有200个功能点,在开发种发现了15个错误,提交后又发现了6个错误,应用基于缺陷清除率的估算方法,计算软件质量(每功能点的缺陷数),缺陷注入率,整体缺陷清除率。
答:
F=200,D1=15,D2=6,D=21
质量=6/200
缺陷注入率=21/200
整体缺陷清除率=15/21

例题:
已知产品故障服从指数分布如图: 则产品在2000h时的可靠度()?

A. e-1 B. e-10 C. e-2 D. e-20
答:
B(e-0.005*2000=e-10)
最后致谢ZDZ大佬
原创不易,请勿转载(
本不富裕的访问量雪上加霜)
博主首页:https://wzlodq.blog.csdn.net/
来都来了,不评论两句吗👀
如果文章对你有帮助,记得一键三连❤
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含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
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/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element