JP6447358B2 - ソースコード生成プログラム、ソースコード生成方法およびコンピュータ - Google Patents

ソースコード生成プログラム、ソースコード生成方法およびコンピュータ Download PDF

Info

Publication number
JP6447358B2
JP6447358B2 JP2015100948A JP2015100948A JP6447358B2 JP 6447358 B2 JP6447358 B2 JP 6447358B2 JP 2015100948 A JP2015100948 A JP 2015100948A JP 2015100948 A JP2015100948 A JP 2015100948A JP 6447358 B2 JP6447358 B2 JP 6447358B2
Authority
JP
Japan
Prior art keywords
source code
identification information
line
source
compile
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015100948A
Other languages
English (en)
Other versions
JP2016218609A (ja
Inventor
純一 真崎
純一 真崎
井上 徹也
徹也 井上
勝典 馬渡
勝典 馬渡
富由太 佐藤
富由太 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015100948A priority Critical patent/JP6447358B2/ja
Publication of JP2016218609A publication Critical patent/JP2016218609A/ja
Application granted granted Critical
Publication of JP6447358B2 publication Critical patent/JP6447358B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、ソースコード生成プログラム等に関する。
近年、OSS(Open Source Software)等のソフトウェアパッケージを適用または流用することで、多機能なソフトウェア開発を短納期で開発するプロジェクトが増加している。OSSでは多種多様なハードウェアやアーキテクチャに適したソースコードが含まれており、プリプロセッサ・ディレクティブでコンフィグレーション可能な形で記述されていることが多い。また、ユーザは、簡単な操作を行うことで、ソースコードに対する十分な理解がなくても、自動で情報を集めて、プログラム実行環境で動作するプログラムにコンパイルすることができる。
一方、ソースコードに含まれるコンパイル手順書の構成やソースコードの内部記述が複雑化してきているため、ソースコードは、ユーザにとって可読性が低いものとなる。
図12は、OSSで採用されるコンパイルの構成と実施の流れの一例を示す図である。例えば、ソフトウェアパッケージのソースコードファイル群12をコンパイルする場合には、ユーザが、実行コマンドを入力することで開始される。例えば、「./configure./make」等の実行コマンドが入力される。
実行コマンドが入力されると、コンパイル手順書10の記述通りに順次コンパイルが実行されることになる。ここで、コンパイル手順書10には、ソースコードファイル群12で用いるマクロ定義文や条件だけでなく、開発環境11に格納されているスクリプトファイル11aやコンフィグレーションファイル11bのマクロ定義を読み込む命令が含まれる場合がある。この場合には、スクリプトファイル11aやコンフィグレーションファイル11bやソースコードファイル群12のマクロ定義が読み込まれてコンパイルが実行される。また、コンパイル手順書10が更に別のコンパイル手順書20を呼び出してソースコードファイル群12に対してコンパイルが行われる場合も多く、ソフトウェアパッケージのコンパイルが複雑化する要因となる。
上記のようにソフトウェアパッケージのコンパイルが複雑化しているため、ユーザはコンパイルで用いるマクロ定義文や条件等のパラメータが、ソースコード内のどこに記述されているのかを把握しづらいという問題がある。
このため、従来技術には、ソースコードから有効な行を抽出し、ソースコードの可読性を向上させるものがある。例えば、この従来技術は、ソースコードからマクロ定義情報を抽出して記録し、マクロ定義情報を基にして、ソースコードに含まれる条件文を解析し、ソースコードの有効な行と無効な行とを判別し、判別結果から有効な行を表示する。
特開平7−64798号公報 特開2000−215037号公報 特開2002−366368号公報
しかしながら、上述した従来技術では、ソースコードの可読性を高めることができないという問題がある。
例えば、従来技術によって抽出されたソースコードの行には、本来不要であったパラメータや、抽出漏れが存在する場合がある。このため、従来技術によって抽出されたソースコードの行を参照して、ユーザがコンパイルを実行しようとすると、間違ったパラメータを設定してしまい、コンパイルに失敗する場合があった。
また、ソースコードファイルから単純に有効な行のみ抽出すると、設計観点のコメントが削除されるなど、無効な行を含む原始ソースコードからコンパイルされたプログラムの実行ログから読み出されていた問題発生箇所の手がかりとなる行情報が失われてしまう。
1つの側面では、本発明は、ソースコードの可読性を高めることができるソースコード生成プログラム、ソースコード生成方法およびコンピュータを提供することを目的とする。
第1の案では、コンピュータに下記の処理を実行させる。コンピュータは、第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成する。コンピュータは、付加した識別情報について、第1のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定する。コンピュータは、第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いても良い。コンピュータは、第2のソースコードに含まれる、特定した識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える。
ソースコードの可読性を高めることができる。
図1は、本実施例に係るソースコード抽出装置の構成を示す機能ブロック図である。 図2は、コンパイル手順書情報の一例を示す図である。 図3は、実行ログの一例を示す図である。 図4は、前処理ソースコードの一例を示す図である。 図5は、プリプロセス実行コードの一例を示す図である。 図6は、編集ソースコードの一例を示す図である。 図7は、識別子を削除した編集ソースコードの一例を示す図である。 図8は、本実施例に係るソースコード抽出装置の処理手順を示すフローチャートである。 図9は、デバッグ効率に関するソースコード抽出装置の効果を説明するための図である。 図10は、本発明をFW5630開発プロジェクトにおいて流用開発を行ったOSSに対して本発明のソースコード抽出装置を適用した場合の実施結果を示す図である。 図11は、ソースコード抽出プログラムを実行するコンピュータの一例を示す図である。 図12は、OSSで採用されるコンパイルの構成と実施の流れの一例を示す図である。
以下に、本願の開示するソースコード生成プログラム、ソースコード生成方法およびコンピュータの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、本実施例に係るソースコード抽出装置の構成を示す機能ブロック図である。ソースコード抽出装置は、コンピュータの一例である。図1に示すように、このソースコード抽出装置100は、原始ソースコード記憶部110a、コンパイルパラメータ記憶部110b、オブジェクトファイル記憶部110c、ソースコード記憶部110dを有する。また、ソースコード抽出装置100は、コンパイラ部120、プリプロセス部130を有する。
原始ソースコード記憶部110aは、OSSの原始ソースコードを記憶する記憶部である。例えば、原始ソースコードには、図2に示すようなコンパイル手順書情報が含まれる。
図2は、コンパイル手順書情報の一例を示す図である。例えば、コンパイル手順書情報105は、コンパイル手順書情報105の名称「Makefile」が定義されている。コンパイル手順書情報105は、「プログラム名とオブジェクトファイル名」、「マクロの定義」、「サフィックスルール適用対象の拡張子の定義」、「プライマリターゲット」、「サフィックスルール」の情報を有する。なお、コンパイル手順書情報105の「#」で始まる行は、コメント行である。
例えば、図2のコンパイル手順書情報105では、ソースコード「xxxx.c yyyy.c zzzz.c」をそれぞれコンパイルすることでオブジェクト「xxxx.o yyyy.o zzzz.o」を作成することを定義する。そして、コンパイル手順書情報105では、生成したオブジェクト「xxxx.o yyyy.o zzzz.o」をまとめることで「hello」プログラムを作成するという手順を定義する。
コンパイル手順書情報105では、「=」の左側に変数名を定義し、「=」の右側に代入する値または文字列を定義する。例えば、「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」は、最適化レベルをレベル2にすることを指示するものである。「-D***」はマクロ定義文である。すなわち、「-Wall -02 -DDEBUG -DARM -DDEBUG_LEVEL3」には、マクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」が含まれる。
コンパイル手順書情報105では、定義した変数を「$」で参照することができる。例えば、$(PROGRAM)と記述すると、「PROGRAM=hello」と定義されているため、「hello」と差し替えて実行することを意味する。
コンパイル手順書情報105のプライマリターゲットでは、ターゲットと依存ファイルを定義する。ターゲットは、作るものを示す。依存ファイルは、ターゲットを作るために使用するものを示す。例えば、「&(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」を示すものとなる。
コンパイル手順書情報105のサフィックス(拡張子)ルールは、コンパイル手順書情報105では、決まり文句として用いられるものである。例えば、C言語の場合には、ソースコードは「.cファイル」であり、係るソースコードをコンパイルしてできるオブジェクトは「.oファイル」となる。このため、コンパイル手順書情報105では、「.oファイル」を使用する場合には、「.oファイル」を「.cファイル」から作るというサフィックスルールが定義されている。
サフィックスルールの「$(CC) $(CFLAGS) -c $<」は、ターゲットを作成するために実行するコマンドである。「$<」は、最初の依存ファイルを定義するものであり、ここでは、特定の「.cソースファイル名」を示す。例えば、「.cソースファイル名」は「xxxx.c」となる。
図1の説明に戻る。コンパイルパラメータ記憶部110bは、後述するコンパイルパラメータ抽出部120aによって抽出されるコンパイルパラメータの情報を記憶する記憶部である。
オブジェクトファイル記憶部110cは、後述するコンパイル実行部120bによりコンパイルされたオブジェクトファイルを記憶する記憶部である。
ソースコード記憶部110dは、後述するプリプロセス部130により生成されるソースコードを記憶する記憶部である。
コンパイラ部120は、コンパイルパラメータ抽出部120aと、コンパイル実行部120bとを有する。
コンパイルパラメータ抽出部120aは、原始ソースコード記憶部110aから原始ソースコードを取得し、原始ソースコードをコンパイル実行部120bに出力することで、コンパイル実行部120bに原始ソースコードのコンパイルを実行させる。コンパイル実行部120bは、原始ソースコードに含まれるコンパイル手順書情報105に従って、原始ソースコードをコンパイルする。
また、コンパイルパラメータ抽出部120aは、コンパイル実行部120bが、原始ソースコードをコンパイルする際に生成する実行ログを収集し、実行ログに記述されているマクロ定義文を抽出する。以下の説明では、コンパイルパラメータ抽出部120aが抽出したマクロ定義文を、コンパイルパラメータと表記する。コンパイルパラメータ抽出部120aは、コンパイルパラメータの情報を、コンパイルパラメータ記憶部110bに格納する。
図3は、実行ログの一例を示す図である。コンパイルパラメータ抽出部120aは、実行ログ106を走査して、マクロ定義文を抽出する。マクロ定義文は「-D***」によって、実行ログに記述されている。ここで「***」は任意の文字列を示す。例えば、コンパイルパラメータ抽出部120aは、実行ログ106からマクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」を抽出する。コンパイルパラメータ抽出部120aは、マクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」をコンパイルパラメータとして、コンパイルパラメータ記憶部110bに格納する。
なお、図3では、Cコンパイラ(gcc)が生成する実行ログからマクロ定義文を抽出する場合について説明したが、C++コンパイラ(g++)が生成する実行ログからも同様に、マクロ定義文を抽出することができる。また、コンパイルパラメータ抽出部120aは、コンパイル実行部120bによるコンパイルをラップした形で実行させるものとする。
コンパイル実行部120bは、原始ソースコードを、コンパイル手順書情報105に従ってコンパイルし、オブジェクトファイルを生成する処理部である。コンパイル実行部120bは、生成したオブジェクトファイルの情報をオブジェクトファイル記憶部110cに格納する。また、コンパイル実行部120bは、コンパイル実行時の実行ログを、コンパイルパラメータ抽出部120aに出力する。
プリプロセス部130は、前処理部130a、プリプロセス実行部130b、後処理部130cを有する。前処理部130aは、生成部の一例である。後処理部130cは、特定部の一例である。
前処理部130aは、原始ソースコード記憶部110aから原始ソースコードを取得し、原始ソースコードの各行にユニークな識別子をコメント文として追加する処理部である。以下の説明では、各行にユニークな識別子をコメント文として付加された原始ソースコードを、適宜、「前処理ソースコード」と表記する。前処理部130aは、前処理ソースコードを、プリプロセス実行部130bに出力する。
図4は、前処理ソースコードの一例を示す図である。図4に示すように、前処理部130aは、前処理ソースコード107について、プリプロセッサ・ディレクティブを除いた全ての行に、ユニークな識別子を含むコメント文「//@****」を付加する。コメント文の「****」には、ユニークな行番号が設定される。プリプロセス・ディレクティブは、「#」で始まる行である。例えば、前処理ソースコード107について、「int main()」を含む行には、識別子「//@0002」が付加されている。前処理部130aは、原始ソースコードの実行行および設計情報を含むコメント文や空行にも、ユニークな識別子を含むコメント文を付加する。
プリプロセス実行部130bは、前処理ソースコードに対して、プリプロセスを実行する処理部である。また、プリプロセス実行部130bは、プリプロセスを実行する場合に、コンパイルパラメータ記憶部110bに格納されたコンパイルパラメータをオプションとして指定する。
例えば、プリプロセス実行部130bは、オプションをしていたプリプロセス(/usr/bin/gcc -E -C コンパイルパラメータ)を実行する。コンパイルパラメータがマクロ定義文「-DDEBUG」、「-DARM」、「-DDEBUG_LEVEL3」である場合には、プリプロセス実行部130bは下記のプリプロセスを実行する。例えば、プリプロセス実行部130bは、プリプロセス(/usr/bin/gcc -E -C -DDEBUG -DARM -DDEBUG_LEVEL3)を実行する。プリプロセス実行部130bが、かかるコンパイルパラメータをオプションとして指定し、前処理ソースコードに対して、プリプロセスを実行すると、コンパイル手順書情報105に基づいて、プリプロセスを実行したことと同じことになる。
プリプロセス実行部130bは、前処理ソースコードに対してプリプロセスを実行した結果を、後処理部130cに出力する。以下の説明では、プリプロセスを実行した前処理ソースコードを、「プリプロセス実行コード」と適宜表記する。
図5は、プリプロセス実行コードの一例を示す図である。例えば、プリプロセス実行部130bは、前処理ソースコードに対してプリプロセスを実行することで、プリプロセッサ・ディレクティブが解析を解析し、実行されない行部分を削除する。また、プリプロセス実行部130bは、「#include<stdio.h>」等のヘッダファイルを展開する。プリプロセス実行部130bが、上記処理を実行することで、例えば、前処理ソースコード107は、プリプロセス実行コード108となる。
後処理部130cは、前処理ソースコード107の各行に付加された識別子と、プリプロセス実行コード108に残った識別子とを比較して、前処理ソースコード107に存在する識別子のうち、プリプロセス実行コード108に存在しない識別子を特定する。後処理部130cが特定した識別子は、無効となる行に付加された識別子である。
後処理部130cは、前処理ソースコード107について、特定した識別子が付加された行を、プリプロセスの結果無効となったことを示すコメント行に書き換える処理を実行する。上記処理により、プリプロセスの結果無効となったことを示すコメント行に書き換える編集を行った前処理ソースコードを、適宜、「編集ソースコード」と表記する。後処理部130cは、編集ソースコードを、ソースコード記憶部110dに格納する。
例えば、後処理部130cは、前処理ソースコード107に存在する識別子のうち、プリプロセス実行コード108に存在しない識別子を特定する。例えば、前処理ソースコード107に存在する識別子を「//@0002、//@0003、//@0005、//@0007、//@0009、//@0010」とする。また、プリプロセス実行コード108に存在する識別子を「//@0002、//@0003、//@0005、//@0009、//@0010」であるとする。そうすると、後処理部130cは、前処理ソースコード107に存在する識別子のうち、プリプロセス実行コード108に存在しない識別子「//@0007」を特定する。
後処理部130cは、上記処理によって識別子「//@0007」を特定すると、前処理ソースコード107について、特定した識別子「//@0007」が付加された行を、プリプロセスの結果無効となったことを示すコメント行に書き換えて、編集ソースコード108を生成する。
図6は、編集ソースコードの一例を示す図である。例えば、後処理部130cは、識別子「//@0007」が存在していた行50を、プリプロセスの結果無効となったことを示すコメント行に書き換えることで、編集ソースコード108を生成する。例えば、後処理部130cは、該当するコメント行50に、コメント「///////削除///////」を挿入する。
後処理部130cは、編集ソースコード108から、識別子を削除することで、最終的な編集ソースコードを生成する。図7は、識別子を削除した編集ソースコードの一例を示す図である。
次に、本実施例に係るソースコード抽出装置100の処理手順について説明する。図8は、本実施例に係るソースコード抽出装置の処理手順を示すフローチャートである。図8に示すように、ソースコード抽出装置100のコンパイラ部120は、コンパイル手順書情報を基にして原始ソースコードのコンパイルを実行する(ステップS101)。
コンパイラ部120は、コンパイル実行時の実行ログを収集し、コンパイルパラメータを記録する(ステップS102)。ソースコード抽出装置100のプリプロセス部130は、原始ソースコードの各行に対して識別子を付加する(ステップS103)。
プリプロセス部130は、コンパイルパラメータを用いて、前処理ソースコードに対してプリプロセスを実行する(ステップS104)。プリプロセス部130は、プリプロセスの実行結果として出力されたプリプロセスコードから識別子を抽出する(ステップS105)。プリプロセス部130は、前処理ソースコードに存在する識別子のうち、プリプロセス実行コードに存在しない識別子を特定する(ステップS106)。プリプロセス部130は、前処理ソースコードについて、プリプロセスの結果無効となったことを示すコメント行に書き換えて、編集ソースコードを生成する(ステップS107)。
次に、本実施例に係るソースコード抽出装置100の効果について説明する。ソースコード抽出装置100は、コンパイルパラメータを使用し、識別子を付与したソースコードに対するプリプロセスを実行して、ソースコード中の無効となる行を特定し、無効となる行の情報をソースコードに記述した編集ソースコードを生成する。係る処理を実行することで、ソースコード抽出装置100は、原始ソースコードから有効な行を抽出し、かつ、無効な行を削除する代わりに、コメント行に置き換えるため、ソースコードの可読性を向上させることができる。
また、ソースコード抽出装置100は、コンパイル実行時に、コンパイルパラメータを自動抽出し、係るコンパイルパラメータをオプションに指定して、プリプロセスを実行する。このため、マクロ定義文の指定漏れやヒューマンエラーを防止することができ、ソースコードに対する理解が少ないユーザであっても、ソースコードの有効な行を特定することが可能になる。
また、ソースコード抽出装置100は、上記のように、原始ソースコードの無効な行を削除する代わりに、該当する行が無効である旨のコメント行に置き換えるので、保守メンテナンスにおけるデバッグ効率を向上させることができる。例えば、ハードウェア・アーキテクチャ毎の処理差分記述において同じ関数名や変数名で記述されている場合でも、開発対象に特化した単一の関数名や変数名のみが抽出され、かつ、無効な行は削除されたことを示す記述(コメント文)に編集され各処理の行番号を維持できる。このため、プログラム実行ログに含まれる関数名や変数名によるキーワード検索や行番号による記述箇所特定が可能となり、ソースコードのデバッグ効率が向上する。
図9は、デバッグ効率に関するソースコード抽出装置の効果を説明するための図である。例えば、便宜的に、原始ソースコードを原始ソースコード200aとする。編集ソースコードを編集ソースコード200bとする。また、実行ログ210aは、原始ソースコード200aをコンパイルした際の実行ログである。実行ログ210bは、原始ソースコード200bをコンパイルした際の実行ログである。
例えば、原始ソースコード200aと、編集ソースコード200bとを比較すると、有効な行については、同じ位置関係となる。このため、例えば、実行ログ210aの行番号を手がかりとして、該当する行を、編集ソースコード200bから検索することができる。また、編集ソースコード200bでは、無効な行は、コメント「///////削除///////」に書き換えられているため、デバッグ時のキーワードによる検索対象を絞り込むことが容易となる。例えば、原始ソースコード200aでは、無効な行であっても、キーワードのヒット対象となるが、編集ソースコード200bは、無効な行は「///////削除///////」となっているため、ヒットしない。
また、ソースコード抽出装置100によれば、流用開発および機能拡張における開発効率を向上させることができる。例えば、ソースコード抽出装置100が実行する処理により、流用ソースコードファイル群のソースコード規模が縮小され、開発見積り精度が向上する。また、設計ドキュメントが不足している場合でも、リバース・エンジニアリングすべき箇所の抽出とドキュメント作成が容易になる。
また、不特定多数の開発者による分散開発の結果、更新パッチ配布が高頻度、かつ、更新内容が多数のソースコードファイルに及ぶ場合、プリプロセッサによるソースコード抽出処理によって失われる情報を維持した状態のソースコードを提供できる。例えば、編集ソースコードには、行数、コメント文、プリプロセッサ・ディレクティブ記述文が維持された状態となる。これによって、パッチファイルの有効な行に対する更新内容の適用成功保証が維持できると共に、更新内容と有効な行との関連性についての理解が容易になり、結果、配布された更新パッチの必要性や信頼性を判断することが容易となる。
図10は、本発明をFW5630開発プロジェクトにおいて流用開発を行ったOSSに対して本発明のソースコード抽出装置を適用した場合の実施結果を示す図である。図10に示すように元のソースコード規模が約7分の1に縮小された。
ところで、本実施例で説明したコンパイラ部120は、原始ソースコードに対して、コンパイルを実行し、実行ログからコンパイルパラメータを抽出したがこれに限定されるものではない。例えば、コンパイラ部120は、前処理部130aによって前処理が実行された前処理ソースコードに対して、コンパイルを実行し、実行ログからコンパイルパラメータを抽出しても良い。
次に、上記の実施例に示したソースコード抽出装置100と同様の機能を実現するソースコード抽出プログラムを実行するコンピュータの一例を説明する。図11は、ソースコード抽出プログラムを実行するコンピュータの一例を示す図である。
図11に示すように、コンピュータ300は、各種演算処理を実行するCPU301と、ユーザからのデータの入力を受け付ける入力装置302と、ディスプレイ303を有する。また、コンピュータ300は、記憶媒体からプログラム等を読取る読み取り装置304と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置305とを有する。また、コンピュータ300は、各種情報を一時記憶するRAM306と、ハードディスク装置307を有する。そして、各装置301〜307は、バス308に接続される。
ハードディスク装置307は、例えば、生成プログラム307aおよび特定プログラム307bを有する。CPU301は、生成プログラム307aおよび特定プログラム307bを読み出して、RAM306に展開する。生成プログラム307aは、生成プロセス306aとして機能する。特定プログラム307bは、特定プロセス306bとして機能する。
なお、各プログラム307a,307bについては、必ずしも最初からハードディスク装置307に記憶させておかなくてもよい。例えば、コンピュータ300に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ300がこれらから各プログラム307a,307bを読み出して実行するようにしてもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成し、
付加した前記識別情報について、前記第1のソースコードまたは前記第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
前記第2のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
処理を実行させることを特徴とするソースコード生成プログラム。
(付記2)前記生成する処理は、前記第1のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする付記1に記載のソースコード生成プログラム。
(付記3)前記特定する処理は、前記第1のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする付記1または2に記載のソースコード生成プログラム。
(付記4)コンピュータが実行するソースコード生成方法であって、
第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成し、
付加した前記識別情報について、前記第1のソースコードまたは前記第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
前記第2のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
処理を実行することを特徴とするソースコード生成方法。
(付記5)前記生成する処理は、前記第1のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする付記4に記載のソースコード生成方法。
(付記6)前記特定する処理は、前記第1のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする付記4または5に記載のソースコード生成方法。
(付記7)第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成する生成部と、
前記識別情報について、前記第1のソースコードまたは前記第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、前記第2のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える特定部と
を有することを特徴とするコンピュータ。
(付記8)前記生成部は、前記第1のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする付記7に記載のコンピュータ。
(付記9)前記特定部は、前記第1のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする付記7または8に記載のコンピュータ。
100 ソースコード抽出装置
120 コンパイラ部
130 プリプロセス部

Claims (5)

  1. コンピュータに、
    第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成し、
    付加した前記識別情報について、前記第1のソースコードまたは前記第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
    前記第2のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
    処理を実行させることを特徴とするソースコード生成プログラム。
  2. 前記生成する処理は、前記第1のソースコードの各行のうち、プリプロセッサ・ディレクティブを除いた行に対して、前記識別情報を付加することを特徴とする請求項1に記載のソースコード生成プログラム。
  3. 前記特定する処理は、前記第1のソースコードに含まれるコンパイル手順書に従ってコンパイルが実行された結果得られる実行ログから、前記定義情報を抽出することを特徴とする請求項1または2に記載のソースコード生成プログラム。
  4. コンピュータが実行するソースコード生成方法であって、
    第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成し、
    付加した前記識別情報について、前記第1のソースコードまたは前記第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、
    前記第2のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える
    処理を実行することを特徴とするソースコード生成方法。
  5. 第1のソースコードに対して、前記第1のソースコードの行それぞれに、該行それぞれを識別する識別情報を付加した第2のソースコードを生成する生成部と、
    前記識別情報について、前記第1のソースコードまたは前記第2のソースコードがコンパイルされた際の実行ログに含まれる定義情報を用いて前記第2のソースコードに対するプリプロセスを実行した結果得られるソースコードに含まれない識別情報を特定し、前記第2のソースコードに含まれる、特定した前記識別情報が付加された行を、前記プリプロセスの結果無効となったことを示すコメント行に書き換える特定部と
    を有することを特徴とするコンピュータ。
JP2015100948A 2015-05-18 2015-05-18 ソースコード生成プログラム、ソースコード生成方法およびコンピュータ Expired - Fee Related JP6447358B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015100948A JP6447358B2 (ja) 2015-05-18 2015-05-18 ソースコード生成プログラム、ソースコード生成方法およびコンピュータ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015100948A JP6447358B2 (ja) 2015-05-18 2015-05-18 ソースコード生成プログラム、ソースコード生成方法およびコンピュータ

Publications (2)

Publication Number Publication Date
JP2016218609A JP2016218609A (ja) 2016-12-22
JP6447358B2 true JP6447358B2 (ja) 2019-01-09

Family

ID=57581936

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015100948A Expired - Fee Related JP6447358B2 (ja) 2015-05-18 2015-05-18 ソースコード生成プログラム、ソースコード生成方法およびコンピュータ

Country Status (1)

Country Link
JP (1) JP6447358B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1185486A (ja) * 1997-09-12 1999-03-30 Fujitsu Ltd プログラム編集装置,プログラム編集方法,及びコンピュータ可読媒体
JP2000215037A (ja) * 1999-01-22 2000-08-04 Toshiba Corp ソ―スコ―ド表示装置、ソ―スコ―ド表示方法およびデバック処理装置
JP2002366368A (ja) * 2001-06-08 2002-12-20 Matsushita Electric Ind Co Ltd ソースコード編集装置およびソースコード編集方法

Also Published As

Publication number Publication date
JP2016218609A (ja) 2016-12-22

Similar Documents

Publication Publication Date Title
Tsantalis et al. Accurate and efficient refactoring detection in commit history
Nogueira et al. Test generation from state based use case models
US20070006192A1 (en) Intermediate representation for multiple exception handling models
US11579856B2 (en) Multi-chip compatible compiling method and device
US20180107585A1 (en) Using edit and continue to dynamically set and unset optimizations in source code while debugging
Kumar et al. Rejuvenating C++ programs through demacrofication
EP2141587A1 (en) Method and system for generating of a control flow graph for representing a program code
Bergmayr et al. fREX: fUML-based reverse engineering of executable behavior for software dynamic analysis
Watt et al. A program logic for first-order encapsulated WebAssembly
US7624381B1 (en) Portable detection of start and completion of object construction
Gómez-Zamalloa et al. Decompilation of Java bytecode to Prolog by partial evaluation
Brada et al. Practical verification of component substitutability using subtype relation
Inostroza et al. Tracing program transformations with string origins
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
JP6447358B2 (ja) ソースコード生成プログラム、ソースコード生成方法およびコンピュータ
Philips et al. Dependence-driven delimited CPS transformation for JavaScript
JP6116983B2 (ja) エントリーポイント抽出装置
Yang et al. KernelGPT: Enhanced Kernel Fuzzing via Large Language Models
Vesely et al. One Step at a Time: A Functional Derivation of Small-Step Evaluators from Big-Step Counterparts
Mennie et al. Giving meaning to macros
Ali et al. Identification and Optimisation of Type-Level Model Queries
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium
McMillan Graph Neural Networks in Software Mining
JPH10293683A (ja) プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体
Greiner et al. Evaluating Multi-variant Model-To-Text Transformations Realized by Generic Aspects

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181026

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181119

R150 Certificate of patent or registration of utility model

Ref document number: 6447358

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees