12
votes

Extension de l'application C # .NET - Construisez une langue de script personnalisée ou non?

J'ai besoin de créer une interface de script pour mon programme C # qui effectue le test de niveau système du micrologiciel intégré.

Mon application contient des bibliothèques pour interagir complètement avec les périphériques. Il existe des bibliothèques distinctes pour avoir initié des actions, obtenir la production et le suivi de la réussite / échec. Mon application dispose également d'une interface graphique pour gérer plusieurs périphériques et d'attribuer de nombreux scripts à exécuter.

pour les testeurs (non programmeurs, mais technique), je dois fournir une interface de script qui leur permettra de venir avec différents scénarios pour les tester et les exécuter. Ils vont juste appeler mes API, puis renvoient un résultat à mon programme (Pass / échec et message).

Un exemple très élémentaire de ce que je veux: xxx

Lorsque les fonctions de rapport, de puissance et de fréquence sont fournies par mes bibliothèques C #.

quelque chose comme irruby ou ironpython sera bon pour cela, ou devrais-je simplement construire ma langue très fondamentale? < / p>

Le code Ruby / Python devient-il désordonné lorsque vous essayez d'inclure une bande d'assemblages compilés .NET? Je veux qu'il soit facile d'apprendre et de coder pour les non-programmeurs et les programmeurs.

EDIT:

Merci pour toutes les grandes réponses. J'ai choisi IronPython comme la réponse puisqu'il avait le plus de soutien, mais je vais passer un peu de temps avec chacun de Ironpython, BOO et IRRUBY pour voir ce que les testeurs préféreraient écrire des scripts.


0 commentaires

9 Réponses :


16
votes

J'ai entendu de très bonnes choses sur IronPython pour exactement ce type de scénario. Je risquerais certainement de passer quelques heures sur une preuve de concept rapide, de voir comment elle se débrouille.

Michael Foord va heureusement cire lyrique sur le succès de IronPython dans des cas similaires (plus précisément pour lui, pour les utilisateurs avertis de feuille de calcul) et Son livre Couvre (IIRC) Quelques pointeurs d'hébergement de .net.


3 commentaires

C'est génial :) Y a-t-il de bons exemples / tutoriels là-bas pour ce type d'intégration? J'aimerais voir ce que le code de la fin python pour quelque chose comme ça ressemble.


Je suis à peu près sûr que IrissyThon en action couvre certains (bien que d'être des arbres morts, il peut être obsolète); Vous pourriez regarder ici: blogs.msdn .Com / Srivatsn / Archive / 2008/09/16 / ...


J'ai un exemple qui montre comment utiliser Python pour script c # (ou vb.net) sur mon blog sur gotnet.biz/blog/post/...



2
votes

Je suis d'accord avec Marc G, bien qu'il vaut la peine de mentionner que le concept général est un langugage spécifique de domaine. Bien que IRRUBY / IRINPYTHON ne soit pas strictement spécifique à un domaine, ils sont complets et vous laisseraient vous allouer avec votre mise en œuvre.

Visual Studio possède les outils DSL, et il y a le matériel de grammaire «M» que vous pouvez examiner.

mais oui, ironpython.


1 commentaires

J'apprends un nouvel acronyme tous les jours ... DSL est maintenant dans mon vocabulaire (deux fois). Merci, vous avez aidé mon Google à rechercher une tonne juste avec ça :)



10
votes

Vous voudrez peut-être consulter boo , une autre langue gérée qui fonctionne sur le CLR et qui est particulièrement bien adapté pour construire DSL et rendre vos applications scriptables.

Le pipeline de compilation est directement extensible de la langue elle-même.

lire le BOO Manifesto est un bon point de départ si vous voulez en savoir plus à ce sujet .

[ Modifier ] J'ai oublié de mentionner que ayende Rahien est en train d'écrire un Réservez complet sur le sujet: Programmations spécifiques du domaine de la construction dans BOO


0 commentaires

4
votes

Cela pourrait valoir la peine d'envisager PowerShell pour ce type de tâche. Cela peut appeler à .NET Tout comme l'une des langues DLR et possède un type de type de langue plus naturel pour des tâches dans son concept CMDLET (commandement). Vous devez écrire les cmdlets dans une langue compilée à V1 - en V2 qui est déployé à partir de Win7 et de travailler à des sorties plus anciennes au cours des prochains mois (V2 pour Vista / Win2k8 est à RC maintenant), vous pouvez construire ces dans PowerShell directement.


0 commentaires

2
votes

de la DSL que vous allez, je recommanderais d'utiliser le concombre avec irruby.

avec concombre, les testeurs écrivent des tests qui ressemblent à ce que c'était comme ça: P>

Scenario: See all vendors
Given I am logged in as a user in the administrator role
And There are 3 vendors
When I go to the manage vendors page
Then I should see the first 3 vendor names


0 commentaires

2
votes

Nous utilisons Python en fer intégré pour la formule de tarification dans l'un de nos projets. C'est ainsi qu'un réel échantillon sur la façon dont on dirait.

E_DOCUMENT_CHECK = DCPAV * ADS_NUM
E_SPECIFIC_TAX = STV
E_RESOURCE_DEV = RDV
E_LP_ISSUANCE = LPIV
E_ANNUAL_FEES = APFCV * SA * SIDES_NUM
E_SERVICE_FEES= MAX(
MINSFV,
E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES)
TOTAL= E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES+E_SERVICE_FEES


2 commentaires

Cela a l'air vraiment génial. Comment avez-vous pu rendre la fonction max () si originaire du script? Mon problème est maintenant que je ne veux pas de classes de style .net partout. Chaque exemple ressemble à Someclass.max () et je veux juste que vous avez des scripts de base comme vous ...


Si vous voyez ce commentaire, vous pourriez peut-être apporter une réponse à ma nouvelle question / une question connexe à Stackoverflow.com/questions/1348188/...




0
votes

ironRuby est le plus puissant pour la création de langues spécifiques à un domaine, car sa syntaxe est beaucoup plus souple et pardonnant que celle de Python (vos utilisateurs vont visser la blancheur et être ennuyé par les méthodes obligatoires () d'appeler des méthodes). Vous pouvez écrire votre exemple de script dans ironRuby et il ressemblerait à ceci: p> xxx pré>

Voici un échantillon d'un DSL Nos testers utilisent actuellement pour écrire des tests automatisés contre notre interface utilisateur P>

window = find_window_on_desktop "OurApplication"
logon_button = window.find "Logon"
logon_button.click

list = window.find "ItemList"
list.should have(0).rows

add_button = window.find "Add new item"
add_button.click
list.should have(1).rows


1 commentaires

Merci d'avoir répondu. J'ai personnellement voulu partir avec ironRuby (pour la syntaxe gratuite du support), mais la maturité d'Ironpython gagnait à la fin. Les deux sont vraiment excellentes options, mais je viens de courir dans plus de problèmes avec irruby lors de ma phase de test initiale.



0
votes

L'ironie pourrait aussi être un bon candidat ici. Voici un exemple qui crée une animation pour l'image donnée à la volée.

Set camera size: 400 by 300 pixels.
Set camera position: 100, 100.
Move 200 pixels right.
Move 100 pixels up.
Move 250 pixels left.
Move 50 pixels down.


0 commentaires