(57)【要約】【課題】コーディング作業またはレビュー作業を効率化する。【解決手段】ソースコード表示装置１０の引数情報埋め込み部２１は、呼び出し先関数のソースコードに引数情報を埋め込むことで、引数情報埋め込み済みソースコードを生成する。ソースコード表示装置１０のソースコード展開部２２は、呼び出し元関数のソースコードにおける呼び出し先関数の呼び出し箇所を、引数情報埋め込み部２１により生成された引数情報埋め込み済みソースコードに置き換えることで、展開済みソースコードを生成する。【選択図】図１
2019139435.tif 000002
【特許請求の範囲】
【請求項１】
ある関数から呼び出される関数である呼び出し先関数のソースコードに、前記呼び出し先関数が呼び出される際に前記呼び出し先関数の引数に代入される値を示す引数情報を埋め込むことで、引数情報埋め込み済みソースコードを生成する引数情報埋め込み部と、
前記呼び出し先関数を呼び出す関数である呼び出し元関数のソースコードにおける前記呼び出し先関数の呼び出し箇所を、前記引数情報埋め込み部により生成された引数情報埋め込み済みソースコードに置き換えることで、展開済みソースコードを生成するソースコード展開部と
を備えるソースコード表示装置。
【請求項２】
前記ソースコード展開部は、前記呼び出し元関数のソースコードを画面に表示し、ユーザの操作に従って、前記呼び出し元関数のソースコードの表示を前記展開済みソースコードの表示に切り替える請求項１に記載のソースコード表示装置。
【請求項３】
前記ソースコード展開部は、前記展開済みソースコードを画面に表示し、ユーザの操作に従って、前記展開済みソースコードの表示を前記呼び出し元関数のソースコードの表示に切り替える請求項１または２に記載のソースコード表示装置。
【請求項４】
前記ソースコード展開部は、前記呼び出し先関数が再帰関数である場合、前記呼び出し先関数の呼び出し箇所として指定回数分の再帰呼び出し箇所を前記引数情報埋め込み済みソースコードに置き換えることで、前記展開済みソースコードを生成する請求項１から３のいずれか１項に記載のソースコード表示装置。
【請求項５】
前記ソースコード展開部は、前記呼び出し先関数の呼び出し箇所で関数テーブルまたは関数ポインタが使用されている場合、ユーザの操作に従って、複数の関数の候補から前記呼び出し先関数を選択する請求項１から４のいずれか１項に記載のソースコード表示装置。
【請求項６】
前記ソースコード展開部は、前記呼び出し先関数の呼び出し箇所でマクロが使用されている場合、前記マクロを前記呼び出し先関数の関数名に置き換えてから、前記呼び出し先関数の呼び出し箇所を前記引数情報埋め込み済みソースコードに置き換えることで、前記展開済みソースコードを生成する請求項１から５のいずれか１項に記載のソースコード表示装置。
【請求項７】
前記展開済みソースコードに含まれる前記引数情報埋め込み済みソースコードに修正が加えられた場合、前記呼び出し元関数のソースコードにおいて修正箇所に対応する前記呼び出し先関数の呼び出し箇所に修正内容を反映する修正内容反映部をさらに備える請求項１から６のいずれか１項に記載のソースコード表示装置。
【請求項８】
前記展開済みソースコードに含まれる前記引数情報埋め込み済みソースコードに修正が加えられた場合、前記呼び出し元関数のソースコードにおいて修正箇所に対応する前記呼び出し先関数の呼び出し箇所と同じ関数の他の呼び出し箇所があれば、前記展開済みソースコードにおいて当該他の呼び出し箇所に対応する前記引数情報埋め込み済みソースコードに修正内容を反映する修正内容反映部をさらに備える請求項１から６のいずれか１項に記載のソースコード表示装置。
【請求項９】
前記呼び出し先関数のソースコードと前記呼び出し元関数のソースコードとから、前記呼び出し先関数の関数名および引数情報を示す呼び出し先関数リストを生成する呼び出し先関数抽出部をさらに備え、
前記引数情報埋め込み部は、前記呼び出し先関数抽出部により生成された呼び出し先関数リストを参照して、前記引数情報埋め込み済みソースコードを生成する請求項１から８のいずれか１項に記載のソースコード表示装置。
【請求項１０】
前記呼び出し先関数のソースコードと前記呼び出し元関数のソースコードとから、関数ごとにソースコードを示す関数リストを生成する関数リスト作成部をさらに備え、
前記引数情報埋め込み部は、前記関数リスト作成部により生成された関数リストを参照して、前記引数情報埋め込み済みソースコードを生成する請求項１から９のいずれか１項に記載のソースコード表示装置。
【請求項１１】
引数情報埋め込み部が、ある関数から呼び出される関数である呼び出し先関数のソースコードに、前記呼び出し先関数が呼び出される際に前記呼び出し先関数の引数に代入される値を示す引数情報を埋め込むことで、引数情報埋め込み済みソースコードを生成し、
ソースコード展開部が、前記呼び出し先関数を呼び出す関数である呼び出し元関数のソースコードにおける前記呼び出し先関数の呼び出し箇所を、前記引数情報埋め込み部により生成された引数情報埋め込み済みソースコードに置き換えることで、展開済みソースコードを生成するソースコード表示方法。
【請求項１２】
コンピュータに、
ある関数から呼び出される関数である呼び出し先関数のソースコードに、前記呼び出し先関数が呼び出される際に前記呼び出し先関数の引数に代入される値を示す引数情報を埋め込むことで、引数情報埋め込み済みソースコードを生成する引数情報埋め込み処理と、
前記呼び出し先関数を呼び出す関数である呼び出し元関数のソースコードにおける前記呼び出し先関数の呼び出し箇所を、前記引数情報埋め込み処理により生成された引数情報埋め込み済みソースコードに置き換えることで、展開済みソースコードを生成するソースコード展開処理と
を実行させるソースコード表示プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード表示装置、ソースコード表示方法およびソースコード表示プログラムに関するものである。
【背景技術】
【０００２】
非特許文献１に記載の技術では、コーディングを簡便化するための補助機能として、ソースコード中の特定の呼び出しインタフェースに対して、該当する呼び出し先関数の定義を指定した箇所に表示する機能がある。この機能により、コーディング作業およびレビュー作業の際に、画面を切り替えることなく呼び出し先関数の処理内容を参照することができる。
【０００３】
特許文献１に記載の技術では、ソースコード内のモジュールの定義場所付近に、関連度の高いモジュールの内容が別ウィンドウで表示される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１９９３７３号公報
【非特許文献】
【０００５】
【非特許文献１】Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ  Ｄｏｃｓ、“Ｈｏｗ  ｔｏ：  Ｖｉｅｗ  ａｎｄ  ｅｄｉｔ  ｃｏｄｅ  ｂｙ  ｕｓｉｎｇ  Ｐｅｅｋ  Ｄｅｆｉｎｉｔｉｏｎ  （Ａｌｔ＋Ｆ１２）”、［ｏｎｌｉｎｅ］、２０１８年１月１０日、Ｍｉｃｒｏｓｏｆｔ、［２０１８年１月２５日検索］、インターネット〈ＵＲＬ：ｈｔｔｐｓ：／／ｄｏｃｓ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｅｎ−ｕｓ／ｖｉｓｕａｌｓｔｕｄｉｏ／ｉｄｅ／ｈｏｗ−ｔｏ−ｖｉｅｗ−ａｎｄ−ｅｄｉｔ−ｃｏｄｅ−ｂｙ−ｕｓｉｎｇ−ｐｅｅｋ−ｄｅｆｉｎｉｔｉｏｎ−ａｌｔ−ｐｌｕｓ−ｆ１２〉
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の技術では、呼び出し階層は１段階しか表示できず、また定義部分をそのまま表示する機能しかないため、実際に引数がどのように使われているか等は作業者が実際にインタフェースを追いかけて確認する必要がある。すなわち、コーディング作業およびレビュー作業に手間がかかる。
【０００７】
本発明は、コーディング作業またはレビュー作業の効率化を目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様に係るソースコード表示装置は、
ある関数から呼び出される関数である呼び出し先関数のソースコードに、前記呼び出し先関数が呼び出される際に前記呼び出し先関数の引数に代入される値を示す引数情報を埋め込むことで、引数情報埋め込み済みソースコードを生成する引数情報埋め込み部と、
前記呼び出し先関数を呼び出す関数である呼び出し元関数のソースコードにおける前記呼び出し先関数の呼び出し箇所を、前記引数情報埋め込み部により生成された引数情報埋め込み済みソースコードに置き換えることで、展開済みソースコードを生成するソースコード展開部と
を備える。
【発明の効果】
【０００９】
本発明では、呼び出し元関数のソースコードにおける呼び出し先関数の呼び出し箇所を引数情報埋め込み済みソースコードに置き換えた展開済みソースコードが得られるため、コーディング作業またはレビュー作業の際に、実際に引数がどのように使われているかを効率的に確認できる。すなわち、本発明によれば、コーディング作業またはレビュー作業を効率化できる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るソースコード表示装置の構成を示すブロック図。
【図２】実施の形態１に係るソースコード表示装置の処理の流れを示す図。
【図３】実施の形態１に係るソースコードの例を示す図。
【図４】実施の形態１に係る関数リストの例を示す図。
【図５】実施の形態１に係る呼び出し先関数リストの例を示す図。
【図６】実施の形態１に係る引数情報埋め込み済みソースコードの例を示す図。
【図７】実施の形態１に係る展開済みソースコードの例を示す図。
【図８】実施の形態１に係る展開済みソースコードの別の例を示す図。
【図９】実施の形態１の変形例に係るソースコード表示装置の構成を示すブロック図。
【図１０】実施の形態２に係るソースコード表示装置の構成を示すブロック図。
【図１１】実施の形態２に係るソースコード表示装置の処理の流れを示す図。
【図１２】実施の形態３に係るソースコード表示装置の構成を示すブロック図。
【図１３】実施の形態３に係るソースコード表示装置の処理の流れを示す図。
【図１４】実施の形態４に係るソースコード表示装置の構成を示すブロック図。
【図１５】実施の形態４に係るソースコード表示装置の処理の流れを示す図。
【図１６】実施の形態４に係る展開済みソースコードの例を示す図。
【図１７】実施の形態４に係る修正済み展開前ソースコードの例を示す図。
【図１８】実施の形態４に係る修正済み展開済みソースコードの例を示す図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。なお、本発明は、以下に説明する実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。例えば、以下に説明する実施の形態のうち、２つ以上の実施の形態が組み合わせられて実施されても構わない。あるいは、以下に説明する実施の形態のうち、１つの実施の形態または２つ以上の実施の形態の組み合わせが部分的に実施されても構わない。
【００１２】
実施の形態１．
本実施の形態について、図１から図８を用いて説明する。
【００１３】
＊＊＊構成の説明＊＊＊
図１を参照して、本実施の形態に係るソースコード表示装置１０の構成を説明する。
【００１４】
ソースコード表示装置１０は、コンピュータである。ソースコード表示装置１０は、プロセッサ１１を備えるとともに、メモリ１２、ストレージ１３および通信インタフェース１４といった他のハードウェアを備える。プロセッサ１１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１５】
ソースコード表示装置１０は、機能要素として、引数情報埋め込み部２１と、ソースコード展開部２２とを備える。引数情報埋め込み部２１およびソースコード展開部２２の機能は、ソフトウェアにより実現される。
【００１６】
プロセッサ１１は、ソースコード表示プログラムを実行する装置である。ソースコード表示プログラムは、引数情報埋め込み部２１およびソースコード展開部２２の機能を実現するプログラムである。プロセッサ１１は、例えば、ＣＰＵである。「ＣＰＵ」は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略語である。
【００１７】
メモリ１２およびストレージ１３は、ソースコード表示プログラムを記憶する装置である。メモリ１２は、例えば、ＲＡＭ、フラッシュメモリまたはこれらの組み合わせである。「ＲＡＭ」は、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略語である。ＲＡＭは、例えば、ＳＲＡＭ、ＤＲＡＭまたはこれらの組み合わせである。「ＳＲＡＭ」は、Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略語である。「ＤＲＡＭ」は、Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略語である。ストレージ１３は、例えば、ＨＤＤ、フラッシュメモリまたはこれらの組み合わせである。「ＨＤＤ」は、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略語である。
【００１８】
通信インタフェース１４は、ソースコード表示プログラムに入力されるデータを受信するレシーバと、ソースコード表示プログラムから出力されるデータを送信するトランスミッタとを含む。通信インタフェース１４は、例えば、通信チップまたはＮＩＣである。「ＮＩＣ」は、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄの略語である。
【００１９】
ソースコード表示装置１０は、ハードウェアとして、入力機器およびディスプレイをさらに備えてもよい。
【００２０】
入力機器は、ソースコード表示プログラムへのデータの入力のためにユーザにより操作される機器である。入力機器は、例えば、マウス、キーボード、タッチパネル、または、これらのうちいくつか、もしくは、すべての組み合わせである。
【００２１】
ディスプレイは、ソースコード表示プログラムから出力されるデータを画面に表示する機器である。ディスプレイは、例えば、ＬＣＤである。「ＬＣＤ」は、Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙの略語である。
【００２２】
ソースコード表示プログラムは、メモリ１２からプロセッサ１１に読み込まれ、プロセッサ１１によって実行される。メモリ１２には、ソースコード表示プログラムだけでなく、ＯＳも記憶されている。「ＯＳ」は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍの略語である。プロセッサ１１は、ＯＳを実行しながら、ソースコード表示プログラムを実行する。なお、ソースコード表示プログラムの一部または全部がＯＳに組み込まれていてもよい。
【００２３】
ソースコード表示プログラムおよびＯＳは、ストレージ１３に記憶されていてもよい。ソースコード表示プログラムおよびＯＳは、ストレージ１３に記憶されている場合、メモリ１２にロードされ、プロセッサ１１によって実行される。
【００２４】
ソースコード表示装置１０は、プロセッサ１１を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ソースコード表示プログラムの実行を分担する。それぞれのプロセッサは、例えば、ＣＰＵである。
【００２５】
ソースコード表示プログラムにより利用、処理または出力されるデータ、情報、信号値および変数値は、メモリ１２、ストレージ１３、または、プロセッサ１１内のレジスタまたはキャッシュメモリに記憶される。
【００２６】
ソースコード表示プログラムは、引数情報埋め込み部２１およびソースコード展開部２２により行われる処理をそれぞれ引数情報埋め込み処理およびソースコード展開処理としてコンピュータに実行させるプログラムである。ソースコード表示プログラムは、コンピュータ読取可能な媒体に記録されて提供されてもよいし、記録媒体に格納されて提供されてもよいし、プログラムプロダクトとして提供されてもよい。
【００２７】
ソースコード表示装置１０は、１台のコンピュータで構成されていてもよいし、複数台のコンピュータで構成されていてもよい。ソースコード表示装置１０が複数台のコンピュータで構成されている場合は、引数情報埋め込み部２１およびソースコード展開部２２の機能が、各コンピュータに分散されて実現されてもよい。
【００２８】
＊＊＊動作の説明＊＊＊
図２を参照して、本実施の形態に係るソースコード表示装置１０の動作を説明する。ソースコード表示装置１０の動作は、本実施の形態に係るソースコード表示方法に相当する。
【００２９】
第１ステップとして、引数情報埋め込み部２１は、呼び出し先関数のソースコード３１に引数情報を埋め込むことで、引数情報埋め込み済みソースコード３４を生成する。呼び出し先関数とは、ある関数から呼び出される関数のことである。後述する呼び出し元関数とは、「ある関数」に相当し、呼び出し先関数を呼び出す関数のことである。引数情報とは、呼び出し先関数が呼び出される際に呼び出し先関数の引数に代入される値を示す情報のことである。
【００３０】
具体的には、引数情報埋め込み部２１は、通信インタフェース１４を介してソースコード３１と関数リスト３２と呼び出し先関数リスト３３との入力を受け付け、メモリ１２に書き込む。引数情報埋め込み部２１は、入力された呼び出し先関数リスト３３から呼び出し先関数の関数名と引数情報とを取得し、関数リスト３２から取得した呼び出し先関数のソースコード３１に引数情報を埋め込み、引数情報埋め込み済みソースコード３４を作成する。引数情報埋め込み部２１は、引数情報埋め込み済みソースコード３４をメモリ１２に書き込む。
【００３１】
ソースコード３１は、ソフトウェア、すなわちコンピュータプログラムのもととなる文字の羅列である。本実施の形態では、ソースコード３１は、図３に示すように、コンピュータに対する一連の指示が記述されたファイルである。
【００３２】
関数リスト３２は、各関数の処理内容をリスト化したデータ構造である。本実施の形態では、関数リスト３２は、図４に示すように、関数名と関数のソースコード３１とを紐付けたリストである。すなわち、関数リスト３２は、関数ごとにソースコード３１を示すリストである。
【００３３】
呼び出し先関数リスト３３は、ソースコード３１の各関数呼び出し箇所をリスト化したデータ構造である。本実施の形態では、呼び出し先関数リスト３３は、図５に示すように、呼び出し先関数の関数名と、呼び出し元関数の関数名と、呼び出し元関数における呼び出し箇所の行番号と、引数に与える値を示す引数情報とを紐付けたリストである。すなわち、呼び出し先関数リスト３３は、呼び出し先関数の関数名および引数情報を示すリストである。
【００３４】
図３から図６を参照して、引数情報埋め込み部２１の処理例を説明する。
【００３５】
まず、引数情報埋め込み部２１は、図５に示す呼び出し先関数リスト３３から、呼び出し先関数の関数名を抽出する。例えば、図５の１行目は、図３に示すソースコード３１において、呼び出し元関数ｍａｉｎ（）から呼び出し先関数ｆｕｎｃ１（）への呼び出し関係が存在し、ｆｕｎｃ１（）の引数ｖａｌに値ｖａｌＢが代入されることを示す。引数情報埋め込み部２１は、呼び出し先関数ｆｕｎｃ１（）の関数名を抽出する。
【００３６】
次に、引数情報埋め込み部２１は、図４に示す関数リスト３２から呼び出し先関数の関数名に対応するソースコード３１を抽出する。例えば、引数情報埋め込み部２１は、図４の２行目のｆｕｎｃ１（）のソースコード３１を抽出する。
【００３７】
次に、引数情報埋め込み部２１は、抽出したソースコード３１に引数情報を埋め込み、引数情報埋め込み済みソースコード３４を作成する。例えば、引数情報埋め込み部２１は、ｆｕｎｃ１（）のソースコード３１内の変数ｖａｌをｖａｌＢに置き換え、図６の１行目の引数情報埋め込み済みソースコード３４を作成する。
【００３８】
呼び出し先関数の引数がポインタ型の場合を説明する。
【００３９】
図５の２行目は、図３に示すソースコード３１において、呼び出し元関数ｍａｉｎ（）から呼び出し先関数ｆｕｎｃ２（）への呼び出し関係が存在し、ｆｕｎｃ２（）のポインタ型引数ｖａｌに値＆ｖａｌＢが代入されることを示す。引数情報埋め込み部２１は、呼び出し先関数ｆｕｎｃ２（）の関数名を抽出する。
【００４０】
次に、引数情報埋め込み部２１は、図４の３行目のｆｕｎｃ２（）のソースコード３１を抽出する。
【００４１】
次に、引数情報埋め込み部２１は、ｆｕｎｃ２（）のソースコード３１内のポインタ型変数ｖａｌを＆ｖａｌＢに、＊ｖａｌをｖａｌＢに置き換え、図６の２行目の引数情報埋め込み済みソースコード３４を作成する。
【００４２】
第２ステップとして、ソースコード展開部２２は、呼び出し元関数のソースコード３１における呼び出し先関数の呼び出し箇所を、引数情報埋め込み部２１により生成された引数情報埋め込み済みソースコード３４に置き換えることで、展開済みソースコード３５を生成する。
【００４３】
具体的には、ソースコード展開部２２は、引数情報埋め込み部２１から出力された引数情報埋め込み済みソースコード３４をソースコード３１の呼び出し箇所に展開し、展開済みソースコード３５をメモリ１２に書き込む。また、ソースコード展開部２２は、通信インタフェース１４を通して展開済みソースコード３５を出力する。
【００４４】
図３、図６および図７を参照して、ソースコード展開部２２の処理例を説明する。
【００４５】
まず、ソースコード展開部２２は、図６に示す引数情報埋め込み済みソースコード３４を抽出する。例えば、ソースコード展開部２２は、図６の１行目の呼び出し先関数ｆｕｎｃ１（）の引数情報埋め込み済みソースコード３４を抽出する。
【００４６】
次に、ソースコード展開部２２は、図３に示すソースコード３１の関数の呼び出し箇所に、対応する引数情報埋め込み済みソースコード３４を展開し、図７に示す展開済みソースコード３５を作成する。例えば、ソースコード展開部２２は、図３のファイル１の３行目のｆｕｎｃ１（）の呼び出し箇所を図６の１行目の呼び出し先関数ｆｕｎｃ１（）の引数情報埋め込み済みソースコード３４に置き換える。このとき、ソースコード展開部２２は、展開前と展開後とでソースコードの処理が同一になるように、不要なｒｅｔｕｒｎ文を除去する。例えば、ソースコード展開部２２は、図６の１行目の呼び出し先関数ｆｕｎｃ１（）の引数情報埋め込み済みソースコード３４を図３のファイル１の３行目に展開する際に、図６の１行目の引数情報埋め込み済みソースコード３４の７行目のｒｅｔｕｒｎ文を削除してから展開を実施する。
【００４７】
ソースコード展開部２２は、再帰関数の呼び出し箇所を引数情報埋め込み済みソースコード３４に置き換えずに、展開済みソースコード３５を生成してもよい。あるいは、ソースコード展開部２２は、呼び出し先関数が再帰関数である場合、呼び出し先関数の呼び出し箇所として指定回数分の再帰呼び出し箇所を引数情報埋め込み済みソースコード３４に置き換えることで、展開済みソースコード３５を生成してもよい。すなわち、再帰関数が使用されている場合は、再帰関数を展開しなくてもよいし、決められた回数展開を行ってもよい。
【００４８】
ソースコード展開部２２は、呼び出し先関数の呼び出し箇所で関数テーブルまたは関数ポインタが使用されている場合、ユーザの操作に従って、複数の関数の候補から呼び出し先関数を選択してもよい。あるいは、ソースコード展開部２２は、関数テーブルまたは関数ポインタが使用されている呼び出し箇所を引数情報埋め込み済みソースコード３４に置き換えずに、展開済みソースコード３５を生成してもよい。すなわち、関数テーブルまたは関数ポインタ等が使用されていて候補の呼び出し先関数が複数ある場合は、ユーザが候補となる関数を選択できるようにしてもよいし、呼び出し先が不明として展開を実施しなくてもよい。
【００４９】
ソースコード展開部２２は、呼び出し先関数の呼び出し箇所でマクロが使用されている場合、マクロを呼び出し先関数の関数名に置き換えてから、呼び出し先関数の呼び出し箇所を引数情報埋め込み済みソースコード３４に置き換えることで、展開済みソースコード３５を生成してもよい。あるいは、ソースコード展開部２２は、マクロが使用されている呼び出し箇所を引数情報埋め込み済みソースコード３４に置き換えずに、展開済みソースコード３５を生成してもよい。すなわち、関数名がマクロで定義されている場合は、マクロを一度関数名に置き換えてから呼び出し先関数を展開してもよいし、呼び出し先が不明として展開を実施しなくてもよい。
【００５０】
ソースコード展開部２２は、呼び出し元関数のソースコード３１を画面に表示し、ユーザの操作に従って、呼び出し元関数のソースコード３１の表示を展開済みソースコード３５の表示に切り替えてもよい。すなわち、ソースコード展開部２２は、ユーザからの指示に基づき、ソースコードの展開を実施してもよい。具体的には、図８に示すように、呼び出し箇所に「＋」等のボタンを設置し、このボタンが押下されたときに対象の関数を展開してもよい。例えば、ユーザが図８のファイル１（展開なし）の３行目の「＋」ボタンを押下すると、ファイル１（展開の深さ１）の３行目から７行目に図６の１行目のｆｕｎｃ１（）の引数情報埋め込み済みソースコード３４が展開される。
【００５１】
ソースコード展開部２２は、展開済みソースコード３５を画面に表示し、ユーザの操作に従って、展開済みソースコード３５の表示を呼び出し元関数のソースコード３１の表示に切り替えてもよい。すなわち、ソースコード展開部２２は、ユーザからの指示に基づき、ソースコードの収納を実施してもよい。具体的には、図８に示すように、引数情報埋め込み済みソースコード３４の展開箇所に「−」等のボタンを設置し、このボタンが押下されたときに対象の展開ソースコードを収納してもよい。例えば、ユーザが図８のファイル１（展開の深さ１）の３行目の「−」ボタンを押下すると、ファイル１（展開なし）の３行目のように表示が展開前の表示に戻る。
【００５２】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、呼び出し元関数のソースコード３１における呼び出し先関数の呼び出し箇所を引数情報埋め込み済みソースコード３４に置き換えた展開済みソースコード３５が得られるため、コーディング作業またはレビュー作業の際に、実際に引数がどのように使われているかを効率的に確認できる。すなわち、本実施の形態によれば、コーディング作業またはレビュー作業を効率化できる。
【００５３】
本実施の形態に係るソースコード表示装置１０は、呼び出し先要素を多階層に展開して表示し、また展開時に引数情報をコード内に埋め込む。本実施の形態によれば、多階層の展開と引数情報の埋め込みにより、画面を切り替えることなく処理の流れを把握することが容易になり、コーディング作業およびレビュー作業を効率化できる。すなわち、本実施の形態によれば、作業者がソフトウェアの処理の流れを追いやすくなりコーディング作業およびレビュー作業を効率化することが可能である。
【００５４】
＊＊＊他の構成＊＊＊
本実施の形態では、引数情報埋め込み部２１およびソースコード展開部２２の機能がソフトウェアにより実現されるが、変形例として、引数情報埋め込み部２１およびソースコード展開部２２の機能がハードウェアにより実現されてもよい。この変形例について、主に本実施の形態との差異を説明する。
【００５５】
図９を参照して、本実施の形態の変形例に係るソースコード表示装置１０の構成を説明する。
【００５６】
ソースコード表示装置１０は、電子回路１５および通信インタフェース１４といったハードウェアを備える。
【００５７】
電子回路１５は、引数情報埋め込み部２１およびソースコード展開部２２の機能を実現する専用のハードウェアである。電子回路１５は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＦＰＧＡ、ＡＳＩＣ、または、これらのうちいくつか、もしくは、すべての組み合わせである。「ＩＣ」は、Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。「ＧＡ」は、Ｇａｔｅ  Ａｒｒａｙの略語である。「ＦＰＧＡ」は、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。「ＡＳＩＣ」は、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。
【００５８】
ソースコード表示装置１０は、電子回路１５を代替する複数の電子回路を備えていてもよい。これら複数の電子回路は、全体として引数情報埋め込み部２１およびソースコード展開部２２の機能を実現する。それぞれの電子回路は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＦＰＧＡ、ＡＳＩＣ、または、これらのうちいくつか、もしくは、すべての組み合わせである。
【００５９】
別の変形例として、引数情報埋め込み部２１およびソースコード展開部２２の機能がソフトウェアとハードウェアとの組み合わせにより実現されてもよい。すなわち、引数情報埋め込み部２１およびソースコード展開部２２の機能の一部が専用のハードウェアにより実現され、残りがソフトウェアにより実現されてもよい。
【００６０】
プロセッサ１１および電子回路１５は、いずれも処理回路である。すなわち、ソースコード表示装置１０の構成が図１および図９のいずれに示した構成であっても、引数情報埋め込み部２１およびソースコード展開部２２の動作は、処理回路により行われる。
【００６１】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を、図１０および図１１を用いて説明する。実施の形態２は、特に、呼び出し先関数リスト３３をソースコード３１から生成する点が実施の形態１と異なる。
【００６２】
＊＊＊構成の説明＊＊＊
図１０を参照して、本実施の形態に係るソースコード表示装置１０の構成を説明する。
【００６３】
ソースコード表示装置１０は、機能要素として、実施の形態１と同様の引数情報埋め込み部２１と、ソースコード展開部２２とのほかに、呼び出し先関数抽出部２３を備える。引数情報埋め込み部２１、ソースコード展開部２２および呼び出し先関数抽出部２３の機能は、ソフトウェアにより実現される。
【００６４】
本実施の形態では、ソースコード表示プログラムは、引数情報埋め込み部２１、ソースコード展開部２２および呼び出し先関数抽出部２３により行われる処理をそれぞれ引数情報埋め込み処理、ソースコード展開処理および呼び出し先関数抽出処理としてコンピュータに実行させるプログラムである。
【００６５】
＊＊＊動作の説明＊＊＊
図１１を参照して、本実施の形態に係るソースコード表示装置１０の動作を説明する。ソースコード表示装置１０の動作は、本実施の形態に係るソースコード表示方法に相当する。
【００６６】
第１ステップとして、呼び出し先関数抽出部２３は、呼び出し先関数のソースコード３１と呼び出し元関数のソースコード３１とから、呼び出し先関数リスト３３を生成する。
【００６７】
具体的には、呼び出し先関数抽出部２３は、通信インタフェース１４を介してソースコード３１と関数リスト３２との入力を受け付け、メモリ１２に書き込む。呼び出し先関数抽出部２３は、入力されたソースコード３１から関数の呼び出し箇所を抽出し、呼び出し先関数の関数名と呼び出し元関数の関数名と関数の呼び出し箇所と引数情報とを抽出して、呼び出し先関数リスト３３を生成する。呼び出し先関数抽出部２３は、呼び出し先関数リスト３３をメモリ１２に書き込む。
【００６８】
第２ステップとして、引数情報埋め込み部２１は、呼び出し先関数抽出部２３により生成された呼び出し先関数リスト３３を参照して、引数情報埋め込み済みソースコード３４を生成する。引数情報埋め込み済みソースコード３４を生成する処理については、実施の形態１における第１ステップと同じであるため、説明を省略する。
【００６９】
第３ステップとして、ソースコード展開部２２は、展開済みソースコード３５を生成する。展開済みソースコード３５を生成する処理については、実施の形態１における第２ステップと同じであるため、説明を省略する。
【００７０】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、ソースコード３１から自動的に呼び出し先関数リスト３３が生成される。これにより、ユーザの負担を減らすことが可能になる。
【００７１】
＊＊＊他の構成＊＊＊
本実施の形態では、実施の形態１と同じように、引数情報埋め込み部２１、ソースコード展開部２２および呼び出し先関数抽出部２３の機能がソフトウェアにより実現されるが、実施の形態１の変形例と同じように、引数情報埋め込み部２１、ソースコード展開部２２および呼び出し先関数抽出部２３の機能がハードウェアにより実現されてもよい。あるいは、引数情報埋め込み部２１、ソースコード展開部２２および呼び出し先関数抽出部２３の機能がソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
【００７２】
実施の形態３．
本実施の形態について、主に実施の形態２との差異を、図１２および図１３を用いて説明する。実施の形態３は、特に、関数リスト３２をソースコード３１から生成する点が実施の形態２と異なる。
【００７３】
＊＊＊構成の説明＊＊＊
図１２を参照して、本実施の形態に係るソースコード表示装置１０の構成を説明する。
【００７４】
ソースコード表示装置１０は、機能要素として、実施の形態２と同様の引数情報埋め込み部２１と、ソースコード展開部２２と、呼び出し先関数抽出部２３とのほかに、関数リスト作成部２４とを備える。引数情報埋め込み部２１、ソースコード展開部２２、呼び出し先関数抽出部２３および関数リスト作成部２４の機能は、ソフトウェアにより実現される。
【００７５】
本実施の形態では、ソースコード表示プログラムは、引数情報埋め込み部２１、ソースコード展開部２２、呼び出し先関数抽出部２３および関数リスト作成部２４により行われる処理をそれぞれ引数情報埋め込み処理、ソースコード展開処理、呼び出し先関数抽出処理および関数リスト作成処理としてコンピュータに実行させるプログラムである。
【００７６】
＊＊＊動作の説明＊＊＊
図１３を参照して、本実施の形態に係るソースコード表示装置１０の動作を説明する。ソースコード表示装置１０の動作は、本実施の形態に係るソースコード表示方法に相当する。
【００７７】
第１ステップとして、関数リスト作成部２４は、呼び出し先関数のソースコード３１と呼び出し元関数のソースコード３１とから、関数リスト３２を生成する。
【００７８】
具体的には、関数リスト作成部２４は、入力されたソースコード３１から関数の定義を抽出して、関数リスト３２を生成する。関数リスト作成部２４は、関数リスト３２をメモリ１２に書き込む。
【００７９】
第２ステップとして、呼び出し先関数抽出部２３は、呼び出し先関数のソースコード３１と呼び出し元関数のソースコード３１とから、呼び出し先関数リスト３３を生成する。呼び出し先関数リスト３３を生成する処理については、実施の形態２における第１ステップと同じであるため、説明を省略する。
【００８０】
第３ステップとして、引数情報埋め込み部２１は、関数リスト作成部２４により生成された関数リスト３２を参照して、引数情報埋め込み済みソースコード３４を生成する。引数情報埋め込み済みソースコード３４を生成する処理については、実施の形態１における第１ステップおよび実施の形態２における第２ステップと同じであるため、説明を省略する。
【００８１】
第４ステップとして、ソースコード展開部２２は、展開済みソースコード３５を生成する。展開済みソースコード３５を生成する処理については、実施の形態１における第２ステップおよび実施の形態２における第３ステップと同じであるため、説明を省略する。
【００８２】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、ソースコード３１から自動的に関数リスト３２が生成される。これにより、ユーザの負担を減らすことが可能になる。
【００８３】
＊＊＊他の構成＊＊＊
本実施の形態では、実施の形態１と同じように、引数情報埋め込み部２１、ソースコード展開部２２、呼び出し先関数抽出部２３および関数リスト作成部２４の機能がソフトウェアにより実現されるが、実施の形態１の変形例と同じように、引数情報埋め込み部２１、ソースコード展開部２２、呼び出し先関数抽出部２３および関数リスト作成部２４の機能がハードウェアにより実現されてもよい。あるいは、引数情報埋め込み部２１、ソースコード展開部２２、呼び出し先関数抽出部２３および関数リスト作成部２４の機能がソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
【００８４】
実施の形態４．
本実施の形態について、主に実施の形態１との差異を、図１４から図１８を用いて説明する。実施の形態４は、特に、展開済みソースコード３５に加えた修正を、展開前のソースコード３１に反映する点が実施の形態１と異なる。
【００８５】
＊＊＊構成の説明＊＊＊
図１４を参照して、本実施の形態に係るソースコード表示装置１０の構成を説明する。
【００８６】
ソースコード表示装置１０は、機能要素として、実施の形態１と同様の引数情報埋め込み部２１と、ソースコード展開部２２とのほかに、修正内容反映部２５を備える。引数情報埋め込み部２１、ソースコード展開部２２および修正内容反映部２５の機能は、ソフトウェアにより実現される。
【００８７】
本実施の形態では、ソースコード表示プログラムは、引数情報埋め込み部２１、ソースコード展開部２２および修正内容反映部２５により行われる処理をそれぞれ引数情報埋め込み処理、ソースコード展開処理および修正内容反映処理としてコンピュータに実行させるプログラムである。
【００８８】
＊＊＊動作の説明＊＊＊
図１５を参照して、本実施の形態に係るソースコード表示装置１０の動作を説明する。ソースコード表示装置１０の動作は、本実施の形態に係るソースコード表示方法に相当する。
【００８９】
第１ステップとして、引数情報埋め込み部２１は、引数情報埋め込み済みソースコード３４を生成する。引数情報埋め込み済みソースコード３４を生成する処理については、実施の形態１における第１ステップと同じであるため、説明を省略する。
【００９０】
第２ステップとして、ソースコード展開部２２は、展開済みソースコード３５を生成する。展開済みソースコード３５を生成する処理については、実施の形態１における第２ステップと同じであるため、説明を省略する。
【００９１】
本実施の形態では、展開済みソースコード３５に含まれる引数情報埋め込み済みソースコード３４に修正が加えられた場合、第３ステップの処理が行われる。
【００９２】
第３ステップとして、修正内容反映部２５は、呼び出し元関数のソースコード３１において修正箇所に対応する呼び出し先関数の呼び出し箇所に修正内容を反映する。呼び出し元関数のソースコード３１において修正箇所に対応する呼び出し先関数の呼び出し箇所と同じ関数の他の呼び出し箇所があれば、修正内容反映部２５は、展開済みソースコード３５において当該他の呼び出し箇所に対応する引数情報埋め込み済みソースコード３４に修正内容を反映してもよい。
【００９３】
具体的には、修正内容反映部２５は、通信インタフェース１４を通してユーザが展開済みソースコード３５に対して行った修正内容を示す情報を取得し、その情報からソースコード３１に修正内容を反映し、修正済み展開前ソースコード３６を生成する。修正内容反映部２５は、修正済み展開前ソースコード３６をメモリ１２に書き込む。また、修正内容反映部２５は、通信インタフェース１４を通して修正済み展開前ソースコード３６を出力する。このとき、修正内容反映部２５は、展開済みソースコード３５内の修正対象関数を展開したすべての箇所に対して修正内容を反映し、修正済み展開済みソースコード３７を生成してもよい。
【００９４】
図１６から図１８を参照して、修正内容反映部２５の処理例を説明する。
【００９５】
修正内容反映部２５は、ユーザが図１６のファイル４（展開の深さ１・修正前）の３行目のＭＡＣＲＯ＿ＢをＭＡＣＲＯ＿Ｄに修正したことを受けて、ファイル４（展開なし・修正前）の１１行目のＭＡＣＲＯ＿ＢをＭＡＣＲＯ＿Ｄに修正することで、修正済み展開前ソースコード３６として、図１７のファイル４（展開なし・修正反映後）を作成する。修正内容反映部２５は、ファイル４（展開の深さ１・修正後）の９行目のＭＡＣＲＯ＿ＢをＭＡＣＲＯ＿Ｄに修正することで、修正済み展開済みソースコード３７として、図１８のファイル４（展開の深さ１・修正反映後）を作成してもよい。
【００９６】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、展開済みソースコード３５に対して加えられた修正が、展開前のソースコード３１に反映される。これにより、ユーザが展開済みソースコード３５に対して施した修正の内容からソースコード３１の自動編集が可能となる。
【００９７】
＊＊＊他の構成＊＊＊
本実施の形態では、実施の形態１と同じように、引数情報埋め込み部２１、ソースコード展開部２２および修正内容反映部２５の機能がソフトウェアにより実現されるが、実施の形態１の変形例と同じように、引数情報埋め込み部２１、ソースコード展開部２２および修正内容反映部２５の機能がハードウェアにより実現されてもよい。あるいは、引数情報埋め込み部２１、ソースコード展開部２２および修正内容反映部２５の機能がソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
【符号の説明】
【００９８】
１０  ソースコード表示装置、１１  プロセッサ、１２  メモリ、１３  ストレージ、１４  通信インタフェース、１５  電子回路、２１  引数情報埋め込み部、２２  ソースコード展開部、２３  呼び出し先関数抽出部、２４  関数リスト作成部、２５  修正内容反映部、３１  ソースコード、３２  関数リスト、３３  呼び出し先関数リスト、３４  引数情報埋め込み済みソースコード、３５  展開済みソースコード、３６  修正済み展開前ソースコード、３７  修正済み展開済みソースコード。
【図１】
2019139435.tif 000003
【図２】
2019139435.tif 000004
【図３】
2019139435.tif 000005
【図４】
2019139435.tif 000006
【図５】
2019139435.tif 000007
【図６】
2019139435.tif 000008
【図７】
2019139435.tif 000009
【図８】
2019139435.tif 000010
【図９】
2019139435.tif 000011
【図１０】
2019139435.tif 000012
【図１１】
2019139435.tif 000013
【図１２】
2019139435.tif 000014
【図１３】
2019139435.tif 000015
【図１４】
2019139435.tif 000016
【図１５】
2019139435.tif 000017
【図１６】
2019139435.tif 000018
【図１７】
2019139435.tif 000019
【図１８】
2019139435.tif 000020