2011-11-03 2 views
4

Je travaille sur un nouveau projet. Ma meilleure analogie serait un fabricant de tests d'évaluation psychologique.Je cherche des astuces pour créer une application "TestMaker" (Questions et Réponses) avec Evaluation Engine

Aspect n ° 1. L'utilisateur final doit créer des questions de test. Avec les types de questions Et les réponses possibles aux questions le cas échéant.

Exemples:

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)) 

donc je dois être en mesure de créer des questions, leur type de question, et quelques-unes des questions, les réponses possibles.

ici:

Numéro 1 est un type de savoir de "Vrai ou faux".

Le numéro 2 est un type connu de "réponse unique/choix multiple" ET l'utilisateur final créera les réponses possibles.

Le numéro 3 est un type connu de "Integer". L'utilisateur final (personne prenant l'évaluation) peut fondamentalement mettre n'importe quelle valeur entière.

Le numéro 4 est un type connu de "Decimal". Identique à Integer.

Aspect n ° 2. L'utilisateur final doit évaluer les réponses de la personne. Et affecter une valeur scalaire à un ensemble de réponses.

Exemple:

Si quelqu'un a répondu:

1. T 
2. Red 
3. >=8 
4. (Not considered for this situation) 

Certains psychiatre-expert chiffres que si quelqu'un a répondu avec les réponses ci-dessus, que vous êtes 85% plus à risque de dépression que la normale . (Où 85% est un nombre final affaires utilisateur (psychiatre) peut entrer en tant que paramètre.

donc Aspect # 2 est en cours d'exécution à travers les réponses de quelqu'un, et la détermination d'un résultat.

La « grille de réponse » devrait être configuré de façon à ce qu'il passe (en tout ou en partie) les possibilités dans un ordre de classement prioritaire, et après que toutes les conditions soient réunies (sur une seule ligne), sortez avec le résultat

:

(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% 

Une fois qu'une correspondance est trouvée, vous quitte avec le pourcentage. Si vous ne trouvez pas de correspondance, vous passez à la règle suivante.

Aussi, en cours d'exécution avec cet exemple de simulation psychologique, je n'ai pas besoin de définir chaque permutation. Beaucoup de questions sur les évaluations psychologiques ne sont pas réellement utilisées, elles sont juste "fluff". Donc, dans ma grille ci-dessus, j'ai délibérément omis la question # 4. Cela n'a aucune incidence sur les résultats.

Il peut également y avoir une "Cette personne a-t-elle pris cela au sérieux?"Grille d'évaluation:

(3.) >=20 (4.) >=$1,000 ... Result = False 

(La possibilité d'avoir une taille de chaussure> = 20 et ayant de gros dollars dans votre poche est très faible, donc vous ne avez probablement pas pris le sérieux test psych.)

Si aucune règle n'est trouvée, (dans ma vraie application, pas cette maquette), je lancerais une exception ou je m'en ficherais, je n'aurais pas besoin d'une règle par défaut ou d'une règle d'erreur Dans ce qui précède, le rouge et le jaune sont "inquiétants" "couleurs préférées.Si votre couleur préférée est le noir ou le blanc, cela n'a aucune incidence sur votre facteur de risque de dépression

J'ai utilisé Business Rul e Moteurs dans le passé. (InRule par exemple). Ils sont très chers, et ce n'est pas dans le budget.

BizTalk Business Rules Framework est une possibilité. Pas de $ irable, mais possible. Mon problème avec n'importe quel moteur de règles est que le "vocabulaire" (j'ai peu d'expérience avec les moteurs de règles métier) est basé sur des objets, avec des propriétés statiques.

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); 
     } 

} 

Il serait facile de créer des règles métier. Mais dans mon cas, le test est composé de questions (dynamiques) et de réponses (dynamiques), et non de propriétés prédéterminées.

Donc je suppose que je suis à la recherche de quelques idées pour enquêter sur la façon de retirer cela.

Je sais que je peux créer une application "TestMaker" assez rapidement.

Le plus gros problème est l'intégration des Questions et (réponses possibles) dans les «règles d'évaluation».

Merci pour tous les conseils.

Technologies: DotNet 4.0 Cadre Sql Server 2008 Backend Database VS2010 Pro, C#

+3

Ceci est probablement de loin la plus longue question que je l'ai vu sur Stackoverflow :) – Kizz

+0

Messages .OrderByDescending (p => p.Body.Length) .Lorsque (p => p.PostTypeId == 1) . Prenez (10) http: // coderjournal.com/2010/06/use-linqpad-to-query-stack-overflow/ Peut-être que! :) Vous pouvez vérifier si vous êtes vraiment vraiment ennuyé. – granadaCoder

