合格的测试计划是怎样诞生的?

 

不论是刚毕业的Tester还是测试老鸟,是否想过“测试计划”怎么写?以前写的测试计划“合格”吗?我想很多人无法给出答案。

做测试计划通常是一件非常复杂的事情,一个理想的测试计划要完成“投资回报分析”和“风险分析”,在软件开发的众多因素中寻求一个最优解:

  • 实现投入: 实现“可测试性”和某些场景的自动化测试,需要花费大量的时间,还会增加软件复杂度。会增加短期内的研发投入。
  • 维护投入: 不论是自动化测试还是手工测试,都会不同程度地增加长期投入。
  • 财务投入: 有些测试可能会需要资金投入。
  • 回报: 测试能够减少软件bug,并在不同程度上提升生产力。在软件研发过程中,越早发现问题,带来的收益越大。
  • 风险: 无法预测什么时候会碰到出问题的场景,而一旦出问题,带来的后果也无法预测:可能只是对用户体验有少许影响,也可能是一场灾难。

要有效的平衡以上因素,需要评估项目的具体情况:如何实现的?资源是否可用?团队是什么意见?尽管许多项目能够做到“低投入,高回报”的高覆盖率单元测试,但是他们也需要衡量“larger tests”和更复杂的场景。关键性的项目必须尽可能的降低风险,为了覆盖所有的测试层级,可能会做出一个高投入的测试决策。

本文将围绕“如何找到项目中的平衡点”展开。因为模板往往不具备通用性,而且很容易“过时”,所以在这里并不会提供测试计划模板。内容聚焦于做测试计划的过程中“如何选择最优的内容”。

测试计划 vs. 测试策略

开始之前,先澄清一下两种定义测试计划的方式:

  • 单个测试计划: 一些项目拥有单个“测试计划”,描述与项目相关的所有实现与测试。
  • 单个测试策略+多个测试计划: 一些项目拥有单个“测试策略”和许多小的“测试计划”文档。测试策略覆盖所有的测试路径与目标,测试计划覆盖特定的特性或者项目更新。

或许两种“测试计划”并没有孰优孰劣之分,请针对具体的项目具体选择。一般来说,稳定的项目选择“单个测试计划”更好,变化频繁的项目更加适合“固定测试策略”+“不固定增加的测试计划”。

内容选择

做测试计划最好的方式是罗列出所有需要解答的问题。无论是否会对项目产生影响,我们都要全面的进行收集所有重要问题。浏览一下收集的问题列表,筛选出所有影响项目的问题。在回答这些问题的过程中,就可以理出测试计划的内容,然后以团队可接受的方式编写一份测试计划(需要综合考虑上文中提到的几个因素来衡量计划的内容)。

 

前提

  • 需要测试计划吗? 如果没有项目设计文档或者还不清楚项目长什么样,那么不要急着去写测试计划。
  • 可测试性是否被纳入了项目设计? 在项目开始大规模开发之前,必须为所有的场景设计可测试性,最好能够支持自动化测试。项目设计文档和测试计划中都需要对可测试性提出要求。
  • 需要持续更新测试计划吗? 如果要持续更新,请不要在计划中描述太多的细节,否则将难以维护。
  • 工作成果是否与其他团队有重叠? 如果有重叠,如何避免重复工作?

风险

    • 是否有明显的项目风险,如何减少风险? 例如:

      • 会伤害人或动物
      • 影响用户数据的安全性和完整性
      • 侵犯用户隐私
      • 影响公司系统安全
      • 导致硬件或财产损失
      • 存在法律或诚信问题
      • 泄露机密或者敏感信息
      • 导致数据丢失
      • 导致收入减少
      • 存在无法覆盖的场景
      • 需要满足性能要求
      • 误导用户
      • 影响其他项目
      • 被其他项目影响
      • 影响公司对外形象
      • 降低生产力
    • 项目有哪些技术缺陷? 例如:
      • 已知特性或者组件容易被入侵,健壮性查,或者急需重构
      • 项目依赖的组件或者平台频繁导致问题
      • 用户有可能会对系统造成破坏
      • 以往问题的趋势如何

