(57)【要約】【課題】プログラム開発の品質を確保する。【解決手段】コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定し、前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する、処理をコンピュータに実行させることを特徴とするプログラムが提供される。【選択図】図２
2019020990.tif 000002
【特許請求の範囲】
【請求項１】
コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータに実行させることを特徴とするプログラム。
【請求項２】
前記記憶部は、更に、所定の認証コードを記憶し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記認証コードが含まれ、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータに実行させることを特徴とする請求項１に記載のプログラム。
【請求項３】
前記記憶部は、所定の暗号化方式で暗号化されているコーディング規約に関する情報を記憶し、
前記暗号化されているコーディング規約に関する情報を復号し、
復号したコーディング規約に関する情報から、前記ソースコードが前記コーディング規約を満たすか否かを判定する、
処理をコンピュータに実行させることを特徴とする請求項１又は２に記載のプログラム。
【請求項４】
第１の認証コードが記憶された記憶部を参照して、所定の個数のオブジェクトコードをリンクすることで生成された実行可能形式のデータに含まれる第２の認証コードの数が前記個数と一致し、かつ、前記第２の認証コードが前記第１の認証コードに一致するか否かを判定し、
前記実行可能形式のデータに含まれる第２の認証コードの数が前記個数と一致し、かつ、前記第２の認証コードが前記第１の認証コードに一致すると判定された場合に、前記データの実行を許可する、
処理をコンピュータに実行させることを特徴とするプログラム。
【請求項５】
コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定する判定部と、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する生成部と、
を有することを特徴とする情報処理装置。
【請求項６】
コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
大規模なプログラム開発では、顧客との直接の契約先であるベンダ（このようなベンダは「プライムベンダ」と称される。）が、例えばモジュール単位のプログラム開発を他のベンダに発注することで、マルチベンダにより開発されることがある。
【０００３】
マルチベンダ開発では、各ベンダ間におけるソースコードの品質を確保するため、コーディング規約等が用いられる。プライムベンダは、静的コード解析ツール等を用いて、発注先のベンダから納品等されたソースコードがコーディング規約等を満たしているか否かを確認することで、ソースコードの品質の確保を図っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−３２８３号公報
【特許文献２】特開２０１３−４１５９８号公報
【特許文献３】特開平１１−１８４６９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、大規模なプログラム開発では、発注先のベンダから納品等されるソースコード数も多く、静的コード解析ツールを用いた確認には多くの時間を要する場合がある。このため、例えば、設計変更や仕様変更等によりソースコードが頻繁に改変される場合には、静的コード解析ツールを用いた確認が後回しにされることがある。
【０００６】
また、例えば、納品されたソースコードの品質が著しく低い場合等には、静的コード解析ツールを用いた確認を行うことができない場合がある。
【０００７】
１つの側面では、本発明は、プログラム開発の品質を確保することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定し、前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する、処理をコンピュータに実行させることを特徴とする。
【発明の効果】
【０００９】
プログラム開発の品質を確保することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態に係るプログラム開発システムの全体構成の一例を示す図である。
【図２】本実施形態に係るベンダ開発装置によるコンパイル処理の概略を説明する図である。
【図３】本実施形態に係るプライム開発装置によるリンク及び実行処理の概略を説明する図である。
【図４】本実施形態に係るベンダ開発装置及びプライム開発装置のハードウェア構成の一例を示す図である。
【図５】本実施形態に係るベンダ開発装置及びプライム開発装置の機能構成の一例を示す図である。
【図６】規約設定ファイルの一例を示す図である。
【図７】本実施形態に係るベンダ開発装置によるコンパイル処理の一例を示すフローチャートである。
【図８】コンパイルエラー画面の一例を示す図である。
【図９】本実施形態に係るプライム開発装置によるリンク処理の一例を示すフローチャートである。
【図１０】本実施形態に係るプライム開発装置による実行可能ファイルの実行処理の一例を示すフローチャートである。
【図１１】実行エラー画面の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について添付の図面を参照しながら説明する。
【００１２】
＜全体構成＞
まず、本実施形態に係るプログラム開発システム１の全体構成について、図１を参照しながら説明する。図１は、本実施形態に係るプログラム開発システム１の全体構成の一例を示す図である。
【００１３】
図１に示すように、本実施形態に係るプログラム開発システム１には、プライムベンダがプログラム開発を発注したベンダのシステム環境である１以上のベンダ環境Ｅ１００と、プライムベンダのシステム環境であるプライム開発環境Ｅ２００とが含まれる。ベンダ環境Ｅ１００と、プライム開発環境Ｅ２００とは、例えば、ＬＡＮ（Local  Area  Network）等のネットワークＮを介して通信可能に接続されている。
【００１４】
なお、以降では、顧客との直接の契約先であるプライムベンダ（すなわち、例えば元請け又は１次請けのベンダ）を「プライム」と表し、プライムがプログラム開発を発注したベンダ（すなわち、例えば２次請けのベンダ等）を単に「ベンダ」と表すものとする。
【００１５】
ベンダ環境Ｅ１００には、１以上のベンダ開発装置１０が含まれる。ベンダ開発装置１０は、ベンダにおけるプログラム開発の担当者等（以下、「ベンダ担当者」と表す。）が利用するコンピュータである。
【００１６】
ベンダ開発装置１０には、ベンダ担当者等が作成したソースコードをコンパイルするためのコンパイラ１００がインストールされている。また、ベンダ開発装置１０は、記憶部１１０を有する。記憶部１１０には、ソースコードのコーディング規約等が定義された規約設定ファイル４００が記憶されている。なお、コンパイルとは、プログラミング言語で記述されたソースコードから、例えばバイナリや機械語等で表されるオブジェクトコードを生成する処理のことである。なお、ソースコード及びオブジェクトコードは、それぞれ「ソースファイル」及び「オブジェクトファイル」とも称される。
【００１７】
ベンダ開発装置１０のコンパイラ１００は、ソースコードのコンパイルする際に、規約設定ファイル４００を参照し、コーディング規約が満たされている否かを判定する。そして、ベンダ開発装置１０のコンパイラ１００は、コーディング規約が満たされていると判定した場合に、所定の認証コードが含まれるオブジェクトコードを生成する。
【００１８】
このように、本実施形態に係るベンダ開発装置１０は、コーディング規約を満たす場合に、ソースコードからオブジェクトコードを生成する。言い換えれば、本実施形態に係るベンダ開発装置１０は、コーディング規約を満たしていないソースコードからはオブジェクトコードを生成しない。
【００１９】
また、本実施形態に係るベンダ開発装置１０は、所定の認証コードが含まれるオブジェクトコードを生成する。認証コードがオブジェクトコードに含まれることで、コーディング規約を満たすソースコードから生成されたオブジェクトコードであることが担保される。
【００２０】
なお、複数のベンダ環境Ｅ１００を区別するときは、「ベンダ環境Ｅ１００−１」、「ベンダ環境Ｅ１００−２」等と表す。ベンダ環境Ｅ１００−１は、例えば、あるモジュールのプログラム開発をプライムベンダが発注したベンダＡのシステム環境である。また、ベンダ環境Ｅ１００−２は、例えば、別のあるモジュールのプログラム開発をプライムベンダが発注したベンダＢのシステム環境である。
【００２１】
プライム環境Ｅ２００には、１以上のプライム開発装置２０が含まれる。プライム開発装置２０は、プライムにおけるプログラム開発の担当者等（以下、「プライム担当者」）が利用するコンピュータである。
【００２２】
プライム開発装置２０は、各ベンダから納品等されたオブジェクトコードから実行可能ファイルを生成するためのリンカ２００と、実行可能ファイルの正当性をチェックするための実行チェックプログラム３００とがインストールされている。また、プライム開発装置２０は、記憶部３１０を有する。記憶部３１０には、各ベンダに配布等される規約設定ファイル４００が記憶されている。
【００２３】
プライム開発装置２０のリンカ２００は、各ベンダから納品等されたオブジェクトコードや必要なライブラリ等をリンクして、所定の認証コードが含まれる実行可能ファイルを生成する。また、プライム開発装置２０の実行チェックプログラム３００は、実行可能ファイルが実行される際に、当該実行可能ファイルの正当性をチェック（すなわち、認証コードが含まれるか否かをチェック）する。そして、プライム開発装置２０の実行チェックプログラム３００は、実行可能ファイルが正当でない場合（すなわち、認証コードが含まれない場合）、当該実行可能ファイルを実行させない。
【００２４】
このように、本実施形態に係るプライム開発装置２０は、リンカ２００により生成された実行可能ファイルが実行される際に、当該実行可能ファイルの正当性をチェックする。実行可能ファイルの正当性がチェックされることで、本実施形態に係るベンダ開発装置１０でコンパイルされていないオブジェクトコードが混入した実行可能ファイルは実行できないことが担保される。
【００２５】
なお、図１に示すプログラム開発システム１の構成は一例であって、他の構成であっても良い。例えば、ベンダ開発装置１０及びプライム開発装置２０は、複数台のコンピュータで構成されていても良い。また、例えば、プライム開発装置２０のリンカ２００及び実行チェックプログラム３００が１つのプログラムで構成されていても良い。
【００２６】
＜ベンダ開発装置１０によるコンパイル処理の概略＞
以降では、本実施形態に係るベンダ開発装置１０のコンパイラ１００がソースコード１０００をコンパイルすることで、オブジェクトコード２０００を生成する処理の概略について、図２を参照しながら説明する。図２は、本実施形態に係るベンダ開発装置１０によるコンパイル処理の概略を説明する図である。
【００２７】
Ｓ１１）まず、コンパイラ１００は、ベンダ担当者等により作成されたソースコード１０００を入力する。
【００２８】
Ｓ１２）次に、コンパイラ１００は、記憶部１１０に記憶されている規約設定ファイル４００を参照して、ソースコード１０００がコーディング規約を満たしているか否かを判定する。
【００２９】
ここで、規約設定ファイル４００には、コーディング規約が定義されている。コーディング規約には、例えば、「ソースコード全体の最大行数」、「１つの関数内の最大行数」、「１つの関数内の分岐数」、「１つの関数内で呼び出される関数の数」等が挙げられる。
【００３０】
また、規約設定ファイルには、認証コード４１０が定義されている。認証コード４１０は、プライム担当者が実行可能ファイルの正当性をチェックするための情報である。
【００３１】
規約設定ファイル４００は、プライム担当者等により作成され、暗号化された上で各ベンダに予め配布される。規約設定ファイル４００の暗号化は必須ではないが、暗号化により、例えば、ベンダが規約設定ファイル４００を改ざんする等の不正を防止することができる。
【００３２】
Ｓ１３−１）コンパイラ１００は、規約設定ファイル４００に定義されているコーディング規約をソースコード１０００が満たしている場合、認証コード４１０が含まれるオブジェクトコード２０００を生成する。
【００３３】
Ｓ１３−２）一方で、コンパイラ１００は、規約設定ファイル４００に定義されているコーディング規約をソースコード１０００が満たしていない場合、オブジェクトコード２０００を生成しない。この場合、コンパイラ１００は、コンパイルエラーを示す画面を表示する。
【００３４】
以上のように、本実施形態に係るベンダ開発装置１０は、コーディング規約を満たしているソースコード１０００からオブジェクトコード２０００を生成する。一方で、本実施形態に係るベンダ開発装置１０は、コーディング規約を満たしていないソースコード１０００からはオブジェクトコード２０００を生成しない。
【００３５】
このため、本実施形態に係るベンダ開発装置１０によれば、コーディング規約を満たしていないソースコード１０００や当該ソースコード１０００から生成されたオブジェクトコード２０００がプライムに納品等されることがない。したがって、本実施形態に係るベンダ開発装置１０によれば、プログラム開発の品質を確保することができる。
【００３６】
また、プライム担当者は、例えば、各ベンダから納品等されたソースコード１０００がコーディング規約を満たしているか等を確認する必要がなくなる。このため、本実施形態に係るベンダ開発装置１０によれば、各ベンダから納品等されたソースコード１０００やオブジェクトコード２０００等をプライム担当者が確認する作業に要する時間等を軽減することができる。
【００３７】
＜プライム開発装置２０によるリンク及び実行処理＞
以降では、本実施形態に係るプライム開発装置２０のリンカ２００が実行可能ファイル３０００を生成した上で、実行チェックプログラム３００が実行可能ファイル３０００の正当性をチェックする処理の概略について、図３を参照しながら説明する。図３は、本実施形態に係るプライム開発装置２０によるリンク及び実行処理の概略を説明する図である。
【００３８】
図３では、リンクすることで１つの実行可能ファイル３０００が生成されるオブジェクトコード２０００−１と、オブジェクトコード２０００−２と、オブジェクトコード２０００−３とをプライムが各ベンダから納品されたものとする。また、各オブジェクトコード２０００−１〜２０００−３には、同一の認証コード４１０が含まれるものとする。
【００３９】
Ｓ２１）まず、リンカ２００は、各オブジェクトコード２０００−１〜２０００−３を入力する。
【００４０】
Ｓ２２）次に、リンカ２００は、各オブジェクトコード２０００−１〜２０００−３をリンクして、各オブジェクトコード２０００−１〜２０００−３にそれぞれ含まれる認証コード４１０を含む実行可能ファイル３０００を生成する。すなわち、この場合、リンカ２００は、３つの認証コード４１０を含む実行可能ファイル３０００を生成する。
【００４１】
Ｓ３１）実行可能ファイル３０００が実行される場合、実行チェックプログラム３００は、当該実行可能ファイル３０００を入力する。
【００４２】
Ｓ３２）次に、実行チェックプログラム３００は、記憶部３１０に記憶されている規約設定ファイル４００を参照して、実行可能ファイル３０００の正当性をチェックする。
【００４３】
すなわち、実行チェックプログラム３００は、規約設定ファイル４００に定義されている認証コード４１０と同一の認証コード４１０が、リンクされたオブジェクトコード２０００と同数（図３に示す例では３つ）含まれているか否かを判定する。３つの認証コード４１０が実行可能ファイル３０００に含まれている場合、実行チェックプログラム３００は、当該実行可能ファイル３０００を正当であると判定する。一方で、３つの認証コード４１０が実行可能ファイル３０００に含まれていない場合、実行チェックプログラム３００は、当該実行可能ファイル３０００を正当でないと判定する。
【００４４】
なお、実行可能ファイル３０００が正当でないと判定される場合とは、リンクされたオブジェクトコード２０００と同数の認証コード４１０が含まれていない場合、認証コード４１０自体が異なる場合（すなわち、認証コード４１０の値が異なる場合）である。
【００４５】
Ｓ３３−１）実行可能ファイル３０００が正当であると判定された場合、実行チェックプログラム３００は、当該実行可能ファイル３０００の実行を許可する。これにより、実行可能ファイル３０００が実行される。
【００４６】
Ｓ３３−２）実行可能ファイル３０００が正当でないと判定された場合、実行チェックプログラム３００は、実行可能ファイル３０００を実行させない。この場合、実行チェックプログラム３００は、実行可能ファイル３０００が実行できないことを示すエラー画面（実行エラー画面）を表示する。
【００４７】
以上のように、本実施形態に係るプライム開発装置２０は、１以上のオブジェクトコード２０００をリンクして、これらオブジェクトコード２０００にそれぞれ含まれている認証コード４１０含む実行可能ファイル３０００を生成する。
【００４８】
また、本実施形態に係るプライム開発装置２０は、実行可能ファイル３０００が実行される際に、当該実行可能ファイル３０００に含まれる認証コード４１０の値と、認証コード４１０の数とが正しいか否かを判定することで、正当性をチェックする。これにより、本実施形態に係るプライム開発装置２０は、不正なオブジェクトコード２０００（すなわち、ベンダ開発装置１０でコンパイルされていないオブジェクトコード２０００）の混入を防止することができる。したがって、本実施形態に係るプライム開発装置２０によれば、プログラム開発の品質を確保することができる。
【００４９】
＜ハードウェア構成＞
次に、本実施形態に係るベンダ開発装置１０及びプライム開発装置２０のハードウェア構成について、図４を参照しながら説明する。図４は、本実施形態に係るベンダ開発装置１０及びプライム開発装置２０のハードウェア構成の一例を示す図である。なお、ベンダ開発装置１０及びプライム開発装置２０は、同様のハードウェア構成を有しているため、以降では、主に、ベンダ開発装置１０のハードウェア構成について説明する。
【００５０】
図４に示すように、本実施形態に係るベンダ開発装置１０は、入力装置１１と、表示装置１２と、外部Ｉ／Ｆ１３と、通信Ｉ／Ｆ１４とを有する。また、本実施形態に係るベンダ開発装置１０は、ＲＯＭ（Read  Only  Memory）１５と、ＲＡＭ（Random  Access  Memory）１６と、ＣＰＵ（Central  Processing  Unit）１７と、補助記憶装置１８とを有する。これら各ハードウェアは、それぞれがバス１９で相互に接続されている。
【００５１】
入力装置１１は、例えばキーボードやマウス、タッチパネル等であり、ベンダ開発装置１０に各種の操作信号を入力するのに用いられる。表示装置１２は、例えばディスプレイ等であり、ベンダ開発装置１０による各種の処理結果を表示する。
【００５２】
外部Ｉ／Ｆ１３は、外部装置とのインタフェースである。外部装置には、記録媒体１３ａ等がある。ベンダ開発装置１０は、外部Ｉ／Ｆ１３を介して、記録媒体１３ａの読み取りや書き込みを行うことができる。
【００５３】
記録媒体１３ａには、例えば、ＳＤメモリカード(SD  memory  card）やＵＳＢ（Universal  Serial  Bus）メモリ、ＣＤ（Compact  Disk）、ＤＶＤ（Digital  Versatile  Disk）等がある。
【００５４】
通信Ｉ／Ｆ１４は、ベンダ開発装置１０がネットワークＮに接続するためのインタフェースである。ベンダ開発装置１０は、通信Ｉ／Ｆ１４を介して、プライム開発装置２０と通信を行うことができる。
【００５５】
ＲＯＭ１５は、電源を切ってもデータを保持することができる不揮発性の半導体メモリである。ＲＡＭ１６は、プログラムやデータを一時保持する揮発性の半導体メモリである。ＣＰＵ１７は、例えば補助記憶装置１８やＲＯＭ１５等からプログラムやデータをＲＡＭ１６上に読み出して、各種処理を実行する演算装置である。
【００５６】
補助記憶装置１８は、例えばＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）等であり、プログラムやデータを格納している不揮発性のメモリである。補助記憶装置１８には、例えば、基本ソフトウェアであるＯＳ（Operating  System）や各種アプリケーションプログラム、本実施形態を実現するプログラム（コンパイラ１００、リンカ２００及び実行チェックプログラム３００）等が格納される。
【００５７】
本実施形態に係るベンダ開発装置１０及びプライム開発装置２０は、図４に示すハードウェア構成を有することにより、後述する各種処理が実現される。
【００５８】
＜機能構成＞
次に、本実施形態に係るベンダ開発装置１０及びプライム開発装置２０の機能構成について、図５を参照しながら説明する。図５は、本実施形態に係るベンダ開発装置１０及びプライム開発装置２０の機能構成の一例を示す図である。
【００５９】
図５に示すように、本実施形態に係るベンダ開発装置１０は、入力部１０１と、字句解析部１０２と、構文解析部１０３と、復号部１０４と、規約判定部１０５と、領域確保部１０６と、オブジェクト生成部１０７と、表示制御部１０８とを有する。これら各部は、コンパイラ１００が、ベンダ開発装置１０のＣＰＵ１７に実行させる処理により実現される。
【００６０】
また、本実施形態に係るベンダ開発装置１０は、記憶部１１０を有する。当該記憶部１１０は、例えば、ベンダ開発装置１０の補助記憶装置１８を用いて実現可能である。なお、当該記憶部１１０は、ベンダ開発装置１０とネットワークを介して接続される記憶装置等を用いて実現されていても良い。
【００６１】
入力部１０１は、ベンダ担当者等により作成されたソースコード１０００を入力する。ソースコード１０００は、コンパイラ１００がコンパイル可能なプログラミング言語で処理が記述されている。
【００６２】
字句解析部１０２は、入力部１０１が入力したソースコード１０００の字句解析を行う。字句解析では、ソースコード１０００に含まれる字句（これは、「トークン」とも称される。）のリストが生成される。
【００６３】
構文解析部１０３は、字句解析部１０２により字句解析が行われたソースコード１０００の構文解析を行う。構文解析では、字句解析部１０２により得られたトークンのリストから、ソースコード１０００の構文を表す木構造のデータ（すなわち、構文木）が生成される。
【００６４】
字句解析部１０２による字句解析と、構文解析部１０３による構文解析とが行われることで、ソースコード１０００全体の最大行数（すなわち、コメント等を除いた行数）や１つの関数内の分岐数、１つの関数内で呼び出される関数の数等が特定される。
【００６５】
復号部１０４は、記憶部１１０に記憶されている暗号化された規約設定ファイル４００を復号する。
【００６６】
規約判定部１０５は、字句解析及び構文解析が行われたソースコード１０００が、規約設定ファイル４００に定義されているコーディング規約を満たすか否かを判定する。すなわち、規約判定部１０５は、例えば、ソースコード１０００全体の最大行数や１つの関数内の分岐数、１つの関数内で呼び出される関数の数等がコーディング規約を満たすか否かを判定する。
【００６７】
領域確保部１０６は、規約判定部１０５によりソースコード１０００がコーディング規約を満たすと判定された場合、ソースコード１０００に記述された変数等のメモリ領域（静的変数のメモリ領域）の確保を行う。
【００６８】
オブジェクト生成部１０７は、規約設定ファイル４００に定義されている認証コード４１０が含まれるオブジェクトコード２０００を生成する。
【００６９】
表示制御部１０８は、規約判定部１０５によりソースコード１０００がコーディング規約を満たしていないと判定された場合、コンパイルエラー画面を表示する。
【００７０】
記憶部１１０は、暗号化された規約設定ファイル４００を記憶する。規約設定ファイル４００は、上述したように、プライム担当者等により作成され、暗号化された上で各ベンダに配布等される。規約設定ファイル４００の詳細については後述する。
【００７１】
図５に示すように、本実施形態に係るプライム開発装置２０は、入力部２０１と、実行可能ファイル生成部２０２とを有する。これら各部は、リンカ２００が、プライム開発装置２０のＣＰＵ１７に実行させる処理により実現される。
【００７２】
また、本実施形態に係るプライム開発装置２０は、入力部３０１と、復号部３０２と、正当性判定部３０３と、実行制御部３０４と、表示制御部３０５とを有する。これら各部は、実行チェックプログラム３００が、プライム開発装置２０のＣＰＵ１７に実行させる処理により実現される。
【００７３】
更に、本実施形態に係るプライム開発装置２０は、記憶部３１０を有する。当該記憶部３１０は、例えば、プライム開発装置２０の補助記憶装置１８を用いて実現可能である。なお、当該記憶部３１０は、プライム開発装置２０とネットワークを介して接続される記憶装置等を用いて実現されていても良い。
【００７４】
入力部２０１は、各ベンダから納品等されたオブジェクトコード２０００のうち、リンクすることで１つの実行可能ファイル３０００が生成される１以上のオブジェクトコード２０００を入力する。
【００７５】
実行可能ファイル生成部２０２は、入力部２０１が入力したオブジェクトコード２０００から実行可能ファイル３０００を生成する。このとき、実行可能ファイル生成部２０２は、入力部２０１が入力したオブジェクトコード２０００にそれぞれ含まれている認証コード４１０が含まれる実行可能ファイル３０００を生成する。
【００７６】
入力部３０１は、実行可能ファイル３０００の実行指示がプライム担当者等により行われた場合、当該実行可能ファイル３０００を入力する。
【００７７】
復号部３０２は、記憶部３１０に記憶されている暗号化された規約設定ファイル４００を復号する。
【００７８】
正当性判定部３０３は、入力部３０１が入力した実行可能ファイル３０００の正当性を判定する。すなわち、正当性判定部３０３は、実行可能ファイル３０００に含まれる認証コード４１０の値と、認証コード４１０の数とが正しいか否かを判定する。
【００７９】
実行制御部３０４は、正当性判定部３０３により実行可能ファイル３０００が正当であると判定された場合、当該実行可能ファイル３０００の実行を許可する。これにより、実行可能ファイル３０００が実行される。
【００８０】
表示制御部３０５は、正当性判定部３０３により実行可能ファイル３０００が正当でないと判定された場合、実行エラー画面を表示する。
【００８１】
記憶部３１０は、暗号化された規約設定ファイル４００を記憶する。規約設定ファイル４００は、上述したように、プライム担当者等により予め作成され、暗号化された上で記憶部３１０に保存される。なお、記憶部３１０に記憶されている規約設定ファイル４００は必ずしも暗号化されている必要はない。
【００８２】
ここで、記憶部１１０及び記憶部３１０に記憶されている規約設定ファイル４００の一例について、図６を参照しながら説明する。図６は、規約設定ファイル４００の一例を示す図である。
【００８３】
図６に示す規約設定ファイル４００には、ソースコード１０００全体に関するコーディング規約４０１と、ソースコード１０００に記述される関数に関するコーディング規約４０２〜４０４と、認証コード４１０とが定義されている。
【００８４】
コーディング規約４０１は、ソースコード１０００全体の最大行数を示すコーディング規約である。図６に示す例では、「ＬＩＮＥ＿ＭＡＸ＝５００」が定義されている。これは、ソースコード１０００全体の行数を５００行以内にすることを示すコーディング規約である。
【００８５】
コーディング規約４０２は、１つの関数内における最大行数を示すコーディング規約である。図６に示す例では、「ＬＩＮＥ＿ＭＡＸ＝５０」が定義されている。これは、ソースコード１０００に記述される１つの関数内における行数を５０行以内にすることを示すコーディング規約である。
【００８６】
コーディング規約４０３は、１つの関数内における分岐数（例えば、ｉｆ文の数）を示すコーディング規約である。図６に示す例では、「ＢＲＡＮＣＨ＿ＭＡＸ＝５」が定義されている。これは、ソースコード１０００に記述される１つの関数内における分岐数を５つ以内にすることを示すコーディング規約である。
【００８７】
コーディング規約４０４は、１つの関数内で呼び出される関数の数を示すコーディング規約である。図６に示す例では、「ＦＵＮＣＴＩＯＮ＿ＣＡＬＬ＿ＭＡＸ＝５」が定義されている。これは、ソースコード１０００に記述される１つの関数内における関数呼び出しの数を５つ以内にすることを示すコーディング規約である。
【００８８】
認証コード４１０は、オブジェクトコード２０００に含まれる認証コードである。図６に示す例では、「ＣＯＤＥ＝２０１７＿ＢＵＩＬＤ＿０１」が定義されている。これは、認証コード４１０の値が「２０１７＿ＢＵＩＬＤ＿０１」であることを示している。
【００８９】
このように、規約設定ファイル４００には、プライムが各ベンダに要請するコーディング規約と、実行可能ファイル３０００の正当性をチェックするための認証コードとが定義されている。
【００９０】
なお、規約設定ファイル４００に定義されるコーディング規約には、上記以外にも、例えば、「１つの関数内におけるループの数（例えば、ｆｏｒ文の数）」や「ｇｏｔｏ文の禁止」等が挙げられる。
【００９１】
＜ベンダ開発装置１０によるコンパイル処理＞
以降では、ベンダ開発装置１０がソースコード１０００をコンパイルして、オブジェクトコード２０００を生成する処理について、図７を参照しながら説明する。図７は、本実施形態に係るベンダ開発装置１０によるコンパイル処理の一例を示すフローチャートである。
【００９２】
まず、入力部１０１は、ベンダ担当者等により作成されたソースコード１０００を入力する（ステップＳ１０１）。
【００９３】
次に、字句解析部１０２は、入力部１０１が入力したソースコード１０００の字句解析を行う（ステップＳ１０２）。字句解析により、ソースコード１０００に含まれる字句のリスト（すなわち、トークンリスト）が生成される。
【００９４】
次に、構文解析部１０３は、字句解析部１０２により字句解析が行われたソースコード１０００の構文解析を行う（ステップＳ１０３）。構文解析により、トークンリストから構文木が生成される。構文木が生成されることで、ソースコード１０００全体の行数、関数を示す字句の数、関数内の行数、特定の処理を示す字句（例えば、分岐処理を示す字句「ｉｆ」）の数等が特定される。
【００９５】
次に、復号部１０４は、暗号化されている規約設定ファイル４００を記憶部１１０から取得した上で、当該規約設定ファイル４００を復号する（ステップＳ１０４）。なお、規約設定ファイル４００は、予め決められた任意の暗号化方式で暗号化されている。
【００９６】
次に、規約判定部１０５は、上記のステップＳ１０４で復号された規約設定ファイル４００を参照して、ソースコード１０００がコーディング規約を満たすか否かを判定する（ステップＳ１０５）。
【００９７】
すなわち、規約判定部１０５は、上記のステップＳ１０３の構文解析により特定された情報（ソースコード１０００全体の行数や関数を示す字句の数、関数内の行数、分岐処理を示す字句の数等）が、規約設定ファイル４００に定義されたコーディング規約を満たすか否かを判定する。
【００９８】
より具体的には、例えば、規約判定部１０５は、ソースコード１０００全体の行数が、規約設定ファイル４００のコーディング規約４０１を満たすか否か（すなわち、ソースコード１０００全体の行数が５００行以内であるか否か）を判定する。同様に、例えば、規約判定部１０５は、ソースコード１０００に記述された各関数内における行数が、規約設定ファイル４００のコーディング規約４０２を満たすか否か（すなわち、各関数内における行数が５０行以内であるか否か）を判定する。他のコーディング規約４０３〜４０４についても同様に、規約判定部１０５は、ソースコード１０００が、これらのコーディング規約４０３〜４０４を満たすか否かを判定する。
【００９９】
ステップＳ１０５において、規約設定ファイル４００に定義されている全てのコーディング規約を満たすと判定された場合、領域確保部１０６は、ソースコード１０００に記述された変数等のメモリ領域を確保する（ステップＳ１０６）。
【０１００】
次に、オブジェクト生成部１０７は、規約設定ファイル４００に定義されている認証コード４１０が含まれるオブジェクトコード２０００を生成する（ステップＳ１０７）。すなわち、オブジェクト生成部１０７は、構文解析で得られた構文木をバイナリや機械語等に変換して、規約設定ファイル４００に定義されている認証コード４１０を含めることで、オブジェクトコード２０００を生成する処理のことである。オブジェクト生成部１０７は、例えば、認証コード４１０をオブジェクトコード２０００の予め決められた位置（例えば、先頭からｎバイト目）に含めるようにすれば良い。
【０１０１】
これにより、コーディング規約を満たす場合に、認証コード４１０が含まれるオブジェクトコード２０００がソースコード１０００から生成される。なお、オブジェクトコード２０００は、バイナリや機械語に限られず、例えば、バイトコード等で表されていても良い。
【０１０２】
一方、ステップＳ１０５において、規約設定ファイル４００に定義されている少なくとも１つのコーディング規約を満たさないと判定された場合、表示制御部１０８は、例えば図８に示すコンパイルエラー画面Ｇ１００を表示する（ステップＳ１０８）。
【０１０３】
図８に示すコンパイルエラー画面Ｇ１００は、ソースコード１０００がコーディング規約を満たしていないことを示すエラー画面である。図８に示すコンパイルエラー画面Ｇ１００には、ソースコード１０００が満たしていないコーディング規約に関する情報が表示される表示欄Ｇ１０１が含まれる。
【０１０４】
ベンダ担当者は、表示欄Ｇ１０１を参照することで、ソースコード１０００が満たしていないコーディング規約と、コーディング規約を満たしていない該当箇所とを知ることができる。これにより、ベンダ担当者は、コーディング規約を満たすようにソースコード１０００を修正することができる。
【０１０５】
＜プライム開発装置２０によるリンク処理＞
以降では、プライム開発装置２０が、各ベンダから納品等されたオブジェクトコード２０００をリンクして、実行可能ファイル３０００を生成する処理について、図９を参照しながら説明する。図９は、本実施形態に係るプライム開発装置２０によるリンク処理の一例を示すフローチャートである。
【０１０６】
まず、入力部２０１は、オブジェクトコード２０００のうち、リンクすることで１つの実行可能ファイル３０００が生成される１以上のオブジェクトコード２０００を入力する（ステップＳ２０１）。
【０１０７】
このようなオブジェクトコード２０００は、各ベンダ担当者等がベンダ開発装置１０で上記の図７に示すコンパイル処理を行うことで生成される。プライム開発装置２０は、様々な方法によりベンダ開発装置１０からオブジェクトコード２０００を取得することができる。
【０１０８】
例えば、プライム開発装置２０は、ネットワークＮを介して、電子メールやファイルアップロード等によりベンダ開発装置１０からオブジェクトコード２０００を取得しても良い。また、例えば、プライム開発装置２０は、ベンダ開発装置１０により所定のリポジトリに格納されたオブジェクトコード２０００を取得しても良い。更に、例えば、プライム開発装置２０は、オブジェクトコード２０００が記録された記録媒体１３ａから当該オブジェクトコード２０００を取得しても良い。
【０１０９】
次に、実行可能ファイル生成部２０２は、入力部２０１が入力した１以上のオブジェクトコード２０００をリンクして、実行可能ファイル３０００を生成する（ステップＳ２０２）。このとき、実行可能ファイル生成部２０２は、これら１以上のオブジェクトコード２０００にそれぞれ含まれている認証コード４１０が含まれる実行可能ファイル３０００を生成する。
【０１１０】
例えば、認証コード４１０がそれぞれ含まれる３つのオブジェクトコード２０００をリンクする場合、実行可能ファイル生成部２０２は、３つの認証コード４１０が含まれる実行可能ファイル３０００を生成する。実行可能ファイル生成部２０２は、例えば、オブジェクトコード２０００にそれぞれ含まれる認証コード４１０を、実行可能ファイル３０００の予め決められた位置（例えば、先頭からｍバイト目）に含めるようにすれば良い。
【０１１１】
これにより、リンクされたオブジェクトコード２０００に応じた数の認証コード４１０が含まれる実行可能ファイル３０００が生成される。
【０１１２】
＜プライム開発装置２０による実行可能ファイル３０００の実行処理＞
以降では、プライム開発装置２０が、実行可能ファイル３０００が実行される際に、当該実行可能ファイル３０００の正当性を判定する処理について、図１０を参照しながら説明する。図１０は、本実施形態に係るプライム開発装置２０による実行可能ファイルの実行処理の一例を示すフローチャートである。
【０１１３】
まず、入力部３０１は、実行可能ファイル３０００の実行指示がプライム担当者等により行われた場合、当該実行可能ファイル３０００を入力する（ステップＳ３０１）。なお、プライム担当者等は、例えば、実行可能ファイル３０００を示すアイコンをクリックしたり、実行可能ファイル３０００のファイル名を指定した実行コマンドをシェルに入力したりすることで、実行可能ファイル３０００の実行指示を行うことができる。
【０１１４】
次に、復号部３０２は、暗号化されている規約設定ファイル４００を記憶部３１０から取得した上で、当該規約設定ファイル４００を復号する（ステップＳ３０２）。なお、規約設定ファイル４００が暗号化されていない場合は、当該復号は不要である。
【０１１５】
次に、正当性判定部３０３は、上記のステップＳ３０１で入力された実行可能ファイル３０００の正当性を判定する（ステップＳ３０３）。すなわち、正当性判定部３０３は、実行可能ファイル３０００に含まれる認証コード４１０の値と、認証コード４１０の数とが正しいか否かを判定する。
【０１１６】
例えば、実行可能ファイル３０００が３つのオブジェクトコード２０００−１〜２０００−３をリンクして生成されたものとする。また、例えば、上記のステップＳ３０２で復号された規約設定ファイル４００に定義された認証コード４１０が「２０１７＿ＢＵＩＬＤ＿０１」であるものとする。この場合、正当性判定部３０３は、実行可能ファイル３０００に３つの認証コード４１０が含まれ、かつ、これら３つの認証コード４１０の値が「２０１７＿ＢＵＩＬＤ＿０１」であるか否かを判定する。そして、正当性判定部３０３は、実行可能ファイル３０００に３つの認証コード４１０が含まれ、かつ、これら３つの認証コード４１０の値が「２０１７＿ＢＵＩＬＤ＿０１」である場合に、当該実行可能ファイル３０００を正当であると判定する。一方で、正当性判定部３０３は、実行可能ファイル３０００に３つの認証コード４１０が含まれないか、又は少なくとも１つの認証コード４１０の値が「２０１７＿ＢＵＩＬＤ＿０１」でない場合に、当該実行可能ファイル３０００を正当でないと判定する。
【０１１７】
なお、各ベンダに配布等される規約設定ファイル４００に含まれる認証コード４１０の値は、それぞれ異なっていても良い。例えば、ベンダＡに配布等される規約設定ファイル４００に含まれる認証コード４１０の値が「２０１７＿ＢＵＩＬＤ＿０１Ａ」、ベンダＢに配布等される規約設定ファイル４００に含まれる認証コード４１０の値が「２０１７＿ＢＵＩＬＤ＿０１Ｂ」等であっても良い。このとき、例えば、オブジェクトコード２０００−１〜２０００−２がベンダＡから納品等されたものであり、オブジェクトコード２０００−３がベンダＢから納品等されたものであるとする。この場合、正当性判定部３０３は、「２０１７＿ＢＵＩＬＤ＿０１Ａ」である２つの認証コード４１０と、「２０１７＿ＢＵＩＬＤ＿０１Ｂ」である１つの認証コード４１０とが実行可能ファイル３０００に含まれているか否かを判定する。
【０１１８】
ステップＳ３０３において、実行可能ファイル３０００が正当であると判定された場合、実行制御部３０４は、当該実行可能ファイル３０００の実行を許可する（ステップＳ３０４）。実行制御部３０４により実行が許可されることで、実行可能ファイル３０００が実行される。
【０１１９】
一方、ステップＳ３０３において、実行可能ファイル３０００が正当でないと判定された場合、表示制御部３０５は、例えば図１１に示す実行エラー画面Ｇ２００を表示する（ステップＳ３０５）。
【０１２０】
図１１に示す実行エラー画面Ｇ２００は、実行可能ファイル３０００が正当でないことを示すエラー画面である。プライム担当者は、実行エラー画面Ｇ２００を参照することで、実行可能ファイル３０００が正当でない（すなわち、オブジェクトコード２０００がベンダ開発装置１０で生成されていない）ことを知ることができる。したがって、プライム担当者は、コーディング規約を満たしていない不正なオブジェクトコード２０００が混入している可能であることを知ることができる。
【０１２１】
以上のように、本実施形態に係るプログラム開発システム１では、ベンダ開発装置１０がソースコード１０００をコンパイルする場合に、コーディング規約が満たされていないときはオブジェクトコード２０００が生成されない。これにより、コーディング規約を満たしていないソースコード１０００からオブジェクトコード２０００が生成される事態を防止することができ、各ベンダ間におけるプログラム開発の品質を確保することができる。
【０１２２】
また、本実施形態に係るプログラム開発システム１では、プライム開発装置２０が実行可能ファイル３０００を実行する場合に、当該実行可能ファイル３０００に含まれる認証コード４１０の数と値とが正当である否かを判定する。これにより、ベンダ開発装置１０で生成されていない不正なオブジェクトコード２０００から実行可能ファイル３０００が生成される事態を防止することができ、最終的に得られる実行可能ファイル３０００の品質を確保することができる。
【０１２３】
以上、本発明の実施形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１２４】
以上の説明に関し、更に以下の項を開示する。
（付記１）
コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータに実行させることを特徴とするプログラム。
（付記２）
前記記憶部は、更に、所定の認証コードを記憶し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記認証コードが含まれ、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータに実行させることを特徴とする付記１に記載のプログラム。
（付記３）
前記記憶部は、所定の暗号化方式で暗号化されているコーディング規約に関する情報を記憶し、
前記暗号化されているコーディング規約に関する情報を復号し、
復号したコーディング規約に関する情報から、前記ソースコードが前記コーディング規約を満たすか否かを判定する、
処理をコンピュータに実行させることを特徴とする付記１又は２に記載のプログラム。
（付記４）
第１の認証コードが記憶された記憶部を参照して、所定の個数のオブジェクトコードをリンクすることで生成された実行可能形式のデータに含まれる第２の認証コードの数が前記個数と一致し、かつ、前記第２の認証コードが前記第１の認証コードに一致するか否かを判定し、
前記実行可能形式のデータに含まれる第２の認証コードの数が前記個数と一致し、かつ、前記第２の認証コードが前記第１の認証コードに一致すると判定された場合に、前記データの実行を許可する、
処理をコンピュータに実行させることを特徴とするプログラム。
（付記５）
コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定する判定部と、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する生成部と、
を有することを特徴とする情報処理装置。
（付記６）
前記記憶部は、更に、所定の認証コードを記憶し、
前記生成部は、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記認証コードが含まれ、前記ソースコードに対応するオブジェクトコードを生成する、
ことを特徴とする付記５に記載の情報処理装置。
（付記７）
前記記憶部は、所定の暗号化方式で暗号化されているコーディング規約に関する情報を記憶し、
前記暗号化されているコーディング規約に関する情報を復号する復号部を有し、
前記判定部は、
復号したコーディング規約に関する情報から、前記ソースコードが前記コーディング規約を満たすか否かを判定する、
ことを特徴とする付記５又は６に記載の情報処理装置。
（付記８）
コーディング規約に関する情報が記憶された記憶部を参照して、プログラミング言語で処理が記述されたソースコードが前記コーディング規約を満たすか否かを判定し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータが実行することを特徴とする情報処理方法。
（付記９）
前記記憶部は、更に、所定の認証コードを記憶し、
前記ソースコードが前記コーディング規約を満たすと判定した場合に、前記認証コードが含まれ、前記ソースコードに対応するオブジェクトコードを生成する、
処理をコンピュータが実行することを特徴とする付記５に記載の情報処理方法。
（付記１０）
前記記憶部は、所定の暗号化方式で暗号化されているコーディング規約に関する情報を記憶し、
前記暗号化されているコーディング規約に関する情報を復号し、
復号したコーディング規約に関する情報から、前記ソースコードが前記コーディング規約を満たすか否かを判定する、
処理をコンピュータが実行することを特徴とする付記８又は９に記載の情報処理方法。
【符号の説明】
【０１２５】
１        プログラム開発システム
１０      ベンダ開発装置
２０      プライム開発装置
１００    コンパイラ
１０１    入力部
１０２    字句解析部
１０３    構文解析部
１０４    復号部
１０５    規約判定部
１０６    領域確保部
１０７    オブジェクト生成部
１０８    表示制御部
１１０    記憶部
２００    リンカ
２０１    入力部
２０２    実行可能ファイル生成部
３００    実行チェックプログラム
３０１    入力部
３０２    復号部
３０３    正当性判定部
３０４    実行制御部
３０５    表示制御部
３１０    記憶部
４００    規約設定ファイル
【図１】
2019020990.tif 000003
【図２】
2019020990.tif 000004
【図３】
2019020990.tif 000005
【図４】
2019020990.tif 000006
【図５】
2019020990.tif 000007
【図６】
2019020990.tif 000008
【図７】
2019020990.tif 000009
【図８】
2019020990.tif 000010
【図９】
2019020990.tif 000011
【図１０】
2019020990.tif 000012
【図１１】
2019020990.tif 000013