admin管理员组

文章数量:1530845

​2.1软件缺陷

考点:

1、软件缺陷:代码中的缺陷,代码C/C++,代码中缺陷需要有印象,常见缺陷可以识别

(内存泄漏:动态内存分配与销毁一致性、数组越界、除以0错误、死循环,缺陷不一定每次都发生错误,可能被激发的情况会导致错误)

2、软件质量:质量模型IOS9126质量模型,提到了哪几种质量特性以及哪些首要特性次要特性

3、 测试模型:V、W、H、X模型

依据V、单元(白+黑,以白为主,交替执行,直到目标完成。)

集成(单元模块之间的接口(接口测试),自顶向下(不断编写桩模块)、自底向上,渐增是主要的方式。)

系统测试(发布之前、交付之前,主要参与人是开发和测试团队。

阿尔法测试(需要客户参与)和贝塔(公测)测试。)、验收测试(以客户为主导)。

主旨和方法。

4. 测试管理与缺陷管理:

(1)缺陷的定义:书上5原则定义(哪些是缺陷、哪些不是。少了功能、多了功能都是缺陷)

(2)软件测试周期,缺陷管理考点:测试管理的流程、工具。 缺陷管理流程,哪些流程会出现,哪些不会出现(new-》决策(open/reject拒绝)-〉指派-》修复-〉回归测试确认修复close/缺陷又复现reOpen);

 测试管理:软件测试周期,需要经过那几个阶段: ①提出测试计划  ②测试设计(设计用例)③执行测试  ④缺陷跟踪 ⑤打印测试报告。

(3)常见缺陷管理软件

5. 具体的测试技术与方法:静态测试、动态测试。

最重要静态测试:代码走查(知道如何进行),桌面检查。还有需求评审、设计评审、技术评审、代码评审,代码分析。如何区分静态动态。

动态测试:分类黑盒白盒。黑盒白盒如何区别、灰盒是什么。测试结果都应以表格形式表示出来,并标号;黑盒——功能性测试;白盒——逻辑覆盖

变异测试—>评价测试用例,属于白盒,考察不等价变异

白盒方法:了解内部逻辑结构(又叫结构测试)

2.1.1软件质量的内涵

1、缺陷是质量的对立面,质量 =品牌 =客户满意度

质量是系统、部件或过程满足: 1)明确需求 2)客户或用户需要或期望的程度不同

(1)测试小组不负责质量。 软件测试员不负责软件的质量,软件测试员只是报告事实。质量不是靠测试来解决的。

(2)制造高质量的产品对于制造低质量的产品 实际上不需要额外的开销。

(3)软件缺陷发现得越晚,其处理费用就越高(指数级增长)。

(4)把质量的费用分为两类:一致性费用和非一致性费用。

一致性费用是指与一次性计划和执行测试相关的全部费用,用于保证软件按照预期方式运行。

2、软件质量:软件产品具有满足规定的 或 隐含要求能力要求有关的特征与特征总和(ISO 8492)

包括:①软件产品质量满足用户要求的程度;②软件各种属性的组合程度;③用户对软件产品综合反应程度;④软件在使用过程中满足用户要求的程度;

(1)软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”。

(2)发展过程:

Crosby (1979)  •系统、部件或过程满足规定需求的程度。
Juran(1988)     •系统、部件或过程满足顾客或客户需求/期望的程度。
Presiman         •符合明确陈述的用户需求、软件质量标准和开发维护人员对软件的隐含特性要求。

3、软件质量模型

1)1976年鲍勃分层质量模型(10大风险);

2)1978年麦考尔(McCall)质量模型(3,11,29)按照3个维度对11质量要素;

特性是软件质量的反映,软件属性可用做评价准则,定量化地度量软件属性可知软件质量的优劣。3维度:操作特性(产品运行)、承受可改变能力(产品修正)、新环境的适应能力(产品转移).

3)ISO 9126  质量的六个特性:

功能:(首要)与一组功能及其指定性质有关的一组属性,而功能是能满足明确或隐含的需求的能力。

可靠:在规定的一段时间和条件下,软件维持其性能水平的能力有关的属性

易用:规定或潜在的用户为使用软件所需作的努力和所作的评价有关的属性

效率:与在规定条件下软件的性能水平与所使用资源量之间关系有关的属性

可维护:与进行指定的修改所需的努力有关的属性

可移植:与软件从一个环境转移到另一个环境的能力有关的属性

PS:其中每一个质量特征都分别与若干子特征相对应

4、ISO/IEC 9126-1:2001 软件质量模型 可以分为3部分:内部质量、外部质量和使用质量。
外部质量—针对满足需求的程度,表征软件产品在规定条件下使用时,满足规定的和隐含的需求的程度。
内部质量—着眼于软件产品内部,表征软件产品在规定条件下使用时,决定其满足规定的和隐含的需求的能力。eg:代码的规范性、复杂度、耦合性


使用质量—从用户观点出发,是软件产品在规定的使用环境中,使规定的用户能实现规定目标要求的能力。

过去将软件质量分为内部质量、外部质量和使用质量。内部质量和外部质量共用一个质量模型。

现在国际/国家标准将 内部质量和外部质量 合并为产品质量。

产品质量可以认为是软件系统自身固有的内在特征和外部表现,而使用质量是从客户或用户使用的角度去感知到的质量,有些内部质量(如代码规范性等),用户是无法感知的。

关系:产品质量(内+外)影响使用质量,而使用质量依赖产品质量。

5、过程质量标准:
• 六西格玛、SPICE、IEEE/EIA 12207、MIL-STD-498等
• CMM /CMMI:CMM-软件能力成熟度模型:强调持续的过程改进,CMM分5个等级,每个等级由多个关键过程域(KPA)
• ISO 9000质量管理国际标准:建立质量管理体系的国际标准

习题:

1、软件的六大质量特性包括( A)

A. 功能性、可靠性、可用性、效率、可维护、可移植

B. 功能性、可靠性、可用性、效率、稳定性、可移植

C. 功能性、可靠性、可扩展性、效率、稳定性、可移植

D. 功能性、可靠性、兼容性、效率、稳定性、可移植

2、关于软件测试对于软件质量的意义,错误的是(C)
 A.度量与评估软件的质量 B.改进软件开发过程
 C.保证软件质量     D.发现软件错误

2.1.2软件缺陷的定义

1、术语

缺陷 – 缺点(defect); 偏差 (variance);谬误(fault);失败 (failure);问题(problem);矛盾(inconsistency);错误(error );毛病 (incident ); 异常(anomy);不一致、事件、缺陷、异常。

注意:

故障、失败和缺点都指的是确实严重的情况,甚至是危险的情况;

异常、事件和偏差不是那么尖锐,主要指未按预料的运行,而不是说全部失败;

问题、错误和缺陷是最常用的术语。

——辨析基本概念——
1)缺陷(bug): 软件未达到产品说明书表明的功能、出现了说明书不会出现的错误、功能超出说明书范围、未达到说明书未指出但应达到的功能、用户认为不好(不易使用,运行缓慢,难以理解)。注意:缺陷导致软件故障
2)故障:软件运行过程中出现的不希望/不可接受的内部状态,丧失了在规定限度内执行所需功能的能力,故障是动态的且可能导致失效,故障是软件缺陷的内在表现
3)失效:在运行过程中出现的不希望的外部行为结果。失效是是软件缺陷的外在表现
4)错误:发生错误的原因:客户未完全描述意图,没有充分理解需求,编码错误。错误是人为过程,对软件来说是外部行为
5)测试&测试用例&测试过程:测试用例是一组输入,测试过程包括测试计划、测试用例开发、运行测试用例和评估测试结果,测试以处理以上的各种软件缺陷。重点是怎么设计测试用例

2、软件缺陷一个标准的定义:  

(1)从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;

(2)从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。

(3)软件缺陷的定义:任何程序、系统中的问题,和产品设计书的不一致性,不能满足用户的需求。

产品说明书  

【  ① 简称为说明或产品说明(通常是利用文字和图形描述产品的书面文档),是软件开发小组的一个协定。它对开发的产品进行定义,给出产品的细节、如何做、做什么、不能做什么。这种协定从简单的说明到正式的书面文档有多种形式。

② 编写详细产品说明书的好处是软件测试员可以将其作为测试项目的书面材料,据此可以在编写代码之前找出软件缺陷。

③ 优秀产品说明书的8个属性:完整、准确、精确、一致、贴切、合理、代码无关、可测试性。】

3、软件缺陷定义(从测试的观点):
Bug观测机制——PIE模型
Fault谬误:静态存在于软件中的缺陷;
Error错误:软件运行中,运行到fault,触发产生的错误;
Failure失败:Error传播到软件外部,使用户观测到失效的行为。

4、软件缺陷的现象

(1)功能、特性没有实现或部分实现

(2)设计不合理,存在缺陷

(3)实际结果和预期结果不一致

(4)运行出错,包括运行中断、系统崩溃、界面混乱

(5)数据结果不正确、精度不够

(6)用户不能接受的其他问题,如存取时间过长、界面不美观

5、软件缺陷举例

软件缺陷的分类:

1)输入/输出缺陷:接受错误的输入、不接受正确的输入、参数有错或遗漏;输出格式有错,结果有错
2)数据缺陷:错误的初始化、存储/访问、标志/索引、数据引用、类型、数据范围、变量
3)计算缺陷:错误的算法、遗漏计算、不正确的操作数、精度错误
4)接口缺陷:不正确的中断处理、不兼容的类型、参数不匹配,调用错误的过程
5)逻辑缺陷:重复、遗漏、循环迭代

【常见缺陷 :死循环;除0错 :100/n、a/b ;数组越界 ;内存泄漏 ;C/C++缓冲区溢出 (缓冲区溢出属于数据引用错误);数据处理、精度问题 ;未赋值的引用】

1)下面的C++代码片段,存在的主要问题是?

void foo(int i) { int *ptr= new int; if(i <0) return i; delete ptr; }

A)内存泄漏 B)死循环C)数组越界 D)缓冲区漏洞

解释:在函数foo中,动态分配的内存通过new操作符分配给了指针ptr,但在函数执行过程中没有释放该内存,导致内存泄漏。

2)下面的C++代码片段中,存在的主要问题是

int nums[5] = (1,2,3, 4, 5}; for (int i=0; i <=5; i++){ cout << nums[i] << endl; )

A)内存泄漏 B)死循环 C)数组越界 D)缓冲区漏洞

解释:在代码中,定义了一个长度为5的整型数组nums,但是在循环中,使用<=条件进行迭代,导致访问了数组越界的元素。数组的有效索引范围是从0到4,因此nums[5]是越界访问。

3)下面的C++代码,实现了一个除法功能的函数,下列选项中描述最为准确的是

double func_div(double a, double b) {return a/b;}

A)无缺陷 B)语法错误 C)逻辑错误 D)运行时可能发生除零错

解释:函数func_div实现了除法功能,但没有对除数进行检查,如果传递的除数b为0,则会导致除以零错误。这是一种运行时错误,可能导致程序异常终止。

4)解释:while循环的条件是f[i] && i < n,这段代码可能会出现问题,如果数组f的索引i超出了数组的范围(即i >= n),那么访问f[i]时就会发生数组越界访问错误,导致程序崩溃或出现未定义的行为。

5)

6)多此一举缺陷

7)设计缺陷

8)针对以下代码,分析代码中存在的问题和缺陷。

public class getScoreAverage
{ public float getAverage( int [] scores )
{ if (scores==null || scores.length==0)
{ throw new NullPointerException();
}
float sum = 0.0F;
int j=scores.length;
for (int i=1; i<j; i++)
{ sum += scores[i];
}
return sum/j;
}
}

解:以下是代码中存在的问题和缺陷:

① 循环索引错误:在for循环中,循环索引i从1开始,而不是从0开始。这将导致数组中的第一个元素被忽略,从而计算出的平均值不准确。

② 空指针异常:在方法开头,对输入参数scores进行了空指针检查,但没有处理空指针异常的情况。如果传入的scores数组为null,则会抛出空指针异常。

③ 整数除法问题:在计算平均值时,使用整数除法进行除法运算,这可能导致结果的精度丢失。例如,如果总和是整数类型,除以元素个数后得到的平均值将截断为整数,而不是保留小数部分。④ 数组越界:循环索引i的上界是scores.length,但由于循环从1开始,而不是0开始,因此循环将超出数组的有效索引范围。这可能导致访问到越界的数组元素,引发数组越界异常。

综上所述,这段代码存在循环索引错误、空指针异常、整数除法问题和可能的数组越界问题。修复这些问题可以提高代码的正确性和健壮性。

9)有程序段如下:

public int get_ max(int x,int y,int z){
int max;
if(x>=y)
{    max  =  x;   }
else
{    max  =  y;   }
if(  z>=x   )
{    max  =  z;   }
return max;        }

(1)试分析该程序段有何逻辑错误。
(2)设计1个测试数据,使执行该测试时会执行到缺陷代码但不会触发错误。
(3)设计1个测试数据,使执行该测试时会执行到缺陷代码并触发错误,但不会引起失败。
(4)设计1个测试数据,使执行该测试时会执行到缺陷代码,触发错误,并引起失败。

注意:

缺陷(Defect)是指代码中存在的问题或错误。这些问题可能会导致程序在运行时产生意外的行为或结果。在给定的上下文中,缺陷是指代码中的逻辑错误,即代码没有按照预期的方式工作(预期工作是输出三个数字中最大值)。

错误(Error)是指在程序执行过程中出现的问题或异常。它是由缺陷引起的,当程序执行到包含缺陷的代码时,可能会导致错误的发生。

在给定的程序段中,逻辑错误导致了缺陷。当输入数据满足特定条件时,代码中的逻辑错误会导致缺陷的出现。这些缺陷可能会触发错误,导致程序在运行时产生意外的行为或结果。如果错误引起了程序的失败,那么该错误会导致程序无法正常执行或产生错误的输出。

(1) 逻辑错误分析:
在给变量 max 赋值时,如果 x >= y 成立,那么 max 将被赋值为 x。然后,在第二个条件判断中,即 z >= x,如果该条件成立,max 将被重新赋值为 z,而不是保持之前的最大值。这导致了逻辑错误,因为无论 z 的值如何,最终的 max 值都将是 z

(2) 设计一个测试数据,执行到缺陷代码但不触发错误:
输入:x = 5, y = 3, z = 4
预期输出:5

解释:在这个测试数据中,x 大于 y,因此 max 被赋值为 x。然后,z 的值小于 x,但这不会触发错误,因为无论如何 max 的值都不会改变。

(3) 设计一个测试数据,执行到缺陷代码并触发错误,但不引起失败:
输入:x = 3, y = 5, z = 4
预期输出:5

解释:在这个测试数据中,x 小于 y,因此 max 被赋值为 y。然后,z 的值大于 x,这会导致 max 的值被重新赋值为 z,而不是保持之前的最大值。这是一个逻辑错误,但是不会引起失败,因为最终的输出仍然是正确的。

(4) 设计一个测试数据,执行到缺陷代码,触发错误,并引起失败:
输入:x = 4, y = 4, z = 5
预期输出:5

解释:在这个测试数据中,x 等于 y,因此 max 被赋值为 y。然后,z 的值大于 x,这会导致 max 的值被重新赋值为 z,而不是保持之前的最大值。这是一个逻辑错误,并且最终的输出不符合预期,因为预期输出是 5,但实际输出却是 4。这会引起失败,因为代码没有按照预期的方式工作。

PS:会产生内存泄漏的程序语言是 ( B、 C++语言)(单选题)

2.1.3 软件缺陷的判断准则

1、至少满足下列5个规则之一才称为发生了一个软件缺陷

(1)软件未实现产品说明书要求的功能;

(2)软件出现了产品说明书指明不该出现的错误;

(3)软件实现了产品说明书未提到的功能

(4)软件未实现产品说明书虽未明确提及但应该实现的目标;

(5)软件难以理解、不易使用、运行缓慢或者从测试员的角度看,最终用户会认为不好。

2、Test Oracle :决定一项测试是否通过的(判断)的一种机制。

Test Oracle的使用会要求将被测试系统的实际输出与所期望的输出进行比较,从而判断是否有差异,即是否为缺陷。

1)需求规格说明书和其它需求、设计规范文档

2)竞争对手的产品

3)启发式测试预言

4)统计测试预言

5)一致性测试预言

6)基于模型的测试预言

7)人类预言

2.1.4 软件缺陷的产生原因

1、技术问题:①算法错误、计算和精度问题;②不能全面考虑到功能,性能和安全性平衡;③接口参数传递不匹配;④处理问题不成熟;⑤逻辑复杂很难一次实现;⑥需求规格说明书有些功能在技术上是无法实现;⑦没有考虑系统崩溃后的自我恢复或数据的异地备份、难性恢复等需求,导致系统有在安全性、可靠性的隐患;⑧一般情况下,对应的编程语言编译器可以发现这类问题;⑨对于解释性语言,只能在试运行的时候发现

2、团队工作:沟通不充分,误解;软件质量不够重视;不同阶段的开发人员相互理解不一致;设计或编程上的一些假定或依赖性没有得到充分的沟通。

3、软件本身:文档错误、用户使用场合; 时间上不协调、或不一致性所带来的问题;系统的自我恢复或数据的异地备份、灾难性恢复等问题;与硬件、第三方系统软件之间存在接口或依赖性;不完善的软件开发标准或开发流程;未考虑大量数据使用场合,从而可能会引起强度或负载问题;对程序逻辑路径或数据范围的边界考虑不够周全

4.试分析软件缺陷产生的原因

最大原因:产品说明书,即需求。其次:设计

①软件自身特点,软件需求不明确,软件结构复杂,精确时间同步不准确,运行环境复杂。
②项目管理,开发人员与用户,或开发人员间沟通不够,开发人员理解不同,技术人员水平参差不齐。
③团队合作,系统结构设计不合理,没有备份,程序逻辑路径或数据范围不够,算法,语法,计算错误。
④技术问题,缺乏质量意识,流程不够完善,软件文档不完善,开发过程不按照规定。

软件缺陷绝大部分来源:

第一大来源 产品规格说明书(说明书没有写、说明书不够全面,经常更改、整个开发小组没有很好地沟通);

第二大来源 设计(随意、易变、沟通不足);

第三大原因 编码错误(软件的复杂性、文档不足、进度压力、普通的低级错误)。

2.1.5软件缺陷在不同阶段的分布

70%~90%的软件缺陷是在测试前发现的。

2.1.6修复软件缺陷的成本

2.1.7 附加知识点:

1、可以报告软件缺陷存在,却不能报告软件缺陷不存在。

2、有时找不到错误,有时接二连三好多错误:程序员有心情不好的时候;程序员往往犯同样的错误;某些软件缺陷实乃冰山一角。

3、不修复软件缺陷的原因:没有足够时间、不算真正的软件缺陷、修复风险太大、不值得修复、无效的软件缺陷修复报告。

  *并非所有软件缺陷发现了都能修复。

  *可以躲过和用户有办法预防或避免的软件缺陷通常不用修复