覆盖率

    • 项目长什么样? 是一个只有一个方法的简单library,还是有复杂用户场景的软件系统?描述被测系统的设计和架构,分析可能出问题的地方。
    • 支持什么平台? 建议列举出支持的操作系统,硬件,设备等。描述一下不同平台上测试的表现。
    • 有什么特性? 建议将所有特性列出概要清单,描述一下哪些特性要进行测试。
    • 哪些内容不会被测试? 没有一种测试会覆盖所有可能性。最好提前想好哪些用例不会进行测试。例如:”低风险低优先级用例“,”复杂功能低优先级用例“,”被其他团队测试过的功能“,”没有准备好的特性“等等,都属于低风险功能,而不会进行测试。
    • 单元测试(small)、集成测试(medium)、系统测试(large)分别应该覆盖那些功能? 尽可能多地做“smaller tests”,少部分的用例使用“larger tests”。描述一下不同种类测试用例分别在哪种规模的测试中进行,并提供理论依据。
    • 哪些用例要手工执行,哪些用例要自动化? 如果自动化具备可行性并且实现代价不高,通常是最好的选择。许多项目能将所有测试都自动化。然而,有些项目选择手工测试也有充分的理由。描述一下什么样的测试用例要进行手工测试,并提供理论依据。
    • 是否覆盖了所有测试类型? 例如:
      • 可达性
      • 功能
      • 模糊(测试)
      • 国际化和本地化
      • 性能,加载,压力和耐久性
      • 隐私
      • 安全性
      • 冒烟
      • 稳定性
      • 易用性
    • 需要使用静态和/或动态分析工具吗? 无论是静态分析工具,还是动态分析工具都能够找到一些测试过程中很难找到的问题,所以建议使用分析工具。
    • 测试过程中,系统组件和依赖之间是“stubbed”,”mocked”,”faked”,”staged”,还是正常使用? 每一项内容都会影响最终的测试覆盖率。
    • 测试运行在哪个”构建“之上? 在”HEAD“,”stage“,还是”待发布“版本之上?如果是在”HEAD“上测试,怎么测试”cherry picks(只发布部分改动)“?怎么测试系统配置的改变?
    • 什么样的测试应该在团队之外进行? 例如:
      • ”吃狗粮“
      • 外部的众包测试
      • 公开的”alpha/beta“版本(如何在正式发布前测试)
      • 可信的外部Tester
    • 怎么测试数据迁移? 可能需要特殊的测试来对比迁移数据前后的结果。
    • 是否需要关注向后兼容? 可能存在一个以前版本的客户端,或者有另外一个系统依赖于当前系统的协议、配置、特性或者行为。
    • 是否需要测试”服务器/客户端/终端“的升级场景?是否需要测试软件所依赖的”库/平台/API“?
    • 是否有代码行的覆盖率的目标?

工具和基础建设

 

    • 是否需要新的测试框架? 如果需要,请描述或者在测试计划中增加设计链接。
    • 是否需要新的测试实验室? 如果需要,请描述,或者在测试计划中增加设计连接。
    • 如果当前项目为其他项目提供服务,是否要像用户提供测试工具? 建议提供”mocks“,”fakes“和/或可靠的stage服务器,方便用户进行集成测试。
    • 对于end-to-end测试,如何管理测试基础设施、被测系统和其他的依赖? 如何部署?如何持续地进行”set-up/tear-down“?数据迁移怎么做?
    • 是否需要工具来对系统进行debug或者测试错误? 可以使用现有的工具,也可能需要开发一款新的工具。

