----------------------------------------------------------------------------基础知识点---------------------------------------------------------------------------------------------

一、软件测试的定义 
软件测试是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该有的操作。 

1.软件测试与调试的区别? 
(1)测试是为了发现软件中存在的错误;调试是为证明软件开发的正确性。 
(2)测试以已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序是否通过测试;调试一般是以不可知的内部条件开始,除统计性调试外,结果是不可预见的。 

(3)测试是有计划的,需要进行测试设计;调试是不受时间约束的。 
(4)测试经历发现错误、改正错误、重新测试的过程;调试是一个推理过程。 
(5)测试的执行是有规程的;调试的执行往往要求开发人员进行必要推理以至知觉的"飞跃"。 
(6)测试经常是由独立的测试组在不了解软件设计的条件下完成的;调试必须由了解详细设计的开发人员完成。 
(7)大多数测试的执行和设计可以由工具支持;调式时,开发人员能利用的工具主要是调试器。

二、软件测试的分类 
1.按照测试技术划分 
(1)白盒测试:通过对程序内部结构的分析、检测来寻找问题。检查是否所有的结构及逻辑都是正确的,检查软件内部动作是否按照设计说明的规定正常进行。--结构测试 
(2)黑盒测试:通过软件的外部表现来发现错误,是在程序界面处进行测试,只是检查是否按照需求规格说明书的规定正常实现。--性能测试

2.按照是否让备测软件运行划分 
(1)静态测试 (2)动态测试 

3.按照开发阶段划分 
(1)单元测试:模块测试,检查每个程序单元嫩否正确实现详细设计说明中的模块功能等。 

(2)集成测试:组装测试,将所有的程序模块进行有序、递增的测试,检验程序单元或部件的接口关系 。

(3)系统测试:检查完整的程序系统能否和系统(包括硬件、外设和网络、系统软件、支持平台等)正确配置、连接,并满足用户需求。 

(4)确认测试:证实软件是否满足特定于其用途的需求,是否满足软件需求说明书的规定。 

(5)验收测试:按项目任务或合同,供需双方签订的验收依据文档进行的对整个系统的测试与评审,决定是否接受或拒收系统。

 

三、软件测试的原则 
1.测试用例中一个必需部分是对预期输出或结果的定义; 

2.程序员应当避免测试自己编写的程序; 

3.编写软件的组织不应当测试自己编写的程序;

4.应该彻底检查每个测试的执行结果; 

5.测试用例的编写不仅应当根据有效和预期的输入情况,也应当根据无效和未预料到的输入情况; 

6.检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了不应该做的”; 

7.应避免测试用例用后既弃,除非软件本身就是一个一次性的软件; 

8.计划测试工作时不应默许假定不会发现错误; 

9.程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比;

10.软件测试是一项极富创造性、极具智力挑战性的工作。

 

四、测试用例的设计 
1.测试用例的定义 
(1)测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。 (2)测试用例是执行的最小实体。 
2.特征: 
(1)最有可能抓住错误的;               (2)不是重复的、多余的; 
(3)一组相似测试用例中最有效的; (4)既不是太简单,也不是太复杂。 

3.设计测试用例的基本准则 
测试用例的代表性、测试结果的可判定性、测试结果的可再现性。 


五、黑盒测试
1.等价类划分法 
①等价类划分法的设计方法:是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少量具有代表性的数据作为测试用例。 

等价类是指某个输入域的子集合。在该子集合中各个输入数据对于揭露程序中错误都是等效的。

并合理地假定:测试某等价类的代表值就等于对这一类其他值的测试。 

有效等价类:对于程序的规格说明来说是合理的、有意义的输入数据构成的集合 无效等价类:对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合 

等价类对于测试有两个重要的意义:完备性无冗余性 

②等价类划分法的原则 

(a)按照区间划分:     一个有效等价类和两个无效等价类。 

(b)按照数值划分:     n 个有效等价类和一个无效等价类 

(c)按照数值集合划分   一个有效等价类和一个无效等价类 

(d)按照限制条件或规则划分:可确定一个有效等价类和若干个无效等价类 

(e)细分等价类 

③等价类划分法的步骤 

