更新第二部分,关于可控性和可观测性
软件可测性系列2(Testability) Overview - 1.为什么软件可测性很重要
- 2.可控性和可见性
- 3.预料之外的不可测性
- 4.白盒可测性
- 5.黑盒可测性
1. 可控性 可控性决定了搭建测试环境,运行测试用例所花费的工作量以及在测试过程中,被测系统特定功能和特性对测试用例进行响应所能达到的程度 这一段翻译比较生涩,暂时没有找到合适的句子,可以通过下面列的几项来理解。 考虑系统可控性的时候,可以通过下面的方式进行提问: - 1、如果要运行我们的测试用例,我们必需要做什么?
- 2、为了做这些事情,我们将要付出多大的代价?
- 3、我们有些测试用例是否很难在被测系统上运行?
- 4、给定一个测试目标,我们是否了解足够多的知识以编写充分完整的用例?
- 5、我们能提供多少测试工具?
2. 可观测性 可观测性决定了搭建测试环境,运行测试用例所花费的工作量以及在执行测试用例过程中,运行被测系统特定功能和特性时的系统表现能被评估的程度 - 为了评估测试结果是通过还是失败,我们必需做什么?
- 为了做这些事情,我们将要付出多大的代价?
- 是否很难充分确定对被测系统进行测试的结果?
- 我们是否了解足够的信息来决定测试结果是成功还是失败?
我(原作者)在我1993年CACM文章里定义了130个决定可测性的独立点。有6大主要的因子 - 概述 :我们怎么知道要测什么?有项目需求和详细设计吗?他们是否完整?他们是否是最新的?
- 实现:被测系统是什么结构?——它是否很复杂,以至于会隐藏缺陷?为测试目标功能特性而进行环境准备和与其交互是否很困难?
- 内置测试: 被测系统是否有一些内置的功能可以协助我们准备测试环境和评估测试结果?它提供日志吗?它是否进行自检?
- 测试套件: 在构造测试套件的时候是否以高扩展性去构造的,还是完全是一个庞然大物?
- 测试工具: 测试工具是否能够用于自动化回归测试?当我们需要修改测试套件的时候,是否轻松易行?
- 测试过程: 测试工作流程是否补充了开发工作流程?测试工作是被视为跟需求及功能开发一样地位还是作为事后工作来考虑的(地位靠后)?
以上总则提供了一个分析的框架。下面是关于实际工作中系统如何降低系统可测性的特定实例 测试领域 | 降低可控性方面 | 降低可观测性方面 | GUI页面 | 需要设置/获取抽象的小部件;比较脆弱的界面;延迟;动态部件和定制化部件 | 格式化后的内容的游标;无文字的输出的干扰,无法下定论;专有的锁定; | 操作系统异常 | 成百上千的操作系统异常,很难触发 | 沉默失效(自己默默失效,无法观测具体数据) | Objective-C | 测试驱动程序无法提前获取运行时定义的对象 | 运行时对象插桩????(还不太理解) | DBMS和众多单元测试工具 | 场景太丰富而难以进行mock,为进行可伸缩性测试无法复制事务锁????(不太理解) | 必须开发单独的查询数据库语句,有跟事务锁交叉的可能 | 多层corba | 识别一个事务路径;获取所有分布式对象的期望状态 | 在节点处无法跟踪信息传递(像路径跟踪程序一样) | 蜂窝基站 | 射频加载/传播随着基站数量变化而变化;实际系统只是环境和真实的负载(难以模拟真实的环境) | 专有锁;从来不“下线” |
接下来在第三部分,我将介绍预料之外的不可测性 >
|