(57)【特許請求の範囲】
【請求項１】
コンピュータに、
第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成し、
付加した前記識別情報について、前記第１のソースコードまたは前記第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
前記第２のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
処理を実行させることを特徴とするソースコード生成プログラム。
【請求項２】
前記生成する処理は、前記第１のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする請求項１に記載のソースコード生成プログラム。
【請求項３】
前記特定する処理は、前記第１のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする請求項１または２に記載のソースコード生成プログラム。
【請求項４】
コンピュータが実行するソースコード生成方法であって、
第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成し、
付加した前記識別情報について、前記第１のソースコードまたは前記第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
前記第２のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
処理を実行することを特徴とするソースコード生成方法。
【請求項５】
第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成する生成部と、
前記識別情報について、前記第１のソースコードまたは前記第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、前記第２のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える特定部と
を有することを特徴とするコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード生成プログラム等に関する。
【背景技術】
【０００２】
近年、ＯＳＳ（Open  Source  Software）等のソフトウェアパッケージを適用または流用することで、多機能なソフトウェア開発を短納期で開発するプロジェクトが増加している。ＯＳＳでは多種多様なハードウェアやアーキテクチャに適したソースコードが含まれており、プリプロセッサ・ディレクティブでコンフィグレーション可能な形で記述されていることが多い。また、ユーザは、簡単な操作を行うことで、ソースコードに対する十分な理解がなくても、自動で情報を集めて、プログラム実行環境で動作するプログラムにコンパイルすることができる。
【０００３】
一方、ソースコードに含まれるコンパイル手順書の構成やソースコードの内部記述が複雑化してきているため、ソースコードは、ユーザにとって可読性が低いものとなる。
【０００４】
図１２は、ＯＳＳで採用されるコンパイルの構成と実施の流れの一例を示す図である。例えば、ソフトウェアパッケージのソースコードファイル群１２をコンパイルする場合には、ユーザが、実行コマンドを入力することで開始される。例えば、「./configure./make」等の実行コマンドが入力される。
【０００５】
実行コマンドが入力されると、コンパイル手順書１０の記述通りに順次コンパイルが実行されることになる。ここで、コンパイル手順書１０には、ソースコードファイル群１２で用いるマクロ定義文や条件だけでなく、開発環境１１に格納されているスクリプトファイル１１ａやコンフィグレーションファイル１１ｂのマクロ定義を読み込む命令が含まれる場合がある。この場合には、スクリプトファイル１１ａやコンフィグレーションファイル１１ｂやソースコードファイル群１２のマクロ定義が読み込まれてコンパイルが実行される。また、コンパイル手順書１０が更に別のコンパイル手順書２０を呼び出してソースコードファイル群１２に対してコンパイルが行われる場合も多く、ソフトウェアパッケージのコンパイルが複雑化する要因となる。
【０００６】
上記のようにソフトウェアパッケージのコンパイルが複雑化しているため、ユーザはコンパイルで用いるマクロ定義文や条件等のパラメータが、ソースコード内のどこに記述されているのかを把握しづらいという問題がある。
【０００７】
このため、従来技術には、ソースコードから有効な行を抽出し、ソースコードの可読性を向上させるものがある。例えば、この従来技術は、ソースコードからマクロ定義情報を抽出して記録し、マクロ定義情報を基にして、ソースコードに含まれる条件文を解析し、ソースコードの有効な行と無効な行とを判別し、判別結果から有効な行を表示する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−６４７９８号公報
【特許文献２】特開２０００−２１５０３７号公報
【特許文献３】特開２００２−３６６３６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術では、ソースコードの可読性を高めることができないという問題がある。
【００１０】
例えば、従来技術によって抽出されたソースコードの行には、本来不要であったパラメータや、抽出漏れが存在する場合がある。このため、従来技術によって抽出されたソースコードの行を参照して、ユーザがコンパイルを実行しようとすると、間違ったパラメータを設定してしまい、コンパイルに失敗する場合があった。
【００１１】
また、ソースコードファイルから単純に有効な行のみ抽出すると、設計観点のコメントが削除されるなど、無効な行を含む原始ソースコードからコンパイルされたプログラムの実行ログから読み出されていた問題発生箇所の手がかりとなる行情報が失われてしまう。
【００１２】
１つの側面では、本発明は、ソースコードの可読性を高めることができるソースコード生成プログラム、ソースコード生成方法およびコンピュータを提供することを目的とする。
【課題を解決するための手段】
【００１３】
第１の案では、コンピュータに下記の処理を実行させる。コンピュータは、第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成する。コンピュータは、付加した識別情報について、第１のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定する。コンピュータは、第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いても良い。コンピュータは、第２のソースコードに含まれる、特定した識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える。
【発明の効果】
【００１４】
ソースコードの可読性を高めることができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本実施例に係るソースコード抽出装置の構成を示す機能ブロック図である。
【図２】図２は、コンパイル手順書情報の一例を示す図である。
【図３】図３は、実行ログの一例を示す図である。
【図４】図４は、前処理ソースコードの一例を示す図である。
【図５】図５は、プリプロセス実行コードの一例を示す図である。
【図６】図６は、編集ソースコードの一例を示す図である。
【図７】図７は、識別子を削除した編集ソースコードの一例を示す図である。
【図８】図８は、本実施例に係るソースコード抽出装置の処理手順を示すフローチャートである。
【図９】図９は、デバッグ効率に関するソースコード抽出装置の効果を説明するための図である。
【図１０】図１０は、本発明をFW5630開発プロジェクトにおいて流用開発を行ったＯＳＳに対して本発明のソースコード抽出装置を適用した場合の実施結果を示す図である。
【図１１】図１１は、ソースコード抽出プログラムを実行するコンピュータの一例を示す図である。
【図１２】図１２は、ＯＳＳで採用されるコンパイルの構成と実施の流れの一例を示す図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示するソースコード生成プログラム、ソースコード生成方法およびコンピュータの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１７】
図１は、本実施例に係るソースコード抽出装置の構成を示す機能ブロック図である。ソースコード抽出装置は、コンピュータの一例である。図１に示すように、このソースコード抽出装置１００は、原始ソースコード記憶部１１０ａ、コンパイルパラメータ記憶部１１０ｂ、オブジェクトファイル記憶部１１０ｃ、ソースコード記憶部１１０ｄを有する。また、ソースコード抽出装置１００は、コンパイラ部１２０、プリプロセス部１３０を有する。
【００１８】
原始ソースコード記憶部１１０ａは、ＯＳＳの原始ソースコードを記憶する記憶部である。例えば、原始ソースコードには、図２に示すようなコンパイル手順書情報が含まれる。
【００１９】
図２は、コンパイル手順書情報の一例を示す図である。例えば、コンパイル手順書情報１０５は、コンパイル手順書情報１０５の名称「Makefile」が定義されている。コンパイル手順書情報１０５は、「プログラム名とオブジェクトファイル名」、「マクロの定義」、「サフィックスルール適用対象の拡張子の定義」、「プライマリターゲット」、「サフィックスルール」の情報を有する。なお、コンパイル手順書情報１０５の「#」で始まる行は、コメント行である。
【００２０】
例えば、図２のコンパイル手順書情報１０５では、ソースコード「xxxx.c  yyyy.c  zzzz.c」をそれぞれコンパイルすることでオブジェクト「xxxx.o  yyyy.o  zzzz.o」を作成することを定義する。そして、コンパイル手順書情報１０５では、生成したオブジェクト「xxxx.o  yyyy.o  zzzz.o」をまとめることで「hello」プログラムを作成するという手順を定義する。
【００２１】
コンパイル手順書情報１０５では、「=」の左側に変数名を定義し、「=」の右側に代入する値または文字列を定義する。例えば、「PROGRAM=hello」において、「PROGRAM」が変数名を示し、「hello」が代入する文字列を示す。「CFLAGS=-Wall  -02  -DDEBUG  -DARM  -DDEBUG_LEVEL3」において、「CFLAGS」が変数名を示し、「-Wall  -02  -DDEBUG  -DARM  -DDEBUG_LEVEL3」が代入する文字列を示す。
【００２２】
マクロの定義において「/usr/bin/gcc」はコンパイラ（gcc）を指定するものである。「-Wall  -02  -DDEBUG  -DARM  -DDEBUG_LEVEL3」について説明する。「-Wall」は、コンパイル時に一般的に問題のない警告メッセージを出力しないことを指示するものである。「-02」は、最適化レベルをレベル２にすることを指示するものである。「-D***」はマクロ定義文である。すなわち、「-Wall  -02  -DDEBUG  -DARM  -DDEBUG_LEVEL3」には、マクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」が含まれる。
【００２３】
コンパイル手順書情報１０５では、定義した変数を「$」で参照することができる。例えば、$(PROGRAM)と記述すると、「PROGRAM=hello」と定義されているため、「hello」と差し替えて実行することを意味する。
【００２４】
コンパイル手順書情報１０５のプライマリターゲットでは、ターゲットと依存ファイルを定義する。ターゲットは、作るものを示す。依存ファイルは、ターゲットを作るために使用するものを示す。例えば、「&(PROGRAM):$(OBJS)」では、ターゲットは、「PROGRAM（hello）」となり、依存ファイルは「OBJS（xxxx.o  yyyy.o  zzzz.o）」となる。これにより、「hello」を作るためには「xxxx.o  yyyy.o  zzzz.o」を用意してくださいという意味になる。
【００２５】
プライマリターゲットの「$(CC)  -o  $(PROGRAM)  $^」は、ターゲットを作成するために実行するコマンドである。「$^」は、Makefileとして予め意味が決められた変数である。例えば、「$^」は依存ファイルの全てを示すものであり、ここでは、「$(OBJS)」つまり、「xxxx.o  yyyy.o  zzzz.o」を示すものとなる。
【００２６】
コンパイル手順書情報１０５のサフィックス（拡張子）ルールは、コンパイル手順書情報１０５では、決まり文句として用いられるものである。例えば、Ｃ言語の場合には、ソースコードは「.cファイル」であり、係るソースコードをコンパイルしてできるオブジェクトは「.oファイル」となる。このため、コンパイル手順書情報１０５では、「.oファイル」を使用する場合には、「.oファイル」を「.cファイル」から作るというサフィックスルールが定義されている。
【００２７】
サフィックスルールの「$(CC)  $(CFLAGS)  -c  $<」は、ターゲットを作成するために実行するコマンドである。「$<」は、最初の依存ファイルを定義するものであり、ここでは、特定の「.cソースファイル名」を示す。例えば、「.cソースファイル名」は「xxxx.c」となる。
【００２８】
図１の説明に戻る。コンパイルパラメータ記憶部１１０ｂは、後述するコンパイルパラメータ抽出部１２０ａによって抽出されるコンパイルパラメータの情報を記憶する記憶部である。
【００２９】
オブジェクトファイル記憶部１１０ｃは、後述するコンパイル実行部１２０ｂによりコンパイルされたオブジェクトファイルを記憶する記憶部である。
【００３０】
ソースコード記憶部１１０ｄは、後述するプリプロセス部１３０により生成されるソースコードを記憶する記憶部である。
【００３１】
コンパイラ部１２０は、コンパイルパラメータ抽出部１２０ａと、コンパイル実行部１２０ｂとを有する。
【００３２】
コンパイルパラメータ抽出部１２０ａは、原始ソースコード記憶部１１０ａから原始ソースコードを取得し、原始ソースコードをコンパイル実行部１２０ｂに出力することで、コンパイル実行部１２０ｂに原始ソースコードのコンパイルを実行させる。コンパイル実行部１２０ｂは、原始ソースコードに含まれるコンパイル手順書情報１０５に従って、原始ソースコードをコンパイルする。
【００３３】
また、コンパイルパラメータ抽出部１２０ａは、コンパイル実行部１２０ｂが、原始ソースコードをコンパイルする際に生成する実行ログを収集し、実行ログに記述されているマクロ定義文を抽出する。以下の説明では、コンパイルパラメータ抽出部１２０ａが抽出したマクロ定義文を、コンパイルパラメータと表記する。コンパイルパラメータ抽出部１２０ａは、コンパイルパラメータの情報を、コンパイルパラメータ記憶部１１０ｂに格納する。
【００３４】
図３は、実行ログの一例を示す図である。コンパイルパラメータ抽出部１２０ａは、実行ログ１０６を走査して、マクロ定義文を抽出する。マクロ定義文は「-D***」によって、実行ログに記述されている。ここで「***」は任意の文字列を示す。例えば、コンパイルパラメータ抽出部１２０ａは、実行ログ１０６からマクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」を抽出する。コンパイルパラメータ抽出部１２０ａは、マクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」をコンパイルパラメータとして、コンパイルパラメータ記憶部１１０ｂに格納する。
【００３５】
なお、図３では、Ｃコンパイラ（gcc）が生成する実行ログからマクロ定義文を抽出する場合について説明したが、Ｃ＋＋コンパイラ（g++）が生成する実行ログからも同様に、マクロ定義文を抽出することができる。また、コンパイルパラメータ抽出部１２０ａは、コンパイル実行部１２０ｂによるコンパイルをラップした形で実行させるものとする。
【００３６】
コンパイル実行部１２０ｂは、原始ソースコードを、コンパイル手順書情報１０５に従ってコンパイルし、オブジェクトファイルを生成する処理部である。コンパイル実行部１２０ｂは、生成したオブジェクトファイルの情報をオブジェクトファイル記憶部１１０ｃに格納する。また、コンパイル実行部１２０ｂは、コンパイル実行時の実行ログを、コンパイルパラメータ抽出部１２０ａに出力する。
【００３７】
プリプロセス部１３０は、前処理部１３０ａ、プリプロセス実行部１３０ｂ、後処理部１３０ｃを有する。前処理部１３０ａは、生成部の一例である。後処理部１３０ｃは、特定部の一例である。
【００３８】
前処理部１３０ａは、原始ソースコード記憶部１１０ａから原始ソースコードを取得し、原始ソースコードの各行にユニークな識別子をコメント文として追加する処理部である。以下の説明では、各行にユニークな識別子をコメント文として付加された原始ソースコードを、適宜、「前処理ソースコード」と表記する。前処理部１３０ａは、前処理ソースコードを、プリプロセス実行部１３０ｂに出力する。
【００３９】
図４は、前処理ソースコードの一例を示す図である。図４に示すように、前処理部１３０ａは、前処理ソースコード１０７について、プリプロセッサ・ディレクティブを除いた全ての行に、ユニークな識別子を含むコメント文「//@****」を付加する。コメント文の「****」には、ユニークな行番号が設定される。プリプロセス・ディレクティブは、「#」で始まる行である。例えば、前処理ソースコード１０７について、「int  main()」を含む行には、識別子「//@0002」が付加されている。前処理部１３０ａは、原始ソースコードの実行行および設計情報を含むコメント文や空行にも、ユニークな識別子を含むコメント文を付加する。
【００４０】
プリプロセス実行部１３０ｂは、前処理ソースコードに対して、プリプロセスを実行する処理部である。また、プリプロセス実行部１３０ｂは、プリプロセスを実行する場合に、コンパイルパラメータ記憶部１１０ｂに格納されたコンパイルパラメータをオプションとして指定する。
【００４１】
例えば、プリプロセス実行部１３０ｂは、オプションをしていたプリプロセス（/usr/bin/gcc  -E  -C  コンパイルパラメータ）を実行する。コンパイルパラメータがマクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」である場合には、プリプロセス実行部１３０ｂは下記のプリプロセスを実行する。例えば、プリプロセス実行部１３０ｂは、プリプロセス（/usr/bin/gcc  -E  -C  -DDEBUG  -DARM  -DDEBUG_LEVEL3）を実行する。プリプロセス実行部１３０ｂが、かかるコンパイルパラメータをオプションとして指定し、前処理ソースコードに対して、プリプロセスを実行すると、コンパイル手順書情報１０５に基づいて、プリプロセスを実行したことと同じことになる。
【００４２】
プリプロセス実行部１３０ｂは、前処理ソースコードに対してプリプロセスを実行した結果を、後処理部１３０ｃに出力する。以下の説明では、プリプロセスを実行した前処理ソースコードを、「プリプロセス実行コード」と適宜表記する。
【００４３】
図５は、プリプロセス実行コードの一例を示す図である。例えば、プリプロセス実行部１３０ｂは、前処理ソースコードに対してプリプロセスを実行することで、プリプロセッサ・ディレクティブが解析を解析し、実行されない行部分を削除する。また、プリプロセス実行部１３０ｂは、「#include<stdio.h>」等のヘッダファイルを展開する。プリプロセス実行部１３０ｂが、上記処理を実行することで、例えば、前処理ソースコード１０７は、プリプロセス実行コード１０８となる。
【００４４】
後処理部１３０ｃは、前処理ソースコード１０７の各行に付加された識別子と、プリプロセス実行コード１０８に残った識別子とを比較して、前処理ソースコード１０７に存在する識別子のうち、プリプロセス実行コード１０８に存在しない識別子を特定する。後処理部１３０ｃが特定した識別子は、無効となる行に付加された識別子である。
【００４５】
後処理部１３０ｃは、前処理ソースコード１０７について、特定した識別子が付加された行を、プリプロセスの結果無効となったことを示すコメント行に書き換える処理を実行する。上記処理により、プリプロセスの結果無効となったことを示すコメント行に書き換える編集を行った前処理ソースコードを、適宜、「編集ソースコード」と表記する。後処理部１３０ｃは、編集ソースコードを、ソースコード記憶部１１０ｄに格納する。
【００４６】
例えば、後処理部１３０ｃは、前処理ソースコード１０７に存在する識別子のうち、プリプロセス実行コード１０８に存在しない識別子を特定する。例えば、前処理ソースコード１０７に存在する識別子を「//@0002、//@0003、//@0005、//@0007、//@0009、//@0010」とする。また、プリプロセス実行コード１０８に存在する識別子を「//@0002、//@0003、//@0005、//@0009、//@0010」であるとする。そうすると、後処理部１３０ｃは、前処理ソースコード１０７に存在する識別子のうち、プリプロセス実行コード１０８に存在しない識別子「//@0007」を特定する。
【００４７】
後処理部１３０ｃは、上記処理によって識別子「//@0007」を特定すると、前処理ソースコード１０７について、特定した識別子「//@0007」が付加された行を、プリプロセスの結果無効となったことを示すコメント行に書き換えて、編集ソースコード１０８を生成する。
【００４８】
図６は、編集ソースコードの一例を示す図である。例えば、後処理部１３０ｃは、識別子「//@0007」が存在していた行５０を、プリプロセスの結果無効となったことを示すコメント行に書き換えることで、編集ソースコード１０８を生成する。例えば、後処理部１３０ｃは、該当するコメント行５０に、コメント「///////削除///////」を挿入する。
【００４９】
後処理部１３０ｃは、編集ソースコード１０８から、識別子を削除することで、最終的な編集ソースコードを生成する。図７は、識別子を削除した編集ソースコードの一例を示す図である。
【００５０】
次に、本実施例に係るソースコード抽出装置１００の処理手順について説明する。図８は、本実施例に係るソースコード抽出装置の処理手順を示すフローチャートである。図８に示すように、ソースコード抽出装置１００のコンパイラ部１２０は、コンパイル手順書情報を基にして原始ソースコードのコンパイルを実行する（ステップＳ１０１）。
【００５１】
コンパイラ部１２０は、コンパイル実行時の実行ログを収集し、コンパイルパラメータを記録する（ステップＳ１０２）。ソースコード抽出装置１００のプリプロセス部１３０は、原始ソースコードの各行に対して識別子を付加する（ステップＳ１０３）。
【００５２】
プリプロセス部１３０は、コンパイルパラメータを用いて、前処理ソースコードに対してプリプロセスを実行する（ステップＳ１０４）。プリプロセス部１３０は、プリプロセスの実行結果として出力されたプリプロセスコードから識別子を抽出する（ステップＳ１０５）。プリプロセス部１３０は、前処理ソースコードに存在する識別子のうち、プリプロセス実行コードに存在しない識別子を特定する（ステップＳ１０６）。プリプロセス部１３０は、前処理ソースコードについて、プリプロセスの結果無効となったことを示すコメント行に書き換えて、編集ソースコードを生成する（ステップＳ１０７）。
【００５３】
次に、本実施例に係るソースコード抽出装置１００の効果について説明する。ソースコード抽出装置１００は、コンパイルパラメータを使用し、識別子を付与したソースコードに対するプリプロセスを実行して、ソースコード中の無効となる行を特定し、無効となる行の情報をソースコードに記述した編集ソースコードを生成する。係る処理を実行することで、ソースコード抽出装置１００は、原始ソースコードから有効な行を抽出し、かつ、無効な行を削除する代わりに、コメント行に置き換えるため、ソースコードの可読性を向上させることができる。
【００５４】
また、ソースコード抽出装置１００は、コンパイル実行時に、コンパイルパラメータを自動抽出し、係るコンパイルパラメータをオプションに指定して、プリプロセスを実行する。このため、マクロ定義文の指定漏れやヒューマンエラーを防止することができ、ソースコードに対する理解が少ないユーザであっても、ソースコードの有効な行を特定することが可能になる。
【００５５】
また、ソースコード抽出装置１００は、上記のように、原始ソースコードの無効な行を削除する代わりに、該当する行が無効である旨のコメント行に置き換えるので、保守メンテナンスにおけるデバッグ効率を向上させることができる。例えば、ハードウェア・アーキテクチャ毎の処理差分記述において同じ関数名や変数名で記述されている場合でも、開発対象に特化した単一の関数名や変数名のみが抽出され、かつ、無効な行は削除されたことを示す記述（コメント文）に編集され各処理の行番号を維持できる。このため、プログラム実行ログに含まれる関数名や変数名によるキーワード検索や行番号による記述箇所特定が可能となり、ソースコードのデバッグ効率が向上する。
【００５６】
図９は、デバッグ効率に関するソースコード抽出装置の効果を説明するための図である。例えば、便宜的に、原始ソースコードを原始ソースコード２００ａとする。編集ソースコードを編集ソースコード２００ｂとする。また、実行ログ２１０ａは、原始ソースコード２００ａをコンパイルした際の実行ログである。実行ログ２１０ｂは、原始ソースコード２００ｂをコンパイルした際の実行ログである。
【００５７】
例えば、原始ソースコード２００ａと、編集ソースコード２００ｂとを比較すると、有効な行については、同じ位置関係となる。このため、例えば、実行ログ２１０ａの行番号を手がかりとして、該当する行を、編集ソースコード２００ｂから検索することができる。また、編集ソースコード２００ｂでは、無効な行は、コメント「///////削除///////」に書き換えられているため、デバッグ時のキーワードによる検索対象を絞り込むことが容易となる。例えば、原始ソースコード２００ａでは、無効な行であっても、キーワードのヒット対象となるが、編集ソースコード２００ｂは、無効な行は「///////削除///////」となっているため、ヒットしない。
【００５８】
また、ソースコード抽出装置１００によれば、流用開発および機能拡張における開発効率を向上させることができる。例えば、ソースコード抽出装置１００が実行する処理により、流用ソースコードファイル群のソースコード規模が縮小され、開発見積り精度が向上する。また、設計ドキュメントが不足している場合でも、リバース・エンジニアリングすべき箇所の抽出とドキュメント作成が容易になる。
【００５９】
また、不特定多数の開発者による分散開発の結果、更新パッチ配布が高頻度、かつ、更新内容が多数のソースコードファイルに及ぶ場合、プリプロセッサによるソースコード抽出処理によって失われる情報を維持した状態のソースコードを提供できる。例えば、編集ソースコードには、行数、コメント文、プリプロセッサ・ディレクティブ記述文が維持された状態となる。これによって、パッチファイルの有効な行に対する更新内容の適用成功保証が維持できると共に、更新内容と有効な行との関連性についての理解が容易になり、結果、配布された更新パッチの必要性や信頼性を判断することが容易となる。
【００６０】
図１０は、本発明をFW5630開発プロジェクトにおいて流用開発を行ったＯＳＳに対して本発明のソースコード抽出装置を適用した場合の実施結果を示す図である。図１０に示すように元のソースコード規模が約７分の１に縮小された。
【００６１】
ところで、本実施例で説明したコンパイラ部１２０は、原始ソースコードに対して、コンパイルを実行し、実行ログからコンパイルパラメータを抽出したがこれに限定されるものではない。例えば、コンパイラ部１２０は、前処理部１３０ａによって前処理が実行された前処理ソースコードに対して、コンパイルを実行し、実行ログからコンパイルパラメータを抽出しても良い。
【００６２】
次に、上記の実施例に示したソースコード抽出装置１００と同様の機能を実現するソースコード抽出プログラムを実行するコンピュータの一例を説明する。図１１は、ソースコード抽出プログラムを実行するコンピュータの一例を示す図である。
【００６３】
図１１に示すように、コンピュータ３００は、各種演算処理を実行するＣＰＵ３０１と、ユーザからのデータの入力を受け付ける入力装置３０２と、ディスプレイ３０３を有する。また、コンピュータ３００は、記憶媒体からプログラム等を読取る読み取り装置３０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置３０５とを有する。また、コンピュータ３００は、各種情報を一時記憶するＲＡＭ３０６と、ハードディスク装置３０７を有する。そして、各装置３０１〜３０７は、バス３０８に接続される。
【００６４】
ハードディスク装置３０７は、例えば、生成プログラム３０７ａおよび特定プログラム３０７ｂを有する。ＣＰＵ３０１は、生成プログラム３０７ａおよび特定プログラム３０７ｂを読み出して、ＲＡＭ３０６に展開する。生成プログラム３０７ａは、生成プロセス３０６ａとして機能する。特定プログラム３０７ｂは、特定プロセス３０６ｂとして機能する。
【００６５】
なお、各プログラム３０７ａ，３０７ｂについては、必ずしも最初からハードディスク装置３０７に記憶させておかなくてもよい。例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ３００がこれらから各プログラム３０７ａ，３０７ｂを読み出して実行するようにしてもよい。
【００６６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００６７】
（付記１）コンピュータに、
第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成し、
付加した前記識別情報について、前記第１のソースコードまたは前記第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
前記第２のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
処理を実行させることを特徴とするソースコード生成プログラム。
【００６８】
（付記２）前記生成する処理は、前記第１のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする付記１に記載のソースコード生成プログラム。
【００６９】
（付記３）前記特定する処理は、前記第１のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする付記１または２に記載のソースコード生成プログラム。
【００７０】
（付記４）コンピュータが実行するソースコード生成方法であって、
第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成し、
付加した前記識別情報について、前記第１のソースコードまたは前記第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
前記第２のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
処理を実行することを特徴とするソースコード生成方法。
【００７１】
（付記５）前記生成する処理は、前記第１のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする付記４に記載のソースコード生成方法。
【００７２】
（付記６）前記特定する処理は、前記第１のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする付記４または５に記載のソースコード生成方法。
【００７３】
（付記７）第１のソースコードに対して、前記第１のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第２のソースコードを生成する生成部と、
前記識別情報について、前記第１のソースコードまたは前記第２のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第２のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、前記第２のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える特定部と
を有することを特徴とするコンピュータ。
【００７４】
（付記８）前記生成部は、前記第１のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする付記７に記載のコンピュータ。
【００７５】
（付記９）前記特定部は、前記第１のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする付記７または８に記載のコンピュータ。
【符号の説明】
【００７６】
１００  ソースコード抽出装置
１２０  コンパイラ部
１３０  プリプロセス部
【図１】
0006447358.tif 000002
【図２】
0006447358.tif 000003
【図３】
0006447358.tif 000004
【図４】
0006447358.tif 000005
【図５】
0006447358.tif 000006
【図６】
0006447358.tif 000007
【図７】
0006447358.tif 000008
【図８】
0006447358.tif 000009
【図９】
0006447358.tif 000010
【図１０】
0006447358.tif 000011
【図１１】
0006447358.tif 000012
【図１２】
0006447358.tif 000013