メインコンテンツまでスキップ

「技術コラム」タグの記事が4件あります

全てのタグを見る

· 約15分
山路 厚

はじめに

ソフトウェア現場改善エバンジェリスト&デザインDXエバンジェリストの山路です。

これまで本ブログでは、Next Designの機能やTIPSなどをご紹介してきましたが、 今回は趣向を変えて、Next Designのコンセプトである設計情報のDX化をテーマに全2回のコラムをお届けします。 以下の内容を予定しておりますのでご期待ください。

  • 第1回:なぜメタモデルなのか?
  • 第2回:エンジニアリングプロセスの共通化

それでは早速「なぜメタモデルなのか?」をテーマに記事を始めます。 Next Designでは、メタモデル言語を使用して設計情報を定義します。 そして、「メタモデルを使って設計情報を定義することが難しい」というお話をよく耳にします。 そもそも、なぜ、メタモデルなのでしょうか? 「メタモデル方式は、きっと良いのだろう」と直感的に捉えていましたが、説明が上手くできませんでした。 デジタルペーパー中心の開発方式が抱える問題に取り組む中で、「なぜ、メタモデルなのか?」につながる知見を得られたのでご紹介します。

info

本記事は、ソフトウェアプロセス改善カンファレンス2024(日本SPIコンソ―シム主催)で発表した経験報告をもとに、記事としてまとめた内容となります。詳細は、発表資料をご覧ください。

デジタルペーパー中心の開発の何が問題か

大規模開発

クラウドやIoT技術の普及により、ソフトウェア開発の大規模化が急激に進み、従来のデジタルペーパー中心の開発方式では対応できずに大炎上・大混乱に陥るプロジェクトが多くなっています。 また、開発規模が大きくなればなるほど、人やチーム間の役割を明確にし、情報の共有をはかる必要性が高まり、ますます開発文書の重要度が高まっています。

つまらない問題

しかしながら、文書の不備に起因する“つまらない問題”が開発現場では多発しています。 “つまらない問題”とは、記述の不整合や記述不足などによる「エンジニア間の認識違い」が引き起こす問題です。 複雑なアルゴリズムが潜んでいるような技術難易度が高い問題ではなく、思い込みや勘違いによるちょっとした認識のずれから発生する問題です。 これらの問題に対し、私達は長年にわたり改善を行ってきました。 いわゆる、プロセス改善です。ルールや規定を作り、チェック作業やチェックツールを投入するなどの改善を実施してきました。 しかし、改善はされるものの新たな文書記述の問題が発生する、または、同じような問題が再発することもあります。 そもそも、本質的とは思えない問題に、工数やお金を投入していることに「何かがおかしいのでは。。。」という違和感を抱いていました。

記述が重複する

つまらない問題は、様々な要因によって引き起こされます。ここでは、文書記述の“重複”によって引き起こされる問題に着目して問題の本質を掘り下げます。多くの開発現場で起きている、身近な問題です。 開発文書間や開発文書内で、重複する記述は多々あります。重複する記述の例として、記述する設計情報の名称をイメージすると、ピンとくると思います。 記述の重複が出現する主な場面は、以下の通りです。

  • 設計のブレイクダウン

設計は段階的に詳細化します(ブレイクダウン)。 設計内容をブレイクダウンする際、上位設計書で使用した記述を下位設計書で使用します。 「概要」から「詳細」のように設計をブレイクダウンする際に、同じ名称を使って記述します。 このようなブレイクダウンは、文書間や文書内で何度も繰り返すので、重複はどんどん増えていきます。

  • 多様な関心事

説明の目的や関心事に合わせて、様々な見た目で設計情報を記述します。 他の箇所で記述した設計情報を使って、目的に合うように記述します。 年々、機能安全など新たな説明要求が加わり、重複する設計情報の記述が増加しています。

重複が起点となり不整合を引き起こす

