4 votes

Vous recherchez des conseils pour créer une application "TestMaker" (questions et réponses) avec le moteur d'évaluation.

Je travaille sur un nouveau projet. Ma meilleure analogie serait un fabricant de tests d'évaluation psychologique.

Aspect #1. L'utilisateur final doit créer des questions de test. Avec des types de questions. Et des 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))

Je dois donc être en mesure de créer des questions, leur type et, pour certaines d'entre elles, des réponses possibles.

Ici :

Le numéro 1 est un type connu 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 nombre 3 est un type connu de "Integer". L'utilisateur final (la personne qui effectue l'évaluation) peut en principe introduire n'importe quelle valeur entière.

Le nombre 4 est un type connu de "décimal". C'est la même chose que le nombre entier.

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

Exemple :

Si quelqu'un répondait :

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

Un expert en psychiatrie a calculé que si quelqu'un a répondu par les réponses ci-dessus, il est 85% plus à risque de dépression que la normale. (Où 85% est un nombre que l'utilisateur final (psychiatre) peut entrer comme paramètre.

L'aspect n°2 consiste donc à parcourir les réponses de quelqu'un et à déterminer un résultat.

La "grille de réponse" devrait être configurée de manière à passer en revue (certaines ou toutes) les possibilités dans un ordre de priorité, puis, une fois toutes les conditions remplies (sur une seule ligne), à sortir avec le résultat.

Comme ça :

(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 sortez avec le pourcentage. Si vous ne trouvez pas de correspondance, vous passez à la règle suivante.

De plus, en utilisant cet exemple fictif d'évaluation psychologique, je n'ai pas besoin de définir chaque permutation. De nombreuses questions des évaluations psychologiques ne sont pas réellement utilisées, elles ne sont que du superflu. Ainsi, dans ma grille ci-dessus, j'ai délibérément laissé de côté la question n°4. Elle n'a aucune incidence sur les résultats.

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

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

(La possibilité d'avoir une pointure >= 20 et d'avoir de gros dollars en poche est très faible, donc vous n'avez probablement pas pris le test psychologique au sérieux).

Si aucune règle n'est trouvée (dans mon application réelle, pas dans cette maquette), je lèverais une exception ou je m'en moquerais tout simplement. Je n'aurais pas besoin de règle par défaut ou de règle de repli. Dans l'exemple ci-dessus, le rouge et le jaune sont des couleurs préférées "inquiétantes". 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é des Business Rule Engines 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 souhaitable, mais possible.

Mon problème avec tout moteur de règles est que le "vocabulaire" (je n'ai qu'une expérience limitée des moteurs de règles commerciales) 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 de gestion.

If 
        the (Employee's HireDate) is before (10 years ago) 

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

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

Mais dans ma situation, le test est composé de questions (dynamiques) et de réponses (dynamiques), et non de propriétés prédéterminées.

Je pense donc que je suis à la recherche d'idées sur la manière de réaliser ce projet.

Je sais que je peux construire une application "TestMaker" assez rapidement.

Le plus gros problème est d'intégrer les questions et les réponses possibles dans les "règles d'évaluation".

Merci pour tout conseil.

Technologies : Cadre DotNet 4.0 Base de données dorsale Sql Server 2008 VS2010 Pro, C#

1voto

Chaitanya Points 1636

S'il s'agit d'une petite application, c'est-à-dire d'une dizaine d'utilisateurs par opposition à un millier, et qu'elle n'est pas critique pour l'entreprise, alors je recommanderais Excel.

Les avantages sont les suivants : la plupart des utilisateurs professionnels sont très familiers avec Excel et l'ont probablement installé sur leurs machines. En principe, vous envoyez un classeur Excel à vos utilisateurs professionnels. Ils saisissent les questions, le type (décimal, vrai-faux, etc.). Cliquez sur un bouton qui déclenche une macro Excel. Celle-ci peut générer un fichier de configuration XML ou mettre les questions en SQL. Votre application se contente de le lire, de l'afficher et de recueillir les réponses comme d'habitude.

Le principal avantage d'Excel réside dans l'aspect n° 2, à savoir les règles de gestion dynamiques choisies par l'utilisateur. 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 habitués à saisir des formules simples telles que =If(A1 > 20 && A2 <50) etc. Là encore, l'utilisateur appuie sur un bouton et génère un fichier de configuration ou saisit les données dans le serveur SQL.

Dans votre application, vous parcourez le tableau des règles et l'appliquez aux réponses.

Compte tenu du nombre d'utilisateurs/enquêtes, etc. Cette solution simple serait beaucoup plus simple que Biztalk ou un moteur complet de règles douanières. Biztalk est une bonne solution si vous avez besoin de communiquer avec plusieurs systèmes, d'intégrer leurs données, d'appliquer des règles, de créer un flux de travail, etc. La plupart des autres moteurs de règles sont également conçus pour des systèmes de règles complexes et de grande envergure. La complexité de ces systèmes de règles ne réside pas seulement dans le nombre de règles ou de permutations, mais surtout dans le fait de devoir communiquer avec plusieurs systèmes, de "dater" certaines règles ou de prévoir des règles pour les futures dates de lancement, etc.

Dans votre cas, une grille de données basée sur Excel ou sur un système similaire sur une page Web fonctionnerait parfaitement. À moins, bien sûr, que vous ne réalisiez un projet pour Gartner ou une autre société d'enquête mondiale sur les données, ou encore pour une importante organisation statistique gouvernementale. Dans ce cas, je vous suggère Biztalk ou d'autres moteurs de règles commerciaux.

Dans votre cas, il s'agit de tables SQL avec des questions, des types de réponses et des 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 d'itérer à travers les règles et de les appliquer à la table de réponse.

1voto

TobiX Points 651

Êtes-vous sûr de vouloir utiliser un moteur de règles métier pour ce problème ?

D'après ce que je comprends, le cas d'utilisation d'un BRE est le suivant

  • Flux d'exécution essentiellement statique
  • Certaines décisions changent souvent

Dans votre cas d'utilisation, l'ensemble du système (flux Q/A et évaluation) est dynamique, donc IMHO un simple langage spécifique au domaine pour l'ensemble du système serait une meilleure solution.


Vous pourriez vous inspirer de testMaker - un logiciel basé sur le web, exactement pour ce flux de travail. (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 construire des rapports à partir de là...

1voto

Uğur Gümüşhan Points 708

Assurez-vous que vous modélisez une base de données adaptée aux objets hiérarchiques. Cet article aiderait

créer une table pour le test créer des tables pour les questions, avec les colonnes question, testid, questiontype créer des tables pour les réponses, avec les colonnes answer id, question id, answer et istrue les réponses appartiennent aux questions une question peut avoir plusieurs réponses

créer une table pour un utilisateur ou un employé créer une table pour les réponses de l'utilisateur, l'identifiant de la réponse, la réponse sélectionnée

évaluation (utiliser des variables d'objet pour la couverture des booléens et des entiers, utiliser try catch avant d'utiliser une fonction pour une couverture élevée des exceptions) :

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 la 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 faible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X