我已经制定了一套规则来控制特定飞行任务场景的执行。我已在模拟中测试了此规则集,以检查是否将执行预期的方案,并且一切都按预期工作。因此,我确信这些规则能够成功地完成预期"预期"场景。我需要做的是检查规则集是否处理可能发生的所有可能情况,包括那些"意外"或"看不见"的情况。即,从一开始就不应该发生的情况,但是可能由于某些错误或外力而发生。例如,无人机不应超过某个阈值,但是,由于强大的空气推力或有故障的压力传感器,它可能会超过此阈值。我的规则库有33轮规则和6个模板,每个模板都有25个属性。尝试考虑这25个属性的所有组合(在具有不同数字和允许符号的值的整数和符号之间变化)是非常复杂的并且非常难以手动完成。是否有一个工具可以自动检查模板的所有可能组合是否有效。属性(即所有可能的情况)都包含在规则集中?简而言之,该工具应该回答这个问题:是否有任何缺失角色可以处理我忘记考虑或没有想到的可能情况(或组合)?
由于
答案 0 :(得分:3)
我不知道CLIPS有任何现成的工具。如果我没记错的话,当我为JRules开发应用程序时,规则的表编辑器支持完整性检查,因为它知道表的行代表了一组分组的规则,它可以通过比较行来做出一些推论,但它并没有&# 39; t支持使用业务或技术规则语法编写的各个规则的完整性检查。由于我的应用程序有大量无法使用表格表达的复杂规则,因此我不得不使用单元测试功能并手动生成一组有代表性的测试用例,因为无法测试每个方案。
使用CLIPS,没有任何高级表编辑器,因此您的所有测试都仅限于单元测试。有一组测试用例(https://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/feature_tests_630.zip)用于单元测试CLIPS功能,您可以将其用作单元测试其他应用程序的框架。要运行测试用例,请启动CLIPS并从测试用例的顶级目录中执行(batch" testall.tst")命令。测试用例完成后,您可以使用diff程序将Expected输出目录的内容与Actual输出目录进行比较。单个测试用例由批处理文件组成,批处理文件在执行时将其输出转储到文本文件。然后将该输出与包含预期输出的文本文件进行比较。没有关于如何创建测试用例的指南,但是提供了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 Verifier,因此您可以找到此技术的其他示例。