(57)【要約】【課題】ソースコードの不要な分岐を抽出して単体テスト時に行う網羅テストのテストケース数を削減する。【解決手段】ソースコード実行処理順を示すコールツリーを取得する取得部３０と、削除箇所を探索するために使用する条件情報を記憶する条件記憶部５０と、前記条件記憶部５０が記憶した条件情報を用いて、前記取得部３０が取得したコールツリーを探索して削除箇所を特定する削除箇所探索部４０と、前記削除箇所探索部４０が抽出した削除箇所を表示する表示部７０とを備えた。【選択図】図１
2017157038.tif 000002
【特許請求の範囲】
【請求項１】
ソースコード実行処理順を示すコールツリーを取得する取得部と、
削除箇所を探索するために使用する条件情報を記憶する条件記憶部と、
前記条件記憶部が記憶した条件情報を用いて、前記取得部が取得したコールツリーを探索して削除箇所を特定する削除箇所探索部と、
前記削除箇所探索部が抽出した削除箇所を表示する表示部と
を備えた削除箇所抽出装置。
【請求項２】
前記条件記憶部は、削除対象となる条件分岐と、検査対象となる代入演算子とを記憶し、
前記削除箇所探索部は、
前記条件情報を取得して、前記コールツリーから削除対象となる前記条件分岐と合致する条件分岐を探索して、条件式と変数と変数の更新有無とを対応付けて条件式・変数管理情報として記憶するとともに、前記コールツリーから前記代入演算子を探索して変数の更新有無を更新する管理情報取得部と、
削除可能箇所を削除可能箇所情報として記憶する削除可能箇所保存部と、
削除不可能箇所を削除不可能箇所情報として記憶する削除不可能箇所保存部と、
前記削除可能箇所から前記削除不可能箇所を除いた箇所を削除箇所情報とする削除箇所特定部とを有する請求項１に記載の削除箇所抽出装置。
【請求項３】
前記管理情報取得部は、前記条件式・変数管理情報にすでに記憶された条件式と変数と同じ条件式と変数とを前記管理情報取得部が取得した場合であって、かつ、変数の更新有無が無である場合、条件式と変数とを削除可能箇所として検出し、
前記管理情報取得部は、前記条件式・変数管理情報に記憶された条件式と変数と同じ条件式と変数とを前記管理情報取得部が取得した場合であって、かつ、変数の更新有無が有である場合、条件式と変数とを削除不可能箇所として検出する請求項２に記載の削除箇所抽出装置。
【請求項４】
前記条件記憶部に前記条件情報を指定する条件指定部を備える請求項１から３いずれか１項に記載の削除箇所抽出装置。
【請求項５】
前記削除箇所情報をソースコードと共に表示するハイライト表示部を備える請求項１から４いずれか１項に記載の削除箇所抽出装置。
【請求項６】
取得部がソースコード実行処理順を示すコールツリーを取得し、
削除箇所を探索するために使用する条件情報を条件記憶部に指定し、
前記条件記憶部が記憶した条件情報を用いて、削除箇所探索部が前記コールツリーを探索して削除箇所を特定し、
表示部が前記削除箇所を表示する削除箇所抽出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コールツリーを用いた削除箇所抽出装置及び削除箇所抽出方法に関する。特にソースコード削除箇所抽出装置あるいはソースコード修正装置に関する。
【背景技術】
【０００２】
ソフトウェアのソースコードにおいて、変数の値が上限を超えた意図しない値になったときは予期しない動作をするため、変数に対してｉｆ文などの分岐により変数値確認を一般的に行う。分岐が増えることで単体テストにおける網羅テストのテストケースが増加するが、複数の関数において同一変数に対する重複した変数値確認の削除を行い最適化することで解決できる。しかし、従来はソースコードで実施しており、実行時を考慮していないため、不要な箇所の残存が懸念される。
【０００３】
特に、呼出し元関数である変数に対して変数値の確認が行われた場合、呼出し先関数においては同一変数の変数値の確認は不要なため、呼出し先関数から同一変数の変数値の確認のための記述の削除を行い最適化することが重要である。
しかし、既存技術ではコールツリー（関数呼出し関係）から削除箇所を自動抽出する技術がないため、上記の最適化が自動的に行うことができない。
【０００４】
特開平３−８０３２７号公報では、２つのモジュールから同一ロジック箇所を抽出する技術が開示されている。特開平３−８０３２７号公報では、２モジュールの各行を比較し、指定した行数以上同一であれば、同一ロジック箇所とみなし、その箇所を抽出する。
【０００５】
特開平１０−２２２３６０号公報では、同一条件式があるモジュール同士をマージする技術が開示されている。特開平１０−２２２３６０号公報では、同一条件式の実行分をマージし、それ以外の条件式は「Ｉｆ  ｅｌｓｅ」の形式でマージする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平３−８０３２７号公報
【特許文献２】特開平１０−２２２３６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
既存技術では、静的に重複している条件式を抽出することは可能であるが、実行時を考慮した条件式の重複は抽出できない。
【０００８】
特許文献１では、関数などの複数モジュールの各行を比較し、指定した行数以上同一であれば、同一ロジック箇所とみなし、抽出する。特許文献１は、静的なソースコードの比較であり、実行時の不要な同一条件式の検出はできない。
【０００９】
特許文献２では、同一条件式を探索・マージを行う。それ以外の条件式は「Ｉｆ  ｅｌｓｅ」の形式でマージする。特許文献２は、静的なソースコードの比較であり、実行時の不要な同一条件式の検出はできない。
【００１０】
本発明では、テストケース削減のため、不要なコードを削除することを目的とする。
【課題を解決するための手段】
【００１１】
この発明の削除箇所抽出装置は、
ソースコード実行処理順を示すコールツリーを取得する取得部と、
削除箇所を探索するために使用する条件情報を記憶する条件記憶部と、
前記条件記憶部が記憶した条件情報を用いて、前記取得部が取得したコールツリーを探索して削除箇所を特定する削除箇所探索部と、
前記削除箇所探索部が抽出した削除箇所を表示する表示部と
を備えた。
【発明の効果】
【００１２】
本発明では、不要な分岐を抽出するので、単体テスト時に行う網羅テストのテストケース数を削減することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１におけるソースコード削除箇所抽出装置１００の構成を示すブロック図。
【図２】実施の形態１におけるソースコード削除箇所抽出装置１００の処理フロー図。
【図３】コールツリーの例。
【図４】実施の形態１における削除対象の条件分岐１０２の例。
【図５】実施の形態１における代入演算子１０３の例。
【図６】実施の形態１におけるデータ型１０４の例。
【図７】実施の形態１における削除箇所の探索ステップＳ２０３の処理フロー。
【図８】実施の形態１におけるコールツリー１０１の例。
【図９】実施の形態１におけるコールツリー１０１の２行目までの削除箇所の探索結果の例。
【図１０】実施の形態１におけるコールツリー１０１の４行目までの削除箇所の探索結果の例。
【図１１】実施の形態１におけるコールツリー１０１の９行目までの削除箇所の探索結果の例。
【図１２】実施の形態１におけるコールツリー１０１の最終行までの削除箇所の探索結果の例。
【図１３】実施の形態２におけるソースコード削除箇所抽出装置１００の構成を示すブロック図。
【図１４】実施の形態２におけるソースコード削除箇所抽出装置１００の処理フロー図。
【図１５】実施の形態３におけるソースコード削除箇所抽出装置１００の構成を示すブロック図。
【図１６】実施の形態３におけるソースコード削除箇所抽出装置１００の処理フロー図。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。各図中、同一又は相当する部分には同一符号を付し、説明の重複を省いた。
【００１５】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に関わるソースコード削除箇所抽出装置１００のブロック構成について説明する。
本実施の形態では、コールツリー１０１と削除対象の条件分岐１０２、代入演算子１０３、データ型１０４を入力として、ソースコードの不要な削除箇所を抽出する。条件分岐１０２の具体例は、ｉｆ文、ｓｗｉｔｈ文である。代入演算子１０３の具体例は、「＝」、「＋＝」である。データ型１０４の具体例は、「ｉｎｔ」、「ｃｈａｒ」である。
【００１６】
ソースコード削除箇所抽出装置１００は、取得部３０、削除箇所探索部４０、条件記憶部５０、削除箇所記憶部６０、表示部７０を有する。
【００１７】
取得部３０は、ソースコード実行処理順を示すコールツリー１０１を取得する。
条件記憶部５０は、削除箇所を探索するために使用する条件情報を記憶する。
削除箇所探索部４０は、条件記憶部５０が記憶した条件情報を用いて、取得部３０が取得したコールツリー１０１を探索して削除箇所を特定する。
削除箇所記憶部６０は、削除箇所探索部４０の探索情報を記憶するとともに、削除箇所探索部４０が抽出した削除箇所を記憶する。
表示部７０は、削除箇所探索部４０が抽出した削除箇所を表示する。
【００１８】
条件記憶部５０は、削除対象となる条件分岐と、検査対象となる代入演算子とを記憶している。
削除箇所探索部４０は、条件記憶部５０から条件情報を取得して、コールツリー１０１を先頭行から最終行まで順に探索する管理情報取得部４１を有している。
管理情報取得部４１は、条件情報を取得して、コールツリー１０１から削除対象となる条件分岐と合致する条件分岐を探索して、条件式と変数と変数の更新有無とを対応付けて条件式・変数管理情報４０１として記憶するとともに、コールツリー１０１から代入演算子を探索して変数の更新有無を更新する。
さらに、管理情報取得部４１は、コールツリー１０１から代入演算子を探索して、代入演算子で値が変更される変数を検出して、変数の更新有無を条件式と変数とに対応付けて条件式・変数管理情報４０１として削除箇所記憶部６０に記憶する。
また、管理情報取得部４１は、条件式・変数管理情報４０１により、削除可能箇所を削除可能箇所情報４０２として検出し、可能箇所を削除不可能箇所情報４０３として検出する。
管理情報取得部４１は、条件式・変数管理情報４０１にすでに記憶された条件式と変数と同じ条件式と変数とを管理情報取得部４１が取得した場合であって、かつ、変数の更新有無が無である場合、条件式と変数とを削除可能箇所として検出する。
管理情報取得部４１は、条件式・変数管理情報４０１に記憶された条件式と変数と同じ条件式と変数とを管理情報取得部４１が取得した場合であって、かつ、変数の更新有無が有である場合、条件式と変数とを削除不可能箇所として検出する。
削除可能箇所保存部４２は、削除可能箇所を削除可能箇所情報４０２として削除箇所記憶部６０に記憶する。
削除不可能箇所保存部４３は、削除不可能箇所を削除不可能箇所情報４０３として削除箇所記憶部６０に記憶
削除箇所探索部４０は、削除可能箇所情報４０２と削除不可能箇所情報４０３とを統合して削除箇所情報４０４とする削除箇所特定部４４を有している。
【００１９】
削除箇所特定部４４は、削除可能箇所から削除不可能箇所を除いた箇所を削除箇所情報４０４とする。
【００２０】
図１を参照して、本実施の形態のソースコード削除箇所抽出装置１００の機器構成を説明する。
【００２１】
ソースコード削除箇所抽出装置１００には、データを記憶するための記録媒体１４０が１つ以上搭載される。また、ソースコード削除箇所抽出装置１００には、コールツリー１０１を取得するための入力装置１１０が１つ以上搭載される。また、ソースコード削除箇所抽出装置１００には、ユーザに情報を提示するための表示装置１３０が１つ以上搭載される。記録媒体１４０、入力装置１１０、表示装置１３０は、それぞれソースコード削除箇所抽出装置１００の外部に設置されても構わない。
【００２２】
削除箇所探索部４０は、記録媒体１４０に記憶された条件情報を読み出して、コールツリー１０１を探索して得た後述する各種情報を記録媒体１４０に蓄積する。
【００２３】
また、削除箇所探索部４０は、記録媒体１４０に記録した検索結果を表示装置１３０に出力する。
【００２４】
本実施の形態において、ソースコード削除箇所抽出装置１００は、コンピュータである。ソースコード削除箇所抽出装置１００の機能は、ソフトウェアで実現される。ソースコード削除箇所抽出装置１００は、プロセッサ１２０、記録媒体１４０である補助記憶装置、記録媒体１４０であるメモリ、表示装置１３０であるディスプレイといったハードウェアを備える。プロセッサ１２０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００２５】
プロセッサ１２０は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ・Ｃｉｒｃｕｉｔ）である。プロセッサ１２０は、具体的には、ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）である。
【００２６】
記録媒体１４０は、補助記憶装置及びメモリにより実現される。
【００２７】
補助記憶装置は、具体的には、ＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、フラッシュメモリ、又は、ＨＤＤ（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）である。
【００２８】
メモリは、具体的には、ＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）である。
【００２９】
入力装置１１０は、具体的には、マウス、タッチペン、キーボード、又は、タッチパネルである。
【００３０】
表示装置１３０は、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）である。
【００３１】
記録媒体１４０である補助記憶装置には、管理情報取得部４１、削除可能箇所保存部４２、削除不可能箇所保存部４３、削除箇所特定部４４といった「部」の機能を実現するプログラムが記憶されている。このプログラムは、記録媒体１４０であるメモリにロードされ、プロセッサ１２０に読み込まれ、プロセッサ１２０によって実行される。補助記憶装置には、ＯＳ（Ｏｐｅｒａｔｉｎｇ・Ｓｙｓｔｅｍ）も記憶されている。ＯＳの少なくとも一部がメモリにロードされ、プロセッサ１２０はＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
【００３２】
ソースコード削除箇所抽出装置１００は、１つのプロセッサ１２０のみを備えていてもよいし、複数のプロセッサ１２０を備えていてもよい。複数のプロセッサ１２０が「部」の機能を実現するプログラムを連携して実行してもよい。
【００３３】
「部」の処理の結果を示す情報やデータや信号値や変数値は、補助記憶装置、メモリ、又は、プロセッサ１２０内のレジスタ又はキャッシュメモリに記憶される。
【００３４】
「部」の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）等の可搬記憶媒体に記憶されてもよい。
【００３５】
＊＊＊動作の説明＊＊＊
図２に、この発明の実施の形態１におけるソースコード削除箇所抽出装置の処理フローを示す。
以降、図２を用いて、ソースコード削除箇所抽出方法を説明する。
【００３６】
ソースコード削除箇所抽出装置１００のソースコード削除箇所抽出方法の処理は、コールツリー取得ステップＳ２０１と、条件取得ステップＳ２０２と、削除箇所の探索ステップＳ２０３と、削除箇所情報の格納ステップＳ２０４と、削除箇所情報の表示ステップＳ２０５からなる。
【００３７】
コールツリー取得ステップＳ２０１において、取得部３０により、ソースコード実行処理順を示すコールツリー１０１をソースコード削除箇所抽出装置１００へ取得する。
【００３８】
コールツリー１０１は実行時の全処理を時系列に示したものである。シミュレーション的に網羅探索が可能であるモデル検査技術等を利用することで生成できる。
例として、図３にコールツリーの一例を示す。クラスＡは、メンバ関数Ａ、Ｂを保持している。クラスＡの関数Ａは変数ｘが定数ＭＡＸより超えた値であるか確認し、クラスＢの関数Ｂを実行する。クラスＢは、メンバ関数Ｂ、Ｃを保持している。クラスＢの関数Ｂは変数ｙが定数ＢＵＴＴＯＮ＿Ａと同値であった場合、変数ｘに０を代入し、ｘが定数ＭＡＸより超えた値であるか確認後、関数Ｃを実行する。
【００３９】
モデル検査技術（既存技術）は、クラスＡとクラスＢとの記述からコールツリーを生成することができる。コールツリーとは、関数の呼出しの流れを示すものであるが、ここで、コールツリーは関数呼出しだけではなく、計算や変数代入などの全処理をコールツリーの対象にしている。したがって、コールツリーに必要な情報は、実行されているクラス名、関数名、計算処理又は変数代入処理又は条件確認処理等の全処理である。コールツリーは、上から下へ時系列に実行処理文を表している。コールツリーは、ソースコードを解析して得ることができ、コールツリーの情報はソースコードと対応させることができる。
【００４０】
条件記憶部５０には、削除箇所を探索するために使用する条件情報が指定されている。条件情報とは、削除対象とする条件分岐１０２、代入演算子１０３、データ型１０４である。
条件入力ステップＳ２０２において、管理情報取得部４１は、条件記憶部５０から、削除対象とする条件分岐１０２、代入演算子１０３、データ型１０４を取得する。
【００４１】
削除対象の条件分岐１０２は、ソースコードの削除対象とする条件分岐を示す。削除対象の条件分岐はソースコードに使用された言語によりその言語仕様から一意に決まる。例として、図４にＣ言語の条件分岐を特定した削除対象条件分岐表の場合の例を示す。
【００４２】
代入演算子１０３は、変数の更新を表す代入演算子を示す。代入演算子はソースコードに使用された言語によりその言語仕様から一意に決まる。例として、図５にＣ言語の代入演算子を特定した代入演算子表の場合の例を示す。
【００４３】
データ型１０４は、変数宣言に利用されるデータ型を示す。入力されたデータ型を探索し、変数を抽出することができる。データ型はユーザが作成可能なため、言語仕様から一意には決まらない。例として、図６にＣ言語のデータ型を特定したデータ型表の場合の例を示す。
【００４４】
削除箇所の探索ステップＳ２０３において、削除箇所探索部４０は、条件記憶部５０が記憶した条件情報を用いて、コールツリー１０１を探索して削除箇所を特定する。
削除箇所探索部４０は、入力された情報から条件式・変数管理情報４０１、削除可能箇所情報４０２、削除不可能箇所情報４０３を中間データとして保持し、削除箇所を探索する。
【００４５】
条件式・変数管理情報４０１は、条件式毎に対象となった変数を対応付け、その変数の更新有無を管理する。条件式・変数管理情報４０１は、記憶項目として、「条件式」、対象となる変数を示す「変数」、前回の同じ条件式による確認後の有無を示す「更新有無」からなる。図１２に表形式の条件式・変数管理情報４０１の例を示す。
【００４６】
削除可能箇所情報４０２は、削除箇所探索部４０による探索の結果、削除可能箇所として暫定的に抽出された条件式を有する。図１２に表形式の削除可能箇所情報４０２の例を示す。
【００４７】
削除不可能箇所情報４０３は、削除箇所探索部４０による探索の結果、削除不可能箇所として抽出された条件式を有する。図１２に削除不可能箇所情報４０３の例を示す。
【００４８】
削除箇所情報４０４は、削除箇所探索部４０による探索の結果、削除可能箇所として抽出された条件式を有する。図１２に削除箇所情報４０４の例を示す。
【００４９】
削除箇所情報の格納ステップＳ２０４において、削除箇所探索部４０は、削除箇所記憶部６０に削除箇所探索部４０で抽出された削除箇所情報６０１を記憶する。
【００５０】
削除箇所情報の表示ステップＳ２０５において、表示部７０は削除箇所記憶部６０に記憶された削除箇所情報６０１を表示する。
【００５１】
図７に、削除箇所探索部４０の探索ステップＳ２０３の処理フローを示す。
以下、各ステップの処理内容を説明し、その後、図８のコールツリー１０１を用いて、具体的処理内容を説明する。
【００５２】
削除箇所探索部４０の探索処理が開始されると、ステップＳ６０１において管理情報取得部４１はコールツリー１０１から１行読み込む。
【００５３】
ステップＳ６０２において、管理情報取得部４１は、読み込んだ１行が代入演算子１０３を含んでいるかチェックし、読み込んだ１行が代入演算子１０３を含んでいる場合ステップＳ６０３へ、削除対象の条件分岐１０２を含んでいる場合ステップＳ６０４へ進む。代入演算子１０３と削除対象の条件分岐１０２とのいずれでもない場合は読み込んだ１行を無視してステップＳ６０１に戻る。
【００５４】
ステップＳ６０３において、条件式・変数管理情報４０１の「変数」列に合致する変数名がある場合、管理情報取得部４１は同一行の「更新有無」列を「有」にし、ステップＳ６１０へ進む。
【００５５】
ステップＳ６０４において、管理情報取得部４１は、条件式・変数管理情報４０１に「変数」列、「条件式」列が同一の行があるかチェックする。条件式・変数管理情報４０１に「変数」列の変数名が同一で、かつ、「条件式」列の条件式が同一の行がある場合、ステップＳ６０６へ、ない場合はステップＳ６０５へ進む。
【００５６】
ステップＳ６０５において、管理情報取得部４１は、条件式・変数管理情報に新しい行を追加し、「変数」列に対象とする変数名、「条件式」列に条件式、「更新有無」列に「無」を追加する。
管理情報取得部４１は、ステップＳ６１０へ進む。
【００５７】
ステップＳ６０６において、管理情報取得部４１は、条件式・変数管理情報４０１のステップＳ６０４で該当した行の「更新有無」列の値が「無」であればステップＳ６０８へ、「有」であればステップＳ６０７へ進む。
【００５８】
ステップＳ６０７において、削除不可能箇所保存部４３は、削除不可能箇所情報４０３に新しい行を追加し、該当する「クラス」、「関数」、「条件式」、「変数」を追加する。既に同一行がある場合は、何も追加しない。
削除不可能箇所保存部４３は、ステップＳ６０９へ進む。
【００５９】
ステップＳ６０８において、削除可能箇所保存部４２は、削除可能箇所情報４０２に新しい行を追加し、該当する「クラス」、「関数」、「条件式」、「変数」を追加する。既に同一行がある場合は、何も追加しない。
削除可能箇所保存部４２は、ステップＳ６０９へ進む。
【００６０】
ステップＳ６０９において、削除可能箇所保存部４２は、条件式・変数管理情報４０１において、該当行の「更新有無」列を「無」に変更し、ステップＳ６１０へ進む。
【００６１】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【００６２】
ステップＳ６１１において、削除箇所特定部４４は、削除可能箇所情報４０２から削除不可能箇所情報４０３にある同一行を削除し、削除箇所情報４０４として削除箇所記憶部６０へ送る。
【００６３】
図８に、コールツリー１０１の具体例を示す。図８のコールツリー１０１は、図７の処理フローを説明するためのものであり、正確なものではない。
以下、図８のコールツリー１０１が、図７の探索ステップＳ２０３でどのように処理されるかについて説明する。
【００６４】
＜＜＜１行目＞＞＞
削除箇所探索部４０の探索処理が開始されると、ステップＳ６０１において管理情報取得部４１はコールツリー１０１から１行目を読み込む。
【００６５】
ステップＳ６０２において、管理情報取得部４１は、読み込んだ１行目が代入演算子１０３を含んでいるかチェックし、読み込んだ１行が代入演算子１０３を含んでいる場合ステップＳ６０３へ、削除対象の条件分岐１０２を含んでいる場合ステップＳ６０４へ進む。代入演算子１０３と削除対象の条件分岐１０２とのいずれでもない場合は読み込んだ１行を無視してステップＳ６０１に戻る。
コールツリー１０１の１行目は、「ｉｎｔ  ｘ＝５」を含んでおり、代入演算子１０３を含んでいるので、管理情報取得部４１は、ステップＳ６０３へ進む。
【００６６】
ステップＳ６０３において、条件式・変数管理情報４０１の「変数」列に合致する変数名がある場合、管理情報取得部４１は同一行の「更新有無」列を「有」にし、ステップＳ６１０へ進む。
条件式・変数管理情報４０１は空であり、「変数」列に変数ｘは存在していないので、管理情報取得部４１は何もしない。
【００６７】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【００６８】
＜＜＜２行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、２行目を読み込む。
ステップＳ６０２において、コールツリー１０１の２行目は、「ｉｆ（ｘ＞１０）」を含んでおり、条件分岐１０２を含んでいるので、管理情報取得部４１は、ステップＳ６０４へ進む。
【００６９】
ステップＳ６０４において、管理情報取得部４１は、条件式・変数管理情報４０１に「変数」列が「ｘ」で、「条件式」列が「＞１０」である行がある場合、ステップＳ６０６へ、ない場合はステップＳ６０５へ進む。
条件式・変数管理情報４０１は空であり、「変数」列が「ｘ」で、「条件式」列が「＞１０」である行は存在していないので、管理情報取得部４１はステップＳ６０５へ進む。
【００７０】
ステップＳ６０５において、管理情報取得部４１は、条件式・変数管理情報４０１の１行目に、「変数」列が「ｘ」で、「条件式」列が「＞１０」で、「更新有無」列が「無」である行を追加する。
図９の条件式・変数管理情報４０１の１行目に処理結果の例を示す。
管理情報取得部４１は、ステップＳ６１０へ進む。
【００７１】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【００７２】
＜＜＜３行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、３行目を読み込む。
ステップＳ６０２において、コールツリー１０１の３行目は、「ｆｕｎｃＢ（ｘ）」を含んでおり、代入演算子１０３と削除対象の条件分岐１０２とのいずれでもないので、管理情報取得部４１は、ステップＳ６０１へ戻る。
【００７３】
＜＜＜４行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、４行目を読み込む。
ステップＳ６０２において、コールツリー１０１の４行目は、「ｉｆ（ｘ＞１０）」を含んでおり、条件分岐１０２を含んでいるので、管理情報取得部４１は、ステップＳ６０４へ進む。
【００７４】
ステップＳ６０４において、管理情報取得部４１は、条件式・変数管理情報４０１に「変数」列が「ｘ」で、「条件式」列が「＞１０」である行がある場合、ステップＳ６０６へ、ない場合はステップＳ６０５へ進む。
条件式・変数管理情報４０１は、図９に示すように、「変数」列が「ｘ」で、「条件式」列が「＞１０」である行が存在しているので、管理情報取得部４１はステップＳ６０６へ進む。
【００７５】
ステップＳ６０６において、管理情報取得部４１は、条件式・変数管理情報４０１のステップＳ６０４で該当した行の「更新有無」列の値が「無」であればステップＳ６０８へ、「有」であればステップＳ６０７へ進む。
条件式・変数管理情報４０１は、図９に示すように、「変数」列が「ｘ」で、「条件式」列が「＞１０」である行の「更新有無」列の値が「無」なので、管理情報取得部４１はステップＳ６０８へ進む。
【００７６】
ステップＳ６０８において、削除可能箇所保存部４２は、削除可能箇所情報４０２は空であり削除可能箇所情報４０２に「クラスＢ」「関数Ｂ」、「＞１０」、「ｘ」である行は存在していないので、削除可能箇所情報４０２に「クラスＢ」「関数Ｂ」、「＞１０」、「ｘ」の行を追加する。
【００７７】
ステップＳ６０９において、条件式・変数管理情報４０１は、図９に示すように、「変数」列が「ｘ」で、「条件式」列が「＞１０」である行の「更新有無」列の値が「無」であるが、削除可能箇所保存部４２は、該当行の「更新有無」列を「無」に上書きする。
図１０に４行目の処理結果の例を示す。
【００７８】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、そうでなければステップＳ６０１へ進む。
【００７９】
＜＜＜５行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、５行目を読み込む。
ステップＳ６０２において、コールツリー１０１の４行目は、「ｉｆ（ｘ＜５）」を含んでおり、条件分岐１０２を含んでいるので、管理情報取得部４１は、ステップＳ６０４へ進む。
【００８０】
ステップＳ６０４において、管理情報取得部４１は、条件式・変数管理情報４０１に「変数」列、「条件式」列が同一の行があるかチェックする。条件式・変数管理情報４０１に「変数」列が「ｘ」で、「条件式」列が「＜５」である行がある場合、ステップＳ６０６へ、ない場合はステップＳ６０５へ進む。
条件式・変数管理情報４０１は、図１０に示すように、「変数」列が「ｘ」で、「条件式」列が「＞１０」である行が存在しているが、「変数」列が「ｘ」で、「条件式」列が「＜５」である行が存在していないので、管理情報取得部４１はステップＳ６０５へ進む。
【００８１】
ステップＳ６０５において、管理情報取得部４１は、条件式・変数管理情報４０１の１行目に、「変数」列が「ｘ」で、「条件式」列が「＜５」で、「更新有無」列が「無」である行を追加する。
図１１の条件式・変数管理情報４０１の２行目に処理結果の例を示す。
管理情報取得部４１は、ステップＳ６１０へ進む。
【００８２】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【００８３】
＜＜＜６行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、６行目を読み込む。
ステップＳ６０２において、コールツリー１０１の４行目は、「ｉｆ（ｘ＜５）」を含んでおり、条件分岐１０２を含んでいるので、管理情報取得部４１は、ステップＳ６０４へ進む。
【００８４】
ステップＳ６０４において、管理情報取得部４１は、条件式・変数管理情報４０１は、図１１の条件式・変数管理情報４０１の２行目に示すように、「変数」列が「ｘ」で、「条件式」列が「＜５」である行が存在しているので、管理情報取得部４１はステップＳ６０６へ進む。
【００８５】
ステップＳ６０６において、条件式・変数管理情報４０１は、図１１に示すように、「変数」列が「ｘ」で、「条件式」列が「＜５」である行の「更新有無」列の値が「無」なので、管理情報取得部４１はステップＳ６０８へ進む。
【００８６】
ステップＳ６０８において、削除可能箇所保存部４２は、削除可能箇所情報４０２は、削除可能箇所情報４０２に「クラスＡ」「関数Ｄ」、「＜５」、「ｘ」である行は存在していないので、削除可能箇所情報４０２に「クラスＡ」「関数Ｂ」、「＜５」、「ｘ」の行を追加する。
削除可能箇所保存部４２は、ステップＳ６０９へ進む。
【００８７】
ステップＳ６０９において、条件式・変数管理情報４０１は、図１１に示すように、「変数」列が「ｘ」で、「条件式」列が「＜５」である行の「更新有無」列の値が「無」であるが、削除可能箇所保存部４２は、該当行の「更新有無」列を「無」に上書きする。
図１１の条件式・変数管理情報４０１の２行目と、削除可能箇所情報４０２の２行目に処理結果の例を示す。
【００８８】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【００８９】
＜＜＜７行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、７行目を読み込む。
ステップＳ６０２において、管理情報取得部４１は、コールツリー１０１の４行目は、「ｉｆ（ｙ＞＝１００）」を含んでおり、条件分岐１０２を含んでいるので、ステップＳ６０４へ進む。
【００９０】
ステップＳ６０４において、管理情報取得部４１は、条件式・変数管理情報４０１は、図１１の条件式・変数管理情報４０１に示すように、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」である行が存在していないので、管理情報取得部４１はステップＳ６０５へ進む。
【００９１】
ステップＳ６０５において、管理情報取得部４１は、条件式・変数管理情報４０１の３行目に、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」で、「更新有無」列が「無」である行を追加する。
図１１の条件式・変数管理情報４０１の３行目に処理結果の例を示す。
管理情報取得部４１は、ステップＳ６１０へ進む。
【００９２】
＜＜＜８行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、８行目を読み込む。
ステップＳ６０２において、管理情報取得部４１は、コールツリー１０１の４行目は、「ｉｆ（ｙ＞＝１００）」を含んでおり、条件分岐１０２を含んでいるので、ステップＳ６０４へ進む。
【００９３】
ステップＳ６０４において、管理情報取得部４１は、図１１の条件式・変数管理情報４０１の３行目に示すように、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」である行が存在しているので、管理情報取得部４１はステップＳ６０６へ進む。
【００９４】
ステップＳ６０６において、条件式・変数管理情報４０１は、図１１に示すように、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」である行の「更新有無」列の値が「無」なので、管理情報取得部４１はステップＳ６０８へ進む。
【００９５】
ステップＳ６０８において、削除可能箇所保存部４２は、削除可能箇所情報４０２に「クラスＡ」「関数Ｄ」、「＞＝１００」、「ｙ」である行は存在していないので、削除可能箇所情報４０２に「クラスＡ」「関数Ｄ」、「＞＝１００」、「ｙ」の行を追加する。
削除可能箇所保存部４２は、ステップＳ６０９へ進む。
【００９６】
ステップＳ６０９において、条件式・変数管理情報４０１は、図１１の条件式・変数管理情報４０１の３行目に示すように、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」である行の「更新有無」列の値が「無」であるが、削除可能箇所保存部４２は、該当行の「更新有無」列を「無」に上書きする。
図１１の条件式・変数管理情報４０１の３行目と、削除可能箇所情報４０２の３行目に処理結果の例を示す。
【００９７】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【００９８】
＜＜＜９行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、９行目を読み込む。
ステップＳ６０２において、管理情報取得部４１は、コールツリー１０１の９行目は、「ｙ＝ｙ＋ｘ」を含んでおり、代入演算子１０３を含んでいるので、ステップＳ６０３へ進む。
【００９９】
ステップＳ６０３において、条件式・変数管理情報４０１の「変数」列に合致する変数名がある場合、管理情報取得部４１は同一行の「更新有無」列を「有」にし、ステップＳ６１０へ進む。
条件式・変数管理情報４０１の「変数」列の３行目に変数「ｙ」が存在しているので、管理情報取得部４１は、図１１の矢印で示すように、条件式・変数管理情報４０１の３行目の「更新有無」列を「有」にし、ステップＳ６１０へ進む。
【０１００】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【０１０１】
＜＜＜１０行目＞＞＞
ステップＳ６０１において、管理情報取得部４１は、１０行目を読み込む。
ステップＳ６０２において、管理情報取得部４１は、コールツリー１０１の１０行目は、「ｉｆ（ｙ＞＝１００）」を含んでおり、条件分岐１０２を含んでいるので、ステップＳ６０４へ進む。
【０１０２】
ステップＳ６０４において、管理情報取得部４１は、図１１の条件式・変数管理情報４０１の３行目に示すように、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」である行が存在しているので、管理情報取得部４１はステップＳ６０６へ進む。
【０１０３】
ステップＳ６０６において、条件式・変数管理情報４０１は、図１１の矢印で示したように、「変数」列が「ｙ」で、「条件式」列が「＞＝１００」である行の「更新有無」列の値が「有」なので、管理情報取得部４１はステップＳ６０７へ進む。
【０１０４】
ステップＳ６０７において、削除不可能箇所保存部４３は、削除不可能箇所情報４０３が空なので、削除不可能箇所情報４０３に「クラスＡ」「関数Ｄ」、「＞＝１００」、「ｙ」の行を追加する。
図１２の削除不可能箇所情報４０３の１行目に処理結果の例を示す。
削除不可能箇所保存部４３は、ステップＳ６０９へ進む。
【０１０５】
ステップＳ６１０において、管理情報取得部４１は、コールツリーの終端であればステップＳ６１１へ、終端でなければステップＳ６０１へ進む。
【０１０６】
ステップＳ６１１において、削除箇所特定部４４は、削除可能箇所情報４０２と削除不可能箇所情報４０３とを比較して、同一行があるかを検出し、削除可能箇所情報４０２から削除不可能箇所情報４０３にある同一行を削除し、削除箇所情報４０４として削除箇所記憶部６０へ送る。
図１２に示すように、削除箇所特定部４４は、削除可能箇所情報４０２の３行目と削除不可能箇所情報４０３の１行目が同一行であるので、削除可能箇所情報４０２から３行目を削除し、削除可能箇所情報４０２の１行目と２行目とを削除箇所情報４０４として削除箇所記憶部６０へ送る。
【０１０７】
＜＜動作原理の説明＞＞
コールツリー１０１は、プログラムの実行順に記述されたものであるから、２個の同一条件式の間に変数の値が変更されていなければ条件式を削除可能と判断することができ、２個の同一条件式の間に変数の値が変更されていれば条件式は削除不可能と判断することができる。
条件式・変数管理情報４０１は、２個の同一条件式の間に変数の値が変更されているかいないかを管理する表である。削除可能箇所情報４０２は、２個の同一条件式の間に変数の値が変更されていないので削除可能と判断された条件式を記憶する表である。削除不可能箇所情報４０３は、２個の同一条件式の間に変数の値が変更されているので削除不可能と判断された条件式を記憶する表である。
そして、２個の同一条件式の間に変数の値が変更されていないので削除可能と判断された条件式であっても、削除可能と判断された条件式がプログラムの実行順によっては２個の同一条件式の間に変数の値が変更されているので削除不可能と判断された条件式である場合は削除すべきではない。このため、削除可能箇所情報４０２から削除不可能箇所情報４０３を除いて削除箇所情報４０４としている。
【０１０８】
＊＊＊実施の形態の効果の説明＊＊＊
実施の形態１によれば、不要なソースコードの分岐を抽出することができ、単体テスト時に行う網羅テストのテストケース数を削減することができる。
実施の形態１によれば、コールツリー１０１を利用しているため、実行時の解析ができ、削除箇所をもれなく検出することができる。
【０１０９】
＊＊＊他の構成の説明＊＊＊
実施の形態１では、ソースコード削除箇所抽出装置１００が、プロセッサ１２０を使用する場合を説明したが、プロセッサではなく、処理回路を用いる場合でも構わない。
【０１１０】
実施の形態１ではデータ型を利用する場合を説明しなかったが、データ型により変数の値が変更できる言語の場合は、コールツリー１０１にデータ型を含む行を生成して、管理情報取得部４１が、データ型を含む行を検出してもよい。すなわち、データ型を含む行を検出し、かつ、条件式・変数管理情報４０１にデータ型で定義された変数が存在する場合は、管理情報取得部４１が条件式・変数管理情報４０１のデータ型で定義された変数と同じ変数がある行の「変更有無」を「有」にしてもよい。
【０１１１】
実施の形態１では、特定の指定された削除対象の条件分岐１０２、代入演算子１０３、データ型１０４のみ、ソースコード削除箇所の抽出が可能であり、実施の形態１では、条件をあらかじめ特定しているので、条件を指定する作業が不要である。
【０１１２】
実施の形態１では、ソースコードから作成したコールツリー１０１を説明したが、仕様書あるいはフローチャートからコールツリー１０１を作成してもよい。
実施の形態１では、コールツリー１０１を解析対象にしたが、実行順序が記載された記述書、仕様書、フローチャートを解析対象にしてもよい。
【０１１３】
実施の形態２．
この実施の形態２では、実施の形態１と異なる点について説明する。
【０１１４】
＊＊＊構成の説明＊＊＊
図１３に、この発明の実施の形態２を示すソースコード削除箇所抽出装置１００の概要を示すブロック構成図を示す。
【０１１５】
図１３において、ソースコード削除箇所抽出装置１００は、条件指定部８０を有する。条件指定部８０は、例えば、Ｃ言語、ＪＡＶＡ（登録商標）言語に対応した削除対象の条件分岐１０２、代入演算子１０３、データ型１０４を指定するものである。
【０１１６】
＊＊＊動作の説明＊＊＊
図１４に、この発明の実施の形態２におけるソースコード削除箇所抽出方法のソースコード変換の処理フローを示す。
【０１１７】
実施の形態２における処理は、図２に示した処理に対し、条件指定ステップＳ２０６を追加した処理である。
【０１１８】
条件指定ステップＳ２０６において、条件指定部８０は、指定された削除対象の条件分岐１０２、代入演算子１０３、データ型１０４を、条件記憶部５０の削除対象の条件分岐１０２、代入演算子１０３、データ型１０４に置き換える。あるいは、条件指定部８０は、条件記憶部５０の削除対象の条件分岐１０２、代入演算子１０３、データ型１０４を追加変更削除する。
【０１１９】
＊＊＊実施の形態の効果の説明＊＊＊
実施の形態１では、条件記憶部５０があらかじめ条件を記していたが、この実施の形態では、条件の指定により、指定した条件に対応したソースコード削除箇所抽出が可能となる。
【０１２０】
実施の形態２では削除対象の条件分岐１０２、代入演算子１０３、データ型１０４をユーザが任意に指定することにより、複数のプログラミング言語に対応するソースコード削除箇所抽出が可能となる。
【０１２１】
実施の形態３．
この実施の形態３では、実施の形態１と異なる点について説明する。
【０１２２】
＊＊＊構成の説明＊＊＊
図１５に、この発明の実施の形態３を示すソースコード削除箇所抽出装置１００の概要を示すブロック構成図を示す。
【０１２３】
図１５において、ソースコード削除箇所抽出装置１００は、ハイライト表示部４５を有する。
また、取得部３０は、ソースコード１０５を取得する。
【０１２４】
＊＊＊動作の説明＊＊＊
図１６に、この発明の実施の形態３におけるソースコード削除箇所抽出方法のソースコード変換の処理フローの一例を示す。
【０１２５】
実施の形態３における処理は、図２に示した実施の形態１の処理に、ソースコード取得ステップＳ２０７の処理を追加し、図２に示した実施の形態１の処理の表示ステップＳ２０６の代わりに、削除箇所情報のハイライト表示ステップＳ２０８を追加した処理である。
【０１２６】
ソースコード取得ステップＳ２０７において、取得部３０は、ソースコード１０５を取得して、削除箇所探索部４０に引き渡す。削除箇所探索部４０は、ソースコード１０５をメモリに保存しておく。
削除箇所情報のハイライト表示ステップＳ２０７において、ハイライト表示部４５は、削除箇所情報４０４とソースコード１０５とを比較し、ソースコード１０５のいずれの行が削除瑕疵に該当するかを検索する。ハイライト表示部４５は、該当したソースコード１０５の削除箇所を表示部７０にハイライト表示する。ハイライト表示の具体例は、フォントサイズの拡大、フォントカラーの変更、フォントのブリンク表示、文字反転表示、字種変更表示である。
【０１２７】
＊＊＊実施の形態の効果の説明＊＊＊
実施の形態１では、削除箇所を表形式で表示するだけであったが、実施の形態３では該当したソースファイルに削除箇所をハイライト表示することが可能となる。
【０１２８】
＊＊＊他の構成の説明＊＊＊
ハイライト表示部４５は、ハイライト表示するとともに、削除箇所情報４０４を表形式で表示してもよい。
取得部３０がソースコード１０５を取得するのではなく、ハイライト表示部４５がソースコード１０５を取得してもよい。
実施の形態３は、実施の形態２と組み合わせてもかまわない。
【符号の説明】
【０１２９】
３０  取得部、４０  削除箇所探索部、４１  管理情報取得部、４２  削除可能箇所保存部、４３  削除不可能箇所保存部、４４  削除箇所特定部、４５  ハイライト表示部、５０  条件記憶部、６０  削除箇所記憶部、７０  表示部、８０  条件指定部、１００  ソースコード削除箇所抽出装置、１０１  コールツリー、１０２  条件分岐、１０３  代入演算子、１０４  データ型、１０５  ソースコード、１１０  入力装置、１２０  プロセッサ、１４０  記録媒体、１３０  表示装置、４０１  条件式・変数管理情報、４０２  削除可能箇所情報、４０３  削除不可能箇所情報、４０４  削除箇所情報。
【図１】
2017157038.tif 000003
【図２】
2017157038.tif 000004
【図３】
2017157038.tif 000005
【図４】
2017157038.tif 000006
【図５】
2017157038.tif 000007
【図６】
2017157038.tif 000008
【図７】
2017157038.tif 000009
【図８】
2017157038.tif 000010
【図９】
2017157038.tif 000011
【図１０】
2017157038.tif 000012
【図１１】
2017157038.tif 000013
【図１２】
2017157038.tif 000014
【図１３】
2017157038.tif 000015
【図１４】
2017157038.tif 000016
【図１５】
2017157038.tif 000017
【図１６】
2017157038.tif 000018