记录学习过程
一、软件测试的概念
1. 经典定义
软件测试(Software Testing),在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
2. 标准定义(IEEE)
软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求
或弄清预期结果与实际结果之间的差别
。
3. 测试目的
软件测试的目的是发现问题,发现至今未发现的问题。检查系统是否满足需求。
Grenford J.Myers观点
(1)测试是程序的执行过程,目的在于发现错误;
(2)一个好的测试用例在于能发现至今未发现的错误;
(3)一个成功的测试是发现了至今未发现的错误的测试;
4. 测试的对象
程序、数据、文档
。
5. 软件错误占比
据业界著名的统计公司的统计表明,属于需求分析和软件设计
错误的约占64%,属于程序编写错误
的仅占36%。
6. 其他基础知识
V模型
RAD(Rap Application Development,快速应用开发)模型是软件开发过程中的一个重要模型,由于其模型构图形似字母V,所以又称软件测试的V模型,V模型大体可以划分为以下几个不同的阶段步骤:需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试
。
二、软件测试的分类
(1)常见的分类方式
测试级别:单元测试、集成测试、接口测试、系统测试、验收测试
测试方法:动态测试、静态测试;黑盒测试、白盒测试、灰盒测试。
测试类型:数据和数据库完整性测试、白盒测试(静态白盒测试和动态白盒测试)、功能测试 、UI测试 、性能测试(负载测试、强度测试、数据库容量测试、基准测试、竞争测试)、安全性和访问控制测试(应用程序级别的安全性、系统级别的安全性)、故障转移和恢复测试、配置测试(又叫兼容性测试)、安装测试、多语种测试(又称本地化测试)、文字测试、分辨率测试、发布测试、文档审核测试
测试类型主要 具体介绍 测试类型
(2)具体方式
(3)按阶段划分
单元测试(Unit Testing)
单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。
测试阶段:编码后
测试对象:最小模块
测试人员:白盒测试工程师或开发工程师
测试依据:代码和注释+详细设计文档
测试方法:白盒测试
测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
集成测试(Integration Testing)
集成测试也称联合测试、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。阿旺主要目的是检查软件单位之间的接口是否正确。
测试阶段:一般单元测试之后进行
测试对象:模块间的接口
测试人员:白盒测试工程师或开发工程师
测试依据:单元测试的模块+概要设计文档
测试方法:黑盒测试与白盒测试相结合
测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响
系统测试(System Testing)
将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段
测试阶段:集成测试通过之后
测试对象:整个系统(软、硬件)
测试人员:黑盒测试工程师
测试依据:需求规格说明文档
测试方法:黑盒测试
测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
验收测试(Acceptance Testing)
验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。阿旺总结验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。
测试阶段:系统测试通过之后
测试对象:整个系统(包括软硬件)。
测试人员:主要是最终用户或者需求方。
测试依据:用户需求、验收标准
测试方法:黑盒测试
测试内容:同系统测试(功能...各类文档等)
(4)按是否查看代码划分
黑盒测试(Black-box Testing)
黑盒测试也称功能测试,测试中把被测的软件当成一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据与输出数据。
白盒测试(White-box Testing)
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒指的打开盒子,去研究里面的源代码和程序结果。
灰盒测试(Gray-Box Testing)
灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
(5)按是否执行程序划分
静态测试(Static testing)
静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口
等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序
做结构分析、流程图分析、符号执行
来找错。分析如下
检查项:
代码风格和规则审核;程序设计和结构的审核;业务逻辑的审核;走查、审查与技术复审手册。
静态质量:
度量所依据的标准是ISO9126。在该标准中,软件的质量用以下几个方面来衡量,即功能性(Functionality)、可靠性(Reliability)、可用性(Usability)、有效性(Efficiency)、可维护性(Maintainability)、可移植性(Portability)。
动态测试(Dynamic testing)
动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性
等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果
。
(6)按是否查看代码划分
手工测试(Manual testing)
手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。阿旺总结优缺点:
优点:自动化无法替代探索性测试、发散思维类无既定结果的测试
。
缺点:执行效率慢,量大易错
。
自动化测试(Automation Testing)
就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。
自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化
。
通常所说的自动化是指功能测试自动化
。
(7)其他汇总
冒烟测试(Smoke Testing)
在《微软项目求生法则》一书第14章“构建过程”关于冒烟测试,就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障。
冒烟测试目的
是确认软件基本功能正常,冒烟测试的执行者是版本编译人员。
现基本执行对象为测试人员,在正规测试一个新版本之前,投入较少的人力和时间验证基本功能,通过则测试准入。
随机测试(Ad-hoc Testing)
随机测试主要是根据测试者的经验对软件进行功能和性能抽查。
根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。
随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例(TestCase)没有覆盖到的部分。
安全测试(Security Testing)
安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 。
我觉得现在对安全知识的普及,大家意识都提上来了。比如现在越来越多的不支持HTTP协议,转用HTTPS等。
探索性测试(Exploratory testing)
探索性测试可以说是一种测试思维技术
。它没有很多实际的测试方法、技术和工具
,但是却是所有测试人员都应该掌握的一种测试思维方式。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
探索性测试自动化暂时无法代替。也无法被代替。
回归测试(Regression Testing)
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。
α测试(Alpha Testing)
α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持
)。
大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试。α测试不能由程序员或测试员完成。
β测试(Beta Testing)
Beta测试是一种验收测试。Beta测试由软件的最终用户们在一个或多个客房场所进行。
α测试与Beta测试的区别
:
测试的场所不同:Alpha测试是指把用户请到开发方的场所来测试,beta测试是指在一个或多个用户的场所进行的测试。
Alpha测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中。beta测试的环境是不受开发方控制的,用户数量相对比较多,时间不集中。
alpha测试先于beta测试执行。通用的软件产品需要较大规模的beta测试,测试周期比较长。
三、习题部分
(1)从正向和逆向两个方面阐述软件测试的定义
正向思维:
- 测试是为了验证软件是否符合用户需求,即验证软件产品是否能正常工作
- 评价一个程序或系统的特性或能力并确定是否达到预期的结果。
- 在设计规定的环境下运行软件的所有功能,直至全部通过。
逆向思维:
- 测试是为了证明程序有错,即假定程序有错误。
- 测试是为发现错误而针对某个程序或系统的执行过程
- 寻找容易犯错误的地方和系统的薄弱环节,试图破坏系统,直至找不出问题。
(2)列举软件缺陷的现象
- 功能、特性没有实现或部分实现
- 设计不合理,存在缺陷
- 实际结果和预期结果不一致
- 运行出错,包括运行中断、系统崩溃、界面混乱
- 数据结果不正确、精度不够
- 用户不能接受的其他问题,如存取时间过长、界面不美观
(4)列举软件缺陷产生的原因
- 技术问题
算法错误,语法错误,计算和精度问题,接口参数传递不匹配
- 团队工作
沟通不充分,误解
- 软件本身
- 文档错误、用户使用场合(user scenario),
- 时间上不协调、或不一致性所带来的问题
- 系统的自我恢复或数据的异地备份、灾难性恢复等问题
(5)简述软件缺陷在不同阶段的分布情况软件缺陷:
由图中我们可以看出,软件缺陷在设计阶段存在的缺陷最多,其次在需求阶段。编码阶段比需求阶段 要少一些。测试阶段相对于需求,设计,编码阶段少很多。在单元测试阶段和发布阶段,缺陷数相对于而言就更小了。
(6)简述软件缺陷在不同阶段的修复成本
由图中我们可以看出,发布阶段软件缺陷的修复成本最高,其次就是测试部分。编程阶段的修复成本第三,设计阶段倒数第二,需求分析阶段倒数第一。
(7)对软件测试进行分类
测试级别:单元测试、集成测试、接口测试、系统测试、验收测试
测试方法:动态测试、静态测试;黑盒测试、白盒测试、灰盒测试。
测试类型:数据和数据库完整性测试、白盒测试(静态白盒测试和动态白盒测试)、功能测试 、UI测试 、性能测试(负载测试、强度测试、数据库容量测试、基准测试、竞争测试)、安全性和访问控制测试(应用程序级别的安全性、系统级别的安全性)、故障转移和恢复测试、配置测试(又叫兼容性测试)、安装测试、多语种测试(又称本地化测试)、文字测试、分辨率测试、发布测试、文档审核测试
测试类型主要 具体介绍 测试类型