简介
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发行版,可以先进行大模块的划分,然后再进行各个组件的建模。像操作系统产品是多个组件或产品集成而来。