(57)【特許請求の範囲】
【請求項１】
メモリと、
前記メモリに格納されたソフトウェアを実行する演算処理装置と、を有し、
前記メモリは、外部電子制御装置向けに開発されたベースプログラムと前記ベースプログラムからそれぞれ変更された複数の派生プログラムとに基づいて、プログラム間の差分を抽出するための差分抽出部を格納し、
前記差分抽出部は、前記ベースプログラムと前記複数の派生プログラムとの差分を抽出するベース・派生間差分抽出部と、
前記複数の派生プログラム同士の差分を抽出する派生・派生間差分抽出部と、を有し、
前記差分抽出部は、前記ベースプログラムおよび前記複数の派生プログラムに基づいて、プログラム間差分を数値化して編集距離として演算する距離演算部を有し、
前記メモリは、前記プログラム間差分に基づいて、前記ベースプログラムと複数の前記派生プログラム同士の変更相違度を算出する変更相違度演算部を格納することを特徴とするプログラム開発装置。
【請求項２】
前記変更相違度演算部は、前記ベースプログラムと前記複数の派生プログラム中の第１の前記派生プログラムとの編集距離と、前記ベースプログラムと前記複数の派生プログラム中の第２の前記派生プログラムとの編集距離と、前記第１の前記派生プログラムと前記第２の前記派生プログラムとの編集距離と、を三辺とする三角形において、前記ベースプログラムを頂点とする内角の角度を変更相違度として求めることを特徴とする請求項１記載のプログラム開発装置。
【請求項３】
前記距離演算部は、少なくとも前記編集距離をレーベンシュタイン距離として求めるレーベンシュタイン距離演算部と、
前記編集距離をハミング距離として求めるハミング距離演算部と、のうち少なくともいずれか一つを有することを特徴とする請求項１記載のプログラム開発装置。
【請求項４】
前記変更相違度と前記ベースプログラムと前記複数の派生プログラムとに基づいて、前記ベースプログラムの更新を行う変更内容反映部を有することを特徴とする請求項１記載のプログラム開発装置。
【請求項５】
前記変更内容反映部は、前記変更相違度に基づいてベースプログラムを変更するか否かを判定する反映判定部と、前記編集距離と前記ベースプログラムと前記複数の派生プログラムとに基づいて前記ベースプログラムの変更を実施するベースソフト変更部と、を有することを特徴とする請求項４記載のプログラム開発装置。
【請求項６】
前記反映判定部は、前記変更相違度と相違度閾値の大小関係に基づいて、ベースプログラムを変更するか否かを判定することを特徴とする請求項５記載のプログラム開発装置。
【請求項７】
前記変更内容反映部は、前記相違度閾値を保存する相違度閾値保存部を有することを特徴とする請求項６記載のプログラム開発装置。
【請求項８】
前記ベースソフト変更部は、前記ベースプログラムと、複数の派生ソフトウェアの中で編集距離が最も小さい派生プログラムとを置換することを特徴とする請求項７記載のプログラム開発装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの開発を支援するプログラム開発装置およびそれにより開発した電子制御装置に関するものである。
【背景技術】
【０００２】
自動車、建設機械等の技術分野では、いわゆる組込みシステムによって制御対象を制御する、電子制御装置が用いられている。組込みシステムは、従来の機械的機構や電気回路による方式に比べて柔軟かつ高度な制御が実現できること、プログラムの部分的な変更によって多くの派生製品を開発できることが利点として挙げられる。
【０００３】
このような電子制御装置、例えばエンジン制御装置では、吸入空気量やアクセル開度などのセンサ値を取得する入力処理や、スロットル開度や燃料噴射量を制御するアクチュエータを駆動するための出力処理、電子制御装置間でのデータ交換を行うための通信処理が必要となる。その一方で、電子制御装置に求められる機能がエンジン、車種ごとに異なるため、ベースとなるプログラムを部分的に変更することによって、派生プログラムを開発する。
【０００４】
その一方で、車種の増加や、車両販売先地域の増加に伴って、派生プログラムの数が増大し、ベースプログラムの更新が困難になるという課題がある。
【０００５】
例えばベースプログラムＯに基づいて派生プログラムＡを、続いて派生プログラムＡに基づいて派生プログラムＢを開発した場合に、さらに派生プログラムＣを開発する場合を考える。
【０００６】
派生プログラムＡで実現されている新規機能を派生プログラムＣで利用したい場合、派生プログラムＣをベースプログラムＯから開発しようとすると、派生プログラムＡで実現済みの新規機能をベースプログラムＯに追加するための再開発をしなければならず、開発効率の低下を招くという課題がある。
【０００７】
一方で、派生プログラムＡを改造して派生プログラムＣを開発しようとすると、派生プログラムＡ固有の要求を実現している部分をベースプログラムＯ相当に戻さなければならず、やはり開発効率の低下を招くという課題がある。
【０００８】
すなわち、ベースプログラムに基づいた派生プログラムの開発において、ベースプログラムに追加すべき、各派生プログラムに共通的な変更箇所を抽出するとともに、共通的な変更箇所を反映してベースプログラムを更新することが必要不可欠である。
【０００９】
下記特許文献１には、プログラムのソースコード間の類似度を算出する類似度評価装置の例が示されている。参照ソースコードと複数の対象ソースコードの相関とから類似度を算出する。
【００１０】
下記特許文献２には、派生製品開発時に、同時に再利用または変更すべきソフト部品を効率的に選択できるよう支援するプログラム分析装置の例が示されている。過去のプログラムの開発実績及び変更実績に基づいて、プログラム部品間の同時利用関係および同時変更関係を抽出する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００８−４６６９５号公報
【特許文献２】特開２０１０−１１３４４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上記特許文献１に記載された技術では、参照ソースコードと複数の対象ソースコードとの類似性は評価できるが、対象ソースコード間での類似性を評価することができない。したがって、ベースプログラムに基づいた派生プログラムの開発への適用を考えた場合に、各派生プログラム同士で共通的な変更箇所と、共通しない変更箇所とを区別して抽出することが出来ない。
【００１３】
上記特許文献２に記載された技術では、プログラム部品間での変更の同時発生は評価できるが、あるプログラム部品における複数の派生製品を横断しての変更の内容の共通性を評価できない。
【００１４】
本発明は、上記のような課題を解決するためになされたものであり、電子制御装置向けプログラムの開発において、ベースとなるプログラムを部分的に変更して開発された複数の派生プログラムの共通変更箇所を抽出可能なプログラム開発支援装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明に係るプログラム開発支援装置は、ベースプログラムと派生プログラムとの差分抽出部と、複数の派生プログラム同士の差分抽出部を有する。また、ベースプログラムと派生プログラムとの差分と、複数の派生プログラム同士の差分とに基づいて、派生プログラムに加えられた変更の相違度を演算する変更相違度演算部を有する。
【発明の効果】
【００１６】
本発明に係るプログラム開発支援装置によれば、派生プログラム開発によって実現された共通的な変更内容を抽出し、ベースプログラムを更新することができる。
【図面の簡単な説明】
【００１７】
【図１】実施の形態１に係るプログラム開発支援装置１の構成図である。
【図２】派生プログラム開発の概念を示す図である。
【図３】派生プログラム開発におけるベースプログラム２１および派生プログラム３１、派生プログラム３２の構成を示す図である。
【図４】ソースコード２１１の変更内容を示す図である。
【図５】ソースコード２１２の変更内容を示す図である。
【図６】ソースコード２１３の変更内容を示す図である。
【図７】ソースコード２１４の変更内容を示す図である。
【図８】ソースコード２１５の変更内容を示す図である。
【図９】ソースコード３１６の変更内容を示す図である。
【図１０】変更内容評価部１１の構成を示す図である。
【図１１】派生プログラムリスト１１２４の構成を示す図である。
【図１２】ソースコードリスト１１２５の構成を示す図である
【図１３】ベース-派生間差分抽出部１１２１において実行されるベース-派生間差分抽出フローを示す図である。
【図１４】派生-派生間差分抽出部１１２２において実行される派生-派生間差分抽出フローを示す図である。
【図１５】距離演算部１１２３の構成を示す図である。
【図１６】変更差分データ１１３の構成を示す図である。
【図１７】変更相違度データ１４の構成を示す図である。
【図１８】変更相違度計算方式の概念を示す図である。
【図１９】ソースコード２１１の変更相違度を示す図である。
【図２０】ソースコード２１２の変更相違度を示す図である。
【図２１】ソースコード２１３の変更相違度を示す図である。
【図２２】ソースコード２１４の変更相違度を示す図である。
【図２３】ソースコード２１５の変更相違度を示す図である。
【図２４】ソースコード３１６の変更相違度を示す図である。
【図２５】変更内容反映部１２の構成を示す図である。
【図２６】反映判定部１２１において実行される反映判定フローを示す図である。
【図２７】ベースプログラム変更部１２２において実行されるベースプログラム変更フローを示す図である。
【図２８】変更されたベースプログラム２２の構成を示す図である。
【図２９】本発明を適用した派生プログラム開発の概念を示す図である。
【発明を実施するための形態】
【００１８】
図１は、本発明の実施の形態に係るプログラム開発支援装置及びそれにより開発した電子制御装置７の構成図である。
【００１９】
プログラム開発支援装置１は、製品開発に再利用されるベースプログラムを保存するベースプログラムデータベース（ＤＢ）２と、製品向けに開発された複数の派生プログラムを保存する派生プログラムＤＢ３と、開発支援にかかわる処理を実行するコンピュータ４と、プログラム開発支援装置の実行状況をユーザに提示する表示装置５と、プログラム開発支援装置に対してユーザが指示を与えるために利用する入力装置６と、コンピュータ４に実行されるプログラムを記憶するメモリ１０とを備える。コンピュータ４は図示しないＣＰＵ等の演算処理装置を備え、演算処理装置はメモリ１０に格納されたプログラムを読み込み、実行処理する。
【００２０】
ベースプログラムＤＢ２は、更新前のベースプログラムＯ（オリジナル）２１を格納している。
【００２１】
派生プログラムＤＢは更新前のベースプログラムＯ２１に基づいて有る製品向けに開発された派生プログラムＡ３１と、３１とは異なる製品向けに開発された派生プログラムＢ３２と、を格納している。
【００２２】
メモリ１０は、ベースプログラムＯ２１を基準として派生プログラムＡ３１と派生プログラムＢ３２とに加えられた変更内容を評価する変更内容評価部１１と、変更内容をベースプログラムに反映しベースプログラムＯ２２に更新する変更内容反映部１２と、前記変更内容評価部１１と変更内容反映部１２の動作を管理する制御部１３とを備える。メモリ１０はコンピュータ４内部に供えられた内部メモリであってもよい。
【００２３】
電子制御装置７は、派生プログラムＡ３１を実行ファイルに変換した実行プログラムを記憶するメモリ７１と、派生プログラム３１を実行し、センサ７およびアクチュエータ８を制御するマイクロプロセッサ７２とを備える。
【００２４】
図２は、派生プログラム開発の概念を示す図である。派生プログラムＡ３１は特定の製品向けの要求仕様に基づいて、ベースプログラムＯ２１を変更して開発される。派生プログラムＢ３２は派生プログラムＡ３１に基づいて開発される。派生プログラムＣ３３は派生プログラムＢ３２に基づいて開発される。派生プログラムＤ３４は派生プログラムＣ３３に基づいて開発される。派生プログラムＥ３５は派生プログラムＣ３３に基づいて開発される。
【００２５】
派生プログラムＡ３１で実現されている新規機能を派生プログラムＣ３３で利用したい場合、派生プログラムＣ３３をベースプログラムＯ２１から開発しようとすると、派生プログラムＡ３１で実現済みの新規機能を再開発しなければならず、開発効率の低下を招くという課題がある。
【００２６】
一方で、図２に示すように派生プログラムＡ３１を改造して派生プログラムＣ３３を開発しようとすると、派生プログラムＡ３１固有の要求を実現しており、派生プログラムＣ３３では要求されない部分をベースプログラムＯ２１相当に戻さなければならず、やはり開発効率の低下を招くという課題がある。
【００２７】
図３はベースプログラムＯ２１、派生プログラムＡ３１、派生プログラムＢ３２の構成を示す図である。
【００２８】
ベースプログラムＯ２１はＣ言語で記述されたソースコード２１１と、ソースコード２１２と、ソースコード２１３と、ソースコード２１４と、ソースコード２１５とで構成される。
【００２９】
派生プログラムＡ３１はＣ言語で記述されたソースコード３１１と、ソースコード３１２と、ソースコード３１３と、ソースコード３１４と、ソースコード３１５と、ソースコード３１６と、ソースコード３１７とで構成される。
【００３０】
派生プログラムＢ３２はＣ言語で記述されたソースコード３２１と、ソースコード３２２と、ソースコード３２３と、ソースコード３２４と、ソースコード３２５と、ソースコード３２６と、ソースコード３２７とで構成される。
【００３１】
図４は、ソースコード２１１の変更状況２１１１を示す図である。ファイル名“ｆ１．ｃ”に関する変更状況であり、「Ｏ」列はソースコード２１１を、「Ａ」列はソースコード３１１を、「Ｂ」列はソースコード３２１を示しており、「ａ」「ｂ」「ｃ」「ｄ」「ｅ」はソースコード中の行を模式的に示している。
【００３２】
変更状況２１１１は、ベースプログラム２１に基づいた派生プログラムＡ３１および派生プログラムＢ３２の開発において、ソースコード２１１は変更されていないことを示している。
【００３３】
図５は、ソースコード２１２の変更状況２１２１を示す図である。ファイル名“ｆ２．ｃ”に関する変更状況であり、「Ｏ」列はソースコード２１２を、「Ａ」列はソースコード３１２を、「Ｂ」列はソースコード３２２を示しており、アルファベット小文字（「ａ」「ｂ」「ｃ」など）はソースコード中の行を模式的に示している。
【００３４】
変更状況２１２１は、ベースプログラム２１に基づいた派生プログラムＡ３１および派生プログラムＢ３２の開発において、ソースコード２１２の５行目（「ｅ」）〜８行目（「ｈ」）が派生プログラムＡ３１および派生プログラムＢ３２でそれぞれ変更されていることを示している。
【００３５】
図６は、ソースコード２１３の変更状況２１３１を示す図である。ファイル名“ｆ３．ｃ”に関する変更状況であり、「Ｏ」列はソースコード２１３を、「Ａ」列はソースコード３１３を、「Ｂ」列はソースコード３２３を示しており、アルファベット小文字（「ａ」「ｂ」「ｃ」など）はソースコード中の行を模式的に示している。
【００３６】
変更状況２１３１は、ベースプログラム２１に基づいた派生プログラムＡ３１および派生プログラムＢ３２の開発において、ソースコード２１３の２行目（「ｂ」）〜５行目（「ｅ」）が派生プログラムＡ３１および派生プログラムＢ３２でそれぞれ変更されていることを示している。（５行目はＢのみ変更）
図７は、ソースコード２１４の変更状況２１４１を示す図である。ファイル名“ｆ４．ｃ”に関する変更状況であり、「Ｏ」列はソースコード２１４を、「Ａ」列はソースコード３１４を、「Ｂ」列はソースコード３２４を示しており、アルファベット小文字（「ａ」「ｂ」「ｃ」など）はソースコード中の行を模式的に示している。
【００３７】
変更状況２１４１は、ベースプログラム２１に基づいた派生プログラムＡ３１の開発において、ソースコード２１４の２行目（「ｂ」）〜３行目（「ｃ」）が変更されていることを示している。また、変更状況２１４１は、ベースプログラム２１に基づいた派生プログラムＢ３２の開発において、ソースコード２１４の５行目（「ｅ」）〜６行目（「ｆ」）が変更されていることを示している。
【００３８】
図８は、ソースコード２１５の変更状況２１５１を示す図である。ファイル名“ｆ５．ｃ”に関する変更状況であり、「Ｏ」列はソースコード２１５を、「Ａ」列はソースコード３１３５、「Ｂ」列はソースコード３２５を示しており、アルファベット小文字（「ａ」「ｂ」「ｃ」など）はソースコード中の行を模式的に示している。
【００３９】
変更状況２１５１は、ベースプログラム２１に基づいた派生プログラムＡ３１および派生プログラムＢ３２の開発において、ソースコード２１５の２行目（「ｂ」）〜４行目（「ｄ」）が派生プログラムＡ３１および派生プログラムＢ３２でそれぞれ変更されとともに、７行目が追加（「ｇ」）されていることを示している。
【００４０】
図９は、ファイル名“ｆ６．ｃ”に関する変更状況２１６１を示す図である。「Ｏ」列は対応するソースコードが存在しないことを、「Ａ」列はソースコード３１６、「Ｂ」列はソースコード３２６を示しており、アルファベット小文字（「ａ」「ｂ」「ｃ」など）はソースコード中の行を模式的に示している。
【００４１】
変更状況２１６１は、ベースプログラム２１に基づいた派生プログラムＡ３１および派生プログラムＢ３２の開発において、ベースプログラム２１には存在しなかったソースコード“ｆ６．ｃ”が派生プログラムＡ３１および派生プログラムＢ３２でそれぞれ追加されていることを示している。
【００４２】
図１０は、変更内容評価部１１の構成を示す図である。変更内容評価部１１は、ベースプログラムデータベース２と派生プログラムデータベース３それぞれに格納されたプログラムに基づいてプログラム間の差分を求める差分抽出部１１２と、変更差分を保存する変更差分データ１１３と、変更差分に基づいて変更間相違度を求める変更相違度演算部１１４と、変更相違度を保存する変更相違度データ１４とを備える。
【００４３】
差分抽出部１１２は、ベースプログラムと派生プログラムとの間の差分を抽出するベース−派生間差分抽出部１１２１と、派生プログラム間の差分を抽出する派生―派生間差分抽出部１１２２と、ソースコード間の編集距離を演算する距離演算部１１２３と、派生プログラムの一覧を記憶する派生プログラムリスト記憶部１１２４と、ファイルの一覧を記憶するファイルリスト記憶部１１２５とを備える。
【００４４】
図１１は、派生プログラムリスト記憶部に記憶される派生プログラムリスト１１２４１を示す図である。
【００４５】
図１２は、ファイルリスト記憶部に記憶されるファイルリスト１１２５１を示す図である。
【００４６】
図１３は、ベース-派生間差分抽出部１１２１において実行されるベース-派生間差分抽出フローを示す図である。ステップＳ１１２１０から処理が開始される。ステップＳ１１２１１にてファイルのＩＤが初期化される。ステップＳ１１２１２にて派生プログラムのＩＤが初期化される。ステップＳ１１２１３にて距離演算部１１２３を用いて分析対象のファイルＩＤにおけるベースプログラムと分析対象の派生プログラムＩＤの派生プログラムとの距離演算処理を実行する。ステップＳ１１２１４にて分析対象の派生プログラムが最終派生プログラムか否かを判定し、最終派生プログラムの場合にはステップＳ１１２１６に進み、最終派生プログラムでない場合にはステップＳ１１２１５に進む。ステップＳ１１２１５では派生プログラムのＩＤに１を加算し、ステップＳ１１２１３に進む。ステップＳ１１２１６では分析対象のファイルが最終ファイルか否かを判定し、最終ファイルの場合にはステップＳ１１２１８に進み、最終ファイルでない場合にはステップＳ１１２１７に進む。ステップＳ１１２１７ではファイルＩＤに１を加算し、ステップＳ１１２１２に進む。ステップＳ１１２１８では処理を終了する。
【００４７】
図１４は、派生―派生間差分抽出部１１２２において実行される派生プログラム間差分抽出フローを示す図である。ステップＳ１１２２０から処理が開始される。ステップＳ１１２２１にてファイルＩＤを初期化する。ステップＳ１１２２２にて比較元の派生プログラムＩＤを初期化する。ステップＳ１１２２３にて比較先の派生プログラムＩＤを初期化する。ステップＳ１１２２４にて距離演算部１１２３を用いて分析対象ファイルの派生プログラム間の距離演算処理を実行する。ステップＳ１１２２５にて分析対象の比較先派生プログラムＩＤが最終派生プログラムか否かを判定し、最終派生プログラムの場合にはステップＳ１１２２７に進み、そうでない場合にはステップＳ１１２２６に進む。ステップＳ１１２２６では比較先派生プログラムのＩＤに１を加算し、ステップＳ１１２２４に進む。ステップＳ１１２２７では分析対象の比較元派生プログラムＩＤが最終派生プログラムか否かを判定し、最終派生プログラムの場合にはステップＳ１１２２９に進み、そうでない場合にはステップＳ１１２２８に進む。ステップＳ１１２２８では比較元派生プログラムのＩＤに１を加算し、ステップＳ１１２２３に進む。ステップＳ１１２２９では分析対象ファイルＩＤが最終ファイルか否かを判定し、最終ファイルの場合にはステップＳ１１２２Ｂに進み、そうでない場合にはステップＳ１１２２Ａに進む。ステップＳ１１２２ＡではファイルＩＤに１を加算し、ステップＳ１１２２２に進む。ステップＳ１１２２Ｂで処理を終了する。
【００４８】
図１５は距離演算部１１２３の構成を示す図である。距離演算部１１２３はレーベンシュタイン距離演算部１１２３１とハミング距離演算部１１２３２とを備える。以降の説明では、レーベンシュタイン距離演算部１１２３１を用いて距離の演算を行った場合を示す。
【００４９】
図１６は変更差分データ１１３の構成を示す図である。
【００５０】
図４に示す通り、ファイル“f1.c”は、ベースプログラムＯ２１と派生プログラムＡ３１と派生プログラムＡ３２とで変更はないため、Ｏ−Ａ間、Ｏ−Ｂ間、Ａ−Ｂ間の編集距離はすべて０となる。
【００５１】
図５に示す通り、ファイル“f２.c”は、ベースプログラムＯ２１と派生プログラムＡ３１と派生プログラムＡ３２とで変更されている。Ｏ−Ａ間では計４行の置換、すなわち削除および追加処理が計８回行われているため、距離は８となる。Ｏ−Ｂ間では計４行の置換、すなわち削除および追加処理が計８回行われているため、距離は８となる。Ａ−Ｂ間では計４行の置換、すなわち削除および追加処理が計８回行われているため、距離は８となる。
【００５２】
図６に示す通り、ファイル“f３.c”は、ベースプログラムＯ２１と派生プログラムＡ３１と派生プログラムＡ３２とで変更されている。Ｏ−Ａ間では計３行の置換、すなわち削除および追加処理が計６回行われているため、距離は６となる。Ｏ−Ｂ間では計４行の置換、すなわち削除および追加処理が計８回行われているため、距離は８となる。Ａ−Ｂ間では計１行の置換、すなわち削除および追加処理が計２回行われているため、距離は２となる。
【００５３】
図７に示す通り、ファイル“f４.c”は、ベースプログラムＯ２１と派生プログラムＡ３１と派生プログラムＡ３２とで変更されている。Ｏ−Ａ間では計２行の置換、すなわち削除および追加処理が計４回行われているため、距離は４となる。Ｏ−Ｂ間では計２行の置換、すなわち削除および追加処理が計４回行われているため、距離は４となる。Ａ−Ｂ間では計４行の置換、すなわち削除および追加処理が計８回行われているため、距離は８となる。
【００５４】
図８に示す通り、ファイル“f５.c”は、ベースプログラムＯ２１と派生プログラムＡ３１と派生プログラムＡ３２とで変更されている。Ｏ−Ａ間では計３行の置換と１行の追加、すなわち削除および追加処理が計７回行われているため、距離は７となる。Ｏ−Ｂ間では計３行の置換と１行の追加、すなわち削除および追加処理が計７回行われているため、距離は７となる。Ａ−Ｂ間では共通のため、距離は０となる。
【００５５】
図９に示す通り、ファイル“f６.c”は、ベースプログラムＯ２１には存在せず、派生プログラムＡ３１と派生プログラムＡ３２とで追加されている。Ｏ−Ａ間では計５行の追加が行われているため、距離は５となる。Ｏ−Ｂ間では計５行の追加が行われているため、距離は５となる。Ａ−Ｂ間では共通のため、距離は０となる。
【００５６】
図１７は、変更相違度演算部１１４における変更相違度演算処理の概念を示す図である。変更相違度は、ベースプログラムＯ２１と派生プログラムＡ３１との距離ＯＡと、ベースプログラムＯ２１と派生プログラムＢ３２との距離ＯＢと、派生プログラムＡ３１と派生プログラムＢ３２との距離ＡＢとの３辺が張る三角形における、Ｏの内角γを変更相違度とする。この変更相違度の大きさに基づいて、派生プログラムＡ３１と派生プログラムＢ３２とで共通的に採用された変更内容を抽出することが出来る。
【００５７】
内角γはＨｅｒｏｎの公式を用い、以下のように求める。
【００５８】
ｓ＝（ＯＡ+ＯＢ+ＡＢ）／２                        …（式１）
Ｓ＝√(ｓ（ｓ−ＯＡ）（ｓ−ＯＢ）（ｓ−ＡＢ）)    …（式２）
（ＯＢ ≧ ＯＡ、ＡＢの場合）
ｈ＝（２Ｓ）／ＯＢ、γ＝ａｒｃｓｉｎ（ｈ／ＯＡ）…（式３）
（ＡＢ ≧ＯＡ、ＡＢの場合）
ｈ＝（２Ｓ）／ＡＢ、γ＝１８０−ａｒｃｓｉｎ（ｈ／ＯＡ）−ａｒｃｓｉｎ（ｈ／ＯＢ）                              …（式４）
（ＯＡ ≧ ＯＢ、ＡＢの場合）
ｈ＝（２Ｓ）／ＯＡ、γ＝ａｒｃｓｉｎ（ｈ／ＯＢ）…（式５）
図１８はファイル“f１.c”における変更相違度演算の概念図である。この場合は、三辺ともに０のため、変更相違度を示す内角は０となる。
【００５９】
図１９はファイル“f２.c”における変更相違度演算の概念図である。この場合は、三辺内角γは６０となる。
【００６０】
図２０はファイル“f３.c”における変更相違度演算の概念図である。この場合は、三辺内角γは０となる。
【００６１】
図２１はファイル“f４.c”における変更相違度演算の概念図である。この場合は、三辺内角γは１８０となる。
【００６２】
図２２はファイル“f５.c”における変更相違度演算の概念図である。この場合は、三辺内角γは０となる。
【００６３】
図２３はファイル“f６.c”における変更相違度演算の概念図である。この場合は、三辺内角γは０となる。
【００６４】
図２４は変更相違度の計算結果である変更相違度データ１４の構成を示す図である。
【００６５】
図２５は変更内容反映部１２の構成を示す図である。変更内容反映部１２は、変更相違度データ１４に基づいて反映処理の実施／不実施を判定する反映判定部１２１と、反映処理実施の際にはベースプログラムＯ２１を更新して新しいベースプログラムＯ２２を出力するベースプログラム変更部１２２と、反映判定時の相違度閾値を記憶する相違度閾値保存部１２３とを備える。
【００６６】
図２６は反映判定部１２１において実行される変更内容反映実施判定の処理フローを示す図である。ステップＳ１２１０から処理が開始される。ステップＳ１２１１においてファイルＩＤが初期化される。ステップＳ１２１２において判定対象ファイルの変更相違度が閾値以下であるか否かが判定される。閾値以下の場合にはステップＳ１２１３に進み、そうでない場合にはステップＳ１２１４に進む。ステップＳ１２１３ではベースプログラム変更部１２２を呼び出す。ステップＳ１２１４では分析対象ファイルＩＤが最終ファイルか否かを判定し、最終ファイルの場合はステップＳ１２１６に進み、そうでない場合にはステップＳ１２１５に進む。ステップＳ１２１５ではファイルＩＤに１を加算する。ステップＳ１２１６で処理を終了する。
【００６７】
図２７はベースプログラム変更部１２２において実行されるベースプログラム変更の処理フローを示す図である。図２６のステップＳ１２１３から呼び出される際に、処理対象ファイルＩＤが指定される。ステップＳ１２２０から処理が開始される。ステップＳ１２２１で分析対象の派生プログラムＩＤが初期化される。ステップＳ１２２２で最小距離に変更差分データ１１３から処理対象ファイルにおけるベースプログラムと派生プログラムとの距離を代入する。ステップＳ１２２３で変更差分データ１１３から処理対象ファイルにおけるベースプログラムと派生プログラムとの距離を取得する。ステップＳ１２２４において、最小距離とベース-派生間距離とのいずれかが大きいかを判定する。最小距離のほうが大きい場合にはステップＳ１２２５に進み、そうでない場合にはステップＳ１２２７に進む。ステップＳ１２２５では更新プログラムＩＤに派生プログラムＩＤを代入する。ステップＳ１２２６では最小距離にベース-派生間距離を代入する。ステップＳ１２２７では分析対象の派生プログラムＩＤが最終であるか否かを判定する。最終の場合にはステップＳ１２２９に進み、そうでない場合にはステップＳ１２２８に進む。ステップＳ１２２８では派生プログラムＩＤに１を加算する。ステップＳ１２２９ではベースプログラムのファイルを更新プログラムＩＤのファイルに置換する。ステップＳ１２２Ａで処理を終了する。
【００６８】
図２８は更新されたベースプログラムＯ２２の構成を示す図である。変更相違度閾値保存部に保存された変更相違度閾値を０とした場合の更新例である。更新されたベースプログラムＯ２２はファイル“ｆ１．ｃ”２２１と、ファイル“ｆ２．ｃ”２２２と、ファイル“ｆ３．ｃ”２２３と、ファイル“ｆ４．ｃ”２２４と、ファイル“ｆ５．ｃ”２２５とを備える。ファイル“ｆ１．ｃ”２２１はベースプログラムＯ２１の“ｆ１．ｃ”から更新されていない。いずれのファイル間でもプログラムの更新が無いからである。ファイル“ｆ２．ｃ”２２２はベースプログラムＯ２１の“ｆ２．ｃ”から更新されていない。変更相違度閾値よりも変更相違度が大きく、派生プログラムＡ３１と派生プラグラムＢ３２それぞれで変更された内容は、それぞれの派生プログラム固有に要求される機能に関する変更であり、共通の変更内容と判断しないからである。ファイル“ｆ３．ｃ”２２３は派生プログラムＡ３１の“ｆ３．ｃ”に更新されている。変更相違度閾値以下であり、派生プログラムＡ３１と派生プラグラムＢ３２それぞれで変更された内容は、それぞれの派生プログラム両方で要求される改良部分に関する変更であり、共通の変更内容と判断するからである。ファイル“ｆ４．ｃ”２２４はベースプログラムＯ２１の“ｆ４．ｃ”から更新されていない。変更相違度閾値よりも変更相違度が大きく、共通の変更内容と判断しないからである。ファイル“ｆ５．ｃ”２２５は派生プログラムＡ３１の“ｆ５．ｃ”に更新される。ファイル“ｆ６．ｃ”は削除される。
【００６９】
上述の例では、ファイル“ｆ６．ｃ”を削除する例を示したが、ファイル“ｆ６．ｃ”の追加に関する変更相違度は変更依存閾値以下であり、共通の変更内容を考えることもでき、ベースプログラムＯ２２に追加されるようにしてもよい。
【００７０】
図２９は、本発明を適用したベースプログラムの更新方法及び派生プログラムの開発方法である。派生プログラムＡ３１は特定の製品向けの要求仕様に基づいて、ベースプログラムＯ２１を変更して開発される。派生プログラムＢ３２は派生プログラムＡ３１に基づいて開発される。ベースプログラムＯ２２は、本発明に基づいて、派生プログラムＡ３１と派生プログラムＡ３２に共通の変更内容を反映して更新される。派生プログラムＦ３６はベースプログラムＯ２２に基づいて開発される。派生プログラムＧ３７は派生プログラムＦ３６に基づいて開発される。ベースプログラムＯ２３は、本発明に基づいて、派生プログラムＦ３６と派生プログラムＧ３７に共通の変更内容を反映して更新される。派生プログラムＨ３８はベースプログラムＯ２３に基づいて開発される。
【００７１】
以上のように、本実施の形態において、変更内容評価部１１は、ベースプログラムＯ２１と派生プログラムＡ３１と派生プログラムＢ３２との変更内容に基づいて、複数の派生プログラムに共通的に採用された変更を抽出し、ベースプログラムＯを更新することが可能になる。また、変更内容評価部１１は、差分抽出部１１２により、ベースプログラムＯ２１と派生プログラムＡ３１との差分、ベースプログラムＯ２１と派生プログラムＢ３２との差分、派生プログラムＡ３１と派生プログラムＢ３２との差分をそれぞれ自動的に抽出できるので、これらの差分に基づいて複数の派生プログラムに共通的に採用された変更内容の抽出に用いることが出来る。
【符号の説明】
【００７２】
１：プログラム開発支援装置、１１：変更内容評価部、１２：変更内容反映部、２：ベースプログラムＤＢ、３：派生プログラムＤＢ
【図１】
0006286297.tif 000002
【図２】
0006286297.tif 000003
【図３】
0006286297.tif 000004
【図４】
0006286297.tif 000005
【図５】
0006286297.tif 000006
【図６】
0006286297.tif 000007
【図７】
0006286297.tif 000008
【図８】
0006286297.tif 000009
【図９】
0006286297.tif 000010
【図１０】
0006286297.tif 000011
【図１１】
0006286297.tif 000012
【図１２】
0006286297.tif 000013
【図１３】
0006286297.tif 000014
【図１４】
0006286297.tif 000015
【図１５】
0006286297.tif 000016
【図１６】
0006286297.tif 000017
【図１７】
0006286297.tif 000018
【図１８】
0006286297.tif 000019
【図１９】
0006286297.tif 000020
【図２０】
0006286297.tif 000021
【図２１】
0006286297.tif 000022
【図２２】
0006286297.tif 000023
【図２３】
0006286297.tif 000024
【図２４】
0006286297.tif 000025
【図２５】
0006286297.tif 000026
【図２６】
0006286297.tif 000027
【図２７】
0006286297.tif 000028
【図２８】
0006286297.tif 000029
【図２９】
0006286297.tif 000030