4、没有看见就不能说存在缺陷。尚未发现或未观察到的软件缺陷能说是潜在缺陷。

5、缺陷管理的角色:

1)测试人员:进行测试的人员,缺陷的发起者;

2)开发人员:执行开发任务的人员,完成实际的设计和编码工作;

3)评审委员会:对缺陷进行最终确认,在项目成员对缺陷达不成一致意见时,行使仲裁权力。

6、缺陷严重性

1)致命的:致命的错误,造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能完全丧失等。

2)严重的:严重错误,指功能或特性没有实现,主要功能部分丧失次要功能完全丧失,或致命的错误声明。

3)一般的:不太严重的错误,这样的软件缺陷虽然不影响系统的基本使用,但没有很好地实现功能,没有达到预期效果。如次要功能丧失,提示信息不太准确,或用户界面差,操作时间长等。

4)微小的:一些小问题,对功能几乎没有影响,产品及属性仍可使用,如有个别错别字、文字排列不整齐等。

7、缺陷优先级
立即解决(P1级):缺陷导致系统几乎不能使用或测试不能继续,需立即修复;
高优先级(P2级):缺陷严重,影响测试,需要优先考虑;
正常排队(P3 级):缺陷需要正常排队等待修复;
低优先级(P4级):缺陷可以在开发人员有时间的时候被纠正;

8、缺陷的其他属性

包括缺陷标识、缺陷类型、缺陷产生可能性、缺陷来源、缺陷原因

软件缺陷类型列表:功能,用户界面,文档,软件包,性能,系统/模块接口

软件缺陷产生可能性列表:总是,通常,有时,很少

软件缺陷来源列表:需求说明书,设计文档,系统集成接口,数据流(库),程序代码

软件缺陷根源列表:测试策略,过程,工具和方法,团队/人,缺乏组织和通信,缺乏组织和通信,硬件,软件,工作环境。

9、软件缺陷的详细描述由三部分组成:操作/重现步骤、期望结果、实际结果;

10、缺陷描述的基本要求:单一准确,可以再现,完整统一,短小简练,特定条件,补充完善,不做评价。

11、最常用的缺陷分析方法有以下4种:缺陷分布报告,缺陷趋势报告,缺陷年龄报告,测试结果进度报告

12、软件缺陷处理技巧:审阅,拒绝,完善,分配,测试,重新打开,关闭,暂缓;

13、缺陷趋势分析:

软件质量标准一般要求:在测试结束前,高优先级(P1、P2)的缺陷必须被全部处理完;

14、软件缺陷的三个主要来源一一用户界面显示、业务逻辑、规格说明书,占软件缺陷总数的75%


软件缺陷的生命周期:一个软件缺陷被发现、报告到这个缺陷被修复、验证直至最后关发现闭的完整过程。

在整个软件缺陷生命周期中通常以改变软件缺陷的状态来体现不同的生命阶段。

一个基本的软件缺陷生命周期包含3个状态 “新打开的” “已修正” “已关闭”


(1)发现→打开:测试人员发现软件缺陷后提交该缺陷给开发人员。缺陷处在开始状态“新打开的”。
(2)打开→修复:开发人员再现、修改代码并进行必要的单元测试,完成缺陷的修正。这时缺陷处于“已修正”状态。
(3)修复一关闭:测试人员验证已修正的缺陷,如果该缺陷在新构建的软件包的确不存在,测试人员就关闭这个缺陷。这时缺陷处于“已关闭”状态。

软件缺陷状态列表

缺 陷 状 态描述
激活或打开问题还没有解决,存在源代码中,确认“提交的缺陷”,等待处理,如新报的缺陷
已修正或修复已被开发人员检查、修复过的缺陷,通过单元测试,认为已解决但还没有被测试人员验证
关闭或非激活测试人员验证后,确认缺陷不存在之后的状态
重新打开测试人员验证后,还依然存在的缺陷,等待开发人员进一步修复
推迟这个软件缺陷可以在下一个版本中解决
保留由于技术原因或第三方软件的缺陷,开发人员不能修复的缺陷
不能重现开发不能复现这个软件缺陷,需要测试人员检查缺陷复现的步骤
需要更多信息开发能复现这个软件缺陷,但开发人员需要一些信息,例如缺陷的日志文件、图片等

7、缺陷的状态:

New:缺陷的初始状态(发现问题,提交问题,提交问题后,这个缺陷就处于New的状态)

Open:开发人员开始修改缺陷(测试人员提交问题,开发人员接受并开始修改问题)

Fixed:开发人员修改缺陷完毕;

Closed:回归测试通过(测试人员进行回归测试,回归测试通过,该问题改为Close状态)

Reopen:回归测试失败(测试人员进行回归测试,回归测试不通过,该问题改为Reopen状态)

postpone:推迟修改;

Rejected:开发人员认为不是程序问题,拒绝缺陷;

Duplicate:与已提交的Defect重复;

Abandon:放弃。

a、发现软件缺陷

b、软件缺陷打开状态:当软件缺陷首先被软件测试员发现时,被记录报告并指定给程序员修复。

c、软件缺陷解决状态:一旦程序员修复了代码,报告又指定回到测试员手中。

d、软件缺陷关闭状态:测试员执行验证测试,确认软件缺陷确实得以修复。 

缺陷处于激活状态,表明问题还没有解决测试人员新报告的缺陷验证后缺陷仍然存在

10. 请简述软件缺陷的处理流程。

软件缺陷处理流程为:提交→分配→确认→处理→复测→关闭

(1)提交:测试人员发现缺陷之后,将缺陷提交给测试组长。

(2)分配:测试组长接收到测试组员提交的缺陷之后,将其移交给开发人员。

(3)确认:开发人员接收到移交的缺陷之后,会与团队甚至测试人员一起商议,确定该缺陷是否是一个缺陷。

(4)拒绝:如果经过商议之后,缺陷不是一个真正的缺陷则拒绝处理,关闭缺陷。如果经过商议之后,确定其是一个真正的缺陷,则可以根据缺陷的严重程度或优先级等立即处理或延期处理。

(5)处理:开发人员修改缺陷。

(6)复测:开发人员修改好缺陷之后,测试人员重新进行测试(回归测试),检测缺陷是否确实已经修改。如果未被正确修改,则重新提交缺陷。

(7)关闭:测试人员进行回归测试之后,如果缺陷已经被正确修改,则将缺陷关闭,整个缺陷处理完成。

8、缺陷处理的场景:比较理想的缺陷流程:从new状态——>open——>fixed——>closed状态。

场景1:确认BUG解决:测试【new】→开发【open】→开发【fix】→测试【close】

场景2:验证未通过,缺陷仍存在:测试【new】→开发【open】→开发【fix】→测试【reopen】(10%)

场景3:开发延期处理:测试【new】→开发【open】→开发【postpone】(10%)

场景4:拒绝处理:测试【new】→拒绝【reject】(5%)

·New→insure→open→指派修复→回归测试→复现→open......

·New→insure→open→指派修复→回归测试→close

·New→insure→close

(new ->决策(open/reject拒绝)-> 指派-> 修复-> 回归测试(确认修复close) 或 (缺陷又复现reopen)

习题:测试人员提交新的bug入库,缺陷状态置为_1_;

开发经理 验证缺陷,如果确认是bug,分配给 相应开发人员,设状态为 2_,  如果不是bug,则拒绝,设置状态为“拒绝“状态;

开发人员查询状态为_3_的bug,做如下处理:如果是bug,则修复并置状态为_4_;

测试人员查询状态为_5_的bug,验证bug是否解决,做如下处理:如果bug解决了置缺陷状态为_6_,如果bug没有解决则置状态为_7_。
new->open->open->fixed->fixed->closed->reopen

9、常见软件缺陷管理工具:ClearQuest、Mantis、Bugzilla、JIRA。

10、1)因为软件缺陷在发布之前发现,所以这些费用归属于内部失败

        2)如果软件缺陷被遗漏到客户手里,可能需要修复、重新测试和发布软件,甚至要召回或者卷入官司,这些外部失败的费用属于非一致性费用。

11、软件缺陷 跟踪数据库 最常用的特性,除了输入软件缺陷外,就是执行查询。

12、发现的软件缺陷越多,表明未发现的软件缺陷越多

13、在软件缺陷数目下降的明朗趋势出现之前,不能认为软件已经准备就绪。14、

14、报告软件缺陷的基本原则:尽快报告软件缺陷、有效描述软件缺陷。

15、有效软件缺陷的描述:短小、单一、明显并通用、可再现、在报告软件缺陷时不要做评价、对软件缺陷报告跟踪到底。

16、不存在随机软件缺陷。软件缺陷通常集中在需求分析和系统设计阶段

17、报告软件缺陷时,测试员要对软件缺陷分类划分:

严重性(表示软件缺陷的恶劣程度,当用户碰到该缺陷时影响的可能性和程度。)

优先级(表示修复缺陷的重要程度和紧迫程度)。

    *软件项目的优先级在项目期间会发生变化。

18、回归缺陷:原来认为已经修复、测试和关闭的缺陷可能会再次出现。

19、对非常小的项目,表单足以胜任软件缺陷的跟踪。

20、2-8原则:80% 的软件缺陷聚集在软件 20% 的模块中

21、什么是PIE模型?试分析PIE模型对软件测试设计有何指导意义。PIE模型:实际上就是代码执行到Fault,感染产生Error,传播出去(输出),我们可以观测到Failure失效行为。这就是PIE模型。
意义:得可能存在的软件缺陷通过程序执行都尽可能地产生问题且被外部观察到。

习题:

1、按照缺陷的严重程度可以将缺陷划分为_严重、一般、次要、建议。_
2、 软件缺陷产生的原因包括____、____、____以及____等
答案:软件自身的特点    团队合作    技术问题    项目管理
3、(   )就是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。它的存在会导致软件产品在某种程度上不能(  )。
答案:软件缺陷    满足用户的需要

4.导致软件缺陷的最大原因是:(A)

A.软件需求说明书  B.设计方案  C.编码  D.维护

5、 软件缺陷都存在于程序代码中。( )×     

6、软件缺陷可存在于软件需求分析、架构设计、编程开发等各个阶段。√  

7、软件缺陷是导致软件失效的必要,而非充分要求。✔

8、软件缺陷修复的代价最高的阶段为(B)

A.需求阶段  B.发布阶段  C.设计阶段  D.编码阶段

软件缺陷修复的代价最高的阶段为( A)

A、发布阶段

B、需求阶段

C、设计阶段

D、编码阶段

9.以下哪些选项属于软件缺陷。(ABCD)

A.测试人员认为难以理解、不易使用的  B.未达到需求规格说明书中指明的功能

C.软件功能超出了需求规格说明书中指明的范围  D.软件运行缓慢

10. 缺陷产生的原因包括()
  A. 交流不充分及沟通不畅;软件需求的变更;软件开发工具的缺陷
  B. 软件的复杂性;软件项目的时间压力
  C. 程序开发人员的错误;软件项目文档的缺乏
  D. 以上都是
正确答案:D

11. 下面有关软件缺陷的说法中错误的是()
  A. 缺陷就是软件产品在开发中存在的错误
  B. 缺陷就是软件维护过程中存在的错误、毛病等各种问题
  C. 缺陷就是导致系统程序崩溃的错误
  D. 缺陷就是系统所需要实现某种功能的失效和违背
正确答案:C

12.以下选项不属于软件缺陷的是()
  A. 软件没有实现产品规格说明所要求的功能
  B. 软件中出现了产品规格说明不应该出现的功能
  C. 软件实现了产品规格没有提到的功能
  D. 软件满足用户需求,但测试人员认为用户需求不合常理
正确答案:D

13. 下列()不属于软件缺陷。
  A. 测试人员主观认为不合理的地方
  B. 软件未达到产品说明书标明的功能
  C. 软件出现了产品说明书指明不会出现的错误
  D. 软件功能超出产品说明书指明范围
正确答案:A

14.产品发布后修复软件缺陷比项目开发早期这样做的费用要高()
  A. 1~2倍          B.10-20倍          C. 50倍          D. 100 倍或更高
正确答案:D

12.导致软件缺陷的最大原因是()
  A. 需求分析              B. 设计             C. 编码                   D. 测试
正确答案:A

13、下列不属于软件缺陷的是()
  A. 银行POS机在用户取款时翻倍吐钱,取100吐200
  B. 计算机病毒发作,屏幕出现熊猫烧香画面
  C. 网上售票软件反应迟钝,用户难以正常买票
  D. 某软件在进行修改升级之后, 原来正常的功能现在出错了
正确答案:B  不属于,软件缺陷是指软件中存在的偏差,且病毒则来自外部。

14.下列哪一项不是软件缺陷产生的原因?(b)

A. 需求不明确B. 测试用例设计不好C. 软件结构复杂D. 项目周期短

15. 关于软件缺陷,下列说法中错误的是( )。

A. 软件缺陷是软件中(包括程序和文档)存在的影响软件正常运行的问题。

B. 按照缺陷的优先级不同可以将缺陷划分为立即解决、高优先级、正常排队、低优先级

C. 缺陷报告有统一的模板,该模板是IEEE 729—1983制定的

D. 每个缺陷都有一个唯一的编号,这是缺陷的标识缺陷报告形式每个公司都有一套模板

16.下列软件缺陷产生的原因:abcd
A.软件自身的特点
B.团队合作
C.设计和实现问题
D.管理问题

17、缺陷产生的原因(D)

A、交流不充分及沟通不畅;软件需求的变更;软件开发工具的缺陷

B、软件的复杂性;软件项目的时间压力

C、程序开发人员的错误;软件项目文档的缺乏

D、以上都是

18、在下列描述中,关于一个软件缺陷状态完整变化的错误描述是( d )

A、打开——修复——关闭

B、打开——关闭

C、打开——保留

D、激活——修复——重新打开

19、下面哪一项不是软件缺陷产生的原因( B )。

A. 需求不明确        B. 测试用例设计不好    

C. 软件结构复杂      D. 项目周期短

20、下列( B )是关于软件缺陷的描述。

A.导致软件包含故障的人的行为

B.产品的异常情况

C.引起一个功能部件不能完成所要求的功能的一种意外情况

D.功能部件执行其规定功能的能力丧失

21、在软件生命周期的哪一个阶段,软件缺陷修复费用最低(A)

A、需求分析(编制产品说明书)

B、设计

C、编码

D、产品发布

22、以下那一种选项不属于软件缺陷(D)

A)软件没有实现产品规格说明所要求的功能

B)软件中出现了产品规格说明不应该出现的功能

C)软件实现了产品规格没有提到的功能

D)软件实现了产品规格说明所要求的功能但因受性能限制而未考虑可移植性问题

23、问题还没有解决,测试人员新报告的缺陷,或验证后缺陷仍然存在,这些缺陷所处的状态是 A

A激活状态B.非激活状态 C关闭状态D.已修正状态

24、软件缺陷的基本状态有 D

A 激活状态B.已修正状态 C.关闭或非激活状态D.以上全部

25、通常情况下,如下缺陷不能通过单元测试发现的是

A. 变量的初始值或缺省值有错误

B. 一个模块的功能是否会对另一个模块的功能产生不利影响

C. 提示的错误与实际的错误不相符

D. 输入的实际参数与形式参数的个数不相同

正确答案:B

26、导致软件缺陷的最主要的原因是( )

A. 软件系统越来越复杂,开发人员不可能精通所有的技术

B. 软件的需求说明书不规范

C. 硬件配置不对、缺乏,或处理器缺陷导致算术精度丢失

D. 软件设置不对、缺乏,或操作系统错误导致无法释放资源、工具软件的错误,编译器的错误等。

答案:B

27、关于缺陷报告处理流程的原则,下列说法不合理的是 (  )。

A.正常情况下,在提交开发人员修正Bug前需要有丰富测试经验的测试人员验证发现的缺陷是否是真正的Bug,并且验证Bug是否可以再现

B.每次对Bug的处理都要保留处理信息,包括处理人姓名、处理时间、处理方法、处理意见以及Bug状态

C.测试人员查询状态为Fixed的Bug,然后验证Bug是否已解决,如解决置Bug的状态为Closed,如没有解决置状态为Reopen。

D.对于无法再现的Bug,可以直接忽略,不用处理。

答案:D

28、下列不属于一个合格的缺陷报告需要包括的方面的是( )

(单选题)

A、 正确行为的描述

B、 发现版本问题

C、 问题重现的步骤

D、 问题出现的环境

答案: A

29、下列哪一项不是典型的缺陷状态( )(单选题)

A、 Deleted——已删除

B、 Reopen——再次打开

C、 New——新建

D、 Fixed——已修复

答案: A

30、通常情况下,如下缺陷不能通过单元测试发现的是(单选题)

A、 变量的初始值或缺省值有错误

B、 一个模块的功能是否会对另一个模块的功能产生不利影响

C、 提示的错误与实际的错误不相符

D、 输入的实际参数与形式参数的个数不相同

答案: B

31、通常情况下,关于缺陷报告,下列说法正确的是( )。(选择一项)(单选题)

A、 对于不可重现的错误,可以不用报告

B、 为了提高人们对缺陷的注意力,需要夸大一些缺陷的严重性

C、 细小的缺陷也应该报告

D、 测试人员不能引用他人的缺陷报告

答案: C

2.2 软件测试的分类

按测试的对象或范围分类:如底层测试/单元测试、接口测试/集成测试、系统测试、业务层的验收测试等(单元测试、集成测试、系统测试、验收测试)

按测试目的分类(测试类型):如功能测试、性能测试、可靠性测试、安全性测试、兼容性测试、回归测试等

根据测试过程中被测软件是否被执行:静态测试和动态测试

根据是否针对系统的内部结构和具体实现算法来完成测试(按软件测试用例的设计方法分):白盒测试和黑盒测试

按测试方法分类:精准测试、变异测试、蜕变测试、MBT等

软件测试顺序:功能测试、性能测试、可靠性测试、安全性测试。

功能测试: 测试主要验证程序的功能是否满足需求
自动化测试: 使用代码或工具代替手工,对项目进行测试

接口测试:使用代码或工具验证程序中的接口是否访问正常
性能测试:模拟多人使用软件,查找服务器缺陷

兼容性:浏览器(谷歌 苹果 火狐),操作系统(win 7 8 9),手机(分辨率,品牌);

习题

1、下列关于Web应用软件测试的说法中,正确的是(   A   )

A、Cookie测试是Web应用软件功能测试的重要内容(功能测试)

B、对于没有使用数据库的Web应用软件,不需要进行性能测试(需要进行性能测试)

C、链接测试是Web应用软件易用性测试的重要内容

D、Web应用软件安全性测试仅关注Web应用软件是能够防御网络攻击

2、以下哪种软件测试属于软件性能测试的范畴( B  )                                    

(性能测试:负载测试,失效测试,压力测试,狭隘的性能测试等)

