`
chelsea
  • 浏览: 112490 次
  • 来自: ...
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

结论:

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

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

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

附: 专家系统介绍

根据维基百科:

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

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

  1. 领域专家级知识

  2. 模拟专家思维

  3. 达到专家级的水平

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

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

分享到:
评论

相关推荐

    CISCO交换机配置AAA、802.1X以及VACL

    验证服务器确认证书后,就会做出请求者可不可以使用LAN服务的决定。只要让受控端口由中断状态转换到连接状态,即可实现这一步。 增强授权功能 因为802.1x只明确规定了基本的开/关功能,其他功能甚少,大多数安全...

    软件工程知识点

    所谓系统集成也就是根据概要设计中的软件结构,把经过测试的模块,按照某种选定的集成策略,例如渐增集成策略,将系统组装起来。 在组装过程中,需要对整个系统进行集成测试,以确保系统在技术上符合设计要求,在...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 20.8.5 隐藏实现细节来维系契约 20.9 未处理的异常 20.10 对异常进行调试 20.11 异常处理的性能问题 20.12 约束执行区域(CER) 20.13 代码契约 ...

    TCP.IP路由技术[第二卷](CCIE职业发展系列).pdf

     通过大量实用且全面的复习题、配置练习题及故障检测与排除练习题来测试和验证各种所学知识:  在掌握高级TCP/IP路由技术的同时。还可以进一步加强CCIE的认证准备工作。 为了管理日益增大的互连网络,需要全面...

    SQL注入攻击与防御(安全技术经典译丛)

     9.2.3 不可编辑的输入保护与可编辑的输入保护  9.2.4 URL策略/页面层策略  9.2.5 面向方面编程  9.2.6 应用入侵检测系统  9.2.7 数据库防火墙  9.3 确保数据库安全  9.3.1 锁定应用数据  9.3.2 锁定...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    “本书是毋庸置疑的struts2权威著作,虽然肯定还会有更多相关图书出现,但是我相信它已经不可超越。”  ——JavaRanch网站 “本书内容极为扎实。充满了其他地方找不到的技术细节,而且深入剖析了Struts的内部机理。...

    SQL注入攻击与防御

    9.2.3 不可编辑的输入保护与可编辑的输入保护 308 9.2.4 URL策略/页面层策略 308 9.2.5 面向方面编程 309 9.2.6 应用入侵检测系统 310 9.2.7 数据库防火墙 310 9.3 确保数据库安全 310 9.3.1 锁定应用数据 311 9.3.2...

    SAMBA 24学时教程

    15.2 用于Macintosh操作系统的DAVE 2.1 199 15.2.1 安装DAVE 199 15.2.2 配置NetBIOS 200 15.2.3 登录和访问服务器 201 15.3 课时小结 203 15.4 专家答疑 203 15.5 新术语 203 第四部分 Samba 安全性 第16学时 口令...

    windowsnt 技术内幕

    多域环境下的帐号转置 集中式管理的简介 配置单向和双向委托 理解委托域和受托域之间的差别 使用内建组管理委托 理解传递身份审核 跨越委托向用户授权访问资源 管理被破坏的委托关系理解委托的不可传递性问题 服务器...

    电子政务网络安全检查表.pdf

    3. 使用扫描工具探测测试边界网络设备,可以通过试图访问未授权的资源,验证访问控制措施是否能对未授权的访问行为的控制,扫描工具接入点设置在网络入口处。 判定标准 判定标准包括: 1. 上述2)-3)均为肯定,则...

    亮剑.NET深入体验与实战精要2

    本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...

    亮剑.NET深入体验与实战精要3

    本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...

    数据挖掘读书报告.docx

    数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。 数据挖掘利用了来自如下一些领域的思想:(1) 来自统计学的...

    算法导论(part1)

    它深入浅出地介绍了大量的算法及相关的数据结构,以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计。对于每一个专题,作者都试图提供目前最新的研究成果及样例...

    算法导论(part2)

    它深入浅出地介绍了大量的算法及相关的数据结构,以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计。对于每一个专题,作者都试图提供目前最新的研究成果及样例...

Global site tag (gtag.js) - Google Analytics