IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士電機株式会社の特許一覧

特開2024-13784ソースコード修正支援装置およびソースコード修正支援方法
<>
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図1
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図2
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図3
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図4
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図5
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図6
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図7
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図8
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図9
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図10
  • 特開-ソースコード修正支援装置およびソースコード修正支援方法 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024013784
(43)【公開日】2024-02-01
(54)【発明の名称】ソースコード修正支援装置およびソースコード修正支援方法
(51)【国際特許分類】
   G06F 11/36 20060101AFI20240125BHJP
   G06F 8/30 20180101ALI20240125BHJP
   G06F 8/51 20180101ALI20240125BHJP
【FI】
G06F11/36 104
G06F8/30
G06F8/51
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022116136
(22)【出願日】2022-07-21
(71)【出願人】
【識別番号】000005234
【氏名又は名称】富士電機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100132067
【弁理士】
【氏名又は名称】岡田 喜雅
(74)【代理人】
【識別番号】100131521
【弁理士】
【氏名又は名称】堀口 忍
(72)【発明者】
【氏名】菊田 祐司
【テーマコード(参考)】
5B042
5B081
5B376
【Fターム(参考)】
5B042GA02
5B042HH08
5B042HH39
5B042KK13
5B081AA00
5B376BC26
5B376BC38
5B376BC69
(57)【要約】
【課題】ある言語で記述されたソースコードの一部を他の言語の記述に置き替える作業の労力を軽減する。
【解決手段】ソースコード修正支援装置は、ルールリスト取得部、静的解析部、および判定部を備える。ルールリスト取得部は、ソースコードを記述する際に守らなければならない各ルールに優先度を付与することで作成されるルールリストを取得する。静的解析部は、第1の言語で記述されたソースコードにおいて、ルールリストに記載されているルールに違反する違反記述を検索すると共に、ルールリストに基づいて、各違反記述に対して、当該違反記述が違反したルールに付与されている優先度を対応づける。判定部は、静的解析部により検索された各違反記述について、対応づけられている優先度に基づいて対処方針を判定する。
【選択図】図1