+0

Préférez-vous que le résultat soit déterminé en utilisant des requêtes SQL ou en utilisant du C# clair? – Polity

Répondre

1

Si c'est une petite application, à savoir 10s d'utilisateurs par opposition à 1000s, et sa non critiques de l'entreprise, alors je vous recommande Exceller. Les avantages sont, la plupart des utilisateurs professionnels sont très familiers avec Excel et le plus probablement l'ont sur leurs machines. Fondamentalement, vous expédiez un classeur Excel à vos utilisateurs professionnels. Ils entreraient les questions, le type (décimal, vrai faux etc.). Cliquez sur un bouton qui déclenche une macro Excel. Cela pourrait générer un fichier de configuration XML ou placer les questions dans SQL. Votre application le lit, l'affiche et recueille les réponses comme d'habitude.

Le principal avantage d'Excel est l'aspect n ° 2, les règles métier choisies par l'utilisateur dynamique. Dans une autre feuille du même document Excel, l'utilisateur final peut spécifier autant de permutations des réponses/questions qu'il le souhaite. Les utilisateurs d'Excel sont très familiers avec la saisie de formules simples comme = (A1> 20 & & A2 < 50) etc. L'utilisateur appuie de nouveau sur un bouton et génère un fichier de configuration ou saisit les données dans le serveur SQL.

Dans votre application, parcourez la table des règles et appliquez-la aux réponses.Compte tenu du nombre d'utilisateurs/enquêtes etc. Cette solution simple serait beaucoup plus simple que biztalk ou un moteur de règles de douane complet. BizTalk serait bon si vous avez besoin de parler à plusieurs systèmes, intégrer leurs données, appliquer des règles, créer des flux de travail, etc. La plupart des autres moteurs de règles sont également orientés vers un système de règles très grand et complexe. La complexité dans ces systèmes de règles, n'est pas seulement le nombre de règles ou de permutations, il faut surtout parler à plusieurs systèmes ou "End dating" certaines règles ou mettre en règles pour les futures dates de lancement, etc

In Dans votre cas, une base de données Excel ou similaire sur un système de page Web fonctionnerait bien. À moins que vous ne fassiez un projet pour Gartner ou une autre entreprise mondiale d'enquêtes de données ou une grande organisation statistique gouvernementale. Dans ce cas, je suggérerais Biztalk ou d'autres moteurs de règles commerciales.

Dans votre cas, ses tables SQL avec Questions, Types de réponses, Règles à appliquer. L'entrée est rendue conviviale via Excel ou «Excel dans le Web» via une grille de données, puis il suffit de parcourir les règles et de les appliquer à la table de réponses. Etes-vous sûr de vouloir utiliser un moteur de règles métier pour ce problème?

+0

J'apprécie la tentative, mais une solution Excel n'est pas réalisable. // alors il suffit de parcourir les règles et de les appliquer à la table de réponse // C'est le point de friction. Quel est le "comment" faire cela, pas le "quoi faire". Comme je l'ai mentionné, les moteurs de règles métier sont construits sur les propriétés statiques des objets. Merci pour la tentative. – granadaCoder

1

Pour autant que je le comprends, le cas d'utilisation pour un BRE est

  • flux d'exécution La plupart du temps statique
  • Certaines décisions ne changent souvent

Dans votre usecase, tout le système (Q/A-flow et l'évaluation) sont dynamiques, donc à mon humble avis un langage spécifique à un domaine simple pour l'ensemble du système serait une meilleure solution.


Vous voudrez peut-être prendre un peu d'inspiration de testMaker - un logiciel basé sur le Web exactement pour ce flux de travail. (Disclaimer: j'ai contribué un peu à ce projet.) Ses règles de notation sont assez basiques, donc cela ne vous aidera peut-être pas beaucoup. Il a été conçu pour exporter des données vers SPSS et créer des rapports à partir de là ...

1

Assurez-vous modélisez une base de données appropriée pour les objets hiérarchiques This article would help

create table pour le test créer des tables pour des questions, avec des colonnes question, testid, questiontype créer des tables pour trouver des réponses, id réponse, id question, réponse et colonnes isTrue réponses appartiennent aux questions une question peut avoir plusieurs réponses

create table pour l'utilisateur ou un employé créer la table des réponses des utilisateurs, réponse id, sélectionnée réponse

évaluation (variables d'objet utilisé pour la couverture entier booléen, utilisez capture essayer avant d'utiliser la fonction pour une large couverture d'exception.):

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 
} 

obtenir une sortie comme un dictionnaire de données et poster ici s'il vous plaît. sans schéma de données, l'aide que vous obtiendrez sera limitée.

Questions connexes