重複した記述が多ければ多いほど、設計情報の不整合が起こりやすくなります。 特に、変化が激しい開発や大規模開発では、記述内容のメンテナンスが追いつかず、発生頻度が高まります。 その結果、エンジニア間の認識がずれる原因となり、“つまらない問題”が多発するのではないでしょうか。 また、重複する構造は、設計情報間のつながりが不明確となりやすく、エンジニアの理解の障壁となります。 さらに、つながりの分かりにくさは、情報の欠落の原因にもなります。 これらのことが重なって、“つまらない問題”を引き起こすのです。

デジタルペーパー方式の表現の限界

それでは、なぜ、重複となるのでしょうか。 設計には、様々な関心事があり、設計情報間の関係も多岐に渡ります。 そして、関心事ごとに合った表現方法がそれぞれにあります。 それぞれの表現(以降、“特定の見た目”と記載する)によって、個別に記述するため、同じ設計情報を何度も使用することになります。 ここに、デジタルペーパー方式の表現の限界があります。 なぜなら、デジタルペーパーは2次元空間を扱う方式であり、かつ、空間にも限度があるため、一度に表現できることが限られます。 関心事に合った説明を行うには、特定の見た目を使って個々に記述せざるを得ず、どうしても設計情報が重複してしまいます。

設計書の記述方式に対する気づき

「何を」を、特定の見た目「どうやって」で定義している

デジタルペーパー方式の問題点について考える過程で以下の点に気づきました。 設計では、「何をするか」を定めて文書として記述します。 そして、文書の記述は、関心事に合った特定の見た目を用いて、個別に行います。言い換えれば、「何を」を特定の見た目、つまり、「どうやってするか」を使って定義することになります。 ここに違和感があり、問題の本質があると考えています(内在する問題構造)。 「何を」を定義するのに、特定の見た目の影響を受けてしまう方式、これがデジタルペーパーによる従来の記述方式です。

特定の見た目には、それぞれの制約があり同時に定義できることが限られます。 つまり、見た目で表現できることしか定義できないのです。 それゆえに、関心事に合わせた見た目を別々に作成することになり、その結果、記述が重複してしまいます。

この問題を解決するには、見た目に影響を受けない記述方式が必要となります。

どんな記述方式がいいのか

見た目の影響を受けない方式 “セマンティック技術”

セマンティック技術とは、「情報の意味をコンピュータが理解できる形に表現し、コンピュータに処理を行わせる技術」です。 つまり、人間が理解するために必要となる見た目を持たずに、設計情報をコンピュータが理解できる形で表現する技術です。 意味的に表現することで、複数の関係性や関心事を同時に扱うことが可能となります。 加えて、コンピュータが解釈できるので、デジタル検証に代表されるデジタル化の恩恵が得られます。 そして、実現にはメタモデル言語を使用します。

メタモデルによるデータとビューの分離

Next Designでは、「何を」という設計情報の定義と「どうやってするか」という見た目(ビュー)の定義を分離する方式を採用しています。 そして、「何を」を定義するためにメタモデル言語を使用します。

見た目を分離して定義するため、見た目の影響を受けない設計情報の定義が可能となりました。 見た目の解釈はコンピュータが担当し、エンジニアは「何をするか」という本質的な設計課題に取り組みます。 今まで特定の見た目という個別の断面で定義していた設計情報を、全体の関心事を俯瞰して定義することになります。 同時に扱う関係性が増えるので慣れるまでは戸惑いますが、「何を設計するのか」という設計の本質に立ち戻ることになり、エンジニアとしての設計の理解が深まることが期待できそうです。

まとめ

従来のデジタルペーパー中心の開発方式には、内在する問題構造があることに気づきました。

【問題構造】 「何を」を特定の見た目「どうやって」で定義している。 見た目の影響や制約を受けてしまう方式なので、設計情報の定義が不十分となりやすい。

【問題構造】 「何を」を特定の見た目「どうやって」で定義している

見た目の影響や制約を受けてしまう方式なので、設計情報の定義が不十分となりやすい。

