首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找使用评估引擎构建"TestMaker“(问题和响应)应用程序的技巧

寻找使用评估引擎构建"TestMaker“(问题和响应)应用程序的技巧
EN

Stack Overflow用户
提问于 2011-11-03 19:59:20
回答 3查看 741关注 0票数 4

我在做一个新项目。我最好的类比就是一个心理评估测试员。

方面#1.终端业务用户需要创建测试问题.有问题类型。以及在适用的情况下对这些问题的可能答复。

示例:

代码语言:javascript
复制
1.  Do you have red hair?  (T/F)

2.  What is your favorite color?  (Single Response/Multiple Choice)
    (Possible Responses: Red, Yellow, Black, White)

3.  What size shoe do you wear (rounded to next highest size)?  (Integer)

4.  How much money do you have on you right now?  (Dollar Amount (decimal))

因此,我需要能够创造问题,他们的问题类型,和一些问题,可能的答案。

在此:

数字1是一种已知类型的“真假”。

数字2是一种已知类型的“单一响应/多重选择”,最终业务用户将创建可能的响应。

数字3是一种已知类型的“整数”。最终用户(接受评估的人)基本上可以输入任何整数值。

数字4是一种已知类型的“十进制”。和Integer一样。

方面#2.最终业务用户需要评估个人的反应.并为一组响应分配一些标量值。

示例:

如果有人答复:

代码语言:javascript
复制
1.  T
2.  Red
3.  >=8
4.  (Not considered for this situation)

一些精神病专家指出,如果有人给出了上述回答,你患抑郁症的风险比正常人高出85%。(其中85%是一个数字,最终商业用户(精神病学家)可以作为参数输入。

因此,方面#2是运行某人的反应,并确定一个结果。

必须设置“响应网格”,以便以优先级顺序(部分或全部)通过(部分或全部)可能性,然后在满足所有条件后(在一行上),退出结果。

如下所示:

代码语言:javascript
复制
(1.) T     (2.) Red       (3.) >=8    ... Result = 85%
(1.) T     (2.) Yellow    (3.) >=8    ... Result = 70%
(1.) F     (2.) Red       (3.) >=8    ... Result = 50%
(1.) F     (2.) Yellow    (3.) >=8    ... Result = 40%

找到匹配后,使用百分比退出。如果你找不到匹配的,你就去看下一个规则。

此外,使用这个心理评估模拟示例运行,我不需要定义每个置换。许多关于心理评估的问题实际上并没有被使用,它们只是“绒毛”而已。所以在我上面的网格中,我故意忽略了问题#4,它与结果没有任何关系。

也可能有一个“这个人认真对待这件事吗?”评价网格:

代码语言:javascript
复制
(3.) >=20    (4.) >=$1,000    ... Result = False

(鞋子尺寸的>= 20和口袋里有大把的钱的可能性很小,因此你可能没有认真对待心理测试。)

如果没有找到任何规则,(在我的实际应用程序中,不是这个模拟),我会抛出一个异常,或者根本不在乎。我不需要违约或失败规则。在上面,红色和黄色是“令人担忧”的最喜欢的颜色。如果你最喜欢的颜色是黑色或白色,这与你抑郁的危险因素没有关系。

我以前使用过业务规则引擎。(例如InRule)。它们很贵,而且没有在预算中。

BizTalk业务规则框架是一种可能。不是美元,而是可能的。

我对任何规则引擎的问题是,“词汇表”(我对业务规则引擎的经验有限,请注意)是以对象为基础的,具有静态属性。

代码语言:javascript
复制
public class Employee
{
        public string LastName
        { get; set; }

        public DateTime HireDate
        { get; set; }

        public decimal AnnualSalary
        { get; set; }

        public void AdjustSalary(int percentage)
        {
            this.AdjustSalary= this.AdjustSalary + (this.AdjustSalary * percentage);
        }

}

这将很容易创建业务规则。

代码语言:javascript
复制
If 
        the (Employee's HireDate) is before (10 years ago) 

then 
        (Increase Their Salary) By (5) Percent.)

else
        (Increase Their Salary) By (3) Percent.)

