【软考软件评测师】自动化测试章节上篇
一.自动化测试基本概念
自动化测试是把人为驱动的测试转化为机器执行的一个过程。也就是模拟手工测试的步骤,通过执行,由程序语言编制的测试脚本,自动的完成软件的测试设计,单元测试,功能测试性能测试等全部工作。 包括测试活动的自动化测试活动管理的自动化。
二. 自动化测试五个阶段
第一代:工具为中心
以工具为中心的自动化。以捕捉回放工具最为典型,也就是说捕捉用户的鼠标和键盘。
第二代:脚本为中心
以脚本为中心的自动化。已经认识到采用统一脚本语言的重要性,测试自动化,主要依靠测试工程师的主观能动性,测试脚本,被大量的产生,增加了检查点的功能,可以对软件进行验证。
第三代:平台为中心
以平台为中心的自动化。也就是测试框架。主要把测试脚本抽象化。让非技术人员(如系统分析师,用户等)即使不懂脚本程序,不会编程语言,也可以使用自动化测试建立自动化测试案例。
第四代:业务为中心
以业务为中心的自动化。专注于业务需求的自动化测试,用通用的业务描述语言来描述业务,即测试用例,然后利用自动化测试工具执行这些业务测试用例,可以自动切换测试点和重复进行测试,容易适应测试内容复杂,工作量大的需求。
第五代:测试设计为中心
以测试设计为中心的自动化测试。专注于执行的测试自动化转变到了测试设计的自动化上。其特点是利用已经发展成熟的测试设计技术,或者探索算法自动的生成da测试用例和脚本。
三. 自动化测试技术
1)自动化测试执行技术
指执行测试用例或脚本,自动操作被测对象及测试环境中周边设备来完成测试步骤和结果检查,自动判断出测试用例的执行结果的相关技术。
2)自动化测试设计技术
指通过某些信息(如系统模型,设计模型,源代码等)由生成算法自动的生成测试用例,和测试脚本的相关技术。 自动化测试设计目前一共有两个方向:一个是基于模型的测试技术,另一个是基于探索的测试技术
1.基于模型的测试技术
通过模型来描述软件的需求和期待行为,自动的生成测试用例和脚本。它将原来由人工实施的测试用例的过程分为了测试建模和测试生成两大部分。测试建模仍然是需要人工实施,而测试生成则由生成算法来自动完成。
2.基于探索的测试技术
包括了各种元启发式技术,其核心思想是把测试数据的生成问题转化为探索问题,即从软件可允许的输入范围内的值当中搜索所需的值,以满足测试要求。 经典的基于探索的测试技术是基于遗传算法的测试生成。其核心思想是不断的通过迭代生成测试用例的集合。生成的测试用例集合存在优劣的判断标准。通过判断优劣来淘汰不够优化的测试用例。 在生成的测试用例集合之间还可以进行重组以产生新的测试用例集合,重组时引入了类似生物演化时基因发生的突变和交叉,这样经过多轮迭代理论上能得到相对优化和有效的自动化测试用例的集合。
四.自动化测试的分类
从测试目的角度来说,自动化测试可以分为功能自动化测试和非功能自动化测试。
1)功能自动化测试
功能自动化测试目标是软件功能验证,提高测试效率。 一般所说的自动化测试都是指功能自动化测试,通过相应的测试技术,通过如录制回放技术和编码技术来测试一个软件的功能实现,这样就可以进行相应的自动化回归测试。
2)非功能自动化测试
非功能自动化测试又包括了性能自动化测试和信息安全自动化测试。
1.性能自动化测试
性能自动化测试主要验证软件的性能,完成由人工测试无法完成的测试任务; 非功能性能自动化测试通过自动化测试工具模拟多种正常,峰值以及异常负载条件来对系统的各项性能指标进行测试。通过负载测试确定在各种负载的情况下系统的性能 压力测试是确定一个系统的处理能力瓶颈或者业务能力随着系统下降到不能接受程度的点,来提供系统能提供的最大服务级别的测试。 性能测试重在系统分析,能够通过数据分析出系统的瓶颈。
2.信息安全自动化测试
信息安全自动化测试主要做的是漏洞检测,和信息安全的验证;它也可以完成人工无法完成的自动化测试任务和提高测试效率。 它是在软件生命周期的当中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义,和产品质量标准的过程。
3)其他分类方法
按测试工具所访问的控制和接口分类,有用户界面自动化测试工具和接口自动化测试工具。 按测试工具所对应的测试阶段来划分,有单元测试自动化工具,集成测试自动化工具以及系统自动化测试工具。一般系统级别的自动化测试工具对应的就是用户界面自动化测试工具。 按照测试对象所在操作系统划分可以分为Web应用自动化测试,安卓移动应用测试,iOS移动应用测试,Linux应用测试,Windows桌面应用测试。
五.自动化测试的优点与缺点
1)自动化测试优点
提高了测试的效率,缩短测试工作时间 提高了测试的质量 提高了测试的覆盖率 能够完成手工测试无法完成的一些测试 能更好的重现软件缺陷 能更好的利用测试资源 增进测试人员与开发人员之间的合作伙伴关系 能够执行测试步骤更长,综合性更强的测试用例 能够更快的反应软件的质量 提高系统的稳定性和可靠性
2)自动化测试缺点
产生开发成本 需要测试技术团队 脚本维护成本较高 无创造性 引入了更多的复杂性 容易出现偏离原始的测试目标 可能会引入额外的错误
3)自动化测试错误见解
自动化测试可以完成一切的测试工作 测试工具可以适用于所有的测试 自动化测试能够使成本大幅降低 自动化测试能够实现测试覆盖率达到100% 自动化测试能够发现大量的软件缺陷 自动化测试工具非常容易使用
六.自动化测试的局限性
1)定制型项目
为客户定制的项目,甚至采用的开发语言,运行环境也是客户特别要求的,开发公司在这方面的开发积累少,这类项目不适合做自动化的测试。
2)周期很短的项目
项目周期很短,相应的测试周期也会很短;因此花大量精力准备测试脚本,不能得到重复的利用。当然为了某种特定的测试目的,专门执行的测试用例除外,比如针对特定应用领域的性能测试等。
3)人体感官与易用性测试
用户界面美观,声音的体验,易用性的测试,无法用测试工具来实现。
4)不稳定的软件
如果软件不稳定,则会由于这些不稳定的因素导致自动化测试失败,或者致使测试结果本身就是无效的。
5)涉及物理交互
自动化测试工具不嗯不过很好的完成与物理设备的交互,比如刷卡器,打印纸张的测试等。
6)业务规则复杂的对象
业务规则复杂的对象有复杂的逻辑关系和运算关系,工具很难实现,或者要实现这些测试过程,需要投入的测试准备时间比直接进行手工测试的时间更长。
七.自动化系统的通用架构
测试生成层:由此层面的模块来产生测试用例; 测试定义层:由此层面上的定义测试用例和测试例程; 测试执行层:次层面的模块提供测试执行所必须的功能; 测试适配层:在此层面上通常实现多个模块,每个模块的主要任务是和被测试对象或测试环境中的各种接口交互,并为测试定义层的测试用例提供一致的接口。 自动化框架:仅指在通用自动化测试框架中,提供任何自动化测试系统都应支持的通用功能的模块。
八.自动化测试实施策略
自动化测试投入越早,层级越低,则投入产出比就越高。 在单元测试阶段投入测试也是最有价值的。 用户界面层:可以看出在用户界面层实现自动化测试的价值是最小的,大部分测试人员都是对用户界面层的功能进行测试。 服务和接口层:对该层次实施自动化测试的价值居中, 单元层:单元测试,也是最有价值的测试,应该使用相应的单元测试框架来规范的实施单元测试。
九.自动化测试的实践策略
为了达到较高的投资回报率,在以下的项目和环境中,更加适合使用自动化测试工具。
1)被测试系统具备足够的易测试性
是否系统具备足够的预测是自动化测试,是否能够真正实施的技术基础。软件系统的易测试性体现在系统在架构或者设计实现上为自动化测试工具或第三方软件控制及其行为提供了接口。 当测试范围内的软件不具备易测试性时,就无法实施自动化测试;比方说很多嵌入式软件,其可测属性不一定完全具备。
2)需求稳定不会频繁变更
过高的需求,变更频率会导致自动化测试用例的维护的成本直线上升 测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,将造成维护成本超过自动化测试所带来的收益
3)项目周期较长
确定的自动化测试需求,设计自动化测试框架,测试脚本的编写调试,这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。
4)自动化测试脚本可重用
自动化测试脚本可重用的次数越多,其边际效益就越高,才会有机会获取正向收益。 每日构建之后的测试验证,研发和维护周期长,需要频繁的执行回归测试。
5)其他方面
项目的进度压力并不太大,测试人员具备较强的编程开发能力。 软件系统的界面变动少,稳定; 需要再多平台上运行相同的测试用例;
|