(a)确定等价类 

(b)建立等价类表,列出所有划分出的等价类

(c)从划分出的等价类中按以下的3个原则设计测试用例: ·为每一个等价类规定一个唯一的编号 
·设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止; 
·设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。 

④确定等价类的方法 

(a)先考虑输入数据的类型(合法型和非法型); 

(b)再考虑数据范围(合法型中的合法区间和非法区间); 

(c)最后考虑输出结果,逆向设定输入。

2.边界值分析法
①边界值分析法就是对输入或输出的边界值进行测试 
②特点:具有很强的发现程序错误的能力;测试用例来自等价类的边界; 
③基本原理:故障往往发生在输入定义域和输出值域的边界上,而不是在其内部。 

④方法:

(a)首先应确定边界情况.  
(b)选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据 

⑤标准边界值:min、min+、nom、max-、max 
健壮边界值: min、min+、nom、max-、max  min- max+ 
⑥例: 
<xnom,ymin><xnom,ymin+><xnom,ymax><xnom,ymax-> <xmin,ynom><xmin+,ynom><xmax,ynom><xmax-,ynom><xnom,ynom> 
⑦对于一个含有n个变量的程序,只让其中一个变量取极值,让其余的变量取正常值,被保留的变量依次取min、min+、nom、max-、max值,对每个变量都重复进行。n个变量的程序,边界值分析测试程序会产生4n+1个测试用例。

 

六、白盒测试 
1.白盒测试概述:白盒测试也称结构测试或逻辑驱动测试。 

2.方法:程序结构分析;逻辑覆盖测试;基本路径测试。 

3.原则: 
(1)保证一个模块中所有独立路径至少被测试一次; 
(2)所有逻辑值均需测试真(True)和假(False)两种情况; (3)检查程序的内部数据结构,保证其结构的有效性; (4)在取值上、下边界,即可操作范围内运行所有循环. 

4.逻辑覆盖测试:主要是测试覆盖率,以程序内在逻辑结构为基础的测试。 

6种:语句覆盖 判断覆盖 条件覆盖 判定-条件覆盖 条件组合覆盖 路径测试. 
①语句覆盖:在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次 

·判定:整体 控制。 包括:a、单一条件判定;b、符合条件覆盖 ·语句覆盖率:已执行的可执行语句占程序中可执行语句总数的百分比 
②判定覆盖:设计足够多的测试用例,使程序中的每个判定至少都获得一次“真值”或“假值”。 

③条件覆盖:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。 满足条件覆盖的不一定满足判定覆盖,反之亦然。两者无直接关系。 

④判定/条件覆盖:设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次

⑤组合条件覆盖(MCC):设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。 
满足组合条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖。 

⑥修正条件判定覆盖(MCDC):需要足够的测试用例来确定各个条件能够影响到包含的判定的结果,即要求满足两个条件。

 

七、静态测试 
1.静态测试不实际运行软件,主要对软件的编程格式、结构等方面进行评估。可以有人工进行,也可借助软件工具自动进行。 

2.静态测试的方法   
(1)代码检查:代码审查 代码走查 桌面检查 同行评分(略) 
(2)代码审查:通常由4人组成,其中一人是协调人,一人是程序的编写者,其他人员通常是程序的设计人员以及测试专家。 
优点和作用:错误列表、高效、会后修正、增加修改错误清单、较早发现错误。 (3)代码走查:为测试员的人会带着一些书面的测试用例参加会议 (4)桌面检查:(a)完全没有约束(b)开发人员测试自己的程序(c)没有展示自己能力,缺乏良好的效应。(效果远远逊于代码审查和代码走查) 

3.静态结构分析:主要是以图形的方式表现程序的内部结构。 

4.代码质量度量:功能性 可靠性 可用性 |有效性 可维护性 轻便性

 

八、单元测试 
1.单元测试的定义 
单元测试又称模块测试,是最小单位的测试,其依据是详细设描述,对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。 单元测试多采用白盒测试技术 

2.单元测试的对象 
·结构化程序,单元测试的单元是指单个子程序、函数或过程 ·面向对象程序,单元测试的单元是指类或方法(通常为类)。 