A、接口测试   B、压力测试   C、单元测试   D、易用性测试

3、以下关于极限测试的说法中,正确的是(   A   )。

A、极限测试是一种针对极限编程软件测试

B、极限测试中所有的测试均由编码人员完成

C、与传统的软件测试相比,极限测试是一种更严格的测试

D、极限测试中只需要进行单元测试(极限测试包括集成测试,单元测试)

4、下列选项中,哪一项不属于安全测试( D)

A. 静态分析        B. 漏洞扫描     C. 渗透测试        D. 集成测试

5、下列选项中适合自动化测试的是(C)

A. 需求不确定且变化频繁      B. 产品设计完成后测试过程不够准确  

C. 项目开发周期长而且重复测试部分较多D. 项目开发周期短,测试比较单一

6、下列适用于性能测试的工具是(A )

A. Jmeter        B. Appium       C. Robotium         D. monkeyrunner

7、关于安全测试,下列说法中错误的是(C )

A. 安全测试主要是验证产品是否符合安全需求定义和产品质量标准     

B. 风险分析也属于安全测试的一种     

C. 与功能、性能缺陷不同,安全缺陷可以完全避免    

D. 安全测试要尽早测试、经常测试

8、功能性测试是根据( A)来设计测试用例。

A、软件的规格说明

B、设计文档

C、程序的内部逻辑

D、维护手册

9、软件长时间运行的测试,以期发现一些资源泄露等问题,这种测试类型一般是(D)
 A.强度测试 B.基准测试 C.负载测试 D.稳定性测试

10、所有的软件测试必须在实际使用环境下进行,否则结果无任何意义(B)
 A.正确 B.不正确
解析:压测不能在生产环境上进行

2.3 静态测试与动态测试

两者是互补的,缺一不可,先静后动交替进行

1、静态测试:指测试不运行的部分,只是检查和审核;不执行程序,而是通过人工评审、代码扫描/静态分析发现错误。

1、静态测试技术:适用于新开发的和重用的代码,通常在代码完成并无错误地通过编译或汇编后进行;

2、代码静态测试分为:人工自动化两种方式;

3、静态测试主要活动:代码评审采用工具进行扫描分析;评审和分析※

4、测试人员主要由:软件开发人员 开发小组成员组成;

5、编码的标准和规范:标准是建立起来和必须遵守的规则标准没有例外情况,规范是建议如何去做,推荐更好的工作方式。

PS:

1)标准比规范更严格:标准应严格遵守、规范是可选的,但应该遵守。※

2)坚持标准和规范的三个重要原因:可靠性、可读性/维护性、移植性。

3)标准由4个主要部分组成:标题、标准(规范)、解释说明、示例。

4)高级标准指产品普遍遵守的规则,例如外观和感受、支持的特性等;低级标准就是本质细节,如文件格式和网络通信协议等。

5)从某种意义上说,低级标准比高级标准更重要。

6、三个重要原因说明要坚持标准和规范:

1)可靠性,事实证明按照某种标准或规范编写的代码比不这样做的代码更加可靠,软件缺陷更少。

2)可读性和维护性,符合设备标准和规范的代码易于阅读、理解和维护,

3)移植性,代码经常需要在不同的硬件上运行,或者使用不同的编译器编译,如果代码符合标准,迁移到另一个平台就会相对容易,甚至完全没有障碍。

7、代码评审

1)代码审査是一种有效的测试方法。

2)代码中60%以上的缺陷可以通过代码审查(包括互査、走查、会议评审等形式)发现。

3)代码审查不仅能有效地发现缺陷,而且为缺陷预防获取各种经验,为改善代码质量打下坚实的基础。

4)即使没有时间完成所有代码的检查,也应该尽可能去做,哪怕是对其中一部分代码进行审查。

代码检查:
① 主要通过同行评审(Peer Review)来发现缺陷;
② 以会议的形式,团队成员一起检查代码,从而发现缺陷,或者改进优化代码。
③ 同行评审往往需要大量投入时间和人力资源。

a、当代码还米编译通过时,显然无法动态测试。
b、某些特定类型的缺陷,动态测试无法检测到。

④ 分类:审查、团队评审、走查、结对编程、同行桌查、轮查、特别检查   】

5)代码走查

代码互查是日常工作中使用最多的一种代码评审方式,比较容易开展,相对自由,是一种相对比较正式的代码评审过程

6)正式会议审查最有效

① 会议审査是一种最为正式的检查和评估方法,最早是由IBM公司提出,逐步检查源代码中有无逻辑或语法错误的办法来检测故障。可以认为它是拿代码与标准和规范对照的补充因为它不但需要软件开发者自查。后形成《评审报告》

② 代码检查的方式:评审会议

主持人:组织评审会议;讲解员:讲解被评审的工作产品;作者:被评审工作产品的提供者;评审员:评审工作产品;记录员:记录缺陷和决议;

③ 产出物:评审结果

正常:评审专家做好了评审准备,评审会议顺利进行,达到了预期目的,这成明确的评审结论,不需要再次评审。
延期:30%以上的评审专家并未做好评审准备,会议无法正常进行,需重新安排评审日程。
取消:初审阶段就发现工作产品中存在太多问题,需要作者进行修复,然后再进行第二次同行评审。

7)缺陷检查表

①检查过程所采用的主要技术是设计与使用缺陷检查表。这个表通常是把程序设计中发生的各种缺陷进行分类

②缺陷检查表会因项目不同而不同,在实际工作中不断积累完善。

使用缺陷检查表的的是防止人为的疏漏

8)代码评审会议流程
① 设计部门:提前向项目管理部门提交《设计和开发评审申请表》,经批准后进入计划评审会议阶段;
a、项目经理:根据申请表指定合适的会议主持人。
b、作者:提供软件制品,确保符合相关标准和规范。
c、评审主持人:规划本次评审会议、制订评审计划、检查入口标准、选择评审员、准备和分发评审材料。

eg:代码走查、需求评审、设计评审、技术评审、桌面检查。

(1)静态测试包括对软件产品的需求和设计文档、代码的评审(技术评审、文档评审等),以及对代码的静态分析等;静态测试方法一般不需要设计测试用例。

(2)管理评审 、流程评审不属于静态测试,而是属于质量保证(QA);

(3)在审查竞争产品时要注意的问题包括:规模、复杂性、测试性、质量和可靠性、安全性;

2、动态测试:通过运行程序发现错误。

eg:  1)黑盒测试   2)白盒测试(最重要  逻辑覆盖) 3)变异测试

变异测试:

(动态白盒):  是一种基于错误注入的测试方式,具体来讲就是人为在代码中注入错误,然后来观察现有的测试用例是否能够发现这些错误,如果能够发现说明测试用例是有效的,如果不能发现说明测试用例需要进一步完善和补充。

举例:变异体
变异体1:第4行修改为   for(i=1;i<=3;i++)
变异体2:第5行修改为 if ( i> atoi( argv[ r ] ) ) r=i;
变异体3:第5行修改为 if( atoi( argv[ i ])>= atoi( argv[ r ]) ) r = i;
变异体4:第5行修改为 if( atoi( arev [ r ] )>atoi( argv[ r ] ) ) r =i ;

(1)①评价用例的好否 ②微小的变化  ③找不等价变异

(2)变异测试>>评价测试用例,属于白盒,考察不等价变异

(3)变异测试的理论基础是:程序员能力假设、组合效应假设。

(4)对小条件进行改变,每一个改变叫一次变异。

(5)等价的变异不被称作变异。

2.3.1产品评审

评审的对象:需求文档、设计和代码;

1、通过软件评审,可以更早地发现需求工程、软件设计等各个方面的问题,大大减少大量的后期返工,将质量成本从昂贵的后期返工转化为前期的缺陷发现。

2、评审是对软件元素或者项目状态的一种评估手段,以确定其是否与期望的结果保持一致,并使其得到改进。 评审的主要形式:互为评审、走查 、会议评审 。

(1)走查: 采用讲解、讨论和模拟运行的方式进行的查找错误的活动。 检查要点是代码是否符合标准和规范,是否有逻辑错误。

① 走查中编写代码的程序员向5人小组或其他程序员和测试员组成的小组做正式陈述。

(2)审查:

① 正式审查的4个基本要素:确定问题、遵守规则、审查准备、编写报告。

② 初次正式审查最简单的方法是同事审查(伙伴审查)。

③ 检验是最正式的审查类型,具有高度组织化,要求每一位参与者都接受训练。

(3)会议审查 对于一些关键代码或新人写的代码,主要采取会议审查方式。

(4)代码走查与代码审查的比较:

相同:走查和审查要做到发现问题适当记录,避免现场修改。

区别:①正式性不同:代码走查:代码走查的讨论过程是非正式的;代码审查:代码审查是一种正式的评审活动。

②执行人不同:代码走查:代码走查由编写代码的程序员来组织讨论;代码审查:代码审查由高级管理人员来领导评审小组的活动。

③检查内容不同:代码走查:代码走查只检查代码中是否有错误;代码审查:代码审查除了检查代码中是否有错误,还要检查程序与设计文档的一致性。

3、评审解决问题:不正确的需求认识;丢掉的需求点;模糊的描述;多余的或没意义的需求;不一致的理解。

4、分类

1)需求评审的标准:正确性 完备性 易理解性 一致性 易测试性 易追溯性

如何做好需求评审:有明确的评审标准(如需求质量checklist);熟悉评审内容,为评审做好准备 ;该参加的人都需要参加;针对问题阐述观点,而非针对个人;从客户角度想问题,多问几个为什么;在会前或会后提出自己建设性的意见;对发现的问题跟踪到底;针对需求文档等报告问题;

2)设计和代码评审

解决的问题:是否有设计规范;系统架构设计的不合理 ;单点失效;数据不完整性、不一致性;缺乏可测试性;具体功能设计的问题;

PS:

1、 在软件设计阶段,测试的对象来自设计文档,主要采用的是评审的方式。

2、代码的静态分析主要采用工具进行,但人工的代码评审也不可或缺。

3、下列各项中,评审方法是按照正式化程序逐渐增强排列的是 (   D  )

A、正式评审、小组评审、走查、结对评审、临时评审

B、临时评审、走查、结对审查、轮查、正式审查

C、临时评审、走查、小组评审、结对审查、正式审查

D、临时评审、轮查、结对审查、走查、正式审查

4、测试计划评审会不需要以下哪个角色的人参与( )

(单选题)

A、 项目经理

B、 SQA负责人

C、 财务人员

D、 测试组

答案: C

2.3.2静态分析

人工检测:人工检测偏重于编码风格、质量的检验,对设计、代码进行分析,有效地发现逻辑设计和编码错误。

计算机辅助静态分析:利用静态分析工具对被测程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。

代码静态分析:通过词法分析(Lexer)、语法分析(parser)、控制流分析、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、质量要求等。

静态分析技术可以采用模拟程序执行的技术,如符号执行、抽象解释、值依赖分析等,并采用数学约束求解工具进行路径约减或者可达性分析以减少误报、增加效率。

2.3.3验证与确认

软件测试是由“验证”和“有效性确认”活动构成的整体V&V;

1、验证:检验软件是否已正确地实现了产品规格说明书所定义的系统功能和特性。验证过程提供证据表明软件相关产品与所有生命周期活动的要求(如正确性、完整性、一致性和准确性等)相一致,相当于以软件产设计规格说明书为标准进行软件测试的活动。

验证是否满足生命周期过程中的标准、实践和约定,验证判断每个生命周期活动是否已级完成,以及为是否可以启动其他生命周期活动建立一个基准。

通俗讲:是否正确地构造了软件?即是否正确地做事,验证开发过程是否遵守已定义好的内容。验证产品满足规格设计说明书的一致性?

2、有效性确认:要求更高,要能保证所生产的软件可追溯到用户需求的一系列活动。确认过程提供证据表明软件是否真正满足客户的需求,一切从客户出发。

通俗讲:是否构造了正是用户所需要的软件?即是否正在做正确的事。验证产品所实现的功能是否满足用户的需求?

3、区别验证是检验开发出来的软件产品和设计规格说明书的一致性,即是否满足软件厂商的生产要求。但设计规格说明书本身就可能存在错误,所以即使软件产品中某个功能实现的结果和设计规格说明书完全一致,也可能并不是用户所需要的。因为设计规格说明书很可能一开始就对用户的某个需求理解错了,所以仅进行验证测试是不充分的,还要进行确认测试。确认就是检验产品功能的有效性,即是否满足用户的真正需求。

PS: 确认测试主要依据软件需求规格说明书检查软件的功能、性能及其他特征是否与用户需求一致。

习题:

1、软件测试技术可以分为静态测试和动态测试,下列说法中错误的是(  D   )。

A、静态测试是指不运行实际程序,通过检查和阅读等手段来发现程序中的错误。

B、动态测试是指实际运行程序,通过运行的结果来发现程序中的错误。

C、动态测试包括黑盒测试和白盒测试。

D、白盒测试是静态测试,黑盒测试是动态测试。(白盒测试有静态测试,也有动态测试)

2、在程序测试中,用于检查程序模块或子程序之间的调用是否正确的静态分析方法是(  D  )。

A、操作性分析       B、可靠性分析     C、引用分析       D、接口分析

3、软件验证和确认是保证软件质量的重要措施,它的实施应该针对( B   )。

A、程序编写阶段         B、软件开发的所有阶段(软件验证和确认贯穿整个软件所有阶段)

C、软件调试阶段         D、软件设计阶段

4、按照是否执行程序划分,测试类型可以分为( D)

A. 黑盒测试、白盒测试和灰盒测试      B. 单元测试和集成测试 

C. 手工测试和自动化测试              D. 静态测试和动态测试

5、测试工程师的工作范围会包括检视代码、评审开发文档,这属于( B)

A.动态测试 B.静态测试

C.黑盒测试 D.白盒测试

6、(多选题)报告bug时注意的问题有()

A.注意测试结果

B.提供软件测试环境

C.附加必要的截图和文件

D.不要出现错别字

答案:BCD

7、(多选题)对Bug进行评审的代表方有()

A.产品代表

B.开发代表

C.设计代表

D.测试代表

答案:BCD

2.4 主动测试与被动测试

1、主动测试中,测试人员和被测试对象之间发生直接相互作用的关系,而且被测试对象完全受测试人员控制,被测试对象处于测试状态,而不是实际工作状态。

2、在主动测试中,由于被测试对象受人为因素影响较大,而且一般是在测试环境中进行,是在软件产品实际运行环境中进行,所以主动测试不适应产品在线测试

3、为了解决产品在测试,被动测试方法应运而生,被动测试方法中,软件产品运行在实际环境中,测试人员干预产品的运行,而是被动地监控产品的运行,通过一定的被动机制来获得系统运行的数据。eg:  被动测试适合性能测试和在线监控,嵌人式系统,大规模的复杂系统的性能测试中

4、在主动测试中,测试人员需要设计测试用例,尽力设法输入各种数据。

被动测试中系统运行过程中的各种数据会自然而然地产生,测试人员不需要设计测试用例,只需要设法获得系统运行的各种数据,但数据的完整性得不到保证。在被动测试中,关键在于建立监控程序(代理),并通过数据分析掌握系统的状态

2.5 黑盒测试与白盒测试


测试时不适用穷尽性测试,不现实而且依然会存在错误。
功能性测试(黑)和结构性测试(白)的比较:

功能性测试使用规格说明来设计测试用例,结构性测试使用程序源代码(程序实现)来设计测试用例。如果只有结构性测试,那么无法认识到规格说明书描述的功能是否被实现;如果只有功能性测试,那么无法认识到程序中实现的在规格说明书中没有被描述的功能行为。因此,明智的组合会带来功能性测试的置信,以及结构性测试的度量。
 

1、白盒测试在单元测试、回归测试阶段,部分在集成测试

(1) 白盒测试(透明盒/结构测试)中软件测试员可以访问程序员的代码,并通过检查代码来协助测试。

结构性测试:白盒,根据程序实现来设计测试用例,对逻辑路径进行测试,检查程序的状态与预期是否一致。    

路径测试(DD-路径、基路径测试)、数据流测试(定义-使用、基于程序片)    

优点:1.对特定程序部分测试,检查每条分支路径。2.揭示隐藏在代码中的错误,较彻底和充分。 缺点:1.工作量大,成本高,通常只用于单元测试。2.无法检测遗漏路径和数据敏感性错误。3.不能验证规格说明书的正确性。4.无法对规格说明中未实现的部分测试

(2)白盒测试又称逻辑驱动测试, 是把功能外的盒子打开,去测试里面的源代码, 重点关注程序逻辑对不对。在进行白盒测试之前,一定要根据说明书建立黑盒测试用例

(3)白盒测试也称为结构化测试或逻辑驱动测试-->已知产品的内部工作过程,清楚最终生成软件产品的计算机程序结构及其语句,按照程序内部的结构测试程序,测试程序内部的变量状态、逻辑结构、运行路径等,检验程序中的每条通路是否都能按预定要求正确工作,检查程序内部动作或运行是否符合设计规格要求,所有内部成分是否按规定正常进行。

(4)白盒测试不仅可以应用在程序的单元测试,覆盖程序的语句、分支或逻辑路径,而且可以扩展到更高层次的控制流路径。主要方法是 逻辑覆盖 和基本路径测试(路径覆盖)

(5)白盒测试可以对程序的每一行语句、每一个条件或分支进行测试,具有很强的针对性,可以知道测试的覆盖程度。

(6)基本原则:

1)在执行测试时,先考虑代码行和分支被覆盖;

2)再考虑完成所有逻辑条件分别为真值(True)和假值(False)的测试;

3)如果有更高的质量要求,测试对象流图中所有独立路径至少被运行一次;

4)检查内部数据结构,注意上下文的影响,以确保其测试的有效性

(7)不隶属于白盒测试方法的是健壮性测试。

(8)桩和驱动程序一样都属于白盒测试技术:

①驱动程序是控制和操作被测试软件的工具。   

②桩与驱动程序本质上是相反的,桩不控制或操作被测试软件;但桩接收或响应软件发送的数据。

当软件与外部设备进行通信时经常用到桩,可以使测试在没有硬件的条件下进行。

(9)白盒测试方法:代码检查法、静态结构分析法、域测试、静态质量度量、逻辑覆盖法、基本路径测试法、路径覆盖、程序变异。

(10)不属于白盒测试的技术是 ( C) 。      

A、语句覆盖     B、判定覆盖

C、边界值分析 D、基本路径测试

白盒测试:语句覆盖,判断覆盖,条件覆盖,判断/条件覆盖,组合覆盖,路径覆盖

变异测试

①、程序变异的用途不包括( )

A. 度量测试用例的缺陷检测能力B. 强制出现特定条件以便执行测试

C. 减少测试的工作量D. 程序调优等

正确答案:C

② 变异测试也称为“变异分析”,是一种对测试数据集的( )进行评估的技术。

A. 有效性、冗余性B. 冗余性、充分性C. 有效性、充分性D. 有效性、充分性、冗余性

