(57)【要約】【課題】既存プログラムを利用して効率的にプログラム開発を行えるソースコード及びプログラム仕様管理システムを提供する。【解決手段】プログラム仕様を管理するリポジトリと、プログラム仕様のコメント記述をともなったソースコードだけを前記リポジトリに登録するソースファイル登録手段と、ソースファイル中に含まれる関数又はクラスのプログラム仕様を解析して、ソースコードにプログラム仕様のコメント記述がともなっているか否かを判定するためのソースファイル解析手段と、作成するプログラムの外部仕様を基にその外部仕様と似通った外部仕様のプログラムを検出して提示する類似プログラム提示手段と、作成するプログラムの処理内容の記述である内部仕様を基に処理を実装するために利用可能な関数又はクラス群を提示する利用可能プログラム提示手段とを有することを特徴とする。【選択図】図１
2015064630.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードの関数又はクラスに関するコメント記述としてのプログラム仕様を含むソースファイルを登録するリポジトリと、前記リポジトリに登録されたソースファイルのプログラム仕様を外部仕様と内部仕様に分けて管理するデータベースと、サーバとを備えた、ソースコード及びプログラム仕様を管理するためのシステムであって、
前記サーバが、
登録対象のソースファイルを解析することにより、コメント記述としてのプログラム仕様を含む新規関数又はクラスを抽出し、抽出した新規関数又はクラスの各々のプログラム仕様からプログラム外部仕様とプログラム内部仕様を取得するソースファイル解析手段と、
取得した新規関数又はクラスのプログラム外部仕様と、前記リポジトリ及び前記データベースに登録及び管理されている既存関数又はクラスのプログラム外部仕様とを比較することにより、互いに等しい部分の比率である類似度が所定の閾値を超える既存関数又はクラスが存在する場合は、当該既存関数又はクラスを当該新規関数又はクラスの類似プログラムと判定する類似プログラム提示手段と、を備え
前記類似プログラムが存在しない場合は、前記登録対象のソースファイルを前記リポジトリに登録するとともにそのプログラム仕様を前記データベースにより管理することを特徴とする
ソースコード及びプログラム仕様を管理するためのシステム。
【請求項２】
前記サーバがさらに、
前記類似プログラムが存在しない場合であって、かつ前記新規関数又はクラスがプログラム仕様のみを含む場合に、取得した新規関数又はクラスのプログラム内部仕様と、前記リポジトリ及び前記データベースに登録及び管理されている既存関数又はクラスのプログラム内部仕様とを比較することにより、互いに等しい部分の比率である利用可能度が所定の閾値を超える既存関数又はクラスが存在する場合は、当該既存関数又はクラスを当該新規関数又はクラスの利用可能プログラムと判定する利用可能プログラム提示手段を備えたことを特徴とする
請求項１に記載のソースコード及びプログラム仕様を管理するためのシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、開発中のソフトウェアのソースコード及びプログラム仕様を管理するソースコード及びプログラム仕様管理システムに関し、特に、コードを記述する前に重複コードを作りこむ可能性を指摘する機能と利用できるライブラリをユーザに提示する機能とを持つソースコード及びプログラム仕様管理システムに関する。
【背景技術】
【０００２】
ソフトウェアの開発を行うプロジェクトにおいて、作成済みのソースコードは、専用のリポジトリに格納して構成管理を行うのが一般的である。ソースコードの構成管理リポジトリを構築するシステムの例としては、CVS(Concurrent Versions System)やSubversionが知られている。
【０００３】
また、プログラム仕様をソースファイルに規定のフォーマットでコメント記述し、ツールによって容易に文書化できる。ソースファイルのコメントから文書化するツールには、Java(登録商標)docやDoxygenなどがある。
【０００４】
また、ソフトウェア開発においては、同じような機能が重複開発されることを防ぐために、設計工程にて共通化のプロセスを設けることが望ましい。共通化のプロセスにて、複数箇所で重複すると予想される機能を前もって洗い出し、それらを共通機能として整理しておくことで、実装工程での共通機能の重複開発を防止できる。
【０００５】
例えば、特許文献１では、複数の個別機能に同一の処理要素が含まれる場合、その処理要素を共通機能として切り出し管理することにより、ソフトウェアのコーディング作業を効率的に行えるプログラムを提示している。
【０００６】
十分に共通化されたソフトウェアは、そのソースコード内に無駄な重複が存在しないため、変更が必要になった時でも最小限の変更で済む上、さらには共通的な機能が整理されるのでそれらを部品化して以後の再利用に生かしやすい、といった利点がある。
【０００７】
ところが、開発者間の情報共有不足によって、同じような機能の関数やクラスを作成してしまうことがある。また、開発者の知識不足によって、既存のライブラリで実現できる処理をコーディングしてしまうことがある。このような重複コードが存在することにより、ソースコードが必要以上に肥大化し、その後のレビューや試験、バグ修正に要する作業工数が増加するという問題が生じる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００３−２７１３８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、ソースコードの共通化は、将来の変更や再利用への対応を容易にすることによりソフトウェアの長期的な改修・保守コストの削減効果がある一方、ソフトウェアの外部仕様には特に影響を及ぼさない。共通化を実施しなかったとしても、要求通りの外部仕様を満たすソフトウェアを作り上げることは可能である。よって、ソフトウェア開発の現場では、共通化というプロセスが省略されてしまうケースが多く、その結果、長期的な改修・保守コストが増大しているという問題がある。
【００１０】
また、作成済みのソースコードの共通化を実施する際には、ソースコードを修正して重複コードを整理していく作業を各開発者が実施することとなる。この作業工数は作り込んだ重複コードの量に比例して増加する。
【００１１】
また、ツールにより重複コード検出の作業工数を短縮できたとしても、そもそもの重複コードを作成した作業工数は無駄である。共通化に精通していない開発者が最初から共通化されたソースコードを作成するのは困難であるため、重複コードを多く作り込んでしまい、それだけ無駄な作業工数をソースコード作成に費やしてしまう。
【００１２】
また、誰もが利用したいような機能は誰かが既に作成しているはずである。しかし、既存ライブラリや開発プラットフォームに精通していない開発者は、苦労してその機能を自作し、そしてバグを作り込むこととなる。
【００１３】
本発明の目的は、開発者にソースコードのプログラム仕様のコメント記述を確実に実施させることができ、かつ、プログラム外部仕様登録時に同じような機能の関数やクラスが既にあることを指摘することによって新たに作成させないようにでき、かつ、プログラム内部仕様登録時に機能実現に有用な既存の関数やクラス、ライブラリを開発者に提示できるソースコード及びプログラム仕様管理システムを提供することにある。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明は、以下の構成を提供する。
本発明の態様は、ソースコードの関数又はクラスについてのコメント記述としてのプログラム仕様を含むソースファイルを登録するリポジトリと、前記リポジトリに登録されたソースファイルのプログラム仕様を外部仕様と内部仕様に分けて管理するデータベースと、サーバとを備えた、ソースコード及びプログラム仕様を管理するためのシステムであって、
前記サーバが、
登録対象のソースファイルを解析することにより、コメント記述としてのプログラム仕様を少なくとも含む新規関数又はクラスを抽出し、抽出した新規関数又はクラスの各々のプログラム仕様からプログラム外部仕様とプログラム内部仕様を取得するソースファイル解析手段と、
取得した新規関数又はクラスのプログラム外部仕様と、前記リポジトリ及び前記データベースに登録及び管理されている既存関数又はクラスのプログラム外部仕様とを比較することにより、互いに等しい部分の比率である類似度が所定の閾値を超える既存関数又はクラスが存在する場合は、当該既存関数又はクラスを当該新規関数又はクラスの類似プログラムと判定する類似プログラム提示手段と、を備え
前記類似プログラムが存在しない場合は、前記登録対象のソースファイルを前記リポジトリに登録するとともにそのプログラム仕様を前記データベースにより管理することを特徴とする。
【００１５】
上記態様において、前記サーバがさらに、
前記類似プログラムが存在しない場合であって、かつ前記新規関数又はクラスがプログラム仕様のみを含む場合に、取得した新規関数又はクラスのプログラム内部仕様と、前記リポジトリ及び前記データベースに登録及び管理されている既存関数又はクラスのプログラム内部仕様とを比較することにより、互いに等しい部分の比率である利用可能度が所定の閾値を超える既存関数又はクラスが存在する場合は、当該既存関数又はクラスを当該新規関数又はクラスの利用可能プログラムと判定する利用可能プログラム提示手段を備えている。
【発明の効果】
【００１６】
本発明のソースコード及びプログラム仕様管理システムを用いると、開発者にソースコードのプログラム仕様のコメント記述を確実に実施させることができ、かつ、プログラム外部仕様登録時に同じような機能の関数やクラスが既にあることを指摘することによって新たに作成させないようにでき、かつ、プログラム内部仕様登録時に機能実現に有用な既存の関数やクラス、ライブラリを開発者に提示できる。
【００１７】
よって、本発明のソースコード及びプログラム仕様管理システムによれば、次のような効果がある。
（１） ソースコード作成前に、類似した外部仕様のプログラムを参照でき、共通化が必要であることを認識できるため、コーディングしてから共通化作業をするという手戻りが無く、コーディングの作業工数の短縮という効果がある。
（２） 既存ライブラリや開発プラットフォームに精通していない開発者であっても、ソースコード作成前に機能を実現するのに利用可能な既存プログラムを参照できるため、無駄に重複コードを作成しなくて済む。よって、コーディングやその後のレビュー、試験などに要する作業工数の短縮や、コーディング時に混入するバグの減少という効果がある。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の一実施形態例を示すシステム構成図である。
【図２】図２は、ソースファイルの登録手順を示すフローチャートである。
【図３】図３は、ソースファイル解析手順を示すフローチャートである。
【図４】図４は、ソースファイル内にコメント記述されたプログラム仕様の一例を示す図である。
【図５】図５は、関数又はクラス及びそのプログラム仕様の一覧の一例を示す図である。
【図６】図６は、類似プログラムの提示手順を示すフローチャートである。
【図７】図７は、類似プログラム一覧の一例を示す図である。
【図８】図８は、利用可能プログラムの提示手順を示すフローチャートである。
【図９】図９は、利用可能プログラム一覧の一例を示す図である。
【発明を実施するための形態】
【００１９】
以下に、本発明を実施するための形態を、一例を示した図面に基づいて説明する。
図１は、本発明の実施の形態の一例を示すシステム構成図である。
本発明のソースコード及びプログラム仕様管理システムは、ユーザから受信したソースファイルを処理するサーバ１０１、ユーザが操作する複数のクライアント端末１０２、開発中のソフトウェアのソースファイルを管理するリポジトリ１０３、既存ライブラリのプログラム仕様を管理するライブラリ仕様ＤＢ１０４から構成されている。
【００２０】
サーバ１０１は、ソースコード及びプログラム仕様が記述されたソースファイルのリポジトリ１０３への登録処理を実行するソースファイル登録手段１０５、ソースファイルを解析するソースファイル解析手段１０６、解析に基づいてソースファイル中にコメント記述されたプログラム仕様と類似する外部仕様をもつプログラムをユーザに提示するための類似プログラム提示手段１０７、解析に基づいてソースファイル中にコメント記述されたプログラムの処理内容に関する内部仕様を基に処理を実装するために利用可能な関数又はクラス群を提示する利用可能プログラム提示手段１０８を備えるものとする。
【００２１】
図２は、ソースファイル登録手段１０５による、リポジトリ１０３へのソースファイルの登録手順を示すフローチャートである。
ステップ２０１では、クライアント端末１０２より、登録対象のソースファイル一式を受信する。
【００２２】
ステップ２０２では、ソースファイル解析手段１０６を起動して、ソースファイルの解析を実行し、新規関数又はクラス及びそのプログラム仕様の一覧を受信する。ステップ２０３では、受信した一覧に新規関数又はクラスがあるか否かを判定する。新規関数又はクラスがない場合はステップ２０７へ進む。一方、新規関数又はクラスがある場合はステップ２０４へ進む。ステップ２０４では、受信した一覧にプログラム仕様がなくソースコードのみの新規関数又はクラスがあるか否かを判定する。ソースコードのみの新規関数又はクラスがある場合はステップ２０７へ進む。ステップ２０７では、登録不可の通知をクライアント端末１０２に送信し、処理を終了する。一方、ソースコードのみの新規関数又はクラスがない場合はステップ２０５へ進む。
【００２３】
ステップ２０５では、類似プログラム提示手段１０７を起動して、類似プログラムの有無を受信する（図６で詳述する）。ステップ２０６では、受信した結果を基に類似プログラムの有無を判定する。類似プログラムがある場合はステップ２０７へ進む。ステップ２０７では、登録不可の通知をクライアント端末１０２に送信し、処理を終了する。一方、類似プログラムがない場合はステップ２０８へ進む。
【００２４】
ステップ２０８では、受信した新規関数又はクラス及びそのプログラム仕様の一覧に、ソースコードの実装がなくプログラム仕様のみの新規関数又はクラスがあるか否かを判定する。プログラム仕様のみの新規関数又はクラスがない場合はステップ２１１へ進む。ステップ２１１では、登録可の通知をクライアント端末１０２に送信する。ステップ２１２では、リポジトリ１０３へ登録対象のソースファイルを格納し、処理を終了する。一方、プログラム仕様のみの新規関数又はクラスがある場合はステップ２０９へ進む。
【００２５】
ステップ２０９では、利用可能プログラム提示手段を起動して、プログラム仕様のみで登録するか否かを受信する（図８で詳述する）。ステップ２１０では、受信した結果をもとにプログラム仕様のみで登録するか否かを判定する。プログラム仕様のみで登録する場合はステップ２１２へ進む。プログラム仕様のみで登録しない場合は、処理を終了する。
【００２６】
図３は、ソースファイル解析手段１０６による、ソースファイル解析の手順を示すフローチャートである。
ステップ３０１では、解析対象のソースファイル一式を受信する。ステップ３０２では、ステップ３０１で取得したソースファイル全体を解析し、新規の関数又はクラスを全て洗い出す、すなわち抽出する。ステップ３０３では、抽出した全ての新規関数又はクラスのプログラム仕様を、外部仕様と内部仕様に分割する。最後に、ステップ３０４では、新規関数又はクラス及びそのプログラム仕様の一覧を、解析結果として返却する。
【００２７】
図４は、ソースファイル解析手段１０６が解析対象とする、ソースファイル内にコメント記述されたプログラム仕様の一例を示す図である。
プログラム仕様４０１は、解析対象のソースファイルの内容を示す情報である。図４の例において、プログラム外部仕様コメント４０２と関数定義４０３がこのプログラムの外部仕様に該当する。また、図４の例において、プログラム内部仕様コメント４０４がこのプログラムの内部仕様に該当する。
【００２８】
図５は、ソースファイル解析手段１０６が解析結果として返却する、新規関数又はクラス及びそのプログラム仕様の一覧の一例を示す図である。
関数又はクラス名５０１は、ソースファイル内に記述されている関数又はクラスの名称である。プログラム外部仕様５０２は、関数又はクラス名５０１に記載されている関数又はクラスの外部仕様である。プログラム内部仕様５０３は、関数又はクラス名５０１に記載されている関数又はクラスの内部仕様である。
【００２９】
図６は、類似プログラム提示手段１０７による、類似プログラムの提示手順を示すフローチャートである。
ステップ６０１では、ソースファイル解析結果として図５に示した新規関数又はクラス及びそのプログラム外部仕様の一覧を取得する。ステップ６０２では、リポジトリ及びライブラリ仕様ＤＢから既存関数又はクラス及びそのプログラム外部仕様の一覧を取得する。
【００３０】
ステップ６０３では、新規関数又はクラスのプログラム外部仕様と既存関数又はクラスのプログラム外部仕様を比較して、類似プログラム一覧を作成する。ステップ６０４では、互いのプログラム外部仕様の等しい部分の比率から、プログラム類似度を算出する。ステップ６０５では、プログラム類似度が予め設定された閾値を超えているプログラム以外を類似プログラム一覧から削除する。ステップ６０６では、類似プログラム一覧にプログラムが残っているかを判定し、残っている場合はステップ６０７へ進む。ステップ６０７では、類似プログラム一覧をクライアント端末１０２に送信し、利用可能な類似プログラムが類似プログラム一覧に存在するか否かを返信することを要求するメッセージとともにユーザに提示する。ステップ６０８では、利用可能な類似プログラムの有無をクライアント端末１０２から受信する。ステップ６０３〜ステップ６０８は、ステップ６０１でソースファイル解析結果から取得した各々の新規関数又はクラスについて繰り返し実施するものとする。
ステップ６０９では、利用可能な類似プログラムの有無の全てを返却する。
【００３１】
ユーザは、ステップ６０７の提示結果を見て、新たにプログラムを作成しなくとも既存の類似プログラムを利用もしくは改造することで機能実現が可能であることを知ることができる。
【００３２】
図７は、類似プログラム提示手段１０７がユーザに提示する、類似プログラム一覧の一例を示す図である。
比較項目７０１は、プログラム外部仕様の中で比較対象とする項目の名称である。新規関数又はクラスのプログラム外部仕様７０２は、ソースファイル解析手段１０６の解析結果である、図５に示した新規関数又はクラス及びそのプログラム仕様の一覧におけるプログラム外部仕様である。類似プログラム外部仕様７０３は、新規関数又はクラスのプログラム外部仕様７０２と類似プログラムの外部仕様である。
【００３３】
図８は、利用可能プログラム提示手段１０８による、利用可能プログラムの提示手順を示すフローチャートである。
ステップ８０１では、プログラム仕様のみの新規関数又はクラス及びそのプログラム内部仕様の一覧をソースファイル解析結果から取得する。ステップ８０２では、リポジトリ及びライブラリ仕様ＤＢから既存関数又はクラス及びそのプログラム内部仕様の一覧を取得する。
【００３４】
ステップ８０３では、プログラム仕様のみの新規関数又はクラスのプログラム内部仕様と既存関数又はクラスのプログラム内部仕様を比較して、利用可能プログラム一覧を作成する。ステップ８０４では、互いのプログラム内部仕様の等しい部分の比率から、プログラム利用可能度を算出する。ステップ８０５では、プログラム利用可能度が予め設定された閾値を超えているプログラム以外を利用可能プログラム一覧から削除する。ステップ８０６では、利用可能プログラム一覧にプログラムが残っているか判定し、残っている場合はステップ８０７へ進む。ステップ８０７では、利用可能プログラム一覧をクライアント端末１０２に送信し、既存プログラムの利用を推進するメッセージとともにユーザに提示する。ステップ８０３〜ステップ８０７は、ステップ８０１でソースファイル解析結果から取得した各々のプログラム仕様のみの新規関数又はクラスについて繰り返し実施するものとする。
【００３５】
ユーザは、ステップ８０７の提示結果を見て、既存のプログラムを利用することで作成予定の機能を実現することが可能であることを知ることができる。
【００３６】
ステップ８０８では、プログラム仕様のみでソースファイルを登録するかを返信することを要求するメッセージをクライアント端末１０２に送信する。ステップ８０９では、プログラム仕様のみでソースファイルを登録するかをクライアント端末１０２から受信する。ステップ８１０では、プログラム仕様のみでソースファイルを登録するかを返却する。
【００３７】
図９は、利用可能プログラム提示手段１０８がユーザに提示する、利用可能プログラム一覧の一例を示す図である。
新規関数又はクラスのプログラム内部仕様９０１は、ソースファイル解析手段１０６の解析結果である、図５に示した新規関数又はクラス及びそのプログラム仕様の一覧におけるプログラム内部仕様である。利用可能プログラム説明９０２は、新規関数又はクラスのプログラム内部仕様９０１の項目と類似のプログラム内部仕様である。利用可能プログラム関数又はクラス名９０３は、新規関数又はクラスのプログラム内部仕様９０１の項目と類似のプログラム内部仕様の関数名もしくはクラス名である。
【符号の説明】
【００３８】
１０１  サーバ
１０２  クライアント
１０３  リポジトリ
１０４  ライブラリ仕様ＤＢ
１０５  ソースファイル登録手段
１０６  ソースファイル解析手段
１０７  類似プログラム提示手段
１０８  利用可能プログラム提示手段
【図１】
2015064630.tif 000003
【図２】
2015064630.tif 000004
【図３】
2015064630.tif 000005
【図４】
2015064630.tif 000006
【図５】
2015064630.tif 000007
【図６】
2015064630.tif 000008
【図７】
2015064630.tif 000009
【図８】
2015064630.tif 000010
【図９】
2015064630.tif 000011