【问题标题】:Tools to check completeness and consistency of rule-base - CLIPS检查规则库完整性和一致性的工具 - CLIPS
【发布时间】:2017-08-01 10:54:43
【问题描述】:

我制定了一套规则来控制特定飞行任务场景的执行。我已经在模拟中测试了这个规则集,以检查是否会执行预期的场景,并且一切都按预期工作。因此,我确信这些规则可以成功地完成“预期”的场景。我需要做的是检查规则集是否处理所有可能发生的情况,包括那些“意外”或“未见”的情况。即,从一开始就不应该发生的情况,但是它们可能由于某些错误或外力而发生。例如,无人机不应该爬升超过某个阈值,但是,由于强大的空气推力或有故障的压力传感器,它可能会爬升超过这个阈值。我的规则库有 33 条规则和 6 个模板,它们都有大约 25 个属性。尝试考虑这 25 个属性的所有组合(在整数和具有不同数量和允许符号值的符号之间变化)非常复杂,并且很难手动完成。是否有工具可以自动检查规则集是否涵盖了模板属性的所有可能组合(即所有可能的情况)?简而言之,该工具应该回答以下问题:是否有任何缺失的角色可以处理我忘记考虑或没有想到的可能情况(或组合)?

谢谢

【问题讨论】:

    标签: clips expert-system


    【解决方案1】:

    我不知道有任何现成的 CLIPS 工具。如果我没记错的话,当我为 JRules 开发应用程序时,规则表编辑器支持完整性检查,因为它知道表中的行表示规则的分组集合,并且可以通过比较行来做出一些推断,但它没有t 支持对使用业务或技术规则语法编写的单个规则进行完整性检查。由于我的应用程序有大量无法使用表格表达的复杂规则,因此我不得不使用单元测试功能并手动生成一组具有代表性的测试用例,因为无法测试每个场景。

    使用 CLIPS,没有任何高级表格编辑器,因此您的所有测试都仅限于单元测试。有一组测试用例 (https://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/feature_tests_630.zip) 用于对 CLIPS 功能进行单元测试,您可以将其用作对其他应用程序进行单元测试的框架。要运行测试用例,启动 CLIPS 并从测试用例的顶级目录执行 (batch "testall.tst") 命令。测试用例完成后,您可以使用 diff 程序将预期输出目录的内容与实际输出目录的内容进行比较。单个测试用例由批处理文件组成,这些文件在执行时将其输出转储到文本文件中。然后将该输出与包含预期输出的文本文件进行比较。没有关于如何创建测试用例的指南,但提供了 100 多个测试用例,因此如果您只是将它们用作模板,那么弄清楚如何编写一个并不难。

    一般而言,无法证明任何给定程序正常运行甚至终止,因此,鉴于您提供的有关规则的信息量有限,无法确定是否可以证明其正确性。但是,如果您的规则相对简单并且可以表示为事实,您可以使用 CLIPS 本身来验证程序的某些方面。例如,CLIPS 动物程序 (https://sourceforge.net/p/clipsrules/code/HEAD/tree/branches/64x/examples/animal.clp) 将其规则表示为事实:

       (rule (if order is scales and
              rounded.shell is yes) 
             (then type.animal is turtle))
    

    然后您可以编写如下规则来检查是否可以满足规则条件:

    (defrule VALIDATE::reachable
       (rule (name ?name) (validate yes)
             (if ?a ?c ?v $?))
       (not (question (variable ?a)))
       (not (rule (then ?a $?)))
       =>
       (printout t "In rule " ?name " no question or rule could be found "
                   "that can supply a value for the variable " ?a ":" crlf
                   "   " ?a " " ?c " " ?v crlf))
    

    这类似于 Drools Verifier (https://developer.jboss.org/wiki/DroolsVerifier) 使用的方法,它将规则转换为事实以进行分析。您的实际程序不需要将规则表示为事实,但如果您这样做是为了分析,您可以通过使用规则来推理您的规则来检查很多事情。我可以在几分钟内使用搜索引擎找到 Drools 验证程序,因此您可能会找到该技术的其他示例。

    【讨论】:

    • 感谢加里的回答。老实说,你的答案对我来说不是很清楚。如果您能详细说明一下,我将不胜感激。我已经通过在模拟环境中运行一些测试用例来测试规则集,但我无法证明,或者至少可以肯定,规则集涵盖了所有可能的情况。该应用程序至关重要,我们需要证明规则的完整性,以便处理任何意外或看不见的情况。是否有任何不支持 CLIPS 的工具可以使用?最后,是否有任何指南解释了如何创建上面链接中的测试用例?
    • 再次感谢 Gary 的回复和其他信息。我认为我们在谈论两个不同的观点。因此,我更新了问题以使其更清楚。对不起,如果我没有正确理解你。我只是在努力学习。谢谢
    • 我不认为你会找到一个现成的工具来解决你的问题。我认为您需要编写一个工具来自己进行分析。
    • 好的。感谢 Gary 抽出宝贵时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多