JP6309795B2 - 情報処理装置、情報処理方法およびプログラム - Google Patents

情報処理装置、情報処理方法およびプログラム Download PDF

Info

Publication number
JP6309795B2
JP6309795B2 JP2014055360A JP2014055360A JP6309795B2 JP 6309795 B2 JP6309795 B2 JP 6309795B2 JP 2014055360 A JP2014055360 A JP 2014055360A JP 2014055360 A JP2014055360 A JP 2014055360A JP 6309795 B2 JP6309795 B2 JP 6309795B2
Authority
JP
Japan
Prior art keywords
information
feature information
source code
feature
similarity
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
JP2014055360A
Other languages
English (en)
Other versions
JP2015179312A (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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2014055360A priority Critical patent/JP6309795B2/ja
Priority to US14/638,008 priority patent/US9495150B2/en
Publication of JP2015179312A publication Critical patent/JP2015179312A/ja
Application granted granted Critical
Publication of JP6309795B2 publication Critical patent/JP6309795B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明の実施形態は、情報処理装置、情報処理方法およびプログラムに関する。
解析対象ソースコード中で類似または一致した部分を抽出する技術が存在する。この技術は、あるソースコードからバグが発見された場合に、類似コードを発見することで保守作業効率を上げるために用いられている。この技術は、特に大規模なソフトウェア開発などの際に有用な技術である。完全に同一のソースコードを発見することは容易である。しかし、類似ソースコードを発見するためには、変数、関数名、および、パラメータ等の違いに対して柔軟である必要がある。このため、ソースコードを標準化させることでコーディングスタイルに依存しにくい類似コード検出技術が用いられている。
特許第4560608号公報
しかしながら、従来技術では、同一または類似のコードを発見できるのみである。このため、例えば発見したコードに対してとるべき処理に関する情報が得られず、保守作業やコードの更新作業を十分に効率化できない場合があった。
実施形態の情報処理装置は、記憶部と受付部と解析部と判定部と出力制御部とを備える。記憶部は、1以上のソースコードの特徴をそれぞれ表す1以上の第1特徴情報と、ソースコードの更新を補助する1以上の補助情報と、を対応づけて記憶する。受付部は、解析対象とするソースコードの特徴を表す第2特徴情報の入力を受け付ける。解析部は、第1特徴情報と第2特徴情報との類似度を算出する。判定部は、類似度に基づいて、記憶部に記憶された補助情報から、出力する補助情報を判定する。出力制御部は、判定で選択された補助情報を出力する。
実施形態の情報処理装置の機能ブロック図。 実施形態における情報処理装置の出力処理のフローチャート。 出力処理の詳細を示す図。 解析対象スコープ、特徴情報および特徴情報の例を示す図。 スコープ位置情報の例を説明する図。 辞書のデータ構造の一例を示す図。 更新結果情報と履歴情報と特徴情報との関係を示す図。 解析処理で用いられる辞書群の一例を示す図。 解析処理のフローチャート。 特徴情報をベクトルに変換する例を示す図。 特徴情報をベクトルに変換する例を示す図。 解析結果の一例を示す図。 解析結果群から判定結果群を判定する判定パターンの図。 出力制御部による出力制御処理のフローチャート。 補助情報の表示方法の具体例を示す図。 スコープの例を示す図。 解析対象ソースコードと解析対象スコープの関係を示す図。 解析対象ソースコードと解析対象スコープの関係を示す図。 本実施形態にかかる情報処理装置のハードウェア構成図。
以下に添付図面を参照して、この発明にかかる情報処理装置の好適な実施形態を詳細に説明する。
上述のように、従来技術は、ソースコード内における類似コードの発見のみを目的としており、元となるソースコードの分類属性については考慮していない。このため、ユーザが得ることのできる情報は類似コードのみであり、類似コード発見後にユーザがとるべきアクションに関する情報などの、ソースコードの更新を補助する情報(補助情報)は得られない。さらに、入力をソースコードのみに限定しているため、ソースコード更新ログやトレース情報を用いた解析を実行できない等の問題があった。
本実施形態では、ソースコード等のスコープに対して、ユーザがスコープの特徴を確認する場合やスコープを更新する際に用いる補助情報を記憶しておく。そして、類似するスコープに対応する補助情報を出力可能とする。これにより、類似のスコープを発見した際に元ソースコードに類似する特徴を持つスコープを予測して分類すること、および、分類によって得られたスコープの特徴情報からユーザがとるべきアクションに関する情報を表示すること、および、開発者や開発チームが個別に蓄積していた情報や知識を表示することが可能となる。
以下、図1を参照しながら本実施形態について説明する。図1は、情報処理装置の機能構成例を示すブロック図である。情報処理装置100は、受付部101と、記憶部102と、解析部103と、判定部104と、出力制御部105を備える。
記憶部102は、1以上のソースコードの特徴をそれぞれ表す1以上の特徴情報(第1特徴情報)と、ソースコードの更新状況を表す1以上の補助情報と、を対応づけて記憶する。記憶部102のデータ保存方法は、例えば、一般的に用いられているファイルシステムに保存する方法を用いる。特徴情報および補助情報の詳細は後述する。なお、記憶部102は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
受付部101は、各種情報の入力を受け付ける。例えば、受付部101は、解析対象とするスコープ(解析対象スコープ)の特徴を表す特徴情報(第2特徴情報)の入力を受け付ける。スコープとは、解析対象とするソースコード(解析対象ソースコード)の全部または一部であり、少なくとも1つのプログラム処理単位のソースコードを含むソースコードを示す。
受付部101による情報の入力方法は、例えば、一般的に用いられているファイルシステムからの入力方法を用いる。情報の入力方法はこれに限られるものではない。例えば、ネットワークを介してメモリに読み込んだ情報を入力する方法であってもよい。また、その他の方法としては、例えば、GUI(Graphical User Interface)を利用してインタラクティブに情報を入力させる方法などがある。
解析部103は、記憶部102に記憶された特徴情報(第1特徴情報)と、解析対象スコープの特徴情報(第2特徴情報)との類似度を算出する。解析部103は、算出した類似度、および、記憶された補助情報などを含む解析結果を出力する。解析部103による解析処理の詳細は後述する。
判定部104は、算出された類似度に基づいて、記憶部102に記憶された補助情報から、出力する補助情報を判定する。判定部による判定処理の詳細は後述する。
出力制御部105は、判定された補助情報を、例えば液晶ディスプレイなどの表示装置(図示せず)に出力(表示)する処理を制御する。出力制御部105は、例えば、一般的に用いられているGUI(Graphical User Interface)を利用してインタラクティブに補助情報を出力する。なお、出力方法は表示装置に表示する方法に限られるものではない。例えば出力制御部105は、ネットワークを介して他の端末等に補助情報を出力する方法、ファイルシステムへ補助情報を出力する方法、および、プリンタ等を用いて補助情報を印刷することにより出力する方法、などを用いてもよい。
なお、受付部101、解析部103、判定部104、および、出力制御部105は、例えば、CPU(Central Processing Unit)などの処理装置にプログラムを実行させること、すなわち、ソフトウェアにより実現してもよいし、IC(Integrated Circuit)などのハードウェアにより実現してもよいし、ソフトウェアおよびハードウェアを併用して実現してもよい。
次に、このように構成された本実施形態にかかる情報処理装置100による出力処理の概要について図2を用いて説明する。図2は、本実施形態における出力処理の一例を示すフローチャートである。
受付部101は、解析対象スコープの特徴情報(第2特徴情報)の入力を受け付ける(ステップS101)。また、受付部101は、受け付けた特徴情報からスコープ位置情報を抽出する(ステップS102)。スコープ位置情報とは、解析対象スコープを特定する情報(特定情報)である。例えばスコープ位置情報は、ソースコードにおけるスコープの位置を特定する情報である。スコープ位置情報の詳細は後述する。
解析部103は、解析対象スコープの特徴情報と、記憶部102に記憶された特徴情報とを比較する(ステップS103)。後述するように、解析部103は、受け付けられた特徴情報を、記憶された特徴情報と比較するための形式に変換し、変換した特徴情報と記憶された特徴情報とを比較してもよい。解析部103は、比較時に算出した類似度、および、記憶された補助情報などを含む解析結果を出力する(ステップS104)。
判定部104は、解析部103で得られた1つ以上の解析結果から、類似度および補助情報のうち少なくとも1つを用いた評価条件(評価式)を用いて1個以上の解析結果を選択するか、または解析結果を選択しないという判定をする(ステップS105)。次に、出力制御部105は、解析対象スコープの特徴情報から抽出されたスコープ位置情報と、選択された解析結果(以下、判定結果という)を用いて、スコープ更新の補助情報を表示する(ステップS106)。
以下では、図3を用いて、情報処理装置100による出力処理の詳細についてさらに説明する。なお図3に示す処理は一例でありこれに限られるものではない。
解析対象スコープ301は、例えばブロック単位などの、解析に適した処理単位を含む。特徴情報302は、解析対象スコープ301の特徴を表す情報を含む情報である。より具体的には、特徴情報302は、ソースコード自体の特徴を示す情報、またはソースコードの実行履歴情報(トレース情報)のいずれかを少なくとも含む情報である。例えば、特徴情報302は、解析対象スコープに関連付けられたソースコードのトレース結果など情報である。受付部101は、解析対象スコープ301に関連付けられた特徴情報302を入力する。
受付部101は、特徴情報302から、記憶部102に記憶された特徴情報と比較するための特徴情報304(第3特徴情報)を抽出する。なお、特徴情報302が記憶部102に記憶された特徴情報と比較可能な形式の場合は、特徴情報304の抽出処理を実行しなくてもよい。この場合は、特徴情報302が、記憶部102に記憶された特徴情報との比較に用いられる。
特徴情報304は、特徴情報302から抽出した情報を元に、文字列、整数、および実数などのパラメータ値の組合せで表現される。図4は、解析対象スコープ301、特徴情報302、および、特徴情報304の例を示す図である。解析対象スコープ301は、例えばソースコードが変更された箇所や変更を行う予定のソースコードの箇所である。
図4の例では、特徴情報302は、コードレビューの評価分類等で用いられる情報である“コード変更理由”、“テスト結果”、“コード規約”、“パフォーマンス”、および、“コメント文の有無”の情報を含む。
特徴情報304は、スコープの特徴を示す項目であるパラメータキーと、パラメータキーの値を示すパラメータ値を含む。例えば特徴情報304は、パラメータキーとして、word[0]、word[1]、word[2]、test、format、performance、および、commentを含む。なお、これらのパラメータキーは一例であり、これらに限られるものではない。
word[n](n=0、1、・・・)は、特徴情報302に含まれる単語を設定するパラメータキーである。testは、テストをクリアしたか否かを設定するパラメータキーである。formatは、コード規約を満たすか否かを設定するパラメータキーである。performanceは、性能(パフォーマンス)の改善度合いを設定するパラメータキーである。commentは、コメント文の有無を設定するパラメータキーである。
図4の例では、特徴情報302における“コード変更理由”で用いられた単語が、パラメータキーword[0]、word[1]、word[2]に対応するパラメータ値“refactor”、“bug”、“test”で示されている。
なお、wordの個数は3に限られるものではなく、任意の個数としてよい。例えば、特徴情報302に含まれるすべての単語(すべての名詞などでもよい)を抽出して特徴情報304のパラメータキーword[0]、word[1]、・・・に設定してもよい。予め定められた登録語と同一または類似する単語を抽出してもよい。
特徴情報302の“テスト結果”は、すべてのテストにおいて、性能や機能などユーザが指定した条件を満たしていることを示している。従って、パラメータキーtestに対しては、テストが条件を満たしていることを示すパラメータ値“1”が設定される。テストが条件を満たしていない場合は、例えばパラメータ値“0”が設定される。パラメータ値は2値だけでなく、例えばパラメータ値“0.6”など、すべてのテストの中でユーザが指定した条件を満たしているテストの割合を示しても良い。
特徴情報302の“コード規約”は、解析対象スコープ301がコード規約を満たしていることを示している。従って、パラメータキー“format”に対しては、コード規約を満たすことを示すパラメータ値“1”が設定される。コード規約を満たさない場合は、例えばパラメータ値“0”が設定される。パラメータ値は2値だけでなく、例えばパラメータ値“0.6”など、すべてのテストの中でユーザが指定した条件を満たしているテストの割合を示しても良い。
特徴情報302の“パフォーマンス”は、解析対象スコープ301の変更等により、性能が100cycleから200cycleに変更したことを示している。性能が0.5倍になっていることから、パラメータキー“performance”に対しては、パラメータ値として実数“0.5”が設定される。
特徴情報302の“コメント文の有無”は、コメントが書かれてないことを示している。従って、パラメータキー“comment”に対しては、コメントがないことを示すパラメータ値が“0”が設定される。コメントが有る場合は、例えばパラメータ値“1”が設定される。
このように、特徴情報304は、通常、複数のパラメータキーの集合となる。各パラメータキーは、1つのパラメータ値を有している。
図3に戻り、受付部101は、さらに解析対象スコープ301のスコープ位置情報303を出力する。スコープ位置情報303は、解析対象のスコープを特定する情報である。図5は、スコープ位置情報の例を説明するための図である。図5のスコープ位置情報702は、解析対象ソースコード701に含まれる解析対象スコープ711のスコープ位置情報の2つの例である。
図5に示すように、スコープ位置情報712は、ソースコードのパス情報と、ファイル内の解析対象行と、の組合せなどがスコープ位置情報として用いられる。解析対象ソースコードがファイルや関数である場合は、スコープ位置情報722のように、ソースコードのパス情報と、ファイル名や関数名と、の組合せをスコープ位置情報として用いてもよい。スコープ位置情報はこれらに限られるものではなく、解析対象スコープを特定できる情報であればよい。
図3に戻り、記憶部102は、特徴情報と補助情報とを対応づけて記憶する。図3の辞書305は、特徴情報と補助情報とを対応づけた情報を表している。記憶部102は、このような辞書の集合である辞書群306を記憶している。各辞書305は、例えば、特徴情報304と共通するパラメータキーを持つ特徴情報を含む。また、各辞書305に含まれる補助情報は、例えば、履歴情報および更新結果情報を含む。
履歴情報は、辞書305に含まれる特徴情報に関連付けられているソースコードの更新履歴を示す情報である。例えば履歴情報は、更新前のソースコードと、更新後のソースコードとを対応づけた情報である。
更新結果情報は、例えば、属性情報と、差分情報と、を含む。属性情報は、ソースコードの更新の目的を表す情報である。例えば、可読性問題、テスト不足、性能問題、および、コーディング規約問題などが、属性情報として設定されうる。差分情報は、変更によって生じたコスト(実装コスト)や性能変化(性能向上率)等を示す情報である。このような更新結果情報は一例であり、これに限られるものではない。例えば、属性情報および差分情報の一方のみを更新結果情報としてもよい。
図6は、辞書305のデータ構造の一例を示す図である。図6に示すように、辞書305に含まれる特徴情報801のパラメータキーは、図4の特徴情報304と同様のパラメータキーで構成される。特徴情報801の内部のパラメータ値は、図4の特徴情報304とは異なっている。図6の例では、特徴情報801に対応する補助情報802は、属性情報が“コーディング規約問題”であり、差分情報が“コスト 0.1”である更新結果情報を含む。また、補助情報802は、解析対象ソースコードの更新前後で表現した履歴情報を含む。“レビュー前”以下のソースコードが解析対象ソースコードの更新前の情報であり、“レビュー後”以下のソースコードが解析対象ソースコードの更新後の情報である。
次に、辞書305に含まれる更新結果情報と履歴情報と特徴情報との関係性について図7を用いて説明する。図7は、辞書に含まれる更新結果情報と履歴情報と特徴情報との関係を示す図である。
辞書に記憶する特徴情報501は第2のスコープの特徴情報511から生成される。履歴情報502は、特徴情報511とその他のスコープ(スコープA,B)の特徴情報512、513に基づいて生成される。更新結果情報503a〜503cは、特徴情報511と、その他のスコープの特徴情報512、513とに基づいて生成される。生成される更新結果情報は1つとは限らず、複数であってもよい。例えば図7では、第2のスコープの特徴情報511と、スコープAの特徴情報512とから、複数の更新結果情報503aおよび503bが生成されている。例えば、スコープAとスコープBは第2のスコープの更新前後のスコープと設定される。なお、スコープAとスコープBは更新の前後に限定される必要はなく、第2のスコープの差分のある他のスコープであってもよい。さらに、更新結果情報は、属性情報および差分情報を1つ以上関連付けることが可能である。
図3に戻り、解析部103は、記憶部102に記憶されている辞書群306を入力とし、特徴情報304と辞書305に含まれる特徴情報との類似度、辞書305に含まれる履歴情報、および、辞書305に含まれる更新結果情報を含む解析結果307を生成する。解析結果307は1つ以上出力されるため、これをまとめて解析結果群308とする。
図8〜図11を用いて、解析部103による解析処理について説明する。図8は、解析処理で用いられる辞書群306の一例を示す図である。図9は、解析処理の一例を示すフローチャートである。なお、入力となる辞書と特徴情報とは、図6で説明した特徴情報801と同じパラメータキーで構成されるものとする。また、属性情報は、可読性問題、テスト不足、性能問題、および、コーディング規約問題の4種類を含む。なお、特徴情報のパラメータキーが増えた場合も、同様の挙動をとる。
解析部103は、初めに、辞書群306から出力されるすべての辞書305と特徴情報304とを入力する。解析部103は、特徴情報304と、辞書305に含まれる特徴情報と、を比較に適したフォーマットに変換する(ステップS201)。
図10および図11は、特徴情報をベクトルに変換する例を示す図である。図10および図11では、パラメータキーword[]を、単語が出現したか否かを2値(例えば、出現した場合「1」、出現しない場合「0」)で表すパラメータキーに変換する例が示されている。パラメータキーword_refactor、word_bug、word_test、および、word_performanceは、それぞれ単語「refactor」、「bug」、「test」および「performance」が出現したか否かを表す。
パラメータキー“test”、“format”、“comment”などのパラメータ値(「0」「1」)については、そのまま採用することができる。パラメータキー“performance”については、パラメータ値が1.0を超えた場合はパラメータ値を1に変換し、1.0以内はパラメータ値を0としてもよい。
フォーマット変換を行うことで、特徴情報をベクトルとして扱うことが可能になる。これにより、例えば特徴情報の比較処理の負荷を軽減することができる。ただし、特徴情報が比較できるフォーマットで表されている場合など、解析部103が特徴情報を変換する必要がない場合もある。
次に、解析部103は、特徴情報304との解析に用いられていない辞書305を1つ選択する(ステップS202)。解析部103は、選択した辞書305に含まれる特徴情報と、特徴情報304との類似度を算出する(ステップS203)。類似度は、辞書305に含まれる特徴情報と特徴情報304とが類似する度合いを示す指標である。類似度は、各特徴情報に共通に含まれるパラメータキー(共通パラメータキー)を用いて算出する。
例えば類似度は、フォーマット変換(ステップS201)によって生成された、特徴情報304のベクトル、および、辞書305に含まれる特徴情報のベクトルのcos類似度を用いて算出される。各ベクトルをx、yとすると、cos類似度は、以下の(1)式で算出される。ただし、|x|はxのノルムであり、|y|はyのノルムである。
cos(x,y)=xy/|x||y| ・・・(1)
例えば図10で表したベクトルおよび図11で表したベクトルのcos類似度は、以下の(2)式で表されるように約80%となる。
cos(x,y)=5/6≒0.8 ・・・(2)
類似度の算出方法は上記の例に限らず、特徴情報間の類似度を算出できるアルゴリズムであればどのような算出方法であってもよい。例えば、特徴情報に含まれるパラメータキーごとに類似度を比較し、各類似度の合計(重み付け加算値などでもよい)を、特徴情報間の類似度としてもよい。各パラメータ値が文字列の場合は、一致する文字の割合、および、文字列間の編集距離などを類似度として用いてもよい。
次に解析部103は、選択した辞書に含まれる更新結果情報を、解析結果として出力する更新結果情報とする(ステップS204)。さらに解析部103は、選択した辞書に含まれる補助情報を、解析結果として出力する補助情報とする(ステップS205)。解析部103は、ステップS203〜ステップS205で生成された類似度と履歴情報と更新結果情報の組合せを解析結果(図3では解析結果307)として生成する(ステップS206)。解析部103は、ステップS202で選択した辞書で、特徴情報304との解析が行われていない辞書があるか否かを判断する(ステップS207)。解析が行われていない辞書がある場合(ステップS207:Yes)、ステップS202に戻り処理を繰り返す。解析が行われていない辞書がない場合(ステップS207:No)、解析部103は、解析処理を終了する。
解析結果の具体例について、図12を用いて説明する。図12は、解析結果の一例を示す図である。図12の上に書かれているパラメータ値の組合せは、解析部103の入力となった特徴情報304である。図12の下のパラメータ値の組合せは、特徴情報304と選択された辞書群306に含まれる各特徴情報とを比較した結果である。図12は、図8の辞書群に対応する4つの解析結果を示している。1つの解析結果は、1列で更新結果情報、類似度、および、履歴情報の順に示されている。図12の例では、特徴情報304は、可読性問題の属性を持つ、ある辞書に対する類似度が80%であり、この辞書の持つ履歴情報が解析結果の履歴情報として示されている。残りの3つの辞書に対しても同様の情報が示されている。例では、更新結果情報はすべて異なっているが、更新結果情報における属性情報が同様で類似度や更新結果情報における差分情報や履歴情報も異なる場合もある。これは、個々の辞書毎に解析を行うためである。
記憶部102から解析部103への情報の入力方法は、例えば、一般的に用いられているファイルシステムから情報を入力する方法を用いる。また、ネットワークを介して既にメモリに読み込んだ情報を入力する方法であってもよい。また、その他の方法としては、例えば、GUI(Graphical User Interface)を利用してインタラクティブに入力させる方法などがある。
図3に戻り、判定部104は、解析部103から出力された解析結果群308から、類似度を用いた評価条件によって1個以上の判定結果309を選択するか、または判定結果を選択しないという判定をする。例えば、類似度が高い順にn個の解析結果を判定する条件などを評価条件として用いることができる。判定結果全体は判定結果群310とする。判定部104が、解析結果群308から判定結果群310を判定する基本的な判定パターンについて、図13を用いて説明する。図13の判定パターンは、解析結果群1301の中から類似度が高い解析結果をn個選択するパターンである。図13の例では、判定部104は、類似度が高い解析結果をn=2個選択する。この結果、類似度が90%と80%であった2つの解析結果が判定結果として判定されている(判定結果群1302)。
判定部104による判定方法(判定パターン)はこれに限られるものではない。例えば、類似度、更新結果情報に含まれる属性情報、および、更新結果情報に含まれる差分情報のうち少なくとも1つを用いた条件であれば評価条件として用いることができる。例えば、類似度が所定の閾値以上(または閾値未満)、かつ、n個以内の解析結果を選択する評価条件を用いてもよい。また例えば、差分情報としての性能向上率が所定の閾値以上(または閾値未満)、かつ、n個以内の解析結果を選択する評価条件を用いてもよい。
図3に戻り、出力制御部105は、0個以上の判定結果群から解析対象スコープ301の補助情報311を出力する。出力制御部105は、スコープ位置情報303で特定されるソースコードと、補助情報とを対応づけて出力する。補助情報は、更新結果情報および履歴情報のいずれかでもよいし、両方でもよい。補助情報の他に、類似度を出力してもよい。
図14は、出力制御部105による出力制御処理の一例を示すフローチャートである。判定結果群310に含まれる判定結果309は、0個以上という条件を持つ。このため、判定結果309が0個である場合と1個以上の場合とで表示までの工程が変化する。すなわち、出力制御部105は、判定結果が1個以上存在するか否かを判断する(ステップS301)。存在しない場合、すなわち、判定結果が0個の場合(ステップS301:No)、出力制御部105は、疑似的な補助情報を生成する(ステップS302)。例えば、出力制御部105は、判定結果が存在しないことを示す補助情報を生成する。
判定結果が1個以上存在する場合(ステップS301:Yes)、出力制御部105は、スコープ位置情報303と、判定結果群に含まれる判定結果の補助情報を表示する(ステップS303)。図15は、補助情報の表示方法の具体例を示す図である。図15は、解析対象スコープに対して類似度の高い2つの判定結果の更新結果情報と履歴情報とを表示する例である。図15の例では、解析対象ソースコード1501のファイルのパス名とソースコードの関数が示され、その関数の中のループが解析対象スコープ1511として点線で囲われている。
解析対象スコープを特定するための出力方法は図15の例に限られるものではなく、解析対象スコープの位置が特定できるのであれば、どのような方法であってもよい。例えば、解析対象ソースコードのファイルのパス名と、解析対象ソースコード内でのコード行とによって示されていても構わない。出力制御部105が、スコープ位置情報で特定される解析対象スコープ1511と補助情報1502とを対応づけて出力することにより、解析対象スコープに関連する更新結果情報と履歴情報とが明らかとなる。
次に、解析対象スコープ、解析部103における比較方法、判定部104における選択パターン、および、出力制御部105における出力方法の変形例について説明する。なお、各変形例を組み合わせる構成等で実施することも可能である。
解析対象スコープにおけるプログラム処理単位とは、例えば、ファイル単位、関数やメソッドなどのブロック単位、ループ処理単位、内部に分岐を含まない基本ブロック単位などが挙げられる。図16は、関数ブロック単位のスコープ1611、ループ処理単位のスコープ1612、基本ブロック単位のスコープ1613の例を示す図である。最も小さいブロックが基本ブロックで示されている。
プログラム処理単位は、図16の例に限らず、特定の処理単位で分割可能なソースコードの一部分であれば、どのような分割形式をとってもよい。また、解析対象スコープは、C言語やJava(登録商標)言語のようなプログラミング言語、または、特定の処理装置独自のプログラム言語で記述されたソースコードやコメント文であってもよい。
このような処理単位を含む解析対象ソースコード1601に関連付けられた特徴情報1602は、図16に示されるように、データフロー構造、コンパイル時の情報、データ入出力トレース、メモリ操作のトレース、メモリ値のトレース、命令実行情報のトレース、テストケース情報、テスト結果、性能、ソースコード自体の複雑さ、不具合情報、重複コード情報、開発者、更新日時、依存関係にあるスコープ情報など、解析対象スコープに関連する1つ以上の情報で構成される。解析対象ソースコード1601の一部または全部を特徴情報に含めてもよい。
上記に限らず、解析対象スコープに関連する要素を含めばいずれも特徴情報としてよい。さらに、解析対象スコープは必ずしも1つでなくてもよい。例えば、解析対象ソースコードが、想定したプログラム処理単位よりも大きい場合は、処理単位ごとに分割して複数の解析対象スコープを生成させることができる。
図17および図18は、解析対象ソースコードと解析対象スコープとの関係の例を示す図である。図17では、1つの解析対象ソースコード1701から、ループ処理単位をとる5つの解析対象スコープ1711〜1715を抽出している。
解析対象ソースコードが、条件文、ループ文、構造体、および、関数呼び出し等でネスト構造をとる場合に、子孫となるスコープも解析対象スコープとして扱うこともできる。図18では、解析対象ソースコード1801内の最初のループ文を解析対象スコープ1811としたとき、解析対象スコープ1811の内側にもう1つループ文を持つため、内側のループ文を解析対象スコープ1812とした。解析対象スコープ1812の内部には条件分岐があるため、条件分岐スコープを解析対象スコープ1813とした。解析対象スコープ1813の内部には関数funcが含まれているため、関数funcを解析対象スコープ1814とした。上記の例に限らず、どのような関係を持つスコープでも複数入力可能である。
次に、記憶部102における辞書群の生成方法について述べる。解析部103は、記憶部102に記憶されたすべての辞書を入力とするが、辞書で用いられる特徴情報は、特徴情報304と共通のパラメータキーを持つ必要がある。そのため、共通のパラメータキーを持たない辞書は解析部103に入力することができない。また、記憶部102に記憶された辞書のうち、ユーザが解析の対象としていない属性情報を持つ辞書も解析部103に入力することはできない。そこで、解析部103に入力しない辞書が記憶部102に含まれる場合は、解析部103に入力する辞書のみを抜き出して辞書群306として用いてもよい。例えば、解析部103は、解析対象外の属性情報またはユーザが求める範囲外の差分情報を含む辞書を除く辞書を選択して解析処理を実行してもよい。上記の場合に限らず、辞書の更新結果情報が持つ情報であればどの情報を用いて記憶部102から辞書を選択してもよい。
次に、解析部103における特徴情報のフォーマット変換について述べる。上記の実施形態では、特徴情報のフォーマット変換後のベクトルの各要素はすべて0または1で表現されていたが、各要素は実数で表現することも可能である。
次に、判定部104における、解析結果群からの判定結果の選択パターンを示す。最初のパターンは、図13で既に示したように、解析結果群の中から類似度が高い解析結果をn個選択する方法である。上記以外にも、類似度、更新結果情報における属性情報、および、差分情報の任意の組み合わせに対する評価条件を用いて判定結果を選択可能である。
最後に、出力制御部105における出力方法について説明する。最初の表示方法は、図15に示した基本的な表示の例であり、既に説明した。図15の例に限らず、補助情報(履歴情報、更新結果情報)、および、解析対象スコープを対応づけて出力する方法であればどのような出力方法であってもよい。
以上のように、本実施形態では、コードレビューの例を用いてソフトウェア開発において特定箇所のソースコードの変更に対する補助情報を出力することが可能となる。コードレビューに限らず、性能向上のためのソースコード変更など、様々な目的に対してソースコードを更新する際に効果が期待される。以下では、本実施形態による他の効果の例を示す。
本実施形態は、ソフトウェア開発における経験的知識の共有に効果がある。ソフトウェア開発において、過去のソースコード、トレース情報、および、更新ログ情報などは保存されずに廃棄されることも多い。この場合、過去の資源がその後のソフトウェア開発に生かすことができない。ソースコード、トレース情報、および、更新ログ情報などが保存されている場合でも、特徴情報、履歴情報、および、更新結果情報などを含む辞書が存在しない場合は、解析対象ソースコードに対応する特徴情報に対して有益な補助情報を示すことができない。
本実施形態によれば、過去のソースコードの特徴情報をもとにした辞書を記憶部102に記憶しておくことできるため、経験的知識の保存が可能となる。また、辞書に補助情報を持たせることによって、記憶部102に含まれる辞書が膨大になった場合でも、ソースコード理解やソースコード変更の際に必要な情報を容易に取り出すことが可能となる。これにより、保守作業やコードの変更作業をより効率化することが可能となる。
本実施形態は、データの軽量化にも効果がある。ソフトウェア開発において、過去の経験的知識を記憶しておくためには、ソースコード、トレース情報、および、更新ログ情報などを保存するという方法が考えられる。しかし、これらの情報をすべて保存するとデータ量が膨大になり、経験的知識の抽出にかかる時間も膨大になり、現実的でない。
本実施形態によれば、ソースコード、トレース情報、および、更新ログ情報などの情報を特徴情報のフォーマットに落とし込んで記憶できる。これにより、必要なデータのみを保存することができ、データ軽量化を実現できる。入力となる特徴情報だけでなく、記憶部102に保存される辞書に含まれる特徴情報についても同様のことが言える。
本実施形態は、ソースコードおよび個人情報の機密保持にも効果がある。過去のすべてのソースコード、更新ログ情報、および、トレース情報を記憶部102に記憶すると、記憶部102にアクセス可能な状態であれば、機密保持が必要となるソースコードおよび個人情報が閲覧可能となり、機密保持が実現できない。
本実施形態では、すべてのソースコード等の情報を記憶するのではなく、必要な情報のみを含む特徴情報および補助情報を記憶すればよい。すなわち、特徴情報や補助情報から機密性のある情報を除外することができる。これにより、記憶部102への不正なアクセスがなされた場合にもソースコードや個人情報などの機密保持が可能となる。
本実施形態は、情報閲覧容易性にも効果がある。解析結果をすべて出力すると情報が膨大になり、表示の際にユーザの理解を妨げる可能性がある。しかし、本実施形態によれば、判定部104によって表示する情報をユーザが必要とするものだけに限るという限定を行うことができる。これにより、表示した際の情報閲覧の容易性を実現できる。
次に、本実施形態にかかる情報処理装置のハードウェア構成について図19を用いて説明する。図19は、本実施形態にかかる情報処理装置のハードウェア構成を示す説明図である。
本実施形態にかかる情報処理装置は、CPU(Central Processing Unit)51などの制御装置と、ROM(Read Only Memory)52やRAM(Random Access Memory)53などの記憶装置と、ネットワークに接続して通信を行う通信I/F54と、各部を接続するバス61を備えている。
本実施形態にかかる情報処理装置で実行されるプログラムは、ROM52等に予め組み込まれて提供される。
本実施形態にかかる情報処理装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、本実施形態にかかる情報処理装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる情報処理装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施形態にかかる情報処理装置で実行されるプログラムは、コンピュータを上述した情報処理装置の各部として機能させうる。このコンピュータは、CPU51がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
100 情報処理装置
101 受付部
102 記憶部
103 解析部
104 判定部
105 出力制御部
301 解析対象スコープ
302 特徴情報
303 スコープ位置情報
304 特徴情報
305 辞書
306 辞書群
307 解析結果
308 解析結果群
309 判定結果
310 判定結果群
311 補助情報

Claims (12)

  1. 1以上のソースコードの特徴をそれぞれ表す1以上の第1特徴情報と、前記ソースコードの更新状況を表す1以上の補助情報と、を対応づけて記憶する記憶部と、
    解析対象とするソースコードに含まれるスコープの特徴を表す第2特徴情報の入力を受け付け、前記第2特徴情報から前記スコープの位置を特定する位置情報を抽出する受付部と、
    前記第1特徴情報と前記第2特徴情報との類似度を算出する解析部と、
    前記類似度に基づいて、前記記憶部に記憶された前記補助情報から、出力する前記補助情報を選択する判定部と、
    選択された前記補助情報と前記位置情報により特定される前記スコープとを対応づけて出力する出力制御部と、
    を備える情報処理装置。
  2. 前記補助情報は、前記ソースコードの更新の履歴を表す情報、前記ソースコードの更新の目的を表す情報、および、前記ソースコードの更新前後のコストまたは性能の変化を表す情報、のうち少なくとも1つを含む、
    請求項1に記載の情報処理装置。
  3. 前記出力制御部は、選択された前記補助情報に対応する前記第1特徴情報と前記第2特徴情報との類似度をさらに出力する、
    請求項1に記載の情報処理装置。
  4. 前記受付部は、前記第2特徴情報から、前記第1特徴情報と比較する第3特徴情報を抽出し、
    前記解析部は、前記第3特徴情報と前記第1特徴情報との類似度を算出する、
    請求項1に記載の情報処理装置。
  5. 1以上のソースコードの特徴をそれぞれ表す1以上の第1特徴情報と、前記ソースコードの更新状況を表す1以上の補助情報と、を対応づけて記憶する記憶部を備えるコンピュータを、
    解析対象とするソースコードに含まれるスコープの特徴を表す第2特徴情報の入力を受け付け、前記第2特徴情報から前記スコープの位置を特定する位置情報を抽出する受付部と、
    前記第1特徴情報と前記第2特徴情報との類似度を算出する解析部と、
    前記類似度に基づいて、前記記憶部に記憶された前記補助情報から、出力する前記補助情報を選択する判定部と、
    選択された前記補助情報と前記位置情報により特定される前記スコープとを対応づけて出力する出力制御部、
    として機能させるためのプログラム。
  6. 前記補助情報は、前記ソースコードの更新の履歴を表す情報、前記ソースコードの更新の目的を表す情報、および、前記ソースコードの更新前後のコストまたは性能の変化を表す情報、のうち少なくとも1つを含む、
    請求項5に記載のプログラム。
  7. 前記出力制御部は、選択された前記補助情報に対応する前記第1特徴情報と前記第2特徴情報との類似度をさらに出力する、
    請求項5に記載のプログラム。
  8. 前記受付部は、前記第2特徴情報から、前記第1特徴情報と比較する第3特徴情報を抽出し、
    前記解析部は、前記第3特徴情報と前記第1特徴情報との類似度を算出する、
    請求項5に記載のプログラム。
  9. 1以上のソースコードの特徴をそれぞれ表す1以上の第1特徴情報と、前記ソースコードの更新状況を表す1以上の補助情報と、を対応づけて記憶する記憶部を備える情報処理装置で実行される情報処理方法であって、
    解析対象とするソースコードに含まれるスコープの特徴を表す第2特徴情報の入力を受け付け、前記第2特徴情報から前記スコープの位置を特定する位置情報を抽出する受付ステップと、
    前記第1特徴情報と前記第2特徴情報との類似度を算出する解析ステップと、
    前記類似度に基づいて、前記記憶部に記憶された前記補助情報から、出力する前記補助情報を選択する選択ステップと、
    選択された前記補助情報と前記位置情報により特定される前記スコープとを対応づけて出力する出力制御ステップと、
    を含む情報処理方法。
  10. 前記補助情報は、前記ソースコードの更新の履歴を表す情報、前記ソースコードの更新の目的を表す情報、および、前記ソースコードの更新前後のコストまたは性能の変化を表す情報、のうち少なくとも1つを含む、
    請求項9に記載の情報処理方法。
  11. 前記出力制御ステップは、選択された前記補助情報に対応する前記第1特徴情報と前記第2特徴情報との類似度をさらに出力する、
    請求項9に記載の情報処理方法。
  12. 前記受付ステップは、前記第2特徴情報から、前記第1特徴情報と比較する第3特徴情報を抽出し、
    前記解析ステップは、前記第3特徴情報と前記第1特徴情報との類似度を算出する、
    請求項9に記載の情報処理方法。
JP2014055360A 2014-03-18 2014-03-18 情報処理装置、情報処理方法およびプログラム Expired - Fee Related JP6309795B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014055360A JP6309795B2 (ja) 2014-03-18 2014-03-18 情報処理装置、情報処理方法およびプログラム
US14/638,008 US9495150B2 (en) 2014-03-18 2015-03-04 Information processing apparatus and method, and computer program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014055360A JP6309795B2 (ja) 2014-03-18 2014-03-18 情報処理装置、情報処理方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2015179312A JP2015179312A (ja) 2015-10-08
JP6309795B2 true JP6309795B2 (ja) 2018-04-11

Family

ID=54142185

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014055360A Expired - Fee Related JP6309795B2 (ja) 2014-03-18 2014-03-18 情報処理装置、情報処理方法およびプログラム

Country Status (2)

Country Link
US (1) US9495150B2 (ja)
JP (1) JP6309795B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9792114B1 (en) * 2016-10-10 2017-10-17 Semmle Limited Source code element signatures
US10592392B2 (en) * 2016-11-15 2020-03-17 International Business Machines Corporation System and method for predictive performance analysis via dynamic benchmark generation
CN109213515B (zh) * 2018-07-12 2021-10-29 创新先进技术有限公司 多平台下埋点归一方法及装置和电子设备
JP2021002158A (ja) * 2019-06-20 2021-01-07 富士通株式会社 分析対象特定プログラム、分析対象特定方法、情報処理装置
US20230176862A1 (en) * 2021-12-08 2023-06-08 Capital One Services, Llc Systems and methods for providing software development performance predictions
CN114491566B (zh) 2022-04-18 2022-07-05 中国长江三峡集团有限公司 一种基于代码相似性的模糊测试方法、装置及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5974254A (en) * 1997-06-06 1999-10-26 National Instruments Corporation Method for detecting differences between graphical programs
JP4560608B2 (ja) 2006-08-11 2010-10-13 国立大学法人神戸大学 類似度評価プログラム、類似度評価装置及び類似度評価方法
US8645936B2 (en) * 2009-09-30 2014-02-04 Zynga Inc. Apparatuses, methods and systems for an a API call abstractor
JP2011081496A (ja) * 2009-10-05 2011-04-21 Toshiba Corp 成果物レビュー支援装置
JP5564448B2 (ja) 2011-02-08 2014-07-30 株式会社日立製作所 ソフトウェアの類似性評価方法
JP5273884B1 (ja) * 2012-04-09 2013-08-28 伸一 石田 構造解析装置及びプログラム
US9047403B2 (en) * 2013-02-11 2015-06-02 International Business Machines Corporation Debugger with previous version feature

Also Published As

Publication number Publication date
US9495150B2 (en) 2016-11-15
US20150268953A1 (en) 2015-09-24
JP2015179312A (ja) 2015-10-08

Similar Documents

Publication Publication Date Title
JP6309795B2 (ja) 情報処理装置、情報処理方法およびプログラム
WO2019051426A1 (en) PRUNING ENGINE
WO2019075390A1 (en) BOX BLACK MATCHING MOTOR
JP2017041171A (ja) テストシナリオ生成支援装置およびテストシナリオ生成支援方法
CN116406459A (zh) 一种代码处理方法、装置、设备及介质
CN116305158A (zh) 一种基于切片代码依赖图语义学习的漏洞识别方法
US9563635B2 (en) Automated recognition of patterns in a log file having unknown grammar
US9002772B2 (en) Scalable rule-based processing system with trigger rules and rule evaluator
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
US11416246B2 (en) Information processing apparatus, analysis system, analysis method, and non-transitory computer readable medium storing analysis program
JP6364332B2 (ja) 仕様生成方法、仕様生成装置、及びプログラム
JP6111150B2 (ja) ソースコード解析装置、ソースコード解析方法、及びプログラム
JP5900212B2 (ja) テストデータ生成装置、該プログラム、及び該方法
US11281747B2 (en) Predicting variables where a portion are input by a user and a portion are predicted by a system
JP5900486B2 (ja) 関連仕様対応付けシステム、関連仕様対応付け方法およびプログラム
KR20210153912A (ko) 키워드 빈도수와 영역 중요도 분석 기반 딥러닝 문서 분석 시스템 및 방법
JP5487078B2 (ja) ソフトウェア資産整理方法及び装置
JP2016051367A (ja) データ解析装置、データ解析方法、および、プログラム。
JP6954080B2 (ja) 情報処理装置、分析プログラムおよび分析方法
WO2018116522A1 (ja) 判定装置、判定方法及び判定プログラム
JP6305944B2 (ja) 仕様抽出装置、仕様抽出方法およびプログラム
US11568662B2 (en) Information processing apparatus for detecting a common attribute indicated in different tables and generating information about the common attribute, and information processing method, and non-transitory computer readable medium
JPWO2017104571A1 (ja) 情報処理装置、情報処理方法、及び、コンピュータ・プログラム
JPWO2015145992A1 (ja) 非機能評価パラメータ抽出装置、非機能評価パラメータ抽出方法、および、非機能評価パラメータ抽出プログラム
JP6305356B2 (ja) 仕様抽出装置、仕様抽出方法およびプログラム

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20151102

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160830

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170801

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170920

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: 20180213

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180315

R151 Written notification of patent or utility model registration

Ref document number: 6309795

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees