MPS 2023.3 ヘルプ

要求追跡言語

このクックブックでは、要件追跡サンプルプロジェクトについて説明します。このサンプルプロジェクトは、言語にとらわれない要求追跡を実装しています。その過程で、いくつかの便利な言語構成要素が例示されています。

  • 異なる言語のノードにアノテーションを付けるノード属性

  • コンセプトごとの複数のエディター(プレゼンテーション)とエディターヒントによるそれらの切り替え

  • 選択されたエディターへのプログラムによるアクセスヒントとエディターのプログラムによる選択

  • 参照のコレクションでの繰り返しを避けるための参照スコープ

要件追跡サンプルプロジェクトは MPS にバンドルされているため、ホームディレクトリの他のサンプルプロジェクトの中にあります。

mps_welcome.png

目的

ソフトウェアの大部分と他のプロジェクトは、要件の収集から始まります。この段階で、クライアントは構築する必要があるシステムの望ましい機能を指定します。仕様は、実装段階で開発者が決定を導くために使用されます。通常、仕様は何らかの形のテキスト文書で書かれていますが、ソフトウェアはコードとして配布されています。この方法にはいくつかの制限があります。

  • どのコードがどの要件を実装しているかを追跡することは、エラーの可能性が高く、面倒な手作業になります。

  • 「どの要件が特定のコードを要求するか」や「コードのどこに特定の要件が実装されているか」などの質問に答えるのは、即座で自動化されていません。

  • ソフトウェアモジュールに対する個々の要件の影響の分析は簡単なことではありません。

  • 要件が変わると、影響を受けるすべてのコードをリストすることは信頼できません。

要件追跡サンプルは、要件追跡に対する考えられる自動化された解決策を示しています。これは、手動追跡のすべてのリストされた欠陥を処理します。

image2018-9-12-11-23-3.png

XML、Java、その他の MPS 言語を問わず、コードには要件トレース(その特定のコードで実装された要件の簡単な要約)でアノテーションが付けられています。要件トレースは、クラス、メソッド、ステートメントなど、任意の粒度レベルのノードに添付できます。

image2018-9-12-11-24-43.png

要求トレースは自由に追加、編集、削除することができます。

image2018-9-12-11-31-47.png

インテンションは要求トレースをノードに追加/削除するために利用されます。

image2018-9-12-11-42-16.png

MPS の外部のテキストエディターではなく、MPS で要件を記述するために特別に設計された言語を使用して要件が記述されているため、標準の宣言に移動 Ctrl+Space アクションは、エディターで参照された要件を開き、ユーザーは、要件の完全な説明にすばやく移動することができます。

image2018-9-12-11-32-57.png

特定の要件の使用箇所を表示 Alt+F7 は、コード内のすべての場所のリストを表示します。そこから、要件トレースで要件が参照されます。

image2018-9-12-11-35-26.png

要求トレースは、複数の射影 / エディターを処理するための標準 MPS メカニズムを介して表示または非表示にすることができます - エディターのヒント:

image2018-9-12-11-27-42.png

ShowTraces ヒントが選択されていない場合、要件トレースはユーザーに表示されません。

主なハイライト

  • 仕様は MPS で記述されているため、適切に構造化され、コードから参照できます。それらはプレーンテキストドキュメントに生成できます。追加のジェネレーターが提供されている場合、仕様は PDF またはその他のテキスト形式で生成できます。

  • 要求トレースは、仕様内の特定のエントリを参照し、参照されている要件エントリの概要を表示して、ナビゲーションを可能にします。

  • どの言語任意のノードにも要件トレースを添付することができます - BaseLanguage と XML は 2 つの言語の例ですが、Kaja のように DSL コードにもアノテーションを付けることができます。

image2018-9-12-11-49-58.png

プロジェクト構造

image2018-9-12-11-51-33.png
  • RequirementDefinitions 言語により、ユーザーは MPS で要件 / 仕様を書くことができます。その言語で定義された単純な TextGen は、要件を含むプレーンテキストファイルを生成します。

  • 仕様ソリューションは要求仕様の一例です。要件は、それぞれの関連サブシステムによってモデルに編成されています。

  • ProjectCode ソリューションは、仕様ソリューションに含まれる仕様に準拠する必要があるプロジェクトの実際のコードをシミュレートします。コードは機能ごとにモデルに編成されています。各モデルは、仕様ソリューションから関連する仕様モデルをインポートします。Java と XML の両方のコードには、要件トレースがアノテーションとして付けられています。トレースは、ShowTraces エディターヒントがプッシュされた場合にのみ表示されます。インテンションを使用すると、追加のトレースを追加または削除できます。

  • トレース言語は、任意のノード (BaseConcept) にアタッチできる属性を定義します。属性は、要件仕様内の要件エントリへの参照を保持します。2 人のエディターが使用可能です。デフォルトの 2 人のエディターは元のコードのみを表示し、"ShowTraces "はコードの横に要件トレースを表示します。" プッシュヒント " を使用すると、2 つのエディターを切り替えることができます。インテンションは 、属性をノードにアタッチ / デタッチするために使用できます。RequirementTrace 属性がインテンションを介してノードに追加されるとき、"ShowTraces" エディターヒントがプログラムで選択されるため、ユーザーはコード内の要件トレースを即座に確認できます。複数のトレースは属性に指定できます。RequirementEntryReference のスコーピングは、ユーザーが同じ属性に対して特定のトレースを複数回入力できないようにします。