正确答案:C

2、黑盒测试在软件测试的各个阶段。

(1)黑盒测试(功能性测试/行为测试)中软件测试员无法看到盒子里的软件是如何运行的,只知道程序做了什么;黑盒测试的数据来源于软件规格说明

功能性测试 :黑盒,依据规格说明书,程序看作函数:f 程序P(输入)=功能结果。  

方法: 边界值、健壮性、最坏情况、特殊值、输入等价类、输出等价类、基于决策表的测试。 

优点:1.与实现无关,实现变化测试用例依然可用。2.确定功能后,测试用例开发与实现并行,减少时间。

缺点:1.测试用例之间冗余。2.存在未测试的漏洞。

(2)黑盒测试目标:测试程序的功能或接口,检查是否符合需求规格说明书

(3)黑盒测试是基于输入域的测试方法。

(4)黑金测试方法也称为 数据驱动测试方法 或 基于需求规格的测试。

在测试时,把程一个不能打开的黑盒子,在完全不考虑程序内都结构和内部特性的情况下,测试人员针对软件直接进行测试。完全不考虑程序内部结构和代码实现,测试软件的功能需求,只关心软件的输入数据和输出数据。直接获得用户体验,从用户的角度或扮演用户角色来验证软件功能,验产品每个功能是否都能正常使用,评估软件的使用质量。

(5)用黑盒的几种情况:

① 有错误的功能或遗漏了某项功能 ;

② 不能正确地接收输人数据,输出错误的结果;

③ 功能操作逻辑不合理、不够方便;

④ 界面出错、扭曲或不美观;

⑤ 安装过程中出现问题,安装步骤不清晰、不够灵活;

⑥ 系统初始化问题等。

(6)黑金测试方法时,穷举测试也是不可能的,即不可能完成所有的输入条件及其组合测试,覆盖率难以测定或达到一定标准就难以提高。

(7)下图 左黑右白:辨析:

① 黑盒测试是根据软件的规格说明来设计测试用例

    白盒测试根据程序的内部逻辑来设计测试用例。

② 黑盒测试只考虑测试需求规格,他不保证实现的所有部分是否被测试到;

    白盒测试只考虑测试软件产品,他不保证完整的需求规格是否被满足;

③软件的整体功能和性能进行黑盒测试;软件的源代码采用白盒测试。

(8)两者结合:

1)静态白盒测试(走查):在正式审查中验证软件时应该查找的问题:数据引用错误、数据声明错误、计算错误、比较错误、控制流程错误、子程序参数错误、输入/输出错误、其他检查。静态白盒是指通过正式审查检验检查代码的细节。

①静态白盒测试:在不执行软件的条件下有条理地仔细审查软件设体系结构和代码,从而找出软件缺陷的过程,有时称为结构化分析。

②进行静态白盒测试的首要原因是尽早发现软件缺陷

③ 静态白盒测试的主要任务(方式):a、走查、复审、评审程序源代码;b、检查数据组织、环境设置和软件配置项。

④ 静态白盒测试检查目标:代码与设计文档的一致性、代码的规范性和可读性、代码的逻辑表达正确性、代码结构的合理性

代码走重:对代码逐行、逐变量、逐函数的检查,以确保代码符合预期、逻辑正确、可读性好、可维护性高等标准。

2)动态白盒测试(控制流 结构化测试):动态白盒测试是指在看到软件的工作方式时, 根据获得的信息对软件进行测试。 利用查看代码功能(做什么)和实现方式(怎么做)得到的信息来确定哪些需要测试、哪些不需要测试、如何开展测试。

② 动态白盒测试的主要任务:分析程序代码,设计测试用例,通过驱动程序和桩程序来驱动、调用被测程序的运行。

③ 动态白盒测试可以用于单元测试、集成测试和部分性能、可靠性、恢复性测试。

④ 动态白盒测试不仅查看代码运行情况,还包括直接测试和控制软件。

⑤ 动态白盒测试的目标是寻找软件缺陷,调试的目标是修复软件缺陷。

调试:】

调试与单元测试在工作中常交织在一起,操作上有一定的相似性,但两者的目的完全不同

测试是为了找出代码中存在的缺陷,通过某种测试覆盖要求,检查代码或运行代码以验证是否符合规范、符合设计要求等;

调试是为了修正已发现的缺陷,即针对已发现的缺陷来寻找引起缺陷的原因,如通过设置断点跟踪程序来检查变量状态,以判断是不是某个变量取值不对而导致问题的出现。

① 软件调试的目的是找出错误并改正;软件测试的目的是发现程序错误。

② 调试在测试之后,测试的对象可以是文档和代码,而调试的对象只能是代码

    调试是随机性的,测试是有目的性的。

③ 调试应该由编制该源程序的程序员完成。

④ 根据软件测试的概念,软件的开发与测试应该分离开来。

所以测试最好由第三方测试机构来做,而调试工作需要对源代码的熟悉程度比较高,最好由程序员来执行。

⑤ 在下列描述中,关于测试与调试的说法错误的是( D)

A、测试是显示错误的行为;而调试是推理的过程;

B、测试显示开发人员的错误。调试是开发人员为自己辩护;

C、测试能预期和可控。调试需要想象、经验和思考;

D、测试必须在详细设计已经完成的情况下才能开始;没有详细设计的信息调试不可能进行。

⑥ 某次程序调试没有出现预计的结果,下列( B)不可能是导致出错的原因。

A.变量没有初始化 B.编写的语句书写格式不规范

C.循环控制出错 D.代码输入有误

⑦ 对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档,这种行为属于( B )

A.测试 B.调试 C.回归测试 D.单元测试

⑧ 软件调试的目的是(A)。

A、找出错误所在并改正之

B、排除存在错误的可能性

C、对错误性质进行分类

D、统计出错的次数

⑨ 调试应该由(B)完成。

A)与源程序无关的程序员

B)编制该源程序的程序员

C)不了解软件设计的机构

D)设计该软件的机构

⑩ 测试是有计划的,需要进行测试设计;调试是不受时间约束的。

3)静态黑盒测试(非技术文档测试)是指检查产品说明书,并在软件编写之前找出问题。

4)动态黑盒测试(行为测试):不深入代码细节测试软件的方法。动态黑盒测试是指在不了解软件如何工作的前提下进行测试

补充知识点:

灰盒测试

在集成测试阶段(主黑辅白),将基于功能的和基于实现的测试方法结合在一起的动态测试类型称为灰盒测试。

灰盒测试把黑盒测试和白盒测试的界限打乱了,仍然把软件当作黑盒来测试,但通过简单查看软件内部工作机制作为补充。

网页测试适合用灰盒测试。HTML和网页可以视为灰盒子。HTML不是编程语言,它只是文字和图片的标记系统。

5)烟雾测试、黑盒测试在系统测试阶段。

习题:

1、对程序的逻辑结构、路径与运行过程进行的测试称为_白盒测试

1. 软件测试技术可以分为静态测试和动态测试,下列说法中错误的是( )
  A. 静态测试是指不运行程序,通过检查和阅读等手段来发现程序中的错误。
  B. 动态测试是指实际运行程序,通过运行的结果来发现程序中的错误。
  C. 动态测试包括黑盒测试和白盒测试。
  D. 白盒测试是静态测试,黑盒测试是动态测试。
参考答案:D

2. 划分软件测试属于白盒测试还是黑盒测试的依据是( )
  A. 是否执行程序代码
  B. 是否能看到软件设计文档
  C. 是否能看到被测源程序
  D. 运行结果是否确定
参考答案:C

3.( )把黑盒测试和白盒测试的界限打乱了。
  A. 灰盒测试 B. 动态测试 C. 静态测试 D. 失败测试
参考答案:A

4. 在软件测试用例设计的方法中,最常用的方法是黑盒测试和白盒测试,其中不属于白盒测试所关注的是( )
  A. 程序结构 B. 软件外部功能 C. 程序正确性 D. 程序内部逻辑
参考答案:B、白盒测试关注于程序的内部逻辑、结构和正确性,而不涉及具体软件的外部功能。白盒测试是基于源代码和程序内部实现的测试方法,目的是通过测试覆盖代码路径、验证程序的逻辑正确性和结构是否符合预期

5.下列哪项不属于黑盒测试的优点( )
  A. 不需要源代码
  B. 测试简单易行
  C. 可以对代码进行有针对性的测试
  D. 可以发现软件功能上的问题
参考答案:C 在黑盒测试中,测试人员不需要了解或访问源代码,因此无法直接对代码进行有针对性的测试。黑盒测试是基于软件功能和需求规格说明的测试,而不涉及内部逻辑或设计。

6、在进行静态白盒测试的过程中,正式审查的基本要素不包括(D)

A:确定问题 B:遵守规则 C:编写报告 D:解决问题

确定问题:审查的目的是找出软件的问题-不仅是出错的项目,还包括遗漏的项目。要注意对事不对人。

遵守规则:要遵守一套固定的规则,规则可能设定要审查的代码量、花费多少时间、哪些内容要做评价等。

准备:每一个参与者都为审查做准备,并尽自己的力量。 编写报告:审查小组必须做出审查结果的书面总结报告,并使报告便于开发小组的成员使用

7、某次程序调试没有出现预计的结果,下列( B )不可能是导致出错的原因。

A、变量没有初始化     

B、编写的语句书写格式不规范

C、循环控制出错

D、代码输入有误

8、用白盒测试中的逻辑覆盖法设计测试用例时,在下列覆盖中,(  D   )是最强的覆盖准则。

A. 语句覆盖       B. 条件覆盖      C. 判定-条件覆盖   D. 路径覆盖

9、单元测试主要的测试技术不包括(D   )

A. 白盒测试        B. 功能测试     C. 静态测试        D. 以上都不是

10、下列属于黑盒测试方法的有( D)

A. 等价类划分法       B. 边界值法        C. 错误推测法         D. 以上都是

11、根据是否查看源代码执行测试,测试可以分为( A)

A. 黑盒测试. 白盒测试和灰盒测试      B. 单元测试和集成测试 

C. 手工测试和自动化测试              D. 功能测试和性能测试

12、下列( B)是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构,且不包含复合条件。

A.DD-路径图 B.控制流图

C.MM-路径图 D.模块调用图

13、大多数实际情况下,性能测试的实现方法是(A)

A)黑盒测试 B)白盒测试 C)静态分析 D)可靠性测试

14、除了测试程序外,黑盒测试还适用于对下列 阶段的软件文档进行测试。

A、 需求分析应用范围

B、 编码

C、 总体设计

D、 详细设计

答案: A

15、黑盒测试也称为功能测试,黑盒测试不能发现 (单选题)

A、 是否存在冗余代码

B、 终止性错误

C、 输入是否正确接受

D、 界面是否错误

答案: A

16、关于黑盒测试正确的是 (多选题)

A、 黑盒测试可以检测出接口错误

B、 黑盒测试可以检测出布尔算子错误

C、 黑盒测试可以检测出数据结构和外部数据库存取中的错误

D、 黑盒测试可以检测出不正确或漏掉的功能

答案: ACD

17、黑盒测试也称为功能测试。黑盒测试可以发现( )

(多选题)

A、 终止性错误

B、 输入是否正确接收

C、 界面是否有误

D、 是否存在冗余代码

答案: ABC

18、下列关于黑盒测试与白盒测试技术的说法中错误的是( )。

(单选题)

A、 达到预定的代码覆盖率是白盒测试用例设计完成的标准

B、 测试员不需要了解源代码的内部结构也可以执行黑盒测试

C、 成功对某模块执行白盒测试后,发现所有测试用例均运行成功,说明该模块已实现了预定的需求

D、 黑盒测试主要是测试软件的功能需求与非功能需求是否正确的实现

答案: C

19、黑盒测试用例设计不需要依赖 ( )(单选题)

A、 需求规格说明书

B、 测试计划

C、 程序代码

D、 概要设计说明书

答案: C

20、下列关于白盒测试与黑盒测试的说法中错误的是( )。(选择一项) (单选题)

A、 用白盒测试来验证单元的基本功能时,经常要用黑盒测试的思考方法来设计测试用例

B、 仅仅通过白盒测试,或仅仅通过黑盒测试都不能全面系统地测试一个软件

C、 白盒测试适用于软件测试的各个阶段

D、 在黑盒测试中使用白盒测试的手段,常被称为“灰盒测试”

答案: C

3. 按照是否需要知道被测试程序的内部结构,测试方法可以分为_________和_________。
参考答案:黑盒测试       白盒测试

4、如果没有软件规格说明或需求文档,可以进行动态黑盒测试吗?为什么?

不行。因为黑盒测试是基于软件规格说明的测试。

2. 请分析黑盒测试、白盒测试、静态测试、动态测试之间的关系。

① 黑盒测试一定都是动态测试, 因为黑盒测试都需要运行被测试程序;
② 白盒测试既有静态测试, 如代码检查, 静态结构分析等, 也有动态测试, 如逻辑覆盖测试等;
③ 动态测试有可能是黑盒测试, 如根据软件规格说明书进行功能测试,也有可能是白盒测试,如针对源程序做逻辑覆盖测试;
④ 静态测试只可能是白盒测试, 因为黑盒测试一定都是动态测试, 都需要运行被测试程序

3. 试对比分析黑盒测试、白盒测试各自的优缺点。

优点:

黑盒:
① 比较简单,不需要了解程序的内部结构。与软件的内部实现无关。不需要了解程序的内部的代码及实现
② 从用户角度出发,指导用户使用的哪些功能。能很容易的知道用户会用到哪些功能,会遇到哪些问题
③ 基于软件开发文档,能与文档测试相结合。所以也能知道软件实现了文档中的哪些功能
④ 在做软件自动化测试时比较方便。
白盒:
① 帮助软件测试人员增大代码的覆盖率。 提高代码的质量,发现代码中隐藏的问题
缺点:
黑盒 :
1)不可能覆盖所有的代码, 覆盖率较低,大概只能达到总代码量的30%
2)自动化测试的复用性较低。
白盒 :
1)程序运行会有很多不同的路径,不可能测试所有的运行路径
2)测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求
3)系统庞大时,测试开销会非常大。

6. 请分析动态白盒测试与黑盒测试的区别。

动态白盒测试: 利用查看代码功能和实现方式得到的信息来设计和执行测试, 也叫结构测试;测试程序接口与结构, 测试依据软件程序, 对程序内部特定部位进行覆盖测试, 无法检验程序外部特性.
黑盒测试: 已知产品的功能设计规格, 可以进行测试证明每个实现了的功能是否符合要求, 测试功能, 测试依据需求规格说明书, 能站在用户的立场上进行测试, 不能测试程序内部特定部位, 如程序有误, 则无法发现.
即:动态白盒测试设计测试用例依据是程序的逻辑结构,动态黑盒测试设计测验用例依据是程序规格说明。

2.6 软件测试层次

软件测试的四个层次

各层次任务

分段测试指—>单元测试和集成测试。

软件测试的4个阶段:

  • 单元测试:模块测试,最小单位的测试
  • 集成测试:综合测试,揭示接口规约中不够完整或错误的地方
  • 系统测试:发现软件与需求不一致的地方
  • 验收测试:受客户控制,客户设计测试用例,生产中实际数据进行的测试

习题:

1.在软件测试阶段,测试步骤按次序可以划分为以下几步:(   A   )

A、单元测试、集成测试、系统测试、验收测试

B、验收测试、单元测试、系统测试、集成测试

C、单元测试、集成测试、验收测试、系统测试

D、系统测试、单元测试、集成测试、验收测试

2、下列有关测试过程V模型的说法中,正确的是( B  )

A、验收测试应确定成程序的执行是否满足软件设计的要求

(单元测试和集成测试应确定成程序的执行是否满足软件设计的要求)

B、系统测试应确定系统功能和性能的质量特性是否达到系统要求的指标

C、单元测试和集成测试应确定软件的实现是否满足用户需要或合同的要求

(验收测试确定软件的实现是否满足用户需要或合同的要求)

D、集成测试在编码结束前就可以开始

3、软件测试是软件质量保证的重要手段,下述哪种测试是软件测试的最基础环节( B)

A.功能测试

B.单元测试

C.结构测试

D.验收测试

4.软件测试按照测试层次可以分为( C )

A.黑盒测试、白盒测试

B. 功能性测试和结构性测试

C.单元测试、集成测试和系统测试

D、动态测试和静态测试

5、关于下列各测试阶段特点的说法中错误的是( )。(选择二项)

(多选题)

A、 单元测试是最小单位的测试,其测试依据为程序流程图

B、 验收测试与系统测试的区别在于:验收测试是公司内部进行的测试,而系统测试是以用户为主的测试

C、 集成测试可以发现单元测试中无法发现的资源竞争问题

D、 确认测试往往在系统测试的前期进行

答案: AB

2.6.1 单元测试

单元测试的上课补充:

1、先静态测试,后动态测试,反复交替。

2、测试对象: 粒度,孤立——结构化编程(函数、过程);面向对象编程(类)。

3、测试目的:尽早发现设计或实现中的逻辑错误,便于问题的定位和解决。

4、测试方法:以白盒测试为主、结合黑盒测试方法。允许多个测试单元并行展开。

1、单元测试的主要依据是软件需求规格说明书,软件详细设计说明书,同时参考相关集成方案

2、单元测试一系列活动包括

1)建立单元测试环境,包括在开发集成环境。2)测试脚本(测试代码)的开发和调试。3)测试执行及其结果分析。

3、在单元测试中,要关注以下主要内容

(1)目标:确保模块被正确地编码;
(2)依据:需求+设计,详细设计描述;
(3)过程:设计+开发+结果分析,经过设计、脚本开发、执行、调试和分析结果等环节;
(4)执行者:程序开发人员+测试人员共同完成;
(5)测试方法:白盒+黑盒,包括代码控制流和数据流分析方法,结合参数输人域的制试方法;

(6)测试脚本的管理:版本管理,可以按照产品代码管理的方法进行类似的配置管理(并人代码库),包括代码评审、版本分支、变更控制等;
(7)如何进行评估:通过代码覆盖率分析工具来分析测试的代码覆盖率、分支或条件覆盖率。

4、单元测试的一般准则

(1)软件单元功能与设计需求一致。
(2)软件单元接口与设计需求一致。
(3)能够正确处理输入和运行中的错误。
(4)在单元测试中发现的错误已经得到修改并且通过了测试。
(5)达到了相关的覆盖率的要求。
(6)完成软件单元测试报告。

5、单元测试的内容:

(1)单元独立执行路径的测试:检查每一条独立路径保证语句至少执行一次。

(2)单元局部数据结构的测试:局部数据结构往往是错误的根源,应仔细设计测试用例。

(3)单元接口测试:只有在数据能正确输人(如函数参数调用)、输出(如函数返回值)下,其他测试才有意义。

(4)单元边界条件的测试:检查临界数据正确性【普通和合法非法数据,边界合法非法数据】