メタモデルは、上記の問題構造を解決する方式を提供しています。 具体的には、「何を」という設計情報の定義をメタモデルで行うことで、設計情報の定義と「どうやってするか」という見た目(ビュー)の定義を分離する方式です。 分離することで十分な設計情報の定義が可能となります。メタモデルを使って、設計する内容を熟考し定義しましょう。

さて、「なぜ、メタモデルなのか?」の答えに近づけたでしょうか。

· 約10分
田島 慶一

はじめに

Next Design カスタマーサクセスチームの田島です。

Next Design を使い始めるには、対象プロジェクトに合わせたメタモデル(設計情報の構造)を定義する必要があります。 その際、開発現場のやり方を踏襲しようと、既存の設計書を参考にメタモデルを定義することも多いのではないでしょうか。 しかし、既存設計書の「見た目」(見出し構成や記載内容)に囚われてメタモデルに落とし込んでしまうと失敗することがあります。

今回はメタモデルを定義する際にやってしまいがちなアンチパターンの1つについて、具体例を交えてご紹介しようと思います。

想定読者
  • 既存の設計書等を参考にメタモデル定義をはじめようとする方
  • プロファイル(メタモデルとビュー)の定義や改変を行う方

アンチパターン

  • 既存設計書の「見た目」をそのままメタモデルに落とし込む

Next Design のコンセプトの一つとして、開発現場の設計対象や表現方法に合わせた専用の設計ツールにカスタマイズできるという特長があります(リンク:製品コンセプト)。そのアプローチとして、既存設計書の「見た目」=見出し構成や記載内容に倣ってメタモデルを定義すれば、Next Design 上でも既存の設計書と同様の「見た目」で設計できるようになります。

次の例を見てみましょう。 左側が既存設計書の見出し構成です。右側が Next Design でそれ同等の構造をメタモデルで定義してモデル化した例です。 既存設計書の見出し構成と同じモデルの階層構造になっており、見た目は期待通りの結果になっています。

アンチパターン

既存設計書の見出し構成とメタモデルの該当箇所を突き合せて見てみましょう。

アンチパターン

既存設計書の見出しに出ている「SW構成図」や「コンポーネント一覧」も設計情報の一部として捉え、メタモデルにも定義されています。もちろん、これらの「図」や「一覧」も設計書に記載すべき情報であることは間違いありません。 ですが、これらの「図」や「一覧」は本来設計すべき情報なのでしょうか。このアンチパターンによる問題点を見ていきましょう。

問題点

  • 本来1つであるべき設計情報が複数存在しており、設計情報として一元化されていない。

Next Design 導入のメリットの一つとして、設計情報の一元化が挙げられます。ですが、それもメタモデル次第です。適切なメタモデルでなければ一元化されません。

先の例では、既存設計書の見出し構成と同等の構造を Next Design でモデル化できていますが、本来1つであるべき「車速偏差」モデルが3つ存在しています。 これはその設計情報を入れる箱である「コンポーネント」クラスがメタモデル中に3つ存在しているためです。

問題点1

この状態では、「SW構成図」のビュー上で「車速偏差」モデルの名前(設計情報の一部)を変更しても、「コンポーネント一覧」の配下にある「車速偏差」モデルの名前と「コンポーネント仕様」の配下にある「車速偏差」モデルの名前は変更されません。結果として、同じ名前であるべき3つの箇所で名前が整合していない状態となってしまいます。これこそが、設計情報が一元化されていない状態です。

解決策

  • 「見た目」ではなく「何を設計するか」の観点でメタモデルを定義する
  • 「見た目」はメタモデルではなくビュー定義で表現する

Next Design では、まず「設計すべき情報」をメタモデルで定義してから、その「見た目」をビュー定義で定義します(リンク:メタモデルビュー定義)。 その際に、既存文書の見出し構成や記載内容を参考に「設計すべき情報」を抽出してメタモデルを定義することは間違いではありません。ですが「見た目」に囚われず「何を設計するか」という観点で「設計すべき情報」と「見た目」を区別することが必要です。 既存設計書に記載されている「図」や「一覧」は「見た目」こそ違いますが、その中身は同じ設計情報を表しています。このような「見た目」=表現方法の違いはメタモデルではなくビュー定義として定義します。

