12

組み込みファームウェアのシステム レベル テストを行う C# プログラム用のスクリプト インターフェイスを構築する必要があります。

私のアプリケーションには、デバイスと完全にやり取りするためのライブラリが含まれています。アクションの開始、出力の取得、および成功/失敗の追跡のための個別のライブラリがあります。私のアプリケーションには、複数のデバイスを管理し、実行する多くのスクリプトを割り当てるための GUI もあります。

テスト担当者 (プログラマーではなく、技術者) には、テスト用のさまざまなシナリオを考え出し、それらを実行できるようにするスクリプト インターフェイスを提供する必要があります。彼らは私の API を呼び出すだけで、結果を私のプログラムに返します (合格/不合格とメッセージ)。

私が欲しいものの非常に基本的な例:

TURN_POWER_ON
TUNE_FREQUENCY frequency
WAIT 5
IF GET_FREQUENCY == frequency
  REPORT_PASS "Successfully tuned to " + frequency
ELSE
  REPORT_FAIL "Failed to tune to " + frequency
ENDIF
TURN_POWER_OFF

レポート、電力、および周波数関数が C# ライブラリによって提供される場所。

IronRuby や IronPython のようなものがこれに適していますか? それとも、独自の非常に基本的な言語を構築する必要がありますか?

大量の .NET コンパイル済みアセンブリをインクルードしようとすると、Ruby/Python コードが乱雑になりますか? プログラマーでなくても、プログラマーでも習得しやすく、コーディングしやすいものにしたいと考えています。

編集:

すべてのすばらしい応答に感謝します。最も多くのサポートがあったため、IronPython を回答として選択しましたが、IronPython、Boo、および IronRuby のそれぞれについて少し時間をかけて、テスターがスクリプトを作成することを好むかどうかを確認します。

4

9 に答える 9

16

まさにこのタイプのシナリオについて、IronPython について非常に良いことを聞いたことがあります。私は確かに、それがどのように機能するかを確認するために、簡単な概念実証に数時間を費やす危険を冒します.

Michael Foordは、同様のケースでの IronPython の成功について喜んで叙情的に語ります (最も具体的には、スプレッドシートに精通したユーザーに対して) 。

于 2009-08-24T21:42:56.517 に答える
10

Booは、CLR で実行されるもう 1 つのマネージ言語であり、DSL を構築してアプリケーションをスクリプト可能にするのに特に適しています。

コンパイル パイプラインは、言語自体から直接拡張できます。

Boo Manifestoについて詳しく知りたい場合は、まずBoo Manifestoを読むことをお勧めします。

[編集] Ayende Rahienがトピックに関する完全な本を書いていることを忘れていました: Building Domain Specific Languages in Boo

于 2009-08-24T21:54:51.343 に答える
4

この種のタスクには PowerShell を検討する価値があるかもしれません。これは、任意の DLR 言語と同様に .Net を呼び出すことができ、コマンドレット (コマンドレット) の概念でタスクのより自然な言語型のチャンクを備えています。v1 ではコンパイル済み言語でコマンドレットを作成する必要があります。v2 は Win7 からロールアウトされ、今後数か月のうちに古いリリースに対応します (Vista/Win2k8 の v2 は現在 RC です)。これらをビルドできます。 PowerShell で直接。

于 2009-08-24T21:58:24.583 に答える
2

目的のDSLから、IronRubyでCUCUMBERを使用することをお勧めします。

Cucumberを使用すると、テスターは次のようなテストを作成します。

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

この言語をあなたのニーズに合わせるのはとても簡単です。「CucumberandIronRuby」をグーグルで検索すると、開始するためのガイドやブログ投稿がいくつか見つかります。

于 2009-08-25T03:55:21.970 に答える
2

一般的な概念がドメイン固有言語であることは言及する価値がありますが、Marc G に同意します。IronRuby/IronPython は厳密にはドメイン固有ではありませんが、完全な機能を備えているため、実装を続ける必要があります。

Visual Studio には DSL ツールがあり、調べることができる 'M' Grammar のものがあります。

しかし、そうです、IronPython.

于 2009-08-24T21:54:20.317 に答える
2

プロジェクトの 1 つで、組み込みの Iron Python を価格計算式に使用しています。これは、どのように見えるかについての実際のサンプルです。

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

実装は本当に簡単です。たとえば、Max() 関数は、IronPython エンジンにインポートするカスタム C# メソッドの 1 つにすぎず、構成設定で使用するのが自然に見えます。

于 2009-08-26T20:05:13.837 に答える
0

CrowsProgramming - Runtime Scripting in .Net で説明されているように、C# 自体をスクリプト言語として使用することもできます。

于 2009-10-01T15:19:57.097 に答える
0

皮肉もここで良い候補になる可能性があります. これは、指定された画像のアニメーションをオンザフライで作成する例です。

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.

このような DSL を作成するためのチュートリアルはこちら:初めてのドメイン固有言語を書く

これは古いチュートリアルですが、著者はまだここにライブラリを維持しています: Github Irony

于 2019-03-05T09:44:29.337 に答える
0

IronRuby は、ドメイン固有の言語を作成するのに最も強力です。その構文は、Python の構文よりもはるかに柔軟で寛容です (ユーザーは空白を台無しにして、メソッドを呼び出すために必須の () に悩まされるでしょう)。

サンプル スクリプトを IronRuby で作成すると、次のようになります。

TURN_POWER_ON
TUNE_FREQUENCY frequency
WAIT 5
if GET_FREQUENCY == frequency
  REPORT_PASS "Successfully tuned to " + frequency
else
  REPORT_FAIL "Failed to tune to " + frequency
end
TURN_POWER_OFF

これは、テスターが UI に対して自動化されたテストを作成するために現在使用している DSL のサンプルです。

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

ただし、現状では、IronPython は IronRuby よりもはるかに成熟しており、パフォーマンスがはるかに優れているため、IronRuby を使用することをお勧めします。

独自のカスタム言語を作成するよりも、IronPython または IronRuby を使用することを強くお勧めします...想像を絶する量の労力 (およびバグ) を節約できます。

于 2009-11-03T22:46:00.473 に答える