执行过程

  • 是否要拿出一个测试时间表? 什么时间,会进行哪一项测试(或者提供测试结果)?是否一些测试的比其他测试更加重要?
  • 如何持续不断的进行构建和测试? 大部分”small tests“会通过持续集成工具来运行,但是”large tests“可能需要不同的运行方式。
  • 如何上报和监控构建和测试的结果?
    • 是否有一个团队负责监控持续集成?
    • ”large tests“可能要求专业技术人员来进行监控。
    • 是否有一个dashboard来查看测试接结果和项目的健康度?
    • 如何发送告警邮件,以及告警邮件会通知哪些人?
    • 监控测试的同事只是简单地以口头传达的方式通知团队吗?
  • 发布过程中如何进行测试?
    • 是不是只会使用”待发布版本“,或者发布的程序严格依赖于持续测试的结果?
    • 如果系统组件和依赖要被独立发布,是否在每一个发布类型上都进行了测试?
    • 发布决策者是否会因为”阻塞发布”的bug而停止发布?“阻塞发布”是否有统一的标准?
    • 首次发布的时候,如何监控进度并组织测试?
  • 外部用户如何上报bug? 建议增加反馈连接或者其他类似的工具来收集上报的问题。
  • 如何将bug分类? 建议使用标签和类型对bug进行分类管理。同时确保团队也要使用与此相同的bug上报模板。
  • 应该被解决的bug未解决就要被close,是否有一种机制可以提交新的测试?
  • 未提交的改动如何进行测试? 如果有人能做到,建议提供使用说明。
  • 团队成员如何构建测试 和/或 进行debug? 建议提供使用说明。

使用

  • 测试计划的读者是谁? 虽然有些测试计划会被许多人读到,但是有些测试计划只会被很少一部分人读到。测试计划至少应该被所有的利益相关者(项目管理者,技术leader,产品管理者)review。写测试计划的时候为了确保读者能够理解,需要提供足够的背景材料,回答所有可能的疑问。同时,建议在测试计划中增加联系方式,方便读者能够获取更多的信息。
  • 读者如何review测试用例? 手工测试用例可能会被放在一个测试用例管理工具中,可能会放在单独的文档中,也可能直接写在测试计划中。自动化测试建议提供对应的链接。
  • 需求、特性和测试之间是否需要可追溯?
  • 是否有通用的产品健康度或者质量目标?如何进行评估? 例如:
    • 发布节奏
    • 用户发现的bug数量
    • 在“release testing”中发现的bug数量
    • 超时未解决的bug数量
    • 代码覆盖率
    • 手工测试的投入
    • 创建新测试的难度

本文系TestBird测试工程师编译整理。想了解更多开发测试相关信息,请访问 TestBird

原文地址:

http://googletesting.blogspot.com/2016/06/the-inquiry-method-for-test-planning.html

时间: 2024-08-29 18:37:44

合格的测试计划是怎样诞生的?的相关文章

启示录-如何打造用户喜爱的产品

一.人员 如何去打造一款好的产品,有一个好的团队是非常重要的. 产品经理:1.评估产品机会,2.定义要开发的产品. 用户体验设计师:深入理解目标用户,设计有价值的.可用的功能.用户导航和产品使用流程. 项目管理人员:制定计划.跟踪进度. 开发团队:开发产品. 运维团队:保证服务正常运行. 营销人员:对外发布信息.宣传产品.促进产品销售提供支持. 一个好的团队需要分工明确,每个人都应该充分了解自己所对应的角色.在所处角色中承担某个任务.保证每一个人都能够有事情做,把事情做对.做好.每一个角色都能保

移动互联网时代:合格的产品原型是怎样的?

一款成功的产品,诞生自一个成功的想法.但是一款产品从诞生到成型需要经历想法-原型-设计-开发-测试等漫长的过程,可以说原型设计在整个产品流程中处于最重要的位置. 什么是产品原型? 简单的说,产品原型就是产品设计成形之前的一个简单框架,即将页面模块.元素进行粗放式的排版和布局,同时加入一些交互性的元素,使其更加形象具体.也就是说,原型的设计是将想法(抽象信息)转化为线条和图形(具象信息)的过程,最终以产品框架的形式呈现. 清晰易懂的产品原型不仅方便产品经理与领导.UI设计师和技术人员在前期沟通产品

