(57)【要約】【課題】反復型の開発プロセスを採用しているソフトウェア開発プロジェクトにおいて、実装の進捗を管理するため、実際の実装状態からの誤差の小さい完成度を算出することのできる実装進捗計測装置を提供する。【解決手段】実装進捗装置１００においては、シーケンス図解析部１でシーケンス図を構文解析しクラス一覧表と設計済メッセージ一覧表とを生成する。また、ソースコード解析部２で、生成されたクラス一覧表に対応するソースコードを構文解析し実装済メッセージ一覧表を生成する。完成部算出部３で設計済メッセージ一覧表と実装済メッセージ一覧表とから重複済みメッセージ一覧表を生成し、重複済メッセージ数を設計済メッセージ数で除算することにより完成度を算出する。【選択図】図２
2007287045.tif 000002
【特許請求の範囲】
【請求項１】
シーケンス図を表わすテキストデータであるシーケンスデータを取得するシーケンス取得手段と、
前記シーケンスデータを構文解析し、クラスを特定するクラス特定手段と、
前記シーケンスデータを構文解析し、前記シーケンスデータに含まれるメッセージである設計済メッセージを特定する設計済メッセージ特定手段と、
前記クラスに基づいて計測対象のソースコードを取得するソースコード取得手段と、
前記ソースコードを構文解析し、前記ソースコードに含まれるメッセージである実装済メッセージを特定する実装済メッセージ特定手段と、
前記設計済メッセージのうち、前記実装済メッセージに重複するメッセージである重複メッセージを特定する重複メッセージ特定手段と、
前記設計済メッセージの数と、前記重複メッセージの数とに基づいて、前記ソースコードの前記シーケンス図に対する完成度を算出する完成度算出手段とを備える、実装進捗計測装置。
【請求項２】
前記実装済メッセージ特定手段は、
前記ソースコードを構文解析して含まれるクラスを抽出するクラス抽出手段と、
抽出された前記クラスを構文解析して含まれるメソッドを抽出するメソッド抽出手段と、
抽出された前記メソッドを構文解析してメッセージを抽出するメッセージ抽出手段とをさらに備える、請求項１に記載の実装進捗計測装置。
【請求項３】
前記完成度算出手段は、前記設計済メッセージの数に対する前記重複メッセージの数の比率である前記完成度を算出する、請求項１に記載の実装進捗計測装置。
【請求項４】
重複メッセージ特定手段は、前記設計済メッセージを特定する要素と、前記実装済メッセージを特定する要素との集合積を演算して前記重複メッセージを特定する、請求項１に記載の実装進捗計測装置。
【請求項５】
重複メッセージ特定手段は、前記設計済メッセージを特定する要素と前記実装済メッセージを特定する要素とのうちの少なくとも１つの要素について、所定の範囲での一致度合いを判定することで前記重複メッセージを特定し、
前記完成度算出手段は、さらに前記一致度合いに基づいて前記完成度を算出する、請求項１に記載の実装進捗計測装置。
【請求項６】
シーケンス図を表わすテキストデータであるシーケンスデータを取得するシーケンス取得手段と、
計測対象のソースコードを取得するソースコード取得手段と、
演算処理を行なうプロセッサとを備え、
前記演算処理は、
前記シーケンスデータを構文解析し、クラスを特定するクラス特定ステップと、
前記シーケンスデータを構文解析し、前記シーケンスデータに含まれるメッセージである設計済メッセージを特定する設計済メッセージ特定ステップと、
前記ソースコードを構文解析し、前記ソースコードに含まれるメッセージである実装済メッセージを特定する実装済メッセージ特定ステップと、
前記設計済メッセージのうち、前記実装済メッセージに重複するメッセージである重複メッセージを特定する重複メッセージ特定ステップと、
前記設計済メッセージの数と、前記重複メッセージの数とに基づいて、前記ソースコードの前記シーケンス図に対する完成度を算出する完成度算出ステップとを含む、実装進捗計測装置。
【請求項７】
コンピュータに実装進捗計測処理を実行させるプログラムであって、
シーケンス図を表わすテキストデータであるシーケンスデータを取得するシーケンス取得ステップと、
前記シーケンスデータを構文解析し、クラスを特定するクラス特定ステップと、
前記シーケンスデータを構文解析し、前記シーケンスデータに含まれるメッセージである設計済メッセージを特定する設計済メッセージ特定ステップと、
前記クラスに基づいて計測対象のソースコードを取得するソースコード取得ステップと、
前記ソースコードを構文解析し、前記ソースコードに含まれるメッセージである実装済メッセージを特定する実装済メッセージ特定ステップと、
前記設計済メッセージのうち、前記実装済メッセージに重複するメッセージである重複メッセージを特定する重複メッセージ特定ステップと、
前記設計済メッセージの数と、前記重複メッセージの数とに基づいて、前記ソースコードの前記シーケンス図に対する完成度を算出する完成度算出ステップとを実行させる、実装進捗計測プログラム。
【請求項８】
前記実装済メッセージ特定ステップは、
前記ソースコードを構文解析して含まれるクラスを抽出するクラス抽出ステップと、
抽出された前記クラスを構文解析して含まれるメソッドを抽出するメソッド抽出ステップと、
抽出された前記メソッドを構文解析してメッセージを抽出するメッセージ抽出ステップとをさらに含む、請求項７に記載の実装進捗計測プログラム。
【請求項９】
前記完成度算出ステップにおいては、前記設計済メッセージの数に対する前記重複メッセージの数の比率である前記完成度を算出する、請求項７に記載の実装進捗計測プログラム。
【請求項１０】
重複メッセージ特定ステップにおいては、前記設計済メッセージを特定する要素と、前記実装済メッセージを特定する要素との集合積を演算して前記重複メッセージを特定する、請求項７に記載の実装進捗計測プログラム。
【請求項１１】
重複メッセージ特定ステップにおいては、前記設計済メッセージを特定する要素と前記実装済メッセージを特定する要素とのうちの少なくとも１つの要素について、所定の範囲での一致度合いを判定することで前記重複メッセージを特定し、
前記完成度算出ステップにおいては、さらに前記一致度合いに基づいて前記完成度を算出する、請求項７に記載の実装進捗計測プログラム。
【請求項１２】
請求項７〜１１のいずれかに記載の実装進捗計測プログラムを記録する、コンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は実装進捗計測装置、実装進捗計測プログラム、および実装進捗計測プログラムを記録する記録媒体に関し、特に、ソフトウェア開発プロセスを定量的に評価する実装進捗計測装置、実装進捗計測プログラム、および実装進捗計測プログラムを記録する記録媒体に関する。
【背景技術】
【０００２】
ソフトウェアを開発するためのプロジェクトを管理するために、ソフトウェア開発のプロセスを定量的に評価することがなされている。そのツールおよび技法として、定量的評価のための装置および方法が用いられている。
【０００３】
近年、ソフトウェアを開発するためのプロジェクトが大規模化しており、それに伴って、その装置および方法に対する要求が高まっている。
【０００４】
たとえば、以下の特許文献１は、上記要求に応じてソフトウェアの実装を管理するプログラム評価方法を開示している。そのプログラム評価方法によると、モデル図内に存在する全クラスのメソッドに対して、対応するソースファイル内でメソッドが実装されているかどうかがチェックされる。そして、各メソッドの中にコメント以外の行が存在しないときはそのメソッドは未実装であると判断され、未実装のメソッドの総数の、モデル図内に存在する全メソッド数に対する割合が算出されることにより、プログラムの完成度が算出される。
【特許文献１】特開２００４−２２７１０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、最近はラショナル統一プロセス（ＲＵＰ：Rational Unified Process）等の、反復型の開発プロセスを採用するソフトウェア開発プロジェクトが増加している。反復型の開発プロセスは、小さなリリースを繰返しながら全体的なシステム開発するプロセスであり、機能が段階的に実装されてその度にテストがなされる。そのため、開発中のソフトウェアの各メソッド内には、テスト用にダミーコードが記述される場合が多い。ダミーコードとしては、たとえばダミーデータをリターンするコードや、NotImplementedException等の、要求されたメソッドが実装されていないことを示す例外をスローするコードなどが該当する。
【０００６】
上記特許文献１に開示されているプログラム評価方法は、各メソッド内に記述されているコードがダミーコードか本来のコードかを判別する手段を持たない。そのため、特許文献１に開示されているプログラム評価方法を反復型の開発プロセスを採用しているソフトウェア開発プロジェクトに適用した場合、実際の実装状態からの誤差の大きい完成度が算出してしまう場合があるという問題があった。
【０００７】
本発明は、上記事情に鑑みてなされたものであり、反復型の開発プロセスを採用しているソフトウェア開発プロジェクトにおいて、実装の進捗を管理するため、実際の実装状態からの誤差の小さい完成度を算出することのできる実装進捗計測装置、実装進捗計測方法、実装進捗計測プログラム、および実装進捗計測プログラムを記録する記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明のある局面に従うと、実装進捗計測装置は、シーケンス図を表わすテキストデータであるシーケンスデータを取得するシーケンス取得手段と、シーケンスデータを構文解析し、クラスを特定するクラス特定手段と、シーケンスデータを構文解析し、シーケンスデータに含まれるメッセージである設計済メッセージを特定する設計済メッセージ特定手段と、特定されたクラスに基づいて計測対象のソースコードを取得するソースコード取得手段と、ソースコードを構文解析し、ソースコードに含まれるメッセージである実装済メッセージを特定する実装済メッセージ特定手段と、設計済メッセージのうち、実装済メッセージに重複するメッセージである重複メッセージを特定する重複メッセージ特定手段と、設計済メッセージの数と、重複メッセージの数とに基づいて、ソースコードのシーケンス図に対する完成度を算出する完成度算出手段とを備える。
【０００９】
さらに、実装済メッセージ特定手段は、ソースコードを構文解析して含まれるクラスを抽出するクラス抽出手段と、抽出されたクラスを構文解析して含まれるメソッドを抽出するメソッド抽出手段と、抽出されたメソッドを構文解析してメッセージを抽出するメッセージ抽出手段とを備えることが好ましい。
【００１０】
または、完成度算出手段は、設計済メッセージの数に対する重複メッセージの数の比率である完成度を算出することが好ましい。
【００１１】
または、重複メッセージ特定手段は、設計済メッセージを特定する要素と、実装済メッセージを特定する要素との集合積を演算して重複メッセージを特定することが好ましい。
【００１２】
または、メッセージ特定手段は、設計済メッセージを特定する要素と実装済メッセージを特定する要素とのうちの少なくとも１つの要素について、所定の範囲での一致度合いを判定することで重複メッセージを特定し、完成度算出手段は、さらに一致度合いに基づいて完成度を算出することが好ましい。
【００１３】
本発明の他の局面に従うと、実装進捗計測装置は、シーケンス図を表わすテキストデータであるシーケンスデータを取得するシーケンス取得手段と、計測対象のソースコードを取得するソースコード取得手段と、演算処理を行なうプロセッサとを備え、上記演算処理は、シーケンスデータを構文解析し、クラスを特定するクラス特定ステップと、シーケンスデータを構文解析し、シーケンスデータに含まれるメッセージである設計済メッセージを特定する設計済メッセージ特定ステップと、ソースコードを構文解析し、ソースコードに含まれるメッセージである実装済メッセージを特定する実装済メッセージ特定ステップと、設計済メッセージのうち、実装済メッセージに重複するメッセージである重複メッセージを特定する重複メッセージ特定ステップと、設計済メッセージの数と、重複メッセージの数とに基づいて、ソースコードのシーケンス図に対する完成度を算出する完成度算出ステップとを含む。
【００１４】
本発明のさらに他の局面に従うと、実装進捗計測プログラムは、コンピュータに実装進捗計測処理を実行させるプログラムであって、シーケンス図を表わすテキストデータであるシーケンスデータを取得するシーケンス取得ステップと、シーケンスデータを構文解析し、クラスを特定するクラス特定ステップと、シーケンスデータを構文解析し、シーケンスデータに含まれるメッセージである設計済メッセージを特定する設計済メッセージ特定ステップと、特定されたクラスに基づいて計測対象のソースコードを取得するソースコード取得ステップと、ソースコードを構文解析し、ソースコードに含まれるメッセージである実装済メッセージを特定する実装済メッセージ特定ステップと、設計済メッセージのうち、実装済メッセージに重複するメッセージである重複メッセージを特定する重複メッセージ特定ステップと、設計済メッセージの数と、重複メッセージの数とに基づいて、ソースコードのシーケンス図に対する完成度を算出する完成度算出ステップとを実行させる。
【００１５】
さらに、実装済メッセージ特定ステップは、ソースコードを構文解析して含まれるクラスを抽出するクラス抽出ステップと、抽出されたクラスを構文解析して含まれるメソッドを抽出するメソッド抽出ステップと、抽出されたメソッドを構文解析してメッセージを抽出するメッセージ抽出ステップとを含むことが好ましい。
【００１６】
または、完成度算出ステップにおいては、設計済メッセージの数に対する重複メッセージの数の比率である完成度を算出することが好ましい。
【００１７】
または、重複メッセージ特定ステップにおいては、設計済メッセージを特定する要素と、実装済メッセージを特定する要素との集合積を演算して重複メッセージを特定することが好ましい。
【００１８】
または、重複メッセージ特定ステップにおいては、設計済メッセージを特定する要素と実装済メッセージを特定する要素とのうちの少なくとも１つの要素について、所定の範囲での一致度合いを判定することで重複メッセージを特定し、完成度算出ステップにおいては、さらに一致度合いに基づいて完成度を算出することが好ましい。
【００１９】
本発明のさらに他の局面に従うと、記録媒体はコンピュータ読取可能な記録媒体であって、上記実装進捗計測プログラムを記録する。
【発明の効果】
【００２０】
本発明にかかる実装進捗計測装置および実装進捗計測プログラムによれば、メッセージに基づいてシーケンス図およびソースコードを構造／構文解析し解析結果を比較することにより各メソッド内に記述されているコードがダミーコードか本来のコードかを判別することができる。そのため、従来技術と比較してより誤差の小さい完成度を算出することができる。
【発明を実施するための最良の形態】
【００２１】
以下に、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。
【００２２】
図１は、本実施の形態にかかる実装進捗計測装置１００を含む実装進捗計測システムの構成の具体例を示す図である。図１を参照して、実装進捗計測システムは、実装進捗計測装置１００と、実装進捗計測装置１００と有線または無線のネットワークを介して接続されるサーバ２００，３００とを含んで構成される。本実施の形態にかかる実装進捗計測装置は、ソフトウェア設計担当者が作成したシーケンス図に基づいてソフトウェア実装担当者が作成したソースコードの、実装進捗を計測する装置である。本実施の形態において、実装進捗計測装置１００およびサーバ２００，３００は一般的なパーソナルコンピュータで実現するものとする。
【００２３】
図２は、本実施の形態にかかる実装進捗計測装置１００の機能構成、およびサーバ２００，３００の機能構成の具体例を示すブロック図である。図２を参照して、実装進捗計測装置１００の機能は、シーケンス図解析部１と、ソースコード解析部２と、完成度算出部３とを含んで構成される。これらの機能は、パーソナルコンピュータである実装進捗計測装置１００のＣＰＵ（Central Processing Unit）がＲＯＭ（Read Only Memory）等の記憶装置に記憶されているプログラムを読出して実行することによって主にＣＰＵに形成される機能である。なお、上記機能の一部、または上記機能に含まれる機能の一部はパーソナルコンピュータのハードウェアで形成されてもよい。
【００２４】
また、図２を参照して、サーバ２００には、ソフトウェア設計担当者が作成したシーケンス図に基づいたシーケンスデータを保管するシーケンス図管理部４、サーバ３００には、ソフトウェア実装担当者が作成中のソースコードを保管するソースコード管理部５が含まれる。これらの機能は、１つのサーバに含まれていてもよい。
【００２５】
ソースコード管理部５に保管されるソースコードは、テキストデータである。また、シーケンス図管理部４に保管されるシーケンスデータも、シーケンス図に基づくテキストデータである。オブジェクト指向のソフトウェア開発におけるプログラム設計図の統一表記法であるＵＭＬ（Unified Modeling Language）で表わされたシーケンス図等のモデル図をテキスト形式で表わしたときのデータ形式の具体例としては、ＯＭＧ（Object Management Group）が標準化しているＸＭＩ（Extensible Markup Language Metadata Interchange）形式が挙げられる。このデータ形式は、システム開発支援ツールと開発方法論の統合、システム開発作業の効率化を目的としたコンピュータ支援ソフトウェアであるＣＡＳＥ（Computer Aided Software Engineering）ツールと言われるソフトウェアにおいて業界基準となっている。そこで、たとえばＣＡＳＥツールのような所定のソフトウェアを用いてシーケンス図を作成しＸＭＩ形式のテキストデータで出力することによって、シーケンス図管理部４ではシーケンス図がテキストデータとして保管される。
【００２６】
たとえば、具体的に図３に示されたシーケンス図が「Enterprise Architect（登録商標）」というＣＡＳＥツールで作成された場合、ＸＭＩ形式のテキストデータで出力すると、図４に示されるテキストデータとなる。図４を参照して、ＸＭＩ形式のテキストデータにおいて、シーケンス図に含まれるクラスに関する情報は＜UML:Class＞要素に記述されている。また、図４には省略されている以降の記述において、インスタンスに関する情報は＜UML:ClassifierRole＞要素に、メッセージに関する情報は＜UML:Message＞要素にそれぞれ記述される。また各要素間の関連は＜xmi.id＞属性の値に表わされる。すなわち、シーケンスデータとしては、各オブジェクトを特定する情報と、各メッセージを特定する情報とが含まれておればよく、さらにメッセージを特定する情報としては、メッセージの送信元、送信先、および内容を示す情報が含まれておればよい。
【００２７】
シーケンス図解析部１はユーザ操作によるソースコードの完成度を算出する要求を受けると、サーバ２００のシーケンス図管理部４にアクセスして該当するシーケンス図に基づいたシーケンスデータを取得し、解析する。シーケンス図解析部１での解析結果はソースコード解析部２と完成度算出部３とに入力される。
【００２８】
ソースコード解析部２はシーケンス図解析部１での解析結果に応じてサーバ３００のソースコード管理部５にアクセスして対応するソースコードを取得し、解析する。そして解析結果を完成度算出部３に入力する。完成度算出部３はシーケンス図解析部１での解析結果とソースコード解析部２での解析結果とを比較してそのソースコードの上記シーケンス図に対する完成度を算出し、完成度レポート６を出力する。
【００２９】
図５は、さらにシーケンス図解析部１の構成を示すブロック図である。図５を参照して、シーケンス図解析部１には、シーケンス取得部１１、シーケンス解析部１３、クラス特定部１５、設計済メッセージ特定部１７、および解析結果出力部１９が含まれる。
【００３０】
前述のようにシーケンス図管理部４に保管されるシーケンスデータがＸＭＩ形式等のテキストデータであるので、シーケンス図解析部１においてはテキストデータの解析が行なわれる。なお、本実施の形態においては、シーケンスデータがＸＭＩ形式のテキストデータであるものとする。その場合、そのテキストデータはマークアップ言語であるＸＭＬで記述されているため、シーケンス図解析部１はシーケンスデータを単なる「テキストデータ」ではなく「ＸＭＬ文章」として取扱うことが可能となる。ＸＭＬ文章の構文解析および加工の方法は本発明において特定の方法に限定されず、既存のあらゆる方法が採用され得る。たとえば「ＸＳＬＴプロセッサ」と呼ばれるプログラムなどを用いて行なう方法が採用されてもよい。
【００３１】
シーケンス取得部１１は、上記ユーザからの要求に従ってシーケンス図管理部４からシーケンス図に対応するＸＭＩ形式のＸＭＬ文章であるシーケンスデータを読込み、シーケンス解析部１３に入力する。入力されたシーケンスデータはシーケンス解析部１３において構文解析される。ここでの構文解析の方法は前述のように本発明において特定の方法に限定されず、たとえば、「XT」や「Xalan」等のＸＳＬＴプロセッサと呼ばれる解析用のプログラムを用いることができる。構文解析された結果はクラス特定部１５および設計済メッセージ特定部１７に入力される。
【００３２】
クラス特定部１５は構文解析されたＸＭＩ形式のＸＭＬ文章からクラスに関する情報を抽出し、クラス一覧表を生成する。前述のように、ＸＭＩ形式のテキストデータにおいてシーケンス図に含まれるクラスに関する情報は＜UML:Class＞要素に記述されているため、クラス特定部１５はＸＭＬ文章から＜UML:Class＞要素を検索することでクラスに関する情報を抽出する。生成されたクラス一覧表は解析結果出力部１９に入力される。なお、クラス特定部１５において生成される抽出されたクラスに関する情報の形式は一覧表の形式に限定されず、その他、クラスに関する情報が特定される形式であればいかなる形式であってもよい。また、以降に生成される「一覧表」についても同様である。
【００３３】
設計済メッセージ特定部１７は構文解析されたＸＭＩ形式のＸＭＬ文章からメッセージに関する情報を抽出し、設計済みメッセージ一覧表を生成する。前述のように、ＸＭＩ形式のテキストデータにおいてシーケンス図に含まれるメッセージに関する情報は＜UML:Message＞要素に記述されているため、設計済メッセージ特定部１７はＸＭＬ文章から＜UML:Message＞要素を検索することでメッセージに関する情報を抽出する。生成された設計済メッセージ一覧表は解析結果出力部１９に入力される。
【００３４】
解析結果出力部１９は、クラス特定部１５から入力されたクラス一覧表、および設計済メッセージ特定部１７から入力された設計済メッセージ一覧表を、各々、ソースコード解析部２および完成度算出部３に対して出力する。
【００３５】
図６は、ソースコード解析部２の構成を示すブロック図である。図６を参照して、ソースコード解析部２には、クラス特定結果取得部２１、ソースコード取得部２３、解析部２５、実装済メッセージ特定部２７、および解析結果出力部２９が含まれる。
【００３６】
クラス特定結果取得部２１は、シーケンス図解析部１の解析結果出力部１９より出力されたクラス一覧表を取得し、ソースコード取得部２３に入力する。ソースコード取得部２３はクラス一覧表に記述されているすべてのクラスに関連するソースコードをクラスごとにソースコード管理部５から取得し、解析部２５に入力する。
【００３７】
入力されたソースコードは解析部２５において解析される。前述のようにソースコードはテキストデータであるので、解析部２５においてはテキストデータの構文解析がなされる。ソースコードのテキストデータはＣ＋＋やＪａｖａ（登録商標）といったプログラミング言語で記述されているため、ソースコード解析部２はソースコードを単なる「テキストデータ」ではなく「プログラム文章」として取扱うことが可能となる。解析部２５における構文解析の方法もまた本発明において特定の方法に限定されず、既存のあらゆる方法が採用され得る。たとえば「コンパイラ・コンパイラ」と呼ばれるプログラムなどを用いて行なう方法が採用されてもよい。
【００３８】
より具体的には、解析部２５は、ソースコードを構文解析して解析結果である構文木を得る。たとえば、図７に示される、Ｊａｖａ言語で記述されたソースコードが解析されると、図８に示されるＪａｖａＭＬ形式の構文木が得られる。解析部２５での解析結果は、実装済メッセージ特定部２７に入力される。
【００３９】
実装済メッセージ特定部２７は、解析部２５での解析結果である構文木からメッセージを特定する情報の組合わせを抽出することで、実装済メッセージ一覧表を生成する。
【００４０】
より詳しくは、図９は実装済メッセージ特定部２７の構成の具体例を示すブロック図であって、実装済メッセージ特定部２７は、クラス抽出部２７１、メソッド抽出部２７３、およびメッセージ抽出部２７５を含んで構成される。
【００４１】
クラス抽出部２７１はテキストデータである上記構文木より＜class＞要素の＜name＞属性を抽出することで、クラスに関する情報を抽出し、メソッド抽出部２７３に入力する。メソッド抽出部２７３はクラスに関する情報の中から＜method＞要素の＜name＞属性を抽出することで、メソッドに関する情報を抽出し、メッセージ抽出部２７５に入力する。メッセージ抽出部２７５はメソッドに関する情報の中から＜send＞要素の＜message＞属性、＜var-ref＞要素の＜idref＞属性の値と同じ値の＜id＞属性を持つ要素の＜type＞子要素の＜name＞属性、および＜var-ref＞要素の＜name＞属性の組合わせを抽出することでメッセージに関する情報を抽出し、実装済メッセージ一覧表を生成する。生成された実装済メッセージ一覧表は解析結果出力部２９に入力される。
【００４２】
解析結果出力部２９は、実装済メッセージ特定部２７から入力された実装済メッセージ一覧表を完成度算出部３に対して出力する。
【００４３】
図１０は、完成度算出部３の構成を示すブロック図である。図１０を参照して、完成度算出部３には、設計済メッセージ特定結果取得部３１、実装済メッセージ特定結果取得部３２、集合積演算部３３、重複メッセージ特定部３４、重複メッセージ数特定部３５、設計済メッセージ数特定部３６、算出部３７、および完成度レポート生成および出力部３８が含まれる。
【００４４】
設計済メッセージ特定結果取得部３１は上記解析結果出力部１９より出力された設計済メッセージ一覧表を取得し、集合積演算部３３と設計済メッセージ数特定部３６とに入力する。また、実装済メッセージ特定結果取得部３２は上記解析結果出力部２９より出力された実装済メッセージ一覧表を取得し、集合積演算部３３に入力する。
【００４５】
集合積演算部３３は、設計済メッセージ特定結果取得部３１から入力された設計済メッセージ一覧表と、実装済メッセージ特定結果取得部３２から入力された実装済メッセージ一覧表との集合積演算を行ない、演算結果を重複メッセージ特定部３４に入力する。重複メッセージ特定部３４では、入力された演算結果に基づいて、設計済メッセージ一覧表と実装済メッセージ一覧表とに重複するメッセージを記述した重複メッセージ一覧表を生成し、重複メッセージ数特定部３５に入力する。
【００４６】
重複メッセージ数特定部３５は入力された重複メッセージ一覧表に記述されているメッセージ数をカウントし、その結果を算出部３７に入力する。また、設計済メッセージ数特定部３６も入力された設計済メッセージ一覧表に記述されているメッセージ数をカウントし、その結果を算出部３７に入力する。算出部３７は、これらのメッセージ数を用いてシーケンス図に対する作成中のソースコードの完成度を算出し、その結果を完成度レポート生成および出力部３８に入力する。完成度レポート生成および出力部３８では入力されたソースコードの完成度の算出結果より完成度レポートが生成され、出力される。
【００４７】
図１１は、本実施の形態にかかる実装進捗計測装置１００において実行される実装進捗計測処理の流れを表わしたフローチャートである。図１１のフローチャートに表わされる実装進捗計測処理は、実装進捗計測装置１００のＣＰＵがＲＯＭ等の記憶装置に記憶されているプログラムを読出して図２に示される各機能を制御することによって実現される。さらに、図１１において最左列に示されたステップ（以下、Ｓ）００１〜Ｓ００３の処理は主にシーケンス図解析部１、中央列に示されたＳ００４〜Ｓ００５の処理は主にソースコード解析部２、および最右列に示されたＳ００６〜Ｓ００９の処理は主に完成度算出部３において実行される。
【００４８】
ここでは、具体的に、ソフトウェア設計担当者によって図１２に示されるシーケンス図が作成され、それに基づいて作成されたソースコードの進捗計測されるものとして説明を行なう。図１２に示されるシーケンス図は、「線分の中点を求めるプログラム」を作成するという要求に基づいてソフトウェア設計担当者によって作成されたシーケンス図である。
【００４９】
簡単に図１２に示されるシーケンス図を説明すると、図１２に示されるシーケンス図には、メインオブジェクト＜:Test＞を表わすオブジェクト７、中点を求める対象である２点Ｐ１，Ｐ２に対応したオブジェクト＜p1:Point＞＜p2:Point＞を表わすオブジェクト８，９、２点Ｐ１，Ｐ２を結ぶ線分ｓに対応したオブジェクト＜s:Segment＞を表わすオブジェクト１０、および２点Ｐ１，Ｐ２の中点Ｍに対応したオブジェクト＜m:Point＞を表わすオブジェクト１１と、メインオブジェクト＜Test＞に送信されるメッセージ２２、メインオブジェクト＜Test＞からオブジェクト＜p1:Point＞＜p2:Point＞＜s:Segment＞に各々送信されるメッセージ２３〜２６、およびオブジェクト＜s:Segment＞からオブジェクト＜p1:Point＞＜p2:Point＞＜m:Point＞に各々送信されるメッセージ２７〜３１とが含まれる。
【００５０】
メッセージ２２によってメインオブジェクト＜Test＞が生成され、活性期間１２の間活性化する。メインオブジェクト＜Test＞からメッセージ２３〜２５によって、各々、オブジェクト＜p1:Point＞＜p2:Point＞＜s:Segment＞が生成され、各々、活性期間１３〜１５の間活性化する。さらに、メインオブジェクト＜Test＞からのメッセージ２６によって中点Ｍを取得することがオブジェクト＜s:Segment＞に対して要求されて、活性期間１６の間、オブジェクト＜s:Segment＞が活性化する。活性期間１６の間にオブジェクト＜s:Segment＞からのメッセージ２７〜３０によって、水平方向の座標および垂直方向の座標を取得することがオブジェクト＜p1:Point＞＜p2:Point＞に対して要求されて、オブジェクト＜p1:Point＞＜p2:Point＞が、各々活性期間１７，１９、１８，２０の間、活性化する。また、活性期間１６の間にオブジェクト＜s:Segment＞からのメッセージ３１によってオブジェクト＜m:Point＞が生成され、活性期間２１の間活性化する。
【００５１】
図１２のシーケンス図に基づいて作成される、完成したソースコードは図１３に示されるものであるが、現在、図１４に示される作成中のソースコードが進捗計測の対象とされるものとする。具体的に、図１４に示される作成中のソースコードは、作成途中でテストを行なうためにダミーコードが記述されており、完成した図１３のソースコードと比較して、クラス＜Segment＞のメソッド＜getMiddlePoint()＞が仮実装状態となっている。
【００５２】
図１１を参照して、完成度の算出の要求があった場合、シーケンス図解析部１のシーケンス取得部１１は、シーケンス図管理部４より図１２に示されたシーケンス図に基づいたシーケンスデータを読込む。シーケンスデータ読込み後、シーケンス解析部１３において構文解析され（Ｓ００１）、クラス特定部１５においてクラス一覧表が生成される（Ｓ００２）。ステップＳ００１での構文解析の結果、図１２に示されるシーケンス図を構成しているモデル要素であるオブジェクト７〜１１のラベルが解読される。そして、ステップＳ００２ではラベル内のコロンの右側に記述されているすべての文字列から重複を取り除くことにより図１５に示すようなクラス一覧表が生成される。
【００５３】
さらに、設計メッセージ特定部１７において設計済メッセージ一覧表が生成される（Ｓ００３）。ステップＳ００３では、図１２に示されるシーケンス図の活性期間１２〜２１ごとに、関連するメッセージ２２〜３１について、オブジェクト７〜１１のラベルとメソッドとを読取ってメッセージを特定し、それらの関連性を表わすことにより、図１６に示されるような設計済メッセージ一覧表が生成される。
【００５４】
たとえば活性期間１２に関して、メッセージ２６については、設計メッセージ特定部１７において、オブジェクト７のラベルより送信元クラスがクラス＜Test＞、メッセージ２２より送信元メソッドがメソッド＜main()＞、オブジェクト１０のラベルより送信先クラスがクラス＜Segment＞，送信先インスタンスがインスタンス＜s＞、およびメッセージ２６より送信先メソッドがメソッド＜getMiddlePoint()＞と各々読取られ、メッセージ２６が特定される。
【００５５】
なおステレオタイプのメソッド＜＜create＞＞を含むメッセージ２３〜２５はインスタンス生成のための特別なメッセージであるため、これらのメッセージについては送信先インスタンスが特定されない。そこで、設計メッセージ特定部１７はこれらのメッセージについての送信先インスタンスを＊（アスタリスク）とし、送信先クラスを、各々、クラス＜Point＞，＜Point＞，＜Segment＞、送信先メソッドを、各々メソッド＜Point()＞，＜Point()＞，＜Segment()＞と特定する。
【００５６】
他の活性期間１３〜２１に関しても、同様に関連する各メッセージを特定し、一覧表に展開する。メッセージが関連付けられていない活性期間や片方向のメッセージのみと関連付けられている活性期間については一覧表への展開が行なわれない。そのため、図１２に示されるシーケンス図に基づいたシーケンスデータが解析されると、図１６に示されるような、活性期間１２および活性期間１６に関連するメッセージのみが記述された設定済メッセージ一覧表が生成される。
【００５７】
なお、この具体例においては、送信元クラス、送信元メソッド、送信先クラス、送信先インスタンス、および送信先メソッドの５つの要素でメッセージが特定されるものとしてメッセージ一覧表が生成されているが、メッセージを特定する要素は上記５つの要素に限定されず、その他の要素であってもよい。また、上記５つの要素のうちの少なくとも１つの要素で特定されてもよい。
【００５８】
シーケンス図解析部１において上記処理が完了すると、次に、ソースコード解析部２のソースコード取得部２３は、上記ステップＳ００５で生成され、クラス特定結果取得部２１で取得されたクラス一覧表を解読し、記述されているすべてのクラスについて、関連するソースコードをソースコード管理部５から読込む。クラス特定結果取得部２１で図１５に示されるクラス一覧表が取得された場合、ソースコード取得部２３において図１４に示されるソースコードが読込まれる。ソースコード読込み後、解析部２５においてソースコードがクラスごとに構文解析され（Ｓ００４）、実装済メッセージ特定部２７において、newキーワードによるインスタンスの生成に関するステートメントや、インスタンスに対するメソッド呼出しに関するステートメントがソースコードから抽出されることにより、実装済メッセージ一覧表が生成される（Ｓ００５）。図１４に示されるソースコードからは、図１７に示される実装済メッセージ一覧表が生成される。
【００５９】
たとえば図１４を参照して、クラス＜Test＞に関しては、newキーワードによるインスタンスの生成に関するステートメントとしてステートメント＜Point()＞，＜Point()＞，＜Segment()＞が記述され、インスタンスに対するメソッド呼出しに関するステートメントとしてステートメント＜s.getMiddlePoint()＞，＜out.println（）＞が記述されているため、上記ステップＳ００５では実装済メッセージ特定部２７において合計５つの実装済メッセージが抽出される。
【００６０】
なお、newキーワードによるステートメントに関しては送信先インスタンスが特定できないため＊（アスタリスク）とする。また、図１４に示されるソースコードにおいて、インスタンス識別子＜out＞に関しては、ソースコード内で送信先クラスが特定できないためこれも＊（アスタリスク）とする。同様にクラス＜Point＞，＜Segment＞に関しても同様の処理が繰返される。
【００６１】
ソースコード解析部２において上記処理が完了すると、次に、完成度算出部３の設計済メッセージ特定結果取得部３１および実装済メッセージ特定結果取得部３２は、各々、上記ステップＳ００３およびＳ００５で生成された設計済メッセージ一覧表および実装済メッセージ一覧表とを取得し、集合積演算部３３においてそれらの集合積が演算される。その演算結果に基づいて重複メッセージ特定部３４において重複メッセージ一覧表が生成される（Ｓ００６）。図１６に示される設計済メッセージ一覧表および図１７に示される実装済メッセージ一覧表が取得された場合、ステップＳ００６では図１８に示される重複メッセージ一覧表が生成される。
【００６２】
さらに、設計済メッセージ数特定部３６はステップＳ００３で生成された設計済メッセージ一覧表の行数をカウントすることでメッセージ数を求め（Ｓ００７）、重複メッセージ数特定部３５はステップＳ００６で生成された重複メッセージ一覧表の行数をカウントすることでそれぞれのメッセージ数を求め（Ｓ００８）、算出部３７において、ステップＳ００８で得られた重複済みメッセージ数をステップＳ００７で得られた設計済みメッセージ数で除算することにより完成度が算出される（Ｓ００９）。
【００６３】
図１６に示される設計済メッセージ一覧表において設計済メッセージ数が９、図１７に示される重複メッセージ一覧表において重複メッセージ数が５であることから、上記ステップＳ００９において、完成度は５÷９≒０．５６すなわち５６％と算出される。
【００６４】
このように、本実施の形態にかかる実装進捗計測処理においては、最初にシーケンス図解析部１において、シーケンスデータが構文解析されてクラス一覧表および設計済みメッセージ一覧表が生成され、次に、ソースコード解析部２において、シーケンス図解析部１で生成されたクラス一覧表に存在するすべてのクラスのソースコードが構文解析されて実装済みメッセージ一覧表が生成される。そして最後に、完成度算出部３において、上記の両解析部で生成された設計済みメッセージ一覧表と実装済みメッセージ一覧表とから重複メッセージ一覧表が生成されて、重複メッセージ数を設計済みメッセージ数で除算することにより完成度が算出される。
【００６５】
このような処理によって実装進捗が計測されることで、各メソッド内にダミーコードが記述する場合であっても構文解析によってその旨解析され、誤って本来のコードと判別されてしまうことがない。すなわち、上記処理においては、シーケンスデータおよび作成中のソースコードが各々構文解析されてメッセージが抽出されるために、各メソッド内に記述されているコードがダミーコードか本来のコードかを判別することができる。そのため、段階的に機能を実装してテストを繰返して開発を進める反復型の開発プロセスを採用しているプロジェクトに適用した場合に、従来技術と比較してより誤差の小さい完成度を算出することができる。
【００６６】
なお、上記処理においては、完成度を参照するために上記ステップＳ００６で設定済メッセージ一覧表と実装済メッセージ一覧表との集合積が演算されて、メッセージを特定する５つの要素、つまり、実装済メッセージ一覧表に記載されているメッセージのうち、送信元クラス、送信元メソッド、送信先クラス、送信先インスタンス、および送信先メソッドのすべてが、シーケンス図に基づいた設計済メッセージ一覧表と一致したメッセージを重複メッセージとされて、ステップＳ００８でその数をカウントするものとしている。
【００６７】
上記ステップＳ００６およびＳ００８での処理の他の具体例としては、上記５つの要素のうち、少なくとも１つの要素で所定範囲まで不一致を許容し、その不一致度合いを重複メッセージ数に反映させる処理が挙げられる。
【００６８】
具体的には、不一致を許容する要素として「送信先メソッド」とし、不一致を許容する範囲を送信先メソッド名に関して「１文字違い」または「隣合う２文字の入替わり」とし、この不一致が許容された重複メッセージについての重複メッセージ数として０．８として上記処理を行なうことができる。メソッド名はクラス名やインスタンス名などの他の識別子と比較して長いものが多いため、設計時のタイプミス等の可能性が他の識別子と比較して多くなる。そのため、不一致を許容する要素、範囲として上記設定が好ましい。
【００６９】
たとえば、設定済メッセージとして図１９（Ａ）に示される設定済メッセージ一覧表が生成され、実装済メッセージとして図１９（Ｂ）に示される実装済メッセージ一覧表が生成されている場合、送信先メソッド名が１文字異なるのみであるので「ｅ」のタイプミスと考えられ、上記設定に従ってステップＳ００８ではこのメッセージについて重複済メッセージ数０．８として計上される。
【００７０】
また、実装済メッセージとして図１９（Ｃ）に示される実装済メッセージ一覧表が生成されている場合、送信先メソッド名の隣合う２文字である「ｉ」と「ｅ」とが入替わっておりタイプミスと考えられ、上記設定に従ってステップＳ００８ではこのメッセージについて重複済メッセージ数０．８として計上される。
【００７１】
このような不一致に関する設定は、予め設定されているものであってもよいし、実装進捗計測処理を実行するテスト担当者によって設定されるものであってもよい。また、上記設定は１つの具体例であって、他の要素について不一致が許容されてもよいし、上記範囲以外まで不一致が許容されてもよいし、不一致が許容された重複メッセージについての重複メッセージ数として他の数値がカウントされてもよい。
【００７２】
このように不一致をある程度許容して完成度を算出することで、プログラム開発により有用な完成度を算出することが可能になる。
【００７３】
以上の処理の結果、実装進捗が計測されると、その結果が完成度レポート生成および出力部３８において生成されて、出力される。なお、シーケンス図が複数存在する場合には、シーケンス図ごとに上記処理が実行されて、シーケンス図ごとに複数の完成度が算出されて、複数の完成度を提示するレポートが生成されてもよい。さらにシーケンス図ごとに算出されたすべての完成度の幾何平均を求めて、複数のシーケンス図からなるソフトウェア全体の完成度が算出されてもよい。
【００７４】
図２０は出力される完成度レポートの具体例を示す図であり、図２０（Ａ）は、完成度レポートの第１の具体例として、複数のシーケンス図１〜４についての完成度、およびそれら複数のシーケンス図１〜４からなるソフトウェア全体の完成度を提示する完成度レポートの具体例を示す図である。
【００７５】
また、図２０（Ｂ）は、完成度レポートの第２の具体例として、シーケンス図およびクラスごとの完成度がマトリクス表示で提示する完成度レポートの具体例を示す図である。１つのプログラムは、通常、１つ以上のシーケンスと１つ以上のクラスとで構成され、シーケンスはプログラムを「機能」の視点で分割したもの、クラスはプログラムを「構造」の視点で分割したものに該当する。一般的に、プログラムの開発はクラス単位で行なわれ、プログラムのテストはシーケンス単位で行なわれる。そのため、開発担当者にとってはクラス単位の完成度が重要となり、テスト担当者にとってはシーケンス単位の完成度が重要となり、管理担当者にとっては全体の完成度が重要となる。そのため、シーケンス図およびクラスごとに完成度が算出されて提示されることが好ましい。
【００７６】
なお、図２０（Ｂ）に示される完成度Ａについては、
（クラスＡの実装済みメッセージとシーケンス１の設計済みメッセージとの重複メッセージの数）÷（シーケンス１の設計済みメッセージのクラスＡに関するメッセージ数）
で算出される。
【００７７】
また、完成度Ｂについては、
（クラスＡ，Ｂ，Ｃの実装済みメッセージとシーケンス１の設計済みメッセージとの重複メッセージの数）÷（シーケンス１の設計済みメッセージの数）
で算出される。
【００７８】
また、完成度Ｃについては、
（クラスＡの実装済みメッセージとシーケンス１，２，３の設計済みメッセージとの重複メッセージの数）÷（シーケンス１，２，３の設計済みメッセージの数）
で算出される。
【００７９】
また、完成度Ｄについては、
（クラスＡ，Ｂ，Ｃの実装済みメッセージとシーケンス１，２，３の設計済みメッセージとの重複メッセージの数）÷（シーケンス１，２，３の設計済みメッセージの数）
で算出される。
【００８０】
さらに、上述の実装進捗計測装置１００において実行される実装進捗計測処理を、プログラムとして提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）およびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【００８１】
なお、本発明にかかるプログラムは、コンピュータのオペレーションシステム（ＯＳ）の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずＯＳと協働して処理が実行される。このようなモジュールを含まないプログラムも、本発明にかかるプログラムに含まれ得る。
【００８２】
また、本発明にかかるプログラムは他のプログラムの一部に組込まれて提供されるものであってもよい。その場合にも、プログラム自体には上記他のプログラムに含まれるモジュールが含まれず、他のプログラムと協働して処理が実行される。このような他のプログラムに組込まれたプログラムも、本発明にかかるプログラムに含まれ得る。
【００８３】
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
【００８４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００８５】
【図１】実装進捗計測装置１００を含む実装進捗計測システムの構成の具体例を示す図である。
【図２】実装進捗計測装置１００の機能構成、およびサーバ２００，３００の機能構成の具体例を示すブロック図である。
【図３】シーケンス図の具体例を示す図である。
【図４】ＸＭＩ形式のテキストデータで出力されたシーケンス図の具体例を示す図である。
【図５】シーケンス図解析部１の構成を示すブロック図である。
【図６】ソースコード解析部２の構成を示すブロック図である。
【図７】ＪａｖａＭＬ形式のソースコードの具体例を示す図である。
【図８】ＪａｖａＭＬ形式のソースコードが解析されて得られる構文木の具体例を示す図である。
【図９】実装済メッセージ特定部２７の構成の具体例を示すブロック図である。
【図１０】完成度算出部３の構成を示すブロック図である。
【図１１】実装進捗計測処理の流れを表わしたフローチャートである。
【図１２】シーケンス図の具体例を示す図である。
【図１３】完成したソースコードの具体例を示す図である。
【図１４】作成中のソースコードの具体例を示す図である。
【図１５】クラス一覧表の具体例を示す図である。
【図１６】設計済メッセージ一覧表の具体例を示す図である。
【図１７】実装済メッセージ一覧表の具体例を示す図である。
【図１８】重複メッセージ一覧表の具体例を示す図である。
【図１９】設定済メッセージ一覧表および実装済メッセージ一覧表の具体例を示す図である。
【図２０】完成度レポートの具体例を示す図である。
【符号の説明】
【００８６】
１  シーケンス図解析部、２  ソースコード解析部、３  完成度算出部、４  シーケンス図管理部、５  ソースコード管理部、１１  シーケンス取得部、１３  シーケンス解析部、１５  クラス特定部、１７  設計済メッセージ特定部、１９  解析結果出力部、２１  クラス特定結果取得部、２３  ソースコード取得部、２５  解析部、２７  実装済メッセージ特定部、２９  解析結果出力部、３１  設計済メッセージ特定結果取得部、３２  実装済メッセージ特定結果取得部、３３  集合積演算部、３４  重複メッセージ特定部、３５  重複メッセージ数特定部、３６  設計済メッセージ数特定部、３７  算出部、３８  完成度レポート生成および出力部、１００  実装進捗計測装置、２００，３００  サーバ、２７１  クラス抽出部、２７３  メソッド抽出部、２７５  メッセージ抽出部。
【図１】
2007287045.tif 000003
【図２】
2007287045.tif 000004
【図３】
2007287045.tif 000005
【図４】
2007287045.tif 000006
【図５】
2007287045.tif 000007
【図６】
2007287045.tif 000008
【図７】
2007287045.tif 000009
【図８】
2007287045.tif 000010
【図９】
2007287045.tif 000011
【図１０】
2007287045.tif 000012
【図１１】
2007287045.tif 000013
【図１２】
2007287045.tif 000014
【図１３】
2007287045.tif 000015
【図１４】
2007287045.tif 000016
【図１５】
2007287045.tif 000017
【図１６】
2007287045.tif 000018
【図１７】
2007287045.tif 000019
【図１８】
2007287045.tif 000020
【図１９】
2007287045.tif 000021
【図２０】
2007287045.tif 000022