(5)单元容错性测试:预设各种出错处理是否正确有效【①输出的出错信息难以理解;②记录与实际不符;③在程序自定义的出错处理代码之前系统介入;④异常处理不当;⑤错误陈述未能提供足够的定位出错消息】

(6)内存分析:内存泄漏会导致系统运行的崩溃;

6、类测试

1、面向对象的单元测试是对一个基类或其子类进行测试,因为类是面向对象软件基本单位

2、对于类的单元测试可以看作是对类的成员函数进行测试。一般不会对类的每个成员及方法进行测试。

3、一般不会针对成员变量的定义进行单元测试,一般也不需要对get/set方法进行单独测试,但对于核心或重要的方法需要进行全面的单元测试。对单个方法的测试类似于对传统软件的单个函数的测试。

4、类测试要验证类的实现是否和该类的说明完全一致。如果类的实现正确,那么类的每个实例的行为也应该是正确的。

5、由于继承与多态的使用,对于类的测试通常不能仅限定在子类中定义的成员变量和成员方法上,还需要考虑父类对子类的影响。

6、子类对父类中的多态方法的覆盖应该保持父类对该方法的定义说明。

7、在最复杂的情况下,对于子类的测试可能只能采用展平测试的策略。展平后的类可能很大,测试的代价也较高。
【展平测试是指将子类自身定义的成员方法与成员变量以及从父类继承来的成员方法与成员变量全部放在起组成一个新类】

7、分层单元测试

1)Action层即表示层的单元测试:主要用于接收页面传来的参数,然后调用业务逻辑层的封装方法,最后负责跳转到相应的页面。

2)使用Mock对象是隔离外部依赖的一个有效方法,Mock就是模拟,模拟测试时所需的对象及测试数据。必须启动服务器对Action类进行单元测试。

3)StrutsTestCase 是Junit TestCase 类的扩展,提供基于 Struts 框架的代码测试。

4)数据访问层的单元测试:即业务逻辑层一般用于处理比较复杂的逻辑,也用于 DAO层的数据操作。对于简单的业务逻辑可用JUnit测试,对复杂的逻辑可用Meck对象模拟测试

1、单元测试针对程序系统中的最小单元---代码段,程序模块或组件进行测试,一般和编码同步进行。主要采用白盒测试方法,辅之以黑盒测试;单元测试主要测试模块内程序的逻辑功能。

单元测试的对象可以是软件设计的最小单位——一个具体函数或一个类的方法,也可以是一个功能模块、组件。被测试的单元能够实现一个特定的功能,具有一定的独立性,又通过明确的接口定义与其他单元联系起。

2、从程序的内部结构出发设计测试用例,检查程序模块或组件的已实现的功能与定义的功能是否一致、以及编码中是否存在错误,通常要编写驱动模块和桩模块

3、单元测试以详细设计说明书为指导,测试源程序代码。

4、单元测试一般由编程人员测试人员共同完成,而以开发人员为主。

5、单元测试包括代码评审,代码评审可以发现程序50%~70%代码的缺陷。单元测试属于代码级的动态测试,代码级的测试除了测试其功能性外,还需确保代码在结构上可靠、健全并且能够有良好的响应。只进行静态测试是不够的,必须要单元进行动态测试。

6、单元测试:需要从程序内部结构出发设计测试用例,又称模块测试。单元测试检查代码是否符合设计和规范,有利于将来代码的维护。

单元测试测试内容:功能测试,语句和分支覆盖率,模块设计是否合理,输入和输出接口测试,内部数据流测试,其它要特定要求的测试。

7、单元测试(模块测试):在底层进行的测试。单元测试中设计测试用例的依据是详细设计规格说明书。单元测试不测试模块在功能的错误。

单元测试的主要目标:检验各单元模块是否被正确地编码,即验证代码和软件系统设计的一致性,但单元测试的目标不仅测试代码的功能性,还需确保代码在结构上可靠且健壮

8、单元测试环境:

1)驱动程序:也称驱动模块,模拟被测单元的上一层程序能够调用被测模块,驱动模块接收测试数据,调用被测模块并把相关的数据传送给被测模块;

2)桩程序:也称桩模块,用以模拟被测模块工作过程中所调用的下层模块模块由被测模块调用,一般只进行很少的数据处理,如打印人口和返回以便于检验被测模块与其下级模块的接口。

9、在单元测试中,需要为被测模块设计驱动模块和模块。驱动模块用来模拟被测模块的上级调用模块,桩模块用来代替被测模块所调用的模块。

10、单元测试不通过的标准

1)严重bug密度大于15/Kloc;

2)存在重大结构设计问题,修改会导致20%以上的函数发生变化;

3)关键功能没有设计,修改会导致20%以上的函数发生变化。

11、在对具有层次结构的大型软件进行单元测试时,有一种方法是从上层模块开始,由上到下进行测试。此时,用于代替被测模块调用的子模块的是桩模块。

12、单元测试(模块测试)的阶段:①编程阶段;②程序员自行测试代码;③是否实现详细设计说明书中规定的功能;④发现编程和详细设计说明书中的错误;⑤计划在详细阶段定义。

13、单元测试主要从下面5个基本特征进行测试:模块接口局部数据结构边界条件重要执行路径出错处理

14、自底向上单元测试的策略是首先对模块调用图上的最底层模块进行测试。

15、验证软件单元是否符合软件需求与设计的测试称为_单元测试

16.单元测试通过的标准是什么?(ABC)

A:程序通过所有的单元测试用例

B:语句覆盖流程达到100%

C:分支覆盖率达到85%

17. 在单元测试中,所谓单元是如何划分的?

单元测试的对象通常是软件设计的最小逻辑单元,单元的划分在面向过程的结构化程序中一般是函数或子过程,在面向对象的程序中可以是类或类的成员函数。

18.    简述单元测试的主要任务。

模块接口测试,局部数据结构测试,路径测试,错误处理测试,边界测试

19. 什么是驱动模块和桩模块?为下面的函数构造一个驱动模块。

int divide(int a,int b)

{

         int c;

        if (b==0) {printf(“除数不能为 0”); return 0;}

         c=a/b;

        return c;

}

解:驱动模块(driver):用以模拟被测模块的上级模块,它接收测试数据,把这些数据传送给被测模块,启动被测模块,最后输出实测结果。

桩模块(stub):也称为存根程序,用以模拟被测模块工作过程中所调用的子模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。

void main(){
int x,y,z;

scanf(“%d,%d”,&x,&y);

z=divide(x,y);

Printf(“%d”,z);

}

20、单元测试时,调用被测模块的是( C )。

A、桩模块 (被测调用的模块)      B、通信模块         C、驱动模块        D、代理模块

21、下面的哪一项测试步骤中需要进行局部数据结构测试( A )

A. 单元测试 B. 集成测试 C. 验收测试  D. 系统测试

22、单元测试的主要任务不包括( B)。

A.出错处理 B.全局数据结构

C.独立路径 D.模块接口

23、单元测试中用来模拟实现被测模块需调用的其他功能模块的是( b )。

A.驱动模块 B.桩模块

C.主控模块 D.真实的被调用模块

24、软件测试是软件质量保证的重要手段,下述哪种测试是软件测试的最基础环节?(B)
A.集成测试 B.单元测试 C.目的测试 D.确认测试
单元测试是对最小可测试单元的检查和验证

25.单元测试主要针对模块的几个基本特征进行测试,该阶段不能完成的测试是(A)

A)系统功能

B)局部数据结构

C)重要的执行路径

D)错误处理

26、单元测试中设计测试用例的依据是(D)

A)概要设计规格说明书 

B)用户需求规格说明书

C)项目计划说明书

D)详细设计规格说明书

27、在对具有层次结构的大型软件进行单元测试时,有一种方法是从上层模块开始,由上到下进行测试。此时,用于代替被测模块调用的子模块的是(A)

A 桩模块 B.底层模块C.驱动模块D.主模块

28、单元测试时,调用被测模块的是(C)

A桩模块 B.通信模块C驱动模块 D.代理模块

29、自底向上单元测试的策略是首先对模块调用图上的(A)模块进行测试。

A. 最底层 B.下一层C.最高层 D.上一层

20、单元测试与系统测试的区别是(A)

A单元测试通常采用白盒测试方法,而系统测试采用黑盒测试方法

B.测试时间上,系统测试早于单元测试

C.单元测试从用户角度考虑问题,而系统测试从开发者角度考虑问题

D.以上都是

2.6.2 集成测试

上课课本:

1、单元测试能确认每个模块都单独工作但这些模块集成在一起出现有些模块不能正常工作。

原因:因为模块相互调用时接口会引人新的问题,包括接口参数不匹配、传递错误数据、全局数据结构出现错误等。这时需要进行集成测试(Integration Test)。

2、集成测试  已分别通过测试的单元按设计要求集成起来再进行的测试检查这些单元之间的接口是否存在问题,包括接口参数的一致性引用、业务流程端到端的正确性等。

3、集成测试要求参与的人:①熟悉单元的内部细节。②能够从足够高的层次上观察整个系统。一般由有经验的测试人员软件开发者共同完成集成测试的计划和执行。

4、早期的软件应用采用单体架构,软件所有功能都放在一个工程里进行开发各块紧密耦合。即将一个软件包全部部署到服务器上。

5、目前的软件架构火的是微服务架构,强调业务系统彻底的组件化和服务化,一个微服务完成一个特定的业务功能,服务之间通过轻量级的通信协议 HTTP、RPC 等进行交互每个微服务可以独立开发并部署到不同的服务器

1、面向接口的集成测试,也称联调,组装测试;在单元测试的基础上,将所有单元测试通过的程序模块进行有序的、递增的测试。 重点测试不同模块的接口部分

2、集成测试以概要设计说明书为指导,测试软件结构。集成测试主要是为了发现概要设计阶段的问题。(在概要设计阶段制定集成测试计划)

3、集成(组装/联合)测试主要测试每个单元模块之间的接口。集成测试由测试人员完成。

4、将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的模块之间问题。如接口参数类型不匹配、接口在传输中丢失、数据误差不断积累等问题。现在提倡持续集成测试。

1、对于单体架构的集成测试 可以概括为以下两种:

1)非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。

2)渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来测试是在模块一个一个的扩展下进行,其测试的范围逐步增大。

① 自顶向下渐增式测试 不写驱动模块,只写桩模块  

a、从主程序开始沿软件的控制层次向下移动,逐渐结合每一个模块。每次用一个实际模块代替一个桩程序,再结合下一个模块的同时进行测试。

b、有两种组合策略:深度优先策略和宽度优先策略。

c、为保证加入模块未引进新的错误需要进行 回归测试(即全部或部分地重复做过的测试)

优点:不写测试驱动程序,能早发现高层模块接口错误测试方法,早实现并验证系统功能。

缺点:需要桩程序,遇到与之相联系的测试困难,低层关键模块错误发现较晚,且早期不能充分展开人力

② 自底向上渐增式测试 不写桩模块,只写驱动模块  

a、从“原子”模块(即在软件结构最底层的模块)开始集成以进行测试,驱动程序用以模拟被测模块的上级模块。

b、把底层模块组合成实现某个特定的软件子功能的族。

c、写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出。

d、对由模块组成的子功能族进行测试。

e、去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。

优缺点和上面的反过来。

※注意:

1、非增量式集成中容易出现混乱,因为测试时可能发现很多错误定位和纠正很麻烦。

2、增量式集成模式,程序一段一段扩展接口有限,错误容易定位,界面测试可以做的彻底。

3、具体测试采用混合策略结合两种方法:自顶向下法和自底向上法来逐步实施集成测试。
(1)改进自顶向下法:基本使用自顶向下法,但测试早期用自底向上测试少数的关键模块。
(2)混合法:对软件结构中较上层用自顶向下法;对软件结构中较下层用自底向上法结合用。

2、混合策略也有不同的组合方式:三明治集成方法 

1)基本思想是一致的,自两头向中间集成,只是具体实现有些差异。

2)优点:它将自顶向下和自底向上的集成方法有机地结合起来不需要写桩程序,因为在测试初自底向上集成已经验证了底层模块的正确性。

缺点:在真正集成之前每一个独立的模块都没有完全测试过。

3、微服务架构的集成测试

1)微服务架构下,传统的单体应用拆分为多个微服务,形成了多个松耦合的微服务组件模块。原来单个系统内部的 API接口调用变成了微服务之间的接口调用,不同微服务是不同开发团队开发。

2)一个微服务的具体结构包括以下部分:

资源组件,服务层,领域层,仓库层,数据映射器,网关和HTTP客户端

3)微服务下的集成测试是为验证一个子系统/功能模块外部组件之间的正常通信。外部组件包括其他的微服务或者外部数据存储系统。

4)微服务架构下集成测试需要验证微服务结构中的两部分(图中两个虚线框):

一部分是一个微服务对外通信的模块(网关和HTTP客户端)和外部组件的通信

一部分是微服务的数据库访同模块(仓库和数据映射器)和外部数据库的交互

5、集成测试的方法有两种:渐增式测试和非渐增式测试。

(1)一次性集成方式:首先对各个单元分别进行测试,然后再把所有单元组装在一起行测试,最终得到要求的软件系统。

(2)渐增式集成方式:首先对某两三个单元进行测试,然后将这些单元逐步集成为较的系统。现在流行持续集成、持续测试,以及时发现开发过程中产生的问题,最后完成所有元的集成,构造为一个完整的软件系统。

a、自顶向下渐增式测试是打桩,自底向上渐增式测试是驱动。

b、驱动模块就是用来代替主模块,用它来调用子模块。

     桩模块用来代替被测模块的接口,这个接口就是桩模块。

6、在实际环境中,接口可划分为两类:

系统内部接口(系统内部各模块交互的接口):函数或方法接口、消息接口、类接口和其他接口。

系统外部接口(外部系统与系统进行交互的接口)。其中对系统外部接口的测试一般要延续到系统测试阶段来完成。

内部接口测试在集成测试阶段,外部接口在系统测试阶段

7、集成测试是对已经通过测试的单元构成的模块或子系统进行测试。重点是测试接口部分,目标是检查多个单元能够协同工作的能力。

8、集成测试是测试组合单元时出现的bug。

9、集成测试是单元测试之后的阶段性任务,集成测试是单元测试的一种逻辑扩展, 多个单元构成模块,多个模块构成更大的部分。

10、一次性集成测试适用场合:

1)被测试系统曾经是稳定运行的;2)被测试系统规模不大;3)构件之间紧密联系,分开操作很困难。

11、集成测试对系统内部的交互以及集成后系统功能检验了正确性,会验证其是否符合开发过程中的概要设计规格说明的要求。

12、集成测试主要采用黑盒测试方法,辅以白盒测试方法。

13、   集成测试有哪些不同的集成方法?简述不同方法的特点。

1)一次性集成方法:需要的测试用例数目少,测试方法简单、易行。但是由于不可避免存在模块间接口、全局数据结构等方面的问题,所以一次运行成功的可能性不大;如果一次集成的模块数量多,集成测试后可能会出现大量的错误,给程序的错误定位与修改带来很大的麻烦;即使集成测试通过,也会遗漏很多错误进入系统测试。
2)自顶向下集成:在测试的过程中,可以较早地验证主要的控制和判断点;一般不需要驱动程序,减少了测试驱动程序开发和维护的费用;可以和开发设计工作一起并行执行集成测试,能够灵活的适应目标环境;容易进行故障隔离和错误定位。但是在测试时需要为每个模块的下层模块提供桩模块,桩模块的开发和维护费用大;桩模块不能反映真实情况,重要数据不能及时回送到上层模块,导致测试不充分;涉及复杂算法和真正I/O的底层模块最易出问题,在后期才遇到导致过多的回归测试。
3)自底向上集成:可以尽早的验证底层模块的行为;提高了测试效率;一般不需要桩模块;容易对错误进行定位。但是直到最后一个模块加进去之后才能看到整个系统的框架;驱动模块的设计工作量大;不能及时发现高层模块设计上的错误。
4)混合集成:具有自顶向下和自底向上两种集成策略的优点,但是在被集成之前,中间层不能尽早得到充分的测试。

14、软件测试过程中的集成测试主要是为了发现(  B  )阶段的错误。

A.需求分析 (系统测试)      B.概要设计 (集成测试)       

C.详细设计  (单元测试)      D.编码     (单元测试)

15、软件的集成测试工作最好由(  A   )承担,以提高集成测试的效果。

A、不属于该软件开发组的软件设计人员

B、该软件的设计人员

C、该软件开发组的负责人

D、该软件的编程人员(集成测试不是该软件开发组的软件人员做)

16、集成测试计划应该在( B )阶段末提交。

A、需求分析

B、概要设计

C、详细设计

D、单元测试完成

17、自底向上增量式集成测试中,下面( C )描述是正确的。

A.测试由桩模块控制

B.最上面的模块最先测试

C.父单元用测试过的子单元测试

D.包含树的深度优先或广度优先遍历过程

18、软件测试阶段中,集成测试阶段常用的方法是(D)
 A.使用黑盒测试方法即可     B.使用白盒测试方法即可
 C.以黑盒测试为主,白盒测试为辅 D.以白盒测试为主,黑盒测试为辅

19、集成测试时,能较早发现高层模块接口错误的测试方法为(A)

A)自顶向下渐增式测试 B)自底向上渐增式测试 C)非渐增式测试D)系统测试

20、

A. 单元测试 B. 集成测试C. 验收测试 D. 回归测试

正确答案:B

21、集成测试对系统内部的交互以及集成后系统功能检验了何种质量特性( )
  A. 正确性   B. 可靠性   C. 安全性   D. 可维护性
参考答案:A

22、在自底向上测试中,要编写( )
  A. 测试存根   B. 驱动模块   C. 桩模块   D. 底层模块。
参考答案:B

23、集成测试时,能较早发现高层模块接口错误的测试方法为(A)。

A.自顶向下集成  B.自底向上集成  C.邻居集成  D.成对集成

24.成对集成最大的优点是(B)

A.测试用例少  B.程序缺陷定位准 

C.测试用例规模与模块数量没有直接关系  D.不用设计驱动模块

2.6.3系统测试

1、定义:系统测试是根据软件需求规格说明,在开发环境下对被测试的、已经集成的软件系统进行测试,确认各项规定的需求是否在系统中实现,以及各种质量要求在系统中是否达到预期的标准。

2、将整个软件系统看为一个整体,依据需求进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。

3、系统测试在系统集成完毕后进行测试, 前期主要测试 系统的功能 是否满足需求,后期主要测试 系统运行的性能是否满足需求, 以及系统在不同的软硬件环境中的兼容性等。 (功能测试、性能测试、回归测试、其他非功能性测试)

4、系统测试主要测试整个系统的功能和性能。系统测试由测试人员完成以其为主。

5、系统测试内涵:

1)系统测试是检查软件在整体运行环境中的表现;

2)系统测试除了软件本身外,还包含需求分析、概要设计、详细设计、用户使用说明等技术文档的审查。

