简介

ACC(Attributes Components Capability)是Google测试团队使用的一种建模方法,用来快速地建立产品的模型,以指导下一步的测试计划和设计。在Google内部,ACC得到较普遍的应用,一些工程师还开发了支持ACC模型的Web应用,并将其开源。

ACC的指导原则如下:

  • 避免散漫的文字,使用简明的列表
  • 不必推销,避免华丽的介绍
  • 简洁
  • 不要把不重要的、无法执行的东西放进测试计划
  • 渐进式的描述 
  • 指导计划者的思路
  • 最终结果应该是测试用例

ACC通过指导计划者依次考察产品的三个维度达成这个目标:描述产品目标的形容词和副词;确定产品各部分、各特性的名词;描述产品实际做什么的动词。测试需要完成的就是验证这些能力能够正常运作、产品各组件能满足应用的目标。

  • A代表特质

特质是系统的形容词,代表了产品的品质和特色,是区别于竞争对手的关键。

  • C代表组件

组件是系统的名词,在特质被识别之后确定。组件是构成待建系统的模块,是一个软件之所以如此的关键代码块。

  • C代表能力 

能力是系统的动词,代表着系统在用户指令之下完成的动作。

示例一

参考《How Google Tests Software》中的Google+的例子。

Google+的特质:

  • Social(社交):鼓励用户去分享信息和他们的状态
  • Expressive(表现力):用户可以运用各种功能去表达自我
  • Easy(容易):让用户以直观的方式做他们想做的事
  • Relevant(相关):只显示用户感兴趣的内容
  • Extensible(可扩展):能够与Google的已有功能、第三方网站和应用(Application)集成
  • Private(隐私):用户数据不会泄漏

第二步,确定Google+的Components组件:

  • Profile(个人资料):用户的帐户信息和兴趣爱好
  • People(人脉):用户已经连接的好友
  • Stream(信息流):由帖子、评论、通知、照片等组成的有序的信息流
  • Circles(圈子):将好友分组,如把不同的好友归于“朋友”、“同事”等小组
  • Notifications(通知):当用户被帖子提到时,向他显示提示信息
  • Hangouts(视频群聊):视频对话的小组
  • Posts(帖子):用户和好友所发表的信息
  • Comments(评论):对帖子、照片、视频等的评论
  • Photos(照片):用户和好友所上传的照片

组件可以看做功能列表的顶层元素,是产品核心功能的清单。《How Google Tests Software》建议Components列表要尽可能简单,10个Components很好,20个就太多了。其目的是重点考虑对产品、对用户最重要的功能与代码,并避免漫长的Components列表所导致的分析瘫痪。

第三步是确定产品的Capabilities(能力)

Google+的Capabilities矩阵如下:

社交 表现力 容易 相关 可扩展 隐私
个人资料 在好友中分享个人资料和兴趣爱好 用户可以在网上表达自我 很容易创建、更新、传播信息 向被批准的、拥有恰当访问权限的应用提供数据 用户可以保密隐私信息 只向被批准、拥有恰当访问权限的应用提供信息
人脉 用户能够连接他的朋友 用户可以定制个人资料,使自己与众不同 提供工具让管理好友变得轻松 用户可以用相关性规则过滤好友 向应用提供好友数据 只向被批准、拥有恰当访问权限的应用提供信息
信息流 向用户提示其好友的更新 用户可以根据兴趣过滤好友更新 向应用提供信息流
圈子 将好友分组 根据用户的语境创建新圈子 鼓励创建和修改圈子 向应用提供圈子数据
通知 简明地展示通知 向应用提供通知数据
视频群聊 用户可以邀请他们的圈子加入群聊 用户可以公开其群聊 好友访问用户的信息流时,他们被告知群聊 加入群聊前,用户可以预览自己的形象 只要几次点击就可以创建并加入群聊 只要一次点击就可以关闭视频和音频输入 可将好友加入已有的群聊 用户可以在群聊中使用文字交流 YouTube视频可以加入群聊 在“设置”中可以配置群聊的硬件 没有摄像头的用户可以音频交谈 只有被邀请的用户才能加入群聊 只有被邀请的用户才能收到群聊通知
帖子 表达用户的想法 向应用提供帖子数据 帖子只向被批准用户公布
评论 用评论表达用户的想法 向应用提供评论数据 评论只向被批准的用户公布
照片 用户可以分享他的照片 用户能方便地上传照片 用户能方便的从其他来源导入照片 与其他照片服务集成 照片只向被批准的用户公布

Capabilities通常是面向用户的(user-oriented),反映了用户视角的产品行为。测试人员也应该保持Capabilities矩阵的简洁,他们应该关注对用户而言最有价值、最有吸引力的能力,并在合适的抽象层次(right level of abstraction)记录Capabilities。最重要的是,Capabilities应该是可测的(testable),测试人员能够设计测试来检查产品实现了预期的Capabilities。

有了Capabilities矩阵,测试团队就完成初始的测试计划。这就是前Google测试总监James Whittaker所说的10分钟测试计划(The Ten Minutes Test Plan)。其基本思路是专注于核心属性、核心功能和核心能力,而省略一切不必要的细节。之后,测试团队会利用矩阵去指导测试设计,通常矩阵中的一条Capability就是一个测试对象、测试策略或测试情景,而复杂的Capability会演化出更多的测试设计。

