从各种渠道凭借自己的理解整理的,仅供参考,不保证对
第一章 概述
软件测试的目的和意义何在?
软件测试的目的是检验系统是否满足规定需求,或弄清实际结果与预期之间的差别,验证和确定软件质量
软件测试的意义在于将本来有可能出现在用户面前的错误,在软件开发的周期中提前解决
第二章 软件测试基础
1、软件测试的定义。
IEEE:使用人工和自动手段来运行或测试某个系统的过程,其目的是在于检验它是否满足规定的需求,或是弄清预期结果与实际结果之间的差别
Myers:程序测试是为了发现错误而执行程序的过程
正面测试:根据需求\功能列表逐个验证,为了证明软件是可以正常工作的
反面测试:想方设法找出软件中存在的缺陷,为了证明软件会出现无法正常工作的情况
在实际的应用中,同时存在两种思维方式
2、软件测试有哪些原则?
站在用户的角度,对产品进行全面测试
尽早,尽可能多的发现缺陷,并负责跟踪和分析产品中的问题
对不足之处提出质疑和改进意见
争取零缺陷,做到足够好
3、什么是软件缺陷(Bug)?简述错误、缺陷、故障之间的关系。
软件缺陷是计算机软件或程序中存在的某种破坏正常运行功能的问题、错误或隐藏的功能缺陷
错误是人类的失误行为
缺陷是错误在软件中体现出来的结果
故障是缺陷被引发时,可能导致的系统失效
4、Bug的来源有哪些?
经验不足:
对用户业务不熟悉
没有遵守编程规范
非预期行为估计不足
疏忽大意:
语法错误
构建错误
定义错误
语义错误
内存错误
计算错误
不良心理:
希望只得到正面评价
担心别人发现自己的问题
不能积极面对质疑
5、缺陷分为哪四级?有哪些不同的状态?
致命:
造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能完全丧失
严重:
主要功能或特性没有实现,导致严重问题的错误声明
一般:
不影响系统的使用,但没有很好的实现功能,没有达到预期效果。如次要功能丧失,提示信息不太准确,用户界面差,操作时间长
微小:
对功能几乎没有影响,产品及属性仍然可用,如有个别错别字,文字排列不整齐
6、简述在软件开发生命周期中提前测试的好处。
提前测试可以减少后期测试带来的返工和其他不必要的工作
7、在V模型中,软件开发的各阶段和软件测试活动有什么关系?
进行提前测试,利用测试驱动软件开发
需求分析阶段,测试活动是需求验证,即确认需求是否与用户的需求一致
设计阶段,测试活动是设计验证,即确认设计是否满足软件需求
编码阶段,测试活动是单元测试,即对单独的代码单元进行测试
集成测试阶段,测试活动是集成测试,即将已经测试过的代码单元组合起来进行测试
系统测试阶段,测试活动是系统测试,即对整个系统进行测试
8、软件测试包括哪些阶段?
需求评审、设计评审、单元测试、集成测试、系统测试、验收测试、α测试、β测试
第三章 软件质量保证
1、软件质量的概念。
软件产品满足规定的和隐含的与需求能力有关的全部性能和特性,包括:
(1)软件产品质量满足用户要求的程度
(2)软件各种属性的组合程度
(3)用户对软件产品的综合反映程度
(4)软件在使用过程中满足用户要求的程度
2、在软件质量模型中,一般包括哪些软件质量特性?
3A特性:
可说明性:
用户可以基于产品或服务的描述和定义使用软件,项目人员可以利用项目说明理解软件的功能、结构和组成关系
有效性:
产品或服务对于客户的需求是否能保持有效的满足,如具有99.99%有效性,可以说达到质量要求
易用性:
对于用户,产品或服务要容易使用,并且耐用;对于开发人员也要便于理解和维护
3、软件生命周期中包括哪些质量,简述它们之间的关系。
过程质量:过程的完善程度和标准执行的力度
内部质量:开发过程中,过程产品的质量
外部质量:完整的系统运行表现出的质量特性
使用质量:用户在实际使用环境中对产品的感受
过程质量直接影响内部质量,内部质量影响外部质量,外部质量影响使用质量;如果在软件开发过程中,没有得到很好的管理和控制,可能会导致软件内部结构和质量不佳,进而影响软件的外部表现和用户使用体验,最终影响软件的整体质量
4、CMM的全称是什么?CMM分为几级,各等级是如何描述的?
CMM全称:软件能力成熟度模型
初始级,CMM1:
软件过程的特点是无秩序的,偶尔甚至是混乱的。几乎没有什么过程是经过定义的,成功依赖于个人的努力。
可重复级,CMM2:
已建立基本的项目管理过程去跟踪成本、进度和功能性。必要的过程纪律已经就位,使具有类似应用的项目,能重复以前的成功。
已定义级,CMM3:
管理活动和工程活动两方面的软件过程均已文档化、标准化、并集成到组织的标准软件过程。
已管理级,CMM4:
已采集详细的有关软件过程和产品质量和度量。无论软件过程还是产品均得到定量了解和控制。
优化级,CMM5:
利用来自过程和来自新思想、进技术先导性实验的的定量反馈信息,使持续过程改进成为可能。
第四章 软件测试类型及方法综述
1、熟悉单元测试、集成测试、系统测试、验收测试的基本概念。
单元测试:软件基本组成单元进行的测试,测试的对象是软件设计的最小单位,模块
集成测试:将已分别通过测试的单元,按设计要求组合起来再进行测试,试验集成后的系统是否达到了既定的设计目标
系统测试:用于验证经测试的集成系统是否满足指定性能需求和整体性的功能,是系统级别的测试
验收测试:在系统测试通过,以及发现错误的软件基本修正后才开始的测试,是整个确认测试的最后一个阶段,由用户在使用环境下测试
2、熟悉功能测试和性能测试的基本概念和内容。
功能测试:
验证和确认产品规格说明书规定的要求是否都的到了满足,验证每个单元模块及多个模块集成后的系统能不能满足用户需求
性能测试:
不描述功能,描述系统执行功能时的情况,或者性能如何
3、熟悉手工测试和自动化测试、静态测试和动态测试、白盒测试和黑盒测试、回归测试、冒烟测试、随机测试的基本概念。
手工测试:测试人员在不借助工具的情况下进行测试
自动化测试:通过软件测试工具实现的测试
静态测试:在软件及其功能不被执行的情况下,进行测试
动态测试:在软件功能被执行时进行的测试
白盒测试:在测试时能看到输入输出的结果,也能看到源代码和程序执行的数据结构
黑盒测试:测试时只关注输入输出的结果,不去关系程序的源代码和执行过程
回归测试:重复测试先前测试过或修改过的程序,确认程序发生的更改未影响程序的其他未改变部分
冒烟测试:对系统进行大规模测试前,先验证其基本功能是否实验,是否具备可测性
随机测试:测试中所有的输入数据全部随机生成,以此模拟用户的真实操作
第五章 测试用例写作
掌握测试用例的写作规范。
第六章 缺陷管理
1、软件缺陷的概念。
内部:软件产品开发或维护过程中存在的错误、毛病和各种问题
外部:系统所需要实现的某种功能失效,或与用户需求相违背
2、软件缺陷产生的原因有哪些?
(1)技术问题:
(开发人员技术水平限制)开发人员技术的限制,系统设计不能够全面考虑功能、性能和安全性的平衡
(新技术的不稳定性)刚开始采用新技术,解决和处理问题时不够成熟
(软件系统过于复杂)由于逻辑过于复杂,很难在第一次就将问题全部处理好
(系统结构不合理)系统结构设计不合理或算法不科学,造成系统性能低下
(接口参数设计不合理)接口参数太多,导致参数传递不匹配
(需求与技术水平不匹配)需求规格说明书上的有些功能在技术上无法实现
(系统数据保护功能不完善)没有考虑系统崩溃后的自我恢复或数据的异地备份、灾难性回复等需求,导致系统存在安全性、可靠性的隐患
(部分语言特性)一般情况下,对应的编程语言编译器可以发现这类问题,对于解释性语言,只能在测试运行的时候发现
(2)软件本身:
(开发标准与过程不完善)不完善的软件开发标准或开发流程
(内容错误)文档错误、内容不正确或拼写错误
(性能限制)没有考虑大量数据使用场合,从而可能会引起强度或负载问题
(数据范围)对程序逻辑路径或数据范围的边界考虑不够周全,漏掉某几个边界条件造成的问题
(实时性一致性)对一些实时应用,缺乏整体考虑和精心设计,忽略了时间同步的要求,从而引起系统个单元之间的不协调、不一致性的问题
(硬件与第三方)与硬件、第三方系统软件之间存在接口或依赖性
(3)团队工作
(质量重视)团队文化中,对软件质量不够重视
(对外交流)系统分析时对客户的需求不明确,或与用户的沟通存在困难,导致分析需求出现误解或不全面
(对内交流)各阶段间的开发人员相互之间理解不一致,软件设计对需求分析存在理解偏差,编程人员误解计划说明书中的某些内容
(沟通问题)设计或编程中的假定或依赖,未能得到及时充分的沟通
3、掌握软件缺陷报告的描述方法(软件缺陷的属性)。
描述方法:
单一准确,每条报告只针对一个软件缺陷
可以再现,提供明确的再现该缺陷的步骤
完整统一,提供完整、前后统一的缺陷信息,证明缺陷的出现,描述缺陷出现的环境条件
适度抽象,使用标识性关键词,帮助阅读者定位缺陷
注重条件,不能忽视缺陷出现时的细节描述,如操作状态或条件
跟踪描述,测试人员有责任关注缺陷的处理结果,为此需要记述缺陷修复的全过程
客观评价,可对软件缺陷可以进行适当分析与评价,要求公正客观,对事不对人
缺陷属性:
缺陷标识,标记某个缺陷的唯一标识,可用字母或数字序号表示
缺陷类型,
功能缺陷、用户界面缺陷、文档缺陷、软件包缺陷、性能缺陷、系统/模块接口缺陷
缺陷的严重程度,
在一定的测试条件下,一个错误在系统中的绝对影响(四级缺陷)
致命、严重、一般、较小
缺陷产生的可能性,
指缺陷在产品中发生的可能性,可以用频率来表示
总是、通常、有时、很少
缺陷优先级,
指缺陷必须被修复的紧急程度,优先级与严重程度相关,与可能性相关
立即解决P1、高优先级P2、正常排队P3、低优先级P4
缺陷状态,
激活或打开、已修正或修复、关闭或非激活、重新打开、推迟、保留、不能重现、需要更多信息
缺陷来源:
需求说明书、设计文档、系统集成接口、数据库、程序代码
4、简述软件缺陷的处理跟踪过程。
缺陷报告:测试人员、开发人员、用户发现缺陷并报告,缺陷报告应包含缺陷描述、重现步骤和屏幕截图
缺陷确认(审阅):测试(项目)管理员确认发现的是否为缺陷,若确认其为缺陷,则将其记录在系统中
缺陷分析:开发人员对缺陷进行分析,确定其产生的原因,找出缺陷产生的根本原因
缺陷修复:开发人员根据分析结构进行修复,修复后需要进行单元测试和集成测试,确保修复不会引入新缺陷
缺陷验证:测试人员对修复后的缺陷进行验证,确保缺陷已经被完全修复,如果验证通过,则缺陷状态将会被标记为已解决
缺陷关闭:缺陷被确认为已经解决后,可以将其关闭,如果缺陷在后续测试中再次出现,则需要重新打开并进行处理
5、对软件缺陷报告有哪些处理方式?
审阅——对缺陷报告进行评价
拒绝——对缺陷报告保留意见
接受——对缺陷报告给予肯定
分配——开始排除缺陷
再测试——检验缺陷排除的结果
重新打开——再次排除缺陷
关闭——结束测试工作
暂缓——搁置缺陷处理工作
第七章 静态测试与动态测试
1、静态测试与动态测试的概念。
静态测试:
是一种不通过执行程序的测试技术。根据用户的要求及相关标准、规范对测试对象进行分析与检查。
动态测试:
通过真正运行程序发现程序,通过观察代码运行过程,来获取系统行为、变量实时结果,内存、堆栈、线程以及测试覆盖度等各方面的信息,来判断系统是否存在问题。
2、静态测试的对象包括哪些?
文档、代码、界面
3、静态测试技术有哪些?各种技术是如何实施测试的?
手工检测:走查、审查、评审
自动化检测:编译器、静态测试工具
4、静态测试可以发现文档或代码中的哪些缺陷?
(1)语法错误:编写代码和文档是,可能会犯语法错误,例如错别字、标点符号、缺少分号等。
(2)代码和文档风格问题:代码和文档应该遵循一定的风格规范,例如缩进、命名规范、注释等。
(3)逻辑错误:代码中可能存在逻辑错误,例如死循环、逻辑错误等。
(4)安全漏洞:在编写代码时,可能会忽略安全漏洞,例如SQL注入、跨站点脚本攻击等。
(5)性能问题:代码可能存在性能问题,例如时间复杂度高、内存泄露等。
5、了解有哪些静态测试工具?
(1)PMD是一个代码检查工具,它用于分析Java源代码,找出潜在的问题
(2)FindBugs是一个开源的静态代码分析工具,基于LGPL开源协议,无需运行就能对代码进行分析的工具。不注重style及format,注重检测真正的bug及潜在的性能问题,尤其注意了尽可能抑制误检测(false positives)的发生。
(3)Checkstyle是一款检查Java程序源代码样式的工具。
(4)Hammurapi它是一个开源的代码审查/评审(review)工具。它可以帮助改进Java代码的质量。它可以基于一套设计规范来分析代码库。当它碰到违反规范的地方,会在报告中标识。就像Checkstyle一样,它与Ant无缝集成并且由基于XML配置文件来驱动。
第八章 白盒、黑盒测试
1、白盒测试方法有哪些?各种方法是如何设计测试用例的?
逻辑覆盖法:通过程序逻辑结构遍历实现程序的覆盖
基本路径测试法:
程序插装法:
2、黑盒测试方法有哪些?各种方法是如何设计测试用例的?
3、掌握使用白盒测试的逻辑覆盖法设计测试用例。
4、掌握使用黑盒测试的等价类划分法、边界值分析法、因果图法设计测试用例。
第九章 单元测试
1、单元测试的概念。
软件基本组成单元进行的测试,测试的对象是软件设计的最小单位,模块
2、单元测试的对象是什么?单元测试的依据是什么?
对象:
方法(重点)、类、组件、菜单、界面、能独立完成的具体单元
依据:
系统详细设计
3、单元测试的目标是什么?
总目标:
确保模块被正确地编码
分目标:
确保代码在结构上可靠且健全,并且能够在所有条件下正确响应
实施完全的单元测试,减少后续集成测试等阶段所需的工作量
4、单元测试有哪几个任务?每个任务的具体测试内容是什么?
模块接口测试:
输入参数测试,确保实参和形参个数相同、次序一致、类型匹配;
是否存在与当前入口点无关的参数,是否修改了只读型参数,各模块对全局变量的使用是否一致,是否正确接受了返回值
模块数据结构测试:
不适合或不相容的类型,变量无初始值,变量初始化或默认值有误,不正确变量名,出现上溢下溢地址异常
模块边界条件测试:
采用边界值分析技术,针对边界值及其邻接值设置测试用例,很有可能发现新的错误
模块中所有逻辑判定和独立执行通路测试:
在模块中应对每个逻辑判定、每一条独立执行路径进行测试,通过测试用例来发现错误的控制流。
逻辑覆盖法是最常用且最有效的测试技术
模块的各条错误处理通路测试。
5、了解有哪些单元测试工具。掌握单元测试工具JUint编程,如何写测试程序。
第十章 集成测试
1、集成测试的概念。
将通过测试的单元模块组装成子系统,再进行测试,主要的目的是检查各单元模块结合到一起能否协同配合、正常运行。
2、集成测试的对象是什么?集成测试的依据是什么?
对象:
测试的单元模块组装成的子系统
依据:
系统概要设计
3、集成测试的任务是什么?
在把各个模块集成起来时,穿越模块接口的数据是否会出错;
各子功能组合起来,能否达到父功能的预期要求;
一个模块的功能是否会对另一个模块的功能产生不利的影响;
全局数据结构是否有问题,会不会被异常修改;
单元模块漏测的缺陷,在集成测试时可能会被发现。
4、集成测试策略有哪些?每种策略是如何实施测试的?
自顶向下:
(1)对主控模块进行测试,测试时用桩程序代替所有直接附属于主控模块的模块;
(2)根据选定的结合策略(深度优先或广度优先),每次选用一个实际模块或编写一个新程序代替桩模块;
(3)在结合下一个模块的同时进行测试;
(4)为了保证加入模块没有引进新的错误,可能需要进行回归测试(即全部或部分地重复以前做过的测试);
(5)从第(2)步开始不断地重复进行上述过程,直至完成。
自底向上:
(1)把低层模块组合成实现某个特定软件子功能的“族”。
(2)写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出。
(3)对由模块组成的子功能族进行测试。
(4)去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。
(5)从第(2)步开始不断地重复进行上述过程,直至完成。
三明治集成:
首先对目标层上面的一层采用自顶向下的测试策略。
其次对目标层下面的一层采用自底向上的测试策略。
最后将三层集成在一起。
大爆炸集成:
首先需要对每个模块进行单元测试,然后把所有单元组装到一起进行测试,最终得到要求的软件系统。
第十一章 系统测试
- 系统测试的概念。
将整个软件系统看作一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
- 系统测试的依据是什么?
需求规规格说明书
3、系统测试的主要内容有哪些?
压力测试:在规定的或超过规定的需求条件下测试系统,以对其进行评估。
效率测试:主要测试软件运行时速度、响应时间、占有系统资源等方面的系统数据。
安全测试:判定软件产品安全性的测试。
可靠性测试:测试软件系统在规定的时间内及规定的环境条件下,完成规定功能的能力。
容错测试:判定软件产品可恢复性的测试过程。
第十二章 验收测试
- 验收测试的概念。
在系统测试通过,以及发现错误的软件基本修正后才开始的测试,是整个确认测试的最后一个阶段,由用户在使用环境下测试
- 验收测试分为哪几个阶段?
α测试:是由用户在模拟用户的环境中测试;
β测试:是由用户在实际用户的环境中测试。
- 验收测试的依据是什么?
《系统需求规格说明书》
- 验收测试的主要内容有哪些?
易用性测试;
兼容性测试;
安装测试;
用户文档(如用户手册、操作手册等)测试等。
第十三章 测试管理
1、熟悉测试管理工作的重要性。
2、测试管理包括哪些活动?
计划测试周期;
监控测试过程;
测试周期控制;
事件管理
为了保证可靠和快速地消除各测试阶段检测到的失效,必须要有一个用于通讯和管理这些事件报告的好规程。
测试日志
事件报告
事件分类
事件状态
第十四章 软件测试自动化
1、为什么要进行软件自动化测试?
手工测试存在局限性,难以覆盖所有代码路径;不能实现穷举测试;容易偏向形式化和机械性的重复工作,耗时而无效;高难度测试下的错误捕捉费时费力,如:时序、死锁、多线程等;以及测试数据量大、并发要求高的测试,如:负载、性能测试等;不能长时间模拟系统环境测试,如可靠性测试;不能在短时期内完成数量庞大的用例测试。
自动化测试能够帮助人工实施反复测试,以提高测试工作的效率,提高测试的覆盖面,进而提高测试的质量。
2、掌握自动化工具QTP编程,如设置检查点,同步点,参数化。