(57)【要約】【課題】効率よくポイントカットの定義内容および認可ポリシのアクセス可否条件を自動修正することが可能な自動書き換えプログラムおよび装置を提供することにある。【解決手段】自動書き換えプログラムは、コンピュータにポイントカット定義情報から文字列を抽出するステップとリソース定義情報から文字列を抽出するステップとポイントカット定義情報およびリソース定義情報間において差分となる差分文字列を抽出するステップとを実行させる。自動書き換えプログラムは、コンピュータに差分文字列を変更前または変更後の文字列として含む変更履歴情報を特定するステップと当該変更履歴情報に基づいて差分文字列が書き換えの対象となる文字列であるかを判定するステップとを実行させ、差分文字列が書き換え対象の文字列であると判定された場合に当該差分文字列に基づいてポイントカット定義情報またはリソース定義情報を更新するステップを実行させる。【選択図】図２
2012038029.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報を含むＡＯＰ定義情報を格納するＡＯＰ定義格納手段と、前記アプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる認可ポリシであって当該アクセスの対象であるリソースに関するアクセス可否条件を表現する文字列からなるリソース定義情報を含む認可ポリシを格納する認可ポリシ格納手段と、前記アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報であって当該ソースコードにおける変更前の文字列、変更後の文字列および当該変更における操作種別を示す操作種別情報を含む変更履歴情報を格納する変更履歴格納手段とを有する外部記憶装置と、当該外部記憶装置を利用するコンピュータとから構成される自動書き換え装置において、前記コンピュータによって実行される自動書き換えプログラムであって、
前記コンピュータに、
前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報を当該ＡＯＰ定義格納手段から取得するステップと、
前記取得されたＡＯＰ定義情報に含まれるポイントカット定義情報から、前記アプリケーションの実行におけるアスペクトの実行時点を表現する文字列を抽出するステップと、
前記認可ポリシ格納手段に格納されている認可ポリシを当該認可ポリシ格納手段から取得するステップと、
前記取得された認可ポリシに含まれるリソース定義情報から、前記リソースに関するアクセス可否条件を表現する文字列を抽出するステップと、
前記ポイントカット定義情報から抽出された文字列および前記リソース定義情報から抽出された文字列を比較することによって、当該ポイントカット定義情報および当該リソース定義情報間において差分となる差分文字列を抽出するステップと、
前記変更履歴格納手段に格納されている変更履歴情報を当該変更履歴格納手段から取得するステップと、
前記取得された変更履歴情報に含まれる変更前の文字列および変更後の文字列に基づいて、前記抽出された差分文字列を当該変更前の文字列または当該変更後の文字列として含む変更履歴情報を特定するステップと、
前記抽出された差分文字列および前記特定された変更履歴情報に含まれる変更前の文字列、変更後の文字列および操作種別情報に基づいて、前記抽出された差分文字列が前記ＡＯＰ定義情報または前記認可ポリシに対する書き換えの対象となる文字列であるかを判定するステップと、
前記抽出された差分文字列が前記ＡＯＰ定義情報または前記認可ポリシに対する書き換えの対象となる文字列であると判定された場合、前記抽出された差分文字列に基づいて、前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報または前記認可ポリシ格納手段に格納されている認可ポリシに含まれるリソース定義情報を更新するステップと
を実行させるための自動書き換えプログラム。
【請求項２】
前記変更履歴格納手段に格納されている変更履歴情報に含まれる変更前の文字列および変更後の文字列は、オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列を含み、
前記ポイントカット定義情報から抽出された文字列は、オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列を含み、
前記リソース定義情報から抽出された文字列は、オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列を含む
ことを特徴とする請求項１記載の自動書き換えプログラム。
【請求項３】
前記変更履歴格納手段に格納されている変更履歴情報に含まれる操作種別情報は、変更における操作種別として追加、変更および削除を示し、
前記判定するステップは、
前記特定された変更履歴情報に含まれる操作種別情報が追加を示す場合、前記抽出された差分文字列が前記リソース定義情報から抽出された文字列であるかを判定するステップと、
前記抽出された差分文字列が前記リソース定義情報から抽出された文字列であると判定された場合、前記抽出された差分文字列を前記ＡＯＰ定義情報に含まれるポイントカット定義情報に対する追加の対象となる文字列であると判定するステップと
を含み、
前記更新するステップにおいて、前記ＡＯＰ定義情報に含まれるポイントカット定義情報に対する追加の対象となる文字列であると判定された前記抽出された差分文字列を前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報に追加する
ことを特徴とする請求項１記載の自動書き換えプログラム。
【請求項４】
前記判定するステップは、
前記特定された変更履歴情報に含まれる操作種別情報が変更を示す場合、前記抽出された差分文字列が当該変更履歴情報に前記変更前の文字列として含まれ、かつ、前記抽出された差分文字列が前記リソース定義情報から抽出された文字列であるかを判定するステップと、
前記抽出された差分文字列が当該変更履歴情報に前記変更前の文字列として含まれ、かつ、前記抽出された差分文字列が前記リソース定義情報から抽出された文字列であると判定された場合、前記抽出された差分文字列を前記認可ポリシに含まれるリソース定義情報に対する修正前の文字列であると判定するステップと、
前記抽出された差分文字列が当該変更履歴情報に前記変更前の文字列として含まれ、かつ、前記抽出された差分文字列が前記リソース定義情報から抽出された文字列でないと判定された場合、前記抽出された差分文字列が当該変更履歴情報に前記変更後の文字列として含まれ、かつ、前記抽出された差分文字列が前記ポイントカット定義情報から抽出された文字列であるかを判定するステップと、
前記抽出された差分文字列が当該変更履歴情報に前記変更後の文字列として含まれ、かつ、前記抽出された差分文字列が前記ポイントカット定義情報から抽出された文字列であると判定された場合、前記抽出された差分文字列を前記認可ポリシに含まれるリソース定義情報に対する修正後の文字列であると判定するステップと
を更に含み、
前記更新するステップにおいて、前記認可ポリシ格納手段に格納されている認可ポリシに含まれるリソース定義情報において、前記認可ポリシに含まれるリソース定義情報に対する修正前の文字列であると判定された前記抽出された差分文字列を、前記認可ポリシに含まれるリソース定義情報に対する修正後の文字列であると判定された前記抽出された差分文字列に変更する
ことを特徴とする請求項３記載の自動書き換えプログラム。
【請求項５】
前記判定するステップは、
前記特定された変更履歴情報に含まれる操作種別情報が削除を示す場合、前記抽出された差分文字列が前記リソース定義情報から抽出された文字列であるかを判定するステップと、
前記抽出された差分文字列が前記リソース定義情報から抽出された文字列であると判定された場合、前記抽出された差分文字列を前記認可ポリシに含まれるリソース定義情報に対する削除の対象となる文字列であると判定するステップと
を更に含み、
前記更新するステップにおいて、前記認可ポリシに含まれるリソース定義情報に対する削除の対象となる文字列であると判定された前記抽出された差分文字列を前記認可ポリシ格納手段に格納されている認可ポリシに含まれるリソース定義情報から削除する
ことを特徴とする請求項４記載の自動書き換えプログラム。
【請求項６】
アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報を含むＡＯＰ定義情報を格納するＡＯＰ定義格納手段と、
前記アプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる認可ポリシであって、当該アクセスの対象であるリソースに関するアクセス可否条件を表現する文字列からなるリソース定義情報を含む認可ポリシを格納する認可ポリシ格納手段と、
前記アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報であって、当該ソースコードにおける変更前の文字列、変更後の文字列および当該変更における操作種別を示す操作種別情報を含む変更履歴情報を格納する変更履歴格納手段と、
前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報を当該ＡＯＰ定義格納手段から取得するＡＯＰ定義取得手段と、
前記ＡＯＰ定義取得手段によって取得されたＡＯＰ定義情報に含まれるポイントカット定義情報から、前記アプリケーションの実行におけるアスペクトの実行時点を表現する文字列を抽出するポイントカット抽出手段と、
前記認可ポリシ格納手段に格納されている認可ポリシを当該認可ポリシ格納手段から取得する認可ポリシ取得手段と、
前記認可ポリシ取得手段によって取得された認可ポリシに含まれるリソース定義情報から、前記リソースに関するアクセス可否条件を表現する文字列を抽出するリソース抽出手段と、
前記ポイントカット抽出手段によって前記ポイントカット定義情報から抽出された文字列および前記リソース抽出手段によって前記リソース定義情報から抽出された文字列を比較することによって、当該ポイントカット定義情報および当該リソース定義情報間において差分となる差分文字列を抽出する差分抽出手段と、
前記変更履歴格納手段に格納されている変更履歴情報を当該変更履歴格納手段から取得する変更履歴取得手段と、
前記変更履歴取得手段によって取得された変更履歴情報に含まれる変更前の文字列および変更後の文字列に基づいて、前記差分抽出手段によって抽出された差分文字列を当該変更前の文字列または当該変更後の文字列として含む変更履歴情報を特定する特定手段と、
前記差分抽出手段によって抽出された差分文字列および前記特定手段によって特定された変更履歴情報に含まれる変更前の文字列、変更後の文字列および操作種別情報に基づいて、前記差分抽出手段によって抽出された差分文字列が前記ＡＯＰ定義情報または前記認可ポリシに対する書き換えの対象となる文字列であるかを判定する判定手段と、
前記差分抽出手段によって抽出された差分文字列が前記ＡＯＰ定義情報または前記認可ポリシに対する書き換えの対象となる文字列であると判定された場合、前記差分抽出手段によって抽出された差分文字列に基づいて、前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報または前記認可ポリシ格納手段に格納されている認可ポリシに含まれるリソース定義情報を更新する更新手段と
を具備することを特徴とする自動書き換え装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、アスペクトが定義されたＡＯＰ定義情報およびアクセス可否条件が定義された認可ポリシを自動的に修正する自動書き換えプログラムおよび自動書き換え装置に関する。
【背景技術】
【０００２】
一般的に、例えば銀行のオンラインバンキング、ネットショッピングまたは企業の業務システム等で用いられるＷｅｂサーバ上のシステムにおいては、利用者からの不正アクセスを排除するためにアクセス制御が実装されている。これは、セキュリティ対策として有効な手段の１つである。
【０００３】
ここで、アクセス制御の枠組みについて説明する。アクセス制御においては、システムを利用するユーザを識別するための識別情報（以下、ユーザＩＤと表記）が予め当該システムに登録される。システム内において、ユーザは、ユーザＩＤによって識別される。
【０００４】
また、ユーザがユーザＩＤを指定することによってシステムに対してアクセス要求をした場合、当該システムではユーザ認証が行われる。このユーザ認証により、アクセスを要求する者がシステムに登録されたユーザであることが確認される。
【０００５】
ユーザ認証後、システム内のアクセス検知メカニズムが作動し、当該システム内のレファレンスモニタに対してアクセス要求が報告される。なお、レファレンスモニタは、アクセス制御の実行モジュールである。
【０００６】
レファレンスモニタは、例えばユーザの属性情報およびアクセス対象（アクセス要求の対象）の属性情報等を元に、認可ポリシに従って、要求されたアクセスの可否（許可または拒否）を判定する。このアクセスの可否の判定結果が許可の場合、システム内のアクセスメカニズムがアクセス対象に対するアクセスを実行する。
【０００７】
なお、アクセス制御の核心部は、上記したレファレンスモニタによるアクセス可否の判定である。このアクセス可否の判定においては、上記したように認可ポリシを考慮する必要がある。この認可ポリシとは、誰（サブジェクト）が、どのシステム資源（リソース）に対して、どのような操作（アクション）を行うことができるか否か（つまり、許可または拒否）が定義されたアクセス可否条件の集合体である。つまり、認可ポリシには、アクセス可否条件が定義されている。
【０００８】
ところで、上記したようなＷｅｂサーバ上のシステム（以下、単にアプリケーションと表記）等のソフトウェア開発では、当該ソフトウェアの機能に基づいてモジュール分割が行われる場合が多い。
【０００９】
しかしながら、例えばログ出力、トランザクション処理およびアクセス制御等の付加的な処理は、往々にして複数のモジュール間に散らばって実装される場合が多い。このような付加的な処理は、モジュールとしてまとめられない関心事であり、横断的関心事と呼ばれる。
【００１０】
そこで、アスペクト（Aspect）と呼ばれる新たなモジュール単位を導入し、横断的関心事を分離するメカニズムを提供するアスペクト指向プログラミング（Aspect Oriented Programming）が知られている。このアスペクト指向プログラミング（以下、ＡＯＰと表記）においては、アスペクトに横断的関心事（の処理）を定義することによって当該横断的関心事を分離することができる。
【００１１】
ところで、ＡＯＰでは、アスペクト指向言語が用いられる。アスペクト指向言語の代表例としては、AspectJがある。AspectJは、オブジェクト指向言語のJava（登録商標）に対してＡＯＰを実現するための言語仕様が追加された言語であり、例えばオープンソースのJavaEEフレームワークであるSpringにもＡＯＰ実行環境として統合利用されている。このため、AspectJは、アスペクト指向言語の中で最も幅広く利用されている言語である。
【００１２】
AspectJでは、アプリケーション（プログラム）の実行において横断的関心事の処理が定義されたアスペクトを織り込むことが可能な位置（特定の実行時点）は、ジョインポイントと呼ばれる。このジョインポイントの例としては、メソッドの呼び出しや実行、メンバ変数への代入や参照がある。
【００１３】
また、プログラム内の全てのジョインポイントの集合からある条件によって切り出された部分集合は、ポイントカットと呼ばれる。
【００１４】
更に、ポイントカットに関連づけられる処理（つまり、ポイントカットに織り込まれる処理）はアドバイスと呼ばれ、当該アドバイスには例えばログ出力およびアクセス制御等の横断的関心事の処理が実装される。
【００１５】
AspectJでは、アドバイスがポイントカットに挿入されることによって、アプリケーションとアドバイスとが一体化される。なお、アドバイスをポイントカットに挿入する処理は、ウィービングと呼ばれる。
【００１６】
上記したアスペクトの中では、ポイントカットの条件とそこで呼び出されるアドバイスが記述される。ポイントカットの表現は、呼び出し先となるアプリケーションのクラスまたはメソッドの名称が基本となる。更に、ＡＮＤやＯＲ等の論理演算子またはワイルドカードの利用を可能とすることで、柔軟に実行条件を表現することができる。
【００１７】
なお、上記したSpringでは、アスペクトに直接記述するのではなく、当該Springによって用意されるＡＯＰ定義ファイルに対してその内容が記述される。
【００１８】
以上説明したように、ＡＯＰによれば本来の機能的な処理（システム本来の関心事）と付加的な処理（横断的関心事）とを分類することができる。これによって、プログラムがシンプルになり、管理が容易となる。
【００１９】
また、ＡＯＰによれば、既に作成されているモジュールには手を加えることなく、ウィービング（処理）によって後から処理を追加することができる。このため、機能追加を容易に行うことができる。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特表２００７−５２９７９９号公報
【発明の概要】
【発明が解決しようとする課題】
【００２１】
ここで、上述したアクセス制御におけるレファレンスモニタの処理（つまり、アクセス可否の判定処理）をアドバイスとして実現する場合を想定する。以下、このアドバイスを認可アドバイスと称する。
【００２２】
上述したSpringのようなＡＯＰ実行環境を利用したアプリケーションにおいて認可アドバイスが実行される場合、当該認可アドバイスの実行条件としてポイントカットの定義が必要である。なお、上述したように例えばＡＯＰ定義ファイルに定義（記述）されるポイントカットの表現は、呼び出し先のクラスまたはメソッドの名称が基本となる。
【００２３】
また、認可アドバイスではアクセス可否が判定されるため、上記したようにアプリケーションが持つシステム資源へのアクセス可否条件が定義された認可ポリシが必要となる。
【００２４】
なお、ＡＯＰ実行環境のアプリケーションでの認可ポリシは、例えばＸＭＬ（eXtensible Markup Language）またはリレーショナルデータベースのようなアプリケーション外部のストレージに保存（記憶）されている。この認可ポリシにおいては、サブジェクトにはユーザの属性情報を用い、リソースにはクラスおよびメソッドの名称を用いることによってアクセス可否条件が定義される。
【００２５】
このように、上記したポイントカットの定義内容および認可ポリシのリソース（アクセス可否条件）には、それぞれ目的は異なるものの、同一または同等のクラスおよびメソッド（の名称）を組み合わせた文字列が用いられる。つまり、ポイントカットおよび認可ポリシにおいては、重複した記述が存在する。
【００２６】
このような場合において、既存の認可ポリシに対してアクセス可否条件の変更（例えば、追加または更新等）が発生した場合を想定する。この場合、例えばアプリケーション開発者は、認可ポリシの変更内容に合わせて、手作業によるポイントカットの修正を行う必要があるため、手間が掛かり、効率が悪い。したがって、このような手間を省き、効率よくポイントカットの定義内容（記述）を変更する仕組みが望まれる。
【００２７】
また、例えばクラスまたはメソッドの役割に対して、名称が不正確である、または曖昧である等の場合にはプログラマによって当該名称の変更が行われる場合が多々ある。このような場合には、アプリケーションのソースコードに対して変更（修正）が行われる。
【００２８】
しかしながら、このような場合には、ソースコードに対する変更に伴い、ポイントカットの定義内容を適切に修正する必要があり、更には、人手によって認可ポリシのアクセス可否条件を修正する必要がある。このようにポイントカットの定義内容および認可ポリシのアクセス可否条件を修正する場合には、複数のソースコード間に散在する変更箇所を追跡および把握する必要があり、当該修正には、多大な労力を要する。また、このようにポイントカットの定義内容および認可ポリシのアクセス可否条件を修正した場合であっても、当該修正は人手によって行われたものであることから、修正ミス等がある場合も多く、効率が悪い。
【００２９】
そこで、本明細書で開示された実施形態では、効率よくポイントカットの定義内容および認可ポリシのアクセス可否条件を自動修正することが可能な自動書き換えプログラムおよび自動書き換え装置を提供することを目的とする。
【課題を解決するための手段】
【００３０】
実施形態に係る自動書き換えプログラムは、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報を含むＡＯＰ定義情報を格納するＡＯＰ定義格納手段と、前記アプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる認可ポリシであって当該アクセスの対象であるリソースに関するアクセス可否条件を表現する文字列からなるリソース定義情報を含む認可ポリシを格納する認可ポリシ格納手段と、前記アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報であって当該ソースコードにおける変更前の文字列、変更後の文字列および当該変更における操作種別を示す操作種別情報を含む変更履歴情報を格納する変更履歴格納手段とを有する外部記憶装置と、当該外部記憶装置を利用するコンピュータとから構成される自動書き換え装置において、前記コンピュータによって実行される。
【００３１】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報を当該ＡＯＰ定義格納手段から取得するステップを実行させる。
【００３２】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記取得されたＡＯＰ定義情報に含まれるポイントカット定義情報から、前記アプリケーションの実行におけるアスペクトの実行時点を表現する文字列を抽出するステップを実行させる。
【００３３】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記認可ポリシ格納手段に格納されている認可ポリシを当該認可ポリシ格納手段から取得するステップを実行させる。
【００３４】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記取得された認可ポリシに含まれるリソース定義情報から、前記リソースに関するアクセス可否条件を表現する文字列を抽出するステップを実行させる。
【００３５】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記ポイントカット定義情報から抽出された文字列および前記リソース定義情報から抽出された文字列を比較することによって、当該ポイントカット定義情報および当該リソース定義情報間において差分となる差分文字列を抽出するステップを実行させる。
【００３６】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記変更履歴格納手段に格納されている変更履歴情報を当該変更履歴格納手段から取得するステップを実行させる。
【００３７】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記取得された変更履歴情報に含まれる変更前の文字列および変更後の文字列に基づいて、前記抽出された差分文字列を当該変更前の文字列または当該変更後の文字列として含む変更履歴情報を特定するステップを実行させる。
【００３８】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記抽出された差分文字列および前記特定された変更履歴情報に含まれる変更前の文字列、変更後の文字列および操作種別情報に基づいて、前記抽出された差分文字列が前記ＡＯＰ定義情報または前記認可ポリシに対する書き換えの対象となる文字列であるかを判定するステップを実行させる。
【００３９】
本実施形態に係る自動書き換えプログラムは、前記コンピュータに、前記抽出された差分文字列が前記ＡＯＰ定義情報または前記認可ポリシに対する書き換えの対象となる文字列であると判定された場合、前記抽出された差分文字列に基づいて、前記ＡＯＰ定義格納手段に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報または前記認可ポリシ格納手段に格納されている認可ポリシに含まれるリソース定義情報を更新するステップを実行させる。
【図面の簡単な説明】
【００４０】
【図１】実施形態に係る自動書き換え装置のハードウェア構成を示すブロック図。
【図２】図１に示す自動書き換え装置３０の主として機能構成を示すブロック図。
【図３】図２に示す自動書き換え部３１に含まれる書き換え対象データ読み込み部３２の主として機能構成を示すブロック図。
【図４】図２に示す自動書き換え部３１に含まれる書き換え要否判定部３４の主として機能構成を示すブロック図。
【図５】図２に示す自動書き換え部３１に含まれる書き換え対象データ更新部３５の主として機能構成を示すブロック図。
【図６】図２に示す書き換え対象データ格納部２２に含まれるＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報のデータ構造の一例を示す図。
【図７】図２に示す書き換え対象データ格納部２２に含まれる認可ポリシ格納部２２２に格納されている認可ポリシのデータ構造の一例を示す図。
【図８】図２に示す変更履歴格納部２３のデータ構造の一例を示す図。
【図９】図３に示す書き換え対象データの読み込み処理の処理手順を示すシーケンスチャート。
【図１０】図４に示す書き換え要否の判定処理の処理手順を示すシーケンスチャート。
【図１１】図４に示す差分抽出部３４１によって抽出される差分文字列について具体的に説明するための図。
【図１２】図４に示す判定部３４３による書き換え要否判定処理の処理手順を示すフローチャート。
【図１３】図１２に示す第１の判定処理の処理手順を示すフローチャート。
【図１４】第２の判定処理の処理手順を示すフローチャート。
【図１５】第３の判定処理の処理手順を示すフローチャート。
【図１６】書き換え要否判定処理の判定結果の一例を示す図。
【図１７】書き換え対象データの更新処理の処理手順を示すフローチャート。
【図１８】書き換え後のＡＯＰ定義情報のデータ構造の一例を示す図。
【図１９】書き換え後の認可ポリシのデータ構造の一例を示す図。
【発明を実施するための形態】
【００４１】
以下、図面を参照して、実施形態について説明する。
【００４２】
図１は、本実施形態に係る自動書き換え装置のハードウェア構成を示すブロック図である。図１に示すように、コンピュータ１０は、例えばハードディスクドライブ（ＨＤＤ：Hard Disk Drive）のような外部記憶装置２０と接続されている。この外部記憶装置２０は、コンピュータ１０によって実行されるプログラム２１を格納する。コンピュータ１０および外部記憶装置２０は、自動書き換え装置３０を構成する。
【００４３】
この自動書き換え装置３０は、例えばアスペクト指向プログラミング（ＡＯＰ：Aspect Oriented Programming）実行環境を利用したアプリケーションにおいてアクセス制御処理（アクセス可否の判定処理）がアスペクト（アドバイス）として実現される場合に用いられるＡＯＰ定義ファイル（ＡＯＰ定義情報）および認可ポリシに対して整合性の取れた書き換えを行う機能を有する。
【００４４】
図２は、図１に示す自動書き換え装置３０の主として機能構成を示すブロック図である。
【００４５】
図２に示すように、自動書き換え装置３０は、自動書き換え部３１を含む。本実施形態において、自動書き換え部３１は、図１に示すコンピュータ１０が外部記憶装置２０に格納されているプログラム（自動書き換えプログラム）２１を実行することにより実現されるものとする。このプログラム２１は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム２１が、例えばネットワークを介してコンピュータ１０にダウンロードされても構わない。
【００４６】
また、自動書き換え装置３０は、書き換え対象データ格納部２２および変更履歴格納部２３を含む。本実施形態において、書き換え対象データ格納部２２および変更履歴格納部２３は、例えば外部記憶装置２０に格納される。
【００４７】
書き換え対象データ格納部２２には、本実施形態に係る自動書き換え装置３０による書き換えの対象となる情報が格納される。書き換え対象データ格納部２２は、ＡＯＰ定義格納部２２１および認可ポリシ格納部２２２を含む。
【００４８】
ＡＯＰ定義格納部２２１は、アプリケーションにおける複数のモジュール間に散らばって実装される例えばアクセス制御等の付加的な処理（横断的関心事）を分離するためのアスペクトが定義されるＡＯＰ定義情報が格納される。
【００４９】
ＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報には、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報が含まれる。なお、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列は、例えばオブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列（以下、クラス／メソッド名からなる文字列と表記）を含む。つまり、ポイントカット定義情報には、クラス／メソッド名からなる文字列が記述されている。
【００５０】
認可ポリシ格納部２２２には、例えばアプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる認可ポリシが格納される。この認可ポリシにおいては、アプリケーションを利用するユーザからの要求に対して認可を実行する単位で、誰（サブジェクト）が、アプリケーションが備えるどの資源（リソース）に対して、どの操作（アクション）を行うことができるか否か（つまり、許可または拒否）を表すアクセス可否条件が規定される。なお、本願において、認可とは、リソースへのアクセス権を指定する機能（認可機能）の意味であり、許可とは、認可機能の実行結果、つまりシステムが与えたアクセス権として、「許可する」という意味である。
【００５１】
具体的には、認可ポリシには、例えばサブジェクト（アクセスの主体）について定義されたサブジェクト定義情報、リソース（アクセスの対象）について定義されたリソース定義情報およびアクション（アクセスの行為内容）について定義されたアクション定義情報が含まれる。
【００５２】
認可ポリシに含まれるサブジェクト定義情報は、サブジェクトに関するアクセス可否条件を表現する文字列（例えばユーザの名前、所属、役職および役割等の属性情報）からなる。
【００５３】
認可ポリシに含まれるリソース定義情報は、リソースに関するアクセス可否条件を表現する文字列からなる。なお、リソースに関するアクセス可否条件を表現する文字列は、例えばクラス／メソッド名からなる文字列を含む。つまり、リソース定義情報には、クラス／メソッド名からなる文字列が記述されている。
【００５４】
認可ポリシに含まれるアクション定義情報は、アクションに関するアクセス可否条件を表現する文字列（例えばオブジェクト指向言語におけるメソッドの名称からなる文字列）からなる。
【００５５】
変更履歴格納部２３には、アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報が格納される。この変更履歴情報には、例えばアプリケーションのソースコードにおける変更前の文字列、変更後の文字列および当該変更における操作の種別（操作種別）を示す操作種別情報が含まれる。変更履歴情報に含まれる変更前の文字列および変更後の文字列は、クラス／メソッド名からなる文字列を含む。
【００５６】
なお、本実施形態において、アプリケーションを構成するクラスおよびメソッドと、それに関連するＡＯＰ定義情報（に含まれるポイントカット定義情報）に記述されたクラスおよびメソッドとの整合性は、例えばＡＯＰ定義情報とＪａｖａクラスへの変更を相互に反映するリファクタリング機能によって保たれていることを前提とする。
【００５７】
自動書き換え部３１は、ＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報、認可ポリシ格納部２２２に格納されている認可ポリシおよび変更履歴格納部２３に格納されている変更履歴情報に基づいて、当該ＡＯＰ定義情報（に含まれるポイントカット定義情報）および当該認可ポリシ（に含まれるリソース定義情報）の書き換えを行う機能を有する。
【００５８】
自動書き換え部３１は、書き換え対象データ読み込み部３２、変更履歴読み込み部３３、書き換え要否判定部３４および書き換え対象データ更新部３５を含む。
【００５９】
書き換え対象データ読み込み部３２は、ＡＯＰ定義格納部２２１からＡＯＰ定義情報を取得する機能を有する。また、書き換え対象データ読み込み部３２は、認可ポリシ格納部２２２から認可ポリシを取得する機能を有する。
【００６０】
変更履歴読み込み部３３は、変更履歴格納部２３に格納されている変更履歴情報を、当該変更履歴格納部２３から取得する機能を有する。
【００６１】
書き換え要否判定部３４は、書き換え対象データ読み込み部３２によって取得されたＡＯＰ定義情報に含まれるポイントカット定義情報、認可ポリシに含まれるリソース定義情報および変更履歴読み込み部３３によって取得された変更履歴情報を用いて、当該ＡＯＰ定義情報および当該認可ポリシに対する書き換えが必要であるか否かを判定する機能を有する。
【００６２】
書き換え対象データ更新部３５は、書き換え要否判定部３４による判定結果（判定内容）に応じて、ＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報および認可ポリシ格納部２２に格納されている認可ポリシに対する書き換え処理（更新処理）を実行する機能を有する。
【００６３】
図３は、図２に示す自動書き換え部３１に含まれる書き換え対象データ読み込み部３２の主として機能構成を示すブロック図である。
【００６４】
図３に示すように、書き換え対象データ読み込み部３２は、ＡＯＰ定義読み込み部３２１、ポイントカット抽出部３２２、認可ポリシ読み込み部３２３およびリソース抽出部３２４を含む。
【００６５】
ＡＯＰ定義読み込み部３２１は、ＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報を、当該ＡＯＰ定義格納部２２１から取得する。
【００６６】
ポイントカット抽出部３２２は、ＡＯＰ定義読み込み部３２１によって取得されたＡＯＰ定義情報に含まれるポイントカット定義情報から、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列（つまり、ポイントカット定義情報に記述されている文字列）を抽出する。なお、ポイントカット抽出部３２２によって抽出された文字列は、クラス／メソッド名からなる文字列（オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列）を含む。
【００６７】
認可ポリシ読み込み部３２３は、認可ポリシ格納部２２２に格納されている認可ポリシを、当該認可ポリシ格納部２２２から取得する。
【００６８】
リソース抽出部３２４は、認可ポリシ読み込み部３２３によって取得された認可ポリシに含まれるリソース定義情報から、リソースに関するアクセス可否条件を表現する文字列（つまり、リソース定義情報に記述されている文字列）を抽出する。なお、リソース抽出部３２４によって抽出された文字列は、クラス／メソッド名からなる文字列（オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列）を含む。
【００６９】
なお、書き換え対象データ読み込み部３２は、ポイントカット抽出部３２２によってポイントカット定義情報から抽出された文字列およびリソース抽出部３２４によってリソース定義情報から抽出された文字列を書き換え要否判定部３４に渡す。
【００７０】
図４は、図２に示す自動書き換え部３１に含まれる書き換え要否判定部３４の主として機能構成を示すブロック図である。
【００７１】
図４に示すように、書き換え要否判定部３４は、差分抽出部３４１、変更履歴取得部３４２および判定部３４３を含む。
【００７２】
差分抽出部３４１は、書き換え対象データ読み込み部３２から渡されたポイントカット定義情報から抽出された文字列およびリソース定義情報から抽出された文字列を取得する。差分抽出部３４１は、取得されたポイントカット定義情報から抽出された文字列およびリソース定義情報から抽出された文字列を比較することによって、当該ポイントカット定義情報および当該リソース定義情報間において差分となる文字列（以下、差分文字列と表記）を抽出する。
【００７３】
変更履歴取得部３４２は、変更履歴読み込み部３３によって取得された変更履歴情報を、当該変更履歴読み込み部３３から取得する。
【００７４】
判定部３４３は、差分抽出部３４１によって抽出された差分文字列および変更履歴取得部３４２によって取得された変更履歴情報に基づいて、当該差分文字列がＡＯＰ定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否かを判定する。
【００７５】
なお、書き換え要否判定部３４は、判定部３４３による判定結果を書き換え対象データ更新部３５に渡す。
【００７６】
図５は、図２に示す自動書き換え部３１に含まれる書き換え対象データ更新部３５の主として機能構成を示すブロック図である。
【００７７】
図５に示すように、書き換え対象データ更新部３５は、書き換え処理ハンドリング部３５１、ＡＯＰ定義更新部３５２、認可ポリシ更新部３５３および警告メッセージ出力部３５４を含む。
【００７８】
書き換え処理ハンドリング部３５１は、書き換え要否判定部３４から渡された判定部３４３による判定結果を取得する。書き換え処理ハンドリング部３５１は、取得された判定結果に応じて、ＡＯＰ定義情報または認可ポリシに対する更新処理等をハンドリングする機能を有する。
【００７９】
書き換え処理ハンドリング部３５１は、差分文字列がＡＯＰ定義情報または認可ポリシに対する書き換えの対象となる文字列であると判定部３４３によって判定された場合、当該ＡＯＰ定義情報または認可ポリシの更新処理をＡＯＰ定義更新部３５２または認可ポリシ更新部３５３に要求する。
【００８０】
また、書き換え処理ハンドリング部３５１は、差分文字列がＡＯＰ定義情報または認可ポリシに対する書き換えの対象となる文字列でないと判定部３４３によって判定された場合、例えばアプリケーションを利用するユーザに対する警告出力処理を警告メッセージ出力部３５４に要求する。
【００８１】
ＡＯＰ定義更新部３５２は、書き換え処理ハンドリング部３５１からの要求を受け付けると、上記した差分文字列を用いてＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報を更新する。
【００８２】
認可ポリシ更新部３５３は、書き換え処理ハンドリング部３５１からの要求を受け付けると、上記した差分文字列を用いて認可ポリシ格納部２２２に格納されている認可ポリシに含まれるリソース定義情報を更新する。
【００８３】
警告メッセージ出力部３５４は、書き換え処理ハンドリング部３５１からの要求を受け付けると、上記した差分文字列を用いて警告メッセージを出力する。警告メッセージ出力部３５４によって出力される警告メッセージは、例えば差分文字列が書き換えの対象となる文字列でない旨等を示す。
【００８４】
図６は、図２に示す書き換え対象データ格納部２２に含まれるＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報のデータ構造の一例を示す。
【００８５】
ＡＯＰ定義情報には、当該ＡＯＰ定義情報に定義されているアスペクト（クラス）を識別するためのＩＤが含まれている。図６に示すＡＯＰ定義情報においては、当該ＡＯＰ定義情報に定義されているアスペクトを識別するためのＩＤとして、３行目のid属性の属性値である「authz_aop」が含まれている。
【００８６】
また、ＡＯＰ定義情報には、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報が含まれている。このポイントカット定義情報には、複数のポイントカットが定義されている。なお、ポイントカットとは、どのクラスの、どのようなメソッドが呼ばれたときにアスペクトを実行するかが定義された実行条件である。図６に示すＡＯＰ定義情報においては、１１行目〜１５行目が当該ＡＯＰ定義情報に含まれるポイントカット定義情報であり、１２行目〜１５行目の各々にポイントカットが定義（記述）されている。
【００８７】
なお、図６の１２行目〜１５行目の各々に記述されている文字列（つまり、ポイントカット定義情報に定義されているポイントカット）には、クラス／メソッド名からなる文字列が含まれている。具体的には、図６の１２行目の文字列に含まれる「com.hoge.Service01.doAction()」は、クラス／メソッド名からなる文字列である。この文字列のうち、「com.hoge.Service01」がオブジェクト指向言語におけるクラスの名称であり、「doAction()」がオブジェクト指向言語におけるメソッドの名称である。
【００８８】
また、ＡＯＰ定義情報には、ポイントカット定義情報に定義されている各ポイントカットに関連づけられるアスペクトが持つメソッド（つまり、当該ポイントカットに関連づけられるアドバイス）が定義されている。図６に示す例では、１８行目〜２１行目の各々に各ポイントカットに関連づけられるアスペクトが持つメソッドが定義されている。
【００８９】
図７は、図２に示す書き換え対象データ格納部２２に含まれる認可ポリシ格納部２２２に格納されている認可ポリシのデータ構造の一例を示す。上述したように認可ポリシは、アプリケーションを利用するユーザからのアクセスの可否を判定するために用いられる。
【００９０】
認可ポリシには、上述したようにサブジェクト定義情報、リソース定義情報およびアクション定義情報が含まれる。サブジェクト定義情報は、認可ポリシにおけるサブジェクト（アクセスの主体）に関するアクセス可否条件を表現する文字列からなる。リソース定義情報は、認可ポリシにおけるリソース（アクセスの対象）に関するアクセス可否条件を表現する文字列からなる。アクション定義情報は、認可ポリシにおけるアクション（アクセスの行為内容）に関するアクセス可否条件を表現する文字列からなる。
【００９１】
図７に示す認可ポリシにおいて、サブジェクト定義情報は、４行目〜７行目に示される文字列からなる。このサブジェクト定義情報によれば、図７の３行目に記されたPermit（許可）により、アクセスの主体（サブジェクト）が「ADMIN」である場合に当該アクセスを許可することが示されている。なお、「ADMIN」は、例えばアクセスするユーザの属性情報である。
【００９２】
図７に示す認可ポリシにおいて、リソース定義情報は、９行目〜１６行目に示される文字列からなる。このリソース定義情報によれば、図７の３行目に記されたPermit（許可）により、アクセスの対象（リソース）が「com.hoge.Servic01.doAction()」、「com.hoge.Servic02.doAction()」、「com.hoge.Servic03.doAction()」、「com.hoge.Servic04.doAction()」および「com.hoge.Servic07.doAction()」である場合に当該アクセスを許可することが示されている。
【００９３】
なお、図７に示す認可ポリシにおける１１行目〜１５行目の各々に示される文字列は、クラス／メソッド名からなる文字列を含む。つまり、上記した図６に示すＡＯＰ定義情報に含まれるポイントカット定義情報および図７に示す認可ポリシに含まれるリソース定義情報には、同一または同等の文字列（クラス／メソッド名からなる文字列）が記述される。
【００９４】
また、図７に示す認可ポリシにおいて、アクション定義情報には、１８行目および１９行目に示される文字列が含まれている。図７に示す認可ポリシに含まれるアクション定義情報においては、アクションに関するアクセス可否条件は指定されていない。
【００９５】
図８は、図２に示す変更履歴格納部２３のデータ構造の一例を示す。上述したように変更履歴格納部２３には、アプリケーションのソースコードの変更毎の履歴を示す変更履歴情報が格納されている。図８に示す例では、変更履歴格納部２３には、変更履歴情報２３１〜２３４が格納されている。
【００９６】
図８に示すように、変更履歴格納部２３に格納されている変更履歴情報には、当該変更履歴情報を識別する番号（No）に対応づけてアプリケーションのソースコードにおける変更後の文字列、変更前の文字列および当該変更における操作種別（を示す操作種別情報）が含まれている。
【００９７】
変更履歴情報に含まれる変更後の文字列および変更前の文字列（のフィールド）には、クラス／メソッド名からなる文字列（オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列）が記述される。
【００９８】
操作種別には、例えば「Add」、「Change」および「Delete」が含まれる。「Add」は、クラス／メソッド名からなる文字列の追加を示す。「Change」は、クラス／メソッド名からなる文字列の変更を示す。「Delete」は、クラス／メソッド名からなる文字列の削除を示す。
【００９９】
図８に示す例では、変更履歴情報２３１には、番号「１」に対応づけて変更後の文字列「com.hoge.Service06.doAction()」、変更前の文字列「−」および操作種別「Add」が含まれている。この変更履歴情報２３１によれば、アプリケーションのソースコードにおいて変更後の文字列「com.hoge.Service06.doAction()」で表現されるメソッドが追加されたことが示されている。
【０１００】
また、変更履歴情報２３２には、番号「２」に対応づけて変更後の文字列「com.hoge.Service05.doAction()」、変更前の文字列「com.hoge.Service02.doAction()」および操作種別「Change」が含まれている。この変更履歴情報２３２によれば、アプリケーションのソースコードにおいて変更前の文字列「com.hoge.Service02.doAction()」で表現されるメソッドの名前が変更後の文字列「com.hoge.Service05.doAction()」で表現されるメソッドの名前に変更されたことが示されている。
【０１０１】
また、変更履歴情報２３３には、番号「３」に対応づけて変更後の文字列「−」、変更前の文字列「com.hoge.Service04.doAction()」および操作種別「Delete」が含まれている。この変更履歴情報２３３によれば、アプリケーションのソースコードにおいて変更前の文字列「com.hoge.Service04.doAction()」で表現されるメソッドが削除されたことが示されている。
【０１０２】
また、変更履歴情報２３４には、番号「４」に対応づけて変更後の文字列「com.hoge.Service07.doAction()」、変更前の文字列「−」および操作種別「Add」が含まれている。この変更履歴情報２３４によれば、アプリケーションのソースコードにおいて変更後の文字列「com.hoge.Service07.doAction()」で表現されるメソッドが追加されたことが示されている。
【０１０３】
以下、本実施形態に係る自動書き換え装置３０の動作について説明する。本実施形態に係る自動書き換え装置３０は、書き換え対象データの読み込み処理、書き換え要否の判定処理および書き換え対象データの更新処理の３つの一連の処理を実行する。この一連の処理は、例えばユーザからの指示に応じて実行される。以降、これらの各処理について説明する。
【０１０４】
まず、図９のシーケンスチャートを参照して、書き換え対象データの読み込み処理の処理手順について説明する。この書き換え対象データの読み込み処理は、書き換え対象データ格納部２２に含まれるＡＯＰ定義格納部２２１および認可ポリシ格納部２２２から書き換え前のＡＯＰ定義情報および認可ポリシを読み込む処理である。
【０１０５】
書き換え対象データ読み込み部３２に含まれるＡＯＰ定義読み込み部３２１は、書き換え対象データ格納部２２に含まれるＡＯＰ定義格納部２２１に対してＡＯＰ定義情報の取得を要求する（ステップＳ１）。
【０１０６】
ＡＯＰ定義読み込み部３２１によってＡＯＰ定義情報の取得が要求されると、ＡＯＰ定義格納部２２１からＡＯＰ定義情報が返される（ステップＳ２）。これによって、ＡＯＰ定義読み込み部３２１は、ＡＯＰ定義情報を取得する。ＡＯＰ定義読み込み部３２１は、取得されたＡＯＰ定義情報を書き換え対象データ読み込み部３２に含まれるポイントカット抽出部３２２に渡す。
【０１０７】
ポイントカット抽出部３２２は、ＡＯＰ定義読み込み部３２１から渡されたＡＯＰ定義情報に含まれるポイントカット定義情報から、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列（クラス／メソッド名からなる文字列）を抽出する（ステップＳ３）。
【０１０８】
ここで、ポイントカット抽出部３２２による抽出処理を上述した図６を用いて具体的に説明する。
【０１０９】
まず、ポイントカット抽出部３２２は、図６に示すＡＯＰ定義情報に含まれるアスペクト（クラス）を識別するためのＩＤ（以下、アスペクトＩＤと表記）を参照する。ここでは、ポイントカット抽出部３２２は、アスペクトＩＤとして図６に示すＡＯＰ定義情報の３行目のid属性の属性値「authz_aop」を参照する。
【０１１０】
次に、ポイントカット抽出部３２２は、参照されたアスペクトＩＤ「authz_aop」の実行設定が定義された要素を特定する。ここでは、ポイントカット抽出部３２２は、アスペクトＩＤ「authz_aop」が属性値として定義されている図６に示すＡＯＰ定義情報の９行目の要素を特定する。
【０１１１】
ここで、ポイントカット抽出部３２２によって特定された要素の中には、アプリケーションの実行におけるアスペクトの実行時点を表現する文字列からなるポイントカット定義情報が定義されている。図６に示すＡＯＰ定義情報においては、１１行目〜１５行目がポイントカット定義情報である。なお、このポイントカット定義情報においては、１２行目〜１５行目の各々にポイントカットが定義されている。
【０１１２】
ポイントカット抽出部３２２は、ポイントカット定義の単位（つまり、図６の１２行目〜１５行目の各々）で、オブジェクト指向言語におけるクラスおよびメソッドの名称からなる文字列を抽出する。ポイントカット抽出部３２２は、例えば図６に示すＡＯＰ定義情報の１２行目に定義されている文字列の中から「com.hoge.Service01.doAction()」の文字列を抽出する。また、ポイントカット抽出部３２２は、図６に示すＡＯＰ定義情報の１３行目〜１５行目の各々についても同様に、「com.hoge.Service03.doAction()」、「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」の文字列を抽出する。以下、ポイントカット抽出部３２２によってＡＯＰ定義情報に含まれるポイントカット定義情報から抽出された文字列をポイントカットと称する。
【０１１３】
再び図９に戻ると、書き換え対象データ読み込み部３２に含まれる認可ポリシ読み込み部３２３は、書き換え対象データ格納部２２に含まれる認可ポリシ格納部２２２に対して認可ポリシ情報の取得を要求する（ステップＳ４）。
【０１１４】
認可ポリシ読み込み部３２３によって認可ポリシの取得が要求されると、認可ポリシ格納部２２２から認可ポリシが返される（ステップＳ５）。これによって、認可ポリシ読み込み部３２３は、認可ポリシを取得する。認可ポリシ読み込み部３２３は、取得された認可ポリシを書き換え対象データ読み込み部３２に含まれるリソース抽出部３２４に渡す。
【０１１５】
リソース抽出部３２４は、認可ポリシ読み込み部３２３から渡された認可ポリシに含まれるリソース定義情報から、リソースに関するアクセス可否条件を表現する文字列（クラス／メソッド名からなる文字列）を抽出する（ステップＳ６）。
【０１１６】
ここで、リソース抽出部３２４による抽出処理を上述した図７を用いて具体的に説明する。
【０１１７】
上述した図７に示す認可ポリシにおいては、９行目〜１６行目がリソースに関するアクセス可否条件を表現する文字列からなるリソース定義情報である。
【０１１８】
したがって、認可ポリシ読み込み部３２３から渡された認可ポリシが例えば上述した図７に示す認可ポリシである場合、リソース抽出部３２４は、当該図７に示す認可ポリシの１１行目〜１５行目の各々に記述される文字列を抽出する。具体的には、リソース抽出部３２４は、「com.hoge.Service01.doAction()」、「com.hoge.Service02.doAction()」、「com.hoge.Service03.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」の文字列を抽出する。以下、リソース抽出部３２４によって認可ポリシに含まれるリソース定義情報から抽出された文字列をリソースと称する。
【０１１９】
上記したようにステップＳ６の処理が実行されると、書き換え対象データの読み込み処理は終了される。書き換え対象データの読み込み処理が終了されると、書き換え対象データ読み込み部３２は、書き換え要否判定部３４を呼び出す。このとき、書き換え対象データ読み込み部３２は、ポイントカット抽出部３２２によって抽出された文字列（ポイントカット）およびリソース抽出部３２４によって抽出された文字列（リソース）を書き換え要否判定部３４に渡す。これにより、書き換え要否判定部３４によって上述した書き換え要否の判定処理が実行される。
【０１２０】
次に、図１０のシーケンスチャートを参照して、書き換え要否の判定処理の処理手順について説明する。この書き換え要否の判定処理は、書き換え対象データ読み込み部３２から渡されたポイントカットおよびリソース（ポイントカット定義情報およびリソース定義情報）間において差分となる文字列を抽出し、当該差分文字列がＡＯＰ定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否かを判定する処理である。
【０１２１】
まず、書き換え要否判定部３４に含まれる差分抽出部３４１は、書き換え対象データ読み込み部３２から渡されたポイントカットおよびリソース間において差分となる文字列（差分文字列）を抽出する（ステップＳ１１）。この場合、差分抽出部３４１は、ポイントカットおよびリソース間で同一の文字列が存在することを検証し、当該ポイントカットおよびリソース間で同一の文字列が存在しない文字列を差分文字列として抽出する。
【０１２２】
ここで、図１１を参照して、差分抽出部３４１によって抽出される差分文字列について具体的に説明する。
【０１２３】
ここでは、上記したようにポイントカット（ポイントカット抽出部３２２によって抽出された文字列）が「com.hoge.Service01.doAction()」、「com.hoge.Service03.doAction()」、「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」であり、リソース（リソース抽出部３２４によって抽出された文字列）が「com.hoge.Service01.doAction()」、「com.hoge.Service02.doAction()」、「com.hoge.Service03.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」であるものとする。
【０１２４】
この場合、図１１に示すように、「com.hoge.Service01.doAction()」は、ポイントカットおよびリソースの両方に存在する。このため、「com.hoge.Service01.doAction()」は、差分文字列として抽出されない。
【０１２５】
また、「com.hoge.Service02.doAction()」は、リソースにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service02.doAction()」は、差分文字列として抽出される。
【０１２６】
また、「com.hoge.Service03.doAction()」は、ポイントカットおよびリソースの両方に存在する。このため、「com.hoge.Service03.doAction()」は、差分文字列として抽出されない。
【０１２７】
また、「com.hoge.Service04.doAction()」は、リソースにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service04.doAction()」は、差分文字列として抽出される。
【０１２８】
また、「com.hoge.Service05.doAction()」は、ポイントカットにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service05.doAction()」は、差分文字列として抽出される。
【０１２９】
また、「com.hoge.Service06.doAction()」は、ポイントカットにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service06.doAction()」は、差分文字列として抽出される。
【０１３０】
また、「com.hoge.Service07.doAction()」は、リソースにのみ存在し、ポイントカットおよびリソース間で同一の文字列は存在しない。このため、「com.hoge.Service07.doAction()」は、差分文字列として抽出される。
【０１３１】
したがって、差分抽出部３４１は、図１１に示すようにポイントカットである「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」と、リソースである「com.hoge.Service02.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」とを差分文字列として抽出する。なお、差分抽出部３４１によって抽出された差分文字列は、書き換え要否判定部３４に含まれる判定部３４３に渡される。この判定部３４３に渡される差分文字列には、例えば当該差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報が付与される。
【０１３２】
再び図１０に戻ると、書き換え要否判定部３４に含まれる変更履歴取得部３４２は、変更履歴読み込み部３３に対して、変更履歴情報の取得を要求する（ステップＳ１２）。
【０１３３】
変更履歴取得部３４２によって変更履歴情報の取得が要求されると、変更履歴読み込み部３３は、変更履歴格納部２３から変更履歴情報を取得し、当該取得された変更履歴情報を変更履歴取得部３４２に返す（ステップＳ１３）。これによって、変更履歴取得部３４２は、変更履歴情報を取得する。変更履歴取得部３４は、取得された変更履歴情報を判定部３４３に渡す。
【０１３４】
判定部３４３は、変更履歴取得部３４から渡された変更履歴情報に基づいて、差分抽出部３４１から渡された差分文字列がＡＯＰ定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否か（つまり、書き換えの要否）を判定する処理（以下、書き換え要否判定処理と表記）を実行する（ステップ１４）。
【０１３５】
ここで、図１２のフローチャートを参照して、判定部３４３による書き換え要否判定処理（図１０に示すステップＳ１４の処理）の処理手順について説明する。
【０１３６】
判定部３４３は、差分抽出部３４１から渡された差分文字列（つまり、差分抽出部３４１によって抽出された差分文字列）の各々について、以下のステップＳ２１〜Ｓ２６の処理を実行する。以下、この処理の対象となる差分文字列を対象差分文字列と称する。
【０１３７】
まず、判定部３４３は、変更履歴取得部３４から渡された変更履歴情報（変更履歴格納部２３に格納されている変更履歴情報）に含まれるアプリケーションのソースコードにおける変更前の文字列および変更毎の文字列に基づいて、対象差分文字列を当該変更前の文字列または変更後の文字列として含む変更履歴情報を特定する（ステップＳ２１）。
【０１３８】
対象差分文字列が例えば「com.hoge.Service02.doAction()」の文字列である場合には、上述した図８に示す変更履歴格納部２３に格納されている変更履歴情報２３１〜２３４の中の変更履歴情報２３２が特定される。
【０１３９】
なお、判定部３４３によって特定された変更履歴情報には、操作種別（情報）が含まれる。この操作種別は、例えば「Add（追加）」、「Change（変更）」および「Delete（削除）」を含む。
【０１４０】
次に、判定部３４３は、ステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Add」である（つまり、追加を示す）か否かを判定する（ステップＳ２２）。
【０１４１】
ステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Add」であると判定された場合（ステップＳ２２のＹＥＳ）、判定部３４３は、後述する第１の判定処理を実行する（ステップＳ２３）。
【０１４２】
一方、ステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Add」でないと判定された場合（ステップＳ２２のＮＯ）、判定部３４３は、当該特定された変更履歴情報に含まれる操作種別が「Change」である（つまり、変更を示す）か否かを判定する（ステップＳ２４）。
【０１４３】
ステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Change」であると判定された場合（ステップＳ２４のＹＥＳ）、判定部３４３は、後述する第２の判定処理を実行する（ステップＳ２５）。
【０１４４】
一方、ステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Change」でない、つまり、「Delete」である（つまり、削除を示す）と判定された場合（ステップＳ２４のＮＯ）、判定部３４３は、後述する第３の判定処理を実行する。
【０１４５】
上記した第１〜第３の判定処理は、ステップＳ２１において特定された変更履歴情報に含まれる操作種別に応じた判定処理である。
【０１４６】
上記したように第１〜第３の判定処理が実行されると、判定部３４３は、全ての差分文字列について上記したステップＳ２１〜Ｓ２６の処理が実行されたか否かを判定する（ステップＳ２７）。
【０１４７】
全ての差分文字列について処理が実行されていないと判定された場合（ステップＳ２７のＮＯ）、上記したステップＳ２１に戻って処理が繰り返される。この場合、ステップＳ２１〜Ｓ２６の処理が実行されていない差分文字列を対象差分文字列として処理が実行される。
【０１４８】
一方、全ての差分文字列について処理が実行されたと判定された場合（ステップＳ２７のＹＥＳ）、書き換え要否判定処理は終了される。
【０１４９】
次に、図１３のフローチャートを参照して、上述した第１の判定処理の処理手順について説明する。この第１の判定処理は、図１２に示すステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Add」である場合に実行される処理である。
【０１５０】
まず、判定部３４３は、対象差分文字列（第１の判定処理が実行される際の対象差分文字列）がリソースであるか否かを判定する（ステップＳ３１）。換言すれば、判定部３４３は、対象差分文字列が認可ポリシに含まれるリソース定義情報から抽出された文字列であるか否かを判定する。なお、この判定処理は、上記したように対象差分文字列に付加されている情報（当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報）に基づいて実行される。
【０１５１】
対象差分文字列がリソースであると判定された場合（ステップＳ３１のＹＥＳ）、判定部３４３は、対象差分文字列がＡＯＰ定義情報に含まれるポイントカット定義情報に対する追加の対象となる文字列（ポイントカット追加対象）であると判定する。この場合、判定部３４３は、対象差分文字列をポイントカット追加対象として例えば判定部３４３が有するポイントカット追加対象一時格納部（図示せず）に登録する（ステップＳ３２）。
【０１５２】
一方、対象差分文字列がリソースでない、つまり、ポイントカットであると判定された場合（ステップＳ３１のＮＯ）、判定部３４３は、対象差分文字列が書き換え不要の対象となる文字列（書き換え不要対象）であると判定する。つまり、判定部３４３は、対象差分文字列を書き換えの対象となる文字列ではないと判定する。この場合、判定部３４３は、対象差分文字列を書き換え不要対象として例えば判定部３４３が有する書き換え不要対象一時格納部（図示せず）に登録する（ステップＳ３３）。
【０１５３】
上記したステップＳ３２およびＳ３３の処理が実行されると、第１の判定処理が終了される。
【０１５４】
次に、図１４のフローチャートを参照して、上述した第２の判定処理の処理手順について説明する。この第２の判定処理は、図１２に示すステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Change」である場合に実行される処理である。
【０１５５】
まず、判定部３４３は、対象差分文字列（第２の判定処理が実行される際の対象差分文字列）が第１の条件を満たすか否かを判定する（ステップＳ４１）。
【０１５６】
ここで、第１の条件とは、対象差分文字列がステップＳ２１において特定された変更履歴情報に変更前の文字列として含まれ、かつ、リソースである（つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列である）ことを示す。なお、このステップＳ４１における判定処理は、図１２に示すステップＳ２１において特定された変更履歴情報および上記したように対象差分文字列に付加されている情報（当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報）に基づいて実行される。
【０１５７】
第１の条件を満たさないと判定された場合（ステップＳ４１のＮＯ）、判定部３４３は、対象差分文字列が第２の条件を満たすか否かを判定する（ステップＳ４２）。
【０１５８】
ここで、第２の条件とは、対象差分文字列がステップＳ２１において特定された変更履歴情報に変更後の文字列として含まれ、かつ、ポイントカットである（つまり、ＡＯＰ定義情報に含まれるポイントカット定義情報から抽出された文字列である）ことを示す。なお、このステップＳ４２における判定処理は、図１２に示すステップＳ２１において特定された変更履歴情報および上記したように対象差分文字列に付加されている情報（当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報）に基づいて実行される。
【０１５９】
第２の条件を満たすと判定された場合（ステップＳ４２のＹＥＳ）、判定部３４３は、対象差分文字列を認可ポリシに含まれるリソース定義情報に対する修正後の文字列（リソース修正内容）であると判定する。この場合、判定部３４３は、対象差分文字列をリソース修正内容として例えば判定部３４３が有するリソース修正対象一時格納部（図示せず）に登録する（ステップＳ４３）。
【０１６０】
一方、第２の条件を満たさないと判定された場合（ステップＳ４２のＮＯ）、判定部３４３は、対象差分文字列が書き換え不要の対象となる文字列（書き換え不要対象）であると判定する。この場合、判定部３４３は、対象差分文字列を書き換え不要対象として書き換え不要対象一時格納部に登録する（ステップＳ４４）。
【０１６１】
なお、第１の条件を満たすと判定された場合（ステップＳ４１）、判定部３４３は、対象差分文字列が認可ポリシに含まれるリソース定義情報に対する修正前の文字列（リソース修正対象）であると判定する。この場合、判定部３４３は、対象差分文字列をリソース修正対象としてリソース修正対象一時格納部に登録する（ステップＳ４３）。
【０１６２】
上記したステップＳ４３およびＳ４４の処理が実行されると、第２の判定処理が終了される。
【０１６３】
次に、図１５のフローチャートを参照して、上述した第３の判定処理の処理手順について説明する。この第３の判定処理は、図１２に示すステップＳ２１において特定された変更履歴情報に含まれる操作種別が「Delete」である場合に実行される処理である。
【０１６４】
まず、判定部３４３は、対象差分文字列（第３の判定処理が実行される際の対象差分文字列）がリソースであるか否かを判定する（ステップＳ５１）。換言すれば、判定部３４３は、対象差分文字列が認可ポリシに含まれるリソース定義情報から抽出された文字列であるか否かを判定する。なお、この判定処理は、上記したように対象差分文字列に付加されている情報（当該対象差分文字列がポイントカットであることを示す情報またはリソースであることを示す情報）に基づいて実行される。
【０１６５】
対象差分文字列がリソースであると判定された場合（ステップＳ５１のＹＥＳ）、判定部３４３は、対象差分文字列が認可ポリシに含まれるリソース定義情報に対する削除の対象となる文字列（リソース削除対象）であると判定する。この場合、判定部３４３は、対象差分文字列をリソース削除対象として例えば判定部３４３が有するリソース削除対象一時格納部（図示せず）に登録する（ステップＳ５２）。
【０１６６】
一方、対象差分文字列がリソースでない、つまり、ポイントカットであると判定された場合（ステップＳ５１のＮＯ）、判定部３４３は、対象差分文字列が書き換え不要の対象となる文字列（書き換え不要対象）であると判定する。この場合、判定部３４３は、対象差分文字列を書き換え不要対象として書き換え不要対象一時格納部に登録する（ステップＳ５３）。
【０１６７】
上記したステップＳ５２およびＳ５３の処理が実行されると、第３の判定処理が終了される。
【０１６８】
ここで、上記した図１１において説明したように、ポイントカットである「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」と、リソースである「com.hoge.Service02.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」とが差分文字列として抽出された場合における書き換え要否判定処理について具体的に説明する。なお、変更履歴取得部３４２から渡された変更履歴情報（変更履歴格納部２３に格納されている変更履歴情報）は、上述した図８に示す変更履歴情報２３１〜２３４であるものとして説明する。
【０１６９】
まず、「com.hoge.Service05.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
【０１７０】
判定部３４３は、対象差分文字列である「com.hoge.Service05.doAction()」（以下、対象差分文字列「com.hoge.Service05.doAction()」と表記）を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報２３１〜２３４の中から特定する。この場合、対象差分文字列「com.hoge.Service05.doAction()」は、変更履歴情報２３２に変更後の文字列として含まれている。したがって、判定部３４３は、変更履歴情報２３２を特定する。
【０１７１】
ここで、変更履歴情報２３２に含まれる操作種別は、「Change」である。よって、判定部３４３は、第２の判定処理を実行する。
【０１７２】
対象差分文字列「com.hoge.Service05.doAction()」は、変更履歴情報２３２に変更後の文字列として含まれている。また、対象差分文字列「com.hoge.Service05.doAction()」は、上記したようにポイントカット（つまり、ＡＯＰ定義情報に含まれるポイントカット定義情報から抽出された文字列）である。したがって、判定部３４３は、対象差分文字列「com.hoge.Service05.doAction()」が上記した第１の条件を満たさないと判定する。一方、判定部３４３は、対象差分文字列「com.hoge.Service05.doAction()」が上記した第２の条件を満たすと判定する。
【０１７３】
この場合、判定部３４３は、対象差分文字列「com.hoge.Service05.doAction()」が認可ポリシに含まれるリソース定義情報に対する修正後の文字列（リソース修正内容）であると判定し、当該対象差分文字列「com.hoge.Service05.doAction()」をリソース修正内容としてリソース修正対象一時格納部に登録する。
【０１７４】
次に、「com.hoge.Service06.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
【０１７５】
判定部３４３は、対象差分文字列である「com.hoge.Service06.doAction()」（以下、対象差分文字列「com.hoge.Service06.doAction()」と表記）を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報２３１〜２３４の中から特定する。この場合、対象差分文字列「com.hoge.Service06.doAction()」は、変更履歴情報２３１に変更後の文字列として含まれている。したがって、判定部３４３は、変更履歴情報２３１を特定する。
【０１７６】
ここで、変更履歴情報２３１に含まれる操作種別は、「Add」である。よって、判定部３４３は、第１の判定処理を実行する。
【０１７７】
対象差分文字列「com.hoge.Service06.doAction()」は、上記したようにポイントカット（つまり、ＡＯＰ定義情報に含まれるポイントカット定義情報から抽出された文字列）である。したがって、判定部３４３は、対象差分文字列「com.hoge.Service06.doAction()」がリソースでないと判定する。
【０１７８】
この場合、判定部３４３は、対象差分文字列「com.hoge.Service06.doAction()」が書き換え不要の対象となる文字列（書き換え不要対象）であると判定し、当該対象差分文字列「com.hoge.Service06.doAction()」を書き換え不要対象として書き換え不要対象一時格納部に登録する。
【０１７９】
次に、「com.hoge.Service02.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
【０１８０】
判定部３４３は、対象差分文字列である「com.hoge.Service02.doAction()」（以下、対象差分文字列「com.hoge.Service02.doAction()」と表記）を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報２３１〜２３４の中から特定する。この場合、対象差分文字列「com.hoge.Service02.doAction()」は、変更履歴情報２３２に変更前の文字列として含まれている。したがって、判定部３４３は、変更履歴情報２３２を特定する。
【０１８１】
ここで、変更履歴情報２３２に含まれる操作種別は、「Change」である。よって、判定部３４３は、第２の判定処理を実行する。
【０１８２】
対象差分文字列「com.hoge.Service02.doAction()」は、変更履歴情報２３２に変更前の文字列として含まれている。また、対象差分文字列「com.hoge.Service02.doAction()」は、上記したようにリソース（つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列）である。したがって、判定部３４３は、対象差分文字列「com.hoge.Service02.doAction()」が上記した第１の条件を満たすと判定する。
【０１８３】
この場合、判定部３４３は、対象差分文字列「com.hoge.Service02.doAction()」が認可ポリシに含まれるリソース定義情報に対する修正前の文字列（リソース修正対象）であると判定し、当該対象差分文字列「com.hoge.Service02.doAction()」をリソース修正対象としてリソース修正対象一時格納部に登録する。
【０１８４】
次に、「com.hoge.Service04.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
【０１８５】
判定部３４３は、対象差分文字列である「com.hoge.Service04.doAction()」（以下、対象差分文字列「com.hoge.Service04.doAction()」と表記）を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報２３１〜２３４の中から特定する。この場合、対象差分文字列「com.hoge.Service04.doAction()」は、変更履歴情報２３３に変更前の文字列として含まれている。したがって、判定部３４３は、変更履歴情報２３３を特定する。
【０１８６】
ここで、変更履歴情報２３３に含まれる操作種別は、「Delete」である。よって、判定部３４３は、第３の判定処理を実行する。
【０１８７】
対象差分文字列「com.hoge.Service04.doAction()」は、上記したようにリソース（つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列）である。したがって、判定部３４３は、対象差分文字列「com.hoge.Service04.doAction()」がリソースであると判定する。
【０１８８】
この場合、判定部３４３は、対象差分文字列「com.hoge.Service04.doAction()」が認可ポリシに含まれるリソース定義情報に対する削除の対象となる文字列（リソース削除対象）であると判定し、当該対象差分文字列「com.hoge.Service04.doAction()」をリソース削除対象としてリソース削除対象一時格納部に登録する。
【０１８９】
次に、「com.hoge.Service07.doAction()」の文字列が書き換え要否判定処理における対象差分文字列である場合について説明する。
【０１９０】
判定部３４３は、対象差分文字列である「com.hoge.Service07.doAction()」（以下、対象差分文字列「com.hoge.Service07.doAction()」と表記）を変更後の文字列または変更前の文字列として含む変更履歴情報を変更履歴情報２３１〜２３４の中から特定する。この場合、対象差分文字列「com.hoge.Service07.doAction()」は、変更履歴情報２３４に変更後の文字列として含まれている。したがって、判定部３４３は、変更履歴情報２３４を特定する。
【０１９１】
ここで、変更履歴情報２３２に含まれる操作種別は、「Add」である。よって、判定部３４３は、第１の判定処理を実行する。
【０１９２】
対象差分文字列「com.hoge.Service07.doAction()」は、上記したようにリソース（つまり、認可ポリシに含まれるリソース定義情報から抽出された文字列）である。したがって、判定部３４３は、対象差分文字列「com.hoge.Service07.doAction()」がリソースであると判定する。
【０１９３】
この場合、判定部３４３は、対象差分文字列「com.hoge.Service07.doAction()」がＡＯＰ定義情報に含まれるポイントカット定義情報に対する追加の対象となる文字列（ポイントカット追加対象）であると判定し、当該対象差分文字列「com.hoge.Service07.doAction()」をポイントカット追加対象としてポイントカット追加対象一時格納部に登録する。
【０１９４】
上記したようにポイントカットである「com.hoge.Service05.doAction()」および「com.hoge.Service06.doAction()」と、リソースである「com.hoge.Service02.doAction()」、「com.hoge.Service04.doAction()」および「com.hoge.Service07.doAction()」とが差分文字列として抽出された場合には、図１６に示すような書き換え要否判定処理の結果（判定結果）を得ることができる。
【０１９５】
具体的には、図１６に示すように、書き換え要否判定処理の判定結果として「com.hoge.Service05.doAction()」がリソース修正内容としてリソース修正対象一時格納部に登録され、「com.hoge.Service06.doAction()」が書き換え不要対象として書き換え不要対象一時格納部に登録され、「com.hoge.Service02.doAction()」がリソース修正対象としてリソース修正対象一時格納部に登録され、「com.hoge.Service04.doAction()」がリソース削除対象としてリソース削除対象一時格納部に登録され、「com.hoge.Service07.doAction()」がポイントカット追加対象としてポイントカット追加対象一時格納部に登録される。
【０１９６】
上記したように図１０に示すステップＳ１４の処理が実行されると、書き換え要否の判定処理は終了される。書き換え要否の判定処理が終了されると、書き換え要否判定部３４は、書き換え対象データ更新部３５を呼び出す。このとき、書き換え要否判定部３４は、書き換え要否判定処理（図１０に示すステップＳ１４の処理）の判定結果（つまり、図１６に示す各一時格納部に格納された文字列）を書き換え対象データ更新部３５に渡す。つまり、各書き換え内容に関する更新情報が書き換え対象データ更新部３５に引き渡される。これにより、書き換え対象データ更新部３５によって上述した書き換え対象データの更新処理が実行される。
【０１９７】
次に、図１７のフローチャートを参照して、書き換え対象データの更新処理の処理手順について説明する。この書き換え対象データの更新処理は、上記した書き換え要否判定処理の判定結果に応じてＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報（に含まれるポイントカット定義情報）および認可ポリシ格納部２２２に格納されている認可ポリシ（に含まれるリソース定義情報）を更新する処理である。
【０１９８】
書き換え対象データ更新部３５に含まれる書き換え処理ハンドリング部３５１は、判定部３４３が有する各一時格納部（リソース修正対象一時格納部、書き換え不要対象一時格納部、リソース削除対象一時格納部およびポイントカット追加対象一時格納部）に格納された文字列に応じて更新処理をハンドリングする。
【０１９９】
なお、上記したように判定部３４３が有する各一時格納部に格納された文字列は、書き換え要否判定部３４から渡される。以下、リソース修正対象一時格納部にリソース修正対象として格納された文字列をリソース修正対象文字列と称する。また、リソース修正対象一時格納部にリソース修正内容として格納された文字列をリソース修正内容文字列と称する。また、書き換え不要対象一時格納部に書き換え不要対象として格納された文字列を書き換え不要対象文字列と称する。また、リソース削除対象一時格納部にリソース削除対象として格納された文字列を、リソース削除対象文字列と称する。また、ポイントカット追加対象一時格納部にポイントカット追加対象として格納された文字列をポイントカット追加対象文字列と称する。
【０２００】
まず、書き換え処理ハンドリング部３５１は、書き換え要否判定部３４から渡されたポイントカット追加対象文字列に応じて、ＡＯＰ定義更新部３５２に更新処理をハンドリングする（ステップＳ６１）。このとき、書き換え処理ハンドリング部３５１は、ポイントカット追加対象文字列をＡＯＰ定義更新部３５２に渡す。
【０２０１】
ＡＯＰ定義更新部３５２は、書き換え処理ハンドリング部３５１から渡されたポイントカット追加対象文字列を、ＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報に追加することによって当該ポイントカット定義情報を更新する（ステップＳ６２）。
【０２０２】
次に、書き換え処理ハンドリング部３５１は、書き換え要否判定部３４から渡されたリソース修正内容文字列、リソース修正対象文字列およびリソース削除対象文字列に応じて、認可ポリシ更新部３５３に更新処理をハンドリングする（ステップＳ６３）。このとき、書き換え処理ハンドリング部３５１は、リソース修正内容文字列、リソース修正対象文字列およびリソース削除対象文字列を認可ポリシ更新部３５３に渡す。
【０２０３】
認可ポリシ更新部３５３は、書き換え処理ハンドリング部３５１から渡されたリソース修正内容文字列、リソース修正対象文字列およびリソース削除対象文字列を用いて認可ポリシ格納部２２２に格納されている認可ポリシに含まれるリソース定義情報を更新する（ステップＳ６４）。
【０２０４】
この場合、認可ポリシ更新部３５３は、認可ポリシに含まれているリソース定義情報において、リソース修正対象文字列をリソース修正内容文字列に変更することによって、当該リソース定義情報を更新する。
【０２０５】
また、認可ポリシ更新部３５３は、リソース削除対象文字列を、認可ポリシに含まれているリソース定義情報から削除することによって当該リソース定義情報を更新する。
【０２０６】
次に、書き換え処理ハンドリング部３５１は、書き換え要否判定部３４から渡された書き換え不要対象文字列に応じて、警告メッセージ出力部３５４に警告出力処理をハンドリングする（ステップＳ６５）。このとき、書き換え処理ハンドリング部３５１は、書き換え不要対象文字列を警告メッセージ出力部３５４に渡す。
【０２０７】
警告メッセージ出力部３５４は、書き換え処理ハンドリング部３５１から渡された書き換え不要対象文字列が書き換えの対象とならない（つまり、書き換え処理が適用されない）旨を示す警告メッセージを出力（表示）する（ステップＳ６６）。ステップＳ６６の処理が実行されると、書き換え対象データの更新処理は終了される。
【０２０８】
ここで、上述した図６、図７、図１６を参照して、書き換え対象データの更新処理について具体的に説明する。
【０２０９】
ここでは、図６に示すＡＯＰ定義情報を書き換え前（書き換え対象データの更新処理前）のＡＯＰ定義情報とし、図７に示す認可ポリシを書き換え前（書き換え対象データの更新処理前）の認可ポリシとする。
【０２１０】
また、図１６に示すように、リソース修正対象文字列は、「com.hoge.Service02.doAction()」であるものとする。また、リソース修正内容文字列は、「com.hoge.Service05.doAction()」であるものとする。また、書き換え不要対象文字列は、「com.hoge.Service06.doAction()」であるものとする。また、リソース削除対象文字列は、「com.hoge.Service04.doAction()」であるものとする。また、ポイントカット追加対象文字列は、「com.hoge.Service07.doAction()」であるものとする。
【０２１１】
この場合、図６に示すＡＯＰ定義情報（書き換え前のＡＯＰ定義情報）に含まれるポイントカット定義情報には存在しないポイントカット追加対象文字列である「com.hoge.Service07.doAction()」が当該ポイントカット定義情報（ここでは、図６の１６行目）に追加される。この場合、ＡＯＰ定義情報に含まれるポイントカット定義情報においては、ポイントカット追加対象文字列である「com.hoge.Service07.doAction()」を用いてポイントカットが記述（定義）される。また、ポイントカット定義情報に新たに定義されたポイントカットに関連づけられるアスペクトが持つメソッド（を表現する文字列）がＡＯＰ定義情報に追加される。
【０２１２】
このように図６に示すＡＯＰ定義情報に対して更新処理が実行されることによって、当該図６に示すＡＯＰ定義情報は、図１８に示すＡＯＰ定義情報（つまり、書き換え後のＡＯＰ定義情報）に更新される。
【０２１３】
次に、図７に示す認可ポリシ（書き換え前の認可ポリシ）に含まれるリソース定義情報において、リソース修正対象文字列である「com.hoge.Service02.doAction()」（図７の１２行目）がリソース修正内容文字列である「com.hoge.Service05.doAction()」に変更される。
【０２１４】
また、図７に示す認可ポリシに含まれるリソース定義情報に存在するリソース削除対象文字列である「com.hoge.Service04.doAction()」（図７の１４行目）が当該リソース定義情報から削除される。
【０２１５】
このように図７に示す認可ポリシに対して更新処理が実行されることによって、当該図７に示す認可ポリシは、図１９に示す認可ポリシ（つまり、書き換え後の認可ポリシ）に更新される。
【０２１６】
なお、書き換え不要対象文字列である「com.hoge.Service06.doAction()」に関しては、上記したように当該書き換え不要対象文字列が書き換え対象とならない旨を示す警告メッセージが出力される。この場合には、例えば「com.hoge.Service06.doAction()については書き換え処理を適用しませんでした。御確認下さい。」等のメッセージが出力される。これにより、ユーザは、「com.hoge.Service06.doAction()」についてはユーザの判断で書き換え要否の必要性があることを確認することができる。
【０２１７】
上記したように本実施形態においては、ＡＯＰ定義格納部２２１から取得されたＡＯＰ定義情報に含まれるポイントカット定義情報からアプリケーションの実行におけるアスペクトの実行時点を表現する文字列（クラス／メソッド名からなる文字列）が抽出され、認可ポリシ格納部２２２から取得された認可ポリシに含まれるリソース定義情報からリソースに関するアクセス可否条件を表現する文字列（クラス／メソッド名からなる文字列）が抽出され、当該ＡＯＰ定義情報から抽出された文字列および当該認可ポリシから抽出された文字列が比較されることによって、ポイントカット定義情報およびリソース定義情報間において差分となる差分文字列が抽出される。本実施形態においては、変更履歴格納部２３から取得された変更履歴情報の中から差分文字列をアプリケーションのソースコードにおける変更前の文字列または変更後の文字列として含む変更履歴情報が特定され、当該特定された変更履歴情報に基づいて当該差分文字列がＡＯＰ定義情報または認可ポリシに対する書き換えの対象となる文字列であるか否かが判定される。本実施形態においては、差分文字列が書き換えの対象となる文字列であると判定された場合、当該差分文字列に基づいてＡＯＰ定義格納部２２１に格納されているＡＯＰ定義情報に含まれるポイントカット定義情報または認可ポリシ格納部２２２に格納されている認可ポリシに含まれるリソース定義情報が更新される。
【０２１８】
また、本実施形態においては、特定された変更履歴情報に含まれる変更前の文字列、変更後の文字列および操作種別に応じて差分文字列がリソース修正対象、リソース修正内容、書き換え不要対象、リソース削除対象またはポイント追加対象であると判定され、当該判定結果に応じて更新処理が実行される。
【０２１９】
これにより、本実施形態においては、例えばアプリケーションのソースコードの変更に応じて既存の認可ポリシに対してリソースに関するアクセス可否条件の更新等が発生した場合であっても、当該認可ポリシと同等の内容をＡＯＰ定義情報に含まれるポイントカット定義情報に定義することが可能となるため、手作業によるポイントカット定義情報に対する修正の手間を省くことができ、効率よくポイントカット定義情報を更新することができる。
【０２２０】
更に、本実施形態においては、例えばアプリケーションのソースコードの変更に応じて既存のＡＯＰ定義情報に含まれるポイントカット定義情報の更新が発生した場合であっても、人手によって認可ポリシの修正箇所を追跡することなく確実に認可ポリシを更新することができるため、効率よく認可ポリシを保守することができる。
【０２２１】
したがって、本実施形態においては、効率よくポイントカットの定義内容（ポイントカット定義情報）および認可ポリシのアクセス可否条件（リソース定義情報）を自動修正することが可能となる。
【０２２２】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。  
【符号の説明】
【０２２３】
１０…コンピュータ、２０…外部記憶装置、２２…書き換え対象データ格納部、２３…変更履歴格納部、３０…自動書き換え装置、３１…自動書き換え部、３２…書き換え対象データ読み込み部、３３…変更履歴読み込み部、３４…書き換え要否判定部、３５…書き換え対象データ更新部、２２１…ＡＯＰ定義格納部、２２２…認可ポリシ格納部、３２１…ＡＯＰ定義読み込み部（ＡＯＰ定義取得手段）、３２２…ポイントカット抽出部、３２３…認可ポリシ読み込み部（認可ポリシ取得手段）、３２４…リソース抽出部、３４１…差分抽出部、３４２…変更履歴取得部、３４３…判定部、３５１…書き換え処理ハンドリング部、３５２…ＡＯＰ定義更新部、３５３…認可ポリシ更新部、３５４…警告メッセージ出力部。
【図１】
2012038029.tif 000003
【図２】
2012038029.tif 000004
【図３】
2012038029.tif 000005
【図４】
2012038029.tif 000006
【図５】
2012038029.tif 000007
【図６】
2012038029.tif 000008
【図７】
2012038029.tif 000009
【図８】
2012038029.tif 000010
【図９】
2012038029.tif 000011
【図１０】
2012038029.tif 000012
【図１１】
2012038029.tif 000013
【図１２】
2012038029.tif 000014
【図１３】
2012038029.tif 000015
【図１４】
2012038029.tif 000016
【図１５】
2012038029.tif 000017
【図１６】
2012038029.tif 000018
【図１７】
2012038029.tif 000019
【図１８】
2012038029.tif 000020
【図１９】
2012038029.tif 000021