(57)【要約】【課題】プログラムの部分毎の重要度を提示してプログラム開発を支援する。【解決手段】プログラムの部分毎に、当該部分がプログラムの他の部分に与える複雑度を示すメトリクス情報が記憶されたメトリクス情報記憶部３２と、プログラムで発生した不良毎に、不良対策のために修正したプログラムの部分および当該不良がプログラム利用者に与えた影響度を示す不良情報が記憶された不良情報記憶部３４と、プログラムの部分毎に、当該部分のメトリクス情報が示す複雑度、および、不良対策のために当該部分を修正する各不良の不良情報が示す影響度を用いて、当該部分に割り付けるべきプログラム開発工数の大きさを示す重要度を決定する不良修正困難度解析部２３および重要度決定部２４と、決定されたプログラムの各部分の重要度を出力する入出力部１と、を有する。【選択図】図１
2006113934.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの開発を支援するプログラム開発支援装置であって、
前記プログラムの部分毎に、当該部分が前記プログラムの他の部分に与える複雑度を示すメトリクス情報が記憶されたメトリクス情報記憶手段と、
前記プログラムで発生した不良毎に、不良対策のために修正した前記プログラムの部分および当該不良がプログラム利用者に与えた影響度を示す不良情報が記憶された不良情報記憶手段と、
前記プログラムの部分毎に、当該部分のメトリクス情報が示す複雑度、および、不良対策のために当該部分を修正する各不良の不良情報が示す影響度を用いて、当該部分に割り付けるべきプログラム開発工数の大きさを示す重要度を決定する演算手段と、
前記演算手段で決定した前記プログラムの各部分の重要度を出力する重要度出力手段と、を有すること
を特徴とするプログラム開発支援装置。
【請求項２】
請求項１に記載のプログラム開発支援装置であって、
前記演算手段は、
前記不良情報記憶手段に前記不良情報が記憶されている不良毎に、不良対策のために修正した前記プログラムの部分各々の前記メトリクス情報が示す複雑度に応じた不良修正困難度を算出する不良修正困難度演算手段と、
前記メトリクス情報記憶手段に前記メトリクス情報が記憶されている前記プログラムの部分毎に、当該部分の前記メトリクス情報が示す複雑度と、不良対策のために当該部分を修正した不良各々の不良修正困難度および前記不良情報が示す影響度とに基づいて、当該部分の重要度を決定する重要度決定手段と、を有すること
を特徴とするプログラム開発支援装置。
【請求項３】
請求項２に記載のプログラム開発支援装置であって、
前記不良修正困難度演算手段は、
不良対策のために修正した前記プログラムの部分各々について、当該部分が関数であるか、それともテーブルであるかに応じて、前記メトリクス情報が示す複雑度の重み付けを変えて不良修正困難度を算出すること
を特徴とするプログラム開発支援装置。
【請求項４】
請求項１乃至３のいずれか一項に記載のプログラム開発支援装置であって、
ソースプログラムを入力するソースプログラム入力手段と、
前記ソースプログラム入力手段に入力されたソースプログラムを記憶するソースプログラム記憶手段と、
前記ソースプログラム記憶手段に記憶されたソースプログラムの部分毎に、当該部分が参照する他のプログラムの部分、および、当該部分を参照する他のプログラムの部分を検索し、前記他のプログラムの部分の数に応じた当該部分の複雑度を決定して、当該部分のメトリクス情報を前記メトリクス情報記憶手段に記憶するソース解析手段と、をさらに有すること
を特徴とするプログラム開発支援装置。
【請求項５】
請求項１乃至４のいずれか一項に記載のプログラム開発支援装置であって、
不良情報を含む不良報告ドキュメントデータを入力するドキュメント入力手段と、
前記ドキュメント入力手段に入力された不良報告ドキュメントデータを記憶する不良報告ドキュメントデータ記憶手段と、
前記不良報告ドキュメントデータ記憶手段に不良報告ドキュメントデータが記憶された不良毎に、当該不良の不良報告ドキュメントデータから不良情報を抽出し、当該不良に対応付けて前記不良情報記憶手段に記憶するドキュメント解析手段と、をさらに有すること
を特徴とするプログラム開発支援装置。
【請求項６】
コンピュータがプログラムの開発を支援するプログラム開発支援方法であって、
前記コンピュータの記憶装置には、プログラムの部分毎に、当該部分が前記プログラムの他の部分に与える複雑度を示すメトリクス情報が記憶されると共に、前記プログラムで発生した不良毎に、不良対策のために修正した前記プログラムの部分および当該不良がプログラム利用者に与えた影響度を示す不良情報が記憶されており、
前記コンピュータの演算装置は、
前記プログラムの部分毎に、当該部分のメトリクス情報が示す複雑度、および、不良対策のために当該部分を修正する各不良の不良情報が示す影響度を用いて、当該部分に割り付けるべきプログラム開発工数の大きさを示す重要度を決定するステップと、
決定した前記プログラムの各部分の重要度を前記コンピュータの出力装置から出力するステップと、を行うこと
を特徴とするプログラム開発支援方法。
【請求項７】
プログラムの開発を支援するためのコンピュータで読取り可能なプログラムであって、
前記コンピュータの記憶装置には、開発支援対象プログラムの部分毎に、当該部分が前記開発支援対象プログラムの他の部分に与える複雑度を示すメトリクス情報が記憶されると共に、前記開発支援対象プログラムで発生した不良毎に、不良対策のために修正した前記開発支援対象プログラムの部分および当該不良が前記開発支援対象プログラムの利用者に与えた影響度を示す不良情報が記憶されており、
前記コンピュータで読取り可能なプログラムは、前記コンピュータを、
前記プログラムの部分毎に、当該部分のメトリクス情報が示す複雑度、および、不良対策のために当該部分を修正する各不良の不良情報が示す影響度を用いて、当該部分に割り付けるべきプログラム開発工数の大きさを示す重要度を決定する演算手段と、
前記演算手段で決定した前記プログラムの各部分の重要度を前記コンピュータの出力装置から出力する重要度出力手段として、機能させること
を特徴とするコンピュータで読取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発を支援する技術に関する。
【背景技術】
【０００２】
プログラムの理解を支援する技術として、ソースプログラムのプログラム構造を可視化するリエンジニアリングと呼ばれる技術がある。例えば、特許文献１に記載のリエンジニアリングでは、ソースプログラムを解析して、プログラム命令解析情報およびコメント部分の解析情報を作成し、作成したプログラム命令解析情報およびコメント部分の解析情報からプログラム構造要素を特定するプログラム構造要素情報を作成し、このプログラム構造要素情報からソースプログラム中のコメントが適切に反映されたプログラム構造図を作成する。このようにすることで、ソースプログラムの細やかな個々の命令を直接表現することなく、概要や意味を表現し、理解し易いものにすることができる。
【０００３】
また、作業に必要な情報（ナレッジ）を共有するナレッジマネージメントと呼ばれる技術がある。例えば、特許文献２に記載のナレッジマネージメントでは、作業の手順やプログラム、ノウハウなどの作業における共通事項を定義する共通テンプレートを作成し、共通テンプレートでは定義されていない情報を差分テンプレートとして作成する。共通テンプレートを用いて実行した作業のうち新たな情報が差分テンプレートに蓄積されるようにすることで、ナレッジが蓄積される。ナレッジとして蓄積されている過去の類似の不良に利用した対策を示す不良情報を生成し、プログラム開発者に提示することで、プログラムの不良対策を支援することもできる。
【０００４】
【特許文献１】特開平５-３１３８７０号公報
【特許文献２】特開２００４-６２７０７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一般に、コンピュータプログラムは部分毎にその利用頻度、複雑度が異なる。しかし、上述のリエンジニアリングやナレッジマネージメントはそのことを考慮していない。このため、これらの技術をプログラム開発支援に利用する場合、プログラム開発者は、プログラム中の重要度が高い部分（不良の発生確率が高い部分や修正した場合の影響が大きい部分）に対しても、重要度が低い部分と同じ工数をかけて、分析、変更、検証等を実施することになる。したがって、重要度が高い部分については開発工数不足、低い部分については開発工数過剰となってしまう。また、開発中のプログラムのある不良に対して複数の対策が存在し、各対策がプログラムの異なる部分を修正するものである場合、プログラム開発者が重要度の高い部分を修正し、その結果、将来の開発、保守工数が増大してしまう可能性がある。
【０００６】
本発明は上記事情に鑑みてなされたものであり、本発明の目的は、プログラムの部分毎の重要度を提示してプログラム開発を支援することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明では、ソースプログラムを解析して、プログラムの部分毎に、当該部分が他の部分に与える影響度を示すメトリクス情報を生成する。また、プログラムの不良報告ドキュメントデータを解析して、不良毎に、不良対策のために修正したプログラムの部分および当該不良がプログラム利用者に与えた影響度を示す不良情報を生成する。そして、プログラムの部分毎に、当該部分のメトリクス情報および不良対策のために当該部分を修正した不良の不良情報に基づいて、割り付けるべきプログラムの開発工数の大きさを示す重要度を決定する。
【０００８】
例えば、本発明は、プログラムの開発を支援するプログラム開発支援装置であって、
前記プログラムの部分毎に、当該部分が前記プログラムの他の部分に与える複雑度を示すメトリクス情報が記憶されたメトリクス情報記憶手段と、前記プログラムで発生した不良毎に、不良対策のために修正した前記プログラムの部分および当該不良がプログラム利用者に与えた影響度を示す不良情報が記憶された不良情報記憶手段と、前記プログラムの部分毎に、当該部分のメトリクス情報が示す複雑度、および、不良対策のために当該部分を修正する各不良の不良情報が示す影響度を用いて、当該部分に割り付けるべきプログラム開発工数の大きさを示す重要度を決定する演算手段と、前記演算手段で決定した前記プログラムの各部分の重要度を出力する重要度出力手段と、を有する。
【発明の効果】
【０００９】
本発明によれば、プログラムの部分毎に、割り付けるべきプログラムの開発工数の大きさを示す重要度を決定する。プログラム開発者は、プログラム中の重要度の高い部分に多くの工数をかけて設計することにより、開発工数全体が同じでも従来の方法に比べて影響の大きい不良を低減させることができる。したがって、品質の高いプログラムの開発が可能となる。また、重要度の低い部分を修正する不良の対策を選択することができ、結果として、将来の開発、保守工数が増大する可能性を低くできる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態について説明する。
【００１１】
図１は本発明の一実施形態が適用されたプログラム開発支援システムの概略図である。  本実施形態のプログラム開発支援システムは、ソースプログラムと、該プログラムの開発工程で作成した当該プログラムの不良とその対策を示す不良報告ドキュメントデータとを入力し、ナレッジの１つとしてプログラムを構成する各関数の重要度（割り付けるべきプログラムの開発工数の大きさ）を出力する。図示するように、プログラム開発支援システムは、入出力部１と、演算部２と、記憶部３と、を有する。
【００１２】
入出力部１は、ソースプログラムおよび不良報告ドキュメントデータを含む各種情報やユーザ（プログラム開発者）の指示を入力する。また、プログラムを構成する各関数の重要度を含むナレッジやその他の情報を出力する。
【００１３】
記憶部３は、ソースプログラム記憶部３１と、メトリクス情報記憶部３２と、不良報告ドキュメント記憶部３３と、不良情報記憶部３４と、不良修正困難度情報記憶部３５と、ナレッジ情報記憶部３６と、を有する。
【００１４】
ソースプログラム記憶部３１には、入出力部３１に入力されたソースプログラムが記憶される。図２は高級言語で記述されたソースプログラムの一例を示す図である。ここで、符号３１１は行数を、符号３１２は記述された高級言語を示している。
【００１５】
図２に示すソースプログラムの例において、１１行目〜１４行目の部分３１３および１６行目〜１９行目の部分３１４は、それぞれテーブル"ＴＢＬ１"、"ＴＢＬ２"の宣言である。部分３１３では、１２行目、１３行目でテーブル"ＴＢＬ１"に、"ｍｅｍ１"、"ｍｅｍ２"という要素があることを宣言している。同様に、部分３１４では、１７行目、１８行目でテーブル"ＴＢＬ２"に、"ｍｅｍ３"、"ｍｅｍ４"という要素があることを宣言している。また、２１行目〜２９行目の部分３１５、３１行目〜４３行目の部分３１６および５１行目〜５８行目の部分３１７は、それぞれ関数"ｆｕｎｃ１"、"ｆｕｎｃ２"、"ｆｕｎｃ３"の宣言である。部分３１５では、２４行目、２５行目で関数"ｆｕｎｃ２"、"ｆｕｎｃ３"を呼び出し、２７行目でテーブル"ＴＢＬ１"の要素"ｍｅｍ１"を"ａ"とする（リード参照）。部分３１６では、３４行目〜３８行目で関数"ｆｕｎｃ２１"〜"ｆｕｎｃ２５"を呼び出し、４０行目でテーブル"ＴＢＬ１"の要素"ｍｅｍ２"を"ｂ"とする（リード参照）。また、４１行目で"ｃ"をテーブル"ＴＢＬ２"の要素"ｍｅｍ３"とする（ライト参照）。そして、部分３１７では、５４行目〜５６行目で関数"ｆｕｎｃ３１"〜"ｆｕｎｃ３３"を呼び出す。
【００１６】
メトリクス情報記憶部３２には、ソースプログラムの部分毎に、当該部分が他の部分に与える影響度を示すメトリクス情報が記憶される。メトリクス情報記憶部３２は、関数メトリクス情報テーブル３２１と、テーブルメトリクス情報テーブル３２２とを有する。
【００１７】
図３は関数メトリクス情報テーブル３２１の登録内容例を示す図である。図示するように、関数メトリクス情報テーブル３２１には、ソースプログラムで宣言されている関数毎に、当該関数が他の関数やテーブルに与える影響度を示すメトリクス情報のレコード３２１０が登録される。レコード３２１０は、関数の名称を登録する登録するフィールド３２１１と、当該関数を呼び出す他の関数（呼出し元関数と呼ぶ）の数を登録するフィールド３２１２と、当該関数が読み出す他の関数（呼出し先関数と呼ぶ）の数を登録するフィールド３２１３と、当該関数がリード参照するテーブル（リード参照テーブルと呼ぶ）の数を登録するフィールド３２１４と、当該関数がライト参照するテーブル（ライト参照テーブルと呼ぶ）の数を登録するフィールド３２１５と、を有する。
【００１８】
図４はテーブルメトリクス情報テーブル３２２の登録内容例を示す図である。図示するように、テーブルメトリクス情報テーブル３２２には、テーブルメトリクス情報テーブル３２２には、ソースプログラムで宣言されているテーブル毎に、当該テーブルが他の関数に与える影響度を示すメトリクス情報のレコード３２２０が登録される。レコード３２２０は、テーブルの名称を登録する登録するフィールド３２２１と、当該テーブルをリード参照する関数（リード参照関数と呼ぶ）の数を登録するフィールド３２２２と、当該テーブルがライト参照する関数（ライト参照関数と呼ぶ）の数を登録するフィールド３２２３と、を有する。
【００１９】
不良報告ドキュメント記憶部３３には、入出力部３１に入力された不良報告ドキュメントデータが記憶される。図５は不良報告ドキュメントデータの一例を示す図である。ここで、不良報告ドキュメントデータは、プログラムの開発工程で作成した当該プログラムの不良毎に作成される。
【００２０】
図５に示す不良報告ドキュメントデータの例は、承認者の情報を登録するフィールド３３０１と、審査者の情報を登録するフィールド３３０２と、作成者の情報を登録するフィールド３３０３と、不良のタイトル名を登録するフィールド３３０４と、不良の発生日を登録するフィールド３３０５と、不良が発生した場所あるいは顧客名を登録するフィールド３３０６と、不良が発生したシステム名を登録するフィールド３３０７と、不良の影響度（顧客に与えた影響度）を登録するフィールド３３０８と、不良対策のために修正した関数の名称を登録するフィールド３３０９と、不良対策のための修正した関数の数を登録するフィールド３３１０と、不良対策のために修正したテーブルの名称を登録するフィールド３３１１と、不良対策のための修正したテーブルの数を登録するフィールド３３１２と、不良の類型（不良パターン）のコードを登録するフィールド３３１３と、不良対策の類型（変更パターン）のコードを登録するフィールド３３１４と、不良の現象を登録するフィールド３３１５と、不良の原因を登録するフィールド３３１６と、不良の発生条件を登録するフィールド３３１７と、不良の修正方法を登録するフィールド３３１８と、不良の動機的要因を登録するフィールド３３１９と、不良の再発防止策を登録するフィールド３３２０と、を有する。
【００２１】
不良情報記憶部３４は不良情報テーブル３４１を有する。図６は不良情報テーブル３４１の登録内容例を示す図である。
【００２２】
図示するように、不良情報テーブル３４１には、プログラムの不良毎に、不良対策のために修正したプログラムの内容および当該不良の影響度（顧客に与えた影響度）を含む不良情報のレコード３４１０が登録される。レコード３４１０は、不良毎にユニークに与えられる不良番号を登録する登録するフィールド３４１１と、不良対策のために修正した関数の名称を登録するフィールド３４１２と、不良対策のために修正した関数の数を登録するフィールド３４１３と、不良対策のために修正したテーブルの名称を登録するフィールド３４１４と、不良対策のために修正したテーブルの数を登録するフィールド３４１５と、不良の影響度を登録するフィールド３４１６と、を有する。
【００２３】
不良修正困難度情報記憶部３５は不良修正困難度情報テーブル３５１を有する。図７は不良修正困難度情報テーブル３５１の登録内容例を示す図である。
【００２４】
図示するように、不良修正困難度情報テーブル３５１には、プログラムの不良毎に、不良修正の困難度および当該不良の影響度（顧客に与えた影響度）を含む不良修正困難度情報のレコード３５１０が登録される。レコード３５１０は、不良番号を登録する登録するフィールド３５１１と、不良修正の困難度を登録するフィールド３５１２と、不良の影響度を登録するフィールド３５１３と、を有する。
【００２５】
ナレッジ情報記憶部３６は関数重要度テーブル３６１を有する。図８は関数重要度テーブル３６１の登録内容例を示す図である。
【００２６】
図示するように、関数重要度テーブル３６１には、プログラムで記述されている関数毎に、当該関数の重要度（割り付けるべきプログラムの開発工数の大きさ）を含む関数重要度情報のレコード３６１０が登録される。レコード３６１０は、関数名を登録する登録するフィールド３６１１と、関数の重要度を登録するフィールド３６１２と、関数の重要度が属する大まかなレベルを登録するフィールド３６１３と、関数に割り付けるべき工数の順位を登録するフィールド３６１４と、を有する。
【００２７】
図１に戻って説明を続ける。演算部２は、ソースプログラムを解析してメトリクス情報を生成するソース解析部２１と、不良報告ドキュメントデータを解析して不良情報を生成するドキュメント解析部２２と、メトリクス情報および不良情報を用いて不良修正困難度情報を生成する不良修正困難度解析部２３と、メトリクス情報および不良修正困難度情報を用いて関数重要度情報を生成する重要度決定部２４と、を有する。
【００２８】
上記構成のプログラム開発支援システムは、例えば図９に示すような、ＣＰＵ９０１と、メモリ９０２と、ＨＤＤ等の外部記憶装置９０３と、ＣＤ-ＲＯＭやＤＶＤ-ＲＯＭやＩＣカードなどの記憶媒体からデータを読み取る読取装置９０４と、キーボードやマウスなどの入力装置９０６と、モニタやプリンタなどの出力装置９０７と、ネットワークなどに接続するための通信装置９０８と、これらの各装置を接続するバス９０９と、を備えた一般的なコンピュータシステムにおいて、ＣＰＵ９０１がメモリ９０２上にロードされたプログラムを実行することで実現できる。このプログラムは、読取装置９０４を介して記憶媒体から、あるいは、通信装置９０８を介してネットワークから、外部記憶装置９０３にダウンロードされ、それから、メモリ９０２上にロードされてＣＰＵ９０１により実行されるようにしてもよい。あるいは、外部記憶装置９０３を経由せずに、メモリ９０２上に直接ロードされ、ＣＰＵ９０１により実行されるようにしてもよい。なお、この場合において、記憶部３にはメモリ９０２や外部記憶装置９０３が利用される。また、入出力部１には読取装置９０４や入力装置９０６や出力装置９０７や通信装置９０８が利用される。
【００２９】
次に、上記構成のプログラム開発支援システムの動作を説明する。
【００３０】
図１０は本発明の一実施形態が適用されたプログラム開発支援システムの動作フローを説明するための図である。このフローは、入出力部１がユーザ（プログラム開発者）からプログラムの開発支援指示を受け付けることで開始される。
【００３１】
まず、入出力部１は、ソースプログラム記憶部３１にソースプログラムが記憶されているか否かを調べ（Ｓ１０）、記憶されていない場合は、ユーザにソースプログラムの入力を要求する。そして、入力されたソースプログラムをソースプログラム記憶部３１に記憶する（Ｓ１１）。また、入出力部１は、不良報告ドキュメント記憶部３３にソースプログラムの不良報告ドキュメントデータが少なくとも１つ記憶されているか否かを調べ（Ｓ１２）、記憶されていない場合は、ユーザに少なくとも１つの不良報告ドキュメントデータの入力を要求する。そして、入力された不良報告ドキュメントデータを不良報告ドキュメント記憶部３３に記憶する（Ｓ１３）。
【００３２】
さて、ソースプログラム記憶部３１にソースプログラムが記憶されており、且つ、不良報告ドキュメント記憶部３３に少なくとも１つの不良報告ドキュメントデータが記憶されている場合、ソース解析部２１は、ソースプログラム解析処理を行う。つまり、ソースプログラム記憶部３１に記憶されているソースプログラムを解析して、関数メトリクス情報テーブル３２１およびテーブルメトリクス情報テーブル３２２を作成し、メトリクス情報記憶部３２に記憶する（Ｓ１４）。
【００３３】
図１１はソースプログラム解析処理を説明するためのフロー図である。
【００３４】
まず、ソース解析部２１は、ソースプログラム記憶部３１からソースプログラムを読み出す。そして、ソースプログラムから未注目の関数宣言部分を検出し、これを注目関数宣言部とする（Ｓ１４０１）。例えば図２に示すソースプログラムの場合、関数"ｆｕｎｃ１"の宣言部分３１５が注目関数宣言部として最初に抽出される。
【００３５】
次に、ソース解析部２１は、関数メトリクス情報テーブル３２１（初期状態ではレコード数＝０）にレコード３２１０を追加し、このレコード３２１０のフィールド３２１１に注目関数宣言部で宣言されている関数の名称を登録する（Ｓ１４０２）。
【００３６】
次に、ソース解析部２１は、注目関数宣言部で宣言されている関数を呼び出す呼出し元関数をソースプログラムから検索する（Ｓ１４０３）。具体的には、ソースプログラムから注目関数宣言部以外の関数宣言部分を全て特定し、特定した関数宣言部分各々について、注目関数宣言部で宣言されている関数を呼び出しているか否かを調べる。例えば図２に示すソースプログラムであり、注目関数宣言部分が部分３１５である場合、部分３１５以外の関数宣言部分であって関数"ｆｕｎｃ１"を呼び出している関数宣言部分を検索する。
【００３７】
また、ソース解析部２１は、注目関数宣言部から呼出し先関数、リード参照テーブルおよびライト参照テーブルを検索する（Ｓ１４０４）。例えば図２に示すソースプログラムであり、注目関数宣言部分が部分３１５である場合、呼出し先関数は２４行目、２５行目に記述されている関数"ｆｕｎｃ２"、"ｆｕｎｃ３"であり、リード参照テーブルは２７行目に記述されているテーブル"ＴＢＬ１"である。ライト参照テーブルは、部分３１５には存在しない。
【００３８】
次に、ソース解析部２１は、Ｓ１４０３、Ｓ１４０４で検索した呼出し元関数の数、呼出し先関数の数、リード参照テーブルの数およびライト参照テーブルの数を、Ｓ１４０２で追加した関数メトリクス情報のレコード３２１０のフィールド３２１２〜３２１５に登録する（Ｓ１４０５）。
【００３９】
それから、ソース解析部２１は、ソースプログラムに未注目の関数宣言部分があるか否かを調べ（Ｓ１４０６）、ある場合はＳ１４０１に戻り、ない場合はＳ１４０７へ進む。Ｓ１４０１〜Ｓ１４０６の処理により、ソースプログラム中の関数宣言部分毎に、関数メトリクス情報のレコード３２１０が作成され、その結果、図３に示すような関数メトリクス情報テーブル３２１がメトリクス情報記憶部３２１に記憶される。
【００４０】
次に、Ｓ１４０７において、ソースプログラムから未注目のテーブル宣言部分を検出し、これを注目テーブル宣言部とする。例えば図２に示すソースプログラムの場合、テーブル"ＴＢＬ１"の宣言部分３１３が注目テーブル宣言部として最初に抽出される。
【００４１】
次に、ソース解析部２１は、テーブルメトリクス情報テーブル３２２にレコード３２２０（初期状態ではレコード数＝０）を追加し、このレコード３２２０のフィールド３２２１に注目テーブル宣言部で宣言されているテーブルの名称を登録する（Ｓ１４０８）。
【００４２】
次に、ソース解析部２１は、注目テーブル宣言部で宣言されているテーブルをリード参照する関数であるリード参照関数およびライト参照する関数であるライト参照関数をソースプログラムから検索する（Ｓ１４０９）。具体的には、ソースプログラムから関数宣言部分を全て特定し、特定した関数宣言部分各々について、注目テーブル宣言部で宣言されているテーブルを参照しているか否かを調べる。例えば図２に示すソースプログラムであり、注目テーブル宣言部分が部分３１３である場合、関数宣言部分であってテーブル"ＴＢＬ１"をリード参照あるいはライト参照している関数宣言部分を検索する。
【００４３】
次に、ソース解析部２１は、Ｓ１４０９で検索したリード参照関数の数およびライト参照関数の数を、Ｓ１４０８で追加したテーブルメトリクス情報のレコード３２２０のフィールド３２２２、３２２３に登録する（Ｓ１４１０）。
【００４４】
それから、ソース解析部２１は、ソースプログラムに未注目のテーブル宣言部分があるか否かを調べる（Ｓ１４１１）。未注目のテーブル宣言部分がある場合はＳ１４０７に戻り、ない場合はこのフローを終了する。Ｓ１４０７〜Ｓ１４１１の処理により、ソースプログラム中のテーブル宣言部分毎に、テーブルメトリクス情報のレコード３２２０が作成され、その結果、図４に示すようなテーブルメトリクス情報テーブル３２２がメトリクス情報記憶部３２１に記憶される。
【００４５】
図１０に戻って説明を続ける。次に、ソース解析部２１は、不良報告ドキュメント解析処理を行う。つまり、不良報告ドキュメント記憶部３３に記憶されている不良報告ドキュメントデータを解析して、不良情報テーブル３４１を作成し、不良情報記憶部３４に記憶する（Ｓ１５）。
【００４６】
図１２は不良報告ドキュメント解析処理を説明するためのフロー図である。
【００４７】
まず、ドキュメント解析部２２は、不良報告ドキュメント記憶部３３から未注目の不良報告ドキュメントデータを１つ読み出し、これを注目ドキュメントとする（Ｓ１５０１）。次に、ドキュメント解析部２２は、不良情報テーブル３４１（初期状態ではレコード数＝０）にレコード３４１０を追加し、このレコード３４１０のフィールド３４１１にユニークな不良番号（例えば連番）を登録する（Ｓ１５０２）。
【００４８】
次に、ドキュメント解析部２２は、注目ドキュメントのフィールド３３０８〜３３１２に登録されている「影響度」、「修正した関数名」、「修正した関数の数」、「修正したテーブル名」、「修正したテーブルの数」を抽出する（Ｓ１５０３）。例えば図５に示す注目ドキュメントの場合、「影響度」、「修正した関数名」、「修正した関数の数」、「修正したテーブル名」、「修正したテーブルの数」として、それぞれ「５」、「ｆｕｎｃ１」、「１」、「ＴＢＬ１」、「１」が抽出される。
【００４９】
次に、ドキュメント解析部２２は、注目ドキュメントから抽出した「修正した関数名」、「修正した関数の数」、「修正したテーブル名」、「修正したテーブルの数」および「影響度」を、Ｓ１５０２で追加した不良情報のレコード３４１０のフィールド３４１２〜３４１６に登録する（Ｓ１５０４）。
【００５０】
それから、ドキュメント解析部２２は、不良報告ドキュメント記憶部３３に未注目の不良ドキュメントデータが記憶されているか否かを調べ（Ｓ１５０５）、記憶されている場合はＳ１５０１に戻り、記憶されていない場合はこのフローを終了する。以上の処理により、不良報告ドキュメント記憶部３３に記憶されている不良報告ドキュメントデータ毎に、不良情報のレコード３４１０が作成され、その結果、図６に示すような不良情報テーブル３４１が不良情報記憶部３４に記憶される。
【００５１】
図１０に戻って説明を続ける。次に、不良修正困難度解析部２３は、不良修正困難度解析処理を行う。つまり、メトリクス情報記憶部３２に記憶されているメトリクス情報および不良情報記憶部３４に記憶されている不良情報を解析して、不良修正困難度情報テーブル３５１を作成し、不良修正困難度情報記憶部３５に記憶する（Ｓ１６）。
【００５２】
図１３は不良修正困難度解析処理を説明するためのフロー図である。
【００５３】
先ず、不良修正困難度解析部２３は、不良情報記憶部３４に記憶されている不良情報テーブル３４１から未注目の不良情報のレコード３４１０を検出し、これを注目レコードとする（Ｓ１６０１）。次に、注目レコード３４１０に対応する不良対策のために修正した関数と親子関係にある関数の数を示す親子関数数を０に設定して初期化する（Ｓ１６０２）。次に、不良修正困難度解析部２３は、注目レコード３４１０のフィールド３４１２から未抽出の「修正した関数名」を１つ抽出する（Ｓ１６０３）。例えば図６に示す不良番号「２」のレコード３４１０が注目レコードの場合、関数"ｆｕｎｃ１"、"ｆｕｎｃ２"のいずれかが抽出される。そして、抽出した「修正した関数名」と同じ関数名がフィールド３２１１に登録されている関数メトリクス情報のレコード３２１０を、メトリクス情報記憶部３２に記憶されている関数メトリクス情報テーブル３２１から検出し、これを注目関数レコードとする（Ｓ１６０４）。それから、不良修正困難度解析部２３は、注目関数レコードのフィールド３２１２、３２１３に登録されている呼出し元関数の数および呼出し先関数の数の合計を、親子関数数に加算する（Ｓ１６０５）。例えば図３に示す関数名"ｆｕｎｃ１"のレコード３２１０が注目関数レコードの場合、呼出し元関数の数「１０」および呼出し先関数の数「２」の合計「１２」が親子関数数に加算される。
【００５４】
さて、不良修正困難度解析部２３は、注目レコード３４１０のフィールド３４１２に未抽出の「修正した関数名」が存在するか否かを調べ（Ｓ１６０６）、存在する場合はＳ１６０３に戻り、存在しない場合はＳ１６０７に進む。
【００５５】
Ｓ１６０７において、不良修正困難度解析部２３は、注目レコード３４１０に対応する不良対策のために修正したテーブルを参照する関数の数を示すテーブル参照関数数を０に設定して初期化する。次に、不良修正困難度解析部２３は、注目レコード３４１０のフィールド３４１４から未抽出の「修正したテーブル名」を１つ抽出する（Ｓ１６０８）。例えば図６に示す不良番号「２」のレコード３４１０が注目レコードの場合、テーブル"ＴＢＬ１"、"ＴＢＬ２"のいずれかが抽出される。そして、抽出した「修正したテーブル名」と同じテーブル名がフィールド３２２１に登録されているテーブルメトリクス情報のレコード３２２０を、メトリクス情報記憶部３２に記憶されているテーブルメトリクス情報テーブル３２２から検出し、これを注目テーブルレコードとする（Ｓ１６０９）。それから、不良修正困難度解析部２３は、注目テーブルレコードのフィールド３２２２、３２２３に登録されているリード参照関数の数およびライト参照関数の数の合計を、テーブル参照関数数に加算する（Ｓ１６１０）。例えば図４に示すテーブル名"ＴＢＬ１"のレコード３２２０が注目テーブルレコードの場合、リード参照関数の数「３」およびライト参照関数の数「２」の合計「５」がテーブル参照関数数に加算される。
【００５６】
さて、不良修正困難度解析部２３は、注目レコード３４１０のフィールド３４１４に未抽出の「修正したテーブル名」が存在するか否かを調べ（Ｓ１６１１）、存在する場合はＳ１６０８に戻り、存在しない場合はＳ１６１２に進む。
【００５７】
Ｓ１６１２において、不良修正困難度解析部２３は、以上の処理により得られた親子関数数とテーブル参照関数数との合計を算出し、これを注目レコード３４１０に対応する不良対策の困難度を示す不良修正困難度に設定する。そして、不良修正困難度情報テーブル３５１にレコード３５１０を追加し、フィールド３５１１に注目レコード３４１０のフィールド３４１１に登録されている不良番号を、フィールド３５１２にＳ１６１２で算出した不良修正困難度を、そして、フィールド３５１３に注目レコード３４１０のフィールド３４１６に登録されている影響度を登録する（Ｓ１６１３）。
【００５８】
それから、不良修正困難度解析部２３は、不良情報テーブル３４１に未注目の不良情報のレコード３４１０があるか否かを調べ（Ｓ１６１４）、あるならばＳ１６０１に戻る。一方、ないならばこのフローを終了する。これにより、図７に示すような不良修正困難度情報テーブル３５１が不良修正困難度情報記憶部３５に記憶される。
【００５９】
図１０に戻って説明を続ける。次に、重要度決定部２４は、重要度決定処理を行う。つまり、メトリクス情報記憶部３２に記憶されているメトリクス情報および不良修正困難度情報記憶部３５に記憶されている不良修正困難度情報を解析して、関数重要度テーブル３６１を作成し、ナレッジ情報記憶部３６に記憶する（Ｓ１７）。
【００６０】
図１４は重要度決定処理を説明するためのフロー図である。
【００６１】
先ず、重要度決定部２４は、メトリクス情報記憶部３２に記憶されている関数メトリクス情報テーブル３２１から未注目の関数メトリクス情報のレコード３２１０を検出し、これを注目レコードとする（Ｓ１７０１）。次に、注目レコード３２１０のフィールド３２１２〜３２１５に登録されている「呼出し元関数の数」、「呼出し先関数の数」、「リード参照テーブルの数」および「ライト参照テーブルの数」の合計を算出し、これを注目レコードの関数の他の関数やテーブルとの関わりの強さを表す静的複雑度に設定する（Ｓ１７０２）。例えば図３に示す関数名"ｆｕｎｃ１"のレコード３２１０が注目レコードの場合、呼出し元関数の数「１０」、呼出し先関数の数「２」、リード参照テーブルの数「１」およびライト参照テーブルの数「０」の合計「１３」が静的複雑度となる。
【００６２】
次に、重要度決定部２４は、対策のために注目レコード３２１０の関数の修正を行った不良の影響度および該対策の困難度を示す不良実績品質度を０に設定して初期化する（Ｓ１７０３）。そして、注目レコード３２１０のフィールド３２１１に登録されている「関数名」が「修正した関数名」としてフィールド３４１２に登録されている未抽出の不良情報のレコード３４１０を不良情報記憶部３４に記憶されている不良情報テーブル３４１から１つ抽出する（Ｓ１７０４）。例えば図３に示す関数名"ｆｕｎｃ１"のレコード３２１０が注目レコードの場合、図６において、不良番号「１」あるいは「２」の不良情報のレコード３４１０が抽出される。
【００６３】
それから、重要度決定部２４は、抽出した不良情報のレコード３４１０のフィールド３４１１に登録されている不良番号がフィールド３５１１に登録されている不良修正困難度情報のレコード３５１０を検出し、これを注目困難度レコードに設定する（Ｓ１７０５）。例えば図６に示す不良番号「１」のレコード３４１０がＳ１７０４で抽出された場合、図７において、不良番号「１」の不良修正困難度情報のレコード３５１０が注目困難度レコードに設定される。
【００６４】
次に、重要度決定部２４は、注目困難度レコードのフィールド３５１２、３５１３に登録されている不良修正困難度および影響度の積を算出し、これを不良実績品質度に加算する（Ｓ１７０６）。例えば図７に示す不良番号「１」のレコード３５１０が注目困難度レコードの場合、不良修正困難度「１７」および影響度「５」の積「８５」が不良実績品質度に加算される。
【００６５】
さて、重要度決定部２４は、注目レコード３２１０のフィールド３２１１に登録されている「関数名」が「修正した関数名」としてフィールド３４１２に登録されている未抽出の不良情報のレコード３４１０が不良情報テーブル３４１に存在するか否かを調べ（Ｓ１７０７）、存在する場合はＳ１７０４に戻り、存在しない場合はＳ１７０８に進む。
【００６６】
Ｓ１７０８において、重要度決定部２４は、不良実績品質度とＳ１７０２で求めた静的複雑度との積を算出し、これを注目レコード３２１０の関数に対する関数重要度に設定する。関数重要度は、関数に割り付けるべきプログラムの開発工数の大きさ示している。次に、重要度決定部２４は、関数重要度テーブル３６１（初期状態ではレコード数＝０）にレコード３６１０を追加し、このレコード３６１０のフィールド３６１１に注目レコードの関数名を登録し、フィールド３６１２にＳ１７０８で算出した関数重要度を登録する（Ｓ１７０９）。
【００６７】
それから、重要度決定部２４は、関数メトリクス情報テーブル３２１に未注目の関数メトリクス情報のレコード３２１０が存在するか否かを調べ（Ｓ１７１０）、存在する場合はＳ１７０１に戻り、存在しない場合はＳ１７１１に進む。
【００６８】
Ｓ１７１１において、重要度決定部２４は、関数重要度テーブル３６１のレコード３６１０のフィールド３６１２に登録されている関数重要度の大きい順にソートし、フィールド３６１４にレコードの並び順を登録する。また、フィールド３６１３には所定の規則に従ってレベルを登録する。例えば関数重要度テーブル３６１のレコード３６１０を、関数重要度の大きさに応じて５段階にレベル分け（Ａ、Ｂ、Ｃ、Ｄ、Ｅにレベル分けし，Ａが重要度最大でＥが最小）して登録する。その後、フローを終了する。
【００６９】
以上のようにして、図８に示すような関数重要度テーブル３６１がナレッジ情報記憶部３６に記憶される。このように、図２に示したソースプログラムを見ただけでは判別困難な関数重要度をソースプログラム中の関数毎に決定することができる。これにより、例えば、図２に示すソースプログラムにおいて、関数呼出し文の数やテーブル参照文の数が多い関数"ｆｕｎｃ２"の関数重要度が最大のように見える。しかし、過去の不良報告を考慮すると関数"ｆｕｎｃ１"の関数重要度が最大であることが分かる。つまり、ソースプログラムを見ただけでは把握できない情報を得ることができる。
【００７０】
図１０に戻って説明を続ける。ナレッジ情報記憶部３６に関数重要度テーブル３６１が作成されると、入出力部１は、関数重要度テーブル３６１の内容を、例えばメトリクス情報記憶部３２に記憶されている関数メトリクス情報テーブル３２１、テーブルメトリクス情報テーブル３２２の内容と共に出力し、ユーザにソースプログラムの各関数の関数重要度を提示する（Ｓ１８）。
【００７１】
例えば、関数重要度テーブル３６１にレコード３６１０が登録されている関数毎に、関数重要度をディスプレイに表示する。図１５は関数重要度の画面表示例である。この例では、関数"ｆｕｎｃ１"について、リエンジニアリング（例えば上記の特許文献１）を用いて作成した関数呼出関連図１０１、簡易関数仕様書１０２と並べて、フィールド３６１１に関数"ｆｕｎｃ１"が登録されている関数重要度テーブル３６１のレコード３６１０の情報（関数重要度、レベル、順位）１０３が表示されている。順位は、ソースプログラムの総関数数と並べて表示してもよい。このようにすることで、関数重要度を分かりやすくすることができる（順位／総関数数）。
【００７２】
なお、関数呼出関連図とは、関数間の静的関数呼出関係をグラフ化した図である。また、簡易関数仕様書とは、ソースプログラムやコメントから取得した関数名称、関数の機能、引数名称、引数の意味といった情報を表である。関数呼出関連図および簡易関数仕様書を作成するために必要な情報は、ソース解析部２１によるソース解析処理の際に検出して、関数毎に、メトリクス情報記憶部３２に記憶するようにしてもよい。
【００７３】
以上、本実施形態の一実施形態について説明した。
【００７４】
本実施形態によれば、プログラムを構成する各関数の関数重要度を出力するので、ユーザ（プログラム開発者）はこの関数重要度を参考にすることにより、プログラム中の複数の箇所を変更する必要が発生した場合に、プログラム中の重要度が高い部分（エラーの発生頻度が高い部分や修正した場合に他の部分への影響が大きい部分）に対して、重要度が低い部分と比べて多くの工数を割り当てて設計することができる。このため、開発工数全体が同じでも、従来に比べて影響の大きい不良を低減させることができ、したがって、品質の高いプログラムの開発が可能となる。また、１つの不良を修正する方法として２つ以上の方法が存在し、各々の方法でプログラム中の異なる部分を修正する場合に、重要度の低い部分を修正する方法を選択できる。このため、将来の重大な不良の発生を未然に低減させることができ、したがって、結果的に開発、保守工数全体の低減を実現できる。
【００７５】
なお、本発明は上記の各実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。例えば、上記の実施形態において、図１３に示す不良修正困難度解析処理のＳ１６１２において、親子関数数に所定の重み（例えば１）を掛け合わせた値と、テーブル参照関数数に所定の重み（例えば２）を掛け合わせた値との和を算出し、これを不良修正困難度として設定してもよい。このように、親子関数数とテーブル参照関数数との間に適切な重みを設定することで、より正確な不良修正困難度を算出できる。重みの設定は、過去の経験からプロジェクトリーダが設定してもよいし、あるいは、実際に発生した不良の重大度との相関関係から設定してもよい。
【図面の簡単な説明】
【００７６】
【図１】図１は本発明の一実施形態が適用されたプログラム開発支援システムの概略図である。
【図２】図２は高級言語で記述されたソースプログラムの一例を示す図である。
【図３】図３は関数メトリクス情報テーブル３２１の登録内容例を示す図である。
【図４】図４はテーブルメトリクス情報テーブル３２２の登録内容例を示す図である。
【図５】図５は不良報告ドキュメントデータの一例を示す図である。
【図６】図６は不良情報テーブル３４１の登録内容例を示す図である。
【図７】図７は不良修正困難度情報テーブル３５１の登録内容例を示す図である。
【図８】図８は関数重要度テーブル３６１の登録内容例を示す図である。
【図９】図９はプログラム開発支援システムのハードウエア構成例を示す図である。
【図１０】図１０は本発明の一実施形態が適用されたプログラム開発支援システムの動作フローを説明するための図である。
【図１１】図１１はソースプログラム解析処理を説明するためのフロー図である。
【図１２】図１２は不良報告ドキュメント解析処理を説明するためのフロー図である。
【図１３】図１３は不良修正困難度解析処理を説明するためのフロー図である。
【図１４】図１４は重要度決定処理を説明するためのフロー図である。
【図１５】図１５は関数重要度の画面表示例である。
【符号の説明】
【００７７】
１…入出力部、２…演算部、３…記憶部、２１…ソース解析部、２２…ドキュメント解析部、２３…不良修正困難度解析部、２４…重要度決定部、３１…ソースプログラム記憶部、３２…メトリクス情報記憶部、３３…不良報告ドキュメント、３４…不良情報記憶部、３５…不良修正困難度情報記憶部、３６…ナレッジ情報記憶部、３２１…関数メトリクス情報テーブル、３２２…テーブルメトリクス情報テーブル、３４１…不良情報テーブル、３５１…不良修正困難度情報テーブル、３６１…関数重要度テーブル
【図１】
2006113934.tif 000003
【図２】
2006113934.tif 000004
【図３】
2006113934.tif 000005
【図４】
2006113934.tif 000006
【図５】
2006113934.tif 000007
【図６】
2006113934.tif 000008
【図７】
2006113934.tif 000009
【図８】
2006113934.tif 000010
【図９】
2006113934.tif 000011
【図１０】
2006113934.tif 000012
【図１１】
2006113934.tif 000013
【図１２】
2006113934.tif 000014
【図１３】
2006113934.tif 000015
【図１４】
2006113934.tif 000016
【図１５】
2006113934.tif 000017