MPS 2020.1 ヘルプ

要求追跡言語

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

  • 異なる言語のノードに注釈を付けるノード属性

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

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

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

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

mps welcome

目的

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

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

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

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

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

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

image2018 9 12 11 23 3

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

image2018 9 12 11 24 43

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

image2018 9 12 11 31 47

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

image2018 9 12 11 42 16

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

image2018 9 12 11 32 57

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

image2018 9 12 11 35 26

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

image2018 9 12 11 27 42

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

主なハイライト

  • 仕様は MPS で書かれているため、それらはうまく構造化されていてコードから参照可能です。それらはプレーンテキスト文書に生成することができます。追加のジェネレーターが提供されている場合は、仕様を PDF または他のテキスト形式に生成できます。

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

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

image2018 9 12 11 49 58

プロジェクト構造

image2018 9 12 11 51 33

  • RequirementDefinitions 言語を使用すると、ユーザーは MPS で要件 / 仕様を記述できます。: その言語で定義された単純な TextGen は、要件を含むプレーンテキストファイルを生成する

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

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

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

要件定義言語

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

image2018 9 13 13 17 40

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

指定ソリューション

image2018 9 12 12 8 47

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

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

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

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

image2018 9 12 12 11 45

各文書には要件項目の集まりが含まれており、各項目には名前説明、およびオプションの参照 ID があります。

image2018 9 12 12 13 31

仕様モデルは少なくとも 2 つの言語をインポートする必要があります - jetbrains.mps.samples.requirementTracking.RequirementDefinition および jetbrains.mps.lang.text

image2018 9 12 12 18 35

ProjectCode ソリューション

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

image2018 9 12 12 24 52

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

image2018 9 12 12 26 43

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

image2018 9 12 12 29 44

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

image2018 9 12 12 30 54

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

image2018 9 12 12 33 32

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

image2018 9 12 12 34 18

言語をトレースする

トレース言語は仕様とコードを結び付けます。これには 2 つの概念があります。

  • RequirementEntryReference - 単一の要件文書エントリへのスマート参照

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

image2018 9 12 12 14 24

RequirementTrace コンセプトのヘッダは以下を定義する

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

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

  • 帰属概念:BaseConcept - BaseConcept に適用できます

image2018 9 12 12 40 37

RequirementTrace には 2 つのエディターがあります。

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

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

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

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

image2018 9 13 13 16 55