软件测试实战-第六章读书笔记

测试开发是为了完成测试使命而进行的代码开发与维护活动。为了持续提高测试效率和产品质量,测试人员需要分析当前项目的测试需求,将合适的开发技术以合理的策略应用于测试开发。本周将讨论测试开发的分类,并介绍一些开发思路和策略,供测试人员在实践中参考。

6.1测试开发分类

根据测试程序的用途将测试开发大致分为两类:

自动化测试开发与维护自动执行的测试用例;

计算机辅助测试开发与维护帮助完成测试任务的工具;

6.2注重实效的自动化测试

在许多项目中,自动化测试用例组成自动化测试套件,被周期性地执行,以持续提供代码的质量信息。

6.2.1自动化测试的基本策略

整体上优化测试效率和提高测试效果才是测试小组追求的对象,为此,测试小组需要基于项目语境制定整体的测试计划,将自动化测试作为实现测试策略的重要工具加以有效利用。

第一,自动化测试应该切合当前产品。因地制宜地选择和应用才能才能真正发挥思想的内在价值。

第二,自动化测试应该聚焦风险,重点解决产品面临的最大风险,而不必强求面面俱到。自动化测试面临的第一个风险来自于它本身;为了实施有效的自动化测试,建议测试小组迭代地实施自动化测试。针对产品风险和项目风险,列出需要解决的问题;其次选出优先级高、适合自动化的问题作为目标,拟定相应的开发任务;最后迭代结束后,评估目标是否完成,分析自动化测试是否达到目标,讨论现有自动化策略的改进之处;不断迭代更新,安排新的自动化测试任务。迭代的自动化开发有如下特征:时间盒;时间和资源约束下的具体目标;聚焦风险;持续评估;动态计划。

第三,自动化测试应该在资源允许的范围内尽力拓展测试领域,以提供多样化的测试。功能测试是常见的自动化测试领域,除此之外,性能测试、压力测试、配置测试、安全性测试等也可以大显身手。

第四,自动化测试应该讲求实用,测试人员需要根据项目语境选择合适的开发策略。常见的考虑因素:测试使命;测试人员;项目进度;产品特征;

总之,自动化测试是实现测试策略的工具,测试开发需要服务于整体的测试计划。

6.2.2将测试开发视作软件开发

测试开发也是一种软件开发,需要遵循恰当的软件开发过程。一种可行的测试开发策略,包含设定目标和测试开发迭代两个阶段。

首先,软件项目要持续地交付价值才能长远发展,测试开发项目也是如此。思考需要提前考虑的问题,并与大家一起拟定测试开发计划。

一些需要思考的问题如下:风险,重要缺陷提前发现;测试挑战,重要测试任务;测试策略缓解风险,发现尽可能多的缺陷;自动化在整个策略中作用,与其它活动配合;自动化发展出强大高效的测试策略;自动化短期长期目标;自动化实现技术;执行任务及优先级;评估自动化完成目标;引入新自动化的风险,如何缓解;为了满足自动化成果,需要流程及人员如何配合;思想及技术准备;

然后,测试领导邀请测试小组成员审阅计划,不断改进。

最后,通过不断实践,主动地调整开发计划,持续改进。

如何评估自动化开发任务:评估上一周期情况;分析当前周期情况;拟定本次开发任务;保证代码质量(沙箱测试;同行评审;持续集成;技术原型);建立明确的流程和责任,持续进行自动化测试。

6.2.3利用自动化测试金字塔来指导测试开发

金字塔底层是自动化测试的基础,主要包含单元测试和组件测试(最高测试回报率);金字塔中间层是面向业务的自动化测试(较高测试回报率);金字塔顶层是少量的基于图形界面的自动化测试(回报率最低);金字塔的上方是手工测试;

扭转测试不利的常见方法:测试小组需要与编程小组商谈,共同制定自动化测试的策略;测试自动化要立即见效;测试小组与项目关系人讨论,了解他们最担心的风险和最想知道的信息,然后思考自动化测试能否缓解这些风险或提供相关信息;在合适的层次和粒度实施自动化测试;学习并实践已有的测试开发方法和模式,以快速构建稳定的自动化测试。