6、系统测试主要是为了验证系统在运行环境下能否满足非功能需求。

7、系统测试采黑盒测试用方法。

8、分类:

系统功能测试

一般在完成集成测试后进行系统功能测试讲究逻辑。而且基于产品功能说明书,针对产品所实现的功能,从用户角度来进行功能验证,以确认每个功能是否都能正常使用。不考虑程序内部结构和实现方式,只检查程序功能是否按照需求规格说明书的规定。功能测试以客户需求为导向。

功能测试:是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。

测什么?功能、逻辑、接口(API)、界面(UI)、数据、操作、平台;

功能测试

包括其自动化测试,以验证系统是否都能正常工作并正确地完成所赋予的任务。

1)发生在单元测试或集成测试,软件功能是最基本的。

2)单元功能测试目的:保证所测试的每个独立模块的功能是正确的,主要是从输人条件和输出结果来进行判断是否满足程序的设计要求。

3)系统集成中或系统功能测试,要考虑模块之间的相互作用系统的应用环境,衡量标准:实现产品规格说明书上所要求的功能,特别要模拟用户完成从头到尾(Endto-End,端到端)的业务测试。

4)最主要的是面向接口的功能测试和面向界面的功能测试。

面向接口的功能测试:

①接口:系统之间(内-外,内-内)数据交互的通道。软件接口:应用程序编程接口(API),在两个相对独立的应用程序之间进行通信和数据交换。

②分类:软件系统内部的接口对外的接口

内部的接口:方法之间的接口、模块之间的接口,供方法和模块之间互相调用。

对外的接口:暴露给外部应用系统调用的接口。

③接口测试:校验接口回发的响应数据与预期是否一致。接口测试既可以用于组件测试(通过调用系统组件间的接口),又可以用于系统测试(通过调用被测系统对外暴露的接口)

④接口类型:常见的接口包括HTTP 接口、Web Service 接口、RESTful 接口

···HTTP 接口是基于超文本传输协议,是一个万维网上定义的基于请求与响应的应用层协议。明文不可靠无加密。

···Web Service是指以Web形式提供的服务,是一种能够使应用程序在不同的平台使用不同的编程语言进行通讯的技术规范。采用SOAP传输协议实现的WebService三大基本要素:SOAP简单对象访问协议;WSDL Web 服务描述语言;UDDI通用描述、发现及整合;

···RESTful 接口:使用标准的 HTTP方法将所有Web 系统的服务抽象为资源。

⑤接口测试要点:通过调用软件应用的接口模拟客户端服务器发送请求,然后验证能否获得正确的返回信息,通常需要借助测试工具进行测试,更重要的任务是通过调用服务器端的一个或多个接口验证系统功能

⑥为做好接口测试团队需要做好以下工作:

a、编写接口文档,定义每个接口请求和响应的类型、格式和参数,接口之间的依赖关系等信息,这是进行接口测试设计和开发的前提。

b、组织对接口文档的评审,确保接口设计和定义的正确和完备,并且确保系统测试人员充分了解系统的接口信息。
c、选择合适的接口测试工具进行接口测试

⑦ Postman进行基于接口的自动化测试, 基于HTTP协议的web应用程序的接口测试。

⑧ 基于 Selenium 测试框架是Web 客户端的UI自动化测试。


自动化测试:焦点集中在测试执行,主要是由测试工具自动地完成测试。

测试自动化:一切可以由计算机系统自动完成的测试任务都已经由计算机系统或软件工具、程序来承担并自动执行。

记录和回放测试用例是最简单但很有效的测试自动化类型。

回归测试就是要验证已经实现的大部分功能,只是为了解决软件缺陷、需求变化的代码修改很少,为了覆盖代码改动所造成的影响要进行回归测试。

但回归测试找到软件缺陷的可能性小,效率比较低,但是必要的。软件产品版本不断更新,不断增加功能或修改功能重复性很高故软件自动化的产生了。

提高测试效率和测试结果的可靠性、准确性和客观性,提高测试覆盖率,保证测试工作的质量。

测试自动化的内涵:

1、自动化测试相对手工测试存在。包括输人数据自动生成、结果的验证、自动发送测试报告等。

2、自动化测试主要是通过所开发的软件测试工具、脚本(Script)等来实现,具有良好的可操作性、可重复性和高效率等特点。

3、测试自动化是提高测试效率、覆盖率和可靠性等的重要手段,是软件测试不可分割的一部分。

①手工测试局限

手工测试发现缺陷高于自动化测试;比自动化测试灵活、有创造性。不代表自动化测试比手工测试发现的缺陷少

大量的测试用例会被执行几遍。后期进行回归测试工作是重复的。

局限:

1、手工测试无法覆盖所有代码路径南侧顶测试覆盖率。

2、手工测试很难捕捉到与时序、死锁、资源冲突、多线程等问题。

3、在系统负载、性能测试时,需要模拟大量数据或大量并发用户等大负载用户场合。

4、模拟几十年数据。5、回归测试中时间紧任务重。

6、测试可以发现测错误,但是不能表明程序的正确性因为黑白盒都不允许穷举测试。

②测试自动化

1、自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程模拟手工测试步骤。通过执行由程序语言编制的测试脚本,自动完成软件的单元测试、功能测试、负载测试或性能测试。

2、自动化测试虽然需借助测试工具,但仅使用测试工具不够需要借助网络通信环境、邮件系统、系统 Shel命令、后台运行程序、改进的开发流程等,由系统自动完成软件测试的各项工作。

3、自动化测试是相对手工测试而存在所以自动化测试的真正含义理解为“一切可以由计算机系统自动完成的测试任务都已经由计算机系统或软件工具、程序来承担自动执行”。包含下列三层含义:

(1)“一切”,不仅指测试执行的工作——对被测试的对象验证,还包括测试的其他工作,如缺陷管理、测试管理、环境安装、设置和维护等。
(2)“可以”,意味着某些工作无法由系统自动完成如脚本的开发、测试用例的设计,需要创造性,其工作需要手工处理。
(3)即使由系统进行自动化测试但少不了人工干预,包括事先安排自动化测试任务、测试结果分析、调试测试脚本等。

③软件测试自动化的优势

优势:

1、速度快,执行效率高。2、永不疲劳。3、测试结果准确。4、可靠。5、可复用性。6、特别的能力(并发)

给软件测试带来益处:

1、缩短软件开发测试周期。2、更高质量的产品。3、软件过程更规范。4、测试效率高,充分利用硬件资源。5、节省人力资源,降低测试成本。6、增强测试的稳定性和可靠性。7、提高软件测试的准确度和精确度,即提高测试的质量。8、手工不能做的事情,软件测试工具可以完成。(负载测试、性能测试手工很难行,只有通过工具来完成。)9、高昂的团队士气。

④测试自动化实现原理

1、测试自动化主要包括4种类型:UI自动化测试、API自动化测试、自动化的单元测试、自动化的代码分析

2、自动化测试也包括动态测试和静态测试,UI自动化测试、API自动化测试和单元测试都属于动态的自动化测试,代码分析属于静态的自动化测试。

3、代码分析:代码规则或者是代码风格的检査工具例如,Checkstyle、FindBugs、JUint、PMD 等

4、脚本技术:脚本是一组测试工具执行的指令集合,是计算机程序的一种形式。1)通过影响测试的操作产生做修改,可以减少脚本开发的工作量。2)直接用语言编写脚本。测试工具脚本中可以包含的数据和指令包括:
(1)同步(何时进行下一个输人)。
(2)比较信息(比较什么、如何比较以及和谁比较)。
(3)捕获何种数据及存储在何处。
(4)从另一个数据源读取数据时从何处读取。
(5)控制信息等。

5、常常将几种脚本结合起来应用:线性脚本,结构化脚本,数据驱动脚本


回归测试

1、回归测试就是为了发现回归缺陷而进行的测试。回归测试通常是白盒测试

2、回归测试是在程序有修改的情况下保证原有功能正常的一种测试策略和方法,这时测试不用全面测试,根据修改的情况进行有效测试。

3、程序在发现严重软件缺陷或版本升级对修改后程序检测检测软件的正确性有两层含义,回归测试目的:

1)做的修改达到了预定目的:错误被改正,新功能实现了,适应了新的运行环境;
2)不影响软件原有功能的正确性

4、回归测试是软件生命周期一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段可能进行多次回归测试。

5、当程序有修改,并且要求保证原有功能正常的情况下,必须采用回归测试。

回归测试的策略及其方法:

1、回归测试的价值在于它是一个能够检测到回归缺陷的受控实验。回归测试一般优先选择那些可能带来质量风险的。

2、最常见的回归测试策略有以下4种:

1)再测试全部用例,选择测试用例库全部用例构成回归测试包,最安全!低遗漏风险,测试效率低,成本高,不用进行用例取舍和分析,但用例增多工作量增大无法在限定条件完成。

2)基于风险选择测试,指容易发生回归缺陷的风险即受改动代码的影响风险。有助于尽早发现回归缺陷。

3)基于操作剖面选择测试,操作剖面指软件功能点被用户的使用程度,说明最重要或最频繁使用功能的测试用例需要被选择、被执行。

4)再测试修改的部分,这种策略效率最高,但风险也是最大的。据丰富的经验判断,将回归测试局限于被改变的模块和它的接口上,只是针对被修改的或新加的代码进行测试。

3、回归测试是重复性的工作,已执行过的。也是比较明确的,一般适合自动化测试

小韦:

1、软件回归:回归测试是指在发生修改之后重新测试先前的测试以保证修改的正确性。

2、缺陷回归:开发人员修复测试人员提交的缺陷之后测试人员进行回归测试,确认缺陷是否被成功修复。

3、回归缺陷:一旦程序某些区域被修改了,就可能影响其它区域,导致受影响的区域出现新的缺陷。

4、使用软件测试工具和自动化的好处是可以加快执行测试用例的时间

5、重复执行测试的过程称为回归测试。


随机测试:

主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分。另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试一起进行。

精准测试:

1、概念:为客观地界定修改代码影响的范围,需要做代码的依赖性分析,再根据代码和测试用例之间存在的关系,更准确地选择受影响的测试用例,这是最朴素的精准测试思想。

2、精准测试是一种软件测试分析技术,借助算法和工具(代码覆盖率分析技术),自动建立测试用例和软件代码之间双向的、可视化的回溯机制。为代码和测试用例建立对应关系。


系统非功能性测试

兼容性测试、性能测试、安全性测试、可靠性测试、易用性测试等是5种非功能性测试也常称为“专项测试”。

专项测试就是验证整个系统是否满足非功能性的质量需求:

(1)性能:在大量用户使用的情况下系统能否经得住考验;

(2)安全:系统是否有安全性漏洞被利用,系统是否经得起黑客的攻击;

(3)兼容:系统是否可以在不同操作系统或不同平台上正常运行;

(4)可靠:系统是否能长期稳定地运行下去。系统出错了是否能很快恢复过来或将故障转移出去;

(5)易用:系统使用起来是否方便、流畅;

将软件放在整个计算机环境下,包括软硬件平台、某些支持软件和数据等,在实际运行环境下验证系统的非功能性, 包括负载测试 性能测试 安全性测试 稳定性测试 兼容性测试 灾难恢复性测试、安全测试和可靠性测试


性能测试:

1、为了发现系统性能问题或获取系统性能相关指标而进行的测试。

2、性能测试:时间性能(事务响应时间等)、空间性能(系统资源消耗)。

3、性能测试目标:获取系统性能某些指标数据、为了验证系统是否达到用户提出的性能指标、发现系统中存在的性能瓶颈,优化系统的性能。

4、并发性能测试的两个阶段:负载测试、压力测试。

5、压力测试、容量测试和性能测试的测试目的虽然有所不同但其手段和方法在一定程度上比较相似,都是采用负载测试技术。

6、压力测试、容量测试也能发现内存泄露、性能瓶颈等问题。所以人们习惯将压力测试、容量测试也都归为性能测试。

7、系统的性能指标包括两方面的内容——系统资源(CPU、内存等)的使用率系统行为表现

8、系统行为的性能指标常见的有以下几个:

1)请求响应时间;2)事务响应时间;3)数据吞吐量;

9、性能测试,根据其不同的测试目的分为以下几类:性能验证测试,性能基准测试,性能规划测试,容量测试;

10、在测试过程中,要善于捕捉被监控数据曲线发生突变地方--拐点,这一点就是饱和点或性能瓶颈

11、前端性能测试工具: WeTest 的 PerfDog(性能狗)是iOS、Android 性能测试工具平台。

12、后端性能测试工具:JMeter是 Apache组织开发的基于Java的压力测试工具。


稳定性测试:

长时间持续运行是否出现问题。


负载测试:

通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况。

负载测试是检查被测系统在“额定”负载条件下的性能(性能拐点之前的测试)。


压力测试:

1、也称为强度测试,负载测试。压力测试是模拟实际应用的软硬件环境用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。

2、压力测试的目的是在软件投人使用以前或软件负载达到极限以前,通过执行可重复的负载测试。了解系统可靠性、性能瓶颈等,以提高软件系统的可靠性、稳定性,减少系统的宕机时间和因此带来的损失。

3、通过确定一个系统的瓶颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别。

4、压力测试是检查被测系统在“饱和”负载条件下的性能(性能拐点之后的测试)。

交易处理的负载压力指标:

1)并发用户数量;

2)事务处理指标(平均事务响应时间、1秒钟内处理事务总数);

3)Web请求指标(每秒点击次数、每秒HTTP响应数量、每秒下载页面数量、每秒重试次数、每秒SSL连接数量)。

容量测试

1、系统容量是系统能正常工作的最大并发用户数(正常工作状态的极限值),类似压力测试或和压力测试一起做来判断系统性能什么时候出现拐点。

2、拐点出来之前的并发用户数是系统的实际容量。通过容量测试确定软件系统还能保持主要功能正常运行的某项指标的极限值,能够确定测试对在给定时间内能够持线处理的最大负载或工作盘。


容错性测试:

检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。


兼容性测试:

1、验证软件之间是否正确地交互和共享信息。包括向前和向后兼容以及横向测试。

兼容性测试:检查软件能否在不同组合的环境下正常运行,软件之间能否正常交互和共享信息。软件对其运行环境的依赖程度。数据兼容软件之间能否正确地交互和共享信息。

1)向后兼容(向下兼容):可以使用软件的以前版本;

2)向前兼容(向上兼容):可以使用软件的未来版本。

2、不是所有软件必须进行一定程度的兼容性测试。

3、配置测试是在各种硬件和软件平台类型以及其不同的设置情况下检查软件运行的过程;兼容性测试是检查软件和其他软件一起运行的过程。

4、如果对某种程序进行兼容性测试,要确认其可以利用剪切板与其他程序正确地相互复制数据。

5、程序兼容性测试的第一步应该是研究可能适用于软件或平台的现有标准和规范。

6、在开始兼容性测试任务之前,需要对所有可能的软件组合等价划分,使其成为验证软件之间证券孤儿交互的最小有效集合。


9、系统测试主要包括哪些内容?

强度测试,性能测试,恢复测试,安全测试,可靠性测试,安装测试,容量测试,文档测试

10、(A )的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。

A. 系统测试        B. 集成测试       C. 单元测试        D. 功能测试

11、根据软件需求规格说明书,在开发环境下对已经集成的软件系统进行的测试是(A)

A)系统测试 B)单元测试 C)集成测试 D)验收测试

12、下面活动属于系统测试的主要工作内容的是D

A.测试个单元模块之间的接口

B.测试模块内程序的逻辑功能

C测试个模块集成后实现的功能

D.测试整个系统的功能和性能

13、系统外部接口,即外部系统(包括人、硬件和软件)与系统交互的接口,对这类接口的测试一般是在)阶段进行.B

A单元测试 B.系统测试 C集成测试 D.验收测试

14、下列接口测试中,要延续到系统测试阶段来完成的是 A

A系统外部接口 B.系统内部接口C函数或方法接口 D.类接口

15、根据软件需求规格说明,在开发环境下对已集成的软件系统进行的测试是 A

A 系统测试 B. 单元测试 C. 集成测试 D.验收测试

16、( )的目的是对即将交付使用的软件系统进行全面的测试,确保最终软件产品满足用户需求。
A. 系统测试   B. 集成测试   C. 单元测试   D. 验收测试
参考答案:A

2.6.4 验收测试

1、验收测试:在软件产品完成了系统功能和非功能测试之后、产品发布之前所进行的软件测试活动它是技术测试的最后一个阶段,也称为交付测试。验收测试由测试人员和用户代表完成。

2、验收测试的前提:系统或软件产品已通过了系统测试的软件系统。

3、验收测试的内容:验证系统是否达到了用户需求规格说明书(可能包括项目或产品验收准则)中的要求,测试尽可能地发现软件中存留的缺陷,从而为软件进一步改善提供帮助,并保证系统或软件产品最终被用户接受。主要包括易用性测试、安装测试、文档(如用户手册)测试等几个方面的内容。

4、验收测试以需求设计说明书为指导,验收测试通常是黑盒测试;以客户为主

5、验收测试的目的:是向未来的用户表明系统能够像预定要求那样工作,验证软件的功能和性能如同用户所合理期待的那样。

6、面向业务的验收测试的目的:向未来的用户表明系统能够像预定要求那样工作,验证软件的功能和性能如同用户所合理期待的那样

7、安装测试(部署验证)是指按照软件产品安装手册或相应的文档,在一个和用户使用该产品完全一样的环境中或相当于用户使用环境中,进行一步一步的安装操作性的测试。

8、一个软件产品或互联网软件服务拥有众多用户,不可能由每个用户验收,此时采用称为Alpha(a)测试、Beta(p)测试的过程

(1)Alpha测试是指软件开发公司内部人员开始试用新产品(称为 Alpha版本),在实际运行环境和真实应用过程中发现测试阶段所没有发现的缺陷。经过 Alpha 测试和修正的软件产品称为 Beta版本

(2)Beta测试是指公司外部的典型用户试用,并要求用户报告异常情况、提出批评意见,然后再对Beta版本进行修正和完善,最终得到正式发布的版本。Beta版本采用灰度发布方式,通过控制软件部署范围或服务的用户,逐步扩大用户数,直到所有用户可以使用新版本。Beta版本是比较常见的试用版本,在互联网应用系统中更为普遍。

β测试是发现配置和兼容性问题的好方法。

(3)阿尔法(α)测试(内测)主要是测试人员在开发环境下的测试

         贝塔(β)测试(公测)是主要用户主要参与在实际环境中的测试。


9、    验收测试是由谁完成的?通常包含哪些过程?

验收测试是以用户为主的测试,软件开发人员和QA(质量保证)人员也应参加。通常包含α测试和β测试过程。

10、如果一个产品中次严重的缺陷基本完成修正并通过复测,这个阶段的成品是( B  )。

A、Alpha版 (可能还会有一两个严重错误)      B、Beta版 (次要错误刚修正)      

C、正版 (C类错误也完全没有)    D、以上都不是

