专家系统的测试策略: 不可验证?

来源:互联网 发布:淘宝怎么帮别人代付 编辑:程序博客网 时间:2024/06/14 04:16

---专家系统给测试和测试人员带来了不同的挑战.

我们日常接触到的软件大多为通用软件或者企业应用, 使用起来比较简单, 易于理解. 与之对应的,  有一类软件我们称之为专家系统, 它们协助某个领域的专家来做出判断和决策. 比如地质监测, 天气预报, 还有我们经常在电影里看到的科学家使用的各种模拟软件: 龙卷风灾难模拟, 变态教授的分子化学和新药品实验等.

直观的感觉, 这类软件已经与我们日常使用的软件不同. 具体一点, 我们从软件测试的角度来来理解一下专家系统带给我们的不同于通用软件的挑战:

  • 使用者需要具备必需的专业知识, 而这个门槛通常不低.

  • 算法可能要求大量的输入, 数据不好准备

  • 算法的输入空间和结果空间太过巨大, 而且没有直观的对应关系. 即给定输入不能一眼就看出输出.

  • 一些类型的专家系统其界面展现是非常复杂的,远非普通的企业应用和个人软件可比.

没有找到太多这方面的资料, 仅就以往经验和微博上的讨论做些总结.

 

1. 测试问题本质上是设计问题. 可测试性是很重要的设计约束. 表示逻辑和业务逻辑的分离,在复杂系统中更显必要和迫切. 所有的计算和推理的算法,都应该是UI无关的. UI只负责处理用户输入和显示计算结果. 这样从测试的角度来看,核心逻辑可以不需要通过UI来测, 那基于UI的测试的重点就可以转移到验证用户交互而不是业务相关的逻辑. 这是我们一直推崇的, 但其它类型应用中UI测试的方便性降低了对它需求的迫切性.

2. 测试问题本质上还是知识问题. 测试人员必须具备判断对错的知识. 这看起来是常识, 但在专家系统的测试中,这一点并不总是被很好的满足的. 软件规模较小的时候, 我们可以通过教会专家编程让他们自己来编写自己需要的软件. 软件规模较大的时候, 我们可以招聘相关专业的从业人员人员而不是软件专业的人来帮助测试. 如果这些条件都不满足的话, 我们只能培训目前的测试人员让他们掌握领域知识了. 

3. 专家系统演化的一个约束是它的计算结果不应该变差, 要么不变, 要么越来越精确. 这给了基于基准的测试(Benchmark)一个可能. 在软件稳定运行一段时间之后, 我们可以收集一组用户认为正确的输入输出,作为基准, 后续版本的改动不应该产生不一样的结果, 除非改的就是算法本身. 这是某种形式的regression, 但它的应用场景相对有限, 毕竟专家系统的核心就是算法, 新feature大都是算法的enhancement. 这样基准测试就不work了.

4. 那么好,算法的测试如何做? 我觉得这是专家系统测试最困难的部分. 困难在于算法的输入空间和结果空间是很广泛的, 并且实际算法的输入和输出之间的关联不像求平方或斐波纳契序列那样明显,好消息是在现在的计算机体系结构中, 算法总是确定的, 规范的, 即给定输入, 你总是能得到相同的输出. 这还是一个设计问题:小处来讲,算法的分解;大了说,体系结构,比如知识库和推理机的职责划分. 简单的数学公式的实现我们总是可以测的. 如果能把复杂算法分解为简单算法的组合,我们至少可以保证每一步测试的直观性和可理解性 
 

这里有一个重要的区别: 验证算法本身的正确性和实现的正确性.

算法本身可能是纯数学的, 与编程无关的, 是solution, 而不是implementation. 这个意义上的正确性超出了我们今天讨论的范围, 它应该由专家来保证. 在微博讨论中提到的根据历史数据来测试算法的方法, 测的就是算法本身, 而不是算法的实现. 我们focus在实现的正确性上. 几个具体的策略.

  • 基准测试. 前面提到过了.

  • 定性 over 定量. 定量是相对困难的, 因为这类软件的特点决定了结果的不确定性. 但正确结果的性质, 比如应该是正数还是负数, 数量级等, 都是可以确定的

  • 区间. 定性 over 定量的一个实际例子. 结果落在我们指定的一个区间内就是可接受的.

 

结论:

  • 测试人员必须具备领域知识. 我们日常对此感觉没那么必要只是这条规则在领域门槛较低情况下的一种近似.

  • 表示逻辑必须与业务逻辑分离. 我们不那么严格而没有遭太多报应只是在UI测试比较方便的情况下的一种运气.

  • 算法本身的正确性和算法的计算机实现的正确性分开测试. 前者靠掌握了相应知识的人来判断(通常是专家), 后者更易于测试(通常是QA), 更易于自动化.

 

附: 专家系统介绍

根据维基百科:

"专家系统是早期人工智能的一个重要分支,它可以看作是一类具有专门知识和经验的计算机智能程序系统,一般采用人工智能中的知识表示和知识推理技术来模拟通常由领域专家才能解决的复杂问题。

一般来说,专家系统=知识库+推理机,因此专家系统也被称为基于知识的系统。一个专家系统必须具备三要素:

  1. 领域专家级知识

  2. 模拟专家思维

  3. 达到专家级的水平

专家系统适合于完成那些没有公认的理论和方法、数据不精确或信息不完整、人类专家短缺或专门知识十分昂贵的诊断、解释、监控、预测、规划和设计等任务。一般专家系统执行的求解任务是知识密集型的. "

网上找到的一个专家系统的图:

 

原创粉丝点击