3.单元测试的目的 
将模块的功能与定义模块的功能规格说明或接口规格说明进行比较,揭示出模块与其规格说明之间存在的矛盾。 

4.单元测试的人员:开发人员 

5.单元测试的针对的问题 
(1)模块接口:   检查进出程序单元的数据流是否正确。 

(2)局部数据结构:  必须测试模块内部的数据能否保持完整性。 

(3)边界条件测试:主要检查临界数据是否正确处理。 

(4)独立路径测试:发现由于不正确的判定或不正常的控制流而产生的错误

(5)出错处理:要求能预见出错的条件,并设置适当的处理对象,保证其路径的正确性。 

6.单元测试的流程 
计划单元测试设计单元测试执行单元测试评估单元测试

7. 计划单元测试

(1)驱动模块(Drive):用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启动被测模块,并打印出相应的结果。 (2)桩模块(Stub):用来模拟被测模块工作过程中所调用的模块。它们一般只进行很少的数据处理。  

8.设计单元测试 

(1)需要的信息 
·模块的规格说明:模块的输入和输出以及模块的功能。 ·模块的源代码。 
(2)测试用例的设计方法 
·模块测试总体上是面向白盒测试的(静态、动态) ·后续测试针对较大的元素不易进行白盒测试。 
·后续测试着眼于发现其他类型的错误,不一定与程序逻辑结构有关。 
·使用一种或多种白盒测试方法分析模块的逻辑结构,然后使用黑盒测试方法对照模块的规格说明补充测试用例。 9.执行单元测试 (1)设置测试环境 (2)将测试环境初始化 (3)执行测试过程。 

九、集成测试 
1.集成测试的定义 
集成测试又称组装测试,集成测试是在单元测试的基础上,将所有模块按照设计要求组装成子系统或系统进行的测试活动。 

2.集成测试的目的 
确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确,所测试的内容包括单元间的接口以及集成后的功能。 

3.集成测试的层次 (1)模块内集成测试 (2)子系统内集成测试 (3)子系统间集成测试 4.集成测试的流程 5.集成测试的方法 
(1)静态测试:只要指对概要设计的测试。 
(2)动态测试:以黑盒测试为主,需要了解内部细节时结合白盒测试 6.集成测试策略 
(1)非增量式集成:对所有模块进行个别的单元测试后,按照程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。 

 

--------------------------------------------------------------------------------------------问答-----------------------------------------------------------------------------------------------

1. 软件生命周期(SDLC)的六个阶段 
1、问题的定义及规划 
      此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。 
2、需求分析 
      在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

3、软件设计 
      此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。 
4、程序编码 
      此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。 
5、软件测试 
      在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 
6、运行维护 
      软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。 


2、软件生命周期模型

从概念提出的那一刻开始,软件产品就进入了软件生命周期。在经历需求、分析、设计、实现、部署后,软件将被使用并进入维护阶段,直到最后由于缺少维护费用而逐渐消亡。这样的一个过程,称为"生命周期模型"(Life Cycle Model)。 典型的几种生命周期模型包括瀑布模型、快速原型模型、迭代模型。 
瀑布模型的特点(文档是主体),很多的问题在最后才会暴露出来。迭代模型比瀑布模型问题暴露的要早;快速原型法比瀑布模型直观。

 

3.软件测试概念 
广义概念:指软件生存周期中所有的检查、评审和确认工作,其中包括了对分析、
设计阶段,以及完成开发后维护阶段的各类文档、代码的审查和确认 狭义概念:识别软件缺陷的过程,即实际结果与预期结果的不一致 

 

4.软件测试目的

 1. 测试的目的就是发现软件中的各种缺陷 

  2. 测试只能证明软件存在缺陷,不能证明软件不存在缺陷 

  3. 测试可以使软件中缺陷降低到一定程度,而不是彻底消灭  

  4.  以较少的用例、时间和人力找出软件中的各种错误和缺陷,以确保软件的质量

 