总结来说,测试计划制定时可以参考ACC策略快速制定,在产品进行开发迭代时,再进行必要的调整和完善。

示例二

如果Linux桌面系统按ACC建模,如何区分?

Linux桌面系统的特质:

  • 易用性 良好的用户界面,包括图形用户界面、文本行界面
  • 安全性 多种安全措施,包括读写控制、审计跟踪、应用授权等
  • 可定制 可以根据应用场景进行定制
  • 易扩展 可以扩展丰富的应用
  • 兼容性 兼容多种硬件设备、基础软件
  • 支撑  支持非法的系统调用、基础服务、基础库、开发组件等

Linux桌面系统的顶层组,这里是组的分类,并不是组件的分类。linux系统组件过多,不再一一说明。

  • 安装程序 操作系统的安装程序
  • firstboot firstboot设置
  • core组 核心组件
  • framework组 框架组件
  • KDE 桌面环境
  • App 系统集成应用
  • extra 系统扩展应用

linux系统的组件过多,不再详细列出,举例说明。

core组件包括kernel、gcc、bash、automake、make、xorg、syslinux、systemd、glibc... framework组件包括NetworkManager、QT、python、Perl、openvpn... KDE组件包括isoftapp、fcitx、kde-baseapps、kf5、kde-workspace、plasma、kwin、ark、dolphin、sddm... App组件包括chromium、bomi、isoft-safe-center、qt-creator、isoft-update... extra组件包括k3b、clouldmusic、bullet、opencv、golang...

linux系统的Capabilities(能力)

linux系统的能力矩阵,不再详细划分,这里只进行顶层分组进行简略划分。

易用性 安全性 可定制 易扩展 兼容性 支撑
安装程序 LiveCD、安装操作简便 分区数量、容量设置;
swap分区、文件系统类型、home分区设置; 分区助手,还原、迁移助手 UEFI、legacy、多系统、多硬盘、多种硬件平台(台式机、笔记本)
firstboot 设置简便 定制语言、账户、登陆设置
core组 支持审计、读写控制 各个组件可以进行裁剪和修改
framework组
KDE组
app
extra

组件太多,不再详细列出每个组件的能力。每个组件都可以再根据ACC进行测试建模。

示例二

此处,linux的包含组件过多,需要进行拆分,分别进行ACC测试建模

以普华应用商店为例

普华应用商店特质:

  • 容易 应用软件安装简单,操作容易
  • 可扩展 可以进行软件种类的丰富
  • 相关  展示linux桌面用户常用软件
  • 独立性 安装对应应用软件,不影响系统及其他软件
  • 完整性 应用软件安装包完整

普华应用商店的组件:

  • 首页
  • 升级
  • 卸载
  • 软件分类
  • 软件介绍
  • 软件操作
  • 搜索
  • 设置
  • 软件包

普华应用商店的能力矩阵:

| | 容易   | 可扩展   | 相关 | 独立性 | 完整性   | 响应快 | | ----- | -------- | ------------ | ---------------- | ----------- | ------------- | | 首页  | 打开简单;展示常用菜单 | | 首页展示下载量大常用软件;首页新闻定期更新 | | 显示完整,菜单功能正常| 快速显示 | | 升级 | 直观显示可升级软件,支持一键升级、全部升级、软件选择性升级 | | 只显示可升级软件 | 软件升级,不影响其他功能或软件 | 软件可正常升级,升级后不影响其他应用 |查询响应快 | | 卸载 | 直观显示可卸载软件,支持一键卸载、全部卸载、选择性卸载 | | 只显示已安装软件 | 软件卸载,不影响其他功能或软件 | 软件卸载完整 | | | 软件分类 | 软件分类查看直观,分类清晰,支持按类全选,一键安装、选择性安装 | 可以后台进行软件的增删 | 分类准确,软件各组分类只包含本类相关软件 | 同一软件只归属一个分类 | 完整显示后台的软件分类 |快速显示 | | 软件介绍 | 软件对应介绍页容易找到,介绍页包含软件的操作功能 | 可以进行软件介绍的定制 | 软件介绍内容和软件符合 | 软件介绍页和软件一一对应,直接无干扰 | 对软件介绍完整、准确,操作功能正常| | | 软件操作 | 软件操作简单,安装、卸载、升级操作简单 | | | 软件多种操作之间互不影响 | | | | 搜索 | 提供搜索框且容易找到,搜索简单便捷 | | 搜索按照一定规则,并按用户搜索内容显示 | | 完整显示用户查询条件下的内容 | 查询响应快| | 设置 | 设置菜单直观 | | 只包含相关菜单 | 设置项之间互不干扰 | 功能设置准确,包含全部相关设置 | | | 软件包 | | | 软件包和软件分类中的软件菜单一一对应 | 软件菜单和软件包相对独立 | 软件包全部能够正确安装、卸载、升级且之间互不干扰 | |

总结:

ACC测试建模至上而下,从产品的特质到组件,再到能力(功能)进行解析,可以快速、准确的生成一个产品测试计划。另外,对于比较大的系统产品,比如linux发行版,可以先进行大模块的划分,然后再进行各个组件的建模。像操作系统产品是多个组件或产品集成而来。

by 李鹏