以下、図面を参照して、実施形態について説明する。
本実施形態に係る電子計算機は、例えばJava(登録商標)またはC言語等のプログラム言語で記述されたソースコードの内容を理解すること(コードリーディング)を支援するために用いられる。以下、本実施形態に係る電子計算機を、便宜的に、コードリーディング支援装置と称する。
図1は、本実施形態に係るコードリーディング支援装置の機能構成の一例を示すブロック図である。図1に示すように、コードリーディング支援装置10は、コード格納部11、ダイアグラム格納部12、コード表示処理部13、ダイアグラム表示処理部14、操作受付部15及び編集処理部16を含む。
コード格納部11には、例えばコードリーディング支援装置10を使用するユーザが内容を理解すべきソースコードが格納される。また、コード格納部11には、当該コード格納部11に格納されているソースコードに対する解析結果を示すコード解析情報が格納される。なお、コード格納部11には、複数のソースコード及び当該複数のソースコードの各々に対する解析結果を示すコード解析情報が格納されていてもよい。
ここで、ソースコードには複数の関数が含まれるが、当該複数の関数の各々は、少なくとも1つのコードブロックから構成される。なお、本実施形態において、コードブロックとは、例えば複数の行に亘って記載されたコードのまとまり(ブロック)であり、上記したJavaまたはC言語等では「{」及び「}」で囲まれた部分に相当する。
この場合、コード格納部11に格納されるコード解析情報は、当該コード格納部11に格納されているソースコードに含まれる関数及び当該関数を構成するコードブロック等を示す。
なお、コード解析情報を得るためにはソースコードを解析する必要があるが、当該ソースコードの解析は、例えば統合開発環境において実行される。また、この統合開発環境を提供するためのコード解析ツールとしては、Eclipse JDT、Understand及びClang等が利用可能である。
更に、コード格納部11には、当該コード格納部11に格納されているソースコードが表示される際に当該ソースコードに付加される情報(以下、コード付加情報と表記)が格納されている。
ダイアグラム格納部12には、コード格納部11に格納されているソースコードの少なくとも一部を表すダイアグラムを表示するために用いられるダイアグラム情報が格納される。また、ダイアグラム格納部12には、ダイアグラム情報を用いてダイアグラムが表示される際に当該ダイアグラムに付加される情報(以下、ダイアグラム付加情報と表記)が格納されている。
ここで、本実施形態に係るコードリーディング支援装置10においては、少なくともコード表示領域(第1表示領域)及びダイアグラム表示領域(第2表示領域)を含む画面が表示される。
コード表示処理部13は、コード格納部11に格納されているソースコードをコード表示領域に表示する処理を実行する。なお、コード表示処理部13は、コード表示領域にソースコードを表示する際に、コード格納部11に格納されているコード付加情報を当該ソースコードに付加する。
ダイアグラム表示処理部14は、ダイアグラム格納部12に格納されているダイアグラム情報を用いて、コード表示領域に表示されているソースコードの一部を表すダイアグラムをダイアグラム表示領域に表示する処理を実行する。なお、ダイアグラム表示処理部14は、ダイアグラム表示領域にダイアグラムを表示する際に、ダイアグラム格納部12に格納されているダイアグラム付加情報を当該ダイアグラムに付加する。なお、ダイアグラム表示処理部14は、ダイアグラムを表示する際に、上記したコード格納部11に格納されているコード解析情報を利用する。
操作受付部15は、コード表示領域に表示されたソースコード及びダイアグラム表示領域に表示されたダイアグラムに対するユーザの操作を受け付ける。
編集処理部16は、操作受付部15によって受け付けられるユーザの操作に基づいて、例えばダイアグラム表示領域に表示されたダイアグラムを編集する。また、編集処理部16は、操作受付部15によって受け付けられるユーザの操作に基づいて、コード格納部11に格納されているコード付加情報及びダイアグラム格納部12に格納されているダイアグラム付加情報を変更(編集)する。
本実施形態に係るコードリーディング支援装置10は、ソースコードのビューア(またはエディタ)としての機能に加えて、当該ソースコードの少なくとも一部を表すダイアグラムのエディタとしての機能を有する。
図2は、図1に示すコードリーディング支援装置10のシステム構成の一例を示す。ここでは、コードリーディング支援装置10が例えばパーソナルコンピュータ(PC)等であるものとして説明するが、コードリーディング支援装置10は他の電子計算機であってもよい。
図2に示すように、コードリーディング支援装置10は、CPU101、不揮発性メモリ102、主メモリ103、BIOS-ROM104、システムコントローラ105、入力デバイス106、表示デバイス107及びエンベデッドコントローラ(EC)108等を備える。
CPU101は、コードリーディング支援装置10内の各コンポーネントの動作を制御するプロセッサである。CPU101は、ストレージデバイスである不揮発性メモリ102から主メモリ103にロードされる様々なプログラムを実行する。このプログラムには、オペレーティングシステム(OS)及び上記したようにコードリーディングを支援するためのプログラム(以下、コードリーディング支援プログラムと表記)等が含まれる。
また、CPU101は、BIOS-ROM104に格納された基本入出力システム(BIOS)も実行する。BIOSは、ハードウェア制御のためのプログラムである。
システムコントローラ105は、CPU101のローカルバスと各種コンポーネントとの間を接続するデバイスである。
入力デバイス106は、例えばキーボード及びマウス等を含む。表示デバイス107は、例えば液晶表示装置のようなディスプレイ等を含む。EC108は、電力管理のためのエンベデッドコントローラを含むワンチップマイクロコンピュータである。
なお、図2においては、CPU101、不揮発性メモリ102、主メモリ103、BIOS-ROM104、システムコントローラ105、入力デバイス106、表示デバイス107及びEC108のみが示されているが、コードリーディング支援装置10は、例えばHDD(Hard Disk Drive)及びSSD(Solid State Drive)のような他の記憶装置を備えていてもよいし、外部装置との通信を実行するように構成された通信デバイス等を備えていてもよい。
本実施形態において、図1に示すコード格納部11及びダイアグラム格納部12は、例えば図2に示す不揮発性メモリ102または他の記憶装置を用いて実現される。
また、本実施形態において、図1に示す各部13~16の一部または全ては、例えば図2に示すCPU101(つまり、コードリーディング支援装置10のコンピュータ)に上記したコードリーディング支援プログラムを実行させること、すなわちソフトウェアによって実現されるものとする。なお、コードリーディング支援プログラムは、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、コードリーディング支援プログラムは、例えばネットワークを介してコードリーディング支援装置10にダウンロードされても構わない。
ここでは、各部13~16の一部または全てがソフトウェアによって実現されるものとして説明したが、当該各部13~16の一部または全ては、例えばハードウェアによって実現されてもよいし、ソフトウェア及びハードウェアの組み合わせ構成として実現されてもよい。
以下、上記した図1に示すコード格納部11及びダイアグラム格納部12に格納される各種情報について説明する。
まず、図3及び図4を参照して、コード格納部11に格納されているコード解析情報について説明する。上記したようにコード格納部11に格納されているソースコードは複数の関数を含み、当該関数の各々は少なくとも1つのコードブロックから構成されるが、コード解析情報は、当該ソースコードに含まれる関数を示す関数情報及び当該関数を構成するコードブロックを示すコードブロック情報を含む。
図3は、上記したコード解析情報に含まれる関数情報のデータ構造の一例を示す。図3に示すように、関数情報には、ソースコードID、関数ID及び位置情報が含まれる。
ソースコードIDは、コード格納部11に格納されているソースコードを識別するための識別情報である。
関数IDは、当該関数IDに対応づけられているソースコードIDによって識別されるソースコードに含まれる関数を識別するための識別情報である。
位置情報は、コード格納部11に格納されているソースコード(つまり、当該位置情報に対応づけられているソースコードIDによって識別されるソースコード)における、当該位置情報に対応づけられている関数IDによって識別される関数の位置を示す。なお、関数情報に含まれる位置情報は、ソースコード中の関数が記述されている行番号(開始行及び終了行)等を含む。
図3に示す例では、関数情報111a及び111bが示されている。関数情報111aには、ソースコードID「1」、関数ID「1」及び位置情報「x1~x2」が含まれている。この関数情報111aによれば、ソースコードID「1」によって識別されるソースコードには関数ID「1」によって識別される関数が含まれており、当該関数が当該ソースコード中のx1行目~x2行目に記述されていることが示されている。
一方、関数情報111bには、ソースコードID「1」、関数ID「2」及び位置情報「y1~y2」が含まれている。この関数情報111bによれば、ソースコードID「1」によって識別されるソースコードには関数ID「2」によって識別される関数が含まれており、当該関数が当該ソースコード中のy1行目~y2行目に記述されていることが示されている。
図3においては便宜的に関数情報111a及び111bについてのみ説明したが、コード格納部11に格納されているコード解析情報には、当該コード格納部11に格納されているソースコードに含まれる関数毎の関数情報が含まれている。
図4は、コード解析情報に含まれるコードブロック情報のデータ構造の一例を示す。図4に示すように、コードブロック情報には、関数ID、コードブロックID及び位置情報が含まれる。
関数IDは、上記した関数情報に含まれる関数IDであり、コード格納部11に格納されているソースコードに含まれる関数を識別するための識別情報である。
コードブロックIDは、当該コードブロックIDに対応づけられている関数IDによって識別される関数を構成するコードブロックを識別するための識別情報である。
位置情報は、上記したコード格納部11に格納されているソースコードにおける、当該位置情報に対応づけられているコードブロックIDによって識別されるコードブロックの位置を示す。なお、コードブロック情報に含まれる位置情報は、ソースコード中のコードブロックが記述されている行番号等を含む。
図4に示す例では、コードブロック情報112a及び112bが示されている。コードブロック情報112aには、関数ID「1」、コードブロックID「1」及び位置情報「x11~x12」が含まれている。このコードブロック情報112aによれば、関数ID「1」によって識別される関数がコードブロックID「1」によって識別されるコードブロックから構成されており、当該コードブロックがソースコード中のx11行目~x12行目に記述されていることが示されている。
一方、コードブロック情報112bには、関数ID「1」、コードブロックID「2」及び位置情報「x13~x14」が含まれている。このコードブロック情報112bによれば、関数ID「1」によって識別される関数がコードブロックID「2」によって識別されるコードブロックから構成されており、当該コードブロックがソースコード中のx13行目~x14行目に記述されていることが示されている。
図4においては便宜的にコードブロック情報112a及び112bについてのみ説明したが、コード格納部11に格納されているコード解析情報には、当該コード格納部11に格納されているソースコードに含まれる関数を構成するコードブロック毎のコードブロック情報が含まれている。
なお、図4に示すように1つの関数(つまり、関数ID「1」によって識別される関数)は複数のコードブロック(つまり、コードブロックID「1」及び「2」の各々によって識別されるコードブロック)から構成されてもよいが、当該関数は、例えば1つのコードブロック内に他のコードブロックが記述されるような入れ子構造を有していてもよい。また、関数そのものを1つのコードブロックとして扱うようにしてもよい。
図5は、コード格納部11に格納されているコード付加情報のデータ構造の一例を示す。図5に示すように、コード付加情報には、ソースコードID、付加内容及び位置情報が含まれる。
ソースコードIDは、コード格納部11に格納されているソースコードを識別するための識別情報である。
付加内容は、当該付加内容に対応づけられているソースコードIDによって識別されるソースコードがコード表示領域に表示される際に、当該ソースコードに付加される内容を示す。なお、本実施形態において、コード表示領域に表示されるソースコードには、例えばコメント及び強調情報等が付加される。
位置情報は、当該位置情報に対応づけられている付加内容に従ってコメントまたは強調情報等が付加される、コード格納部11に格納されているソースコード(つまり、当該位置情報に対応づけられているソースコードIDによって識別されるソースコード)の位置(部分)を示す。なお、コード付加情報に含まれる位置情報は、上記した関数情報及びコードブロック情報に含まれる位置情報と同様に、行番号等を含む。
図5に示す例では、コード付加情報113a及び113bが示されている。コード付加情報113aには、ソースコードID「1」、付加内容「強調」及び位置情報「x1~x2」が含まれている。このコード付加情報113aによれば、ソースコードID「1」によって識別されるソースコードがコード表示領域に表示される際に、当該ソースコード中のx1行目~x2行目に強調情報が付加されることが示されている。
なお、ソースコードに対して強調情報が付加される場合には、例えば強調されていることを表す図形、記号またはマーク等がソースコードの該当する部分(つまり、コード付加情報に含まれる位置情報によって示される位置)に付加されればよいが、当該部分(テキスト)のフォント(書体、太さ、色彩等)が変更されてもよい。すなわち、本実施形態において、「ソースコード(の部分)に対して強調情報が付加される」とは、該当するソースコードの部分が強調されていることをユーザが把握することができるように、当該ソースコードの部分に対して所定の処理を施すことをいう。以下の説明においては、ソースコードに強調情報を付加することを、便宜的にソースコードを強調表示すると表現する。
一方、コード付加情報113bには、ソースコードID「1」、付加内容「コメント1」及び位置情報「x15」が含まれている。このコード付加情報113bによれば、ソースコードID「1」によって識別されるソースコードがコード表示領域に表示される際に、当該ソースコード中のx15行目にコメント1が付加されることが示されている。
図5においては便宜的にコード付加情報113a及び113bについてのみ説明したが、コード格納部11には、他の付加情報が格納されていてもよい。
また、図5に示す例では付加内容としてコメント及び強調情報が付加されることについてのみ説明したが、当該付加内容は、ソースコードが表示される際に当該ソースコードに付加される(つまり、当該ソースコードの表示を変更する)ものであれば他の内容であっても構わない。
次に、図6は、ダイアグラム格納部12に格納されているダイアグラム情報のデータ構造の一例を示す。図6に示すように、ダイアグラム情報には、ダイアグラムID、呼び出し元関数ID及び呼び出し先関数IDが含まれる。
ダイアグラムIDは、上記したダイアグラム表示領域に表示されるダイアグラムを識別するための識別情報である。
呼び出し元関数IDは、コード格納部11に格納されているソースコードに含まれる関数(第1関数)を識別するための識別情報である。呼び出し元関数IDによって識別される関数は、当該呼び出し元関数IDに対応づけられている呼び出し先関数IDによって識別される関数を含むように定義されているものとする。
呼び出し先関数IDは、コード格納部11に格納されているソースコードに含まれる関数(第2関数)を識別するための識別情報である。なお、呼び出し先関数IDによって識別される関数は、上記した当該呼び出し先関数IDに対応づけられている呼び出し元関数IDによって識別される関数内に記述された関数である。
すなわち、上記した呼び出し元関数IDによって識別される関数は呼び出し元関数であり、呼び出し先関数IDによって識別される関数は呼び出し先関数である。このため、ダイアグラム情報に含まれる呼び出し元関数ID及び呼び出し先関数IDは、当該ダイアグラム情報を用いて表示されるダイアグラムにおいて複数の関数の間の呼び出し関係を表すために用いられる。
図6に示す例では、ダイアグラム情報121a及び121bが示されている。ダイアグラム情報121aには、ダイアグラムID「1」、呼び出し元関数ID「1」及び呼び出し先関数ID「2」が含まれている。このダイアグラム情報121aによれば、ダイアグラムID「1」によって識別されるダイアグラムが、呼び出し先関数ID「2」によって識別される関数が呼び出し元関数ID「1」によって識別される関数において呼び出されるという呼び出し関係を表すことが示されている。
一方、ダイアグラム情報121bには、ダイアグラムID「1」、呼び出し元関数ID「2」及び呼び出し先関数ID「3」が含まれている。このダイアグラム情報121bによれば、ダイアグラムID「1」によって識別されるダイアグラムが、呼び出し先関数ID「3」によって識別される関数が呼出元関数ID「2」によって識別される関数において呼び出されるという呼び出し関係を表すことが示されている。
図6においては便宜的にダイアグラム情報121a及び121bについてのみ説明したが、ダイアグラム格納部12には、他のダイアグラム情報が格納されていてもよい。
なお、図6に示すように、ダイアグラム(例えば、ダイアグラムID「1」によって識別されるダイアグラム)は、複数の呼び出し関係を表すものであってもよい。
図7は、ダイアグラム格納部12に格納されているダイアグラム付加情報のデータ構造の一例を示す。図7に示すように、ダイアグラム付加情報には、ダイアグラムID、付加内容及び位置情報が含まれる。
ダイアグラムIDは、ダイアグラム表示領域に表示されるダイアグラムを識別するための識別情報である。
付加内容は、当該付加内容に対応づけられているダイアグラムIDによって識別されるダイアグラムがダイアグラム表示領域に表示される際に、当該ダイアグラムに付加される内容を示す。なお、本実施形態において、ダイアグラム表示領域に表示されるダイアグラムには、例えばコメント及び強調情報等が付加される。
位置情報は、当該位置情報に対応づけられている付加内容に従ってコメントまたは強調情報等が付加される、当該位置情報に対応づけられているダイアグラムIDによって識別されるダイアグラム上の位置を示す。なお、ダイアグラム付加情報に含まれる位置情報としては、例えば上記した関数ID及びコードブロック情報ID等が用いられる。
図7に示す例では、ダイアグラム付加情報122a及び122bが示されている。ダイアグラム付加情報122aには、ダイアグラムID「1」、付加内容「強調」及び位置情報「関数ID「1」」が含まれている。このダイアグラム付加情報122aによれば、ダイアグラムID「1」によって識別されるダイアグラムがダイアグラム表示領域に表示される際に、関数ID「1」によって識別される関数を表現する位置に強調情報が付加されることが示されている。
なお、ダイアグラムにおいて強調情報が付加される場合には、例えば強調されていることを表す色彩がダイアグラムの該当する部分(つまり、ダイアグラム情報に含まれる位置情報によって示される位置)に付加されればよいが、当該部分に強調されていることを表す記号、マークまたは模様等が付加されてもよい。すなわち、本実施形態において、「ダイアグラム(の部分)に対して強調情報が付加される」とは、該当するダイアグラムの部分が強調されていることをユーザが把握することができるように、当該ダイアグラムの部分に対して所定の処理を施すことをいう。以下の説明においては、ダイアグラムに強調情報を付加することを、便宜的にダイアグラムを強調表示すると表現する。
一方、ダイアグラム付加情報122bには、ダイアグラムID「1」、付加内容「コメント2」及び位置情報「コードブロックID「1」」が含まれている。このダイアグラム付加情報122bによれば、ダイアグラムID「1」によって識別されるダイアグラムがダイアグラム表示領域に表示される際に、コードブロックID「1」によって識別されるコードブロックを表現する位置にコメント2が付加されることが示されている。
なお、ダイアグラムにおいては、ソースコードに含まれる関数のみではなく、当該関数を構成するコードブロックをも表現することが可能であるが、当該ダイアグラムの具体例については後述する。
上記した図3~図7においては本実施形態において用いられる各種情報について説明したが、当該図3~図7において説明した情報は一例であり、当該情報の一部が省略されていてもよいし、当該情報に他の情報(項目)が含まれていてもよい。
また、図3~図5に示すデータ構造は一例であり、コード格納部11に格納されるコード解析情報(関数情報及び情報)及びコード付加情報は、まとめて1つの情報として管理されていてもよい。同様に、図6及び図7に示すデータ構造は一例であり、ダイアグラム格納部12に格納されるダイアグラム情報及びダイアグラム付加情報は、まとめて1つの情報として管理されていてもよい。
次に、本実施形態に係るコードリーディング支援装置10の動作について説明する。ここでは、ソースコードの一部を表すダイアグラムを生成して表示する際の処理(以下、ダイアグラム表示処理と表記)、当該ソースコードに対してコメントを付加する際の処理(以下、コメント付加処理と表記)及び当該ソースコードに対する強調表示の有無を変更する際の処理(以下、強調表示変更処理と表記)の各々について主に説明する。
まず、図8のフローチャートを参照して、ダイアグラム表示処理の処理手順の一例について説明する。
コードリーディング支援装置10を使用するユーザは、当該コードリーディング支援装置10上で上記したコードリーディング支援プログラムを起動する。
コードリーディング支援装置10上でコードリーディング支援プログラムが起動された場合、コードリーディング支援装置10に備えられる表示デバイス107(ディスプレイ)には、図9に示すような画面が表示される。
図9に示すように、コードリーディング支援装置10に表示される画面(以下、表示画面と表記)200には、コード表示領域201及びダイアグラム表示領域202が含まれる。
図9に示す例において、コード表示領域201及びダイアグラム表示領域202は、例えば上下方向に隣接するように並べて配置されている。なお、コード表示領域201及びダイアグラム表示領域202は、例えば左右方向に隣接するように配置されていてもよい。
また、表示画面200には、ファイル選択領域203が更に含まれている。ユーザは、ファイル選択領域203において、例えばコード表示領域201に表示するソースコード(ファイル)を選択することができる。
ユーザは、上記した表示画面200に対する各種操作を行うことによって、ソースコードの一部を表すダイアグラムを作成することができる。
また、ファイル選択領域203において例えば過去に作成されたダイアグラムを表示するためのダイアグラム情報(ファイル)が選択された場合には、当該ダイアグラムをダイアグラム表示領域202に表示することも可能である。
ここで、上記したようにソースコードの一部を表すダイアグラムを作成する場合、ユーザは、ファイル選択領域203において当該ソースコード(ファイル)を選択する。
この場合、コード表示処理部13は、ユーザによって選択されたソースコード(以下、対象ソースコードと表記)をコード表示領域201に表示する(ステップS1)。
対象ソースコードの全てをコード表示領域201に表示することができない場合、コード表示領域201には、対象ソースコードが部分的に表示される。この場合、ユーザは、コードリーディング支援装置10に備えられる入力デバイス106(例えば、マウス及びキーボード等)を用いて当該コード表示領域201の表示をスクロールすることによって、対象ソースコードの所望の部分を表示することができるものとする。
ステップS1の処理が実行されると、ユーザは、対象ソースコードに含まれる複数の関数をのうちの1つ(以下、第1対象関数と表記)をコード表示領域201に表示し、当該第1対象関数を指定する操作(関数追加操作と表記)を行う。ユーザは、この関数追加操作を行うことによって、第1対象関数をダイアグラムに追加することを指示することができる。なお、関数追加操作には、コード表示領域201において第1対象関数(の定義)が記述されている位置にカーソルを移動させる操作等が含まれるが、他の操作であってもよい。
操作受付部15は、上記した関数追加操作が受け付けられた(ユーザによって行われた)か否かを判定する(ステップS2)。
関数追加操作が受け付けられたと判定された場合(ステップS2のYES)、編集処理部16は、上記した第1対象関数(対象ソースコードの一部)が追加されたダイアグラム(以下、対象ダイアグラムと表記)を表示するために用いられるダイアグラム情報を生成する(ステップS3)。この場合、編集処理部16は、対象ダイアグラムを識別するためのダイアグラムID及び第1対象関数を識別するための関数ID(呼び出し元関数ID)を含むダイアグラム情報を生成する。ステップS3において生成されたダイアグラム情報は、ダイアグラム格納部12に格納される。
次に、編集処理部16は、ステップS3において生成されたダイアグラム情報を用いて表示される対象ダイアグラムに付加されるダイアグラム付加情報を生成する(ステップS4)。この場合、編集処理部16は、例えば対象ダイアグラムを識別するためのダイアグラムID、付加内容「強調」及び第1対象関数を識別するための関数ID(位置情報)を含むダイアグラム付加情報を生成する。ステップS4において生成されたダイアグラム付加情報は、ダイアグラム格納部12に格納される。
ステップS4の処理が実行されると、ダイアグラム表示処理部14は、ダイアグラム格納部12に格納されたダイアグラム情報及びダイアグラム付加情報に基づいて対象ダイアグラムを生成する(ステップS5)。
なお、上記したダイアグラム情報及びダイアグラム付加情報によれば、ステップS5においては、第1対象関数が追加され、かつ、当該第1対象関数が強調表示された対象ダイアグラムが生成される。ステップS5において生成された対象ダイアグラムは、ダイアグラム表示領域202に表示される(ステップS6)。
また、編集処理部16は、上記した第1対象関数が対象ダイアグラムに追加されたこと(つまり、対象ダイアグラムの変更通知)に応じて、対象ソースコードに付加される付加情報(以下、コード付加情報と表記)を生成する(ステップS7)。この場合、編集処理部16は、例えばステップS1において表示された対象ソースコードを識別するためのソースコードID、付加内容「強調」及び第1対象関数が記述されている行番号(位置情報)を含むコード付加情報を生成する。ステップS7において生成されたコード付加情報は、コード格納部11に格納される。
ステップS7の処理が実行されると、コード表示処理部13は、コード格納部11に格納されたコード付加情報を、コード表示領域201に表示されている対象ソースコードに反映する(ステップS8)。上記したコード付加情報によれば、ステップS8の処理が実行されることによって、コード表示領域201に表示されている対象ソースコードの第1対象関数が記述されている部分が強調表示される。これによれば、対象ソースコードにおいて、対象ダイアグラムに追加された関数と当該対象ダイアグラムに追加されていない関数とを区別して表示することができる。
ステップS8の処理が実行されると、ステップS2に戻って処理が繰り返される。ここで、コード表示領域201には対象ソースコードの第1対象関数が記述されている部分が表示されているが、ユーザは、ステップS8の処理が実行された後に、当該第1対象関数内に記述されている他の関数(以下、第2対象関数と表記)を指定する関数追加操作を行うことができる。ユーザは、この関数追加操作を行うことによって、第2対象関数をダイアグラムに追加することを指示する。
ステップS2においてこのような関数追加操作が受け付けられたと判定された場合には、第2対象関数の定義が記述されている部分がコード表示領域201に表示され、ステップS3以降の処理が実行される。
なお、第2対象関数は、第1対象関数内に記述されているため、当該第1対象関数を呼び出し元関数とした場合における呼び出し先関数に相当する。この場合、ステップS3においては、対象ダイアグラムを識別するためのダイアグラムID、第1対象関数を識別するための関数ID(呼び出し元関数ID)及び第2対象関数を識別するための関数ID(呼び出し先関数ID)を含むダイアグラム情報を生成する。これによれば、対象ダイアグラムに第2対象関数を追加するとともに、当該対象ダイアグラムにおいて、第1対象関数及び第2対象関数との間の呼び出し関係を表すことができる。
上記した第1対象関数(呼び出し元関数)と第2対象関数(呼び出し先関数)との関係は、例えば上記したコード格納部11に格納されているコード解析情報(つまり、各関数が記述されている位置)等によって判別可能であるが、当該関係が規定された情報(例えば対象ソースコードにおける接続行や接続先等を含む呼び出し箇所情報)がコードリーディング支援装置10内で別途管理されていてもよい。
以下に実行されるステップS4~S7の処理については上記した通りであるため、ここではその詳しい説明を省略する。
上記したダイアグラム表示処理によれば、対象ソースコードに含まれる関数のうちユーザによって指定された(関数追加操作が行われた)関数を対象ダイアグラムに追加するとともに、当該追加された複数の関数の間の呼び出し関係を当該対象ダイアグラムにおいて自動的に表すことができる。
なお、ステップS2において関数追加操作が受け付けられていないと判定された場合(ステップS2のNO)、ダイアグラム表示処理は終了される。
図8においてはステップS3~S7の順に処理が実行されるものとして説明したが、当該処理の順番は適宜変更されても構わない。具体的には、例えばステップS7及びS8の処理の後にステップS3~S5の処理が実行されてもよい。
以下、上記したダイアグラム表示処理について具体的に説明する。図10は、上記した図8に示すステップS1の処理が実行された際のコードリーディング支援装置10に表示される画面(表示画面)の一例である。
図10に示すように、図8に示すステップS1が実行された場合、表示画面200に含まれるコード表示領域201には、対象ソースコードが表示される。なお、図10に示す例においては、対象ソースコードに含まれるmain関数の定義が記述された部分(5行目~13行目)がコード表示領域201に表示されている。なお、図10において対象ソースコードの各行の左側に付されている数値が行番号を表している。
ユーザは、図10に示す表示画面200上で例えばmain関数を指定する関数追加操作を行うことができる。この場合、ユーザは、例えばコード表示領域201のmain関数の定義が記述された部分にカーソルを合わせることによって、当該main関数をダイアグラムに追加することを指示する。
上記したようにmain関数が指定された場合には、上記した図8に示すステップS3~S6の処理が実行される。この場合におけるステップS3においては、main関数が追加される対象ダイアグラムを識別するためのダイアグラムID、当該main関数を識別するための関数ID(呼び出し元関数ID)を含むダイアグラム情報が生成される。なお、この時点では、呼び出し先関数に相当する関数は指定されていないため、ダイアグラム情報には呼び出し先関数IDは含まれない。
また、ステップS4においては、ステップS3において生成されたダイアグラム情報に含まれるダイアグラムID(対象ダイアグラムを識別するためのダイアグラムID)、付加内容「強調」及びmain関数を識別するための関数ID(位置情報)を含むダイアグラム付加情報が生成される。
ステップS5においては、ステップS3において生成されたダイアグラム情報及びステップS4において生成されたダイアグラム付加情報に基づいて対象ダイアグラムが生成される。なお、ステップS5においては、ダイアグラム情報に含まれる関数ID(呼び出し元関数ID)によって識別されるmain関数を表すシンボル(以下、関数シンボルと表記)を含む対象ダイアグラムが生成される。
ここで、図11を参照して、上記した関数シンボルについて具体的に説明する。ここでは、便宜的に、上記したmain関数とは異なる関数を用いて説明するものとする。
図11の左側に示す関数301(toy_call関数)は、while文に相当するコードブロック301a、if文に相当するコードブロック301b及び301cから構成されている。また、コードブロック301aには、if文に相当するコードブロック301dが更に含まれている。
このような関数301を表す関数シンボル302は、上記した関数301全体を表現するメインシンボル301a及び当該関数301を構成するコードブロック301a~301dの各々を表すサブシンボル302b~302eから構成される。
なお、関数シンボル302(メインシンボル302a)においてサブシンボル302b~302eが配置される位置は、コード格納部11に格納されているコード解析情報(関数情報及びコードブロック情報)に基づいて決定される。具体的には、例えばサブシンボル302bは、関数301において当該サブシンボル302bによって表されるコードブロック301aが記述されている位置に相当するメインシンボル302a上に配置される。他のサブシンボル302c~302eについても同様である。
すなわち、本実施形態においては、ダイアグラム情報に含まれる関数ID(呼び出し元関数ID及び呼び出し先関数ID)によって識別される関数を構成するコードブロック(が記述されている位置)を当該関数IDを含むコードブロック情報に基づいて特定することによって、当該関数全体を表現するメインシンボル及び当該関数を構成するコードブロックを表すサブシンボルから構成される関数シンボルを生成することができる。
上記したように生成された関数シンボルを含む対象ダイアグラムは、ステップS6においてダイアグラム表示領域202に表示される。
上記したステップS3~S6の処理が実行された場合、ステップS7及びS8の処理が実行される。この場合におけるステップS7においては、対象ソースコードを識別するためのソースコードID、付加内容「強調」及び位置情報「5(行)~13(行)」を含むコード付加情報が生成される。また、ステップS8においては、ステップS7において生成されたコード付加情報がコード表示領域201に表示されている対象ソースコードに反映される。
ここで、図12は、上記したステップS3~S8の処理が実行された後の表示画面200の一例を示す。
詳細については省略するが、図12に示すmain関数を表す関数シンボル400は、main関数全体を表現するメインシンボル400a及び当該main関数を構成するコードブロック(if文に相当するコードブロック)を表すサブシンボル400bから構成されている。また、ダイアグラム表示領域202に表示されている関数シンボル400(メインシンボル400a及びサブシンボル400b)は、上記したダイアグラム付加情報に基づいて強調表示されている(例えば、色彩が付されて表示されている)。
また、コード表示領域201においては、main関数の定義が記述された部分が強調表示されている。具体的には、例えば図12に示すコード表示領域201に表示されているmain関数の定義が記述された部分には、強調表示されていることを示すために色彩(例えば、青色等)が付された強調表示線500が付与されている。
このように本実施形態においては、コード表示領域201において対象ソースコードに含まれる関数を指定することによって、当該関数を表す関数シンボルを含む対象ダイアグラムをダイアグラム表示領域202に表示することができるとともに、コード表示領域201に表示されている当該関数が記述されている部分を強調表示することができる。
次に、ユーザは、コード表示領域201に表示されているmain関数内に記述されている他の関数を指定する(つまり、当該他の関数に対して関数追加操作を行う)ことができる。図12に示すコード表示領域201においては、例えばmain関数に含まれるtoymodel_exec関数が指定される。
図12に示すコード表示領域201においてtoymodel_exec関数が指定された場合、図13に示すように、表示画面200に含まれるコード表示領域201には、当該toymodel_exec関数の定義が記述されている部分が表示される(つまり、コード表示領域201の表示がmain関数からtoymodel_exec関数に遷移する)。なお、図13においては、toymodel_exec関数の一部のみが表示されている。
ここで、図8に示すステップS3~S6の処理が実行される。この場合におけるステップS3においては、toymodel_exec関数が追加される対象ダイアグラムを識別するためのダイアグラムID、main関数を識別するための関数ID(呼び出し元関数ID)及び当該toymodel exec関数を識別するための関数ID(呼び出し先関数ID)を含むダイアグラム情報が生成される。
また、ステップS4においては、ステップS3において生成されたダイアグラム情報に含まれるダイアグラムID、付加内容「強調」及びtoymodel_exec関数を識別するための関数ID(位置情報)を含むダイアグラム付加情報が生成される。
ステップS5においては、ステップS3において生成されたダイアグラム情報及びステップS4において生成されたダイアグラム付加情報に基づいて対象ダイアグラムが生成される。
なお、この場合におけるステップS5においては、ダイアグラム情報に含まれる呼び出し元関数IDによって識別されるmain関数を表す関数シンボル(以下、main関数シンボルと表記)が生成される。また、ステップS5においては、ダイアグラム情報に含まれる呼び出し先関数IDによって識別されるtoymodel_exec関数を表す関数シンボル(以下、toymodel exec関数シンボルと表記)が生成される。なお、各関数シンボルについては上記した通りであるため、ここではその詳しい説明を省略する。
更に、ステップS5においては、main関数(呼び出し元関数)とtoymodel_exec関数(呼び出し先関数)との呼び出し関係を表す対象ダイアグラムが生成される。
これにより、main関数シンボル及びtoymodel_exec関数シンボルを含み、かつ、main関数とtoymodel_exec関数との呼び出し関係を表す対象ダイアグラムが生成される。
ステップS5において生成された対象ダイアグラムは、ステップS6においてダイアグラム表示領域202に表示される。
上記したように図8に示すステップS3~S6の処理が実行された場合、ステップS7及びS8の処理が実行される。この場合におけるステップS7においては、対象ソースコードを識別するためのソースコードID、付加内容「強調」及び位置情報「22(行)~42(行)」を含むコード付加情報が生成される。なお、図13には示されていないが、位置情報「22~42」は、toymodel_exec関数の定義がソースコード中の22行目~42行目に記述されていることを示している。また、ステップS8においては、ステップS7において生成されたコード付加情報がコード表示領域に201に表示されている対象ソースコードに反映される。
ここで、図14は、上記したようにtoymodel_exec関数がユーザによって指定されることによってステップS3~S8の処理が実行された後の表示画面200の一例を示す。
図14に示すように、表示画面200に含まれるダイアグラム表示領域202には、main関数シンボル400及びtoymodel_exec関数シンボル600を含む対象ダイアグラムが表示されている。なお、main関数シンボル400は、上記した図12に示すダイアグラム表示領域202に表示されているmain関数シンボル400と同一の関数シンボルである。
一方、toymodel_exec関数シンボル600は、toymodel_exec関数全体を表現するメインシンボル600a及び当該toymodel_exec関数を構成するコードブロックの各々を表すサブシンボル600b~600fから構成されている。
なお、図14に示すダイアグラム表示領域202に表示されている対象ダイアグラムにおいて、main関数シンボル400(メインシンボル400a及びサブシンボル400b)及びtoymodel_exec関数シンボル600(メインシンボル600a及びサブシンボル600b~600f)は、上記したダイアグラム付加情報に基づいて強調表示されている。
更に、ダイアグラム表示領域202に表示されている対象ダイアグラムには、main関数シンボルとtoymodel_exec関数シンボルとを接続する呼び出し線(main関数シンボルからtoymodel_exec関数への矢印)700が含まれている。これにより、対象ダイアグラムにおいては、main関数が呼び出し元関数であり、toymodel_exec関数が呼び出し先関数であるという呼び出し関係を表すことができる。
ここで、上記した図10及び図12に示すコード表示領域201に表示されているmain関数において、toymodel_exec関数は、当該main関数を構成するif文に相当するコードブロック以外の部分に含まれている。この場合、main関数とtoymodel_exec関数との接続関係を表す呼び出し線700は、図14に示すようにmain関数シンボル400のメインシンボル400a(サブシンボル400bの下)に接続されている。
すなわち、本実施形態において、呼び出し元関数と呼び出し先関数との呼び出し関係を表す呼び出し線(矢印)は、当該呼び出し元関数内の呼び出し先関数が記述されている位置に対応する位置(メインシンボルまたはサブシンボル)に接続される。例えば呼び出し先関数が呼び出し元関数を構成するコードブロック内に記述されている場合には、当該呼び出し元関数と呼び出し先関数との呼び出し関係を表す呼び出し線は、当該コードブロックを表すサブシンボルに接続される。
ここでは、呼び出し線の呼び出し元関数側の接続について説明したが、呼び出し先関数側において、当該呼び出し線は、例えば図14に示すように呼び出し先関数名等と接続されればよい。
また、ダイアグラム表示領域202に表示される対象ダイアグラムには、インジケータ800が更に含まれていてもよい。このインジケータ800は、コード表示領域201に表示されている対象ソースコードの部分を対象ダイアグラムにおいて表している。換言すれば、コード表示領域201に対象ソースコードの一部分として関数が表示されている場合、インジケータ800は、当該関数を表す関数シンボルを指し示している。
具体的には、例えば図14に示すように関数シンボル600にインジケータ800が付与されている場合、当該インジケータ800は、当該関数シンボル600によって表される関数の定義が記述されている部分がコード表示領域201に表示されていることを表している。
なお、図14においてはインジケータ800が三角形状のマークである例を示しているが、当該インジケータ800は他の形状を有していてもよい。また、インジケータ800は、コード表示領域201に表示されている対象ソースコードの部分を把握することが可能であれば、図形、記号、文字または色彩等で表現されるものであってもよい。
また、コード表示領域201において、toymodel_exec関数の定義が記述された部分は強調表示されている。具体的には、例えば図14に示すコード表示領域201に表示されているtoymodel_exec関数の定義が記述された部分には、強調されていることを示すために色彩が付された強調表示線900が付与されている。
ここでは、main関数及びtoymodel_exec関数が順次指定された(つまり、main関数及びtoymodel_exec関数がダイアグラムに追加された)場合について説明したが、当該toymodel_exec関数の後に更に他の関数(当該toymodel_exec関数内に記述されている関数)が指定された場合には、上記したステップS3~S8の処理と同様の処理が実行される。このような処理が繰り返されることによって、ユーザによって指定された複数の関数の各々を表す関数シンボル(メインシンボル及びサブシンボル)を含み、かつ、当該複数の関数の間の呼び出し関係を表すダイアグラムをダイアグラム表示領域202に表示することができる。
なお、図8に示す処理においては関数が指定される度にステップS3~S8の処理が実行されるものとして説明したが、例えば複数の関数が指定された後にステップS3~S8の処理が実行される構成としてもよい。なお、ステップS3~S8の処理が実行されるタイミングについてはユーザによって指示されればよい。
具体的には、図15に示すように、上記したmain関数が追加されたダイアグラムがダイアグラム表示領域202に表示された後、コード表示領域201においてmain関数内に記述されているtoymodel_exec関数、toymodel_exec関数内に記述されているtoy_call関数、toy_call関数内に記述されているget_flag関数が順次指定されたものとする。なお、ユーザによって指定された関数の各々と当該関数の各々が指定された順番(つまり、途中経路の関数)はコードリーディング支援装置10内で保持(記憶)される。get_flag関数が指定された後に、例えばダイアグラムを表示(生成)する旨がユーザによって指示された場合、図8に示すステップS3~S8の処理が実行される。この場合、ダイアグラム表示領域202においては、toymodel_exec関数、toy_call関数及びget_flag関数の各々を表す関数シンボル(toymodel_exec関数シンボル、toy_call関数シンボル及びget_flag関数シンボル)を含むダイアグラムがダイアグラム表示領域202に表示される。また、このダイアグラムにおいては、toymodel_exec関数を呼び出し元関数、toy_call関数を呼び出し先関数とする呼び出し関係を表す呼び出し線(矢印)が表示される。同様に、このダイアグラムにおいては、toy_call関数を呼び出し元関数、get_flag関数を呼び出し先関数とする呼び出し関係を表す呼び出し線(矢印)が表示される。
本実施形態において、ユーザは、当該ユーザが順次指定した関数を指定することによってダイアグラム表示領域202に表示されるダイアグラムを参照することによって、例えば対象ソースコード(プログラム)に基づくコンピュータの特定の動作(振る舞い)を読解することが可能となる。
なお、本実施形態においてはダイアグラム表示領域202にダイアグラムが表示されるものとして説明したが、表示画面200には、当該ダイアグラムを表示する他の領域が配置されていてもよい。具体的には、例えば図16に示すように、ダイアグラムを全体的に表示するための領域(第3表示領域)204が表示画面200に更に配置されていてもよい。この場合、ダイアグラム表示領域202においては、ダイアグラム全体を表示する領域204において指定されたダイアグラムの一部分が拡大して表示されるようにしてもよい。なお、ダイアグラム表示領域202においてダイアグラム全体が表示され、領域204においてダイアグラムの一部分が表示されるようにしてもよい。更に、領域204の表示及び非表示がユーザによって選択可能なように構成されていてもよい。
また、上記したダイアグラム表示処理において生成されたダイアグラム情報及びダイアグラム付加情報はダイアグラム格納部12に格納される。このため、ダイアグラム格納部12に格納されたダイアグラム情報及びダイアグラム付加情報を上記したファイル選択領域203において指定することによって、コードリーディング装置10を使用してユーザが作成(表示)したダイアグラムを他のユーザが参照(閲覧)するようなことも可能となる。
更に、本実施形態においては、ユーザによって指定された関数がダイアグラムに追加されるものとして説明したが、例えば図15に示すようにmain関数がユーザによって指定された場合に、当該main関数内に記述されているtoymodel_exec関数、toymodel_exec関数内に記述されているtoy_call関数、toy_call関数内に記述されているget_flag関数が自動的にダイアグラムに追加される構成とすることも可能である。このような構成の場合、自動的にダイアグラムに追加された関数(つまり、候補)の中からダイアグラムへの追加を承認する関数をユーザが選択するようにしてもよい。
また、1つの関数内に複数の関数が記述されている場合には、複数の呼び出し線を介して、当該1つの関数(呼び出し元関数)が複数の呼び出し先関数と接続されていてもよい。
また、上記したダイアグラム表示処理においては関数指定操作が行われる度に当該関数指定操作において指定された関数を表す関数シンボルを生成するものとして説明したが、対象ソースコードに含まれる関数の各々を表す関数シンボルは、予め生成され、コードリーディング支援装置10内で管理されても構わない。
次に、図17のフローチャートを参照して、コメント付加処理の処理手順の一例について説明する。なお、本実施形態におけるコメント付加処理は、付加内容としてコメントを含む付加情報(コード付加情報及びダイアグラム付加情報)を編集(生成及び削除等)する処理をいう。
ここでは、上記したダイアグラム表示処理が実行されることによって、コード表示領域201には対象ソースコードが表示され、ダイアグラム表示領域202にはユーザによって指定された関数(関数シンボル)が追加された対象ダイアグラムが表示されているものとする。
ここで、本実施形態において、ユーザは、例えばコード表示領域201に表示されている対象ソースコードに対してコメントを付加することができる。なお、対象ソースコードに対するコメントは、コードが記述されている行単位で付加可能である。
上記したように対象ソースコードに対してコメントを付加する場合、ユーザは、対象ソースコードのコメントを付加すべき部分をコード表示領域201に表示し、コメントを付加する操作(以下、コメント付加操作と表記)を行う。ユーザは、このコメント付加操作を行うことによって、対象ソースコードに対するコメントを付加(追加)することができる。なお、コメント付加操作には、コメントを付加すべき行番号を指定する操作及び当該コメントを作成する操作等が含まれる。
操作受付部15は、上記したコメント付加操作が受け付けられた(ユーザによって行われた)か否かを判定する(ステップS11)。
コメント付加操作が受け付けられたと判定された場合(ステップS11のYES)、編集処理部16は、対象ソースコードに付加されるコード付加情報を生成する(ステップS12)。この場合、編集処理部16は、対象ソースコードを識別するためのソースコードID、上記したコメント付加操作においてユーザによって作成されたコメント(付加内容)及び当該コメント付加操作においてユーザによって指定された行番号(位置情報)を含むコード付加情報を生成する。ステップS12において生成されたコード付加情報は、コード格納部11に格納される。
ステップS12の処理が実行されると、コード表示処理部13は、コード格納部11に格納されたコード付加情報を、コード表示領域201に表示されている対象ソースコードに反映する(ステップS13)。上記したコード付加情報によれば、ステップS13の処理が実行されることによって、コード表示領域201に表示されている対象ソースコードのユーザによって指定された部分(行)にコメントが表示(付加)される。
また、編集処理部16は、ダイアグラム表示領域202に表示されている対象ダイアグラムに付加されるダイアグラム付加情報を生成する(ステップS14)。この場合、編集処理部16は、対象ダイアグラムを識別するためのダイアグラムID、コメント付加操作においてユーザによって作成されたコメント(付加内容)及び当該コメント付加操作においてユーザによって指定された行番号に該当するコードブロック(当該行番号に記述されたコードを含むコードブロック)を識別するためのコードブロックID(位置情報)を含むダイアグラム付加情報を生成する。なお、ユーザによって指定された行番号に該当するコードブロックが存在しない場合には、当該行番号に該当する関数を識別するための関数IDがダイアグラム付加情報に含まれていてもよい。ステップS14において生成されたダイアグラム付加情報は、ダイアグラム格納部12に格納される。
ステップS14の処理が実行されると、ダイアグラム表示処理部14は、ダイアグラム格納部12に格納されたダイアグラム付加情報を、ダイアグラム表示領域202に表示されている対象ダイアグラムに反映する(ステップS15)。上記したダイアグラム付加情報によれば、ステップS15の処理が実行されることによって、ユーザによって指定された行番号に該当するサブシンボルにコメントが表示(付加)される。なお、上記したように位置情報として関数IDがダイアグラム付加情報に含まれている場合には、当該関数IDによって識別される関数を表す関数シンボル(を構成するメインシンボル)にコメントが付加されてもよい。
上記したコメント付加処理によれば、例えば対象ソースコードに対してコメントが付加(追加)された場合に、対象ダイアグラムの該当箇所に同じコメントを表示することができる。
なお、ステップS11においてコメント付加操作が受け付けられていないと判定された場合(ステップS11のNO)、コメント付加処理は終了される。
以下、上記したコメント付加処理について具体的に説明する。ここでは、図12に示すようにコード表示領域201に対象ソースコード(main関数が記述されている部分)が表示されており、ダイアグラム表示領域202に対象ダイアグラム(main関数を表す関数シンボル400)が表示されているものとする。
この場合において、例えば対象ソースコードの8行目にコメントを付加する場合を想定する。この場合、ユーザは、入力デバイス106(例えば、マウスまたはキーボード)を用いて、例えば対象ソースコードの8行目にカーソルを合わせ、右クリック操作を行う。なお、この操作が上記したコメントを付加すべき行番号を指定する操作に相当する。
ここで、上記したように対象ソースコードの8行目にカーソルを合わせて右クリック操作が行われた場合には、図18に示す画面(以下、コメント作成画面と表記)が例えばポップアップ形式等で表示される。
図18に示すように、コメント作成画面1000には、コメント作成領域1000aが設けられている。ユーザは、入力デバイス106を用いて、コメント作成領域1000aにおいてコメントを作成することができる。
また、コメント作成画面1000には、「OK」ボタン1000b及び「キャンセル」ボタン1000cが更に設けられている。
コメント作成領域1000aにおいてコメントが作成され、ユーザによって「OK」ボタン1000bが押下された場合、コメントの作成が完了する。
一方、ユーザによって「キャンセル」ボタン1000cが押下された場合、コメントの作成がキャンセルされる。
上記したようにコメント作成画面1000におけるコメントの作成が完了した場合、図17に示すステップS12~S15の処理が実行される。この場合におけるステップS12においては、対象ソースコードを識別するためのソースコードID、コメント作成画面1000においてユーザによって作成されたコメント(付加内容)及び上記したコード表示領域201においてユーザによって指定された「8(行目)」(位置情報)を含むコード付加情報が生成される。
ステップS13においては、ステップS12において生成されたコメント付加情報がコード表示領域201に表示されている対象ソースコードに反映される。
一方、ステップS14においては、対象ダイアグラムを識別するためのダイアグラムID、コメント作成画面1000においてユーザによって作成されたコメント(付加内容)及びコード表示領域201においてユーザによって指定された行番号に該当するコードブロックを識別するためのコードブロックID(位置情報)を含むダイアグラム情報が生成される。
ステップS15においては、ステップS14において生成されたダイアグラム情報がダイアグラム表示領域202に表示されている対象ダイアグラムに反映される。
ここで、図19は、上記したステップS12~S15の処理が実行された後の表示画面200の一例を示す。
図19に示すように、コード表示領域201に表示されている対象ソースコードの5行目には、ユーザによって作成されたコメントが付加されている。
また、ダイアグラム表示領域202に表示されている対象ダイアグラムに含まれるmain関数シンボル400に含まれるサブシンボル400bには、ユーザによって作成されたコメントが付加されている。
このようにコード表示領域201において対象ソースコードのユーザによって指定された位置(行)にコメントが付加された場合には、対象ダイアグラムの該当箇所にも同様のコメントが付加される。
本実施形態においては、対象ソースコードに対してコメントが付加された場合に対象ダイアグラムに当該コメントが反映されるものとして説明したが、例えば対象ダイアグラムに対してユーザがコメントを付加することも可能である。この場合には、対象ダイアグラムに対して付加されたコメントが対象ソースコードに反映されるものとする。
なお、対象ダイアグラムに対するコメントは例えば当該対象ダイアグラムを構成するメインシンボルまたはサブシンボルに対して付加することが可能である。これによれば、例えば対象ダイアグラムを構成するメインシンボルに対してコメントが付加された場合には、対象ソースコード中の当該メインシンボル(関数シンボル)によって表される関数が記述されている任意の行等に当該コメントが表示(付加)されればよい。一方、例えば対象ダイアグラムを構成するサブシンボルに対してコメントが付加された場合には、対象ソースコード中の当該サブシンボルによって表されるコードブロックが記述されている任意の行等に当該コメントが表示(付加)されればよい。
また、本実施形態においてはコメントが付加される場合について説明したが、当該コメントを削除することも可能である。コメントが削除される場合には、当該コメントを付加内容として含む付加情報(コード付加情報及びダイアグラム付加情報)が削除され、当該付加情報の削除が対象ソースコード及び対象ダイアグラムに反映されればよい。
次に、図20のフローチャートを参照して、強調表示変更処理の処理手順の一例について説明する。なお、本実施形態における強調表示変更処理は、付加内容として強調を含む付加情報(コード付加情報及びダイアグラム付加情報)を編集(生成及び削除等)する処理をいう。
ここでは、上記したダイアグラム表示処理が実行されることによって、コード表示領域201には対象ソースコードが表示され、ダイアグラム表示領域202にはユーザによって指定された関数(関数シンボル)が追加された対象ダイアグラムが表示されているものとする。
ここで、ユーザは、例えばコード表示領域201に表示されている対象ソースコードに対して強調表示の有無を変更することができる。強調表示の有無は、例えば関数を構成するコードブロック単位で変更することが可能である。
なお、上記した図8に示すダイアグラム表示処理等において説明したように、ユーザによって指定された関数が対象ダイアグラムに追加された場合、対象ソースコードの当該関数が記述されている部分及び対象ダイアグラムに含まれる当該関数を表す関数シンボルはそれぞれ強調表示される。このため、ここでは対象ソースコード(の強調表示されている部分)の強調表示を解除する場合について主に説明する。
上記したように対象ソースコードの強調表示を解除する場合、ユーザは、対象ソースコードの強調表示されている部分をコード表示領域201に表示し、当該強調表示を解除する操作(以下、強調解除操作と表記)を行う。ユーザは、この強調解除操作を行うことによって、対象ソースコードに対する強調表示を解除することができる。なお、強調解除操作には、強調表示を解除するコードブロック(が記述されている行番号)を指定する操作等が含まれる。
操作受付部15は、上記した強調解除操作が受け付けられた(つまり、ユーザによって行われた)か否かを判定する(ステップS21)。
強調解除操作が受け付けられたと判定された場合(ステップS21のYES)、編集処理部16は、対象ソースコードに付加されるコード付加情報を削除する(ステップS22)。この場合、編集処理部16は、対象ソースコードを識別するためのソースコードID、付加内容「強調」及び強調解除操作においてユーザによって指定されたコードブロックが記述されている行番号(位置情報)を含むコード付加情報をコード格納部11から削除する。
ステップS22の処理が実行されると、コード表示処理部13は、当該ステップS22におけるコード付加情報の削除をコード表示領域201に表示されている対象ソースコードに反映する(ステップS23)。上記したコード付加情報の削除によれば、ステップS23の処理が実行されることによって、コード表示領域201に表示されている対象ソースコードのユーザによって指定されたコードブロックの部分の強調表示が解除される。
また、編集処理部16は、ダイアグラム表示領域202に表示されている対象ダイアグラムに付加されるダイアグラム付加情報を削除する(ステップS24)。この場合、編集処理部16は、対象ダイアグラムを識別するためのダイアグラムID、付加内容「強調」及び強調解除操作においてユーザによって指定されたコードブロックを識別するためのコードブロックID(位置情報)を含むダイアグラム付加情報をダイアグラム格納部12から削除する。なお、ユーザによって指定されたコードブロックを識別するためのコードブロックIDは、当該ユーザによって指定されたコードブロックが記述されている行番号及び上記したコード格納部11に格納されているコード解析情報(コードブロック情報)に基づいて特定することができる。
ステップS24の処理が実行されると、ダイアグラム表示処理部14は、当該ステップS24におけるダイアグラム付加情報の削除をダイアグラム表示領域202に表示されている対象ダイアグラムに反映する(ステップS25)。上記したダイアグラム付加情報の削除によれば、ステップS25の処理が実行されることによって、ダイアグラム表示領域202に表示されている対象ダイアグラムのユーザによって指定されたコードブロックを表すサブシンボルの強調表示が解除される。
上記した強調表示変更処理によれば、例えば対象ソースコード(コードブロック)の強調表示が解除(強調表示の有無が変更)された場合に、対象ダイアグラムの該当箇所(当該コードブロックを表すサブシンボル)の強調表示も同様に解除する(強調表示の有無を変更する)ことができる。
なお、ステップS21において強調解除操作が受け付けられていないと判定された場合(ステップS21のNO)、強調表示変更処理は終了される。
以下、上記した強調表示変更処理について具体的に説明する。ここでは、図12に示すようにコード表示領域201に対象ソースコード(main関数が記述されている部分)が表示されており、ダイアグラム表示領域202に対象ダイアグラム(main関数を表す関数シンボル400)が表示されているものとする。
この場合において、例えば対象ソースコードの8行目~10行目に記述されているコードブロックの強調表示を解除する場合を想定する。この場合、ユーザは、入力デバイス106(例えば、マウスまたはキーボード)を用いて、対象ソースコードの8行目~10行目を指定する操作を行う。
この場合、上記した図20に示すステップS22~S23の処理が実行される。この場合におけるステップS22においては、対象ソースコードを識別するためのソースコードID、付加内容「強調」及びユーザによって選択(指定)された「8(行目)~10(行目)」(位置情報)を含むコード付加情報がコード格納部11から削除される。
具体的には、ステップS22の処理が実行される前には、対象ソースコードを識別するためのソースコードID、付加内容「強調」及び位置情報「5(行目)~13(行目)」を含むコード付加情報がコード格納部11に格納されている。このため、上記したコード付加情報がコード格納部11から削除された場合には、コード格納部11には、対象ソースコードを識別するためのソースコードID、付加内容「強調」及び位置情報「5(行目)~7(行目)」を含むコード付加情報と、対象ソースコードを識別するためのソースコードID、付加内容「強調」及び位置情報「11(行目)~13(行目)」を含むコード付加情報とが格納された状態となる。
ステップS23においては、ステップS22におけるコメント付加情報の削除がコード表示領域201に表示されている対象ソースコードに反映される。
一方、ステップS24においては、対象ダイアグラムを識別するためのダイアグラムID、付加内容「強調」及びユーザによって選択された8行目~10行目に記述されているコードブロックを識別するためのコードブロックID(位置情報)を含むダイアグラム情報がダイアグラム格納部12から削除される。
ステップS25においては、ステップS24におけるダイアグラム付加情報の削除がダイアグラム表示領域202に表示されている対象ダイアグラムに反映される。
ここで、図21は、上記したステップS22~S25の処理が実行された後の表示画面200の一例を示す。
図21に示すように、コード表示領域201に表示されている対象ソースコードの8行目~10行目においては、強調表示されていることを示す強調表示線500が削除されている(つまり、強調表示が解除されている)。
また、ダイアグラム表示領域202に表示されている対象ダイアグラムに含まれるmain関数シンボル400に含まれるサブシンボル400bには、強調表示されていることを示す色彩が付されていない(つまり、強調表示が解除されている)。
このように本実施形態においては、対象ソースコードのユーザによって指定(選択)された位置の強調表示が解除された場合には、対象ダイアグラムの該当箇所の強調表示も同様に解除される。
なお、ここでは便宜的に対象ソースコードの8行目~10行目の強調表示が解除される場合について説明したが、一般的には所定の振る舞いにおいて動作しない箇所の強調表示等がユーザの操作に応じて解除される。
本実施形態においては強調表示が解除される場合について主に説明したが、例えば対象ソースコードに対して強調表示が設定された場合に、当該強調表示の設定が対象ダイアグラムに反映される構成であってもよい。この場合には、付加内容として強調表示を含む付加情報(コード付加情報及びダイアグラム付加情報)が生成され、当該付加情報が対象ソースコード及び対象ダイアグラムに反映されればよい。
また、本実施形態においては対象ソースコードに対する強調表示の有無が変更された場合に当該強調表示の有無の変更が対象ダイアグラムに反映されるものとして説明したが、例えば対象ダイアグラムに対する強調表示の有無が変更された場合に当該強調表示の有無の変更が対象ソースコードに反映される構成としてもよい。
上記したように本実施形態においては、ソースコードを表示するコード表示領域201(第1表示領域)及びソースコードの少なくとも一部を表すダイアグラムを表示するダイアグラム表示領域202(第2表示領域)が配置された画面を表示し、当該ダイアグラム表示領域202に表示されているダイアグラムを編集(作成)する。なお、本実施形態においては、コード表示領域201に表示されたソースコードに含まれる複数の関数のうちユーザによって指定された関数(を表す関数シンボル)をダイアグラムに追加することができる。
一般的なコードリーディングを支援するツールにおいては例えばユーザ(開発者)が図示したくない要素が表示されてしまう等、当該ユーザの意図を反映することが困難であるのに対して、本実施形態においては、上記した構成により、ユーザの意図するダイアグラムを作成及び表示することができるため、コードリーディングを適切に支援することが可能となる。
また、本実施形態において、コード表示領域201に表示されたソースコードのユーザによって指定された関数が記述されている部分は強調表示される。このような構成によれば、ユーザは、ソースコードに含まれる複数の関数のうち、ダイアグラムに追加された関数を容易に判別することができる。
更に、本実施形態において、上記した関数シンボルはユーザによって指定された関数を構成するコードブロックを表すサブシンボルを含む。また、関数シンボルに含まれるサブシンボルの位置は、関数シンボルによって表される関数内に記述されている当該サブシンボルによって表されるコードブロックの位置に基づいている。このような構成によれば、ユーザは、当該ユーザによって指定された関数を構成するコードブロックの位置関係等をダイアグラムにおいて容易に把握することが可能となる。
更に、本実施形態においては、例えば第1関数が指定された場合に当該第1関数を表す第1関数シンボルがダイアグラムに追加され、当該第1関数に含まれる第2関数が指定された場合に当該第2関数を表す第2関数シンボルがダイアグラムに追加される。また、第2関数が指定された場合には、ソースコードの当該第2関数が記述されている部分がコード表示領域201に表示される。本実施形態においては、このような構成により、各関数内に記述されている関数(つまり、呼び出し先関数)をコード表示領域201において順次指定することができる。
また、本実施形態において、ダイアグラムは、上記した第1関数と第2関数との間の呼び出し関係を表す。具体的には、第1関数と第2関数との間の呼び出し関係は、第1関数シンボルと第2関数シンボルとを接続する呼び出し線(矢印)によって表すことができる。本実施形態においては、このような構成により、ユーザは、ダイアグラムにおいて複数の関数の間の呼び出し関係を容易に把握することが可能となる。
更に、本実施形態において、第1関数と第2関数との間の呼び出し関係を表す呼び出し線は、第1関数を構成するコードブロックのうち第2関数が記述されているコードブロックを表すサブシンボルと第2関数シンボルとを接続する。このような構成によれば、ダイアグラムにおいて、第1関数において第2関数が記述されている位置(コードブロック)を容易に把握することが可能となる。
なお、本実施形態においてコード表示領域201にはソースコードの一部分のみが表示されるが、ダイアグラムは、ソースコードに含まれる関数がコード表示領域201に表示されている場合に当該ダイアグラムに追加されている当該関数を表す関数シンボルを指し示すインジケータを含む。このようなインジケータによれば、コード表示領域201に表示されている内容に対応するダイアグラムの該当箇所(関数シンボル等)を容易に把握することが可能となる。
また、本実施形態においては、表示画面200にはダイアグラムを全体的に表示する領域204が更に配置されていてもよい。この場合、ダイアグラム表示領域202には、例えばユーザによって指定されたダイアグラムの一部が拡大して表示される。このような構成によれば、ダイアグラムの細部を容易に確認することができる。
更に、本実施形態においては、コード表示領域201に表示されたソースコードに対するコメントが作成された場合に、当該コメントをダイアグラム表示領域202に表示されているダイアグラムにも反映する。同様に、ダイアグラム表示領域202に表示されたダイアグラムに対するコメントが作成された場合に、当該コメントをコード表示領域201に表示されているソースコードにも反映する。本実施形態においては、このような構成により、例えばソースコード及びダイアグラムの一方に対して付加されたコメントであっても、当該コメントをソースコード及びダイアグラムの両方で確認することが可能となる。
また、本実施形態においては、コード表示領域201に表示されたソースコードに対する強調表示の有無が変更された場合に、当該強調表示の有無の変更をダイアグラム表示領域202に表示されているダイアグラムにも反映する。同様に、ダイアグラム表示領域202に表示されたダイアグラムに対する強調表示の有無が変更された場合に、当該強調表示の有無の変更をコード表示領域201に表示されているソースコードにも反映する。本実施形態においては、このような構成により、例えばソースコード及びダイアグラムの一方において強調表示の有無が変更された場合であっても、当該変更内容をソースコード及びダイアグラムの両方で確認することが可能となる。
すなわち、本実施形態においては、ソースコードのビューア(エディタ)としての機能とダイアグラムのエディタとしての機能とが連携して動作することによって、ユーザの利便性を向上させることができる。
なお、上記した本実施形態に係るコードリーディング装置10は、例えばレガシーコードと称される仕様が不明なソフトウェアを運用及び保守する際に利用することができる。具体的には、このようなソフトウェア(ソースコード)の内容を理解すること(コードリーディング)は困難である場合が多いが、本実施形態に係るコードリーディング装置10を利用し、ユーザの意図が反映されたダイアグラムを参照して特定の動作(振る舞い)を確認することによって、当該コードリーディングの困難性を緩和することが可能となる。
なお、本実施形態においては、コードリーディング支援装置10がコード格納部11及びダイアグラム格納部12を含むものとして説明したが、当該コード格納部11(に格納されているコード解析情報及びコード付加情報)及びダイアグラム格納部12(に格納されているダイアグラム情報及びダイアグラム付加情報)の少なくとも一部がコードリーディング支援装置10とは異なる外部装置で管理されていてもよい。このような構成の場合には、コード格納部11またはダイアグラム格納部12に格納されている情報が必要に応じて外部装置から受信されればよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。