6.2.4面向调试的测试代码

有经验的程序员知道故障调查是一件困难的任务,设计会考虑软件的可调试性,通过一些特定的功能来降低调试的难度和开销。

以下是一些有助于提高可调式性的开发方法:测试代码应该尽量简单;测试代码应该容易阅读;测试代码需要合理地抽象和封装;测试代码应该检查每一步操作的结果,发现问题立即报告;测试代码应该拥抱日志;除了文本日志,测试代码还可以记录其他形式的日志。

6.2.5系统测试的测试开发

典型的系统测试开发实践:

实践1:全自动的产品安装是最基本的可测试性需求。一键部署;可预先配置;一组配置文件在所有环境中部署;因此安装性是一项重要的可测试性需求。

实践2:使用单独的进程监控测试运行。监控进程同时监控产品进程和测试进程。

实践3:采用多种技术记录测试执行过程和被测产品表现。测试人员应该用多种方法来监控产品和记录测试执行信息,一方面提供更多信息,便于错误调查,另一方面是从多个角度检查软件,从而识别软件缺陷。以下是一些实践方法:日志函数记录测试参数、测试步骤、产品输出等信息;每一步之后,检查产品状态和输出,一旦发现问题就记录错误;通过截屏捕获产品状态;测试程序或监控程序出问题时,调用操作系统提供的API生成产品进程的内存转储文件;持续监控产品的性能指标和资源占用情况。

实践4:利用关系型数据库存储测试数据和产品输出

如测试需要庞大的测试数据或产品会产生大量的输出数据,测试人员可以考虑使用关系型数据库来管理这些输入或输出数据。数据库就技术在系统测试中作用:如果产品系统包含数据库,那么可以考虑在测试环境中使用测试数据库来模仿产品数据库,以测试访问数据库的软甲;数据库提供了强大的数据存储和处理能力;利用数据库可以方便地分析数据;利用数据库可以方便地生成报表;

实践5:恰当地利用基于图形界面的”捕获回放“技术

实践6:为测试执行和失败调查制定明确的工作流程

测试领导和测试人员应该共同制定出运行、调查、修改、增强自动化测试的流程和制度。常见的问题如下:回归用例集有哪些;回归用例运行频率;谁负责启动回归测试用例集;谁复杂搭建测试环境;谁负责发送测试报告;谁负责调查失败用例;失败调查完成标准;失败调查完成时限;修复错误测试代码;修复完成标准;修复时限;打破例行流程,采取什么行动;修改例行流程,采取什么行动;

6.2.6让自动化测试服务于项目

滚动测试类似于持续集成,达到如下目标:尽快地发现集成错误;节省开发时间;发现环境错误;保证被测版本的基本质量。

开发策略:全自动地编译、部署和测试;部署完整的系统;用DOS脚本串联各步骤;滚动测试要能够在30分钟内完成。

维护策略:测试用例集包含最重要的端到端系统测试;测试用例只进行必要的检查;确保所有的测试用例是正确的;及时地维护测试用例集;及时地相应测试报告。

6.3计算机辅助测试

6.3.1”交通工具“的隐喻

手工测试是步行;自动化测试是驾车;计算机辅助测试是他人驾车;

一批计算机辅助测试的适用情景:用程序完成需要反复执行的测试准备工作;用程序产生测试数据,并让产品使用他们;用程序模拟用户操作;用程序监控产品行为。

6.3.2选择合适的开发技术

案例1:自动化重复的输入;

案例2:自动化测试环境配置;

案例3:分析产品性能;

案例4:分析系统负载;

6.4大规模自动化测试

6.4.1基本概念

大规模自动化测试(HiVAT)常用于测试复杂的功能、流程和产品。