合格程序员七大基本素质与五大必备能力

程序员基本素质: 作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质. 1:团队精神和协作能力 把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本.把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的.独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进

合格的产品原型应该是怎样的?

一款成功的产品,诞生自一个成功的想法.但是一款产品从诞生到成型需要经历想法-原型-设计-开发-测试等漫长的过程,可以说原型设计在整个产品流程中处于最重要的位置. 什么是产品原型? 简单的说,产品原型就是产品设计成形之前的一个简单框架,即将页面模块.元素进行粗放式的排版和布局,同时加入一些交互性的元素,使其更加形象具体.也就是说,原型的设计是将想法(抽象信息)转化为线条和图形(具象信息)的过程,最终以产品框架的形式呈现. 清晰易懂的产品原型不仅方便产品经理与领导.UI设计师和技术人员在前期沟通产品

一个合格程序员应该知道的8个IT基础设施术语

IT基础设施正在迅速改变.具体地说,它正在被虚拟化."软件定义"是IT基础设施最大的趋势之一,不仅用于计算,还包括存储和网络. 开发人员应该了解这些概念,以便了解应用程序运行的环境.熟悉这些术语也有助于避免与IT运维人员对话时产生混淆. 以下是一些常见术语. 组合式基础设施(Composable infrastructure)--允许个体通过API"组合"基础设施,从而达到需求.例如,开发人员可以组合特定于应用程序的基础设施,以适应移动或物联网开发.可组合的基础设施

软件测试计划文档(改)

软件测试计划文档 项目名称:英雄达拉崩吧 小组名称:Scientific_ZEAL软工小分队 项目负责人:刘帅 小组成员:房渤萱 张赐 宋从智 冯惠妍 1.    引言 1.1编写目的 为了尽可能的找出软件的不足,提高软件的质量,促进软件的成功验收,给用户尽可能好的体验.编写本文档.其主要目的在于为所要进行的测试工作制定各种必要的准则和规范,以及在有关方面协议的基础上对测试工作进行合理组织与管理. 1.2项目背景 项目名称:英雄达拉崩吧 项目提出者:Scientific_ZEAL软工小分队 开发

云计算背后的秘密:NoSQL诞生的原因和优缺点

转载收藏一篇对nosql讲解的比较全面的文章:http://blog.csdn.net/xlgen157387/article/details/47908797 这篇文章将和大家聊聊为什么NoSQL会在关系型数据库已经非常普及的情况下异军突起? 诞生的原因 随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,对技术提出了更多的需求,主要体现在下面这四个方面: 1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度; 2. 支撑海量的数据和流量:对于搜索这样大型应用而

测试计划的编写

描述软件测试努力的目标,范围,方法和焦点的文档.测试用例:指对一项特定的软件产品进行测试任务的描述,体现测试方案.方法.技术和策略.内容包括测试目标.测试环境.输入数据.测试步骤.预期结果.测试脚本等,并形成文档.2.        测试计划的内容(1)        标题(2)        确定软件的版本号(3)        修订文档历史,包括作者,日期和批示(4)        目录表(5)        文档的目的和适合的读者群(6)        测试的目的(7)        软件

一个网站的诞生05--如何把网站做到估值过亿

网站的意义,在于创造对用户有价值的东西,估值是网站意义的一个衡量指标,提升估值的手段,也就等价于把网站做得更有用. 如何计算一个网站的估值?国际标准是每个活跃用户的价值是40刀左右,Whatsapp卖了190亿刀,它有4.5亿活跃用户.中国略有差别,微信的估值是40亿~50亿刀,有3亿用户,但中国的用户商业价值不够高,人均GDP太低,所以每个活跃用户的价值是10-15刀,也就是RMB60-90元.如果网站(包括同名App)要想估值过亿,要有一百万的活跃用户.另一种估算方式是,行业第二名的估值是第