软件测试实战(微软技术专家经验总结)--第六章(测试开发)读书笔记

测试开发是为了完成测试使命而进行的代码开发与维护活动。为了持续提高测试效率和产品质量,测试人员需要分析当前项目的测试需求,将合适的开发技术以合理的策略应用于测试开发。本章将讨论测试开发的分类,并介绍一些开发思路和策略,供测试人员在实践中参考。
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个特征:产品相关、聚焦风险、多种多样、讲求实用。
测试开发也是一种软件开发,拥有规划、设计、实现、运维等活动,需要项目管理、测试设计、代码实现等技能。
自动化测试金字塔是一个概念模型,描述了自动化测试用例在理想情况下的分布,测试人员应该通过逐步交付有价值的测试用例来达成该目标。
可调试性是测试代码的基本需求,需要在设计和实现的全过程予以重视。
单元测试和系统测试的测试代码具有显著差异,测试人员需要根据所开发的代码,选用恰当的设计和技术。
计算机辅助测试的目标是人尽其才和物尽其用。
掌握多种开发技术能够帮助测试人员高效地完成多样化的测试任务。
利用大规模自动化测试,测试人员可以开发出崭新的测试策略,完成其他技术难以达成的测试目标。





猜你喜欢

转载自blog.csdn.net/zimingzim/article/details/80508817