要件定義言語

この言語は、要求仕様を含む必要があるソリューションによってインポートされる必要があります。この言語では、エディターと textgen という 2 つの概念が導入されています。

image2018-9-13-13-17-40.png

エントリの概念では、jetbrains.mps.lang.text 言語を使用して、説明部分でのフリーテキスト編集を可能にします。オプションの参照 ID 値に対応するために、エントリに対してカスタムプレゼンテーションが定義されていますが、これは存在しない場合があります。

指定ソリューション

image2018-9-12-12-8-47.png

このソリューションは、RequirementDefinition 言語を使用して、架空のシステムの要件を定義します。要件は 2 つのモデルに分けられます。

  • coreRequirements - 将来のシステムのビジネスロジックを指定する

  • uiRequirements - アプリケーションのユーザーインターフェースを指定します

各モデル内で複数の仕様書を作成することができます。

image2018-9-12-12-11-45.png

各ドキュメントには、要件エントリのコレクションが含まれています。各エントリには、名前説明、およびオプションの参照 ID があります。

image2018-9-12-12-13-31.png

仕様モデルは、少なくとも 2 つの言語(jetbrains.mps.samples.requirementTracking.RequirementDefinitionjetbrains.mps.lang.text)をインポートする必要があります。

image2018-9-12-12-18-35.png

ProjectCode ソリューション

ProjectCode ソリューションには、システムの実際の実装が含まれています。プロジェクトは 3 つのモデルで構成されており、それぞれが仮想的にシステムの異なる部分を実装しています。

image2018-9-12-12-24-52.png

開発に使用される言語に加えて、モデルは要件トレースを定義するためにトレース言語をインポートする必要があります。

image2018-9-12-12-26-43.png

モデルの依存関係は、仕様ソリューションのモデルを保持する必要があり、その要件はモデル内のコードに関連しています。たとえば、永続性 モデルは coreRequirements に依存します。

image2018-9-12-12-29-44.png

ui モデルは uiRequirements に依存します。

image2018-9-12-12-30-54.png

これにより、要件トレースをコードに挿入できます。インテンションはノードにトレースを追加 / 削除するために利用可能です。

image2018-9-12-12-33-32.png

トレースは直接編集することができます。

image2018-9-12-12-34-18.png

言語をトレースする

Traces 言語は、仕様とコードを結び付けます。これには 2 つの概念が含まれています。

  • RequirementEntryReference- 単一の要件ドキュメントエントリへのスマートリファレンス

  • RequirementTrace- 任意のノード(BaseConcept)にアタッチでき、RequirementEntryReferences のコレクションを保持するノード属性。

image2018-9-12-12-14-24.png

RequirementTrace コンセプトのヘッダーは、次のことを定義します。

  • 複数: false - 属性の基数は 0..1 です (最大で 1 つのノードにアタッチできます)

  • role :requirements trace - コードから属性にアクセスするためには "node。@ requirements trace" が使われます

  • 起因する概念 :BaseConcept - それは BaseConcept に適用することができ

image2018-9-12-12-40-37.png

RequirementTrace は、次の 2 つのエディターを提供します。

  • デフォルトのエディターでは属性付きノードのみが表示されるため、要件トレースは表示されません。

  • ShowTraces エディターは、属性付きノードの隣にトレースを表示します。

ToggleRequirementTrace インテンションは、トレースを追加 / 削除するだけでなく、トレースが追加されたときに ShowTraces エディターヒントをアクティブにして、インテンションを呼び出す前でない場合にトレースが表示されるようにします。これは自然なユーザビリティ機能です。

RequirementEntryReference エディターは、カスタマイズされた Entry の表示を使用して、オプションで参照 ID を表示します。RequirementEntryReference は、同じ要件トレースからすでに参照されている要件を除外する方法でスコープを実装します。

image2018-9-13-13-16-55.png

関連ページ:

説明コメント

ノードに属性を追加する機能を活用する方法を学びます。この機能は、構造の章の属性のセクションで詳しく説明されています。このクックブックでは、電卓チュートリアル言語に簡単な追加機能を作成して、電卓定義の入力フィールドと出力フィールドに説明的なコメントを付けることができます。これらの説明コメントは、入力フィールドと出力フィールドに対応する Swing テキストフィールドに添付された「ポップアップツールチップ」の形式で、生成された Java コードに伝達されます。計算機の言語:実験のテストベッドとして...

ノードをコメントアウトする

MPS でノードをコメントアウトするための一般的なサポート:MPS は、モデル内のノードをコメントアウトする汎用的な方法を提供します。以前のバージョンでは、この機能は、ノード属性または専用のコメントノードのいずれかを使用して、すべての言語で個別に実装する必要がありました。MPS 3.3 以降、コメントアウトされたノードに関する情報は、一般的な方法でモデルに保存されます。smodel 言語は、デフォルトでコメントアウトされたノードを無視するため、クエリでコメントアウトされたノードを明示的に除外す...