11、必须要求用户参与的测试阶段是(D)

A、单元测试 B、集成测试 C.确认测试 D、验收测试

12、软件验收测试包括(BCD)
A.功能测试 B.正式验收测试 C.alpha测试 D.beta测试

13、软件验收测试的合格通过准则是(ABCD)
 A.软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求
 B.所有测试项没有残余严重问题
 C.立项审批表,需求分析文档,设计文档和编码实现一致
 D.验收测试工件齐全

14、软件验收测试不包括(B)
A.正式验收测试 B.白盒测试 C.alpha测试 D.beta测试
解析:白盒测试属于结构化测试

15、与确认测试阶段有关的文档是(A)。

A)需求规格说明书

B)详细设计说明书

c)概要设计说明书

D)源程序

16、下列关于验收测试的定义说法最准确的是( )。(选择一项)

(单选题)

A、 由用户按照用户手册对软件进行测试以决定是否接收

B、 由第三方测试机构代表用户按照需求说明书和用户手册对软件进行测试以决定是否接收

C、 按照任务书或合同中供需双方约定的验收依据进行测试,决定是否接收

D、 由开发方和用户按照用户手册执行软件验收

答案: C

补充知识点:

1、软件国际化:借助功能设计和代码实现中软件系统有能力处理多种语言和不同文化,使创建不同语言版本时,不需要重新编写代码的软件工程方法。

2、软件本地化:将一个软件产品按特定国家/地区或语言市场的需要进行加工,使之满足特定市场上的用户对语言和文化的特殊要求的软件生产活动。

翻译只是翻译词语,本地化要照顾到地区和国家的文化、习惯和风俗。

3、测试软件有两种基本方法:通过性测试、失效性测试。

1)通过性测试:确认软件至少能做什么,而不会考验其能力。

2)失效性测试(错误强制测试):纯粹为了破坏软件而设计和执行的测试用例。

4、产品质量评估与度量

1)基于缺陷的质量度量是最常见的方法,也比较适合组件或系统的功能性质量度量,而对代码的质量分析,仅看缺陷是不够的,还需要看代码的复杂度、可读性(含代码风格)等

基于缺陷的质量度量包括以下方面:

①代码的缺陷密度:常用的指标是每千行代码(KLOC)的缺陷数,如1.6Bug/KLOC。

②缺陷清除率:各个阶段的缺陷清除率和总的缺陷清除率。

③缺陷逃逸率:未在研发阶段发现的缺陷意味着逃逸出去,即线上发现的缺陷(生产环境发现的缺陷),缺陷逃逸率=线上发现的缺陷数/(线上发现的缺陷数十研发环境下发现的缺陷数)
陷数)。

④缺陷趋势是否良好,是否收敛?

⑤缺陷分布是否符合正态分布,是否过于集中在一两个模块。

2)经典的种子公式:

Mills 研究出通过已知缺陷(称为种子 Bug)来估计程序当中潜在的、未知的缺陷数量。将测试队伍分为两个小组,一个小组事先将已知的共S个Bug(种子)安插在程序里,让另一个测试小组尽可能发现程序的Bug,假如他们发现了s个种子 Bug认为:

3)基于缺陷清除率的估算方法

2.7 软件测试工作范畴

1、几种说法:

1、软件

【 软件的生命周期:从软件产品设计开始到软件不再使用而结束的时间。可以分成6个阶段:即需求分析、计划、设计、编码、测试、运行维护。】

软件开发过程
用户需求(分析)——软件需求文档(细化)——编码——测试——上线

① 需求:是满足用户期望和合同规定的文档标准、规范所需要的条件和权限。

② 用户需求:简单的描述,没有具体的的实现过程

③ 软件需求:需求的细化,是对用户需求的验证(合理性、正确性),是具体功能实现的细节说明。需求是开发人员和测试人员进行开发和测试的依据,

2、软件测试生命周期

需求分析——测试计划(测试范围、时间、人员、目的)——测试设计/开发(写测试用例)——测试执行(找BUG、管理bug、记录并跟踪)——测试评估(写测试报告:统计测试用例、bug、修改及遗留bug)。

3、测试工作的流程

(软件测试周期):提出测试计划、测试设计(设计用例)、执行测试、缺陷跟踪、打印测试报告。

题1:软件测试生命周期分为:测试计划、(测试设计)、(测试实施)、测试执行、测试过程评估 五个阶段

题2:测试计划->测试设计说明->测试用例说明->测试过程说明。

补充:

1)软件测试生命周期模型描述了软件测试的全过程:单元测试、集成测试、系统测试、验收测试和回归测试。

2)测试工作通常不能平均分布在整个产品开发周期中, 但完整的软件测试工作应该贯穿整个软件生命周期。

3、测试的需求分析

①明确测试范围,了解哪些功能点要测试、哪些功能点不需要测试;

②知道哪些测试目标优先级高、哪些目标优先级低;

③ 要完成哪些相应的测试任务才能确保目标的实现。

4、软件测试策略

制定或选择更合适、更有效的测试方式、测试方法和技术等,其目的是为了以最低的时间或人力成本达到最大程度地揭示产品的质量风险、尽快完成测试等。

基于下列这些因素的考虑做出决定:

测试方式,包括手工方式与自动化方式、静态方式与动态方式等的选择与平衡,探索式测试或基于脚本的测试、自己团队测试还是众测、外包等平衡;

测试方法,包括黑盒测试还是白盒测试方法、基于数据流还是基于控制流的方法、完全组合测试方法还是组合优化测试方法等平衡;

测试过程,先测什么、后测试什么,对测试阶段的不同划分等。

5、测试计划   

软件的测试计划应该在需求分析阶段制定。

目标和范围;测试项及其优先级 ;测试风险识别与分析 ;指定测试策略 ;进度安排 ;资源配置; 跟踪和控制机制;

1)软件测试计划是软件测试员与产品开发小组交流意图的主要方式。

2)软件测试计划的目的:规定测试活动的范围、方法、资源和进度;明确正在测试的项目、要测试的特性、要执行的测试任务每个任务的负责人,以及与计划相关的风险。

3)测试计划过程的最终目标是交流(而不是记录)软件测试小组的意图、期望,以及对将要执行的测试任务的理解。

4)本质上讲计划是一个动态过程,因此如果发现列出的问题不适应具体情况,就可以自行调整。

5)创建测试计划过程比结果文档更重要。特别测试:在没有实际计划下执行测试——没有测试用例计划。

题:

1、(多选题)编写测试计划的的主要工作包括()

A.模拟测试结果

B.计划调整

C.确定测试范围

D.进度安排

答案:CD

2、(多选题)下列各项中()是一个测试计划所应包含的内容

A.测试预期输出

B.测试资源、进度安排

C.测试范围

D.测试策略

答案:BCD

6、测试设计

1)测试设计是解决“如何测”的问题,可以分为测试总体设计和测试详细设计:

测试总体设计则主要指测试方案的设计、测试结构的设计。

测试详细设计主要是指测试用例的设计。

2)在测试方案的设计中,测试工作涉及的范围比较大,包括选择测试方法、明确测试策略、设计测试技术路线、选择测试工具和规划测试环境等

3)测试设计说明的目的是组织和描述针对具体特性需要进行的测试。

测试设计应该包含:标识符、要测试的特性、方法、测试用例确认、通过/失败规则。

4)软件设计阶段的测试主要采取的方式是(A)

A)评审B)白盒测试C)黑盒测试D)动态测试

7、测试用例      

为测试而设计的执行文档,包括将测试的输入数据定义和预期结果的描述称为测试用例

1)测试用例是测试人员在测试过程中的重要参考依据;测试用例将有助于节约测试时间,提高测试效率。

2)良好的测试用例不断地被重复使用,使得测试过程事半功倍

3)测试用例是一个知识积累的过程

4)测试用例是可以独立进行测试执行的最小单元。

5)测试用例的作用:有效性、可复用性、易组织性、客观性、可评估性和可管理性、知识传递。

6)根据输入要求的测试用例分类:①纯数据型测试用例;②文件型测试用例;③操作序列型测试用例;④程序型测试用例。

7)测试计划过程决定用什么方法编写测试用例,在哪里保存测试用例,如何使用和维护测试用例。

8)计划测试用例的重要性(目标、原因):组织、重复性、跟踪、测试(或不测试)证实

9)测试用例应该包含:标识符、测试项、输入说明、输出说明、环境要求、特殊过程要求、用例之间的依赖性。

10)为提高软件测试效率,应该选择发现错误可能性较大的测试用例。

11)与设计测试用例无关的文档是:项目开发计划

       有关的是(测试用例的来源):需求规格说明书、设计说明书、源程序。

12)测试的关键问题是如何选择测试用例。

13)软件测试目的:在软件系统交付运行之前尽可能多地发现系统中错误和缺陷。

14)高效的测试指用少量的测试用例发现被测软件尽可能多的缺陷。

15)测试用例应由测试的输入数据预期的输出结果组成。

16)测试用例的原则:(1)测试用例的代表性;(2)测试结果的可判断性;(3)测试结果的可再现性。

17)在更快或更慢的硬件上运行测试用例,要考虑时序

18)杀虫剂现象:不停地用同样的测试用例或同一个人测试软件时出现的情形。

19)一个好的测试用例是在于它能发现至今未发现的错误 。

       一个成功的测试发现了至今未发现的错误的测试。

习题:

1、如下关于测试用例的描述,错误的是(B)

A.测试用例是一组精心设计的输入,目的是未来在最短的时间内找到最多、最严重的缺陷。

B.测试结果就是测试用例的实际输出。

(测试结果是对测试用例执行后的实际情况的总结和记录,但并不等同于测试用例的实际输出。)

C.测试用例方便了测试人员与开发人员之间的沟通。

D.测试用例有利于缺陷的跟踪。

2、如下描述满足是测试用例的是(B)

A.登陆手机QQ,输入正确的QQ号码,不输入密码,看看会发生什么?

B.登陆手机QQ,输入正确的QQ号码和密码,预期结果可以是登陆自己的QQ账户,看到QQ消息。

C.登陆手机QQ,输入正确的QQ号码和错误的密码后,发现系统提示密码错误,无法进入自己的QQ账户。

D.登陆手机QQ,输入正确的QQ号码和密码,测试失败。

3.软件测试是采用(A)执行软件的活动。

A.测试用例  B.输入数据  C.测试环境  D.输入条件

4. 关于测试用例的说法,错误的是(A)

A.测试用例只能用有效的数据  B.测试用例的数量越好越好

C.测试用例的典型性越高越好  D.测试用例对缺陷定位能力越高越好

6. 软件测试的关键问题是(B)

A.如何组织软件评审  B.如何选择测试用例

C.如何验证程序的正确性  D.图和采用综合的策略

7. 软件测试用例主要由输入数据和(C)两部分组成。

A.测试计划  B.测试规则  C.预期输出结果  D.测试需求

8. 以下哪些数据可以作为测试用例(ABCD)的输入的数据。

A.合理、有效的输入数据  B.无意义、无效的数据  C.边界上的数据  D.错误的数据

9.下面有关测试原则的说法正确的是()
  A. 测试用例应由测试的输入数据和预期的输出结果组成
  B. 测试用例只需选取合理的输入数据
  C. 软件最好由开发该软件的程序员自己来做测试
  D. 使用测试用例进行测试是为了检查程序是否做了它该做的事
正确答案:A

10、更大的测试用例集就一定越好吗?
错误。测试集T1覆盖了程序的70%,而测试集T2只覆盖了程序的40%,但是T2涉及到的是用户最经常使用的,而T1覆盖的用户很少使用或几乎不用。

11、软件测试是采用( A)执行软件的活动。

A.测试用例

B.输入数据

C.测试环境

D.输入条件

12、下列关于程序效率的描述错误的是( C )。

A.提高程序的执行速度可以提高程序的效率

B.降低程序占用的存储空间可以提高程序的效率

C.源程序的效率与详细设计阶段确定的算法的效率无关

D.好的程序设计可以提高效率

13、测试用例是为达到最佳的测试效果或高效的揭露隐藏的错误而精心设计的少量测试数据,至少应该包括( A )

A、测试输入、执行条件和预期的结果。

B、测试目标、测试工具

C、测试环境

D、测试配置

14、与设计测试用例无关的文档是(A)。

A)项目开发计划

B)需求规格说明书

C)设计说明书

D)源程序

15、下面哪一个不属于测试用例包含的元素( )

A. 操作步骤B. Bug 类型C. 用例编号D. 预期结果

正确答案:B

16、通常情况下,下列选项中不属于编写测试用例应该包括的内容的是( )。(选择一项)(单选题)

A、 被测项目名称

B、 与本用例相关的其他用例

C、 测试时所发现缺陷的严重程度

D、 测试时需要输入的数据

答案: C


8、测试执行

手工执行:基于详细设计的测试用例来完成测试,也可以在没有测试用例的情况下进行的探索式测试。

自动化执行:指采用测试工具来完成,一般都需要开发自动化测试脚本,然后工具执行脚本,在后续“单元测试与集成测试、系统测试和自动化测试框架”等各章会进行详细讨论。

9、基于脚本的测试 vs 探索式测试

10、测试结果和过程评估

测试结果评估:对测试结果进行分析,如分析测试覆盖率,以了解测试是否充分;也可以基于缺陷的趋势分析和分布分析,了解缺陷是否已收敛,以及基于缺陷来评估当前被测试的版本的质量 。 测试过程评估:结合测试计划来进行评审,相当于把计划的测试活动和实际执行的活动进行比较,了解测试计划执行的情况和效果 。应持续进行而不是测试结束才做!


本章小结:

①软件测试是软件质量保证的手段,软件测试基于两个最基本的概念来展开,这两个基本概念就是质量和客户

软件质量就是客户的满意度,而测试就是时时刻刻从客户的角度出发,验证软件产品是否满足客户的实际需求。

软件产品的质量不仅包含功能性需求,而且包含非功能性需求,如适用性、功能性、有效性、可靠性和性能等。
②软件测试的主要目的之一就是尽快尽早地发现软件缺陷 , 而软件缺陷是由软件本身、团队工作和技术问题等多方面因素引起的,而且集中在需求分析、系统设计这两个阶段,代码的错误要比需求分析书、设计规格说明书所存在的问题要少。
③软件测试可以根据测试的层次、被测试对象、测试目标、测试过程等进行分类,通过分类可以全面地了解测试的概貌和内容。软件测试一般会经过需求评审、设计评审、代码评审、单元测试、集成测试、系统测试和验收测试等环节。

④测试自身的主要工作是测试分析、设计、执行和评估,在测试分析的基础上制定有效的测试策略和测试计划,更好地指导测试设计和执行。

测试计划和策略也是一个动态的优化过程随着测试设计的深人和测试执行出现的新情况,不断改进计划或调整测试策略。

了解软件试的工作范畴,也有利于后续开展单元测试、集成测试、系统测试和验收测试,每个层次的测诗都需要进行测试分析、计划、设计、执行和评估。


补充

1、制作软件产品需要的投入:客户需求、产品说明书、进度表、软件设计文档、测试文档。2、

2、完全测试程序是不可能的,有以下四个原因:输入量太大;输出结果太多;软件执行路径太多;软件说明书是主观的,即从旁观者来看是缺陷。

习题

11. 请简述软件测试的基本流程。

软件测试的基本流程为:

分析测试需求→制定测试计划→设计测试用例→执行测试→编写测试报告。

(1)分析测试需求

测试人员在制定测试计划之前需要先对软件需求进行分析,以便对要开发的软件产品有一个清晰的认识,从而明确测试对象及测试工作的范围和测试重点。在分析需求时还可以获取一些测试数据,作为测试计划的基本依据,为后续的测试打好基础。

(2)制定测试计划

测试计划是整个测试工作的导航图,但它并不是一成不变的,随着项目推进或需求变更,测试计划也会不断发生改变,因此测试计划的制定是随着项目发展不断调整、逐步完善的过程。

测试计划一般要做好以下工作安排。

确定测试范围:明确哪些对象是需要测试的,哪些对象不是需要测试的。

制定测试策略:测试策略是测试计划中最重要的部分,它将要测试的内容划分出不同的优先级,并确定测试重点。根据测试模块的特点和测试类型(如功能测试、性能测试)选定测试环境和测试方法(如人工测试、自动化测试)。

安排测试资源:通过对测试难度、时间、工作量等因素对测试资源合理安排,包括人员分配、工具配置等。

安排测试进度:根据软件开发计划、产品的整体计划来安排测试工作的进度,同时还要考虑各部分工作的变化。在安排工作进度时,最好在各项测试工作之间预留一个缓冲时间以应对计划变更。

预估测试风险:罗列出测试工作过程中可能会出现的不确定因素,并制定应对策略。

(3)设计测试用例

测试用例(Test Case)指的是一套详细的测试方案,包括测试环境、测试步骤、测试数据和预期结果。测试用例编写的原则是尽量以最少的测试用例达到最大测试覆盖率。测试用例常用的设计方法包括等价类划分法、边界值分析法、因果图与判定表、正交实验法、逻辑覆盖法等。

(4)执行测试

测试执行就是按照测试用例执行测试的过程,这是测试人员最主要的活动阶段。在执行测试时要根据测试用例的优先级进行。

测试人员需要完成所有测试用例的执行,每一个测试用例都可能会发现很多缺陷,测试人员要做好测试记录与跟踪,衡量缺陷的质量并编写缺陷报告。

当提交后的缺陷被开发人员修改之后,测试人员需要进行回归测试。如果系统对测试用例产生了缺陷免疫,测试人员则需要编写新的测试用例。

(5)编写测试报告

测试报告是一个测试活动的总结,对项目测试过程进行总结,对测试数据进行统计,对项目的测试质量进行客观的评价文档。

一份完整的测试报告必须要包含以下几个要点。

引言:描述测试报告编写目的、报告中出现的专业术语解释及参考资料等。测试概要:介绍项目背景、测试时间、测试地点及测试人员等信息。

测试内容及执行情况:描述本次测试模块的版本、测试类型,使用的测试用例设计方法及测试通过覆盖率,通过测试的通过情况提供对测试执行过程的评估结论,并给出测试执行活动的改进建议,以供后续测试执行活动中借鉴参考。

缺陷统计与分析:统计本次测试所发现的缺陷数目、类型等,分析缺陷产生的原因给出规避措施等建议,同时还要记录残留缺陷与未解决问题。

测试结论与建议:从需求符合度、功能正确性、性能指标等多个维度对版本质量进行总体评价,给出具体明确是否可用的结论。

测试报告的数据是真实的,每一条结论的得出是有评价依据的,不能是主观臆断的


习题

一、选择题

1、 在软件生命周期的哪一 个阶段,软件缺陷修复费用最低()
  A. 需求分析(编制产品说明书)                         B. 设计
  C. 编码                                                            D. 产品发布
正确答案:A

2、测试设计员的职责有:(  C   )