【特許請求の範囲】
【請求項1】
ソースコードを記述する際に守らなければならない各ルールに優先度を付与することで作成されるルールリストを取得するルールリスト取得部と、
第1の言語で記述されたソースコードにおいて、前記ルールリストに記載されているルールに違反する違反記述を検索すると共に、前記ルールリストに基づいて、各違反記述に対して、当該違反記述が違反したルールに付与されている優先度を対応づける静的解析部と、
前記静的解析部により検索された各違反記述について、対応づけられている優先度に基づいて対処方針を判定する判定部と、
を備えるソースコード修正支援装置。
【請求項2】
前記判定部は、前記静的解析部により検索された各違反記述について、対応づけられている優先度に基づいて、前記第1の言語よりも信頼性の高い第2の言語に置き換えるべきか否かを判定する
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項3】
前記判定部は、最も高い優先度が対応づけられている違反記述への対処方針として、前記第1の言語よりも信頼性の高い第2の言語に置き換えることを指示する情報を出力する
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項4】
前記優先度は、当該優先度が付与されるルールに違反する違反記述に起因して生じるセキュリティ上のリスクの深刻度を表す
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項5】
前記優先度は、当該優先度が付与されるルールに違反する違反記述を、前記第1の言語よりも信頼性の高い第2の言語に置き換える必要性の程度を表す
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項6】
ソースコードを記述する際に守らなければならない各ルールに優先度を付与することで作成されるルールリストを取得するルールリスト取得部と、
第1の言語で記述されたソースコードにおいて、前記ルールリストに記載されているルールに違反する違反記述を検索すると共に、前記ルールリストに基づいて、各違反記述に対して、当該違反記述が違反したルールに付与されている優先度を対応づける静的解析部と、
前記静的解析部により検索された各違反記述について、対応づけられている優先度に基づいて、前記第1の言語よりも信頼性の高い第2の言語に置き換えるべきか否かを判定する判定部と、
前記判定部により前記第2の言語に置き換えるべきと判定された違反記述を、前記第2の言語の記述に変換する変換部と、
を備えるソースコード修正システム。
【請求項7】
ソースコードを記述する際に守らなければならない各ルールに優先度を付与することで作成されるルールリストを取得し、
第1の言語で記述されたソースコードにおいて、前記ルールリストに記載されているルールに違反する違反記述を検索すると共に、前記ルールリストに基づいて、各違反記述に対して、当該違反記述が違反したルールに付与されている優先度を対応づけ、
各違反記述について、対応づけられている優先度に基づいて対処方針を判定する
ことを特徴とするソースコード修正支援方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコード内の記述を他の言語の記述に置き替える作業を支援する装置および方法に係わる。
【背景技術】
【0002】
ネットワークに接続する機会が増加したことに伴い、悪意ある第三者によりソフトウェアの脆弱性が狙われて不具合が発生するケースも増加してきている。このため、開発段階で、所定のセキュアコーディングルールに基づいてソースコードを解析することで、ソフトウェアの脆弱性を発見する作業が行われている。これにより、ソフトウェアの安全性が担保される。例えば、車載機器、産業機器、医療機器などの分野では、CERT(Computer Emergency Response Team)、MISRA(The Motor Industry Software Reliability Association)、AUTOSAR(Automotive Open System Architecture)などのセキュアコーディングルールが使用されている。
【0003】
加えて、ソフトウェアの脆弱性を小さくするプログラミング言語が普及してきている。例えば、Rustは、メモリの安全性を保証する言語であり、C言語またはC++に代わる言語の1つとして注目されている。
【0004】
なお、ソースプログラムの実行処理順序の誤りを指摘するソースプログラム解析装置が提案されている(例えば、特許文献1)。また、あるプログラミング言語で記述されたソースコードを別のプログラミング言語によるソースコードに変換するソースコード変換装置が提案されている(例えば、特許文献2)。さらに、プログラムの修正またはデバッグを支援する装置が提案されている(例えば、特許文献3~4)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006-236042号公報
【特許文献2】特開2010-140408号公報
【特許文献3】特開2021-192201号公報
【特許文献4】特開2009-104252号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述したように、Rust等の信頼性の高いプログラミング言語が普及してきている。他方、プログラム開発に要するコストおよび時間を抑制するために、可能な限り既存のソフトウェア製品を使い続けたいという要求がある。このため、既存のソフトウェアの脆弱性に対処するために、静的解析装置を利用して脆弱性を含む箇所を特定し、特定した箇所のみを信頼性の高い言語の記述で書き換えることがある。
【0007】
ただし、大規模なプログラムにおいては、脆弱性を含む箇所の個数も多くなる。このため、脆弱性を含む箇所すべてを信頼性の高い言語の記述で書き換える場合、作業時間が長くなってしまう。
【0008】
本発明の1つの側面に係わる目的は、ある言語で記述されたソースコードの一部を他の言語の記述に置き替える作業の労力を軽減することである。
【課題を解決するための手段】
【0009】
本発明の1つの態様のソースコード修正支援装置は、ソースコードを記述する際に守らなければならない各ルールに優先度を付与することで作成されるルールリストを取得するルールリスト取得部と、第1の言語で記述されたソースコードにおいて、前記ルールリストに記載されているルールに違反する違反記述を検索すると共に、前記ルールリストに基づいて、各違反記述に対して、当該違反記述が違反したルールに付与されている優先度を対応づける静的解析部と、前記静的解析部により検索された各違反記述について、対応づけられている優先度に基づいて対処方針を判定する判定部と、を備える。
【発明の効果】
【0010】
上述の態様によれば、ある言語で記述されたソースコードの一部を他の言語の記述に置き替える作業の労力を軽減できる。
【図面の簡単な説明】
【0011】
図1】本発明の実施形態に係わるソースコード修正支援装置の一例を示す図である。
図2】セキュアコーディングルールの一例を示す図である。
図3】ルールリスト作成部の処理の一例を示すフローチャートである。
図4】優先度リストおよびセキュリティルールリストの一例を示す図である。
図5】静的解析部の処理の一例を示すフローチャートである。
図6】静的解析部の検索結果を表す検索結果リストの一例を示す図である。
図7】判定部の処理の一例を示すフローチャートである。
図8】他言語置換えリストおよび他処理リストの一例を示す図である。
図9】判定部の処理のバリエーションを示すフローチャートである。
図10】ソースコード修正装置および試験装置による処理の一例を示すフローチャートである。
図11】ソースコード修正支援装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【0012】
図1は、本発明の実施形態に係わるソースコード修正支援装置の一例を示す。本発明の実施形態に係わるソースコード修正支援装置1は、セキュアコーディングルール3に基づいてソースコード2の中から違反記述を検索し、各違反記述に対して対処方針を表す情報を出力する。
【0013】
ソースコード2は、所定のプログラミング言語で記述された、コンパイル前のプログラムコードである。特に限定されるものではないが、この実施例では、ソースコード2は、C言語またはC++で記述されているものとする。また、ソースコード2は、既存のソフトウェア製品として使用されているプログラムコードであってもよい。
【0014】
セキュアコーディングルール3は、ソースコードを記述する際に守らなければならないルールがリスト化された情報であり、ソースコード修正支援装置1がソースコード2を解析する際に使用される。この実施例では、ソースコード修正支援装置1は、セキュアコーディングルール3として既存のコーディングルールを使用する。例えば、セキュアコーディングルール3として、CERT、MISRA、またはAUTOSARが使用される。一例として、C/C++で記述されたコードの解析において使用されるCERT-C/C++コーディングスタンダード規約の一部を図2に示す。
【0015】
ソースコード修正支援装置1は、図1に示すように、ルールリスト作成部11、ルールリスト取得部12、静的解析部13、および判定部14を備える。なお、ソースコード修正支援装置1は、図1に示していない他の機能またはデバイスを備えてもよい。
【0016】
ルールリスト作成部11には、セキュアコーディングルール3が与えられる。ここで、セキュアコーディングルール3は、上述したように、ソースコードを記述する際に守らなければならない1または複数のルールを表す。そして、ルールリスト作成部11は、セキュアコーディングルール3としてリスト化されている各ルールに優先度を付与することでセキュリティルールリストを作成する。なお、ルールリスト作成部11は、例えば、ソースコード2を修正する作業者がコンピュータを操作することで実現される。
【0017】
図3は、ルールリスト作成部11の処理の一例を示すフローチャートである。このフローチャートの処理は、例えば、ソースコード修正支援装置1にソースコード2が与えられたときに実行される。ただし、ルールリスト作成部11は、ソースコード修正支援装置1にソースコード2が与えられる前に図3に示すフローチャートの処理を実行してもよい。
【0018】
S1において、ルールリスト作成部11は、ソースコード2を修正する際の対処方針に係わる優先度リストを作成する。優先度リスト21は、図4(a)に示すように、セキュアコーディングルール3として用意されている各ルールに付与する優先度の定義を表す。優先度は、例えば、当該ルールに対する違反が発生したときのセキュリティ上のリスクの深刻度に基づいて決定される。この実施例では、3段階の優先度が設定されるが、2段階または4段階以上の優先度を設定してもよい。
【0019】
対処方針は、当該ルールに違反する記述に対してどのように対処するのかを表す。この実施例では、優先度に応じて図4(a)に示す方針が設定されている。すなわち、最も優先度が高いレベル3が付与されるルールに違反する記述に対しては「他の言語の記述に置き替える」が設定されている。2番目に優先度が高いレベル2が付与されるルールに違反する記述に対しては「他の言語の記述に置き替えることを推奨する」が設定されている。最も優先度が低いレベル1が付与されるルールに違反する記述に対しては「所定のポリシに基づいて修正する」が設定されている。
【0020】
S2において、ルールリスト作成部11は、ソースコード修正支援装置1に与えられたセキュアコーディングルール3を取得する。S3において、ルールリスト作成部11は、ソースコードを記述する際に守らなければならない各ルールに優先度を付与することでセキュリティルールリストを作成する。この実施例では、図2に示す各ルールに対して図4(a)に示す優先度を付与することで、図4(b)に示すセキュリティルールリスト22が得られる。
【0021】
例えば、ソースコードが、「INT32-C」で識別されるルール「符号付き整数演算がオーバフローを引き起こさないことを保証する」に違反する記述を含むときは、重大な障害が発生する可能性があると考えられる。したがって、このルールに対して高い優先度「3」が付与される。「INT33-C」および「EXP33-C」で識別されるルールについても同様である。また、ソースコードが、「ARR32-C」で識別されるルール「可変長配列のサイズ引数が適切な範囲内にあることを保証する」に違反する記述を含むときは、何らかの障害が発生する可能性があるものの、重大な障害が発生する可能性は高くないと考えられる。したがって、このルールに対しては、中間レベルの優先度「2」が付与される。他方、ソースコードが、「MSC05-C」で識別されるルール「time_t型の値を直接操作しない」に違反する記述を含む場合であっても、重大な障害が発生する可能性は低いと考えられる。したがって、このルールに対しては、低い優先度「1」が付与される。
【0022】
各ルールに対して付与する優先度は、例えば、ソースコード2を修正する作業者が決定してもよい。この場合、この作業者がコンピュータを操作することで、図4(b)に示すセキュリティルールリスト22が作成される。作成されたセキュリティルールリスト22は、ソースコード修正支援装置1が備える不図示のメモリに保存される。
【0023】
ルールリスト取得部12は、図3に示す手順で作成されたセキュリティルールリスト22を取得する。この実施例では、ルールリスト取得部12は、ソースコード修正支援装置1が備えるメモリから図4(b)に示すセキュリティルールリスト22を読み出す。
【0024】
静的解析部13は、ルールリスト取得部12が取得したセキュリティルールリスト22に基づいて、ソースコード2において違反記述を検索する。即ち、静的解析部13は、ソースコード2において、セキュリティルールリスト22に記載されているルールに違反する違反記述を検索する。
【0025】
図5は、静的解析部13の処理の一例を示すフローチャートである。このフローチャートの処理は、ソースコード修正支援装置1にソースコード2が与えられたときに実行される。ただし、このフローチャートの処理が実行される前に、図4(b)に示すセキュリティルールリスト22が作成されているものとする。
【0026】
S11において、静的解析部13は、ソースコード2を取得する。S12において、静的解析部13は、図3に示す手順で作成されたセキュリティルールリスト22に従って、ソースコード2内の違反記述を検索する。なお、予め決められたルールに違反する記述を検索する方法は、公知に技術により実現される。そして、S13において、静的解析部13は、検索結果を表す検索結果リストを出力する。
【0027】
図6は、静的解析部13の検索結果を表す検索結果リストの一例を示す。この実施例では、ソースコード2は、ファイル名が「main.c」であるメインプログラムおよびファイル名が「sub.c」であるサブプログラムを含む。
【0028】
検索結果リスト23は、図6(a)に示すように、検出された違反記述ごとに、違反が検出されたファイル名、違反が検出された位置、違反に係わる記述、違反が検出されたルールを識別するルール番号、検出された違反の内容、および違反が検出されたルールの優先度を表す。優先度は、図4(b)に示すセキュリティルールリスト22を参照して設定される。例えば、メインプログラムの12行目において、除算の分母がゼロとなる違反が検出されている。この違反は、図4(b)に示すように、最も優先度が高い違反(即ち、レベル3の違反)に該当する。よって、静的解析部13は、この違反記述に対して「レベル3」を対応づける。このように、静的解析部13は、ソースコード2から違反記述を検出すると共に、検出した各違反記述に対して、セキュリティ上のリスクの深刻度を表す優先度を対応づける。これにより、検索結果リスト23が得られる。
【0029】
静的解析部13は、図6(b)に示すように、検索結果の概要を表す検索結果リスト24を作成してもよい。検索結果リスト24は、ファイル毎に、検索を実行したソースコードの行数、違反が検出された記述の総個数、および優先度ごとに違反が検出された記述の個数を表す。例えば、ファイル名が「main.c」であるメインプログラムに対する検索結果として、レベル3、レベル2、レベル1の違反がそれぞれ3個、2個、15個検出されたことを表している。
【0030】
判定部14は、静的解析部13による検索結果に基づいて、各違反記述についての対処方針を判定する。すなわち、判定部14は、静的解析部13により検出された各違反記述について、対応づけられている優先度に基づいて対処方針を判定する。
【0031】
図7は、判定部14の処理の一例を示すフローチャートである。なお、このフローチャートの処理を実行する前に、静的解析部13により検索結果リスト23が作成されているものとする。
【0032】
S21において、判定部14は、静的解析部13により作成された検索結果リストを取得する。このとき、違反記述ごとに優先度が設定されている検索結果リスト(例えば、図6(a)に示す検索結果リスト23)を取得する。S22において、判定部14は、検索結果リストから違反記述を選択する。S23において、判定部14は、選択した違反記述の優先度が「レベル3:高優先」であるか否かを判定する。
【0033】
選択した違反記述の優先度が「レベル3:高優先」であるときには、判定部14は、S24において、その違反記述を図8(a)に示す他言語置換えリスト25に追加する。他言語置換えリスト25は、他の言語に置き換えることが必要な違反記述を登録するためのリストである。これに対して、選択した違反記述の優先度が「レベル2:中優先」または「レベル1:低優先」であるときは、判定部14は、S25において、その違反記述を図8(b)に示す他処理リスト26に追加する。他処理リスト26は、他の言語に置き換える処理以外の処理を実行すべき違反記述を登録するためのリストである。
【0034】
S26において、判定部14は、S23~S25の処理を実行していない違反記述が検索結果リストに残っているかチェックする。S23~S25の処理を実行していない違反記述が検索結果リストに残っているときには、判定部14の処理はS22に戻る。すなわち、検索結果リストから次の違反記述が選択される。この後、新たに選択された違反処理に対してS23~S25の処理が実行される。そして、検索結果リストに登録されているすべての違反記述に対してS23~25の処理が実行されると、判定部14の処理は終了する。このようにして、他言語置換えリスト25および他処理リスト26が作成される。
【0035】
例えば、図6(a)に示す検索結果リスト23が判定部14に与えられるものとする。そして、判定部14は、検索結果リスト23に登録されている各違反記述に対してS23~S25の処理を実行する。この場合、12行目の違反記述および103行目の違反記述の優先度はそれぞれレベル3である。よって、これらの違反記述は、それぞれ他言語置換えリスト25に追加される。他方、203行目の違反記述の優先度はレベル2であり、303行目の違反記述の優先度はレベル1である。したがって、これらの違反記述は、それぞれ他処理リスト26に追加される。これにより、図8(a)に示す他言語置換えリスト25および図8(b)に示す他処理リスト26が得られる。他言語置換えリスト25は、最も高い優先度(レベル3)が対応づけられている違反記述への対処方針として、第1の言語(C/C++)よりも信頼性の高い第2の言語(Rust)に置き換えることを指示する情報の一例である。
【0036】
なお、図7に示す手順は1つの実施例であり、本発明の実施形態はこの手順に限定されるものではない。例えば、図9に示す例では、図7に示すS23に代わりに、S31~S32の処理を実行する。すなわち、S31において、判定部14は、選択した違反記述の優先度が「レベル2:中優先」または「レベル3:高優先」であるか否かを判定する。そして、選択した違反記述の優先度が「レベル2:中優先」または「レベル3:高優先」であるときは、S32において、判定部14は、選択した違反記述に係わる関数の結合度をチェックする。そして、違反記述に係わる関数の結合度は低いときには、判定部14は、その違反記述を他の言語の記述に置き換えることが容易であると判定し、S24においてその違反記述を他言語置換えリスト25に追加する。他方、選択した違反記述の優先度が「レベル1:低優先」である場合、又は、違反記述に係わる関数の結合度は高いときは、判定部14は、S25において、その違反記述を他処理リスト26に追加する。なお、関数の結合度は、例えば、当該関数を修正したときに他の記述にどの程度の影響を与えるのかを表す。
【0037】
このように、ソースコード修正支援装置1は、セキュアコーディングルール3に基づいてソースコード2から違反記述を抽出する。このとき、各違反記述に対して、セキュリティ上のリスクの深刻度(または、信頼性の高いプログラミング言語に置き換える必要性の程度)に対応する優先度が付与される。そして、ソースコード修正支援装置1は、この優先度を参照して各違反記述をグループ化することにより、他言語置換えリスト25および他処理リスト26を作成する。この後、他言語置換えリスト25および他処理リスト26は、図1に示すソースコード修正装置4に与えられる。
【0038】
ソースコード修正装置4は、ソースコード修正支援装置1により作成された他言語置換えリスト25および他処理リスト26に基づいてソースコード2を修正する。そして、試験装置5は、ソースコード修正装置4により修正されたソースコード2を実行することで動作確認を行う。なお、ソースコード修正装置4および試験装置5は、例えば、ソースコード2を修正する作業者がコンピュータを操作することで実現される。
【0039】
図10は、ソースコード修正装置4および試験装置5による処理の一例を示すフローチャートである。この実施例では、S41において、ソースコード修正装置4は、ソースコード2を取得する。また、ソースコード修正装置4は、S42およびS45において、ソースコード修正支援装置1により作成された他言語置換えリスト25および他処理リスト26をそれぞれ取得する。
【0040】
S43~S44の処理は、他言語置換えリスト25に登録されている各違反記述に対して実行される。すなわち、S43において、ソースコード修正装置4は、違反記述を他の言語の記述に置き換える。例えば、ソースコード2がC言語で記述されているときに、違反記述はRust言語の記述に置き換えられる。このとき、ソースコード2を修正する作業者が、ソースコード修正装置4を実現するコンピュータを用いて手作業でコードを書き換えてもよい。あるいは、ソースコード修正装置4がC言語からRust言語への変換機能を有するときは、ソースコード修正装置4により違反記述がRust言語の記述に置き換えられる。この場合、ソースコード修正装置4は、判定部14により他の言語の記述に置き換えるべきと判定された違反記述を、Rustの記述に変換する変換部として動作する。なお、プログラムコード全体をソフトウェア処理で他の言語に変換することは容易ではないが、一部の記述を他の言語に変換することは既存の技術で可能である。
【0041】
S44において、試験装置5は、他の言語に置き換えられた記述をコンパイルして実行する。すなわち、違反記述が正しく他の言語に置き換えられたか否かについての試験が行われる。そして、試験結果は、ソースコード修正装置4にフィードバックされる。このとき、違反記述が正しく他の言語に置き換えられていなければ、ソースコード修正装置4においてその記述がさらに修正される。これにより、他言語置換えリスト25に登録されている各違反記述が正しく他の言語に置き換えられる。
【0042】
S46~S47の処理は、他処理リスト26に登録されている各違反記述に対して実行される。すなわち、S46において、ソースコード修正装置4は、ソースコードの言語のまま違反記述を修正する。例えば、ソースコード2がC言語で記述されているときは、違反記述は、C言語のままその内容が修正される。このとき、ソースコード2を修正する作業者が、ソースコード修正装置4を実現するコンピュータを用いて手作業でコードを修正してもよい。或いは、ソースコード修正装置4は、違反記述を修正することなく、違反記述が修正されてないことを表すレポートを出力してもよい。
【0043】
S47において、試験装置5は、修正後の記述をコンパイルして実行する。すなわち、違反記述が正しく修正されたか否かについて試験が行われる。そして、試験結果は、ソースコード修正装置4にフィードバックされる。このとき、違反記述が正しく修正されていなければ、ソースコード修正装置4においてその記述がさらに修正される。これにより、他処理リスト26に登録されている各違反記述が正しく修正される。なお、S46において違反記述が修正されないときは、S47の処理を実行しなくてもよい。
【0044】
S48において、試験装置5は、他の言語に置き換えられた記述および修正された記述をソースコード2に結合する。そして、試験装置5は、他の言語に置き換えられた記述および修正された記述を含むプログラムを試験する。
【0045】
このように、ソースコード修正支援装置1は、ソースコードから検出される各違反記述に対して、セキュリティ上のリスクの深刻度(または、信頼性の高いプログラミング言語に置き換える必要性の程度)に対応する優先度を付与する。そして、ソースコード修正支援装置1は、優先度が対応づけられた違反記述を表す情報を出力する。したがって、ソースコード2を修正する作業者は、ソースコードのサイズが大きく、多数の違反記述を含む場合であっても、セキュリティ上のリスクの深刻度が高い違反記述を容易に認識できる。すなわち、コストまたは作業量の観点で全ての違反記述を他の言語の記述に置き換えることが困難なケースであっても、セキュリティ上のリスクの深刻度が高い違反記述を確実に信頼性の高いプログラミング言語の記述に置き換えることができる。これにより、コストまたは作業量の制限がある場合であっても、信頼性が低い既存のプログラムのリスクを小さくできる。
【0046】
<ハードウェア構成>
図11は、ソースコード修正支援装置1のハードウェア構成の一例を示す。ソースコード修正支援装置1は、プロセッサ201、メモリ202、記憶装置203、入出力デバイス204、記録媒体読取り装置205、および通信インタフェース206を備えるコンピュータ200により実現される。
【0047】
プロセッサ201は、記憶装置203に保存されている修正支援プログラムを実行することにより、ソースコード修正支援装置1の動作を制御する。修正支援プログラムは、図3図5、および図7に示すフローチャートの手順を記述したプログラムコードを含む。よって、プロセッサ201がこのプログラムを実行することで、図1に示すルールリスト作成部11、ルールリスト取得部12、静的解析部13、および判定部14の機能が提供される。メモリ202は、プロセッサ201の作業領域として使用される。記憶装置203は、上述した修正支援プログラムおよび他のプログラムを保存する。
【0048】
入出力デバイス204は、キーボード、マウス、タッチパネル、マイクなどの入力デバイスを含む。また、入出力デバイス204は、表示装置、スピーカーなどの出力デバイスを含む。記録媒体読取り装置205は、記録媒体210に記録されているデータおよび情報を取得できる。記録媒体210は、コンピュータ200に着脱可能なリムーバブル記録媒体である。また、記録媒体210は、例えば、半導体メモリ、光学的作用で信号を記録する媒体、または磁気的作用で信号を記録する媒体により実現される。なお、修正支援プログラムは、記録媒体210からコンピュータ200に与えられてもよい。通信インタフェース206は、ネットワークに接続する機能を提供する。なお、修正支援プログラムがプログラムサーバ220に保存されているときは、コンピュータ200は、プログラムサーバ220から修正支援プログラムを取得してもよい。
【0049】
図11に示すコンピュータ200は、ソースコード修正支援装置1の機能に加えて、ソースコード修正装置4および試験装置5の機能を提供してもよい。また、ソースコード修正支援装置1、ソースコード修正装置4、および試験装置5は、別々のコンピュータで実現してもよい。
【符号の説明】
【0050】
1 ソースコード修正支援装置
2 ソースコード
3 セキュアコーディングルール
4 ソースコード修正装置
5 試験装置
11 ルールリスト作成部
12 ルールリスト取得部
13 静的解析部
14 判定部
21 優先度リスト
22 セキュリティルールリスト
23、24 検索結果リスト
25 他言語置換えリスト
26 他処理リスト
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11