先の例をもう一度見てみましょう。 「SW構成図」と「コンポーネント一覧」、「コンポーネント仕様」には、APPなどの「レイヤ」と車速偏差などの「コンポーネント」がそれぞれ記載されていますが、いずれも同じ設計情報です。ここでの「設計すべき情報」は「レイヤ」と「コンポーネント」です。それらはメタモデルで定義します。 そして、「SW構成図」と「コンポーネント一覧」の中身は「コンポーネント仕様」と同じで「見た目」が違うだけです。そのため「SW構成図」と「コンポーネント一覧」はビュー定義として定義します。

上記アプローチで定義しなおしたメタモデルの例を以下に示します。

解決策のメタモデル例

このメタモデルでは「SW構成図」と「コンポーネント一覧」がなくなり、複数あった「レイヤ」と「コンポーネント」が「SW構造設計」の配下にそれぞれ1つだけ定義されています。

このメタモデルを用いて設計した Next Design のモデルの例を以下に示します。

解決策のモデル例

左のツリー上で「車速偏差」モデルが1つになっており、「SW構成図」と「コンポーネント一覧」の両方に「車速偏差」モデルが表示されています。この状態からいずれかのビューで「車速偏差」の名前を変更すれば「SW構成図」と「コンポーネント一覧」の両方のビューに反映されます。

このように「設計すべき情報」と「見た目」を区別してメタモデルとビュー定義を定義することで、同一であるべき設計情報が1つのモデルに一元化され、設計書内での不整合がなくなります。

まとめ

今回ご紹介したアンチパターンとその解決策を要約すると次の通りです。

  • 「見た目」に寄せてメタモデルを定義してしまうと設計情報が一元化されないことがある。
  • 「見た目」ではなく「何を設計すべきか」の観点でメタモデルを定義する。
  • 「見た目」はビュー定義で定義する。

この他にもメタモデル定義に関するHow-Toを次のページで公開しています。

Next Design を90日間無料でお試しいただける評価版もご用意しております。ぜひこちらからお申し込みください。

· 約8分
田島 慶一

はじめに

Next Design カスタマーサクセスチームの田島です。

Next Desgin に興味を持たれた方々の中には、「設計情報をデジタル化する嬉しさはわかった。けれど、それを活用するための手段となるエクステンション開発は難しそう。」と尻込みしている方も多いのではないでしょう。今回はそんな方に向けて、エクステンション開発が意外と簡単にできてしまうことを、具体例を交えてご紹介しようと思います。

よくある作業

テスト設計の場面で仕様通りに動作することを確認するような定型的なテストケースを作成することはよくあると思います。一例としてGUIアプリケーション開発の場合を考えてみましょう。

次のようにアプリケーションのUI仕様としてボタン操作に対する動作が定義されています。

画面イメージ

ログイン画面イメージ

操作仕様

画面要素操作動作
ログインボタン押下アカウント認証を行い認証されればスタートアップ画面が表示される。
キャンセルボタン押下画面を閉じてアプリケーションを終了する。

これに対するテスト設計では、ボタン操作による動作結果が仕様通りかを確認するために、テストケースを機械的に作成することがあるでしょう。 Next Design では、テスト設計の入力であるUI仕様がモデル化されておりAPIで操作できます。そのため定型的なテストケースを機械的に作成する作業は簡単に自動化できます。 そのようなエクステンションの具体例をメタモデルと対応づけて紹介します。

メタモデル

次の図は先のUI仕様とテスト仕様を表すメタモデルの例です。

メタモデル

画面要素を操作時の動作を表す [操作仕様] と、その仕様を確認するための [テストテストケース] があり、それらが導出関連で結ばれています。

エクステンション

実装方法

エクステンションの処理は Next Design 標準搭載のスクリプトエディタで作成・実行しながら実装できます。 拡張コンテンツとしてプレビュー公開している ”ScriptEditor”(標準搭載のスクリプトエディタの機能強化版)を利用すれば、強力なインテリセンス機能でAPIも簡単に見つけられます。

