(57)【要約】【課題】ユーザの使用性を損ねない、ソフトウェアのバージョンアップを実現する。【解決手段】本発明のシステムは、以下の構成を有する。ソフトウェアのバージョンアップ前のソースコードとバージョンアップ後のソースコードに対して、構文解析、行単位での差分抽出、行単位の差分と構文要素とのマッピング、構文要素の階層に従った階層差分の上位層への伝播、という一連のステップからなる構文差分抽出部を備える。次に、変更のあった関数に関して呼び出し関係木を生成し、呼び出し関係木を辿って変更のあった関数の呼び出しに繋がるUI要素を探索する、該当UI抽出部を備える。次に、UI要素の種類及び変更のパターンを検出して適切な説明用UI部品を特定し、これをソースコードに埋め込む、説明用UI部品挿入手続き部を備える。【選択図】図２
2010186378.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのバージョンアップ前の第1のソースコードとバージョンアップ後の第２のソースコードとを対象に構文解析して構文要素を得、前記第１のソースコードと前記第２のソースコードとの差分を行単位で抽出し、前記行単位で抽出した差分と前記構文要素とをマッピングし、前記構文要素の階層に従って前記抽出した差分を上位層へ伝播する構文差分抽出部、
前記抽出した差分にマッピングした前記構文要素を含む関数に関して呼び出し関係木を生成し、前記呼び出し関係木を辿り、前記関数の呼び出しに繋がるUI要素を探索する該当UI抽出部、及び、
前記UI要素の種類及び変更のパターンを検出し、前記検出した種類及び変更のパターンに対応する説明用UI部品を選定し、前記選定した説明用UI部品を前記第２のソースコードに埋め込む説明用UI部品挿入部を備えることを特徴とするソフトウェアのバージョン間の差分表示システム。
【請求項２】
前記選定した説明用UI部品の内容を保存し、前記ソフトウェアの次のバージョンアップのときに前記保存した説明用UI部品の内容を削除する変更内容操作部をさらに備えることを特徴とする請求項１記載のソフトウェアのバージョン間の差分表示システム。
【請求項３】
前記ソフトウェアの前記バージョンアップの時刻、及び、前記バージョンアップの時の前記説明用UI部品の内容を保存する変更内容操作部、及び、ユーザの最終アクセス時刻を保存しておき、前記ユーザがアクセスしてきた時の前記バージョンアップの時刻と照合し、前記最終アクセス時刻以降に保存した説明用UI部品を挿入したソースコードを生成するアクセス時手続き部をさらに備えることを特徴とする請求項１記載のソフトウェアのバージョン間の差分表示システム。
【請求項４】
ソフトウェア開発用計算機によるソフトウェアのバージョン間差分表示方法であって、前記ソフトウェア開発用計算機は、
ソフトウェアのバージョンアップ前の第1のソースコードとバージョンアップ後の第２のソースコードとを対象に構文解析して構文要素を得、
前記第１のソースコードと前記第２のソースコードとの差分を行単位で抽出し、
前記行単位で抽出した差分と前記構文要素とをマッピングし、
前記構文要素の階層に従って前記抽出した差分を上位層へ伝播し、
前記抽出した差分にマッピングした前記構文要素を含む関数に関して呼び出し関係木を生成し、
前記呼び出し関係木を辿り、前記関数の呼び出しに繋がるUI要素を探索し、
前記UI要素の種類及び変更のパターンを検出し、
前記検出した種類及び変更のパターンに対応する説明用UI部品を選定し、
前記選定した説明用UI部品を前記第２のソースコードに埋め込むことを特徴とするソフトウェアのバージョン間の差分表示方法。
【請求項５】
前記選定した説明用UI部品の内容を保存し、前記ソフトウェアの次のバージョンアップのときに前記保存した説明用UI部品の内容を削除することを特徴とする請求項４記載のソフトウェアのバージョン間の差分表示方法。
【請求項６】
前記ソフトウェアの前記バージョンアップの時刻、及び、前記バージョンアップの時の前記説明用UI部品の内容を保存し、ユーザの最終アクセス時刻を保存しておき、前記ユーザがアクセスしてきた時の前記バージョンアップの時刻と照合し、前記最終アクセス時刻以降に保存した説明用UI部品を挿入したソースコードを生成することを特徴とする請求項４記載のソフトウェアのバージョン間の差分表示方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特にソフトウェアのバージョン間の差分を表示する技術に関する。
【背景技術】
【０００２】
ソフトウェアの差分を抽出して表示するための技術として、ソースコードの行単位のみを比較するのみでなく、ソースコードの構文に基づく階層構造を利用して比較する技術がある（非特許文献１）。これは、階層構造を利用することにより、下位階層の要素の差分を上位階層へと伝搬させるものである。これにより、開発者がバージョン間の差分を理解しようとする場面において、構文的に粒度が粗い上位階層の要素から順に差分を理解することが可能となる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】diffを用いたソフトウェア構成要素の階層化差分、日本ソフトウェア科学会FOSE’02 pp.171-174(2002/11)
【発明の概要】
【発明が解決しようとする課題】
【０００４】
近年、Ｗｅｂサーバ上に展開されているソフトウェアを、ユーザがＷｅｂブラウザからアクセスして用いるというシステム形態が普及している。このシステム形態の場合、ユーザに知らせることなく、サーバ側でソフトウェアのバージョンアップが行われる。このときユーザは、バージョンアップによる変更内容を理解しながら利用することを強いられる。非特許文献１に記載される技術は、開発者がソフトウェアのバージョン間の差分を理解するのに有益であり、ソフトウェア利用者としての一般のユーザを想定したものではない。一般のユーザは、システムを利用するにあたって、ソースコードの粒度でソフトウェアを理解する必要はなく、一般的にソースコードはユーザへ開示されない。
【０００５】
一般に、ソフトウェアのバージョン間の差分は、マニュアル上の変更履歴やヘルプ等の文書において一覧で表示されることが多い。しかし、バージョン変更の際には、多くのユーザは過去に既にソフトウェアを使っていた経験があり、差分についての文書を読むことなく使用する傾向にある。このとき、ユーザがバージョン間の差分に遭遇すると、ユーザはそのソフトウェアの使用性について悪い印象を持ち、以後の利用を止める等の悪影響が生じる可能性がある。
【０００６】
本発明は、上記のようにソフトウェアのバージョンアップがサーバ上でなされる場合において、ユーザの使用性を損ねないバージョンアップを実現させる。
【課題を解決するための手段】
【０００７】
上記の課題を解決するためのシステムを、以下に示す。ソフトウェアのバージョンアップ前のソースコードとバージョンアップ後のソースコードに対して、構文解析、行単位での差分抽出、行単位の差分と構文要素とのマッピング、構文要素の階層に従った差分の上位層への伝播、という一連のステップからなる構文差分抽出部を備える。変更のあった関数に関して呼び出し関係木を生成し、呼び出し関係木を辿って変更のあった関数の呼び出しに繋がるUI(User Interfaceの略。以下UIと呼ぶ。)要素を探索する、該当UI抽出手続き部を備える。次に、UI要素の種類及び変更のパターンを検出して適切な説明用UI部品を選定し、これをソースコードに埋め込む、説明用UI部品挿入手続き部を備える。
【発明の効果】
【０００８】
本発明によれば、ソフトウェアのバージョン間の変更に対応するUI要素の周辺に、変更内容の説明を行うための説明用UI部品を機械的に埋め込める。これにより、開発者は変更内容の説明文を入力するのみで変更部分をユーザへ示せるようになるため、開発工数を削減することができる。また、ユーザは、変更のあったUI要素を使用する際に、変更内容を適時に理解できるようになるので、ユーザの使用性を損ねない、ソフトウェアのバージョンアップを実現できる。
【図面の簡単な説明】
【０００９】
【図１】システム構成図である。
【図２】実施例１の処理フロー図である。
【図３】説明用ＵＩ部品の挿入前のユーザ画面例の図である。
【図４】説明用ＵＩ部品の挿入後のユーザ画面例の図である。
【図５】バージョンアップ前のソースファイル例の図である。
【図６】バージョンアップ後のソースファイル例の図である。
【図７】バージョンアップ後のソースファイル例の図である。
【図８】説明用UI部品挿入後のソースファイル例の図である。
【図９】実施例３の処理フロー図である。
【図１０】実施例３の処理フロー図である。
【発明を実施するための形態】
【００１０】
プログラミング言語Java（登録商標）を例とし、また変更のあった機能と関連するUI要素としてＷｅｂブラウザにおけるボタンがあったときの場合の実施例を示す。プログラミング言語Javaを例とした以下の実施例は、他のプログラミング言語においても同様に実施可能であり、また、変更のあった機能と関連するUI要素が他の要素であっても実施可能である。
【実施例１】
【００１１】
図1は、本実施例のシステムの構成図である。本実施例は、図２に示す処理フローを実現するソフトウェア開発用計算機103に関するものであるが、ユーザ用計算機101及びソフトウェア実行用計算機102を含めた構成図を示す。ソフトウェア開発用計算機103は、CPU110c、主記憶装置112c、二次記憶装置113、及び、これらを相互に接続するバス111cからなる。主記憶装置112cは、構文差分抽出部121、該当UI抽出部122、説明用UI部品挿入部123を保持する。二次記憶装置113は、バージョンアップ前のソースファイル124、バージョンアップ後のソースファイル125、各部の処理を経て得る説明用UI部品挿入後のソースファイル126、そしてこれをコンパイルして得る実行ファイル127aを保持する。ただし、各部及びファイルは、必ずしも図１の構成を取らずとも、ソフトウェア開発用計算機103として処理可能であればどこに存在してもよい。
【００１２】
ソフトウェア実行用計算機102は、CPU110b、主記憶112b、及びそれらを接続するバス111bからなる。主記憶装置112bには、ソフトウェア開発用計算機103からLAN105を介して転送及び複製された実行ファイル127bが存在する。実行ファイル127bは、ユーザ用計算機101からWWW104を介して受けたリクエストに対してレスポンスを返す。ユーザ用計算機101は、CPU110a、主記憶112a、そしてそれらを接続するバス111aからなる。主記憶装置112aは、ブラウザ120を有し、WWW104を介してソフトウェア実行用計算機102へリクエストを送信する。
【００１３】
図３は、本実施例のシステムにおいて想定するユーザ用計算機101の画面例（表示装置の図示略）である。ユーザがブラウザ120で開いたブラウザ画面301を用いて、サーバ（ソフトウェア実行用計算機102）上に展開されたソフトウェアを利用している、という場面を想定する。図３では、日記302、メッセージ303、アルバム304、スケジュール305を基本機能として有するSNS(Social Network Service)を想定しており、図３に示した基本機能は、ブラウザ画面上301ではボタンのUI要素として配置されている。また、図３の下部には友人リスト306、日記一覧307、サイト情報308を有することを想定する。一般的に、バージョン間の変更履歴はサイト情報308等の場所で一覧表示されるが、ユーザはこれを見ることなく使用を開始しようとする。
【００１４】
図４に、説明用ＵＩ部品の挿入後の、実行ファイル127bのレスポンスとして与えられるユーザのブラウザ画面401の様子を示す。ここでは、バージョン間の差分として、ユーザ自身のスケジュールを友人と共有する機能が追加されたことを想定している。説明用ＵＩ部品の挿入により、ユーザがスケジュールのボタン405にマウスカーソル410を合わせたときに、追加された機能について説明するポップアップ画面409を表示するといったことが可能になる。これを実現する処理の流れを以下に示す。
【００１５】
図２は、ソフトウェア開発用計算機103による処理フロー図である。大別して構文差分抽出部121と、該当UI抽出部122と、説明用UI部品挿入部123で構成される。以下、図５、図６、図７、及び図８に示す各ソースファイル例と、図２の処理フロー図を用いて、処理の流れを示す。
【００１６】
図５に示すソースファイル例501は、バージョンアップ前のソースファイル124の一例である。ここでは簡略化のため、UI要素として一つのボタン”buttonA”502をもつGUIを想定している。図６に示すソースファイル例601は、バージョンアップ後のソースファイル125の一例であり、図５に示したソースファイル例501からのバージョンアップであることを想定する。構文差分抽出部121におけるステップ201では、図５及び図６のソースコードの構文解析を行う。これにより、関数と関数内の各処理等といった階層関係を把握する。ステップ202では、図５及び図６のソースコードを行単位で比較し、差分を抽出する。これにより、図５と図６の例では、図５の処理503と図６の処理602とで異なる処理行になっていることが判明する。ステップ203では、行単位の差分と構文要素とのマッピングを行う。図６の例では、差分として抽出された行602と関数内の処理としての構文要素とのマッピングを行う。ステップ204では、構文要素の階層に従い、階層の差分を上位層に伝播する。図６の例では、処理としての602の上位構文である関数”functionA”603に差分を伝播させることで、図５と図６のバージョン間では、関数”functionA”603に変更があったと認識することができる。
【００１７】
構文差分抽出部121の次に、該当UI抽出部122による処理を行う。図７の変更後ソースファイル701を用いて、該当UI抽出手続きの様子を示す。ステップ205では、変更のあった関数の呼び出し関係木を作成する。本実施例では、変更のあった関数”functionA”702に関する呼び出し関係木を作成する。ステップ206では、ステップ205で作成した呼び出し関係木を辿ることで、変更のあった関数の呼び出しに繋がるUI要素を探索する。図７の例では、関数”functionA”の呼び出し704が関数”buttonA”703と繋がっており、これが検出される。図７の例は簡略化されているため”functionA”への直接の呼び出し704が検出されるが、呼び出し関係木を何段も辿って検出する場合もある。
【００１８】
該当UI抽出部122の次には、説明用UI部品挿入部123による処理を行う。図８に示す、説明用UI部品挿入後のソースファイル126の例801を用いて、説明用UI部品挿入手続き123の様子を示す。ステップ207では、ステップ206までで抽出したUI要素の種類、及び変更のパターンを検出する。図８の例では、探索したUI要素である”buttonA”の種類はボタンであり、変更のパターンとしては、”ボタンが押されたときの動作内容の変更”である。ステップ208では、ステップ207で得たUI要素の種類及び変更のパターンに従い、適切な説明用UI部品を埋め込む。図８の例では、ボタンにマウスカーソルを合わせたときに説明用のポップアップUI部品を表示すべく、説明用UI部品の宣言802、説明用UI部品の生成803、そして、説明用UI部品の動作804をそれぞれ挿入する。今回示した説明用UI部品の例はマウスカーソルを合わせた時のポップアップ表示であるが、初めから表示しておくことや、アニメーション表示など、ステップ207において検出したUI要素の種類及び変更のパターンに応じて、それぞれ適切な説明用UI部品を挿入する。具体的には、画面操作に必要なカーソルの形状やその意味を変更した場合には、ユーザは操作前にUI要素の種類としてのカーソルとその変更パターン（形状やその意味）を知る必要があるので、説明用UI部品を初めから表示しておく。また変更前後の状況をユーザに分かり易く示す一方法として、説明用UI部品としてアニメーション表示を用いる。
【００１９】
以上のステップを経た上で最後に、開発者は説明用UI部品の中身の文章を埋めるステップ209を行う。その後ソースファイルをコンパイルすることで実行ファイル127aを得ることができ、一般的にはこれをソフトウェア実行用計算機102へ配備する。
【００２０】
以上のように実施することで、開発者は説明用UI部品の上で説明内容を埋めるのみで、バージョン間の差分の情報をユーザに適時に提示できる効果を得る。
【実施例２】
【００２１】
図９は、本実施例におけるソフトウェア開発用計算機103による処理フロー図である。本実施例では、図１で示したシステム構成図において、変更履歴ＤＢ903が二次記憶装置113にさらに含まれ、また、変更履歴ＤＢ903を操作するための変更内容操作部が主記憶装置112cにさらに含まれる構成となる。
【００２２】
変更履歴ＤＢ903は、変更履歴テーブル904を保持する。変更履歴テーブル904は、ソフトウェアのバージョン905と、説明用UI部品及び説明文を含む変更内容906とを対にして保持する。そして、構文差分抽出部121を実行する前に、ステップ901によって変更履歴ＤＢ903を参照することで過去のバージョンの説明用UI部品を認識し、ソースコードから削除する。また、開発者が説明用UI部品の中身の文章を埋めるステップ209を経た後に、最新バージョンでの変更内容を変更履歴テーブル904に挿入する。
【００２３】
以上により、開発者は過去の説明用UI部品を自ら削除するという工数を掛けることなく、ユーザに最新の変更内容についてのみ示すことが可能になる。
【実施例３】
【００２４】
図１０は、本実施例におけるソフトウェア開発用計算機103による処理フロー図である。本実施例では、図１で示したシステム構成図において、さらに変更履歴ＤＢ903及び最終アクセス時刻ＤＢ1004が二次記憶装置113に含まれる構成となる。また、変更履歴ＤＢ903を操作するための変更内容操作部が主記憶装置112bに含まれる。さらに、ユーザのアクセス時に最終アクセス時刻ＤＢ1004と変更履歴ＤＢ903を操作して、最適な説明用UI部品を含める処理を行うためのアクセス時手続き部が、主記憶装置112cに含まれる構成となる。
【００２５】
変更履歴ＤＢ903は、実施例２にて示した変更履歴テーブル904に加えて、バージョン時刻テーブル1008も保持する。バージョン時刻テーブル1008は、ソフトウェアのバージョン1009と、そのバージョン1009が展開された時刻1010とを対にして保持するテーブルである。処理ステップとしては、実施例２の説明において示したステップ901は含まず、ステップ902を含む。また、ステップ902の後に、バージョン時刻テーブル1008にバージョン1009を展開した時刻1010を書き込むステップ1011を保持する。
【００２６】
最終アクセス時刻ＤＢ1004は、ユーザＩＤ1006と最終アクセス時刻1007とを対にして保持する最終アクセス時刻テーブル1005を保持する。ユーザのアクセス時に、ステップ1001によって、最終アクセス時刻ＤＢ1004及び変更履歴ＤＢ903を参照し、ユーザが前回最後にアクセスした最終アクセス時刻1007からの累積するバージョン変更によって生じた説明用UI部品を全て抽出する。ステップ1002によって、ステップ1001によって抽出した説明用UI部品を埋め込んだソースコードを生成する。これをコンパイルして実行ファイル127bを生成する。ステップ1003によって、最終アクセス時刻テーブル1005に保存されている最終アクセス時刻1007を更新する。
【００２７】
以上により、ユーザは最近のバージョンで変更された内容のみでなく、ユーザが最後に利用した時刻以降の全バージョンでの変更について、その内容を理解しながらソフトウェアを使用することが可能となる。
【００２８】
以上説明した実施形態によれば、ソフトウェアのバージョン間の変更に対応するUI要素の周辺に、変更内容の説明を行うための説明用UI部品を機械的に埋め込める。これにより、開発者は変更内容の説明文を入力するのみで変更部分をユーザへ示せるようになるため、開発工数を削減することができる。また、ユーザは、変更のあったUI要素を使用する際に、変更内容を適時に理解できるようになるので、ユーザの使用性を損ねない。
【符号の説明】
【００２９】
101：ユーザ用計算機、102：ソフトウェア実行用計算機、103：ソフトウェア開発用計算機、104：WWW、105：LAN、110：CPU、111：バス、112：主記憶装置、113：二次記憶装置、120：ブラウザ、121：構文差分抽出部、122：該当UI抽出部、123：説明用UI部品挿入部、124：バージョンアップ前のソースファイル、125：バージョンアップ後のソースファイル、126：説明用UI部品挿入後のソースファイル、127：実行ファイル。
【図１】
2010186378.tif 000003
【図２】
2010186378.tif 000004
【図３】
2010186378.tif 000005
【図４】
2010186378.tif 000006
【図５】
2010186378.tif 000007
【図６】
2010186378.tif 000008
【図７】
2010186378.tif 000009
【図８】
2010186378.tif 000010
【図９】
2010186378.tif 000011
【図１０】
2010186378.tif 000012