但在我的情况下,测试是由(动态)问题和(动态)响应组成的,而不是预先确定的属性。

所以我想我是在寻找一些想法来研究如何做到这一点。

我知道我可以相当快地构建一个"TestMaker“应用程序。

最大的问题是将问题和(可能的答复)纳入“评估规则”。

谢谢你的建议。

技术: DotNet 4.0 Framework 2008后端数据库VS2010 Pro,C#

EN

回答 3

Stack Overflow用户

发布于 2011-11-13 14:08:42

如果它是一个小型应用程序,即10 s的用户,而不是1000 s,而它并不是业务上的关键,那么我推荐Excel。

优点是,大多数业务用户都非常熟悉excel,并且很可能在他们的机器上拥有excel。基本上,您可以将Excel工作簿发送给业务用户。他们会输入问题,类型(十进制,真假等)。单击触发excel宏的按钮。这可以生成XML配置文件或将问题放入SQL中。您的应用程序只是像往常一样读取、显示和收集响应。

Excel的主要优势在于第二方面,动态用户选择业务规则。在同一Excel文档的另一张表中,最终业务用户可以根据自己的意愿指定尽可能多的回答/问题排列。Excel用户非常熟悉输入诸如=If(A1 > 20 && A2 <50)等简单公式。同样,用户按下按钮生成配置文件或将数据输入到server。

在应用程序中,您将遍历Rules表并将其应用于响应。

考虑到用户/调查等的数量,这个简单的解决方案比biztalk或完整的海关规则引擎要简单得多。如果您需要与多个系统对话,集成它们的数据,执行规则,创建工作流等,Biztalk就更好了。大多数其他规则引擎也面向真正庞大、复杂的规则系统。这个规则系统的复杂性不仅仅是规则或排列的数量,它主要是要与多个系统交谈,或者“结束约会”某些规则,或者为未来的开始日期设置规则等等。

在您的例子中,基于Excel的或类似的网页系统上的数据将工作良好。当然,除非你在为Gartner或其他全球数据调查公司或主要的政府统计机构做项目。在这种情况下,我建议Biztalk或其他商业规则引擎。

在您的示例中,它的SQL表包含问题、答案类型、要应用的规则。输入通过Excel或"Excel in the web“通过一个数据集使用户友好,然后遍历规则并将它们应用到响应表中。

票数 1
EN

Stack Overflow用户

发布于 2011-11-15 14:33:17

您确定要使用业务规则引擎解决此问题吗?

据我所知,BRE的用法是

  • 主要是静态执行流
  • 有些决定确实经常改变。

在您的使用中,整个系统(Q/A流和评估)是动态的,因此IMHO --一个简单的特定于整个系统的领域语言将是一个更好的解决方案。

您可能需要从testMaker获得一些灵感--这是一种基于web的软件,正是用于此工作流的。(免责声明:我对这个项目有一点贡献。)它的评分规则是相当基本的,所以这可能对你没有多大帮助。它的目的是将数据导出到SPSS,并从那里生成报告.

票数 1
EN

Stack Overflow用户

发布于 2011-11-15 20:59:10

确保您正在建模一个适合于分层对象这篇文章会有帮助的数据库。

为测试创建表-为问题创建表,用列

为用户或员工创建用于用户答案的表,回答id,选择答案

求值(对布尔-整数覆盖使用对象变量,在使用函数进行高异常覆盖之前使用try catch ):

代码语言:javascript
复制
function(questiontype,answer,useranswer)
switch(questiontype) //condition can be truefalse, biggerthan,smallerthan, equals
{
case: "biggerthan": if(useranswer>answer) return true else return false;
case "truefalse": if(useranswer==answer) return true else return false
case "equals": if(useranswer==answer) return true else return false
}

请以数据字典的形式输出,并在此张贴。如果没有数据架构,您得到的帮助将是有限的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8001070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档