(57)【要約】【課題】ソフトウェアを評価するテストケースを適切に選択する。【解決手段】テストケースを選択する計算機であって、ソフトウェアを分析して、機能及び変数の対応関係を管理する第１の対応情報、並びにプログラム関数及び変数の関連性の強さを示す関連度を管理する相関情報を生成し、着目機能の情報、並びにテストケース及び機能の対応関係を管理する第２の対応情報を受け付け、第１の対応情報に基づいて、着目機能に関連する第１の変数を特定し、相関情報に基づいて、第１のプログラム関数に関連する第２の変数及び第１の変数の関連性の強さを示す第１の関連度を算出し、第１の対応情報及び第１の関連度に基づいて選択指標を第１の対応情報に登録される各機能について算出し、第２の対応情報及び選択指標に基づいてテストケースを選択する。【選択図】図２
2018180711.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一つ以上の変数を含む複数のプログラム関数から構成され、所定の機能を実現するソフトウェアを評価するためのテストケースを選択する計算機であって、
前記計算機は、プロセッサ及び前記プロセッサに接続される記憶装置を備え、
前記プロセッサは、
前記ソフトウェアを分析して、前記機能及び前記機能に関連する変数の対応関係を管理する第１の対応情報、並びに前記プログラム関数及び前記変数の関連性の強さを示す関連度を管理する相関情報を生成し、
着目機能の情報を前記テストケースを選択するための条件として受け付け、
前記テストケース及び前記テストケースに関連する機能の対応関係を管理する第２の対応情報を受け付け、
前記第１の対応情報に基づいて、前記着目機能に関連する第１の変数を特定し、
前記相関情報に基づいて、前記ソフトウェアを構成する第１のプログラム関数に関連する第２の変数及び前記第１の変数の関連性の強さを示す第１の関連度を算出し、
前記第１の対応情報及び前記第１の関連度に基づいて、前記テストケースの選択指標を前記第１の対応情報に登録される各機能について算出し、関連度順位情報として出力し、
前記第２の対応情報及び前記関連度順位情報に基づいて、実行テストケースを選択し、優先テストケース情報として出力することを特徴とする計算機。
【請求項２】
請求項１に記載の計算機であって、
前記プロセッサは、
前記相関情報から、前記第１の変数及び前記第１のプログラム関数の関連性の強さを示す第２の関連度を取得し、
前記相関情報から、前記第２の変数及び前記第１のプログラム関数の関連性の強さを示す第３の関連度を取得し、
前記第２の関連度及び第３の関連度を用いて、前記第１の関連度を算出することを特徴とする計算機。
【請求項３】
請求項２に記載の計算機であって、
前記プロセッサは、
前記ソフトウェアの分析の結果に基づいて、前記ソフトウェアの特徴を管理するメトリクス情報を生成し、
前記メトリクス情報を用いて前記第１の関連度を修正し、又は、前記メトリクス情報を用いて前記選択指標を修正することを特徴とする計算機。
【請求項４】
請求項２に記載の計算機であって、
前記プロセッサは、
前記関連度順位情報を参照して、前記選択指標と閾値とを比較し、
前記比較の結果に基づいて、候補機能を選択し、
前記第２の対応情報を参照して、前記候補機能に関連するテストケースを、前記実行テストケースとして選択することを特徴とする計算機。
【請求項５】
請求項２に記載の計算機であって、
前記プロセッサは、
前記テストケースの実行時に使用されるリソースに関する制約を示す制約条件を受け付け、
前記第２の対応情報、前記関連度順位情報、及び前記制約条件に基づいて、前記制約を満たし、かつ、前記着目機能と関連性があるテストケースを、前記実行テストケースとして選択することを特徴とする計算機。
【請求項６】
請求項５に記載の計算機であって、
前記制約は、前記テストケースの実行に要するコストの最大値であることを特徴とする計算機。
【請求項７】
請求項６に記載の計算機であって、
前記プロセッサは、前記コストの大きさに応じて前記テストケースを異なる態様で表示画面に表示し、
前記表示画面では、前記実行テストケースとして選択されたテストケースが強調表示されることを特徴とする計算機。
【請求項８】
請求項７に記載の計算機であって、
前記プロセッサは、
前記優先テストケース情報に登録された第１の実行テストケースの削除操作を受け付け、
前記優先テストケース情報に登録されていないテストケースであって、前記制約を満たし、かつ、前記着目機能と関連性があるテストケースを、追加候補テストケースとして特定し、
前記表示画面では、前記追加候補テストケースとして選択されたテストケースが強調表示されることを特徴とする計算機。
【請求項９】
計算機が実行する、所定の機能を実現するソフトウェアを評価するためのテストケースの選択方法であって、
前記ソフトウェアは、少なくとも一つ以上の変数を含む複数のプログラム関数から構成され、
前記計算機は、プロセッサ及び前記プロセッサに接続される記憶装置を備え、
前記プロセッサが、前記ソフトウェアを分析して、前記機能及び前記機能に関連する変数の対応関係を管理する第１の対応情報、並びに前記プログラム関数及び前記変数の関連性の強さを示す関連度を管理する相関情報を生成する第１のステップと、
前記プロセッサが、着目機能の情報を前記テストケースを選択するための条件として受け付ける第２のステップと、
前記プロセッサが、前記テストケース及び前記テストケースに関連する機能の対応関係を管理する第２の対応情報を受け付ける第３のステップと、
前記プロセッサが、前記第１の対応情報に基づいて、前記着目機能に関連する第１の変数を特定する第４のステップと、
前記プロセッサが、前記相関情報に基づいて、前記ソフトウェアを構成する第１のプログラム関数に関連する第２の変数及び前記第１の変数の関連性の強さを示す第１の関連度を算出する第５のステップと、
前記プロセッサが、前記第１の対応情報及び前記第１の関連度に基づいて、前記テストケースの選択指標を前記第１の対応情報に登録される各機能について算出し、関連度順位情報として出力する第６のステップと、
前記プロセッサが、前記第２の対応情報及び前記関連度順位情報に基づいて実行テストケースを選択し、優先テストケース情報として出力する第７のステップと、を含むことを特徴とするテストケースの選択方法。
【請求項１０】
請求項９に記載のテストケースの選択方法であって、
前記第５のステップは、
前記プロセッサが、前記相関情報から、前記第１の変数及び前記第１のプログラム関数の関連性の強さを示す第２の関連度を取得するステップと、
前記プロセッサが、前記相関情報から、前記第２の変数及び前記第１のプログラム関数の関連性の強さを示す第３の関連度を取得するステップと、
前記プロセッサが、前記第２の関連度及び第３の関連度を用いて、前記第１の関連度を算出するステップと、を含むことを特徴とするテストケースの選択方法。
【請求項１１】
請求項１０に記載のテストケースの選択方法であって、
前記第１のステップは、前記プロセッサが、前記ソフトウェアの分析の結果に基づいて、前記ソフトウェアの特徴を管理するメトリクス情報を生成するステップを含み、
前記テストケースの選択方法は、前記プロセッサが、前記メトリクス情報を用いて前記第１の関連度を修正するステップ、及び前記メトリクス情報を用いて前記選択指標を修正するステップの少なくともいずれかを含むことを特徴とするテストケースの選択方法。
【請求項１２】
請求項１０に記載のテストケースの選択方法であって、
前記第７のステップは、
前記プロセッサが、前記関連度順位情報を参照して、前記選択指標と閾値とを比較するステップと、
前記プロセッサが、前記比較の結果に基づいて、候補機能を選択するステップと、
前記プロセッサが、前記第２の対応情報を参照して、前記候補機能に関連するテストケースを、前記実行テストケースとして選択するステップと、を含むことを特徴とするテストケースの選択方法。
【請求項１３】
請求項１０に記載のテストケースの選択方法であって、
前記第２のステップは、前記プロセッサが、前記テストケースの実行時に使用されるリソースに関する制約として前記テストケースの実行に要するコストの最大値を含む制約条件を受け付けるステップを含み、
前記第７のステップは、前記プロセッサが、前記第２の対応情報、前記関連度順位情報、及び前記制約条件に基づいて、前記制約を満たし、かつ、前記着目機能と関連性があるテストケースを、前記実行テストケースとして選択するステップを含むことを特徴とするテストケースの選択方法。
【請求項１４】
請求項１３に記載のテストケースの選択方法であって、
前記プロセッサが、前記コストの大きさに応じて前記テストケースを異なる態様で表示画面に表示するステップを含み、
前記表示画面では、前記実行テストケースとして選択されたテストケースが強調表示されることを特徴とするテストケースの選択方法。
【請求項１５】
請求項１４に記載のテストケースの選択方法であって、
前記プロセッサが、前記優先テストケース情報に登録された第１の実行テストケースの削除操作を受け付けるステップと、
前記プロセッサが、前記優先テストケース情報に登録されていないテストケースであって、前記制約を満たし、かつ、前記着目機能と関連性があるテストケースを、追加候補テストケースとして特定するステップと、を含み、
前記表示画面では、前記追加候補テストケースとして選択されたテストケースが強調表示されることを特徴とするテストケースの選択方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを評価するテストケースを選択する計算機及び方法に関する。
【背景技術】
【０００２】
近年のソフトウェアシステムでは、ＩｏＴ等の隆盛に伴ってシステムの構成が複雑化し、また、規模が増大している。システムが正常に動作することを保証するためには、システムをテストすることが有効である。一般的にソフトウェアシステムをテストする場合、対象ソフトウェアシステムに対して、任意の入力を与えたときに所望の結果が得られるか否かが確認される。この確認項目をテストケースと呼ぶ。
【０００３】
システムの複雑化及び巨大化に伴うテストの項目及び種類が増加によって、それらの組み合わせが爆発的に増加する。しかし、開発期間及び開発人員等の開発リソースが有限であるため、全ての組み合わせを網羅的にテストすることは困難である。
【０００４】
そこで、全ての組み合わせを網羅的にテストするのではなく、可能な限りソフトウェアの品質を保証できるようなテストケースを選択し、実行することによって、開発リソースの使用量を削減する方法がある。
【０００５】
特許文献１には、「ソフトウェアシステムのプログラムモジュールごとの品質情報を設定する工程２４と、前記品質情報から前記プログラムモジュールの不具合検出工数を予測する工程２６と、前記モジュールと前記ソフトウェアシステムの仕様書から抽出される仕様項目との対応関係を表すモジュール・仕様項目対応関係情報を作成する工程２２と、前記不具合検出工数と前記モジュール・仕様項目対応関係情報とから仕様項目不具合検出工数を予測する工程２８と、前記仕様項目不具合検出工数に基づいて、前記ソフトウェアシステムのテストに利用可能なテストリソースを配分するテスト計画を作成する工程３０とを備え」るテスト計画作成支援方法が記載されている。特許文献１に記載の方法を用いることによって、限られた開発リソース内で実行するテストケースを絞り込むことができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２５６２０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来技術におけるテストケースの選択手法では、プログラムの品質メトリクスがモジュール単位であるため、それ以上の細かい粒度での分析、例えば、関数及び変数といった単位での絞り込みができない。そのため、優先的に実行すべきテストケースと、優先的に実行しなくてもよいテストケースとの区別が困難となる。そのため、限られた開発リソース内を用いて、ソフトウェアの品質の保証することが困難になる。
【０００８】
本発明は、最適なテストケースを絞り込む装置及び方法を提供する。
【課題を解決するための手段】
【０００９】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、少なくとも一つ以上の変数を含む複数のプログラム関数から構成され、所定の機能を実現するソフトウェアを評価するためのテストケースを選択する計算機であって、前記計算機は、プロセッサ及び前記プロセッサに接続される記憶装置を備え、前記プロセッサは、前記ソフトウェアを分析して、前記機能及び前記機能に関連する変数の対応関係を管理する第１の対応情報、並びに前記プログラム関数及び前記変数の関連性の強さを示す関連度を管理する相関情報を生成し、着目機能の情報を前記テストケースを選択するための条件として受け付け、前記テストケース及び前記テストケースに関連する機能の対応関係を管理する第２の対応情報を受け付け、前記第１の対応情報に基づいて、前記着目機能に関連する第１の変数を特定し、前記相関情報に基づいて、前記ソフトウェアを構成する第１のプログラム関数に関連する第２の変数及び前記第１の変数の関連性の強さを示す第１の関連度を算出し、前記第１の対応情報及び前記第１の関連度に基づいて、前記テストケースの選択指標を前記第１の対応情報に登録される各機能について算出し、関連度順位情報として出力し、前記第２の対応情報及び前記関連度順位情報に基づいて、実行テストケースを選択し、優先テストケース情報として出力することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、ソフトウェアの分析結果に基づいて生成された情報を用いることによって、着目機能に関連する実行テストケースを適切に選択できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１１】
【図１】実施例１のテストケース抽出装置のハードウェア構成及びソフトウェア構成を説明する図である。
【図２】実施例１のテストケース抽出装置のデータの入出力を説明する図である。
【図３】実施例１の変数−機能対応情報のデータ構造の一例を示す図である。
【図４】実施例１のプログラム関数−変数対応情報のデータ構造の一例を示す図である。
【図５】実施例１のメトリクス情報のデータ構造の一例を示す図である。
【図６】実施例１のプログラム関数−変数相関情報のデータ構造の一例を示す図である。
【図７】実施例１の関連度順位情報のデータ構造の一例を示す図である。
【図８】実施例１のテストケース−機能対応情報のデータ構造の一例を示す図である。
【図９】実施例１の優先テストケース情報のデータ構造の一例を示す図である。
【図１０】実施例１のテストケース抽出装置が実行する処理の一例を説明するフローチャートである。
【図１１】実施例１のテストケース抽出装置が実行する処理の一例を説明するフローチャートである。
【図１２Ａ】実施例１の関連度分析部が実行する関連度順位情報の生成処理の一例を説明するフローチャートである。
【図１２Ｂ】実施例１の関連度分析部が実行する関連度順位情報の生成処理の一例を説明するフローチャートである。
【図１３】実施例１の関連度分析部が一時的に生成するワークテーブルのデータ構造の一例を示す図である。
【図１４】実施例１の関連度分析部が一時的に生成する着目機能−変数相関情報のデータ構造の一例を示す図である。
【図１５】実施例１のテストケース抽出部が実行する優先テストケース情報の生成処理を説明するフローチャートである。
【図１６】実施例２のテストケース抽出装置のデータの入出力を説明する図である。
【図１７】実施例３のテストケース抽出装置のデータの入出力を説明する図である。
【図１８】実施例３のテストケース−機能対応情報のデータ構造の一例を示す図である。
【図１９】実施例３のテストケース抽出部が実行する優先テストケース情報の生成処理を説明するフローチャートである。
【図２０】実施例４のテストケース抽出装置のデータの入出力を説明する図である。
【図２１】実施例４の優先テストケース情報に基づいて表示される画面に一例を示す図である。
【図２２】実施例５のテストケース抽出装置のデータの入出力を説明する図である。
【図２３】実施例５のテストケース選択部が実行する処理の一例を説明するフローチャートである。
【図２４】実施例５の優先テストケース情報に基づいて表示される画面に一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しつつ実施例について説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではない。また実施例において説明されている各要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
なお、本明細書では、テスト対象のプログラム（ソフトウェア）によって実現される機能を「機能」と記載し、テスト対象のプログラム（ソフトウェア）に含まれる関数を「プログラム関数」と記載する。
【実施例１】
【００１４】
図１は、実施例１のテストケース抽出装置１０のハードウェア構成及びソフトウェア構成を説明する図である。図２は、実施例１のテストケース抽出装置１０のデータの入出力を説明する図である。
【００１５】
テストケース抽出装置１０は、プロセッサ１１、主記憶装置１２、補助記憶装置１３、通信装置１４、入力装置１５、及び出力装置１６を備える。各ハードウェアは、図示しないバス等の通信手段を介して互いに通信可能に接続される。
【００１６】
プロセッサ１１は、プログラムにしたがって処理を実行する演算装置であり、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）又はＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等である。プロセッサ１１が、主記憶装置１２に格納されるプログラムを実行することによって、テストケース抽出装置１０の各種機能部（モジュール）が実現される。以下の説明では、機能部を主語に処理を説明する場合、プロセッサ１１が当該機能部を実現するプログラムを実行していることを表す。
【００１７】
主記憶装置１２は、プログラム及びデータを記憶する装置であり、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、不揮発性半導体メモリ（ＮＶＲＡＭ：Ｎｏｎ  Ｖｏｌａｔｉｌｅ  ＲＡＭ）等である。主記憶装置１２に格納されるプログラムについては後述する。
【００１８】
補助記憶装置１３は、データを永続的に格納する装置であり、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光学式記憶装置（ＣＤ：Ｃｏｍｐａｃｔ  Ｄｉｓｃ、ＤＶＤ：Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ等）、ストレージシステム、ＩＣカード等が考えられる。補助記憶装置１３に格納されるデータについては後述する。
【００１９】
なお、テストケース抽出装置１０は、補助記憶装置１３を有していなくてもよい。この場合、ＳＤメモリカード又は光学式記録媒体等の記録媒体の読取／書込装置、又はクラウドサーバが提供するストレージサービスを利用して、データを格納すればよい。
【００２０】
なお、主記憶装置１２に格納されるプログラム及びデータは、補助記憶装置１３に格納される。この場合、プロセッサ１１が補助記憶装置１３からプログラム及びデータを読み出し、主記憶装置１２にロードする。
【００２１】
通信装置１４は、ネットワークを介して他の装置と通信を行うインタフェースであり、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）、無線通信モジュール、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｉｎｔｅｒｆａｃｅ）モジュール、及びシリアル通信モジュール等である。ネットワークは、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、及びインターネット等である。なお、ネットワークの接続方式は、無線及び有線のいずれでもよい。
【００２２】
入力装置１５は、データの入力を行うインタフェースであり、例えば、キーボード、マウス、タッチパネル、カードリーダ、及び音声入力装置等である。
【００２３】
出力装置１６は、ユーザに処理経過及び処理結果等の情報を出力するインタフェースであり、例えば、画面表示装置（液晶モニタ、ＬＣＤ：Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ、グラフィックカード等）、音声出力装置（スピーカ等）、印字装置等である。
【００２４】
なお、テストケース抽出装置１０が通信装置１４を介して他の装置との間でデータの入出力を行う構成でもよい。この場合、テストケース抽出装置１０は、入力装置１５及び出力装置１６を有していなくてもよい。
【００２５】
ここで、主記憶装置１２に格納されるプログラム及び補助記憶装置１３に格納されるデータについて説明する。主記憶装置１２は、対応関係抽出部１０１、プログラム分析部１０２、重み付け処理部１０３、関連度分析部１０４、テストケース抽出部１０５、テストケース選択部１０６、及び情報記憶部１０７を実現するプログラムを格納する。また、補助記憶装置１３は、情報記憶部１０７によって管理されるデータとして、変数−機能対応情報１１１、プログラム関数−変数対応情報１１２、メトリクス情報１１３、プログラム関数−変数相関情報１１４、及び関連度順位情報１１５を格納する。
【００２６】
なお、変数−機能対応情報１１１、プログラム関数−変数対応情報１１２、メトリクス情報１１３、プログラム関数−変数相関情報１１４、及び関連度順位情報１１５は、主記憶装置１２に格納されてもよい。
【００２７】
対応関係抽出部１０１は、機能一覧２０１及びソースコード２０２を受け付けて、変数−機能対応情報１１１を生成する。機能一覧２０１は、キーワードとして使用する機能を格納する情報であり、例えば、リスト形式の情報である。ソースコード２０２は、テスト対象となるプログラム（ソフトウェア）のソースコードである。
【００２８】
プログラム分析部１０２は、ソースコード２０２を受け付けて、ソースコード２０２を分析し、分析結果に基づいてプログラム関数−変数対応情報１１２及びメトリクス情報１１３を生成する。
【００２９】
重み付け処理部１０３は、プログラム関数−変数対応情報１１２を受け付けて、プログラム関数−変数相関情報１１４を生成する。
【００３０】
関連度分析部１０４は、着目機能情報２０３、変数−機能対応情報１１１、プログラム関数−変数相関情報１１４、及びメトリクス情報１１３を受け付けて、関連度順位情報１１５を生成する。着目機能情報２０３は、ユーザが着目する機能を格納する情報であり、例えば、リスト形式の情報である。
【００３１】
テストケース抽出部１０５は、テストケース−機能対応情報２０４及び関連度順位情報１１５を受け付けて、優先テストケース情報２０５を生成する。テストケース−機能対応情報２０４は、テストケース及び機能の対応関係を定義した情報である。テストケース−機能対応情報２０４のデータ構造の一例は図８を用いて説明する。優先テストケース情報２０５は、実行するテストケースを管理する情報である。優先テストケース情報２０５のデータ構造の一例は図９を用いて説明する。
【００３２】
テストケース選択部１０６は、ユーザからの入力に基づいて、優先テストケース情報２０５に追加するテストケース、及び、優先テストケース情報２０５から除外するテストケースを選択する。なお、テストケース選択部１０６の処理については、実施例４で説明する。
【００３３】
情報記憶部１０７は、各機能部が生成する各種情報を管理し、また、各機能部が一時的に使用する情報を管理する。なお、情報記憶部１０７は、補助記憶装置１３に記憶する情報を、ファイルシステム及びＤＢＭＳ（ＤａｔａＢａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）を用いて管理する。
【００３４】
変数−機能対応情報１１１は、変数及び機能の対応関係を管理する情報である。変数−機能対応情報１１１のデータ構造の一例は図３を用いて説明する。
【００３５】
プログラム関数−変数対応情報１１２は、プログラム関数とプログラム関数に含まれる変数との対応関係を管理する情報である。プログラム関数−変数対応情報１１２のデータ構造の一例は図４を用いて説明する。
【００３６】
メトリクス情報１１３は、プログラムの特徴を示し、また、プログラムを定量的に評価する指標を管理する情報である。本実施例では、プログラムの複雑度を示す指標がメトリクス情報１１３に格納される。メトリクス情報１１３のデータ構造の一例は図５を用いて説明する。
【００３７】
プログラム関数−変数相関情報１１４は、プログラム関数及び変数の相関関係を管理する情報である。プログラム関数−変数相関情報１１４のデータ構造の一例は図６を用いて説明する。
【００３８】
関連度順位情報１１５は、テストケースの選択指標である重みを管理する情報である。本実施例では、着目機能に関連する機能の関連度を選択指標として扱う。なお、一つの着目機能に対して一つの関連度順位情報１１５が生成される。関連度順位情報１１５のデータ構造の一例は図７を用いて説明する。
【００３９】
なお、本実施例では、物理的な計算機を用いてテストケース抽出装置１０を実現しているが、仮想技術又はクラウドサービス等によって提供される仮想計算機を用いて実現してもよい。
【００４０】
図３は、実施例１の変数−機能対応情報１１１のデータ構造の一例を示す図である。
【００４１】
変数−機能対応情報１１１は、機能３０１及び変数３０２から構成されるエントリを格納する。一つのエントリが一つの機能に対応する。
【００４２】
機能３０１は、機能の識別情報を格納するフィールドである。機能の識別情報は、例えば、機能の名称である。変数３０２は、機能３０１に対応する機能に関連する変数の識別情報を格納するフィールドである。変数の識別情報は例えば変数名である。変数３０２には、機能３０１に対応する機能に関連する全ての変数の識別情報が格納される。
【００４３】
図４は、実施例１のプログラム関数−変数対応情報１１２のデータ構造の一例を示す図である。
【００４４】
プログラム関数−変数対応情報１１２は、プログラム関数４０１及び変数４０２から構成されるエントリを格納する。一つのエントリが一つのプログラム関数に対応する。
【００４５】
プログラム関数４０１は、プログラム関数の識別情報を格納するフィールドである。プログラム関数の識別情報は、例えば、プログラム関数の名称である。変数４０２は、プログラム関数４０１に対応するプログラム関数に関連する変数の識別情報を格納するフィールドである。変数４０２には、プログラム関数４０１に対応するプログラム関数に関連する全ての変数の識別情報が格納される。
【００４６】
図５は、実施例１のメトリクス情報１１３のデータ構造の一例を示す図である。
【００４７】
メトリクス情報１１３は、プログラム関数５０１、入力数５０２、出力数５０３、及び行数５０４から構成されるエントリを格納する。一つのエントリが一つのプログラム関数に対応する。
【００４８】
プログラム関数５０１は、プログラム関数の識別情報を格納するフィールドである。入力数５０２は、関数の入力数を格納するフィールドである。出力数５０３は、関数の出力数を格納するフィールドである。行数５０４は、プログラム関数が含まれる行の数を格納するフィールドである。
【００４９】
なお、図５に示すメトリクス情報１１３は一例であって、使用するメトリクス情報をユーザが指定できるようにしてもよい。
【００５０】
図６は、実施例１のプログラム関数−変数相関情報１１４のデータ構造の一例を示す図である。
【００５１】
プログラム関数−変数相関情報１１４は、行列形式のデータである。図６では、行６０１はプログラム関数に対応し、列６０２は変数に対応する。セルには、プログラム関数内における変数の関連度（重要度）を示す値が格納される。値が大きい変数は、プログラム関数内において関連性が強い変数（重要な変数）であることを示す。
【００５２】
なお、プログラム関数−変数相関情報１１４をＴｆｖ、行をｘ、列をｙとした場合、Ｔｆｖ（ｘ，ｙ）はプログラム関数−変数相関情報１１４の（ｘ、ｙ）成分のセルの値を表すものとする。
【００５３】
図７は、実施例１の関連度順位情報１１５のデータ構造の一例を示す図である。
【００５４】
関連度順位情報１１５は、機能７０１及び重み７０２から構成されるエントリを格納する。一つのエントリが一つの機能に対応する。
【００５５】
機能７０１は、機能の識別情報を格納するフィールドである。重み７０２は、重みを格納するフィールドである。本実施例では、着目機能と機能との間の関連度が重み７０２に格納される。したがって、重み７０２の値が大きいほど、テストケースにおいて優先的に確認すべき機能であることを示す。なお、重み７０２には、重要度等が格納されてもよい。
【００５６】
図８は、実施例１のテストケース−機能対応情報２０４のデータ構造の一例を示す図である。
【００５７】
テストケース−機能対応情報２０４は、テストカテゴリ８０１、テスト項目８０２、及び機能８０３から構成されるエントリを格納する。一つのエントリが一つのテストケースに対応する。
【００５８】
テストカテゴリ８０１は、テストケースのカテゴリを格納するフィールドである。テストケースのカテゴリは、テストケースの管理を簡単にするために、所定の指針にしたがって分けられたグループである。図８では、機能Ａの動作確認というテストケースと、機能Ｂの動作確認というテストケースとが同一のカテゴリＸに分類されていることが分かる。
【００５９】
テスト項目８０２は、テストすべき項目を格納するフィールドである。例えば、機能Ａを有するソフトウェアの場合、機能Ａの正常動作確認という情報がテスト項目８０２に格納される。
【００６０】
機能８０３は、テストケースに関連する機能の識別情報を格納するフィールドである。例えば、機能Ａの動作確認を行うテストケースにおいて、機能Ａが機能Ｄと関連する場合、機能８０３には機能Ａ及び機能Ｄが格納される。
【００６１】
なお、テスト項目及び機能の対応付けは、設計書、仕様書等の開発資料、又はヒアリング等基づいて、人又は計算機が行う。
【００６２】
ソフトウェアの開発では、開発者等が開発工程においてテストケースを作成して、作成したテストケースを実行する。
【００６３】
図９は、実施例１の優先テストケース情報２０５のデータ構造の一例を示す図である。
【００６４】
優先テストケース情報２０５は、テストカテゴリ９０１、テスト項目９０２、機能９０３、及び選択９０４から構成されるエントリを含む。一つのエントリが一つのテストケースに対応する。
【００６５】
テストカテゴリ９０１、テスト項目９０２、及び機能９０３は、テストカテゴリ８０１、テスト項目８０２、及び機能８０３と同一のフィールドである。選択９０４は、実行されるテストケースであるか否かを示す情報を格納するフィールドである。本実施例では、選択９０４には「Ｙｅｓ」及び「Ｎｏ」のいずれかが格納される。「Ｙｅｓ」は実行するテストケースとして選択されたことを示し、「Ｎｏ」は実行するテストケースとして選択されたなかったことを示す。
【００６６】
なお、実行するテストケースとして選択されたテストケースのみが登録された優先テストケース情報２０５でもよい。この場合、エントリには選択９０４が含まれていなくてもよい。
【００６７】
図１０は、実施例１のテストケース抽出装置１０が実行する処理の一例を説明するフローチャートである。
【００６８】
図１０に示す処理は、変数−機能対応情報１１１及びプログラム関数−変数相関情報１１４を生成するための処理である。図１０に示す処理は、例えば、装置の起動した場合、機能一覧２０１及びソースコード２０２が入力された場合、又はユーザから指示を受け付けた場合に実行される。なお、周期的に実行されてもよい。
【００６９】
テストケース抽出装置１０は、機能一覧２０１及びソースコード２０２を取得する（ステップＳ１０１）。機能一覧２０１及びソースコード２０２は、補助記憶装置１３に格納されてもよいし、外部の記憶装置に格納されてもよい。また、ユーザが機能一覧２０１及びソースコード２０２を入力してもよい。
【００７０】
次に、テストケース抽出装置１０の対応関係抽出部１０１は、機能一覧２０１及びソースコード２０２を用いて、変数−機能対応情報１１１を生成する（ステップＳ１０２）。
【００７１】
具体的には、対応関係抽出部１０１は、機能一覧２０１から機能を選択し、ソースコードに含まれる変数名又は変数の近傍のコメントに機能に一致する用語が含まれるか否かを判定する。前述の条件を満たす場合、対応関係抽出部１０１は、変数−機能対応情報１１１にエントリを追加し、追加されたエントリの機能３０１及び変数３０２に機能及び変数の識別情報を設定する。なお、選択された機能のエントリが既に登録されている場合、対応関係抽出部１０１は、当該エントリの変数３０２に変数の識別情報を追加する。
【００７２】
なお、前述した生成方法は、一例であってこれに限定されない。一つの機能に対して、一つ以上の変数を対応付けたエントリが登録された変数−機能対応情報１１１を生成できる方法ならばどのような生成方法でもよい。
【００７３】
次に、テストケース抽出装置１０のプログラム分析部１０２は、ソースコード２０２を分析し（ステップＳ１０３）、分析結果に基づいてプログラム関数−変数対応情報１１２及びメトリクス情報１１３を生成する（ステップＳ１０４）。ソースコード２０２の分析方法は、公知のものであるため詳細な説明は省略する。プログラム関数−変数対応情報１１２及びメトリクス情報１１３は、例えば、以下のようにして生成される。
【００７４】
プログラム分析部１０２は、分析結果に基づいて、全てのプログラム関数を抽出する。プログラム分析部１０２は、プログラム関数を一つ選択し、ソースコード２０２内で選択されたプログラム関数に出現する変数を特定する。プログラム分析部１０２は、選択されたプログラム関数及び特定された変数を対応付けたエントリをプログラム関数−変数対応情報１１２に登録する。全てのプログラム関数に同様の処理を実行することによって図４に示すようなプログラム関数−変数対応情報１１２が生成される。
【００７５】
また、プログラム分析部１０２は、分析結果に基づいて、メトリクス情報１１３を生成する。例えば、プログラム分析部１０２は、ソースコード２０２に含まれるプログラム関数の引数の数を入力数５０２に設定する。
【００７６】
次に、テストケース抽出装置１０の重み付け処理部１０３は、プログラム関数−変数対応情報１１２を用いてプログラム関数−変数相関情報１１４を生成する（ステップＳ１０５）。その後、テストケース抽出装置１０は、処理を終了する。
【００７７】
プログラム関数における変数の重要度（重み）を算出する方法は様々な方法が考えられる。本実施例では、重み付け処理部１０３は、文書中の単語に関する重み付け手法であるｔｆ−ｉｄｆを用いてプログラム関数−変数相関情報１１４を生成する。なお、他の方法を用いてプログラム関数−変数相関情報１１４が生成されてもよい。
【００７８】
ｔｆ−ｉｄｆは、文書集合Ｘと単語集合Ｙが与えられたときに、文書集合の要素である文書ｘと単語集合の要素である単語ｙによって決まる値である。具体的には、文書ｘ中における単語ｙの出現頻度を表すｔｆ、及び単語ｙがどれだけ多くの文書ｘに出現したかを表すｉｄｆに対し、ｔｆとｉｄｆとの積が単語ｙの重みとして算出される。
【００７９】
重み付け処理部１０３は、ソースコード２０２に含まれるプログラム関数が記述されている部分（文字列）を文書として扱い、また、変数を単語として扱って、ｔｆ−ｉｄｆを用いて、変数の重みづけを算出する。これによって、図６に示すようなプログラム関数−変数相関情報１１４が生成される。
【００８０】
なお、対応関係抽出部１０１が実行する処理及びプログラム分析部１０２が実行する処理は、並列で実行されてもよい。
【００８１】
なお、変数−機能対応情報１１１、プログラム関数−変数対応情報１１２、メトリクス情報１１３、及びプログラム関数−変数相関情報１１４は、情報記憶部１０７によって補助記憶装置１３に格納される。
【００８２】
図１１は、実施例１のテストケース抽出装置１０が実行する処理の一例を説明するフローチャートである。
【００８３】
図１１に示す処理は、優先テストケース情報２０５を生成するための処理である。図１１に示す処理は、例えば、着目機能情報２０３及びテストケース−機能対応情報２０４が入力された場合に実行される。なお、着目機能情報２０３には、ユーザが着目する着目機能が一つ以上含まれる。
【００８４】
テストケース抽出装置１０の関連度分析部１０４は、変数−機能対応情報１１１、メトリクス情報１１３、プログラム関数−変数相関情報１１４、及び着目機能情報２０３を用いて、関連度順位情報１１５を生成する（ステップＳ２０１）。関連度順位情報１１５の生成方法の詳細は、図１２Ａ及び図１２Ｂを用いて説明する。
【００８５】
次に、テストケース抽出装置１０のテストケース抽出部１０５は、関連度順位情報１１５及びテストケース−機能対応情報２０４を用いて、優先テストケース情報２０５を生成する（ステップＳ２０２）。その後、テストケース抽出装置１０は、処理を終了する。優先テストケース情報２０５の生成方法の詳細は、図１５を用いて説明する。
【００８６】
図１２Ａ及び図１２Ｂは、実施例１の関連度分析部１０４が実行する関連度順位情報１１５の生成処理の一例を説明するフローチャートである。図１３は、実施例１の関連度分析部１０４が一時的に生成するワークテーブル１３００のデータ構造の一例を示す図である。図１４は、実施例１の関連度分析部１０４が一時的に生成する着目機能−変数相関情報１４００のデータ構造の一例を示す図である。
【００８７】
関連度分析部１０４は、着目機能情報２０３に格納される各着目機能に対して以下の処理を実行する。
【００８８】
関連度分析部１０４は、着目機能ｋに関連する変数の集合Ｖｋを生成する（ステップＳ３０１）。
【００８９】
具体的には、関連度分析部１０４は、着目機能情報２０３から着目機能ｋを選択する。関連度分析部１０４は、変数−機能対応情報１１１を参照し、機能３０１が着目機能ｋに一致するエントリを検索する。関連度分析部１０４は、検索されたエントリの変数３０２に設定された変数を特定し、特定された変数を要素とする集合Ｖｋを生成する。
【００９０】
次に、関連度分析部１０４は、ワークテーブル１３００を生成する（ステップＳ３０２）。
【００９１】
ここで、ワークテーブル１３００は、行列形式のデータである。図１３では、行１３０１は集合Ｖｋに含まれる変数に対応し、列１３０２はプログラム関数−変数相関情報１１４の列６０２に対応する。この時点では、ワークテーブル１３００の全てのセルの値は０に設定される。
【００９２】
なお、ワークテーブル１３００をＴｒ、行をｘ、列をｙとした場合、Ｔｒ（ｘ，ｙ）はワークテーブル１３００の（ｘ、ｙ）成分のセルの値を表すものとする。
【００９３】
次に、関連度分析部１０４は、集合Ｖｋから一つの変数Ｖａを選択する（ステップＳ３０３）。
【００９４】
次に、関連度分析部１０４は、プログラム関数−変数相関情報１１４の行６０１に設定されたプログラム関数を要素とする集合Ｆを生成する（ステップＳ３０４）。
【００９５】
次に、関連度分析部１０４は、集合Ｆから一つのプログラム関数Ｆｗを選択する（ステップＳ３０５）。
【００９６】
次に、関連度分析部１０４は、プログラム関数−変数相関情報１１４から行を選択し、プログラム関数−変数相関情報１１４の列に対応する変数を要素とする変数の集合Ｖを生成する（ステップＳ３０６）。このとき、選択された行のプログラム関数をＦａとする。
【００９７】
次に、関連度分析部１０４は、集合Ｖから一つの変数Ｖｗを選択する（ステップＳ３０７）。
【００９８】
次に、関連度分析部１０４は、プログラム関数−変数相関情報１１４のセルの値であるＴｆｖ（Ｆｗ，Ｖａ）及びＴｆｖ（Ｆｗ，Ｖｗ）の積を算出し、ワークテーブル１３００のＴｒ（Ｖａ，Ｖｗ）に算出された値を加算する（ステップＳ３０８）。
【００９９】
このとき、関連度分析部１０４は、メトリクス情報１１３を参照し、プログラム関数５０１がプログラム関数Ｆａに一致するエントリの入力数５０２、出力数５０３、及び行数５０４の少なくともいずれかを用いて、Ｔｆｖ（Ｆｗ，Ｖａ）及びＴｆｖ（Ｆｗ，Ｖｗ）の積を修正してもよい。例えば、当該積に入力数５０２を掛け合わせる方法が考えられる。
【０１００】
Ｔｆｖ（Ｆｗ，Ｖａ）は、変数Ｖａとプログラム関数Ｆａとの間の関連性を示す値である。また、Ｔｆｖ（Ｆｗ，Ｖｗ）は、プログラム関数Ｆａと、プログラム関数Ｆａと関連性のある変数Ｖｗとの間の関連性を表す値である。したがって、Ｔｆｖ（Ｆｗ，Ｖａ）及びＴｆｖ（Ｆｗ，Ｖｗ）の積は、プログラム関数Ｆａを介して、変数Ｖａと変数Ｖｗとの間の関連性を示す値に対応する。
【０１０１】
次に、関連度分析部１０４は、集合Ｖに含まれる全ての変数について処理が完了したか否かを判定する（ステップＳ３０９）。
【０１０２】
集合Ｖに含まれる全ての変数について処理が完了していないと判定された場合、関連度分析部１０４は、ステップＳ３０７に戻り、同様の処理を実行する。
【０１０３】
集合Ｖに含まれる全ての変数について処理が完了したと判定された場合、関連度分析部１０４は、集合Ｆに含まれる全てのプログラム関数について処理が完了したか否かを判定する（ステップＳ３１０）。
【０１０４】
集合Ｆに含まれる全てのプログラム関数について処理が完了していないと判定された場合、関連度分析部１０４は、ステップＳ３０５に戻り、同様の処理を実行する。
【０１０５】
集合Ｆに含まれる全てのプログラム関数について処理が完了したと判定された場合、関連度分析部１０４は、集合Ｖｋに含まれる全てのプログラム関数について処理が完了したか否かを判定する（ステップＳ３１１）。
【０１０６】
集合Ｖｋに含まれる全てのプログラム関数について処理が完了していないと判定された場合、関連度分析部１０４は、ステップＳ３０３に戻り、同様の処理を実行する。
【０１０７】
集合Ｖｋに含まれる全てのプログラム関数について処理が完了したと判定された場合、関連度分析部１０４は、着目機能ｋと関連する変数との間の相関関係を管理する着目機能−変数相関情報１４００を生成する（ステップＳ３１２）。
【０１０８】
ここで、着目機能−変数相関情報１４００は、１行ｎ列の行列形式のデータである。図１４では、行１４０１は着目機能に対応し、列１４０２は集合Ｖｋに含まれる変数に対応する。関連度分析部１０４は、ワークテーブル１３００の各列の成分の合計値を算出し、着目機能−変数相関情報１４００の各セルに算出された合計値を設定する。例えば、ワークテーブルの列ｖａｌ２の値の合計値が、着目機能−変数相関情報１４００の（ｖａｌ１，ｖａｌ２）成分のセルに設定される。
【０１０９】
なお、着目機能−変数相関情報１４００をＴｋ、列数をｙとした場合、Ｔｋ（ｙ）は着目機能−変数相関情報１４００の（１，ｙ）成分のセルの値を表すものとする。
【０１１０】
ステップＳ３１３以降の処理では、着目機能に基づいて特定された変数と関連性がある変数を用いて、着目機能と他の機能との間の関連度が算出される。
【０１１１】
まず、関連度分析部１０４は、変数−機能対応情報１１１の機能３０１に設定された機能を要素とする集合Ｋｗを生成する（ステップＳ３１３）。
【０１１２】
次に、関連度分析部１０４は、関連度順位情報１１５にエントリを追加する（ステップＳ３１４）。
【０１１３】
具体的には、関連度分析部１０４は、関連度順位情報１１５に、集合Ｋｗに含まれる要素の数だけエントリを追加し、追加されたエントリの機能７０１に機能の識別情報を設定する。また、関連度分析部１０４は、全てのエントリの重み７０２を０に設定する。
【０１１４】
なお、関連度順位情報１１５をＴｗとし、エントリの順番をｘとして場合、Ｔｗ（ｘ）は、ｘ番目のエントリの重み７０２を表すものとする。
【０１１５】
次に、関連度分析部１０４は、集合Ｋｗから一つの機能Ｋａを選択する（ステップＳ３１５）。
【０１１６】
次に、関連度分析部１０４は、変数−機能対応情報１１１を参照して、機能Ｋａに関連する変数を特定し、特定された変数を要素とする集合Ｖｋａを生成する（ステップＳ３１６）。
【０１１７】
具体的には、関連度分析部１０４は、機能３０１が機能Ｋａに一致するエントリを検索し、検索されたエントリの変数３０２に設定された変数を取得し、当該変数を要素とする集合Ｖｋａを生成する。
【０１１８】
次に、関連度分析部１０４は、集合Ｖｋａから一つの変数Ｖｂを選択する（ステップＳ３１７）。
【０１１９】
次に、関連度分析部１０４は、着目機能−変数相関情報１４００から変数Ｖｂに対応する成分の値Ｔｋ（Ｖｂ）を取得し、関連度順位情報１１５の機能７０１が機能Ｋａに一致するエントリの重み７０２に加算する（ステップＳ３１８）。すなわち、Ｔｗ（Ｋａ）にＴｋ（Ｖｂ）が加算される。
【０１２０】
次に、関連度分析部１０４は、集合Ｖｋａに含まれる全ての変数について処理が完了したか否かを判定する（ステップＳ３１９）。
【０１２１】
集合Ｖｋａに含まれる全ての変数について処理が完了していないと判定された場合、関連度分析部１０４は、ステップＳ３１７に戻り、同様の処理を実行する。
【０１２２】
集合Ｖｋａに含まれる全ての変数について処理が完了したと判定された場合、関連度分析部１０４は、集合Ｋｗに含まれる全ての機能について処理が完了したか否かを判定する（ステップＳ３２０）。
【０１２３】
集合Ｋｗに含まれる全ての機能について処理が完了していないと判定された場合、関連度分析部１０４は、ステップＳ３１５に戻り、同様の処理を実行する。
【０１２４】
集合Ｋｗに含まれる全ての機能について処理が完了したと判定された場合、関連度分析部１０４は、関連度順位情報１１５のエントリを重み７０２が大きい順に並び替え（ステップＳ３２１）、最終的な関連度順位情報１１５として出力する。
【０１２５】
なお、ステップＳ３０８においてメトリクス情報１１３を用いていたが、ステップＳ３２１において重み７０２の値を修正するためにメトリクス情報１１３が用いられてもよい。
【０１２６】
図１５は、実施例１のテストケース抽出部１０５が実行する優先テストケース情報２０５の生成処理を説明するフローチャートである。
【０１２７】
テストケース抽出部１０５は、優先テストケース情報２０５に、テストケース−機能対応情報２０４のエントリ数だけエントリを追加する（ステップＳ４０１）。このとき、テストケース抽出部１０５は、各エントリのテストカテゴリ９０１、テスト項目９０２、及び機能９０３にテストケース−機能対応情報２０４と同じ値を設定する。
【０１２８】
次に、テストケース抽出部１０５は、関連度順位情報１１５を参照し、重み７０２が閾値より大きい機能を特定する（ステップＳ４０２）。
【０１２９】
なお、テストケース抽出部１０５は、メトリクス情報１１３を用いて重み７０２の値を修正した後に、重み７０２と閾値との比較処理を実行してもよい。
【０１３０】
次に、テストケース抽出部１０５は、特定された機能の中から機能を一つ選択する（ステップＳ４０３）。
【０１３１】
次に、テストケース抽出部１０５は、優先テストケース情報２０５からエントリ、すなわち、テストケースを選択する（ステップＳ４０４）。
【０１３２】
次に、テストケース抽出部１０５は、選択されたエントリの機能９０３に選択された機能が含まれるか否かを判定する（ステップＳ４０５）。
【０１３３】
選択されたエントリの機能９０３に選択された機能が含まれると判定された場合、テストケース抽出部１０５は、選択されたエントリの選択９０４に「Ｙｅｓ」を設定する（ステップＳ４０６）。その後、テストケース抽出部１０５は、ステップＳ４０８に進む。
【０１３４】
選択されたエントリの機能９０３に選択された機能が含まれないと判定された場合、テストケース抽出部１０５は、選択されたエントリの選択９０４に「Ｎｏ」を設定する（ステップＳ４０７）。その後、テストケース抽出部１０５は、ステップＳ４０８に進む。
【０１３５】
次に、テストケース抽出部１０５は、優先テストケース情報２０５に登録された全てのテストケースについて処理が完了したか否かを判定する（ステップＳ４０８）。
【０１３６】
優先テストケース情報２０５に登録された全てのテストケースについて処理が完了していないと判定された場合、テストケース抽出部１０５は、ステップＳ４０４に戻り、同様の処理を実行する。
【０１３７】
優先テストケース情報２０５に登録された全てのテストケースについて処理が完了したと判定された場合、テストケース抽出部１０５は、特定された全ての機能について処理が完了したか否かを判定する（ステップＳ４０９）。
【０１３８】
特定された全ての機能について処理が完了していないと判定された場合、テストケース抽出部１０５は、ステップＳ４０３に戻り、同様の処理を実行する。
【０１３９】
特定された全ての機能について処理が完了したと判定された場合、テストケース抽出部１０５は、優先テストケース情報２０５を出力し（ステップＳ４１０）、処理を終了する。
【０１４０】
以上示したように、実施例１によれば、テストケース抽出装置１０は、ソースコード２０２の分析結果に基づいて、テストケースの重み付けを行うことによって、ユーザが着目する機能に関連するテストケースを選択できる。これによって、実行するテストケースが削減されるため、テストケースの実行に必要なリソース量を削減できる。
【０１４１】
具体的には、テストケース抽出装置１０は、プログラム関数−変数相関情報１１４を用いて、着目機能に関連する変数と、任意の変数との関連度を算出して、関連性のある変数を特定する。また、テストケース抽出装置１０は、特定された変数と関連性がある機能の関連度を、当該変数の関連度を用いて算出する。このように、テストケース抽出装置１０は、プログラムの内容の解析結果に基づいて、着目機能と他の機能との間の関連度を算出するため、高い精度で最適なテストケースを選択できる。
【実施例２】
【０１４２】
実施例２では、テストケース抽出部１０５が実行する処理が一部異なる。以下、実施例１との差異を中心に実施例１について説明する。
【０１４３】
実施例２のテストケース抽出装置１０のハードウェア構成及びソフトウェア構成は、実施例１のテストケース抽出装置１０のものと同一である。また、実施例２のテストケース抽出装置１０が管理する情報のデータ構造は、実施例１のデータ構造と同一である。また、実施例２のテストケース抽出装置１０に入力される情報のデータ構造は、実施例１のデータ構造と同一である。
【０１４４】
図１６は、実施例２のテストケース抽出装置１０のデータの入出力を説明する図である。
【０１４５】
図１６に示すように、テストケース抽出部１０５には、関連度順位情報１１５及びテストケース−機能対応情報２０４に加えて、着目機能情報２０３が入力される。
【０１４６】
テストケース抽出部１０５は、図１５の処理が完了した後、着目機能情報２０３を参照し、機能９０３に着目機能が含まれているテストケースの選択９０４に「Ｙｅｓ」を設定し、機能９０３に着目機能が含まれていないテストケースの選択９０４に「Ｎｏ」を設定する。
【０１４７】
実施例２によれば、着目機能を含むテストケースだけを選択できるため、着目機能と関係のないテストケースを優先テストケース情報２０５から削除できる。
【実施例３】
【０１４８】
実施例３では、テストケース抽出部１０５が実行する処理が異なる。以下、実施例１との差異を中心に実施例３について説明する。
【０１４９】
実施例３のテストケース抽出装置１０のハードウェア構成及びソフトウェア構成は、実施例１のテストケース抽出装置１０のものと同一である。また、実施例３のテストケース抽出装置１０が管理する情報のデータ構造は、実施例１のデータ構造と同一である。
【０１５０】
実施例３では、テストケース抽出装置１０に入力される情報のデータ構造が一部異なる。具体的には、実施例３では、テストケース−機能対応情報２０４が異なる。他の情報については、実施例１と同一である。
【０１５１】
図１７は、実施例３のテストケース抽出装置１０のデータの入出力を説明する図である。
【０１５２】
図１７に示すように、テストケース抽出部１０５には、関連度順位情報１１５及びテストケース−機能対応情報２０４に加えて、着目機能情報２０３及び制約条件１７００が入力される。
【０１５３】
制約条件１７００は、開発リソース又は開発コスト等のテストケースの実行時の制約に関する情報である。例えば、開発コストの最大値が設定された制約条件１７００等が考えられる。なお、制約条件１７００には、規模等のコスト以外の評価値を設定してもよい。
【０１５４】
図１８は、実施例３のテストケース−機能対応情報２０４のデータ構造の一例を示す図である。
【０１５５】
実施例３のテストケース−機能対応情報２０４に格納されるエントリは、コスト１８０１を含む。コスト１８０１は、テストケースの実行に必要なコストを格納するフィールドである。コストの値は、予め、開発資料、プログラム、過去の経験などの情報に基づいて、人又は計算機が設定する。
【０１５６】
図１９は、実施例３のテストケース抽出部１０５が実行する優先テストケース情報２０５の生成処理を説明するフローチャートである。
【０１５７】
テストケース抽出部１０５は、関連度順位情報１１５に登録された全ての機能について処理が完了したか否かを判定する（ステップＳ５０１）。
【０１５８】
関連度順位情報１１５に登録された全ての機能について処理が完了したと判定された場合、テストケース抽出部１０５は、ステップＳ５０６に進む。
【０１５９】
関連度順位情報１１５に登録された全ての機能について処理が完了していないと判定された場合、テストケース抽出部１０５は、関連度順位情報１１５を参照し、選択されていない機能の中から重み７０２が最も大きい機能を選択する（ステップＳ５０２）。
【０１６０】
次に、テストケース抽出部１０５は、テストケース−機能対応情報２０４を参照し、機能８０３に選択された機能を含むテストケースを、候補テストケースとして特定する（ステップＳ５０３）。
【０１６１】
次に、テストケース抽出部１０５は、制約条件を満たすか否かを判定する（ステップＳ５０４）。具体的には、以下のような処理が実行される。
【０１６２】
テストケース抽出部１０５は、優先テストケース情報２０５に登録されたテストケースのコスト１８０１の合計値に、候補テストケースのコスト１８０１の合計値を加算し、コスト合計値を算出する。
【０１６３】
テストケース抽出部１０５は、コスト合計値が制約条件１７００に設定された値以下であるか否かを判定する。コスト合計値が制約条件１７００に設定された値以下である場合、テストケース抽出部１０５は、制約条件を満たすと判定する。以上がステップＳ５０４の処理の説明である。
【０１６４】
制約条件を満たさないと判定された場合、テストケース抽出部１０５は、ステップＳ５０６に進む。
【０１６５】
制約条件を満たすと判定された場合、テストケース抽出部１０５は、優先テストケース情報２０５に候補テストケースを登録する（ステップＳ５０５）。
【０１６６】
具体的には、テストケース抽出部１０５は、優先テストケース情報２０５に候補テストケースの数だけエントリを追加する。テストケース抽出部１０５は、各エントリのテストカテゴリ９０１、テスト項目９０２、及び機能９０３にテストケース−機能対応情報２０４と同じ値を設定する。また、テストケース抽出部１０５は、追加されたエントリの選択９０４に「Ｙｅｓ」を設定する。
【０１６７】
ステップＳ５０６では、テストケース抽出部１０５は、優先テストケース情報２０５を出力し（ステップＳ５０６）、処理を終了する。
【０１６８】
実施例３によれば、制約条件に基づいて、開発リソースを考慮したテストケースの選択が可能となる。
【実施例４】
【０１６９】
実施例４では、ユーザが出力された優先テストケース情報２０５を修正する点が異なる。以下、実施例１との差異を中心に実施例４について説明する。
【０１７０】
実施例４のテストケース抽出装置１０のハードウェア構成及びソフトウェア構成は、実施例１のテストケース抽出装置１０のものと同一である。また、実施例４のテストケース抽出装置１０が管理する情報のデータ構造は、実施例１のデータ構造と同一である。また、実施例４のテストケース抽出装置１０に入力される情報のデータ構造は、実施例１のデータ構造と同一である。
【０１７１】
図２０は、実施例４のテストケース抽出装置１０のデータの入出力を説明する図である。図２１は、実施例４の優先テストケース情報２０５に基づいて表示される画面に一例を示す図である。
【０１７２】
図２０に示すように、テストケース選択部１０６は、ユーザからの入力を受け付けて、優先テストケース情報２０５を修正する。ユーザは、出力された優先テストケース情報２０５に基づいて表示される画面を参照し、画面に対する操作を介して優先テストケース情報２０５を修正する。
【０１７３】
ここで、図２１を用いて画面について説明する。画面には円グラフが表示される。円グラフは三つの階層に分けられており、中心側の階層はカテゴリを表示する階層であり、中間の階層はサブカテゴリを表示する階層であり、外側の階層はテストケースを表示する階層である。円グラフの面積は、テストケースのコスト、規模、及びその他の評価値等を示す。すなわち、コスト等の大きさに応じてテストケースの表示の大きさ等の表示が異なる。
【０１７４】
図２１に示すように、優先テストケース情報２０５の選択９０４が「Ｙｅｓ」であるテストケースが強調表示される。例えば、テストケースＡ及びテストケースＣが斜線で表示している。なお、強調表示の方法には限定されない。
【０１７５】
ユーザは、図２１に示すような画面を参照し、実行するテストケース及び実行しないテストケースを選択する。
【０１７６】
テストケース選択部１０６は、実行するテストケースを追加する操作を受け付けた場合、優先テストケース情報２０５の該当するエントリの選択９０４に「Ｙｅｓ」を設定する。なお、実施例３の優先テストケース情報２０５の場合、テストケース選択部１０６は、実行するテストケースに対応するエントリを優先テストケース情報２０５に追加する。
【０１７７】
また、テストケース選択部１０６は、実行予定のテストケースを除外する操作を受け付けた場合、優先テストケース情報２０５の該当するエントリの選択９０４に「Ｎｏ」を設定する。なお、実施例３の優先テストケース情報２０５の場合、テストケース選択部１０６は、実行しないテストケースに対応するエントリを優先テストケース情報２０５から削除する。
【０１７８】
実施例４によれば、ユーザが意図に沿って実行するテストケース及び実行しないテストケースを選択できる。
【実施例５】
【０１７９】
実施例５は、実施例３及び実施例４を組み合わせた実施例である。実施例５のテストケース抽出装置１０は、実行予定のテストケースを除外する操作を受け付けた場合、制約条件１７００を満たすテストケースを、選択可能なテストケースの候補としてユーザに提示する。
【０１８０】
図２２は、実施例５のテストケース抽出装置１０のデータの入出力を説明する図である。
【０１８１】
図２２に示すように、制約条件１７００がテストケース抽出部１０５及びテストケース選択部１０６に入力される。
【０１８２】
図２３は、実施例５のテストケース選択部１０６が実行する処理の一例を説明するフローチャートである。
【０１８３】
テストケース選択部１０６は、ユーザ操作を受け付けて、優先テストケース情報２０５を修正する（ステップＳ６０１）。修正方法は、実施例４で説明したため説明を省略する。ここでは、実行予定のテストケースを除外する操作を受け付けたものとする。この場合、テストケース選択部１０６は、ユーザが意図的に除外したテストケースの識別情報を一時的に保持する。
【０１８４】
次に、テストケース選択部１０６は、実行しないテストケースのコストの合計値Ｃｎを算出する（ステップＳ６０２）。
【０１８５】
具体的には、テストケース選択部１０６は、優先テストケース情報２０５に登録されていないテストケースを特定する。テストケース選択部１０６は、テストケース−機能対応情報２０４を参照し、特定されたテストケースのコスト１８０１を取得する。テストケース選択部１０６は、特定されたテストケースのコスト１８０１の合計値を算出する。
【０１８６】
次に、テストケース選択部１０６は、実行するテストケースのコストの合計値Ｃｐを算出する（ステップＳ６０３）。
【０１８７】
具体的には、テストケース選択部１０６は、テストケース−機能対応情報２０４を参照し、優先テストケース情報２０５に登録されたテストケースのコスト１８０１を取得する。テストケース選択部１０６は、優先テストケース情報２０５に登録されたテストケースのコスト１８０１の合計値を算出する。
【０１８８】
次に、テストケース選択部１０６は、式（１）を満たすテストケースを、選択可能なテストケースとして特定する（ステップＳ６０４）。ここで、Ｃｓは制約条件１７００に設定された開発コストの最大値を表す。
【０１８９】
【数１】
2018180711.tif 000003
【０１９０】
なお、テストケース選択部１０６は、ユーザが意図的に除外したテストケースを判定対象から除外する。すなわち、実行予定のテストケースから除外されたテストケースのコストの合計値だけ制約条件１７００に対するコストの余裕が生じるため、テストケース選択部１０６は、当該余裕の範囲内で選択可能なテストケースを選択する。
【０１９１】
図２４は、実施例５の優先テストケース情報２０５に基づいて表示される画面に一例を示す図である。
【０１９２】
図２１に示す画面において、ユーザが実行しないテストケースとしてテストケースＣを選択したものとする。このとき、テストケースＣの表示が変化する。図２４では、斜線から黒に表示が変化する。このとき、テストケースＣのコスト分の余裕が生じる。
【０１９３】
テストケース選択部１０６は、図２３で説明した処理を実行した結果、選択可能なテストケースとして、テストケースＤ及びテストケースＥを特定する。図２４では、テストケースＤ及びテストケースＥが縦縞で表示される。なお、強調表示の方法には限定されない。
【０１９４】
実施例５によれば、ユーザが実行しないテストケースを選択した場合に、選択可能な他のテストケースをユーザに提示することができる。これによって、ユーザは、効率的かつ容易に、制約条件１７００を満たすテストケースを選択できる。
【０１９５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０１９６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０１９７】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０１９８】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０１９９】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【０２００】
また、テストケース抽出装置１０の各種機能部及び各種情報の配置形態は一例に過ぎない。各種機能部及び各種情報の配置形態は、テストケース抽出装置１０が備えるハードウェア及びソフトウェアの性能、処理効率、及び通信効率等の観点から最適な配置形態に変更できる。
【符号の説明】
【０２０１】
１０  テストケース抽出装置
１１  プロセッサ
１２  主記憶装置
１３  補助記憶装置
１４  通信装置
１５  入力装置
１６  出力装置
１０１  対応関係抽出部
１０２  プログラム分析部
１０３  重み付け処理部
１０４  関連度分析部
１０５  テストケース抽出部
１０６  テストケース選択部
１０７  情報記憶部
１１１  変数−機能対応情報
１１２  プログラム関数−変数対応情報
１１３  メトリクス情報
１１４  プログラム関数−変数相関情報
１１５  関連度順位情報
２０１  機能一覧
２０２  ソースコード
２０３  着目機能情報
２０４  テストケース−機能対応情報
２０５  優先テストケース情報
１３００  ワークテーブル
１４００  着目機能−変数相関情報
１７００  制約条件
【図１】
2018180711.tif 000004
【図２】
2018180711.tif 000005
【図３】
2018180711.tif 000006
【図４】
2018180711.tif 000007
【図５】
2018180711.tif 000008
【図６】
2018180711.tif 000009
【図７】
2018180711.tif 000010
【図８】
2018180711.tif 000011
【図９】
2018180711.tif 000012
【図１０】
2018180711.tif 000013
【図１１】
2018180711.tif 000014
【図１２Ａ】
2018180711.tif 000015
【図１２Ｂ】
2018180711.tif 000016
【図１３】
2018180711.tif 000017
【図１４】
2018180711.tif 000018
【図１５】
2018180711.tif 000019
【図１６】
2018180711.tif 000020
【図１７】
2018180711.tif 000021
【図１８】
2018180711.tif 000022
【図１９】
2018180711.tif 000023
【図２０】
2018180711.tif 000024
【図２１】
2018180711.tif 000025
【図２２】
2018180711.tif 000026
【図２３】
2018180711.tif 000027
【図２４】
2018180711.tif 000028