5.软件测试原则

 Good-enough: 一种权衡投入/产出比的原则 

 保证测试的覆盖程度,但穷举测试是不可能的 

 所有的测试都应追溯到用户需求 
 越早测试越好,测试过程与开发过程应是相结合的 

 测试的规模由小而大,从单元测试到系统测试 
 为了尽可能地发现错误,应该由独立的第三方来测试 

 不能为了便于测试擅自修改程序 
既应该测试软件该做什么也应该测试软件不该做什么 


6.软件测试的的重点
 测试用例的设计 
– 测试用例的设计是整个软件测试工作的核心 – 测试用例反映对被测对象的质量要求,决定对测试对象的质量评估 
 测试工作的管理 
– 尤其是对包含多个子系统的大型软件系统,其测试工作涉及大量人力和物力,有效的测试工作管理是保证有效测试工作的必要前提

 测试环境的建立 
– 测试环境应该与实际测试环境一致 

 

7.黑盒测试 
 什么是黑盒测试 
– 又称功能测试或数据驱动测试,是针对软件的功能需求/实现进行测试,通过测试来检测每个功能是否符合需求,不考虑程序内部的逻辑结构

 黑盒测试方法:– 功能划分 – 等价类划分 – 边界值分析 – 因果图 – 错误推测等 


8.什么是白盒测试 
– 白盒测试也称结构测试或逻辑驱动测试,必须知道软件内部工作过程,通过测试来检测软件内部是否按照需求、设计正常运行
– 白盒测试的主要方法 
– 对应于程序的一些主要结构:语句、分支、逻辑路径、变量;

白盒测试的主要方法是:– 语句覆盖方法 – 分支覆盖方法 – 逻辑覆盖方法

 

9. 什么是动态测试
动态测试需要在开发/测试环境或实际运行环境中运行软件,并使用测试用例去查找软件缺陷;动态测试包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等   

 

10.什么是静态测试 
静态测试不实际运行软件,主要是对软件的编程格式、结构等方面进行评估.静态测试包括代码检查、程序结构分析、代码质量度量等。它可以由人工进行,也可以借助软件工具自动进行

 

11.手工测试和自动测试 

a.手工测试缺点在于测试工作量大,重复多,回归测试难以实现 
b.自动测试利用软件测试工具自动实现全部或部分测试工作:管理、设计、执行和报告;节省大量的测试开销,并能够完成一些手工测试无法实现的测试 
 手工完成测试的全部过程无法保证测试的科学性与严密性: 
    – 修改的缺陷越多,回归测试越困难 
    – 没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率
    – 反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一 – 测试花费的时间越长,测试的严格性也就越低 
 自动测试将测试人员从反复、烦杂的测试执行中解放出来,用更多的时间进行测试设计和结果分析

 软件测试不可能完全自动化 

 不能完成所有手工测试任务 

 无创造性且灵活性差,不能改进测试的有效性

 过程中可能会遇到许多意想不到的问题,特别是当软件不稳定时

 测试脚本的维护高

 

12. 测试流程 :

 单元测试  集成测试  系统测试  用户验收测试  回归测试

---------------------------------------------------------------------------------试题--------------------------------------------------------------------------------------

一.简答题和应用题

 

01.为什么要在一个团队中开展软件测试工作? 
因为没有经过测试的软件很难在发布之前知道该软件的质量,在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。 
02.您认为做好测试用例设计工作的关键是什么? 
白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果 
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题 

2.什么是软件测试? 
答:软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各
阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

3.比较软件测试过程和软件开发过程?

4.比较白盒测试和黑盒测试?
使用白盒测试方法时,确定测试数据应根据程序的内部逻辑和指定的覆盖标准; 黑盒测试法是通过分析程序的接口功能来设计测试用例的。 

5.简述软件测试的步骤?

软件测试的复杂性分析;软件测试方法与策略;单元测试;集成测试;确认测试;验收测试;测试后的调试;面向对象的软件测试! 

6.什么是测试用例 
 答:测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。 

7.软件测试的步骤 
答:单元测试、集成测试、系统测试、确认测试(产品发布)     

       定义时期:问题定义,可行性研究; 
    开发时期:需求分析,软件设计,编码,测试;     维护时期:维护;