典型案例:测试地图导航的方法(所有邮政编码的两两组合,大约有10亿条测试用例);检查浏览器在加载页面时是否出现内存泄漏、断点触发和程序崩溃等问题(测试最流行的一百万个URL);模糊测试是一种修改输入数据来暴露软件缺陷的方法(暴力测试方法,一轮模糊测试会使用数万个甚至更多的模糊文件);猴子测试是利用猴子程序来随机地测试产品(不知疲倦的测试程序);

近年来,随着软硬件技术的发展,HiVAT的有效性和重要性与日俱增。第一,软件产品越来越复杂;第二,计算机硬件的价格在持续下降,性能在逐步提升;第三,虚拟化技术使得项目团队能够更充分地利用空闲计算资源;第四,云计算技术极大提高了测试运行的速度。

新的测试挑战和测试平台要求测试人员重新思考自动化测试的使命,用创新思维去充分利用计算资源,以提出更具威力的测试策略。

6.4.2测试设计

基本步骤的描述:

测试人员使用工具生成大量的测试用例;根据可用计算机的数量,测试控制服务器把测试用例划分为若干组,将它们分配给测试执行的计算机;在测试执行计算机上,测试程序运行测试用例,并记录测试日志;测试控制服务器汇总来自各台计算机的测试结果,将它们保存到测试结果仓库中;测试人员调查测试所发现的问题,并提交缺陷报告。

问题1:如何生成大量的测试输入数据;

构建测试输入数据的常见方法:穷举输入域的所有取值(如地图测试);尽可能多地收集真实的业务数据(如URL地址);随机地产生测试数据(如模糊测试调用文件);用启发式规则指导随机采样(根据产品特点在重点区域进行密集测试);为每一条测试数据生成唯一的编号(查找测试数据);

当测试复杂产品时,测试人员需要综合运用它们。测试人员可以从两个角度来考察测试数据集的质量。第一、测试数据集应该很好的覆盖了业务领域;第二、测试数据集应该很好地覆盖了代码实现。

问题2:如何构建测试先知,以自动地发现产品缺陷;

常见策略:检查产品和参考程序的一致性;检查被测版本和已发布版本的一致性;检查产品自身的行为是否一致;用一组约束规则来检查产品的结果;基于测试模型的检查;

问题3:如何监控测试执行;

常见的测试设计:用独立的监控进程监视测试程序和被测产品;测试程序记录测试进度,以便重新启动后继续运行尚未执行的测试用例;测试程序主动向测试控制服务器申请测试用例,即使用拉模式来分配测试用例;当某台计算机发生故障时,测试控制服务器应该记录错误,并将分配给它的测试用例集转移到其他计算机;

问题4:如何调查大量的测试失败

常见的测试设计:测试程序应该记录它所执行的所有测试用例或命令,以便测试人员重现缺陷;一旦测试程序发现软件错误,它应该尽可能多地保存产品信息和环境信息;用多台计算机执行测试时,测试程序应该将测试结果提交到一个中心节点;让测试人员可以通过查询命令来获取特定的测试结果;

在设计之初,测试人员就应该考虑如何分析HiVAT产生的海量测试结果,并在测试生成、测试执行、测试报告等各个环节做出相应的设计。

6.5小结

测试开发的对象包括自动执行的测试用例和辅助测试活动的工具。

好的测试开发策略的4个特征:产品相关、聚焦风险、多种多样、讲求实用。

测试开发也是一种软件开发,拥有规划、设计、实现、运维等活动,需要项目管理、测试设计、代码实现等技能。

自动化测试金字塔是一个概念模型,描述了自动化测试用例在理想情况下的分布,测试人员应该通过逐步交付有价值的测试用例来达成该目标。

可调试性是测试代码的基本需求,需要在设计和实现的全过程予以重视。

单元测试和系统测试的测试代码具有显著差异,测试人员需要根据所开发的代码,选用恰当的设计和技术。

计算机辅助测试的目标是人尽其才和物尽其用。

掌握多种开发技术能够帮助测试人员高效地完成多样化的测试任务。

利用大规模自动化测试,测试人员可以开发出崭新的测试策略,完成其他技术难以达成的测试目标。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181114G08X1100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券