Loading... # 第一章:软件测试的概述 ## 一、软件危机 > 什么是软件危机? 软件危机(Softwore crisis):是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 > 软件危机的原因 > 一方面是与软件本身的特点有关,另一方面是与软件开发和维护的方法不正确有关。从宏观上看,软件危机的实质是软件产品的供应赶不上需求的增长;从微观上简单地说,软件危机就是开发的软件有错误,软件质量达不到要求,软件项目无法按时完成,软件项目的花费超出预算。 > **软件危机的表现** 1. 软件开发**费用和进度**失控 2. 软件系统实现的**功能与实际需求不符** 3. 软件**可靠性差** 4. 软件**难以维护** 5. 软件通常**没有适当的文档资料** 6. **软件成本**在**计算机系统总成本**中所占比例**居高不下,且逐年增长** 7. 软件**生产率提高的速度**,远远跟不上**计算机运用迅速普及深入**的趋势 > 软件危机的解决方法 > 1968年秋,北大西洋公约组织的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论摆脱“软件危机”的对策。在会议上第一次提出了“软件工程”(Sofware Engineering)这个概念。软件工程正是从技术和管理两方面研究如何更好地开发和维护计算机软件的一门学科。 ## 二、软件生存周期 计划(Planning)、需求分析(Requirement Analysis),设计(Design)、程序编写(Coding)、测试(Testing)、运行和维护(Run and Maintenance)。  ## 三、软件测试投入占比 * 软件测试占**工作量**的 `40%` * 软件测试占**资金投入**的 `67%` ## 四、软件测试定义 > 为什么需要软件测试? 软件测试可以检验是否满足需求,帮助我们发现程序中的错误。 即: (1)软件是否满足规定的需求; (2)软件是否有差别。如果有差别,说明设计或实现过程中存在故障,自然不满足规定的需求。 另一种说法来自G.J.Myers,他指出:测试的目的是“寻找错误”。 (1)测试是为了证明程序有错,而不是证明程序无错; (2)一个好的测试用例在于它能发现至今未发现的错误; (3)一个成功的测试是发现了至今未发现的错误的测试。 > 软件测试的目的 > 就是为了发现尽可能多的软件缺陷,并期望通过改错来清除缺陷。 ### 软件测试定义 * **正向定义**: * **反向定义**: * **IEEE定义**: * **《系统的软件测试》定义:**测试是为了度量和模拟被测软件的质量,对测试软件进行工程设计,实施和维护的整个生命周期过程。 ## 五、软件测试贯穿软件整个开发过程 ## 六、软件缺陷、错误、故障、失效 > 如何理解? * 软件中缺陷永远存在的,英文称为defect,有些缺陷可能在使用中没有表现出来,不影响软件正常使用,程序带有后门、木马等。 * 不满足需求时,就产生了错误,英文error,bug,例如计算错误、流程的问题、功能性能问题。 * 软件不能正常工作、系统不能运行,没法完成相应的业务工作,就是故障fault。 * 需要修复软件,当不能修复不再使用,软件就是失效failure. <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-507a737bc7fb38ef2c0001696f90ec7e79" aria-expanded="true"><div class="accordion-toggle"><span>缺陷defect:</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-507a737bc7fb38ef2c0001696f90ec7e79" class="collapse collapse-content"><p></p>从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。 它的判定为: (1)软件未达到软件规格说明书中规定的功能; (2)软件超出软件现格说明书中指明的范围; (3)软件未达到软件规格说明书中指出的应达到的目标; (4)软件运行出现错误; (5)软件测试人员认为软件难于理解,不易使用,运行速度慢,或者最终用户认为软件使用效果不好。 除了第四点之外,其他基本不影响软件的正常使用。缺陷存在于各个阶段,比如计划不足,需求分析偏差,设计时候架构搭载不够完善,编码开发过程中缺乏沟通,测试时候出现一些问题,与用户需求不符,需求复杂度越来越高,不易维护等等。它是实时变化的,涉及到了时、人、物、财、技等等方面,所以缺陷也是实时存在。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-91f7fbf6760117d856fbb8575641c03c70" aria-expanded="true"><div class="accordion-toggle"><span>错误error,bug:不满足需求时</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-91f7fbf6760117d856fbb8575641c03c70" class="collapse collapse-content"><p></p>错误一般出现于编码开发阶段,一旦错误产生,该相关功能则无法运行,需要修复,完善才能。一般都是局部的小错误,不影响整体使用。 比如当前点击应用未开发,底层代码没有编写返回错误提示,传值不符合规范导致重复判断,或者缺乏非空处理导致空指针等技术问题,也可能是请求响应后的结果不是用户预期,出现偏差等情况。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-fd00ea81891acb76f986eebcc10c27db91" aria-expanded="true"><div class="accordion-toggle"><span>故障fault:软件不能正常工作、系统不能运行,没法完成相应的业务工作</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-fd00ea81891acb76f986eebcc10c27db91" class="collapse collapse-content"><p></p>一般指整个软件的运行出大问题,比如服务器瘫痪,软件被下令整改,被大量恶意请求导致无法响应等等。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-97036c7e78283bf2f949fa9ca896fd5654" aria-expanded="true"><div class="accordion-toggle"><span>失效failure:需要修复软件,当不能修复不再使用</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-97036c7e78283bf2f949fa9ca896fd5654" class="collapse collapse-content"><p></p>当软件的修复大于重做,或者不符合收益/一直亏损时,往往会终止软件防止继续亏损财务。 当软件的技术落后/出现重大错误,难以在继续维持运行之后,不是大换血就是停止当前软件,重做,这也会导致当前软件失效。 归根结底就是不符合公司的收益就会使之失效。<p></p></div></div></div> ## 七、软件缺陷的状态 **打开状态**——**解决(修复)状态**—(回归测试)—**关闭状态** **软件缺陷生命周期:** (1)发现——打开。测试人员找到软件缺陷并将软件缺陷提交给开发人员。 (2)打开——修复。开发人员再现、修复缺陷,然后提交测试人员去验证。 (3)修复——关闭。 测试人员验证修复过的软件关闭已不存在的缺陷。 **软件测试是最有效的排除和防止软件缺陷和故障的手段** ## 八、软件缺陷造成严重后果的案例 1. “千年虫”问题 2. 中国银联系统“瘫痪” 3. 美国洛杉矶国际机场系统故障 4. 北京奥运会门票系统故障 5. 安徽省高考文科综合科目统计错误 6. 铁路购票系统12306“崩溃” 7. WannaCry勒索病毒全球大爆发  ## 九、软件质量 软件质量包括**内部质量**、**外部质量**和**使用质量**三部分,ISO/IEC 9126模型共定义了6个质量特性,即功能性、可靠性、可用性、效率、可移植性、可维护性。 软件质量是软件一些特性的组合,它仅依赖软件本身。 ### 0.质量模型    ### 1.内部质量: (1)可维护性(Manageability/ maintainability ) (2)灵活性(Flexibility) (3)可移植性(Portability) (4)可读性(Readability) (5)可测试性(Testability) (6)可理解性(Comprehensibility) ### 2.外部质量: (1)正确性(Correctness) (2)可用性(Usability) (3)效率(Efficiency) (4)可靠性(Reliability) (5)完整性(Integrity)防止非法或不适当地访问的能力 (6)适用性(Applicability) (7)精确性(Accuracy) (8)坚固性(Sturdiness)系统在无效输入或压力环境中能继续执行其功能的能力。 ### 3.使用质量: 有效性、生产率、安全性、满意程度等质量特征 ## 十、软件测试原则: **第一章:** (1)所有的测试都应追溯到用户需求; (2)应尽早地和不断地进行软件测试; (3)在有限的时间和资源下进行完全测试并找出软件所有的错误和缺陷是不可能的,软件测试不能无限进行下去,应适时终止; (4)测试只能证明软件存在错误,而不能证明软件没有错误; (5)充分关注测试中的集群现象; (6)程序员应避免检查自己的程序; (7)尽量避免测试的随意性。 **第二章:** (1)尽早测试 (2)全面测试 (3)全过程测试 (4)独立的、迭代的测试 (5)Pareto原则 (6)对测试出的错误结果一定要有一个确认的过程 (7)制订严格的测试计划 (8)完全测试是不可能的,测试需要终止 (9)注意回归测试的关联性 (10)妥善保存一切测试过程文档 ## 十一、软件测试过程模型 ### 1.V模型  ### 2.W模型  ### 3.优缺点  ## 十二、测试工程师职业素质 1. 技术能力 2. 具体怀疑和破坏精神 3. 沟通能力 4. 要有严谨、敢于承担责任、稳重的做事风格 5. 善于自我总结,自我督促 6. 团队合作 ## 十三、V&V:验证与确认 --- # 第二章:软件测试分类及流程 ## 一、软件测试分类 * **按方法:**白盒测试、黑盒测试、灰盒测试 * **按方式:**静态测试、动态测试 * **按过程:**单元测试、集成测试、系统测试、验收测试、α测试、β测试 * **α测试:**开发者在开发环境下或模拟用户环境下进行的受控测试。测试人员包括:**设计人员**、市场人员、测试人员、SQA等。完成后的软件为β版。 * **β测试:**用户在实际使用环境下进行测试,提交测试报告。测试人员包括:**用户**、市场人员、测试人员、SQA等。对β版进行测试。 ## 二、软件测试基本流程:(重点在图) 软件测试工作一般要通过 **需求分析**、 **制订测试计划**(背景、依据、范围、风险、资源、策略、时间表、日期作者等)、 **设计测试方案**(保证测试用例完全覆盖测试需求)、 **测试准备和测试环境的建立**、 **执行测试**(单元测试→集成测试→系统测试→验收测试,其中每个阶段还有**回归测试**等。)、 记录测试(缺陷记录总的说来包括两方面:由谁提交和缺陷描述,内容包括:序号,标题,预置条件,操作步骤,预期结果,实际结果,注释,严重程度,概率,版本,测试者,测试日期等。)、 缺陷管理(缺陷管理工具:TestDirector、Bugfree等)、 **评估测试**(缺陷评估(软件可靠性增长建模):用测试过程中缺陷达到的比率或发现的比率表示,评估当前软件的可靠性,并且预测当继续测试或排除缺陷时可靠性如何变化、覆盖评测:测试完全程度(代码覆盖、控制流覆盖)的评测和质量评测:可靠性、稳定性以及性能的评测)、 **总结测试**、 **维护测试** 等几个阶段来完成。  ## 三、测试用例: **测试用例三要素:**用例标号、输入说明、输出说明 每个具体测试用例或将包括下列详细信息:用例编号、用例名称、测试项、测试环境要求、特殊要求、测试技术、输入说明、操作步骤、期望结果(含判断标准)、输出说明、用例之间的关联、用例设计人员、测试人员、测试日期、用例的优先级、注释等。以上内容涵盖了测试用例的基本元素:测试索引、测试环境、测试输入、测试操作、预期结果、评价标准。 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-db9a650e788cd7523e1b7d4b2a2f0be187" aria-expanded="true"><div class="accordion-toggle"><span>测试用例的分类:</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-db9a650e788cd7523e1b7d4b2a2f0be187" class="collapse collapse-content"><p></p>(1)功能测试用例 包含功能测试、健壮性测试和可靠性测试; (2)性能测试用例 包含性能测试、压力测试和强度测试; (3)集成测试用例 包含接口测试、健壮性测试和可靠性测试; (4)安全性测试用例; (5)用户界面测试用例; (6)安装/反安装测试用例。<p></p></div></div></div>   --- # 第三章:黑盒测试 ## 黑盒测试定义 **黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试,黑盒测试主要是根据功能需求来测试程序是否按照预期工作。是以用户的角度,从输入数据与输出数据的对应关系出发进行测试。** 黑盒测试是穷举输入测试,常用的黑盒测试方法有等价类划分法、边界值法、因果图法、决策表法、正交测试法、错误推测法和场景法等。 ## 一、等价类划分法设计用例 > 某C语言规定:标识符由字母、下划线开头,后跟字母、数字、下划线组成,最多16个字符,不能是保留字,标识符应先声明后使用,同一声明语句至少声明一个标识符。 > 请用等价类方法设计测试用例。  ## 二、边界值法设计用例 给定三角形问题的程序代码, ```c 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)画出DD-路径图,计算复杂度V(G); 把else当成一条语句,复杂度(边数-点数+2)为11-9+2=4  > (2)使用边界值分析测试,设计测试用例,三角形边长为100-200之间,分析漏洞和冗余;  共15个测试用例,除去重复(3、8、13相同)13个或4*3+1=13 漏洞:没有覆盖到一般三角形、非三角形 冗余:等腰、等边三角形纯在冗余 [100,200]: {100、101、150、199、200} > (3)假设s个结构性测试元素,当执行m个测试用例时,会经过n个结构性测试元素,覆盖指标C=n/s,冗余指标R=m/s,纯冗余指标NR=m/n。使用边界值分析测试,计算的C、R和NR。 m=15,n=2,s=4 覆盖指标C=n/s=1/2 冗余指标R=m/s=15/4 纯冗余指标NR=m/n=15/2 ### 边界值法n个测试用例问题 标准边界:**`4n+1`** 健壮边界:**`6n+1`** 最坏情况:**`5^n`** 健壮最坏:**`7^n`** ## 三、决策表法设计用例 > 某保险公司提供车险服务,申请者21岁以下,需要额外收费 > • 21-26岁女性适用A类保险, > • 26岁以下已婚男性或26岁以上男性适用B类保险, > • 21岁以下女性或26岁以下单身男性适用C类保险, > • 其他情况适用A类保险, > 请用决策表设计测试方案. 设: 年龄分为:<21为X,21-26为Y,>26为Z 性别分为:男为M、女为F 婚姻分为:已婚T、未婚F 3x2x2=12  简化后:  ## 四、正交测试法设计用例  > 超短波跳频分组无线网络由超短波调频电台构成,采用分组的方式实现电台之间的信息传输,各电台之间可以互为中继,其测试软件界面如图。研究传输时间的影响因素,主要由电台个数、报文间隔、报文长度。采用正交表L9(34),实验设计和结果参见PPT最后一页,极差和方差分析,计算优水平、优组合,因素显著性分析。  电台个数极差最大,报文间隔次之,报文长度最小。 最优组合为A1B3C2  CT=151*151/9=2533.44 偏差平方: SSA=(400+3025+5776)/3-2533.44=533.56 SSB=(4356+3249+784)/3-2533.44=262.89 SSC=(2209+1936+784)/3-2533.44=48.23 SSe=(2025+2601+3025)/3-2533.44=16.89 因素自由度=因素水平数-1:dfA=dfB=dfC=dfe=3-1=2 方差: VA=SSA/dfA=266.72 VB=SSB/dfB=131.445 VC=SSC/dfC=24.115 Ve=SSe/dfe=8.445  (若MS(均方/方差)因(MS交) <2MSe,可将这些因素或交互作用的偏差平方和、自由度并入误差的偏差平方和、自由度,这样使误差的偏差平方和和自由度增大,提高了F检验的灵敏度。) 因素A高度显著,因素B显著,因素C不显著。因素主次顺序A-B-C。 试验指标越小越好。对因素A、B分析,确定优水平为A1、B3;因素C的水平改变对试验结果几乎无影响,从经济角度考虑,选C1。优水平组合为A1B3C1。 ## 三种黑盒测试方法比较  --- # 第四章:白盒测试 ## 白盒测试定义 **白盒测试与程序内部结构相关,因此也称结构测试或逻辑驱动测试,是对软件的过程性细节做细致的检查。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误,是进一步测试的前提。** **白盒测试分为静态和动态两种** ## 一、静态白盒(了解) 静态白盒测试是在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程,有时也称为**结构分析**。 **原则:**错误发现得越早,改正错误的成本越低,正确改正错误的可能性越大,改正错误时可能引发的其他错误的数量也越少。 静态白盒测试方法包括**代码检查法**、**静态结构分析法**、**静态质量度量法**。 ### 1.代码检查法 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-6bcd7a4167389516dc3d69f060c8c33843" aria-expanded="true"><div class="accordion-toggle"><span>代码检查法</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-6bcd7a4167389516dc3d69f060c8c33843" class="collapse collapse-content"><p></p>代码检查法主要检查代码和程序设计的一致性,代码结构的合理性,代码编写的标准性、可读性,代码逻辑表达的正确性等方面。主要参考文档为:程序设计文档、程序的源代码清单、编码规范、代码缺陷检查表等。 代码检查法能快速找到缺陷,一旦发现错误,能够在代码中对其进行精确定位,从而降低了错误修正的成本。代码检查看到的是问题本身而非问题的征兆。代码检查非常耗费时间,而且代码检查需要知识和经验的积累。 <p></p></div></div></div> * **代码审查**:根据“代码缺陷检查表”分析程序,检查内容包括编码标准规范和错误列表。(重编码规范) * **代码走查**:根据“设计规格书”使用计算机来执行代码。(重跑代码) * **桌面检查**:程序员检查自己编写的程序。 ### 2.静态结构分析法 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-90a6146c50651f49852e5dca96b1f57152" aria-expanded="true"><div class="accordion-toggle"><span>静态结构分析法</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-90a6146c50651f49852e5dca96b1f57152" class="collapse collapse-content"><p></p>主要是以图形的方式表现程序的内部结构。测试者通过使用测试工具分析程序源代码的系统结构、数据结构、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、函数内部控制流图等各种图形图表,清晰地标识整个软件的组成结构,便于理解,通过分析这些图表(包括控制流分析、数据流分析、接口分析、表达式分析),检查软件是否存在缺陷或错误。<p></p></div></div></div> * **通过生成各种图表** * **静态错误分析**:类型、单位、引用分析 * **表达式分析** * **接口分析** ### 3.静态质量度量法 该模型从上到下分为三层,分别是质量因素、分类标准和度量规则。度量规则使用了代码行数、注释频度等参数度量软件的各种行为属性,度量规则参数表。 分类标准软件的可维护性采用以下四个分类标准来评估,分别是可分析性、可修改性、稳定性、可测性。 ## 二、动态白盒 动态白盒测试也称结构化测试,通过查看并使用代码的内部结构,设计和执行测试。 ### 1.逻辑覆盖测试 * **语句覆盖**:程序中每条语句至少被执行一次。 * **判定(分支)覆盖**:每个判断的“真”和“假”分支都至少被执行一次。 * **条件覆盖**:每个条件至少有一次为真值,有一次为假值。(分支里面的所有条件&&、||等) * **判定-条件覆盖** * **条件组合覆盖**:每个判定中条件结果的所有可能组合至少执行一次。 * 条件组合只针对同一个判断语句内存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合; * 不同的判断语句内的条件取值之间无需组合; * 对于单条件的判断语句,只需要满足自己的所有取值即可 * **路径覆盖**:覆盖程序中所有可能的路径。 还有**基本路径测试方法**、**程序插桩方法** ### 2.符号测试 三大问题: * **分支**问题不能控制。 * **二义性**问题不能控制。 * **大程序**问题不能控制。 --- ### 3.测试维恩图  区域1是三个集合的交集,代表着测试用例所覆盖的已实现的规定行为;区域2表示测试用例未覆盖的但是已实现的规定行为;区域3表示测试用例所覆盖的已实现的未规定行为;区域4表示测试用例所覆盖的未实现的规定行为;区域5表示测试用例未覆盖的且未实现的规定行为;区域6表示测试用例未覆盖的已实现的未规定行为;区域7表示测试用例所覆盖的并未实现且未规定的行为。 --- # 第五章:单元测试 **单元**:是可以独立编译或汇编的模块。可以是一个函数,一个方法,一个类,一个过程。 单元测试(模块测试)包括模块程序结构检查、代码测试和模块内功能测试。**是软件测试中最基础的测试**,强调被测试对象的独立性。 目的:检验软件基本组成的正确性。 内容:单元的内部结构、单元的功能和可观测行为。 主要任务: (1)程序语法检查。 (2)逻辑检查。 (3)局部数据结构测试。 (4)路经测试。 (5)边界条件测试。 (6)错误处理。 (7)代码书写规范检查。 **方法**:静态和动态(人工静态分析、人工动态测试、自动静态分析、自动动态测试)。 **执行人**:开发人员 **单元测试流程**: 1. 制定单元测试计划 2. 搭建测试环境 3. 执行单元测试用例 4. 判定测试用例是否通过 5. 提交《单元测试报告》  单元测试报告:     **驱动模块( Driver)**:用以模拟被测模块的上级模块。 **被调用模拟子(桩)模块(Stub)**:用以模拟被测模块工作过程中所调用的模块。  --- # 第六章:集成测试 ## 集成测试定义: **集成测试(Integration Testing)**又称为**组装测试**,是将所有已经通过了单元测试(或者是假定已经通过了单元测试的前提下)的各个软件单元按照设计要求组装成系统或者子系统,然后对这些系统或者子系统进行测试的测试阶段。集成测试就是测试这些软件单元之间是否能够正确地进行交互的测试。 ## 集成测试方法 ### 1.非增量式集成测试(大爆炸集成/一次性集成) **优点**: ① 非增量式集成测试可以并行地测试所有的软件单元, 能够加快测试工作的速度,充分利用了人力和物力资源; ② 非增量式集成测试需要用到测试用例数量较少,所以对设计测试用例的工作量相对较小; ③ 非增量式集成测试的测试方法较为简单,容易执行。 **缺点**: ① 非增量式集成测试是将软件单元一次性集成起来,如果集成的软件单元数量较多,集成测试过程中可能会出现较多的错误,而且因为一次性集成,很难判断出现错误的位置。而且,在对某个软件单元的某处错误进行修改之后,可能会在系统的其它地方带来新的错误,这样给整个系统的修正会带来较大的难度; ② 非增量式集成测试因为是一次性集成,各个软件单元之间的接口没有进行充分的测试,因此有可能会遗漏一些潜在的接口错误,即使在集成测试通过,这些接口可能也会存在问题。 ### 2.增量式集成测试(自顶向下、自底向上、三明治) 自顶向下——除掉根节点,其他结点的数目就是桩模块 自底向上——最后一层叶子结点的个数就是驱动模块 三明治——中间层分层,上面自顶向下,下面自底向上 --- # 第七章:系统测试 ## 一、系统测试定义 是在真实环境或仿真环境下检验完整的软件配置项能否和系统正确连接,满足系统设计要求。测试系统的功能和非功能性需求。 ## 二、测试点提取法: 测试点提取方法包括**测试需求分析法**、**功能点分析法**、**业务流程分析法**、节点分析法、顺序提取法和流程判断法。 ## 三、系统测试流程  ## 四、系统测试策略 * 功能测试:对功能需求逐项进行测试 * 性能测试:对性能需求逐项进行测试 * 边界测试:对软件处在边界或端点情况下运行状态的测试 * 接口测试:对接口需求逐项进行的测试 * 余量测试:对软件是否达到需求规格说明中要求的余量的测试 * 安全性测试:检验软件中已存在的安全性、安全保密性措施是否有效 * 强度测试:强制软件运行在不正常到发生故障的情况下,检测软件可以运行到何种程度 --- # 第八章:验收测试 验收测试包括**客户验收测试**、**用户验收测试**和**功能测试**; ## 一、参与人员 客户、用户、开发人员 ## 二、验收测试流程  ## 三、验收测试策略 * 文档测试 * 安装测试 * 功能测试 * 安全测试 * 效率及兼容测试 * 容错测试 ## 四、测试阶段比较   ## 五、软件的兼容性 * **向前(forward)兼容**:对还没有做好的版本兼容。难 * **向后(backward)兼容**:对已经发出去的老版本兼容。易 --- # 第九章:其他测试技术 ## 一、功能测试 **功能测试**(Functional testing),也称为**行为测试**(behavioral testing),是根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。 功能测试也叫**黑盒测试**或**数据驱动测试**,只需考虑需要测试的各个功能,不需要考虑整个软件的内部结构及代码。 ### 功能测试的方法 功能测试主要分为**功能模块测试**和**业务流程测试**。 功能模块测试**主要采用黑盒测试策略设计测试用例**,并进行测试。 ## 二、回归测试 **回归测试**(Regression Testing)是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。 ### 目的 ① 测试软件变更之后,变更部分的正确性和对变更需求和符合性; ② 测试软件变更之后,软件原有的、正确的功能、性能和其他规定的要求的不损害性。 ### 方法 ① 再测试全部用例 ② 基于风险选择测试 ③ 基于操作剖面选择测试 ④ 再测试修改的部分 ## 三、性能测试 **性能测试**(Performance Test)就是为了发现系统性能问题或获取系统性能相关指标(如运行速度、响应时间、资源使用率等)而进行的测试。 **负载测试和压力测试都属于性能测试,两者可以结合进行。** ### 性能指标 * **响应时间**:服务器端、网络、客户端响应时间。 * **吞吐量**:每单位时间内能处理多少个事务/请求/单位数据等。 * **资源使用率**:CPU占用率、内存使用率、磁盘I/O、网络I/O等。 * **点击数**:客户端向Web Server发起的http请求数。 > **如何测试B/S系统的容量?(RAMP-UP测试和FLAT测试)** 在B/S系统中先使用ramp-up确定容量的范围,然后再使用flat测试一次性增加来确定在哪个范围的容量性能好,以此来确定容量的范围。 > **如何理解负载、压力测试?** **负载测试:** 软件测试的定义:在一定的软硬件环境上,通过不断的加大负载来确定在满足性能指标情况下所能够承受的最大用户数。所以它的目的是为了获取最大用户数。一般不超过80%cpu,正常情况工作下最大用户数数据。 **压力测试,也叫强度测试:** 软件测试的定义:在一定的软件硬件环境下,通过高负载的手段来使服务器资源处于极限的状态,测试该系统在极限状态长时间运行是否稳定。包括系统指标,服务器性能指标。 一般情况下我们所说的性能测试就是在服务器指标不超过80%下的测试来获取性能指标,负载测试是测试的一个方法,通过不断调试并发数获取性能瓶颈。比如80个并发,这个叫80用户负载测试。通过80—>180这样的并发数变化过程,就叫做性能测试。也就是说,性能测试是通过不同的负载测试来实现的。 压力测试,就是高负载的情况下进行的,目的不是为了获取性能指标,而是想要了解系统是否稳定。这时候服务器的指标一般不超过90%。压力测试通过长时间的运行较性能测试更能容易发现内存泄露的问题。 **简单来说,负载测试是个方法,性能测试是一个过程。压力测试是个高压力下的性能测试。** ### 过程    ### 结果分析原则 (1)具体问题具体分析 (2)查找瓶颈时按以下顺序,由易到难; 服务器硬件瓶颈→网络瓶颈→服务器操作系统瓶颈(参数配置→中间件瓶颈(参数配置,数据库,web服务器等)→应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)。 (3)分段排除法:根据场景运行过程中的错误提示信息;根据测试结果收集到的监控指标数据。 ### 监控指标 最大并发用户数 最大并发用户数 服务器资源监控指标:内存、处理器、磁盘I/O、数据库服务器 ### 相关问题 1.自动化测试工具中,用于功能测试的是 `Selenium` 2.软件产品国际化应具备的特性不包括 `翻译验证` 3.一个100万行软件代码,如何估算其中的错误 `经典的种子公式方法,软件中加一定数量的BUG设为S,按照预先设计测试方案,发现s个BUG是加入的,n个BUG是原先程序中的BUG,则可以推出程序的总Bug数为:` **`N = S * n /s`** `其中n是所进行实际测试时发现的Bug总数。如果 n = N, 说明所有的Bug已找出来,说明做的测试足够充分。` 4.基于缺陷清除率的估算方法 `F为描述软件规模用的功能点;D1为在软件开发过程中发现的所有缺陷数;D2为软件发布后发现的缺陷数;D为发现的总缺陷数。D=D1+D` **`质量(每个功能点的缺陷数) = D2/F ,缺陷注入率 = D/F , 整体缺陷清除率=D1/D`** 某软件10000个功能点,开发过程中发现100个软件缺陷,提交后发现10个软件缺陷,基于缺陷清除率的估算方法,整体缺陷清除率为(`100/110=0.909`)。质量为 (`10/10000=0.001`) --- # 补充一:字符集 ## Unicode转换为UTF-8  0x4A——0XXX XXXX——0100 1010——0100 1010——0x4A 0xB8——110X XXXX 10XX XXXX——1011 1000——1100 0010 1011 1000——0xC2B8 0xCA——110X XXXX 10XX XXXX——1100 1010——1100 0011 1000 1010——0xC38A 0xF03F——1110 XXXX 10XX XXXX 10XX XXXX——1111 0000 0011 1111——1110 1111 1000 0000 1011 1111——0xEF80BF --- # 补充二:可靠性基础 ## 一、故障、失效 **故障**(对可修复产品而言):产品或产品的一部分不能或将不能完成预定功能的事件或状态。 **失效**(对不可修复产品而言):产品终止规定功能。 **故障通常是产品失效后的状态,但也可能失效前就存在。** **分类**: 1、按出现故障的规律分:偶然故障和耗损故障 2、按故障的结果分:致命性故障和非致命性故障 3、按故障的统计特性分:独立故障和从属故障 **在评价产品可靠性时只统计独立故障。** ## 二、可靠性 **可靠性**:产品在规定条件下和规定时间内,完成规定功能的能力。  **当产品的寿命服从指数分布时:`MTBF(平均故障间隔时间) = MTTF(平均寿命) = 1/λ` λ是故障率,即λ(t)** **维修性的度量指标:`MTTR(平均修复时间)=T/n` T是修复总时间,n是修复次数** --- ### 串联模型 可靠度是产品各单元可靠度的积,Rs=R1 x R2 x ··· 故障率是产品各单元故障率的和,λs=λ1 + λ2 + ··· ### 并联模型  ### n个相同系统并联 Rs=1-(1-R)n,λs=λ/(1+1/2+1/3+…1/n) --- # 附2:简答题 > 1.软件质量保证和软件测试有何异同? 答:它们的相同点在于二者都是贯穿整个软件开发生命周期的流程;它们的不同之处在于SQA是一项管理工作,侧重于对流程的评审和监控,而测试是一项技术性的工作,侧重于对产品的评估和验证。 > 2.测试与调试有何异同? 答:调试与测试的对象及采用的方法在很大程度上相似,调试还用到断点控制等排错方法,但其目的却完全不同。测试是为了找出软件中存在的缺陷,而调试是为了解决存在的缺陷,是程序员的职责。 > 3.常用的WEB元素有那些? 答:Web元素主要包括超链接、图片、文字、HTML语言、脚本语言、表单等。 > 4.非功能测试包括哪些? 答:性能测试、压力测试、容量测试、安全性测试、可靠性测试、容错性测试等。 > 5.软件本地化与国际化的关系? 答:国际化和本地化是一个辩证的关系,本地化要适应国际化的规定。而国际化是本地化的基础和前提,为本地化做准备,使本地化过程不需要对代码做改动就能完成,或将代码修改降到最低限度。 > 6.简述软件测试团队的基本任务。 答:软件测试团队的最基本任务是建立测试计划、设计测试用例、执行测试、评估测试结果和递交测试报告等,并贯穿了各个测试阶段。除此之外,测试团队还要完成其他一些主要任务,如阅读和审查软件功能说明书、设计文档,审查代码,和开发人员、项目经理等进行充分交流,所有的任务都是为了履行测试团队的责任。 > 7.什么是测试环境,测试环境的5要素是什么? 答:测试环境包括设计环境、实施环境、管理环境。测试环境的5要素是:软件、硬件、网络环境、数据准备、测试工具。 --- # 附1:软件测试体系  Last modification:August 11, 2022 © Allow specification reprint Like 0 喵ฅฅ