(57)【要約】【課題】メトリクスを用いてプログラム構造を解析する装置において、プログラム自体の複雑度を考慮した、ソフトウェア分析装置を提供すること。【解決手段】分析対象のソフトウェアを構成するプログラム毎に、プログラム毎に機能ブロック当りのメトリクス１と一定プログラム量当りのメトリクス２を算出し、前記メトリクス１と前記メトリクス２の差分をとり該プログラム毎の品質分析を行う差分分析処理手段と、前記差分分析処理手段による差分分析処理結果を格納する分析結果格納手段を備え、プログラム全体の複雑度を考慮したソフトウェアの品質評価を行う。【選択図】図１
2005275868.tif 000002
【特許請求の範囲】
【請求項１】
１以上のプログラムから構成されるソフトウェアの品質分析を行う装置において、
プログラム量に関するメトリクスと機能ブロックの数に関するメトリクスと制御構造に関するメトリクスを記憶するメトリクス記憶手段と、
前記ソフトウェアを構成するプログラム毎に、前記メトリクス記憶手段に記憶されるメトリクスからプログラム毎に機能ブロック当りのメトリクス１と一定プログラム量当りのメトリクス２を算出し、前記メトリクス１と前記メトリクス２に基づいて、前記プログラム毎の差分品質分析を行う差分分析処理手段と、
前記差分分析処理手段による差分分析処理結果を格納する差分記憶手段とを具備したことを特徴とするソフトウェア分析装置。
【請求項２】
前記差分分析処理手段は、前記メトリクス１と前記メトリクス２の差分をとることで、前記プログラム毎の差分品質分析を行うことを特徴とする請求項１記載のソフトウェア分析装置。
【請求項３】
前記差分分析処理手段は、前記メトリクス１と前記メトリクス２について、１つ以上の前記ソフトウェアを構成するプログラムを母集団として、前記プログラム毎の機能ブロック当りのメトリクス偏差値１と一定プログラム量当りのメトリクス偏差値２を算出し、前記メトリクス偏差値１と前記メトリクス偏差値２の差分をとることで、前記プログラム毎の差分品質分析を行うことを特徴とする請求項１記載のソフトウェア分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発におけるプログラムの品質管理技術に係り、特にプログラムのソースコードを解析しメトリクスを測定することでその品質や特性を分析する技術に関するものである。
【背景技術】
【０００２】
従来、ソフトウェアを構成するプログラムの構造を定量的に把握する尺度としてメトリクスを用いる技術がある。メトリクスとは、プログラムの複雑度や不良修正の確率などを数値化したものであり、メトリクスによりソフトウェアのプログラム構造上の特徴を把握することができる。概してプログラム構造に関係するメトリクス値は、機能分割や構造化を行い個々の機能を簡単なロジックで仕上げることで良い値になる。一方、プログラム構造に関係するメトリクス値が悪いと、プログラムが複雑であることを意味し、ソフトウェアに誤りや不具合（リスク）が発生しやすくなることがよく知られている。
【０００３】
プログラムの品質管理技術として、メトリクス値がある基準内に収まっているかどうかを判定することで、プログラムの品質向上を図る技術が開示されている（例えば、特許文献１参照）。これにより、プログラムの品質や特性を判断することが可能となり、ソフトウェアの不具合を早期に発見することにより、より高品質なソフトウェアを開発することができる。
【特許文献１】特開平６−１１９２０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、前記従来の技術では、メトリクスを用いてプログラム構造を解析する装置において、機能ブロックごとのプログラム構造に関係するメトリクスを測定し、基準を満たしている否かで判断を行っており、解析対象プログラムの全体の複雑度を考慮した判断を行うことができないという課題を有していた。つまり、プログラム自体の仕様が単純にもかかわらず、プログラム全体の構造化が通常以上に複雑である場合など、機能ブロックのプログラム構造に関係するメトリクスが基準内になるため、高品質なソフトウェアと誤った判断がされる可能性がある。例えば、簡単な仕様のプログラムを、あまり機能分割や構造化を行わずに複雑なロジックでソースコードを作成してしまった場合、測定したメトリクスの値が悪くなる傾向にある。この場合、仕様が簡単であるために、基準値をぎりぎり満たしてしまう可能性があるが、プログラムの品質に関してリスクがある可能性が高い。一方、プログラム自体の複雑度が高いプログラムの場合、正しく機能分割や構造化を行い、簡単なロジックで記述しようとしても、測定したメトリクス値が基準に満たないことがありえる。また、プログラム自体の複雑度が高いプログラムにあわせてメトリクス値の基準を設定した場合、簡単な仕様のプログラムの判定基準として甘すぎることになる。
【０００５】
本発明は、前記従来の課題を解決するもので、プログラム自体の複雑度を考慮し、ソフトウェアの品質を評価する装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
前記従来の課題を解決するために、本発明は、１以上のプログラムから構成されるソフトウェアの品質分析を行う装置において、プログラム量に関するメトリクスと機能ブロックの数に関するメトリクスと制御構造に関するメトリクスを記憶するメトリクス記憶手段と、前記ソフトウェアを構成するプログラム毎に、前記メトリクス記憶手段に記憶されるメトリクスからプログラム毎に機能ブロック当りのメトリクス１と一定プログラム量当りのメトリクス２を算出し、前記メトリクス１と前記メトリクス２に基づいて、前記プログラム毎の差分品質分析を行う差分分析処理手段と、前記差分分析処理手段による差分分析処理結果を格納する差分記憶手段とを備え、プログラム自体の複雑度と機能ブロック毎の複雑度との相関関係を導き出し、プログラム仕様の複雑度を考慮したソフトウェアの品質を評価することができる。
【発明の効果】
【０００７】
本発明によれば、分析対象のソフトウェアを構成するプログラム毎に、一定プログラム量単位のメトリクス値と、機能ブロック単位でのメトリクス値を別々に計測し、その差分をとることでプログラム全体の複雑度と機能ブロックごとの複雑度との相関関係を導き出すことにより、プログラム自体の複雑度を考慮したソフトウェアの品質を評価することができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について図面を参照しながら説明する。なお、ここでは機能ブロックの単位として関数を用いて説明を行う。
【０００９】
図１は、本発明の実施の形態であるソフトウェア分析装置の構成の一例を示すブロック図である。図１において、ソフトウェア分析装置は、分析対象のソフトウェアを構成する１つ以上のプログラムを格納する分析対象ソフトウェア格納部１と、分析対象ソフトウェア格納部１のファイル管理を行うファイル管理部２と、キーボードあるいはマウス等の入力装置により入力を行う入力部３と、ＣＲＴ、プリンタ等の出力装置からなる出力部４と、入力部３および出力部４の入出力制御を行う入出力制御部５と、プログラムの分析処理を行う分析処理部６と、プログラムの差分分析を行う差分分析処理部７と、分析処理部６と差分分析処理部７の分析処理に必要な作業メモリエリアを確保する一時記憶部８と、分析処理部６と差分分析処理部７により求められた分析対象ソフトウェアを構成するプログラムのメトリクスを格納する分析結果記憶部９とを備えている。
【００１０】
分析対象ソフトウェア格納部１は、ソフトウェアを構成するプログラムをファイル形式で格納している。１つ以上のファイル（プログラム）から動作可能な１つのソフトウェアとなる。分析対象ソフトウェア格納部１は、ハードウェアや外部メモリ（ＳＤカードやＣＤ−ＲＯＭなど）であってもよく、また、ネットワークを介して接続されていてもよい。
【００１１】
ファイル管理部２は、分析対象ソフトウェア１に格納されているファイル（プログラム）の書き込みや読み出しなどを管理している。また、例えば、分析処理部６から特定のファイル（プログラム）の取得が要求されると、取得対象のファイルを読み出して、分析処理部６に通知する。
【００１２】
入出力制御部５は、ユーザが入力操作した入力情報を入力部３から受け取り、分析処理部６に通知する。また、分析処理部６から受け取った出力対象の分析結果を、出力可能なフォーマットに従って出力部４に通知する。なお、入力部３は、キーボードやマウスなどだけでなく、音声入力などでもよい。また、出力部４は、ＣＲＴやプリンタだけでなく、音出力やＬＣＤの点灯、バイブレーションなどでもよい。更に、ネットワーク経由で外部機器に対して出力することも可能である。
【００１３】
分析処理部６は、入出力制御部５から分析の開始が指示されると、分析対象のソフトウェアの取得をファイル管理部２に要求し、取得したソフトウェアのメトリクス値を計測することにより分析を行い、分析結果を分析結果記憶部９に格納する。また、入出力制御部５に通知を行うことにより、分析結果や分析経過などを外部への出力することができる。
【００１４】
差分分析処理部７は、分析処理部６が分析処理を行った後に、分析処理部６からの指示を受け取り、分析結果記憶部９に格納されている分析結果に基づいて差分分析を行い、差分分析結果を分析結果記憶部９に格納する。差分分析とは、また、分析処理部６に差分分析の終了を通知する。なお、差分分析の終了後だけでなく差分分析の途中に、分析経過を分析処理部６に通知することで、分析経過の外部出力を行ってもよい。
【００１５】
分析結果記憶部９は、分析対象のソフトウェアを構成するプログラム毎に含まれる関数の数を記憶する関数数記憶部１０と、分析対象ソフトウェアを構成するプログラム毎の総ステップ数を記録するステップ数記憶部１１と、分析対象ソフトウェアを構成するプログラム毎のプログラム全体に関しての複雑度を記憶する全体複雑度記憶部１２と、関数毎の複雑度と一定サイズのステップ毎の複雑度の相関関係をあらわす差分記憶部１３とを備えている。分析結果記憶部９に格納されているデータの詳細は、図を用いて、後ほど説明する。
【００１６】
次に、フローチャートに基づいてソフトウェア分析装置の動作について説明する。
【００１７】
図２は、ソフトウェア分析処理における分析処理の一例を示すフローチャートである。まず、入力部３から入力された分析開始の指示を、分析処理部６が入出力制御部５経由で受け取り、処理を開始する。
【００１８】
分析処理部６は、分析対象ソフトウェア格納部１内に格納されている分析対象ソフトウェアの取得をファイル管理部２に要求し、ファイル管理部２が分析対象ソフトウェア格納部１から分析対象ソフトウェアを読み込み、分析処理部６に通知する（ステップＳ１０１）。また、分析処理部６は、取得した分析対象のソフトウェアを作用メモリエリアである一時記憶部８に格納する。なお、分析処理部６は、分析対象ソフトウェアを構成するプログラムを１つずつ指定して、ファイル管理部２に取得を要求してもよい。また、分析処理部６は、分析対象ソフトウェア自身を指定し、ファイル管理部２が指定されたソフトウェアを構成している１つ以上のプログラムを読み込んでもよい。
【００１９】
次に、分析処理部６は、読み込んだ分析対象ソフトウェアを構成するプログラムの中から１つを選択する（ステップＳ１０２）。分析処理部６は、選択したプログラムに含まれる関数の数を算出し、関数数記憶部１０に格納する（ステップＳ１０３）。分析処理部６は、選択したプログラムに含まれる総ステップ数（コメントを除いたコード行数）を算出し、ステップ数記憶部１１に格納する（ステップＳ１０４）。分析処理部６は、選択したプログラムのプログラム全体に関して複雑度を算出し、全体複雑度記憶部１２に格納する（ステップＳ１０５）。なお、全体に関する複雑度とは、例えばサイクロマチック複雑度やネスティングの深さを計算することで得られる。
【００２０】
分析処理部６が、差分分析処理部７に差分分析の開始を指示し、差分分析処理部７は、差分分析処理を行い、差分分析結果を差分記憶部１３に格納し（ステップＳ１０６）、分析処理を終了する。
【００２１】
なお、前もって分析対象ソフトウェアを構成する１つのプログラムを選択し、選択したプログラムのみ分析対象ソフトウェア格納部１から取得してもよい。
【００２２】
また、選択するプログラムは、分析処理部６が任意のプログラムを選択してもよいし、入力部３からの入力に従って、特定のプログラムを選択してもよい。また、分析対象ソフトウェア格納部１に、ソフトウェアを格納する際に前もって指定してもよい。
【００２３】
次に、フローチャートに基づいて差分分析処理部７が行う差分分析処理について説明する。
【００２４】
図３は、差分分析処理の一例を示すフローチャートである。この処理は、図２のステップＳ１０６の処理に相当する。差分分析処理部７は、分析処理部６から差分分析の指示を受け、処理を開始する。
【００２５】
差分分析処理部７は、プログラムの関数当りの複雑度を算出し、差分記憶部１３に記憶する（ステップＳ２０１）。以下に、算出に使用する計算式の具体例に示す。なお、計算式中のαは定数であり、例えば１．０に設定する。
【００２６】
（関数当り複雑度）＝α×（全体複雑度）／（関数の数）
次に、差分分析処理部７は、プログラムの一定ステップ当りの複雑度を算出し、差分記憶部１３に記憶する（ステップＳ２０２）。以下に、算出に使用する計算式の具体例を示す。なお、一定ステップとは、一定量のステップであり、例えば１０００ステップ（１Ｋステップ）とする。また、βは定数であり、例えば０．２に設定する。
【００２７】
（ステップ数当り複雑度）＝（全体複雑度）／（一定量のステップ）
最後に、差分分析処理部７は、プログラムの複雑度差分を算出し、差分記憶部１３に記憶し（ステップＳ２０３）、差分分析処理を終了する。以下に、算出に使用する計算式の具体例を示す。
【００２８】
（複雑度差分）＝（関数当り複雑度）−（ステップ当り複雑度）
図４は、ソフトウェア分析装置によって分析され、分析結果記憶部９に格納されているデータの一例である。１つのプログラムに対し、プログラムを識別するためのプログラム名と、ステップ数と、関数の数と、複雑度の情報を組にして格納している。また、複雑度の情報は、プログラム全体の複雑度、関数当たりの複雑度、１Ｋステップ当たりの複雑度と、これらの値から算出した複雑度差分から構成されている。
【００２９】
この例において、関数あたりの複雑度が６以下を基準内（ソフトウェア品質が合格）と設定した場合、プログラムＡ、Ｂ、Ｃの全てが基準値内ということになる。しかし、本実施の形態における複雑度の差分分析において、基準値を０以内とした場合、プログラムＢは不合格になる。プログラムＢは１Ｋステップ当たりの複雑度が低い割に、関数当りの複雑度が高く、関数当たり複雑度が基準値以内にもかかわらず、プログラムの全体の構造化が正しく行われておらず、品質の低いプログラムであると判定できる。
【００３０】
以上により、分析対象ソフトウェアを構成している１つのプログラムを選択して、このプログラムの複雑度に基づいた複雑度差分を算出することで差分分析を行い、プログラム自体の複雑度を考慮したソフトウェアの品質を評価することが可能となる。
【００３１】
次に、ソフトウェア分析処理における分析処理の別の一例について図５を用いて説明する。まず、入力部３から入力された分析開始の指示を、分析処理部６が入出力制御部５経由で受け取り、処理を開始する。
【００３２】
分析処理部６は、分析対象ソフトウェア格納部１内に格納されている分析対象ソフトウェアの取得をファイル管理部２に要求し、ファイル管理部２が分析対象ソフトウェア格納部１から分析対象ソフトウェアを読み込み、分析処理部６に通知する（ステップＳ３０１）。また、分析処理部６は、取得した１つ以上のプログラムとプログラム数を一時記憶部８に記憶する。
【００３３】
次に、分析処理部６は、読み込んだ分析対象ソフトウェアを構成するプログラムの中から１つを選択する（ステップＳ３０２）。分析処理部６は、選択したプログラムに含まれる関数の数を算出し、関数数記憶部１０に格納する（ステップＳ３０３）。分析処理部６は、選択したプログラムに含まれる総ステップ数を算出し、ステップ数記憶部１１に格納する（ステップＳ３０４）。分析処理部６は、選択したプログラムのプログラム全体に関して例えばサイクロマチック法による複雑度を計算し、全体複雑度記憶部１２に格納する（ステップＳ３０５）。
【００３４】
次に、分析処理部６は、読み込んだ分析対象ソフトウェアを構成するプログラムで未分析のプログラムが他にあるか否かを調べ（ステップＳ３０６）、他に存在する場合（ステップＳ３０６がＹＥＳ）、ステップＳ３０２へ戻り、処理を繰り返す。一方、他に存在ななければ（ステップＳ３０６がＮＯ）、差分分析処理部７に差分分析の開始を指示し、差分分析処理部７は、差分分析処理を行い、差分分析結果を差分記憶部１３に格納し（ステップＳ３０７）、分析処理を終了する。
【００３５】
図６は、差分分析処理部７が行う差分分析の別の一例を示すフローチャートである。この処理は、図５のステップＳ３０７の処理に相当する。分析処理部６から差分分析の指示を受け、処理を開始する。なお、以下の計算式のｉは、１から始まる分析対象のプログラム数までの変数である。
【００３６】
差分分析処理部７は、１つ以上のプログラム毎の関数当りの複雑度を算出し、差分記憶部１３に記憶する（ステップＳ４０１）。以下に、算出に使用する計算式の具体例を示す。
【００３７】
（関数当り複雑度）ｉ＝（全体複雑度）／（関数の数）
次に、差分分析処理部７は、１つ以上のプログラム毎の一定ステップ当りの複雑度を算出し、差分記憶部１３に記憶する（ステップＳ４０２）。なお、一定ステップとは、一定量のステップであり、例えば１０００（１Ｋステップ）に設定する。
【００３８】
（ステップ数当り複雑度）ｉ＝（全体複雑度）／（一定量のステップ）
差分分析処理部７は、１つ以上のプログラム毎の関数当り複雑度の偏差値を算出し、差分記憶部１３に記憶する（ステップＳ４０３）。以下に、算出に使用する計算式の具体例を示す。なお、計算式中のαは定数であり、例えば１．０に設定する。
【００３９】
【数１】
2005275868.tif 000003
【００４０】
【数２】
2005275868.tif 000004
【００４１】
【数３】
2005275868.tif 000005
【００４２】
次に、差分分析処理部７は、１つ以上のプログラム毎の一定ステップ当りの複雑度の偏差値を算出し、差分記憶部１３に記憶する（ステップＳ４０４）。以下に、算出に使用する計算式の具体例を示す。なお、計算式中のβは定数であり、例えば１．０に設定する。
【００４３】
【数４】
2005275868.tif 000006
【００４４】
【数５】
2005275868.tif 000007
【００４５】
【数６】
2005275868.tif 000008
【００４６】
最後に、差分分析処理部７は、１つ以上のプログラム毎の複雑度偏差値差異を算出し、差分記憶部１３に記憶する（ステップＳ４０５）。以下に、算出に使用する計算式の具体例を示す。
【００４７】
【数７】
2005275868.tif 000009
【００４８】
図７は、ソフトウェア分析装置によって分析され、分析結果記憶部９に格納されているデータの一例である。１つのプログラムに対し、プログラムを識別するためのプログラム名と、ステップ数と、関数の数と、複雑度の情報を組にして格納している。また、複雑度の情報は、プログラム全体の複雑度、関数当たりの複雑度と偏差値、１Ｋステップ当たりの複雑度と偏差値、これらの値から算出した偏差値差分から構成されている。
【００４９】
この例において、関数あたりの複雑度が６以下を基準内と設定した場合、プログラムＡ、Ｂ、Ｃの全てが基準値内ということになる。しかし、本実施の形態における偏差値差分において、基準値を０以内とした場合、プログラムＢは不合格になる。プログラムＢは１Ｋステップ当たりの複雑度が低い割に、関数当りの複雑度が高く、関数当たり複雑度が基準値以内にもかかわらず、プログラムの全体の構造化が正しく行われておらず、品質の低いプログラムであると判定できる。
【００５０】
以上により、分析対象ソフトウェアを構成している１つのプログラムを選択して、このプログラムの複雑度に基づいた複雑度差分を算出することで差分分析を行い、プログラム自体の複雑度と機能ブロック毎の複雑度との相関関係を導き出し、プログラム仕様の複雑度を考慮したソフトウェアの品質を評価することが可能となる。
【００５１】
なお、本実施の形態では、機能ブロックの単位を関数として記述してきたが、機能ブロックとして、関数内のネストを単位とすることや、複数の関数群を単位としてもよい。
【００５２】
以上により、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、例えば本発明をプログラムによって実現し、これをフロッピー（Ｒ）ディスクなどの記録媒体に記録して移送することにより、独立した他のコンピュータシステムで容易に実現するなど、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【産業上の利用可能性】
【００５３】
本発明にかかるソフトウェア分析装置は、コンピュータを用いたソフトウェアの品質分析として有用である。また、大型計算機やパーソナルコンピュータのような形態のみならず、各種の家電機器、情報処理装置、携帯電話、産業機器などでも利用可能である。
【図面の簡単な説明】
【００５４】
【図１】本発明の実施の形態におけるソフトウェア分析装置の構成の一例を示すブロック図
【図２】本発明の実施の形態におけるソフトウェア分析装置におけるソフトウェア品質分析処理の流れの一例を示すフローチャート
【図３】本発明の実施の形態におけるソフトウェア分析装置における差分分析処理の流れの一例を示すフローチャート
【図４】本発明の実施の形態におけるソフトウェア分析装置により分析結果格納部に格納されるデータの一例を示す図
【図５】本発明の実施の形態におけるソフトウェア分析装置におけるソフトウェア品質分析処理の流れの一例を示すフローチャート
【図６】本発明の実施の形態におけるソフトウェア分析装置における差分分析処理の流れの一例を示すフローチャート
【図７】本発明の実施の形態におけるソフトウェア分析装置により分析結果格納部に格納されるデータの一例を示す図
【符号の説明】
【００５５】
１    分析対象ソフトウェア格納部
２    ファイル管理部
３    入力部
４    出力部
５    入出力制御部
６    分析処理部
７    差分分析処理部
８    一時記憶部
９    分析結果記憶部
１０    関数数記憶部
１１    ステップ数記憶部
１２    全体複雑度記憶部
１３    差分記憶部
【図１】
2005275868.tif 000010
【図２】
2005275868.tif 000011
【図３】
2005275868.tif 000012
【図４】
2005275868.tif 000013
【図５】
2005275868.tif 000014
【図６】
2005275868.tif 000015
【図７】
2005275868.tif 000016