Clips 检查规则库完整性和一致性的工具-剪辑

Clips 检查规则库完整性和一致性的工具-剪辑,clips,expert-system,Clips,Expert System,我已经制定了一套规则来控制特定飞行任务场景的执行。我已经在模拟中测试了这个规则集,以检查是否会执行预期的场景,并且一切都按照预期进行。因此,我确信这些规则能够成功地实现“预期”场景。我需要做的是检查规则集是否处理所有可能发生的情况,包括那些“意外”或“看不见”的情况。也就是说,从一开始就不应该发生的情况,但是由于某些错误或外力可能会发生。例如,无人机不应爬过某个阈值,但是,由于空气推力过大或压力传感器故障,无人机可能爬过该阈值。我的规则库有33条规则和6个模板,它们都有大约25个属性。尝试考虑这

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


谢谢

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

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

一般来说,不可能证明任何给定的程序都能正确工作,甚至无法终止,因此,考虑到您提供的关于规则的有限信息,不可能说它们的正确性是否能够被证明。但是,如果规则相对简单,并且可以表示为事实,则可以使用剪辑本身来验证程序的某些方面。例如,CLIPS animal程序()将其规则表示为事实:

   (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()使用的方法,该方法将规则转换为事实以进行分析。您的实际程序不需要将规则表示为事实,但是如果您这样做是为了进行分析,那么您可以通过使用规则对规则进行推理来检查很多事情。我能够在几分钟内使用搜索引擎找到Drools验证器,因此您可能可以找到此技术的其他示例

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

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

一般来说,不可能证明任何给定的程序都能正确工作,甚至无法终止,因此,考虑到您提供的关于规则的有限信息,不可能说它们的正确性是否能够被证明。但是,如果您的规则相对简单,并且可以表示为