ScriptEditor

処理の流れ

次の流れで操作仕様からテストケースを自動作成します。

  1. UI仕様からUI部品の操作仕様を抽出します。
  2. 操作仕様に基づいてテストケースを作成します。
  3. 操作仕様とテストケース間にトレース関連を結びます。

実装コード

ここでは API の使い方を掴んでもらえるよう、実装コードの一部をピックアップして説明します。
実装コードの全体は こちら からご参照ください。

操作仕様の抽出

まずは、UI画面モデルの中からテストケース作成の入力となる操作仕様モデルを特定します。それには、操作仕様モデルを表すモデルのクラス名: OperationSpec を条件に、API : IModel.FindChildrenByClass() メソッドを使用して該当モデルを抽出します。

// UI画面の中からUI部品の操作仕様を抽出します。
var operationModels = uiWindow.FindChildrenByClass("OperationSpec", recursive: true);
...

テストケースの作成

次に、抽出した操作仕様モデルに対するテストケースモデルを新規追加します。それには、API : IModel.AddNewModel() メソッドを使用します。AddNewModel() メソッドの第1引数にはテストケースモデルを保持する「テストケース」フィールドのフィールド名:TestCases を、第2引数にはテストケースモデルのクラス名:TestCase を指定します。

新規追加されたモデルは名前も未設定の初期状態のため、API : IModel.SetField() メソッドを使用して名前を設定します。SetField() メソッドの第1引数には「名前」フィールドのフィールド名:Name を、第2引数にはそのフィールドに設定する値を指定します。
同様に、テストケースの期待値も SetField() メソッドを使用して設定します。

// 操作仕様に対応したテストケースを作成します。
var testCaseModel = testGroupModel.AddNewModel("TestCases", "TestCase");
...
testCaseModel.SetField("Name", testCaseLabel);
testCaseModel.SetField("ExpectedValue", expectedValue);

操作仕様とテストケースの関連付け

そして、操作仕様モデルとテストケースモデル間のトレーサビリティを確保するために、入力となっている操作仕様モデルと自動作成したテストケースモデルを関連付けます。前述のメタモデルを見てみると、操作仕様クラスとテストケースクラスの間には導出関連が定義されています。テストケースクラス側からは「操作仕様」フィールドのフィールド名:input_OperationSpec でその関連を辿ることができます。

メタモデルのクラス間で関連性が定義済みのモデルを互いに関連付けるには、API : IModel.Relate() メソッドを使用します。Relate() メソッドの第1引数にはテストケースクラスの「操作仕様」フィールドのフィールド名:input_OperationSpec を、第2引数には関連付ける相手先の操作仕様モデルを指定します。

// 操作仕様とテストケース間にトレース関連(導出関連)を結びます。
testCaseModel.Relate("input_OperationSpec", operationModel);

実行結果

UI画面中の操作仕様に対して定型的なテストケースが漏れなく自動作成されます。
操作仕様とテストケース間の関連(トレース情報)もエクステンションで追加されます。

<実行前>

入力となったUI仕様

<実行後>

自動生成されたテストケース

まとめ

今回はエクステンション開発のイメージを掴んでもらうために、具体例としてテストケースの自動作成を取り上げてご紹介しました。 Next Design で提供されている豊富なAPIを利用すれば、エクステンションによる既存資産のインポートや現場固有のルールに沿った整合チェックなども実現できます。

エクステンション開発のチュートリアルやAPI利用の How To などを掲載したエクステンション開発マニュアルも公開しております。エクステンション開発の詳細についてはそれらをご参照ください。
Next Design を90日間無料でお試しいただける評価版もご用意しております。ぜひこちらからお申し込みください。

· 約8分
平田 昌宏
前提知識
  • メタモデリング

はじめに

Next Design サポートチームの平田です。

さて、突然ですが、トレーサビリティ情報って効果的に使えていますか自信を持って使えていると言える方は、なかなか多くないのではないでしょうか。