①制定测试计划 (测试或项目负责人做) ②设计测试用例  ③设计测试过程、脚本  ④评估测试活动(测试或项目负责人做)

A、①和②

B、① ②和③

C、②和③

D、① ② ③和④

3、测试文档种类:(  D   )。

A、需求类文档、计划类文档

B、设计类文档 执行类文档

C、缺陷记录类、阶段汇总类 测试总结类

D、以上都有

4、以下说法中错误的是(C)

A、软件配置项测试的目的是检验软件配置与软件需求规格说明的一致性

B、软件配置项测试一般由软件供方组织,由独立于软件开发的人员实施,软件开发人员配合

C、软件配置项测试不得委托第三方实施(可以是第三方实施,但必须是政府规定的一些单位)

D、软件配置项测试要求被测软件配置项已通过单元测试和集成测试

5、软件测试管理包括测试过程管理、配置管理以及(   A   )

A、测试评审管理  B、测试用例管理  C、测试计划管理  D、测试实施管理

6、以下关于软件可靠性与硬件的可靠性主要区别的说法中,正确的是(  A )。

A、软件的每个复制都是完全一样的,而按照设计生产出来的同规格硬件总有微小差别

B、软件经常面临恶意的使用者,而硬件没有恶意的使用者

C、软件的使用者通常遍及整个世界,而硬件的使用者通常只局限于某个地区

D、软件的失效都是逻辑错误引起的,而硬件的失效都不是逻辑错误引起的

7、以下哪一项属于软件易用性测试关注的范畴(  C  )。

A、软件是否能在多种操作系统下运行

B、软件是否能与同类软件共享数据 (兼容性)

C、软件是否能主动禁止用户可能进行的非法操作

D、软件是否能够抵御网络攻击 (安全性)

8、软件测试是软件开发过程的重要阶段,是软件质量保证的重要手段,下列哪个(些)是软件测试的任务?答案:( D )

1预防软件发生错误 2发现程序错误 3提供诊断错误信息

A.只有1 B.只有2 C.只有3 D.都是

9、可作为测试停止的标准是( D )

A.当时间用光时

B.执行了所有的测试用例,但没有发现故障

C.当所有缺陷都已经清除时

D.当达到所要求的覆盖时

10、下列描述错误的是( A)

A.软件发布后如果发现质量问题,那是软件测试人员的错

B.穷尽测试实际上在一般情况下是不可行的

C.软件测试自动化不是万能的

D.测试能由非开发人员进行,调试必须由开发人员进行。

11、从下列关于软件测试的叙述中,选出正确的叙述(AB)
 A.发现错误多的程序块,残留在模块中的错误也多
 B.测试设计时,应充分考虑 异常的输入情况
 C.用黑盒法测试时,测试用例是根据程序内部逻辑设计的
 D.测试的目的是验证该软件已正确的实现了用户的要求

12、下哪些内容属于软件测试的范围(ABCD)
 A.在产品需求阶段,了解需求详情并准备测试方案
 B.在版本提测之前,为开发人员准备自测用例
 C.在产品发布之前,组织众测并整理反馈
 D.在产品发布之后,关注用户数据和线上反馈

13、使用软件测试工具的目的是(ABC)
 A.帮助测试寻找问题 B.协助问题的诊断
 C.节省测试时间 D.提高bug的发现率

14、下面关于软件测试,描述正确的是(ABC)
 A.软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程
 B.软件测试的测试目标是发现一些可以通过测试避免的开发风险
 C.软件测试的原则之一是测试应该尽早进行。最好在需求阶段就开始介入
 D.软件测试主要工作内容是验证问题

15、在软件测试阶段,可以采用哪些策略进行单元测试(ABCD)
 A.逻辑覆盖 B.代码评审 C.同行评审 D.循环覆盖
解析C:同行评审是用来检验软件开发,软件评测各阶段的工作是否齐全、规范,各阶段产品是否达到了规定的技术要求和质量要求,以决定是否可以转入下一阶段的工作

16、以下关于软件测试活动目的的表述,正确的是(ACD)
 A.证明程序有错误,暴露问题
 B.证明发布的程序无任何错误
 C.证明技术实现与产品设计的一致性
 D.证明产品设计与用户需求的一致性

17、测试工程师在软件测试计划阶段依据(A)制定指定测试进度
 A.工作说明书 B.概要设计说明书 C.详细设计说明书 D.单元测试用例
工作说明书–SOW 制定测试进度
概要设计说明书–HLD 设计测试用例
详细设计说明书–LLD 程序员编码实现
单元测试用例–UTC 单元测试使用

18、以下关于软件回归测试的说法中错误的是( C )

A、软件变更后,应对软件变更部分的正确性和对变更需求的符合性进行测试

B、软件变更后,首先应对变更的软件单元进行测试,然后再进行其他相关的测试

C、软件变更后,不必再对软件原有正确的功能、性能和其他规定的要求进行测试

D、对具体的软件,可以根据软件测试合同及软件的重要性、完整性级别对回归测试内容进行剪裁

19、在软件修改之后,再次运行以前为发现错误而执行程序曾用过的测试用例,这种测试称之为( C )

A.单元测试 B.集成测试 C.回归测试 D.验收测试

20、下列选项中,哪一项是跨站脚本攻击漏洞( A  )

A. XSS    B. CSRF    C. SQL     D. Buffer Overflow

21、下列软件属性中,软件产品首要满足的应该是(A)

A)功能需求 B)性能需求 C)可扩展性和灵活性 D)容错纠错能力

22、下列哪一项不属于软件测试的阶段( )

A、 循环测试B、 测试设计C、 回归测试D、 测试计划

正确答案: A

23、与设计测试数据无关的文档是( )

A. 该软件的设计文档

B. 需求规格说明书

C. 项目开发计划

D. 源程序

答案:C

​​​24、(多选题)测试设计人员的职责有( )

A.设计测试过程、脚本

B.指定测试计划

C.评估测试活动

D.设计测试用例

答案:AD

25、下面项目中,不属于测试文档的是( )(单选题)

A、 测试计划

B、 程序流程图

C、 测试用例

D、 测试报告

答案: B

26、增量式集成测试有3种方式:自顶向下增量测试方法、( )和混合增量测试方式。
  A. 自下向顶增量测试方法
  B. 自底向上增量测试方法
  C. 自顶向上增量测试方法
  D. 自下向顶增量测试方法
参考答案:B

27、在软件测试步骤按次序可以划分为( )。
  A. 单元测试、集成测试、系统测试、验收测试
  B. 验收测试、单元测试、系统测试、集成测试
  C. 单元测试、集成测试、验收测试、系统测试
  D. 系统测试、单元测试、集成测试、验收测试
参考答案:A

28、 软件验收测试合格通过的标准不包括( )
  A. 软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
  B. 至少有一项软件功能超出软件需求分析说明书中的定义,属于软件特色功能。
  C. 立项审批表、需求分析文档、设计文档和编码实现一致。
  D. 所有在软件测试中被发现的严重软件缺陷均已被修复。
参考答案:B

29、下列关于alpha测试的描述中正确的是:( )
  A. alpha测试一定要真实的最终软件用户参加
  B. alpha测试是集成测试的一种
  C. alpha测试是系统测试的一种
  D. alpha测试是验收测试的一种
参考答案:D

30、编码阶段产生的错误主要由( )检查出来的。
A、单元测试 B、集成测试 C、系统测试 D、有效性测试
参考答案:A

13.

14. 以下哪种软件测试属于软件性能测试的范畴( )
  A. 接口测试   B. 压力测试   C. 单元测试   D. 正确性测试
参考答案:B

15. 下列关于α测试的描述中,正确的是( )
  A. α测试采用白盒测试技术;
  B. α测试不需要从用户角度考虑问题;
  C. α测试是系统测试的一种;
  D. α测试是验收测试的一种;
参考答案:D

16. 下列软件属性中,软件产品首要满足的应该是( )
  A. 功能需求   B. 性能需求   C. 可扩展性和灵活性   D. 容错纠错能力
参考答案:A

17. 按照测试组织划分,软件测试可分为:开发方测试,第三方测试及( )
A.集成测试 B.单元测试 C.用户测试 D.灰盒测试
参考答案:C

18. 软件可靠性是指在指定的条件下使用时,软件产品维持规定的性能级别的能力,其子特性( )是指在软件发生故障或者违反指定接口的情况下,软件产品维持规定的性能级别的能力。
  A. 成熟性   B. 易恢复性   C. 容错性   D. 稳定性
参考答案:C

19. 下面哪项对验收测试的描述不正确?( )
  A. 与系统测试不同的是以客户业务需求为标准来进行测试
  B. 测试人员多由客户方担任,也可以客户委托第三方来进行验收测试
  C. 由资深的开发和测试人员来进行测试
  D. 不仅仅要验收程序,还要验收相关的文档
参考答案:C

20. 对于软件的β测试,下列哪些描述是正确的? ( )
  A. β测试就是在软件公司内部展开的测试,由公司专业的测试人员执行的测试。
  B. β测试就是在软件公司内部展开的测试,由公司的非专业测试人员执行的测试。
  C. β测试就是在软件公司外部展开的测试,由非专业的测试人员执行的测试。
  D. β测试就是在软件公司外部展开的测试,由专业的测试人员执行的测试。
参考答案:C

21. 在程序测试中,用于检查程序模块或子程序之间的调用是否正确的静态分析方法是 ( )
  A. 操作性分析   B. 可靠性分析   C. 引用分析   D. 接口分析
参考答案:C

22. 用于考查当前软硬件环境下软件系统所能承受的最大负荷并帮助找出系统瓶颈所在的是( )
  A. 压力测试   B. 容量测试   C. 负载测试   D. 疲劳测试
参考答案:A
 

二、填空题

1、动态测试的两个基本要素是_______________、__________________。
参考答案:被测试程序       测试用例

2、运行被测程序的方法称为( 动态 )测试。

3、黑盒测试指把测试对象看成一个(黑盒子),测试人员完全不考虑程序的(内部结构和处理过程),只在(软件的接口处)进行测试,依据(需求规格说明书),检查程序是否满足功能要求,又称为(功能测试或数据驱动测试)。

4、黑盒测试用例设计方法包括( 等价类划分)、(边界值分析) 、( 因果图) 、(场景法)等。

5、缺陷状态有(New)、(Open)、(Fixed)、(Rejected)、(Reopen)、(Closed)等。

6. 集成测试指在(单元测试)基础上,将所有模块按照设计要求组装成一个(完整的系统)进行的测试。

7、需求评审的目的就是需要让需求明确起来,让测试,开发,需求方都能对需求(这里的需求当然也包括需求实现方式)达成一致。(√)

三、判断题

1、黑盒测试的测试用例是根据程序内部逻辑设计的。

2、软件测试是有效的发现软件缺陷的手段。

3、集成测试计划在需求分析阶段末提交。

四、简答题

1. 你认为应如何对一个软件实施测试。

结合我参与的课程设计和软件开发项目,采用的基本如 V 模型一样的测试过程.
①测试与开发应该同时进行。
②测试应该分为:单元测试,集成测试,系统测试,验收测试四步。
③对软件需求和软件设计进行验证确认。
④综合使用多种测试技术。
⑤采用自动化测试技术,工具,提高效率。
⑥一项测试任务应该包含需求分析,测试设计,测试开发,测试执行,测试总结,测试报告,六大环节。
⑦测试代码可以采取先静态测试再动态测试。
⑧对重点模块应该采用多种覆盖的代码。
⑨不同测试阶段侧重点不同。

2. 试结合你所参与过的软件项目,阐述软件测试工作的一般过程。过程:需求分析->概要设计->详细设计->编码->单元测试->集成测试->系统测试->验收测试
测试贯穿者整个软件开发活动的始终,前期恰到其时的测试可以为后期节约大量的时间成本​
顺序:需求分析,概要设计,详细设计,编码,
单元测试(软件详细设计说明书)确保每个程序模块能正常工作,
集成测试(软件概要设计说明书)对已通过单元测试模块组装再进行测试,
系统测试(软件规格说明书)软件系统搭建后,检查产品是否满足软件规格说明书中功能性能,
验收测试(软件需求规格说明书)从用户的角度检验和测试,看产品是否符合用户需求。

3. 对软件测试的复杂性进行归纳分析。

(1)无法对程序进行完全的测试:不论是黑盒测试方法还是白盒测试方法,由于测试情况数量巨大,都不可能进行彻底的测试。

(2)测试无法保证被测程序中无遗留错误:通过软件测试只能报告软件已经被发现的缺陷和故障,也不能保证经测试后发现的是全部的软件缺陷,即无法报告隐藏的软件故障。

(3)不能修复所有的软件故障:即使付出再多的时间和代价,也不能够使所有的软件故障都得到修复。

4. 分别解释什么是静态测试、动态测试、黑盒测试、白盒测试、人工测试和自动化测试。

(1)静态测试:静态测试指不运行被测软件,仅通过分析或检查等其他手段达到检测的目的。

(2)动态测试:指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,动态测试包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

(3)黑盒测试:指在对程序进行的功能抽象的基础上,将程序划分成功能单元,然后对每个功能单元生成测试数据进行测试。用这种方法进行测试时,被测程序被当作打不开的黑盒,因而无法了解其内部构造,因此又称为功能测试。

(4)白盒测试:根据被测程序的内部结构设计测试用例的一类测试,又称为结构测试或逻辑驱动测试,它是知道产品内部工作过程,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作。而不顾它的功能。

(5)人工测试:人工测试是人为测试和手工测试的统称。人为测试的主要方法有桌前检查 (desk checking) ,代码审查( code review )和走查( walkthrough )。手工测试指的是在测试过程中,按测试计划一步一步执行程序,得出测试结果并进行分析的测试行为

(6)自动化测试:是利用测试工具来执行测试,并进行测试结果分析的测试行为。.

5. 如果开发时间紧迫,是否可以跳过单元测试而直接进行集成测试?为什么?

不可以。因为没有经过单元测试的模块会遗留大量的缺陷到集成测试阶段,而在集成测试阶段对这些缺陷定位困难,导致后续工作展开困难,修复缺陷成本成指数级增长。

6.    什么是回归测试?什么时候应进行回归测试?回归测试就是重新运行现有测试用例测试原有功能,以便确定变更是否达到了预期的目的,检查变更是否损害了原有的正常功能。每当软件发生变化时,我们就必须进行回归测试,重新测试原有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能

7.    分析比较面向对象的软件测试与传统的软件测试有何异同

传统的单元测试的对象是软件设计的最小单位——模块。当考虑面向对象软件时,单元的概念发生了变化,此时最小的可测试单位是封装的类或对象,而不再是个体的模块。

传统单元测试主要关注模块的算法实现和模块接口间数据的传递,而面向对象的单元测试主要考察封装在一个类中的方法和类的状态行为。

面向对象软件没有层次的控制结构,因此传统的自顶向下和自底向上集成策略就不再适合,它主要有以下两种集成策略:基于类间协作关系的横向测试;基于类间继承关系的纵向测试。

系统测试一般不考虑内部结构和中间结果,因此面向对象软件系统测试与传统的系统测试差别不大。

面向对象软件测试的整体目标和传统软件测试的目标是一致的,即以最小的工作量发现尽可能多的错误,但是面向对象测试的策略和战术有很大不同。测试的视角扩大到包括复审分析和设计模型,此外,测试的焦点从过程构件(模块)移向了类

8、试着描述软件测试的定义

软件测试是一种用来促进鉴定软件的正确性,完整性,安全性和质量的过程。

定义:为了发现错误而执行程序的过程。
意义:以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由潜在的软件缺陷和错误造成的隐患所带来的的商业风险

9、什么是软件缺陷

计算机软件或程序中存在的某种破坏正常运行能力的问题,错误,或者隐藏的功能缺陷

10、常见的黑盒测试用例的设计方法?并分别介绍一下各自的思想

1)等价类划分法

2)边界值分析法

3)错误推测法

4)因果图法

5)判定表

6)正交试验设计法

11、列举常见的系统测试方法。答出5个即可

白盒测试 黑盒测试  灰盒测试 集成测试 单元测试 静态测试 动态测试

12、文档测试主要测试哪些内容?

检验用户文档的一致性,正确性,完整性

13、单元测试主要测试哪几方面的问题?

模块接口测试 局部数据结构测试 路径测试 错误处理测试 边界测试

14、优秀的软件测试工程师应具备哪些素质?

业务分析能力 全局把控能力 团队协助能力 逻辑思考能力  缺陷洞察能力 问题解决能力

15、自动化测试的优点

提高效率,降低成本,提高用户满意度,降低工程量

16、简单分析软件缺陷产生的原因,其中那个阶段引入的缺陷最多,修复成本又最低

原因:需求不明确 算法不准确 用户沟通存在困难需求分析阶段

17、请详细论述软件测试在软件项目开发中的地位是不可取代,极为重要的1、

2、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试等)

测试类型:功能测试、性能测试、界面测试
功能测试(黑盒测试):把测试对象看作一个盒子,利用黑盒测试进行动态测试时,需要测试软件产品的功能,不需要测试软件产品的内部结构和处理过程。

采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略

性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行,通过负载测试,确定在各种工作负载下系统的性能,目标时测试负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试

界面测试:界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户完成自己相应得操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能够给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的微距与放弃中付诸东流

区别:
 功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。
 性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。
 界面测试更关注于用户体验上,用户使用该产品时是否易用,是否易懂,是否规范(快捷键之类),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户五一输入无效数据),做某个性能测试时,首先它可能是一个功能点,保证其功能没问题,然后考虑该功能点的性能测试

补充网站:

缺陷管理工具与平台


①Jira:澳大利亚软件公司Atlassian开发,支持敏捷开发、缺陷管理顶目跟踪等https://www.atlassian/software/jira

②Bugzlla:Mozila基金会开发,开源缺陷管理工具,支持多平台和数据库、https://www.bugzilla/
③MantisBT:开源、免费、成熟,适于小型团队和中小型项目2016年最新维护,开源社区拥有大量用户,https://www.mantisbt
④ Gitlab:软件开发平台,提供一整套工具,包括持续集成/交付:敏捷项目管理和缺陷跟踪、源代码管理等https://about.gitlab/
⑤GitHub:基于Git的代码托管平台,全球最大的开源社区。提供问题银踪、项目管理和持续集成、代码托管等 https://github/

代码走查工具

①clang-Tidy:免费、开源,检测和修复c++代码中的缺陷和问题,.集成LVM和clang编译器,提供可扩展的框架,可根据项目需求配置。可与各种开发工具集成,如Visual studio、vs code、Eclipse。https://clang,llum/extra/clang-tidy/

② Cppcheck:免费、开源,检测c++代码中的错误和问题。可在多平台上运行,支持与各种开发工具的集成。可检查内存泄漏、数组下标越界、未初始化变量等常见的编程错误,并提供相应的修复建议;支持自定义规则和过滤器,以便更好地适应特定项目的需求。http://cppcheck,sourceforge/)

本文标签: 测试最重要第二部分方法内容