(57)【要約】【課題】セキュリティ機能に関する実装の網羅性の向上と開発者の負担軽減を図ることを図ること。【解決手段】開発支援システム１００は、開発環境１０１と開発支援装置１０２とを有する。開発環境１０１では、開発者が開発対象となるソフトウェアを機能的に表現したユースケース定義１１１を作成する。また、開発支援装置１０２に対してユースケース定義１１１を与えることで、開発支援装置１０２からユースケース定義１１１に応じたクラス定義１１２を取得する。開発者は、クラス定義１１２を用いて開発対象となるソフトウェアの動作を表現したシーケンス定義１１３を作成する。開発環境１０１は、開発支援装置１０２に対してシーケンス定義１１３を与え、開発支援装置１０２からシーケンス定義１１３に応じたクラス定義を取得する。このクラス定義がソースコード雛型１１４である。【選択図】図１
2011086200.tif 000002
【特許請求の範囲】
【請求項１】
ユースケースに対するセキュリティ属性が規定された、開発対象の機能を表現したユースケース定義を取得する第１の取得工程と、
前記第１の取得工程によって取得されたユースケース定義に基づいて、前記ユースケースおよび前記セキュリティ属性をクラスに変換することにより、クラス定義を生成するクラス生成工程と、
前記クラス生成工程によって生成されたクラス定義内の前記クラスをオブジェクトに関連付けた前記開発対象の動作を示すシーケンス定義を取得する第２の取得工程と、
前記第２の取得工程によって取得されたシーケンス定義のうち前記クラスに関連するオブジェクトをクラス変換し、前記クラスに関連付けた前記セキュリティ属性を追加することにより、前記開発対象に関するプログラムに挿入されるソースコード雛型を生成するソースコード雛型生成工程と、
をコンピュータに実行させることを特徴とする開発支援プログラム。
【請求項２】
ユースケースに対するデータの方向を特定するフロー方向および前記データに対するセキュリティ属性が規定された、開発対象の機能を表現したユースケース定義を取得する第１の取得工程と、
前記第１の取得工程によって取得されたユースケース定義に基づいて、前記データおよび前記セキュリティ属性をクラスに変換することにより、クラス定義を生成するクラス生成工程と、
前記クラス生成工程によって生成されたクラス定義内の前記クラスをメッセージに関連付けた前記開発対象の動作を示すシーケンス定義を取得する第２の取得工程と、
前記第２の取得工程によって取得されたシーケンス定義内の前記クラスに関連するメッセージをメソッド変換し、前記クラスに関連付けた前記セキュリティ属性を追加することにより、前記開発対象に関するプログラムに挿入されるソースコード雛型を生成するソースコード雛型生成工程と、
をコンピュータに実行させることを特徴とする開発支援プログラム。
【請求項３】
ユースケースに対する第１のセキュリティ属性と前記ユースケースに対するデータの方向を特定するフロー方向および前記データに対する第２のセキュリティ属性とが規定された、開発対象の機能を表現したユースケース定義を取得する第１の取得工程と、
前記第１の取得工程によって取得されたユースケース定義に基づいて、前記ユースケースおよび前記第１のセキュリティ属性を第１のクラスに変換するとともに、前記データおよび前記第２のセキュリティ属性を第２のクラスに変換することにより、クラス定義を生成するクラス生成工程と、
前記クラス生成工程によって生成されたクラス定義のうち前記第１のクラスをオブジェクトに関連付け、前記第２のクラスをメッセージに関連付けた前記開発対象の動作を示すシーケンス定義を取得する第２の取得工程と、
前記第２の取得工程によって取得されたシーケンス定義のうち前記第１のクラスに関連するオブジェクトをクラス変換するとともに、前記第２のクラスに関連するメッセージをメソッド変換し、前記第１のクラスに関連付けた前記第１のセキュリティ属性および前記第２のクラスに関連付けた前記第２のセキュリティ属性を追加することにより、前記開発対象に関するプログラムに挿入されるソースコード雛型を生成するソースコード雛型生成工程と、
をコンピュータに実行させることを特徴とする開発支援プログラム。
【請求項４】
セキュリティ攻撃を示す脅威に対する対策を前記セキュリティ属性の種類に応じて実行する対策プログラムを前記対策ごとに記憶するデータベースの中から、前記ユースケース定義に含まれているセキュリティ属性に該当する対策プログラムを抽出する抽出工程を前記コンピュータに実行させることを特徴とする請求項１〜３のいずれか一つに記載の開発支援プログラム。
【請求項５】
前記開発対象に関するプログラム内で前記ソースコード雛型を挿入した処理を実行する際に、前記ソースコード雛型に規定されたセキュリティ属性に一致するセキュリティ属性を有する前記対策プログラムを実行する実行工程を前記コンピュータに実行させることを特徴とする請求項４に記載の開発支援プログラム。
【請求項６】
ユースケースに対するセキュリティ属性が規定された、開発対象の機能を表現したユースケース定義を取得する第１の取得手段と、
前記第１の取得手段によって取得されたユースケース定義に基づいて、前記ユースケースおよび前記セキュリティ属性をクラスに変換することにより、クラス定義を生成するクラス生成手段と、
前記クラス生成手段によって生成されたクラス定義内の前記クラスをオブジェクトに関連付けた前記開発対象の動作を示すシーケンス定義を取得する第２の取得手段と、
前記第２の取得手段によって取得されたシーケンス定義のうち前記クラスに関連するオブジェクトをクラス変換し、前記クラスに関連付けた前記セキュリティ属性を追加することにより、前記開発対象に関するプログラムに挿入されるソースコード雛型を生成するソースコード雛型生成手段と、
を備えることを特徴とする開発支援装置。
【請求項７】
第１の取得手段、クラス生成手段、第２の取得手段、およびソースコード雛型生成手段を備えるコンピュータが、
前記第１の取得手段により、ユースケースに対するセキュリティ属性が規定された、開発対象の機能を表現したユースケース定義を取得する第１の取得工程と、
前記クラス生成手段により、前記第１の取得工程によって取得されたユースケース定義に基づいて、前記ユースケースおよび前記セキュリティ属性をクラスに変換することにより、クラス定義を生成するクラス生成工程と、
前記第２の取得手段により、前記クラス生成工程によって生成されたクラス定義内の前記クラスをオブジェクトに関連付けた前記開発対象の動作を示すシーケンス定義を取得する第２の取得工程と、
前記ソースコード雛型生成手段により、前記第２の取得工程によって取得されたシーケンス定義のうち前記クラスに関連するオブジェクトをクラス変換し、前記クラスに関連付けた前記セキュリティ属性を追加することにより、前記開発対象に関するプログラムに挿入されるソースコード雛型を生成するソースコード雛型生成工程と、
を実行することを特徴とする開発支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、開発を支援する開発支援プログラム、開発支援装置、および開発支援方法に関する。
【背景技術】
【０００２】
従来のソフトウェア開発においては、開発者は自分が実現したい機能を主に想定して開発しているのが現状である。また、ソフトウェア開発においては各種ソフトウェア開発支援に関する技術が開示されている（たとえば、下記特許文献１〜３を参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１１０２７４号公報
【特許文献２】特開２００８−１１７０６６号公報
【特許文献３】特開２００９−１３４５３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来のソフトウェア開発においては、開発者は自分が実現したい機能を主に想定して開発するため、開発者が想定しないふるまいなどを考慮したセキュリティ機能の実装が困難であった。また、そのような実装をすることにより、開発者の負担が増大するという問題があった。
【０００５】
また、設計段階でソフトウェアの動作を確認するためのプロトタイプ（モックアップ）を一旦作成し、動作確認した上で、完成版の実装を行う開発はよく行われているが、設計工程など、コーディングが完了していない段階でのセキュリティ機能の実装は困難であった。
【０００６】
さらに、作り直す場合、セキュリティ機能の呼び出し処理も作りなおすことになり、開発者の負担が増大するという問題があった。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、セキュリティ機能に関する実装の網羅性の向上と開発者の負担軽減を図ることができる開発支援プログラム、開発支援装置、および開発支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、開示の開発支援プログラム、開発支援装置、および開発支援方法は、ユースケースに対するセキュリティ属性が規定された、開発対象の機能を表現したユースケース定義を取得し、取得されたユースケース定義に基づいて、前記ユースケースおよび前記セキュリティ属性をクラスに変換することにより、クラス定義を生成し、生成されたクラス定義内の前記クラスをオブジェクトに関連付けた前記開発対象の動作を示すシーケンス定義を取得し、取得されたシーケンス定義のうち前記クラスに関連するオブジェクトをクラス変換し、前記クラスに関連付けた前記セキュリティ属性を追加することにより、前記開発対象に関するプログラムに挿入されるソースコード雛型を生成することを要件とする。
【発明の効果】
【０００９】
上記の構成によれば、開発上流で作るユースケース定義やシーケンス定義においてソフトウェアが備えるべきセキュリティ属性を設定しておき、該セキュリティ属性に基づき、セキュリティ対策コードの呼び出し処理を適切な箇所に埋め込んだ「ソースコードの雛形」を生成することができる。そして、開発者はこのソースコード雛形に基づきプログラミングを行うことで、開発下流においてセキュリティ対策が失われることが無くなる。すなわち、本開発支援プログラム、開発支援装置、および開発支援方法によれば、セキュリティ機能に関する実装の網羅性の向上と開発者の負担軽減を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態にかかる開発支援システムのシステム構成図である。
【図２】実施の形態にかかる開発環境や開発支援装置となるコンピュータのハードウェア構成を示すブロック図である。
【図３】脅威・対策ＤＢの記憶内容の一例を示す説明図である。
【図４】対策プログラムＤＢの記憶内容の一例を示す説明図である。
【図５】本実施の形態にかかるユースケース図の一例を示す説明図である。
【図６】図５に示したユースケース図に関するユースケース定義を示す説明図（その１）である。
【図７】図６に示したユースケース定義を表形式のデータ構造で表現した説明図（その１）である。
【図８】図６に示したユースケース定義を表形式のデータ構造で表現した説明図（その２）である。
【図９】図６に示したユースケース定義を表形式のデータ構造で表現した説明図（その３）である。
【図１０】図６に示したユースケース定義を表形式のデータ構造で表現した説明図（その４）である。
【図１１】クラス定義を表形式のデータ構造で表現した説明図である。
【図１２】図５のユースケース図の上半部に対応するシーケンス図である。
【図１３】図１２に示したシーケンス図に関するシーケンス定義を示す説明図である。
【図１４】図５のユースケース図の下半部に対応するシーケンス図である。
【図１５】図１４に示したシーケンス図に関するシーケンス定義を示す説明図である。
【図１６】図１３および図１５に示したシーケンス定義を表形式のデータ構造で表現した説明図（その１）である。
【図１７】図１３および図１５に示したシーケンス定義を表形式のデータ構造で表現した説明図（その２）である。
【図１８】脅威・対策定義の一例を示す説明図である。
【図１９】対策プログラムの一例を示す説明図である。
【図２０】対策プログラムの他の例を示す説明図である。
【図２１】ソースコード雛型の一生成例を示す説明図（その１）である。
【図２２】ソースコード雛型の一生成例を示す説明図（その２）である。
【図２３】ソースコード雛型の一生成例を示す説明図（その３）である。
【図２４】ソースコード雛型の一生成例を示す説明図（その４）である。
【図２５】ソースコード雛型の他の生成例を示す説明図（その１）である。
【図２６】ソースコード雛型の他の生成例を示す説明図（その２）である。
【図２７】ソースコード雛型の他の生成例を示す説明図（その３）である。
【図２８】ソースコード雛型の他の生成例を示す説明図（その４）である。
【図２９】クラス生成部によるクラス生成処理手順を示すフローチャートである。
【図３０】脅威・対策生成部による脅威・対策定義の生成処理手順を示すフローチャートである。
【図３１】対策プログラム抽出部による対策プログラム生成処理手順を示すフローチャートである。
【図３２】ソースコード雛型生成部によるソースコード雛型生成処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この発明にかかる開発支援プログラム、開発支援装置、および開発支援方法の好適な実施の形態を詳細に説明する。なお、本実施の形態では、一例としてソフトウェア開発について説明するが、ソフトウェア開発に限らずハードウェア開発にも適用することができる。
【００１２】
（システム構成）
図１は、本実施の形態にかかる開発支援システムのシステム構成図である。図１において、開発支援システム１００は、開発環境１０１と開発支援装置１０２により構成されている。開発環境１０１とは、従来からソフトウェア開発で用いられた作図ツール１０３や実行環境１０４を含む環境であり、コンピュータにより構成される。開発支援装置１０２とは、開発環境１０１におけるソフトウェア開発を支援するコンピュータである。開発支援装置１０２は、脅威・対策データベース（ＤＢ）１０５および対策プログラムＤＢ１０６にアクセス可能である。なお、開発環境１０１で使用されるコンピュータと開発支援装置１０２として使用されるコンピュータとは、一体でもよく別々のコンピュータでもよい。
【００１３】
まず、開発環境１０１では、開発者が開発対象となるソフトウェアを機能的に表現したユースケース定義１１１を作成する。ユースケース定義１１１は、ユースケース図として表示可能である。なお、ユースケース定義１１１には、通常のユースケース定義１１１とは異なっており、セキュリティ属性やデータ資産が付加されている。この点については後述する。
【００１４】
また、開発環境１０１は、開発支援装置１０２に対してユースケース定義１１１を与えることで、開発支援装置１０２からユースケース定義１１１に応じたクラス定義１１２を取得する。開発者は、クラス定義１１２を用いて開発対象となるソフトウェアの動作を表現したシーケンス定義１１３を作成する。シーケンス定義１１３は、シーケンス図として表示可能である。
【００１５】
開発環境１０１は、開発支援装置１０２に対してシーケンス定義１１３を与えることで、開発支援装置１０２からシーケンス定義１１３に応じたクラス定義を取得する。このクラス定義内のクラス（シーケンス定義１１３のオブジェクト）やメソッド（シーケンス定義１１３のメッセージ）には、開発するソフトウェアが備えるべきセキュリティに関する属性であるセキュリティ属性が指定されている。このようなクラス定義を、本実施の形態では、「ソースコード雛型」と称す。
【００１６】
ソースコード雛型１１４には、どのクラス、どのメソッドにどのセキュリティ属性が指定されているかが記述されているため、開発者は、ソースコード雛型１１４を参照して、開発対象プログラム１１５（まずは、プロトタイプ１１５ａ）を作成する。開発環境１０１は、プロトタイプ１１５ａを実行環境１０４に与える。実行環境１０４は、プロトタイプ１１５ａを実行する。
【００１７】
開発者は、プロトタイプ１１５ａに問題があれば修正を繰り返して実行環境１０４にかけ、最終的に、完成品１１５ｂを作成する。そして、完成品１１５ｂを実行環境１０４に与える。実行環境１０４は、完成品１１５ｂを実行する。
【００１８】
また、本実施の形態では、アスペクト指向プログラミング（ＡＯＰ：Ａｓｐｅｃｔ  Ｏｒｉｅｎｔｅｄ  Ｐｒｏｇｒａｍｍｉｎｇ）を利用してソフトウェア開発を行っているため、実行環境１０４による実行の際、開発支援装置１０２から得られた対策プログラム１２６が開発対象プログラム１１５に挿入される。
【００１９】
アスペクト指向プログラミングの実装では、１つの関心事が特に複数の関心事を横断する形で実現されている(ＡｓｐｅｃｔＪなど)。これらの実装では、依存性注入という、通常のプログラムとサブルーチンの関係を逆転した概念が用いられる。
【００２０】
本実施の形態では、アスペクト指向プログラミングの導入により、セキュリティプログラムの機能への依存性を軽減している。これにより、プロトタイプ１１５ａで対策プログラム１２６の呼び出しを記述する必要がなくなった。すなわち、依存性の逆転により、開発支援装置１０２から対策プログラム１２６が挿入されるため、プロトタイプ１１５ａの開発対象プログラムから実装でコードが変化しても、対策プログラム１２６の挿入に必要な特徴が維持されるため、同様に対策プログラム１２６の挿入が可能となる。
【００２１】
また、開発支援装置１０２は、脅威・対策ＤＢ１０５および対策プログラムＤＢ１０６にアクセス可能であり、クラス生成部１２１と、ソースコード雛型生成部１２２と、脅威・対策生成部１２３と、対策プログラム抽出部１２５と、を有する。
【００２２】
脅威・対策ＤＢ１０５は、セキュリティ属性ごとに、セキュリティ攻撃を示す脅威とその対策に関する情報を記憶するデータベースである。また、対策プログラムＤＢ１０６は、対策を実現するための対策プログラム１２６を記憶するデータベースである。
【００２３】
クラス生成部１２１は、ユースケース定義１１１からクラス定義１１２を生成する。具体的には、ユースケース定義１１１をクラス定義１１２に変換して、クラス定義１１２を返す。ソースコード雛型生成部１２２は、シーケンス定義１１３からソースコード雛型１１４を生成する。具体的には、シーケンス定義１１３をクラス定義１１２に変換して、セキュリティ属性を指定したソースコード雛型１１４を返す。
【００２４】
脅威・対策生成部１２３は、脅威・対策ＤＢ１０５を参照して、ユースケース定義１１１から脅威・対策定義１２４を生成する。具体的には、ユースケース定義１１１に含まれているセキュリティ属性に該当する脅威およびその対策に関する情報を脅威・対策ＤＢ１０５から読み出すことで、脅威・対策定義１２４を生成する。
【００２５】
対策プログラム抽出部１２５は、脅威・対策定義１２４をキーにして、対策プログラムＤＢ１０６から該当する対策プログラム１２６を抽出する。対策プログラム１２６には、認証処理や暗号化処理など実体となる対策を示すプログラムコードのほか、開発対象プログラムの挿入位置を指定する注釈（アノテーション）が、脅威・対策定義１２４に応じて指定される。対策プログラム１２６は、開発対象プログラムが該当する位置を実行するときに挿入されて、実行されることとなる。
【００２６】
（コンピュータのハードウェア構成）
図２は、実施の形態にかかる開発環境１０１や開発支援装置１０２となるコンピュータのハードウェア構成を示すブロック図である。図２において、コンピュータは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００２７】
ここで、ＣＰＵ２０１は、開発支援装置１０２の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００２８】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２９】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３０】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３１】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３２】
スキャナ２１２は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３３】
なお、図１に示した脅威・対策ＤＢ１０５および対策プログラムＤＢ１０６は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置によりその機能を実現する。また、クラス生成部１２１、ソースコード雛型生成部１２２、脅威・対策生成部１２３、および対策プログラム抽出部１２５は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、その機能を実現する。
【００３４】
（データベースの説明）
図３は、脅威・対策ＤＢ１０５の記憶内容の一例を示す説明図である。脅威・対策ＤＢ１０５は、セキュリティ属性項目、脅威項目、フロー方向、および対策項目を有するデータ構造である。セキュリティ属性項目は、セキュリティ属性を規定する。セキュリティ属性とは、セキュリティの種類を特定する情報である。具体的には、たとえば、可用性（Ａｖａｉｌａｂｉｌｉｔｙ）、機密性（Ｃｏｎｆｉｄｅｎｃｉａｌｉｔｙ）、完全性（ｉｎｔｅｇｒｉｔｙ）などが挙げられる。このセキュリティ属性ごとに、脅威、フロー方向、対策が定義される。
【００３５】
脅威項目は、脅威識別子項目と脅威名により脅威を規定する。脅威識別子とは脅威に固有な識別子であり、脅威名とはセキュリティ攻撃を示す脅威の名称である。フロー方向項目とは、データの流れを示すフロー方向を規定する。
【００３６】
ユースケース定義１１１（ユースケース図）で用いられる関連には、データの流れが規定されていないため、セキュリティ属性に応じたデータの流れをフロー方向として規定しておく。フロー方向項目では、入力（→）、出力（←）、入出力（←→）の３種類のフロー方向が規定される。
【００３７】
「入力（→）」は、脅威の対象となるユースケースへのデータ入力を示しており、出力（←）は、脅威の対象となるユースケースからのデータ出力を示しており、入出力（←→）は、脅威の対象となるユースケースのデータの入出力を示している。
【００３８】
対策項目は、対策識別子と対策名により対策を規定する。対策識別子とは対策に固有な識別子であり、対策名とは同一レコードの脅威からソフトウェアを保護するための対策の名称である。
【００３９】
図４は、対策プログラムＤＢ１０６の記憶内容の一例を示す説明図である。対策プログラムＤＢ１０６は、対策項目と対策プログラム項目とを有する。対策項目は、対策識別子と対策名により対策を規定する。対策識別子とは対策に固有な識別子であり、対策名とは脅威からソフトウェアを保護するための対策の名称である。対策プログラム１２６とは、脅威からソフトウェアを保護するためのプログラムコードである。
【００４０】
（各種データの説明）
図５は、本実施の形態にかかるユースケース図５００の一例を示す説明図である。図５において、ユースケース図５００は、開発環境１０１において、作図ツール１０３により作成される。図５のユースケース図５００の上半部では、アクターａ０（利用者）とユースケースｕ０（利用者向け機能）とが関連ｃ０により接続されている。ユースケースｕ０には、セキュリティ属性：可用性が関連付けられている。関連ｃ０には、データ資産ｄ０（機能関連０）が関連付けられている。ここでのデータ資産ｄ０は、フロー方向として「入出力（←→）」が関連付けられている。
【００４１】
図５のユースケース図５００の下半部では、アクターａ１（管理者）とユースケースｕ１（管理者向け機能）とが関連ｃ１により接続されている。ユースケースｕ１には、セキュリティ属性：可用性が関連付けられている。関連ｃ１には、データ資産ｄ１（機能関連１）が関連付けられている。データ資産ｄ１は、フロー方向として「入出力（←→）」が関連付けられている。また、データ資産ｄ１には、セキュリティ属性：可用性および完全性が関連付けられている。
【００４２】
図６は、図５に示したユースケース図５００に関するユースケース定義１１１を示す説明図である。ここでは、例としてＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）で記述されている。
【００４３】
図７〜図１０は、図６に示したユースケース定義１１１を表形式のデータ構造で表現した説明図である。図７はアクター、図８はユースケース、図９は関連、図１０はデータ資産のデータ構造を示している。
【００４４】
図１１は、クラス定義１１２を表形式のデータ構造で表現した説明図である。クラス定義１１２は、クラス生成部１２１により生成される。具体的には、クラス生成部１２１では、図８および図１０のデータ構造を参照して、ユースケースおよびデータ資産ごとにクラスを生成し、それらに関連付けられているセキュリティ属性を付加して、クラス識別子を付与する。これにより、クラス定義１１２が生成されることとなる。
【００４５】
図１２は、図５のユースケース図５００の上半部に対応するシーケンス図である。図１２のシーケンス図１２００において、オブジェクト１２０１はアクターａ０（利用者）に相当するクライアントであり、オブジェクト１２０２は利用者向け機能であるクラスＣＬ０に相当する。メッセージ１２１０〜１２１３は、クライアント１２０１とオブジェクト１２０２との間の通信を示している。開発者は、開発環境１０１において、作成したシーケンス定義１１３（シーケンス図）とクラス定義１１２とを関連付けておく。具体的には、たとえば、図１２のオブジェクト１２０２については、クラス定義１１２のクラスＣＬ１に関連付けておく。
【００４６】
図１３は、図１２に示したシーケンス図１２００に関するシーケンス定義１１３を示す説明図である。図１３のシーケンス定義１３００は、例としてＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）で記述されている。
【００４７】
図１４は、図５のユースケース図５００の下半部に対応するシーケンス図である。図１４のシーケンス図１４００において、オブジェクト１４０１はアクターａ１（管理者）に相当するクライアントであり、オブジェクト１４０２は管理者向け機能であるクラスＣＬ１に相当する。メッセージ１４１０〜１４１３は、オブジェクト１４０１とオブジェクト１４０２との間の通信を示している。
【００４８】
開発者は、開発環境１０１において、作成したシーケンス定義１１３とクラス定義１１２とを関連付けておく。具体的には、たとえば、図１４のオブジェクト１４０２については、クラス定義１１２のクラスＣＬ２に関連付けておく。さらに、図１４のメッセージ１４１１，１４１２については、ａｃｃｅｓｓ１１（）およびａｃｃｅｓｓ１２（）の引数に、オブジェクト１４０１（アクターａ１）とオブジェクト１４０２（ユースケースｕ１）との間のデータ資産であるクラスＣＬ３（機能関連１）を与えておく。
【００４９】
図１５は、図１４に示したシーケンス図１４００に関するシーケンス定義１１３を示す説明図である。図１５のシーケンス定義１５００は、例としてＸＭＬで記述されている。
【００５０】
図１６および図１７は、図１３および図１５に示したシーケンス定義１１３を表形式のデータ構造で表現した説明図である。図１６はオブジェクト、図１７はメッセージのデータ構造を示している。
【００５１】
図１８は、脅威・対策定義１２４の一例を示す説明図である。脅威・対策定義１２４は、脅威・対策生成部１２３により生成される情報である。具体的には、たとえば、ユースケース図５００にセキュリティ属性：可用性有りのユースケースがある場合、セキュリティ属性：可用性に関する脅威（脅威識別子および脅威名）を脅威・対策ＤＢ１０５から抽出する。そして、その脅威対象となったユースケースのユースケース識別子を抽出脅威に関連付ける。同様に、抽出脅威に対応する対策（対策識別子および対策名）を脅威・対策ＤＢ１０５から抽出する。そして、その対策対象となったユースケースのユースケース識別子を抽出対策に関連付ける。
【００５２】
また、ユースケース図５００にセキュリティ属性：機密性、完全性有りのデータ資産がある場合、セキュリティ属性：機密性、完全性に関する脅威（脅威識別子および脅威名）を脅威・対策ＤＢ１０５から抽出する。そして、その脅威対象となったデータ資産のデータ資産識別子を抽出脅威に関連付ける。同様に、抽出脅威に対応する対策（対策識別子および対策名）を脅威・対策ＤＢ１０５から抽出する。そして、その対策対象となったデータ資産のデータ資産識別子を抽出対策に関連付ける。
【００５３】
図１９および図２０は、対策プログラム１２６の一例を示す説明図である。図１９および図２０に示した対策プログラム１９００、２０００は、ＡｓｐｅｃｔＪによる記述例を示している。図１９の対策プログラム１２６は、ユースケース図５００の上半部に対応する対策プログラム１２６（識別認証プログラム）であり、図２０の対策プログラム１２６は、ユースケース図５００の下半部に対応する対策プログラム１２６（暗号化プログラム）である。
【００５４】
図１９において、上半部１９０１は、セキュリティ属性を規定する記述であり、下半部１９０２は挿入される対策プログラム１２６のプログラムコードを規定する記述である。上半部１９０１において、下線で示した符号１９０３は、挿入箇所を指定する記述である。記述１９０３は、セキュリティ属性：可用性が付与されたクラス内の任意のメソッド呼び出しを指定する。
【００５５】
また、下半部１９０２において、下線で示した符号１９０４は、メソッドのどこに挿入するかを指定する記述である。具体的には、メソッドの実行前（Ｂｅｆｏｒｅ）、実行中（Ａｒｏｕｎｄ（入れ替え））、実行後（Ａｆｔｅｒ）が記述される。いずれを記述するかは、たとえば、対策が「識別認証」である場合は「Ｂｅｆｏｒｅ」というように、対策プログラム１２６のプログラムコードによりあらかじめ設定されている。
【００５６】
また、下線で示した符号１９０５は、対策プログラム１２６のプログラムコードである。対策プログラムＤＢ１０６から抽出された対策プログラム１２６のプログラムコードは、符号１９０５の位置に記述されている。
【００５７】
図２０も図１９と同様、上半部２００１は、セキュリティ属性を規定する記述であり、下半部２００２は挿入される対策プログラム１２６のプログラムコードを規定する記述である。上半部２００１において、下線で示した符号２００３は、挿入箇所を指定する記述である。記述２００３は、セキュリティ属性：完全性が付与されたクラス内の任意のメソッド呼び出しを指定する。
【００５８】
また、下半部２００２において、下線で示した符号２００４は、記述１９０４と同様、メソッドのどこに挿入するかを指定する記述である。また、下線で示した符号２００５は、対策プログラム１２６のプログラムコードである。図２０の例では、セキュリティ属性：完全性が規定されているため、対応する「暗号化」のプログラムコードが記述されている。
【００５９】
（ソースコード雛型１１４の生成例）
図２１〜図２４および図２５〜図２８は、ソースコード雛型１１４の生成例を示す説明図である。図２１〜図２４は、シーケンス定義１３００に対応するソースコード雛型１１４の生成例を示しており、図２５〜図２８は、シーケンス定義１５００に対応するソースコード雛型１１４の生成例を示している。以下、理解の容易のため、シーケンス図１２００，１４００を用いて説明する。
【００６０】
図２１は、シーケンス図１２００からオブジェクト１２０１，１２０２を抽出して、抽出オブジェクト１２０１，１２０２に対応するクラス（「Ｃｌｉｅｎｔ」、「利用者向け機能」）が生成された状態を示している。
【００６１】
図２２は、シーケンス図１２００からメッセージ１２１０〜１２１３を抽出して、抽出オブジェクト１２０１，１２０２ごとに、メッセージ１２１０〜１２１３に対応するメソッド（「ｄｏ利用者向け機能（）」、「ａｃｃｅｓｓ０１（）〜ａｃｃｅｓｓ０３（）」）が生成された状態を示している。
【００６２】
図２３は、シーケンス図１２００からメッセージ１２１０〜１２１３を抽出して、図２２のメソッド中の雛型になる処理が生成された状態を示している。具体的には、クライアントが生成するメッセージを生成している。図２１〜図２３までの生成処理は、既存のクラス生成処理により実現できる。
【００６３】
図２４は、クラスやメソッドが有するセキュリティ属性に対応する注釈（処理に影響しないコメントのような印、図２４では「＠」）を生成して、宣言部に追加されたソースコード雛型２４００を示している。図２４は、シーケンス図１２００に対応するソースコード雛型２４００の生成例であるため、セキュリティ属性は、クラス（に対応するオブジェクト（利用者向け機能に相当））について可用性があり、メソッド（に対応するメッセージ（機能関連０に相当））について機密性および完全性がない記述となる。
【００６４】
図２５は、シーケンス図１４００からオブジェクト１４０１，１４０２を抽出して、抽出オブジェクト１４０１，１４０２に対応するクラス（「Ｃｌｉｅｎｔ」、「管理者向け機能」）が生成された状態を示している。
【００６５】
図２６は、シーケンス図１４００からメッセージ１４１０〜１４１３を抽出して、抽出オブジェクト１４０１，１４０２ごとに、メッセージ１４１０〜１４１３に対応するメソッド（「ｄｏ管理者向け機能（）」、「ａｃｃｅｓｓ１１（）〜ａｃｃｅｓｓ１３（）」）が生成された状態を示している。
【００６６】
図２７は、シーケンス図１４００からメッセージ１４１０〜１４１３を抽出して、図２６のメソッド中の雛型になる処理が生成された状態を示している。具体的には、クライアントが生成するメッセージを生成している。図２５〜図２７までの生成処理は、既存のクラス生成処理により実現できる。
【００６７】
図２８は、クラスやメソッドが有するセキュリティ属性に対応する注釈（処理に影響しないコメントのような印、図２８では「＠」）を生成して、宣言部に追加されたソースコード雛型２８００を示している。図２８は、シーケンス図１４００に対応するソースコード雛型２８００の生成例であるため、セキュリティ属性は、クラス（に対応するオブジェクト（管理者向け機能に相当））について可用性があり、メソッド（に対応するメッセージ（機能関連１に相当）について機密性がなく完全性がある記述となる。
【００６８】
（開発支援処理手順）
つぎに、本実施の形態にかかる開発支援装置１０２による開発支援処理手順について説明する。
【００６９】
図２９は、クラス生成部１２１によるクラス生成処理手順を示すフローチャートである。まず、クラス生成部１２１は、ユースケース定義１１１を読み込み（ステップＳ２９０１）、ユースケース定義１１１からユースケースを抽出する（ステップＳ２９０２）。そして、クラス生成部１２１は、抽出ユースケースについて対応するクラスを生成し、クラス識別子を付与する（ステップＳ２９０３）。また、クラス生成部１２１は、クラス名としてユースケース名を付与する（ステップＳ２９０４）。そして、抽出ユースケースにセキュリティ属性（可用性）がある場合は、クラスのセキュリティ属性に付与する（ステップＳ２９０５）。これにより、図１０に示した１レコード分のクラス定義１１２が生成される。
【００７０】
このあと、クラス生成部１２１は、未抽出ユースケースがあるか否かを判断し（ステップＳ２９０６）、未抽出ユースケースがある場合（ステップＳ２９０６：Ｙｅｓ）、ステップＳ２９０２に戻る。一方、クラス生成部１２１は、未抽出ユースケースがない場合（ステップＳ２９０６：Ｎｏ）、ユースケース定義１１１からデータ資産を抽出する（ステップＳ２９０７）。そして、クラス生成部１２１は、抽出データ資産について対応するクラスを生成し、クラス識別子を付与する（ステップＳ２９０８）。
【００７１】
また、クラス生成部１２１は、クラス名としてデータ資産名を付与する（ステップＳ２９０９）。そして、抽出データ資産にセキュリティ属性（機密性、完全性）がある場合は、クラス生成部１２１は、クラスのセキュリティ属性に付与する（ステップＳ２９１０）。これにより、図１０に示した１レコード分のクラス定義１１２が生成される。
【００７２】
このあと、クラス生成部１２１は、未抽出データ資産があるか否かを判断し（ステップＳ２９１１）、未抽出データ資産がある場合（ステップＳ２９１１：Ｙｅｓ）、ステップＳ２９０７に戻る。一方、未抽出データ資産がない場合（ステップＳ２９１１：Ｎｏ）、図１０に示したクラス定義１１２を書き出す（ステップＳ２９１２）。これにより、一連のクラス生成処理を終了する。
【００７３】
図３０は、脅威・対策生成部１２３による脅威・対策定義１２４の生成処理手順を示すフローチャートである。まず、脅威・対策生成部１２３は、ユースケース定義１１１を読み込み（ステップＳ３００１）、ユースケース定義１１１からユースケースを抽出する（ステップＳ３００２）とともに、セキュリティ属性も抽出する（ステップＳ３００３）。このあと、脅威・対策生成部１２３は、抽出セキュリティ属性に対応する脅威をすべて、脅威・対策ＤＢ１０５から抽出する（ステップＳ３００４）。そして、抽出脅威の対象として抽出ユースケースのユースケース識別子を登録する（ステップＳ３００５）。
【００７４】
つぎに、脅威・対策生成部１２３は、抽出脅威に対応する対策をすべて、脅威・対策ＤＢ１０５から抽出する（ステップＳ３００６）。そして、脅威・対策生成部１２３は、抽出対策の対象として抽出ユースケースのユースケース識別子を登録する（ステップＳ３００７）。これにより、１つの可用性分のレコードが生成されることとなる。
【００７５】
このあと、脅威・対策生成部１２３は、未抽出ユースケースがあるか否かを判断し（ステップＳ３００８）、未抽出ユースケースがある場合（ステップＳ３００８：Ｙｅｓ）、ステップＳ３００２に戻る。一方、脅威・対策生成部１２３は、未抽出のユースケースがない場合（ステップＳ３００８：Ｎｏ）、ユースケース定義１１１からデータ資産（データ資産識別子およびデータ資産名）を抽出する（ステップＳ３００９）とともに、セキュリティ属性およびフロー方向を抽出する（ステップＳ３０１０）。
【００７６】
このあと、脅威・対策生成部１２３は、抽出セキュリティ属性およびフロー方向が一致する脅威をすべて、脅威・対策ＤＢ１０５から抽出する（ステップＳ３０１１）。そして、脅威・対策生成部１２３は、抽出脅威の対象として抽出データ資産のデータ資産識別子を登録する（ステップＳ３０１２）。つぎに、脅威・対策生成部１２３は、抽出脅威に対応する対策を脅威・対策ＤＢ１０５から抽出する（ステップＳ３０１３）。そして、抽出対策の対象として抽出データ資産のデータ資産識別子を登録する（ステップＳ３０１４）。これにより、１つのセキュリティ属性（機密性、完全性）分のレコードが生成されることとなる。
【００７７】
このあと、脅威・対策生成部１２３は、未抽出データ資産があるか否かを判断し（ステップＳ３０１５）、未抽出データ資産がある場合（ステップＳ３０１５：Ｙｅｓ）、ステップＳ３００９に戻る。一方、脅威・対策生成部１２３は、未抽出データ資産がない場合（ステップＳ３０１５：Ｎｏ）、脅威・対策定義１２４を書き出す（ステップＳ３０１６）。これにより、一連の脅威・対策定義１２４の生成処理を終了する。
【００７８】
図３１は、対策プログラム抽出部１２５による対策プログラム１２６生成処理手順を示すフローチャートである。まず、対策プログラム抽出部１２５は、脅威・対策定義１２４を読み込み（ステップＳ３１０１）、脅威・対策定義１２４中の対策を抽出する（ステップＳ３１０２）。そして、対策プログラム抽出部１２５は、脅威・対策定義１２４中の対策名に対応する対策プログラム１２６を対策プログラムＤＢ１０６から抽出する（ステップＳ３１０３）。たとえば、対策名が「識別認証」の場合、図１９に示した対策プログラム１２６が抽出され、対策名が「暗号化」の場合、図２０に示した対策プログラム１２６が抽出される。
【００７９】
このあと、対策プログラム抽出部１２５は、未抽出対策があるか否かを判断し（ステップＳ３１０４）、未抽出対策がある場合（ステップＳ３１０４：Ｙｅｓ）、ステップＳ３１０２に戻る。一方、対策プログラム抽出部１２５は、未抽出対策がない場合（ステップＳ３１０４：Ｎｏ）、抽出された対策プログラム１２６を書き出す（ステップＳ３１０５）。これにより、一連の対策プログラム１２６抽出処理を終了する。
【００８０】
図３２は、ソースコード雛型生成部１２２によるソースコード雛型生成処理手順を示すフローチャートである。まず、シーケンス定義１１３を読み込み（ステップＳ３２０１）、図２１および図２５に示したように、各オブジェクトに対応するクラスを生成する（ステップＳ３２０２）。また、図２２および図２６に示したように、各オブジェクト中のメッセージに対応するメソッドを生成する（ステップＳ３２０３）。
【００８１】
このあと、図２３および図２７に示したように、メソッド中の雛型になる処理を生成する（ステップＳ３２０４）。ここまでの処理は既存の技術で実行される処理である。そして、図２４および図２８に示したように、各オブジェクトに対応するクラスおよびメソッドが有するセキュリティ属性に対応する注釈を生成し、宣言部に追加する（ステップＳ３２０５）。このあと、生成されたクラス定義１１２をソースコード雛型１１４として書き出す（ステップＳ３２０６）。これにより、一連のソースコード雛型１１４の生成処理を終了する。
【００８２】
このように、本実施の形態では、挿入箇所を指定する記述を持ったソースコード雛形（固定のクラス、メソッド宣言のみを持ち、それ以外は記述のないもの）と、開発対象プログラム中の注釈を発見し、そこへセキュリティ処理を挿入する対策プログラム１２６を提供する。これにより、開発者が期待している機能だけではなく、開発者が意図しない入力に対する対策を、設計工程で自動生成することができる。したがって、セキュリティ機能に関する実装の網羅性の向上を図ることができる。
【００８３】
また、コーディングが完了していない段階で開発者が想定していないセキュリティの具体的な実装が可能となり、下流におけるコーディングの自由度を高くすることができる。また、プロトタイピングを行う場合、開発者はプロトタイプ１１５ａの開発対象プログラム、完成品１１５ｂの開発対象プログラムともに、本実施の形態が提供するソースコード雛型１１４から作成すれば、双方において同じセキュリティ処理を実現することができる。
【００８４】
なお、本実施の形態で説明した開発支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本開発支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本開発支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【００８５】
１００  開発支援システム
１０１  開発環境
１０２  開発支援装置
１０５  脅威・対策ＤＢ
１０６  対策プログラムＤＢ
１２１  クラス生成部
１２２  ソースコード雛型生成部
１２３  脅威・対策生成部
１２５  対策プログラム抽出部
【図１】
2011086200.tif 000003
【図２】
2011086200.tif 000004
【図３】
2011086200.tif 000005
【図４】
2011086200.tif 000006
【図５】
2011086200.tif 000007
【図６】
2011086200.tif 000008
【図７】
2011086200.tif 000009
【図８】
2011086200.tif 000010
【図９】
2011086200.tif 000011
【図１０】
2011086200.tif 000012
【図１１】
2011086200.tif 000013
【図１２】
2011086200.tif 000014
【図１３】
2011086200.tif 000015
【図１４】
2011086200.tif 000016
【図１５】
2011086200.tif 000017
【図１６】
2011086200.tif 000018
【図１７】
2011086200.tif 000019
【図１８】
2011086200.tif 000020
【図１９】
2011086200.tif 000021
【図２０】
2011086200.tif 000022
【図２１】
2011086200.tif 000023
【図２２】
2011086200.tif 000024
【図２３】
2011086200.tif 000025
【図２４】
2011086200.tif 000026
【図２５】
2011086200.tif 000027
【図２６】
2011086200.tif 000028
【図２７】
2011086200.tif 000029
【図２８】
2011086200.tif 000030
【図２９】
2011086200.tif 000031
【図３０】
2011086200.tif 000032
【図３１】
2011086200.tif 000033
【図３２】
2011086200.tif 000034