ここでは、Next Design のトレーサビリティに対する考え方を、主な効果の1つであるトレーサビリティ情報を利用した設計変更点の影響範囲の特定について、例を交えてご紹介します。

トレーサビリティについての現状

ソフトウェア開発におけるトレーサビリティは、システムやソフトウェアの設計・開発過程を可視化し、品質を保証するためのものです。 ソフトウェアが大規模・複雑化している昨今、品質確保のためにトレーサビリティの重要性はより大きくなっています。

トレーサビリティの主な効果として次の3つが挙げられます。

  1. 設計・検証の抜け漏れ確認による不具合予防
  2. 設計変更や不具合改修時の影響範囲特定
  3. 安全に対する説明責任履行

いずれも開発者にメリットがある効果ばかりですが、実際の開発現場では次のようなアンチパターンが起こっていることがしばしばあります。

  • トレースのために設計 +α の工数を要するため、トレース自体がされていない(後回しになっている)
  • 多数の成果物を跨いでトレース情報を集める必要があり、影響範囲が見える化できずに利用が上手くできない

アンチパターン解消へのアプローチ

Next Design では、ツールの持つ特性や、開発した機能から、前述のアンチパターンを解消するために次のようにアプローチしています。

  • トレースのために設計 +α の工数を要するため、トレース自体がされていない(後回しになっている)

Next Design のコンセプトの一つに、設計のデジタル化とデータの一元管理があります。 そこで、一元化した設計データ間で簡単に関連を結べるようにすることで、1つ目のアンチパターンの解消を試みています。

  • 多数の成果物を跨いでトレース情報を集める必要があり、影響範囲が見える化されず、利用が上手くできない

Next Design のコンセプトの一つに、1つの設計情報に対して複数のビューを切り替えて設定でき、用途に応じて表示できるというものがあります。 そこで、関連を一覧視可能なビューを提供することで、2つ目のアンチパターンの解消を試みています。

以降、解決方法を Next Design の実際の操作を交えて、紹介していきます。

一元化した設計データ間で簡単に関連を結べるようにする

Next Design では、設計情報のデジタル化のために、設計データの構造をメタモデリングします。 設計要素に対して関連を引けるようにメタモデリングすることで、設計要素間にトレース関係を結べるようになります。

メタモデル

まず、メタモデルとして設計要素を定義して要素間に関連(トレース関係)を定義します。
実際の操作は、次の通りです。

メタモデル

次に、このメタモデルを基にインスタンスとなるモデルを作成してトレース関係を追加します。
実際の操作では、トレース元とトレース先のモデルを、それぞれビューに表示して、トレース元からトレース先へドラッグ&ドロップすることで、モデルの作成とともにトレースが取れます。

トレース

ご覧いただいたように設計とトレース設定の操作が一体となっているので、コストを理由としたトレースの不足(後回し)というアンチパターンは解消できます。

関連を一覧視可能なビューを提供する

上記で設定したトレース関係の見える化のために、専用のトレースビューを提供しています。 次のように、ツリー形式やマトリクス形式での表示ができます。

トレースビュー

また、ツリー形式ではトレース関係のある要素を複数並べることで、要求とテストなど設計を介して間接的にトレースされている要素まで見れるようになっています。

間接トレース

こちらについても、ご覧いただいたようなトレースが見える化され、影響範囲の特定が容易なため、利用が上手くできないといった2つ目のアンチパターンも解消できます。

まとめ

Next Design のトレーサビリティに対する考え方を、「設計変更点の影響範囲の特定」というユースケースを交えてご紹介させていただきました。 開発チームでもご紹介の方法でトレースを取ることで、設計変更の影響範囲だけでなく入出力情報の確認などに利用しています。

既にご利用の方は、本機能についても是非お試しください。
また、本内容についてより詳細なセミナーなども開催しております。ご要望の際は お問い合わせフォーム からご連絡ください。

未利用の方でご興味を持たれた方は、こちら から評価版ソフトのお申し込みもできますので、お気軽にお問い合わせください。