8.QTP工具使用流程 
答: 录制测试脚本,编辑测试(结构化)脚本(专家视图),调试测试脚本,运行测试脚本, 分析测试结果(QTP自动产生测试报告) 

9.了解4-5中软件测试类型

 

二.填空题:
1.单元测试是以 详细设计 说明书为指导,测试源程序代码;集成测试以 概要设计 说明书为指导,测试软件结构;确认测试以 需求分析 说明书为指导。 

2.代码复审属于 静态测试(或人工测试) ,不实际运行程序。 

3.动态测试分为 黑盒测试法 即功能测试,和 白盒测试法 即结构测试。 

4.边界值分析法属于 黑盒测试法 。 

5.逻辑覆盖属于 白盒测试法 ,包括 语句覆盖 、分支覆盖、 条件覆盖 、判定/条件覆盖、条件组合覆盖 、 路径覆盖 。 

6.软件是包括 程序 、 数据、 相关文档 的完整集合 

7.硬件与软件的最大区别是:软件产品是 逻辑 产品,硬件产品是物质产品。 

8. 计算机软件 和 计算机硬件 构成了完整的计算机系统。 

9. 软件工程的结构化生命周期方法是将软件开发的全过程划分为相互独立而又相互依存的阶段,软件的 逻辑模型是形成于  需求分析阶段  。 

三.判断题:

 

1.(×)用黑盒法测试时,测试用例是根据程序内部逻辑设计的。 

2.(√)白盒测试是基于对程序控制结构了解的基础上来设计测试用例的。 

3.(×)测试是为了验证软件正确地实现了用户需求。 

4.(√)确认测试主要测试软件功能是否满足用户的合理需求,以“需求规格说明书”为测试依据。 

5.(×)软件测试时经常要输入无效的,不合理的数据进行测试。 

6.(×)如果发布的软件有质量问题,那是软件测试人员的错。 

7.(×)设计-实现-测试,软件测试是开发后期的一个阶段。 

四.选择题:
1.软件测试是按照特定的规程,__A___的过程。 
   A发现软件错误                       B说明程序正确 
   C证明程序没有错误                   D设计并运行测试用例 

2.测试用例是专门为了发现软件错误而设计的一组或多组数据,它由___C____组成。    

A测试输入数据                       B预期的测试输出数据 
   C测试输入和预期的输出数据          D按照测试用例设计方法设计出的数据 

3.一个成功的测试是____B___。 
   A发现错误                           B发现了至今尚未发现的错误    C没有发现错误                       D证明发现不了错误  

4.测试过程的活动几乎贯穿整个开发过程,他大体分为___D___和系统测试阶段。    

A模块测试、集成测试、有效性测试     B模块测试、功能测试、回归测试    C单元测试、功能测试、用户测试       D单元测试、集成测试、确认测试 

5.测试过程的三个测试阶段分别以___A____文档为指导。 
   A需求规格说明书、概要设计、详细设计     B产品目标设计、产品设计、测试计划    C产品需求分析、产品设计、产品测试计划   D测试计划、测试用例设计、测试报告 

6.在白盒法中,无论采用那种覆盖标准都不可能达到100%覆盖率。它们的目标都是_ A___。    

     A 用尽可能少的测试用例发现尽可能多的错误。    B 从理论上证明100%的覆盖率是不可能达到的。 
   C 说明测试的强度是可估量的。                  D 说明测试的标准是可比较的。

7.白盒法与黑盒法最大的不同在于___B____。 
   A测试用例设计方法不同               B测试的任务不同    C应用的测试阶段不同                 D基于的知识集不同 

8.使用白盒测试方法时,确定测试数据应根据__  A_ __和指定的覆盖标准; 
黑盒测试法是通过分析___D____来设计测试用例的。 
A 程序的内部逻辑            B 程序的复杂程度                 C 使用说明书                D 程序的接口功能 

9.单元测试一般以   A   为主,测试的依据是   C   。 
   A白盒法                   B黑盒法           C模块内部逻辑规格说明  
D系统结构图                              E系统需求规格说明 

10.编码阶段产生的错误由   A   检查出来。
   A单元测试                         B 集成测试 
     C有效性测试                       D 系统测试