JP2009129326A - ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体 - Google Patents

ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体 Download PDF

Info

Publication number
JP2009129326A
JP2009129326A JP2007305798A JP2007305798A JP2009129326A JP 2009129326 A JP2009129326 A JP 2009129326A JP 2007305798 A JP2007305798 A JP 2007305798A JP 2007305798 A JP2007305798 A JP 2007305798A JP 2009129326 A JP2009129326 A JP 2009129326A
Authority
JP
Japan
Prior art keywords
source code
access
class
access right
interface
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007305798A
Other languages
English (en)
Inventor
Yojiro Tagawa
陽次郎 田川
Shingo Ishii
信吾 石井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2007305798A priority Critical patent/JP2009129326A/ja
Publication of JP2009129326A publication Critical patent/JP2009129326A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

【課題】機密情報へのアクセス制限を実現した上で、プログラムの開発作業を効率的に行える開発環境を備えたソフトウェア開発システムを提供する。
【解決手段】開発環境制御部204は、アクセス権判定部205により対象のソースコードのアクセス権を判断し、ソースコードがアクセス制限対象である場合、その制限に従い、ソースコードを表示するか、インターフェースのみに制限して表示するか、もしくは表示を行わない。また、対象のソースコードがアクセス制限の対象でない場合、外部インターフェースの利用を抽出し、その外部インターフェースの利用が可能な場合、ソースコードを表示し、利用が不可能な場合、インターフェースのみに制限して表示する。
【選択図】図21

Description

本発明は、ソースファイルにアクセス権限を設定し、その権限に従って、ソースファイルへのアクセス制御を行うソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体に関する。
ソフトウェアの開発において、外部のソフトウェア製造業者が製造したプログラムモジュールをプログラムの一部として組み込む場合がある。その際、プログラムモジュールが機密情報を含むものである場合、そのソースコードを開示する対象を、一部の開発者のみに限定する必要がある。
また逆に、外部のソフトウェア製造業者に一部のプログラムモジュールの製造を委託する場合もある。その際、開発するソフトウェアに、機密情報を含むプログラムモジュールがある場合、そのプログラムモジュールのソースコードを外部のソフトウェア製造業者に提供することはできない。
ソフトウェアの開発では、実行可能な全てのプログラムモジュールを提供する必要があるため、上記のような場合、ソースコードを提供する代わりに、コンパイルされたオブジェクトやライブラリを配布することが行われている。
しかし、ソースコードをコンパイルし、オブジェクトを作成、配布することは、コストのかかる作業である。また、ソースコードのバージョンに合わせて、コンパイルされたオブジェクトのバージョン管理を行う必要や、実行されるプラットフォームが複数ある場合、プラットフォーム毎にオブジェクトを用意する必要があった。
また、顧客データなど、セキュリティ上、データの持ち出しが制限されるデータを用いてソフトウェアを開発する場合、そのデータの利用が必要な場合がある。例えば、プログラムの不具合の解析作業で、実際の顧客データを必要とする場合があるが、その際、データの持ち出しが制限されるため、開発作業を実施する作業場所が制限されていた。
ところで、特許文献1に記載の「暗号解読コンパイラ」では、オブジェクトを配布する代わりに、暗号化したソースコードを配布し、コンパイラが暗号を解読してコンパイルすることで、オブジェクトを作成して配布する作業コストを減らす方法が公開されている。
また、特許文献2に記載の「ソフトウェアへのアクセスを許可する方法、システム、およびプログラム製品」では、開発ツールで開発対象のターゲット、つまり、ソースコードや、データなどに対して、アクセス制御を行う方法が公開されている。
特開2001−134337号公報 特表2005−506606号公報
しかしながら、上記従来の前者の場合、開発中のソースコードは、常に変化する可能性が高く、特に、プログラムのデバッグ作業中においては、修正作業が繰り返される。このため、そのたびに配布作業を行っていては、大きな時間的なコストが発生する。また、機密保護対象となるプログラムモジュール自身も含めて開発途中である場合、ソースコードを暗号化し、配布する作業を行うことには問題がある。
また、上記従来の後者の場合、ソフトウェアの開発においては、ソースコードをコンパイルし、プログラムの実行が行える環境が提供されなければならない。そのためには、ソースコードや、プログラムの動作に必要なデータを開発環境上に配置する必要がある。しかし、ソースコードや、データの配置が、ローカルの端末など、開発ツール以外から、容易にアクセス可能な場所にあっては、開発ツールでアクセス制限が行われていても、機密保持ができない。そのため、開発ツール以外からは直接アクセスできない場所に、ソースコードやデータが配置された開発環境を用意する必要がある。
また、ソフトウェア開発において、複数のプログラムモジュールを、複数の開発担当者が分担して作業を行うことになるが、機密情報を含むプログラムモジュールも、別のプログラムモジュールから利用されることになる。そのため、機密情報を含むプログラムモジュールの利用法を示すもの、つまりインターフェース定義は、利用されるためには公開されていなければならない。
しかし、インターフェースが公開されていると、そのモジュールが提供している機能を知ることができるため、このインターフェース定義そのものも、また機密情報である場合もある。そのため、機密保護の対象のインターフェースは、利用を許可した開発者のみに限定して公開する必要がある。また、その機密保護対象のインターフェースを利用しているプログラムモジュールには、そのインターフェースを利用したソースコードが記述されることになる。そこから、機密保護対象の機能や利用方法を知ることが可能になる。つまり、機密保護対象のインターフェースを利用しているプログラムモジュール自体も機密保護の対象とすべきである。
ここで、例えば、ソースコードへのアクセスを、開発者自身が担当するプログラムモジュールのみに限定する方法も考えられる。しかし、プログラムの開発、特に、プログラムの不具合を解析する作業においては、担当プログラムモジュール以外のプログラムモジュールの内容、つまり、ソースコードが参照可能であることは、解析作業を効率的に行うためには、非常に重要である。そのため、機密保護は必要な箇所にのみ限定的に行われることが好ましい。
そこで、本発明は、機密情報へのアクセス制限を実現した上で、プログラムの開発作業を効率的に行える開発環境を備えたソフトウェア開発システムを提供することを目的とする。同様に、本発明は、そのようなソフトウェア開発システムのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体を提供することを目的とする。
本発明は、機密保護対象のプログラムモジュールのソースコードに対し、そのモジュールの利用が許可された開発者による機密保護対象のインターフェースへのアクセスは制限されない開発環境を備えたソフトウェア開発システムを提供することを他の目的とする。この場合、それ以外の開発者による機密保護対象のインターフェースへのアクセスは制限される。同様に、本発明は、そのようなソフトウェア開発システムのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体を提供することを他の目的とする。
上記目的を達成するために、本発明のソフトウェア開発システムは、開発対象のソースコードを含む開発環境を備えたサーバ装置と、前記開発環境へのユーザインターフェースを備えたクライアント端末とを有するソフトウェア開発システムであって、前記サーバ装置は、当該サーバ装置に前記開発環境を構築する開発環境生成手段と、前記ソースコードに対するアクセス権情報を設定するアクセス権情報設定手段と、前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断手段とを備え、前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御することを特徴とする。
本発明のソフトウェア開発システムのアクセス制限方法は、開発対象のソースコードを含む開発環境を備えたサーバ装置と、前記開発環境へのユーザインターフェースを備えたクライアント端末とを有するソフトウェア開発システムのアクセス制限方法であって、前記サーバ装置は当該サーバ装置に前記開発環境を構築しておく開発環境生成ステップと、前記サーバ装置は前記ソースコードに対するアクセス権情報を設定しておくアクセス権情報設定ステップと、前記サーバ装置は前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断ステップと、前記サーバ装置は前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御する表示制御ステップとを有することを特徴とする。
本発明のサーバ装置は、開発対象のソースコードを含む開発環境を備え、前記開発環境へのユーザインターフェースを備えたクライアント端末と共にソフトウェア開発システムを構築するサーバ装置であって、当該サーバ装置に前記開発環境を構築する開発環境生成手段と、前記ソースコードに対するアクセス権情報を設定するアクセス権情報設定手段と、前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断手段とを備え、前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御することを特徴とする。
本発明のプログラムは、開発対象のソースコードを含む開発環境を備えたサーバ装置と、前記開発環境へのユーザインターフェースを備えたクライアント端末とを有するソフトウェア開発システムを制御するアクセス制限方法をコンピュータに実行させるプログラムにおいて、前記アクセス制限方法は、前記サーバ装置は当該サーバ装置に前記開発環境を構築しておく開発環境生成ステップと、前記サーバ装置は前記ソースコードに対するアクセス権情報を設定しておくアクセス権情報設定ステップと、前記サーバ装置は前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断ステップと、前記サーバ装置は前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御する表示制御ステップとを有することを特徴とする。
本発明の請求項1−5に係るソフトウェア開発システムによれば、機密情報へのアクセス制限を実現した上で、プログラムの開発作業を効率的に行える開発環境を備えることができる。また、機密保護対象のプログラムモジュールのソースコードに対し、その利用が許可された開発者には、機密保護対象のインターフェースへのアクセスは制限されない開発環境を備えたソフトウェア開発システムを提供することができる。この場合、それ以外の開発者では、機密保護対象のインターフェースへのアクセスも制限される。
このように、コンパイル済みのオブジェクトやデータの配布を必要とせずに、機密保護対象へのアクセス制限を行う開発環境の提供が可能になる。
さらに、開発作業を行う場所は限定されないため、顧客データなどの外部への持ち出し不可能なデータを用いた障害解析作業を、遠隔の環境から行うことができる。また、複数の開発拠点をまたがった分散開発作業が、機密保護を実現した上で可能となる。
さらに、担当者ごとに適切なアクセス制限が行われることになるため、1つの実行環境上で、プログラムの不具合の解析作業などを行う場合などの連携作業が、機密保護を実現した上で可能となる。また、ソースコードへの機密保護を実現しつつ、ソースコードのコンパイル、プログラムの実行が可能になり、オブジェクトやデータの配布を必要としない。
請求項6に係るソフトウェア開発システムによれば、クラス継承を含むプログラミング言語であっても、適切なアクセス制御を実現することができる。
請求項7に係るソフトウェア開発システムによれば、言語仕様上のアクセス制御機能において利用不可能なインターフェースを考慮した表示を行うことができる。請求項8に係るソフトウェア開発システムによれば、アクセス権を言語仕様のスコープと関連づけて容易に設定することができる。
請求項9に係るソフトウェア開発システムによれば、C言語などシンボルの名前空間が言語仕様上不明確な場合や、言語仕様上のアクセス制限機能がない場合においても、シンボルが定義されているスコープの特定を容易にできる。また、スコープ単位でのアクセス権の設定が可能になる。請求項10に係るソフトウェア開発システムによれば、開発担当者単位でのアクセス制限を行うことが可能になる。請求項11に係るソフトウェア開発システムによれば、機密情報への外部からのアクセスを防ぐことができる。
本発明のソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体の実施の形態について図面を参照しながら説明する。
[第1の実施形態]
第1の実施形態では、プログラミング言語としてJava(登録商標)を用いた、Webアプリケーションを開発する環境を例に、ソフトウェア開発システムを説明する。図1はWebアプリケーションの開発環境を備えたソフトウェア開発システムの構成を示す図である。ソフトウェア開発システムは、ネットワーク50を介してサーバ200およびクライアント端末100が接続された構成を有する。
クライアント端末(コンピュータ)100では、開発環境GUI101が動作する。この開発環境GUI101は、開発環境に対するユーザインターフェースを提供し、開発環境画面2100(図4参照)を表示する。
クライアント端末100とネットワーク50で接続されたサーバ(コンピュータ)200上には、リモート開発環境300が搭載されている。リモート開発環境300には、プログラムの動作環境である実行環境310、開発ツール320および開発対象のプログラムのソースコード330が含まれる。図1では、一般的なWebアプリケーションの開発と実行に必要な構成が示されている。
実行環境310は、Webアプリケーションを動作させるアプリケーションサーバ312、プログラムの実行ファイルであるクラスファイル311、およびデータベース313からなる。開発ツール320は、ソースコード330からクラスファイル311を生成するためのコンパイラ323、ソースコード330を編集するためのエディタ322、およびデバッグを行うためのデバッガ321からなる。
開発環境GUI101は、サーバ200上のクライアント通信部201とネットワーク50を介して接続されている。開発環境GUI101は、リモート開発環境300を構築するための開発環境生成部202、およびリモート開発環境300上で開発作業を行うための開発環境制御部204にアクセスする。これにより、ネットワーク50を介してプログラムの開発作業を行うことができる開発環境が提供される。
この開発環境の実現方法として、この開発環境それ自体も、Webアプリケーションとして提供することができる。その場合、クライアント通信部201をWebアプリケーションサーバとする。開発環境生成部202および開発環境制御部204をそのWebアプリケーションサーバ上で動作するWebアプリケーションとする。開発環境GUI101をWebブラウザとする。これにより、これらの機能を実現することが可能である。以降の説明では、この開発環境自体もWebアプリケーションとして構築されていることとして説明する。
本実施形態の開発環境では、上記機能の他にさらに、機密保護を実現するための機能が加わっている。まず、ログイン制御部203は、アクセスしたユーザを認証するための機能である。これは、通常のWebアプリケーションに含まれるユーザ認証機能と同等である。アクセス権判定部205は、ソースコード330に対するアクセス権の判定処理を行う。このアクセス権判定部205はアクセス権限判断手段に相当する。アクセス権情報206は、ソースコード330に対するアクセス権の設定を保持するデータを示す。また、アクセス権設定部207は、アクセス権情報206にユーザ単位のアクセス権の情報を設定するための機能を提供する。このアクセス権設定部207はアクセス権情報設定手段に相当する。
図2はリモート開発環境300をサーバ200上に構築する際のシーケンスを示す図である。まず、ユーザはプロジェクト一覧画面の表示を開発環境GUI101に対して要求する(ステップS201)。開発環境GUI101はクライアント通信部201に対してプロジェクト一覧画面の要求を送出する(ステップS202)。一般的に、ステップS202で送出される要求は、HTTPのリクエストであり、プロジェクト一覧画面を示すURLとなる。次に、クライアント通信部201は開発環境生成部202に対してプロジェクト一覧画面の生成を要求する(ステップS203)。開発環境生成部202はプロジェクト一覧画面を生成する。そして、クライアント通信部201はこの生成された画面を開発環境GUI101に対して送信する(ステップS204)。
図3は開発環境GUI101で表示されるプロジェクト一覧画面2000を示す図である。開発環境生成部202は、プロジェクト一覧画面2000をHTMLで表現された画面として生成することになる。パネル2001には、あらかじめ準備された開発プロジェクトの一覧が表示されている。
ユーザは、開発プロジェクトの一覧から開発環境の構築を行うプロジェクトを選択することができる。ボタン2002は、選択されたプロジェクトの開発環境の構築を開始するボタンである。
ユーザは、パネル2001内のプロジェクトを選択し、ボタン2002を押下すると(図2のステップS205)、開発環境GUI101は、クライアント通信部201に対して開発環境構築要求を送出する(ステップS206)。このステップS206で送出される要求もHTTPのリクエストである。このHTTPのリクエストには、選択されたプロジェクトの識別子が含まれることになる。この要求を受けたクライアント通信部201は、開発環境生成部202に対し、指定されたプロジェクトの開発環境の構築を要求する(ステップS207)。開発環境生成部202は、リモート開発環境300をサーバ200上に構築する。
リモート開発環境300の構築は、例えば、構成管理システムなどで管理されている開発環境の構成物を取り出すことにより行われることになる。リモート開発環境300の構築が完了すると、クライアント通信部201は、生成されたリモート開発環境300へのユーザインターフェースの画面(開発環境画面2100)へのリダイレクト要求を開発環境GUI101に対して送信する。
ここで構築されるリモート開発環境300は、ユーザごとに個別に開発作業を行う場合、ユーザごとに確保された領域に構築される。また、デバッグなどの解析作業を複数のユーザで行う場合、1つの環境を共有して利用することが行われる。ここでは、リモート開発環境300は、プロジェクトを選択して構築される例を示したが、障害管理システムと連動し、障害情報に障害を発生させたデータやソースコードのバージョンを記録しておき、それを基に、リモート開発環境300を構築する方法もある。
図4は開発環境GUI101で表示される開発環境画面2100を示す図である。この画面2100は、プログラムの作成ツール、開発対象アプリケーションの実行制御ツールなどを提供しており、統合開発環境(IDE)としての機能を有する。
パネル2101はアプリケーションサーバ312の制御機能を有する。パネル2102はデバッガ321の制御機能を有する。パネル2103はアプリケーションサーバ312の実行状態を示すスタックトレースの表示を行う。パネル2104は変数等のデバッガ321が出力する情報の表示を行う。パネル2105はソースコード330の編集機能を有する。パネル2106はソースコード330が格納されているディレクトリをブラウズ(閲覧)するための機能を有する。ボタン2107はソースコードの編集結果を保存する機能を有する。パネル2108はアプリケーションサーバ312のコンソール出力の表示を行う機能を有する。
図5は開発環境画面2100の操作例として、ソースコード330をエディタパネル2105に表示する際のシーケンスを示す図である。ユーザがパネル2106で編集対象のソースファイルを選択すると(ステップS301)、開発環境GUI101はクライアント通信部201に対して選択ファイルの読み込み要求を送出する(ステップS302)。クライアント通信部201は、開発環境制御部204に対して選択ファイルの読み込みを指示し(ステップS303)、開発環境制御部204は、エディタ322に選択ファイルを読み込む(ステップS304)。そして、開発環境制御部204は、選択ファイルの編集画面を生成してクライアント通信部201に送出し(ステップS305)、クライアント通信部201は開発環境GUI101に画面を送信する(ステップS306)。この結果、選択したファイルの編集画面として、エディタパネル2105にソースコード330が表示される。
図6は開発環境画面2100の操作例として、ソースコード330のコンパイルを行う際のシーケンスを示す図である。ここでは、エディタパネル2105に表示されているソースの編集後、保存ボタン2107を押したタイミングでコンパイルが実行される。
ユーザが保存ボタン2107を押下すると(ステップS401)、開発環境GUI101はクライアント通信部201に対して変更保存要求を送出する(ステップS402)。クライアント通信部201は開発環境制御部204に対して変更の保存を指示し(ステップS403)、開発環境制御部204はエディタ322に変更保存を指示する(ステップS404)。さらに、開発環境制御部204はコンパイラ323に対して、保存したファイルのコンパイルを指示する(ステップS405)。そして、開発環境制御部204はコンパイル結果画面を作成し、クライアント通信部201に送信する(ステップS406)。
コンパイル結果画面は、例えば、コンパイルエラーがある場合、エディタパネル2105に表示されているソースコードのエラー箇所にマーキングが表示されている画面として生成される。クライアント通信部201は生成されたコンパイル結果画面を開発環境GUI101に送信する(ステップS407)。これにより、エディタパネル2105には、コンパイル結果が表示される。
図7は開発環境画面2100の操作例として、デバッガ操作を行う際のシーケンスを示す図である。まず、開発対象のプログラムの起動操作について説明する。ユーザはパネル2101で起動ボタンを押下すると(ステップS501)、開発環境GUI101はクライアント通信部201に対してアプリケーションの起動要求を送出する(ステップS502)。そして、クライアント通信部201はアプリケーションサーバ312を起動する(ステップS503)。これにより、開発対象のプログラムが起動する。
次に、デバッガ操作の例として、メソッドの呼び出し前の状態から、デバッガのステップイン操作により、呼び出し後のメソッドに制御を移動させる場合を示す。
特定メソッドの呼び出し前の状態で、プログラムが実行を停止している場合、ユーザはデバッガパネル2102のステップインボタンを押す(ステップS504)。これにより、開発環境GUI101はクライアント通信部201に対してステップイン要求を送出する(ステップS505)。クライアント通信部201は開発環境制御部204にステップインを指示する(ステップS506)。開発環境制御部204はデバッガ321に対してステップイン操作を実行する(ステップS507)。これを受けて、デバッガ321はアプリケーションサーバ312に対してステップインの実行制御を行う(ステップS508)。
次に、開発環境制御部204は、デバッガ321に対して現在停止中の箇所の情報(クラス、メソッド、行数)を取得する(ステップS509)。これは、呼び出されたメソッドの先頭行にあたる箇所となる。その情報を元に、開発環境制御部204はステップイン操作後の画面を作成(生成)する(ステップS510)。ここで、生成される画面は呼び出されたメソッドが表示されている編集画面となる。クライアント通信部201は生成された画面を開発環境GUI101に送信する(ステップS511)。これにより、エディタパネル2105には、ステップイン後のソースコード330が表示される。
次に、ソースコード330に機密保護対象のソースコードが含まれ、それに対してアクセス制限を行う場合のアクセス権の設定方法について説明する。まず、アクセス制限対象のソースコードに対する、ユーザのアクセス権限の種類を説明する。ユーザのアクセス権限として、以下の3種類がある。
第1のアクセス権限として、「参照/編集可能権限」がある。この権限は機密保護対象のソースコードに対して編集・参照が許可される。対象のソースコードを開発している開発担当者や管理者にとっては、この権限が必要になる。
第2のアクセス権限として、「利用可能権限」がある。機密保護対象のソースコードの実装へのアクセスは許可されないが、インターフェースへのアクセスは許可される。機密保護対象のソースコードが提供している機能を、利用するプログラムを開発している担当者の場合、この権限が必要になる。
第3のアクセス権限として、「不許可」がある。機密保護対象のソースコードへの全てのアクセスが許可されない。また、機密保護対象のソースコードのインターフェースそのものを隠蔽するために、その機密保護対象のインターフェースを利用しているソースコードの実装部分へのアクセスも加えて許可されない。機密保護対象のソースコードの機能に関係しない担当者の権限はこれになる。
アクセス権限の設定は、機密保護対象を指定し、それについて、参照・編集可能なユーザ、あるいは利用可能なユーザを登録することで行われる。なお、「不許可」については、ここで設定されないユーザは全て不許可のユーザとなる。また、機密保護の範囲の指定方法には、ソースコードのクラスファイルを指定する方法と、クラスが含まれるパッケージ階層を指定する方法がある。
図8はアクセス権限を設定する操作が行われるときの動作シーケンスを示す図である。ユーザがアクセス権限の設定を開始すると(ステップS601)、開発環境GUI101は、クライアント通信部201に対してアクセス権の設定対象を選択する画面を要求する(ステップS602)。そして、クライアント通信部201は、アクセス権設定部207に対してアクセス権設定対象選択画面の生成を指示する(ステップS603)。アクセス権設定部207によって生成された画面は、クライアント通信部201から開発環境GUI101に送信される(ステップS604)。
図9は開発環境GUI101で表示されるアクセス権設定対象選択画面2200を示す図である。パネル2201は、アクセス権の設定対象のクラスがパッケージ階層のツリー構造で表示されることを示している。ユーザは、パネル2201からアクセス権を設定する対象を選択し、ボタン2204を押すことで、アクセス権の設定対象を指示する。
ここで、パッケージ2202を指定すると、アクセス権の設定範囲としてパッケージ階層を指定することになり、クラスファイル2203を直接指定すると、指定クラスをアクセス権の設定範囲に指定することになる。つまり、言語仕様で提供されている名前空間のスコープの単位でアクセス権の設定範囲を指定することになる。パッケージレベルでアクセス権を指定することで、そのパッケージ内に新規にクラスが生成された場合でも、新たにアクセス権を追加で設定することなくパッケージで定義されたアクセス権が有効になる。
図8に示すように、ユーザがアクセス権の設定対象を選択し、アクセス権設定ボタン2204を押下すると(ステップS605)、開発環境GUI101はクライアント通信部201に対してアクセス権設定画面を要求する(ステップS606)。そして、クライアント通信部201はアクセス権設定部207に対してアクセス権設定画面の生成を指示する(ステップS607)。アクセス権設定部207によって生成された画面は、クライアント通信部201から開発環境GUI101に送信される(ステップS608)。
図10は開発環境GUI101で表示されるアクセス権設定画面2300を示す図である。フィールド2301には、選択されたアクセス権の設定対象であるパッケージあるいはクラスが表示される。フィールド2302は、参照/編集可能権限を与えるユーザを入力するフィールドである。ここに設定されたユーザに対し、参照/編集可能権限が与えられる。フィールド2303は利用可能権限を与えるユーザを入力するフィールドである。ここに設定されたユーザに対し、利用可能権限が与えられる。ボタン2304は、入力内容どおりに、権限の設定を実行するボタンである。
図8に示すように、ユーザがボタン2304を押下すると(ステップS609)、開発環境GUI101はクライアント通信部201に対してアクセス権設定を要求する(ステップS610)。そして、クライアント通信部201は、アクセス権設定部207に対してアクセス権設定を指示し(ステップS611)、アクセス権設定部207はアクセス権情報206にアクセス権の設定を記録する。
図11はアクセス権情報206で記録されている情報を示すテーブルである。「対象スコープ」のフィールド2501には、指定されたアクセス権設定対象のパッケージやクラスが設定される。「利用可」のフィールド2502には、利用可能権限が与えられたユーザが設定される。「編集可」のフィールド2503には、参照/編集可能権限が与えられたユーザが設定される。ここで、アクセス権限が設定されていないパッケージやクラスについては、アクセス権の制限は行われず、全ユーザがアクセス可能である。
ここで、前述したアクセス権の設定が行われた状態において、開発環境画面2100でのソースコードがアクセス権限の違いによってどのように変わってくるかについて説明する。図12はここで説明するクラスの関係をUML(Unified Modeling Language)のクラス図の表記を用いて示す図である。
図中、白抜きの三角の接続線はクラスの継承関係を示す。破線の矢印の接続線は、矢印の方向への依存関係を示し、特に、ここではメソッドを呼び出すなど、矢印方向のクラスを利用していることを示している。
ここで、保護対象クラスClass A(2601)において、User1に対して参照/編集可能権限を与え、User2に対して利用可能権限を与え、User3には権限を与えない(つまり不許可)場合について検討する。この場合、クラス継承機能を持つプログラミング言語で記述された、各クラスのソースコード330が開発環境画面2100でどのように表示されるかを示す。
図12のクラス図から、Class A(2601)が機密保持対象のクラスであり、Class B1(2602)、Class B2(2603)がClass A(2601)が提供している機能を利用するクラスである。Class C1(2604) 〜 Class C4(2607)は、Class B1(2602)、Class B2(2603)が提供している機能を利用するクラスである。そして、User1がClass A(2601)の開発担当である。User2がClass B1(2602)、Class B2(2603)の開発担当である。User3がClass C1(2604) 〜 Class C4(2607)の開発担当ということになる。
図13はUser1の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。表示2701はClassD1(2608)の表示を示す。表示2702はClass A(2601)の表示を示す。表示2703はClass B2(2603)の表示を示す。表示2704はClass D2(2609)の表示を示す。表示2705はClass B1(2602)の表示を示す。なお、Class C1(2604) 〜 Class C4(2607)については、全てのユーザでアクセス制限がかからないので、ここでは図示していない。
また、図14はUser2の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。図15はUser3の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。図14、図15の各表示と図12の各クラスとの対応は前述した図13の場合と同様である。
アクセス制限の対象であるクラスClass A(2601)の継承元のClass D1(2608)の表示においては、アクセス制限が行われず、各ユーザの表示2701、2801、2901は変わらない。
制限クラスClass A(2601)の表示においては、ユーザごとに表示が変化する。User1の表示では、アクセス制限が行われず、全てが表示される(表示2702)。User2での表示は、インターフェースのみの表示となる(表示2802)。privateメンバの表示が制限され、publicおよびprotectedのメンバについては、実装部分の表示が制限され、表示は宣言のみの形に変更されている(2行目〜9行目)。
Class A(2601)でオーバライドしているClass D1(2608)のメソッド(表示2702の15行目)では、オーバライド定義されていることを示すために、実装の表示は制限され、宣言のみの形に変更される(表示2802の12行目)。User3の表示では、Class A(2601)に対するアクセスは全て制限されてしまう(表示2902)。
制限クラスClass A(2601)を継承したClass B2(2603)の表示では、User1,User2ともアクセス制限が行われない(表示2703,2803)。User3の表示では、Class B2(2603)がClass A(2601)を利用しているので、アクセスが制限され、インターフェースのみの表示となる。前述の説明と同様、privateメンバの表示が制限され、publicおよびprotectedのメンバについては、実装部分の表示が制限され、表示は宣言のみの形に変更されている(表示2903)。さらに、継承関係がClass A(2601)の継承元であるClass D1(2608)に変更されて表示される(表示2903の1行目)。また、Class B2(2603)がオーバライドしているClass A(2601)のメソッド(表示2803の15行目)は隠蔽される。
制限クラスClass A(2601)を利用しているClass B1(2602)の継承元であるClass D2(2608)の表示は、アクセス制限が行われないので、各ユーザの表示2704、2804、2904は変わらない。
制限クラスClass A(2601)を利用しているClass B1(2602)の表示では、User1,User2ともアクセス制限は行われない(表示2705,2805)。User3の表示では、Class B2(2603)がClass A(2601)を利用しているため、アクセスが制限され、インターフェースのみの表示となる。前述の説明と同様、privateメンバの表示が制限され、publicおよびprotectedのメンバについては、実装部分の表示が制限され、表示は宣言のみの形に変更されている(表示2905)。また、インスタンス変数(表示2805の6〜8行目)は、Class A(2601)のインスタンスであるため、public/protectedを含め、全て表示されなくなっている。Class B1(2602)でオーバライドしているClass D2(2609)のメソッド(表示2805の15行目)も、同じく、表示は宣言のみの形に変更されている(表示2905の8行目)。さらに、Class B1(2602)のメソッドproB1()(表示2705の11行目)は、リターン値がClass A(2601)であるため、表示されなくなっている。
上記の例で示すように、制限対象のインターフェースとは、クラス名、メソッド、定数、変数を意味する。実装へのアクセスが制限される場合、制限対象のインターフェースは、言語仕様上のアクセス権限で許可されるもの(public/protected)について、実装が除外されたインターフェースの宣言のみの形で表示される。さらに、その表示の際、インターフェース宣言の要素に、権限のないクラスを含む場合、そのインターフェースの表示も制限される。これは、インターフェース宣言の要素(例えば、メソッドの引数や、リターン値のクラス)に対する利用権限がなければ、そのインターフェースそのものを利用することができないからである。
また、継承元に前述のクラスがある場合、そのクラスをスキップした継承関係に変更された形で表示が行われる。これは、アクセス権のないクラスが継承階層にあったとしても、アクセス可能なクラスへの継承関係はインターフェースを利用する側で認識される必要があるためである。
また、実装およびインターフェースのいずれも制限される場合、完全に表示されなくなる。例えば、図15の表示2902では、表示できない旨のメッセージのみが表示されているが、別のプログラミング言語では、アセンブラ表示に切り替える等の表示方法も可能である。
つぎに、開発環境画面2100でソースコードを表示する際のアクセス制限方法について説明する。
ユーザが開発環境GUI101を利用する際、ユーザを特定するためのユーザ認証機能が最初に動作する。図16はユーザ認証のシーケンスを示す図である。この動作は一般的なWebアプリケーションにおけるユーザ認証動作と同じである。
ユーザがユーザIDとパスワードを入力してログイン操作を行うと(ステップS701)、開発環境GUI101はクライアント通信部201に対してログイン要求を行う(ステップS702)。そして、クライアント通信部201はログイン制御部203にログイン処理を依頼する。ログイン制御部203は認証を行い、認証がOKの場合、認証情報を記録する(ステップS703)。ここで、認証情報とは、ログインを行っているユーザを示す情報である。認証情報は、一般的にHTTPセッションやHTTPのクッキー情報などに記録される。
図17はパネル2106でソースコード330が格納されているディレクトリを表示する際のアクセス制限の処理を示す図である。ユーザがパネル2106でディレクトリツリーを開く操作を行うなどのブラウズ操作を行うと(ステップS801)、開発環境GUI101はクライアント通信部201に対してディレクトリツリー表示要求を行う(ステップS802)。そして、クライアント通信部201は開発環境制御部204にディレクトリツリー表示を指示する(ステップS803)。
開発環境制御部204は、ログイン制御部203に対して操作ユーザの取得を行う(ステップS804)。ログイン制御部203は、認証情報から操作ユーザを特定する。開発環境制御部204は、表示するディレクトリ内の各要素、つまり各クラスのソースファイル、およびパッケージに対応するディレクトリに対し、アクセス権判定部205へアクセス権の判断を依頼する(ステップS805)。
アクセス権判定部205は、対象のクラス名、ディレクトリ名に対してアクセス権の判断、つまりクラス名やディレクトリ名を表示してよいか否かの判断を行う。全ての要素のアクセス権判定が終了した後、開発環境制御部204は、アクセス権のある要素のみを表示するようにディレクトリツリー画面を生成する(ステップS806)。クライアント通信部201は、生成された画面を開発環境GUI101に送信する(ステップS807)。
ここでは、ソースコードはファイルの形式で格納されている例で説明したが、クラスのソースコードとしては、ファイルではなく、例えばデータベースに格納される形態も存在する。その場合も、同様に、パッケージおよびクラスの単位で上記の処理が行われる。
図18はステップS805におけるアクセス権判定部205によるアクセス権の判定処理手順を示すフローチャートである。まず、アクセス権判定部205は、アクセス権情報206を参照し、対象クラスがアクセス制限の対象のクラス(制限クラス)であるか否かを判定する(ステップS901)。制限クラスでない場合(ステップS901のNO)、アクセス権判定部205は、クラス名を表示可能と判断し(ステップS906)、本処理を終える。
一方、制限クラスの場合(ステップS901のYES)、アクセス権判定部205は、アクセス権情報206から、操作ユーザが対象クラスの参照/編集可能権限を持っているか否かを判断する(ステップS902)。操作ユーザが対象クラスに対する参照/編集可能権限があると判断された場合(ステップS902のYES)、アクセス権判定部205はクラス名を表示可能と判断する(ステップS906)。
一方、参照/編集可能権限がない場合(ステップS902のNO)、同様に、アクセス権判定部205は、アクセス権情報206から、利用可能権限があるか否かを判断する(ステップS903)。利用可能権限がない場合(ステップS903のNO)、アクセス権判定部205は、クラス名を表示不可と判断する(ステップS907)。一方、利用可能権限がある場合(ステップS903のYES)、さらに、アクセス権判定部205は、対象クラスが言語仕様上のアクセス権限(パッケージ外からそのクラスの利用可能か)があるか否かを判断する(ステップS904)。つまり、アクセス権判定部205は、public/protectedであるクラスか否かを判断する。
言語仕様上のアクセス権限がある場合(ステップS904のYES)、アクセス権判定部205は、クラス名を表示可能と判断する(ステップS906)。言語仕様上のアクセス権限がない場合(ステップS904のNO)、アクセス権判定部205は、クラス名を表示不可と判断し(ステップS905)、本処理を終える。
ここで、ステップS902、903における、アクセス権情報206を参照してアクセス権判定を行う処理について、図11のテーブルを例にさらに説明する。テーブルの1行目の情報から、対象クラスがmoduleA内のクラスであった場合、カラム2502の情報から、User2に利用可能権限、カラム2503の情報から、User1に参照/編集可能権限が設定されている。つまり、User2は利用権限,User1は参照/編集可能権限をもっていると判断される。
テーブルの2行目では、moduleA内のClassA2に対してさらにアクセス権限の情報が設定されている。ClassA2では、利用可能権限が設定されておらず、参照/編集可能権限にUser1が設定されている。このとき、対象クラスがClassA2の場合、アクセス権限を持つユーザはUser1のみと判断され、User2は利用権限がないと判断される。つまり、スコープが重なる設定がアクセス権情報206に行われている場合、スコープ範囲の狭い方の設定が優先的に判定に用いられる。
また、ステップS901における、対象クラスがアクセス制限の対象のクラスであるか否かを判定する処理について、図19および図11を用いて説明する。図19はステップS901の判定処理手順を示すフローチャートである。アクセス権判定部205は、まず、対象クラスのパッケージ階層を含めたフルクラス名を取得する(ステップS1001)。この取得は、クラスファイル内で宣言されているパッケージの宣言のpackage文から可能である。
アクセス権判定部205は、フルクラス名に対し、カラム2501の対象スコープの文字列が前方一致で含まれているか否かを判別する(ステップS1002)。このフルクラス名に対し、カラム2501の対象スコープの文字列が前方一致で含まれている場合(ステップS1002のYES)、アクセス権限の設定が行われており、アクセス権判定部205は、対象クラスが制限クラスであると判断する(ステップS1003)。そして、前述したステップS902の処理に移行する。一方、含まれない場合(ステップS1002のNO)、アクセス権判定部205は、対象クラスが制限クラスではないと判断し(ステップS1004)、前述したステップS906の処理に移行する。
図20はエディタパネル2105でソースコードの内容を表示する際のアクセス制限の処理を示す図である。ここでは、デバッグ操作を行っており、メソッドの呼び出し先のソースにステップイン操作を行ったとき、ステップイン後のソースを表示する場合を例に説明する。
この処理では、図7で説明した処理にアクセス制限の処理が加わることになる。ステップS504、S505の処理は前述した図7と同じ処理である。なお、図7と同一の処理については同一のステップ番号が付されている。
ステップS506でクライアント通信部201からステップインが指示されると、開発環境制御部204は、まずログイン制御部203に対し、操作ユーザの取得を行う(ステップS1101)。そして、開発環境制御部204は、ステップイン実行を行う(ステップS507)。
開発環境制御部204は、現在停止中の箇所の情報を取得する(ステップS509)。ここで、停止中のクラスが特定される。開発環境制御部204は、そのクラスに対するアクセス権の判定処理をアクセス権判定部205に依頼する。(ステップS1102)。
アクセス権判定部205は、アクセス権の判定を行った結果、ソースコード330の表示方法を開発環境制御部204に返却する(ステップS1103)。
開発環境制御部204は、ステップイン操作後の画面を作成する際、アクセス権の判断結果を基に、図14、図15で示すようなアクセス権に従った表示画面を作成する(ステップS1104)。この処理は、ソースコード330をパネル2105に表示させる場合、全て同じように行われる。例えば、図5のエディタ操作時のシーケンスにおいては、ステップS303において同様のアクセス制限が行われることになる。逆に、ソースコードや、クラス名の表示を伴わない処理では、アクセス制限なしに実行が行われる。例えば、アクセス権がないクラスを含むプロジェクト全体に対してコンパイルを実行することが可能である。ただし、コンパイル結果の表示の際、アクセス権がないクラスについてはアクセス制限が行われることになる。
図21はステップS1102の依頼に応じて行われるソースコード330の表示方法を決定する処理手順を示すフローチャートである。この処理では、ステップS1102の対象クラスがアクセス制限の対象のクラスであるか否かを判定し、その判定結果を基にソースコード330の表示方法を決定する。
まず、アクセス権判定部205は、対象のクラスがアクセス制限の対象のクラスであるか否かを判定する(ステップS1201)。この判定はステップS901で行う処理と同等である。
制限クラスであった場合(ステップS1201のYES)、アクセス権判定部205は、操作ユーザが対象クラスの参照/編集可能権限を持っているか否かを判断する(ステップS1202)。この判断はステップS902で行う処理と同等である。対象クラスに対する参照/編集可能権限があると判断された場合(ステップS1202のYES)、アクセス権判定部205は、対象クラスのソースコードを表示可能と判断する(ステップS1203)。この後、本処理を終える。
一方、参照/編集可能権限がない場合(ステップS1202のNO)、アクセス権判定部205は、利用可能権限があるか否かを判断する(ステップS1204)。同じく、この判断はステップS903で行う処理と同等である。利用可能権限がない場合(ステップS1204のNO)、アクセス権判定部205は、対象クラスのソースコードを表示不可と判断する(ステップS1205)。この後、本処理を終える。一方、利用可能権限がある場合(ステップS1204のYES)、アクセス権判定部205は、ソースコードをインターフェースのみに制限して表示可能と判断する(ステップS1206)。この後、本処理を終える。
一方、対象のクラスが制限クラスでない場合(ステップS1201のNO)、アクセス権判定部205は、対象クラスが外部参照しているクラスを抽出する(ステップS1207)。この外部参照しているクラスは外部インターフェースに相当する。また、ここで、「外部参照している」とは、具体的に、対象クラスが別クラスのメソッド呼び出しを行っている場合や、クラス内で定義されている変数、定数が別クラスのインスタンスであること、メソッドの引数や返り値が別クラスであることをいう。Java(登録商標)言語の場合、クラスのimport宣言を行っていることと同じ意味である。
これらは、ソースコード中にクラス名が記述されることになるため、そのクラス名を抽出する処理を行うことになる。アクセス権判定部205は、抽出された各クラスに対し、アクセス制限の対象のクラスであるか否か、また、アクセス制限対象のクラスの場合、操作ユーザが利用可能権限あるいは参照/編集可能権限を持っているか否かを判断する(ステップS1208)。この処理はステップS1201,S1202、S1204と同等の処理である。制限クラスではない場合、あるいは、制限クラスであるが、ユーザが利用可能権限、参照/編集可能権限を持っている場合、ステップS1209の処理に進む。アクセス権判定部205は、残りの抽出された全てのクラスについて、同じ検証を行うまで、ステップS1208の処理に戻る(ステップS1209)。
全てのクラスの検証が終了した場合(ステップS1209のYES)、アクセス権判定部205は、対象クラスのソースコードを表示可能と判断する(ステップS1210)。この後、本処理を終える。
一方、ステップS1208において、制限クラスであり、操作ユーザが利用可能権限、参照/編集可能権限を持っていないと判断された場合、アクセス権判定部205は、ソースコードをインターフェースのみに制限して表示可能と判断する(ステップS1211)。この後、本処理を終える。こうして、ソースコードの表示制御が行われる。
さらに、ステップS1206、S1211でインターフェースのみに制限と判断された場合、表示すべきインターフェースを抽出する処理を行う。その処理を、図22を用いて説明する。図22はアクセス権判定部205によるソース表示方法の判断処理手順を示すフローチャートである。
アクセス権判定部205は、まず、対象クラスの全インターフェースから、言語仕様上のアクセス権が無いものを削除する(ステップS4101)。つまり、外部のクラスから利用できないprivateの要素を削除対象とする。なお、Java(登録商標)言語の場合、パッケージ内のみで利用可能なpackage privateのアクセス権もあるが、一般にパッケージで1つのまとまった機能を提供することから、このアクセス権の要素もprivateに準じた扱いとする。このように、言語仕様上のアクセス制御機能において利用不可能なインターフェースを除外する。
つぎに、アクセス権判定部205は、残りの各インターフェースの宣言で用いられている要素として、用いられているクラス、つまり、インスタンス変数の型、クラス変数の型、メソッドの引数、メソッドのリターン値を抽出する(ステップS4102)。アクセス権判定部205は、これらのクラスがアクセス制限の対象のクラスであるか否か、また、アクセス制限対象のクラスの場合、操作ユーザが利用可能権限あるいは参照/編集可能権限を持っているか否かを判断する(ステップS4103)。
アクセス権判定部205は、抽出したクラスの中に、制限クラスであり、操作ユーザが利用可能権限、参照/編集可能権限を持っていないものがある場合(ステップS4103のNO)は、そのインターフェースを表示対象から削除する(ステップS4104)。そして、アクセス権判定部205は、全てのインターフェースを検証したか否かを判別する(ステップS4105)。全てのインターフェースを検証していない場合、ステップS4102の処理に戻り、全てのインターフェースについて上記の処理を繰り返す(ステップS4105)。
一方、全てのインターフェースを検証すると、アクセス権判定部205は、本処理を終える。
さらに、継承関係を考慮した処理を続ける。図23を用いてその処理を説明する。図23はクラス継承時のアクセス権判定部205によるソース表示方法の判断処理手順を示すフローチャートである。まず、アクセス権判定部205は、対象のクラスが他のクラスを継承しているか否かを調べる(ステップS1301)。他のクラスを継承していない場合(ステップS1301のNO)、アクセス権判定部205はそのまま本処理を終了する。一方、他のクラスを継承している場合(ステップS1301のYES)、アクセス権判定部205は、その継承の階層にある全てのクラスを取得する(ステップS1302)。そして、アクセス権判定部205は、その階層中にアクセス権のないクラス、つまり、アクセス制限の対象となっているクラスであって、操作ユーザが利用権限、参照/編集可能権限を持っていないクラスがあるか否かを調べる(ステップS1303)。アクセス権のないクラスが含まれない場合(ステップS1303のNO)、アクセス権判定部205は、本処理を終了する。
一方、アクセス権がないクラスが含まれる場合(ステップS1303のYES)、アクセス権判定部205は、そのクラスが対象クラスの直接の継承元であるか否かを判別する(ステップS1304)。そのクラスが対象クラスの直接の継承元でない場合、アクセス権判定部205はステップS1307の処理に進む。一方、そのクラスが対象クラスの直接の継承元である場合(ステップS1304のYES)、アクセス権判定部205は、対象クラスの継承元を、継承階層中でアクセス権がある最も近いクラス(クラス継承先)に変更する(ステップS1305)。これにより、操作ユーザに対しては、クラスの継承階層からアクセス権のないクラスが隠蔽される。
さらに、この隠蔽されたクラスが、継承階層中のアクセス権のあるメソッドをオーバライドしている場合、アクセス権判定部205は、そのオーバライドされているメソッドを、対象クラスでオーバライドしている形に変更する(ステップS1306)。これにより、アクセス権がないクラスが隠蔽さていても、当該メソッドがオーバライドされていることを示すことができる。
そして、アクセス権判定部205は、対象クラスがアクセス権のないクラスのメソッドをオーバライドしているか否かを判別する(ステップS1307)。対象クラスがアクセス権のないクラスのメソッドをオーバライドしている場合(ステップS1307のYES)、アクセス権判定部205は、対象クラスから当該メソッドを削除する(ステップS1308)。この後、アクセス権判定部205は本処理を終了する。一方、対象クラスがアクセス権のないクラスのメソッドをオーバライドしていない場合、アクセス権判定部205は本処理を終了する。
このように、図21および図23の処理における判断結果から、表示方法が決定され、それに従って、開発環境制御部204はソースコード330の表示画面を作成する(ステップS510)。この表示方法の判断結果に対応し、開発環境制御部204が生成する表示画面を、再度、図13〜図15で示すソース例を用いて、説明する。対象クラスのソースコードが表示可能と判断される場合(例えば、ステップS1203)、図13の表示2701に示すように、全てのソースコードが表示される。
インターフェースのみに制限される場合であって、クラス継承階層上のインターフェースの変更はないと判断される場合(例えば、ステップS1301のNO)、図14の表示2802で示すように、実装が削除され、宣言の形で表示される。さらに、表示内容は言語仕様におけるアクセス権があるもの(public/protected)のみとなる。さらに、インターフェースの宣言の要素(インスタンス変数、クラス変数の型、メソッドの引数、リターン値)には、アクセス権のない別のインターフェースが含まれないこととなる。
例として、図15の表示2905には、表示2705の4行目の定数宣言が表示されていないが、これはステップS4101の処理によるものである。また、表示2705の6〜8、11行目にあたる部分も表示されていないが、これはステップS4104の処理によるものである。
インターフェースのみに制限され、クラス継承階層上のインターフェースの変更が行われると判断される場合(例えば、ステップS1304のYES)、継承関係の変更が行われたインターフェースの表示となる。例として、図15の表示2903で示すように、1行目の継承元がClass AからClass D1に変更されているが、これはステップS1305の処理に対応する。また、表示2703の15行目でClass B2がClass Aのメソッド proA()をオーバライドしているが、表示2903ではその表示は削除されている。これはステップS1308の処理による。逆に、表示2903の12行目でClass D1のメソッドproD1()がオーバライドされているように表示されているが、これは実際には隠蔽されたClass Aがオーバライドしているメソッドである(表示2702の15行目)。これはステップS1306の処理によるものである。
対象クラスのソースコードは表示不可と判断される場合(例えば、ステップS1205)、図15の表示2902のように表示される。
また、パネル2105において、編集作業を行う際、入力中のクラスやメソッドの候補を表示し、ソースコードの入力作業の省力化を行う機能、いわゆるコードアシスト機能を提供する場合にも、同じようなアクセス権限に従った表示を行うことができる。
図24はパネル2105でのコードアシスト機能の表示例を示す図である。パネル2401には、途中まで入力されたクラス名に対して入力可能な候補の一覧が表示されている。
図25は入力可能な候補の一覧を作成する際の処理手順を示すフローチャートである。まず、開発環境制御部204は、全てのインターフェースをリストアップする(ステップS1401)。ここでいうインターフェースとは、クラス名の入力中の場合、クラスであり、メソッド名を入力中の場合、メソッドである。パネル2401の例では、全てのクラスがリストアップされている。
開発環境制御部204は、このインターフェース名が入力途中の文字列にマッチするか否かを判断する(ステップS1402)。マッチする場合(ステップS1402のYES)、さらに、開発環境制御部204は、マッチしたインターフェースに対するアクセス権があるか否かを判断する(ステップS1403)。このステップS1403で行われる判断処理は、前述したアクセス権の判断処理と同様に行われる。即ち、クラス名の場合、図18のステップS901〜S905の処理と同じである。また、メソッド名の場合、図21のステップS1201〜1211、図23のS1301〜S1308の結果得られる表示可能なインターフェースに、当該メソッドが含まれる場合、アクセス権があると判断される。
アクセス権があると判断された場合(ステップS1403のYES)、開発環境制御部204は、表示する候補リストに、マッチしたインターフェースを追加する(ステップS1404)。
そして、開発環境制御部204は、全ての対象のインターフェースに対する処理が行われるまで、上記ステップS1402からの処理を繰り返す(ステップS1405)。全ての対象のインターフェースに対する処理が行われると、その結果得られる候補リストが表示されることになる。
また、アクセス制限が行われ、本来参照できないインターフェースがある場合、ソースコード中に、そのインターフェースの呼び出しが直接記述されることを防ぐことも可能である。ソースコードを保存するタイミングで、利用しているインターフェースを抽出し、上記コードアシストの処理で説明したように、インターフェースのリストアップ結果に含まれないインターフェースがある場合、保存を制限し、警告を表示することも可能である。
ところで、クラスの継承階層が多重継承になっている場合も同じ処理でアクセス権が判断される。図26は多重継承の関係があるクラス階層の例をUMLのクラス図の形式で示した図である。Java(登録商標)言語の場合、実装の多重継承は不可能であるので、一方のクラスはインターフェースのみの継承として示されている。Class Bが多重継承の形となっており、Class Bは、Class Aから実装を継承(extends)し、また、Class D2のインターフェースを継承(implements)している。
前述したUser1、User2,User3について、同様に表示の違いを説明する。各ユーザのアクセス権は、Class A(3001)に対し、前述した図11の説明と同様に設定されているとする。
Class D1(3005)およびClass D2(3006)は、全ユーザで同じように、全てのソースコードが表示される(図27の表示3101〜3102、図28の表示3201〜3202、図29の表示3301〜3302参照)。図27はUser1の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。図28はUser2の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。図29はUser3の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。
Class C1(3003)およびClass C2(3004)についても、図示していないが、全ユーザで同じように全てのソースコードが表示される。
Class A(3001)については、前述した図11に示すとおり、User1では全てのソースコードが表示される(図27の表示3103)。また、User2ではインターフェースのみが表示され(図28の表示3203)、User3ではこれらの情報は表示されない(図29の表示3303)。
ここで、Class B(3002)については、User1、User2では、同じように、全てのソースコードが表示される(図27の表示3104、図28の表示3204)。User3では(図29の表示3304)、アクセス権のないClass Aの継承関係にかかわる部分について、継承元がClass D1に変更され、Class AでオーバライドされていたClass D1のメソッドproD1()の宣言が追加されている。また、Class AのメソッドproA()のオーバライドは表示されない。これは前述の処理と同様である。Class D2に関連する部分も、実装が表示されず、インターフェースのみの宣言の表示(15行目)となっている。これらの表示は、図21のステップS1201〜1211、図23のステップS1301〜S1308の処理で同様に行われる。
このように、第1の実施形態のソフトウェア開発システムによれば、機密情報へのアクセス制限を実現した上で、プログラムの開発作業が行える開発環境を備えることができる。また、機密保護対象のプログラムモジュールのソースコードに対し、その利用が許可された開発者には、機密保護対象のインターフェースへのアクセスが制限されない開発環境を提供することができる。この場合、それ以外の開発者では、機密保護対象のインターフェースへのアクセスも制限される。
従って、コンパイル済みのオブジェクトやデータの配布を必要とせずに、機密保護対象へのアクセス制限を行う開発環境の提供が可能になる。さらに、開発作業を行う場所は限定されないため、顧客データなどの外部への持ち出し不可能なデータを用いた障害解析作業を、遠隔の環境から行うことができる。また、複数の開発拠点をまたがった分散開発作業が、機密保護を実現した上で可能となる。さらに、担当者ごとに適切なアクセス制限が行われることになるので、1つの実行環境上で、プログラムの不具合の解析作業を行う場合などの連携作業が、機密保護を実現した上で可能となる。
また、ソースコードへの機密保護を実現しつつ、ソースコードのコンパイル、プログラムの実行が可能になり、オブジェクトやデータの配布を必要としない。また、クラス継承を含むプログラミング言語であっても、適切なアクセス制御が実現される。また、言語仕様上利用不可能なインターフェースを考慮した表示が行われる。また、アクセス権を言語仕様のスコープと関連づけて容易に設定することができる。
[第2の実施形態]
第2の実施形態では、プログラミング言語としてC言語を利用する場合について説明する。第1の実施形態のプログラミング言語として利用されるJava(登録商標)言語との言語仕様の違いから、次の点について、考慮する必要がある。
まず、C言語では、関数や変数などのシンボルのスコープ範囲が明確でないことから、パッケージやクラス単位といった言語仕様で提供されるスコープを指定してアクセス権の適用範囲を指定できない。
また、C言語では、実装とは別に、宣言を別ファイルに記述することができる(ヘッダファイル)。また、言語仕様におけるアクセス制限(publicやprotected)の概念がないため、外部向けのインターフェースと内部向けのインターフェースを区別できないことが挙げられる。なお、第2の実施形態におけるソフトウェア開発システムのシステム構成は前記第1の実施形態と同様である(図1参照)。
図30は第2の実施形態におけるソースコードファイルの関係を示す図である。まず、図30の各ソースファイルについて、各ユーザでの表示の違いについて説明する。点線の矢印で示されるincludeは、ヘッダファイルをincludeしていることを示す。点線の矢印で示されるuseは、別ファイルの関数を呼び出していることを示している。
アクセス制限の設定の方法では、前述したように、言語仕様におけるスコープの単位が存在しないので、ディレクトリ単位あるいはファイル単位で設定が行われる。また、言語仕様におけるアクセス制限の機能が存在しないので、利用者に公開したいインターフェースを独立したヘッダファイルとして作成する。そして、そのヘッダファイルに利用可能権限の設定を行うことで、アクセス制限を行うスコープ内の特定のインターフェースのみを利用可能として公開する。
図31はこのようにして設定したスコープ単位のアクセス権情報を示すテーブルである。アクセス権情報のテーブル3800において、「対象スコープ」のフィールド3801には、設定対象のディレクトリもしくはファイルが設定される。「利用可」のフィールド3802には、利用可能権限が与えられたユーザが設定される。「編集可」のフィールド3803には、参照/編集可能権限が与えられたユーザが設定される。図示しないフィールドの「スコープID」はこの設定レコードを示す識別子となる。このテーブル3800は、前記第1の実施形態と同様、図8のシーケンスで示される方法で設定されることになる。
図30、図31に示すように、ディレクトリa(3409)に対し、「編集可」のフィールド3803には、User1が設定されている。また、ディレクトリa(3409)内のファイルa.h(3401)に対し、「利用可」のフィールド3802には、User2が設定されている。「編集可」のフィールド3803には、”parent”が設定されている。この設定された”parent”は、親の階層の定義、ここではディレクトリa(3409)の設定に従うことを意味している。
この設定により、User1は無制限にアクセスが可能、User2はディレクトリa(3409)内のうち、ファイルa.h(3401)に記述されているインターフェースのみアクセス可能、User3はディレクトリa内へのファイルはアクセス不可能となる。
図32はUser1の表示内容を示す図である。図33はUser2の表示内容を示す図である。図34はUser3の表示内容を示す図である。図32〜図34には、このときの各ユーザの表示の違いが示されている。
ファイルa.h(3401)の内容は、User1、User2では、全て表示される(表示3501、3601)。User3では、アクセス制限され、ファイルa.h(3401)の内容は表示されない(表示3701)。
ファイルa2.h(3403)の内容は、User1では、全て表示される(表示3502)。User2、User3では、ファイルa2.h(3403)の内容はアクセス制限され、表示されない(表示3602、3702)。ファイルa.c(3402)も、User1では、全て表示される(表示3503)。User2、User3では、ファイルa.c(3402)はアクセス制限され、表示されない(表示3603、3703)。ファイルa2.c(3404)も同様、User1では、全て表示される(表示3504)。User2,User3では、ファイルa2.c(3404)の内容はアクセス制限され表示されない(表示3604、3704)。
ファイルb.h(3405)は、インターフェースの宣言のみであるので、User1、User2、User3のいずれでも、その内容は全て表示される(表示3505、3605、3705)。ファイルb.c(3406)は、ファイルa.hで定義されているインターフェースへの呼び出しを含む実装ファイルである。このため、User1、User2では、その内容は全て表示されるが(表示3506、3606)、User3では、インターフェースのみに制限されてその内容は表示される(表示3706)。また、関数func_b2()(表示3506の9行目)は、引数にa.h(3401)で定義されている型a_tを利用しているため、表示されるインターフェースから削除されている。
ファイルc.c(3407)については、全てのユーザで表示は制限されない(表示3507、3607、3707)。
前述したように、C言語の場合、あるシンボル(関数、変数など)が含まれるディレクトリやファイルなどのスコープが言語仕様から明確には特定できない。アクセス権はスコープ単位で設定されるので、シンボルがどのスコープに属しているかを判断し、そのシンボルのアクセス権を判断する必要がある。
そこで、スコープ毎のアクセス権情報(図31)とは別に、シンボル(インターフェース)毎にアクセス権情報のテーブル3900(図35参照)を保持する。図35はシンボル毎のアクセス権情報を示すテーブルである。
このテーブル3900は、テーブル3800の利用権限が設定されている対象スコープ(フィールド3801)内のソースコードから、シンボルの宣言を抽出して作成されたものである。シンボルの宣言とは、外部のソースから利用されるインターフェース定義を記述したものである。ここでは、関数のプロトタイプ宣言、変数の外部宣言、構造体の定義、また、マクロ定義も宣言として扱うことにする。一般的に、これらはヘッダファイル(.hファイル)に記述される内容である。
各抽出したシンボル(フィールド3901)に対し、このシンボルの定義ファイル(フィールド3902)が記録されている。これにより、シンボル毎のアクセス権の情報(インターフェース毎のアクセス権情報)は、定義ファイル(フィールド3902)に対応するアクセス権情報をテーブル3800から参照することで得られることになる。このテーブルは、外部ファイルから利用される可能性のあるシンボルのうち、アクセス制限が掛けられているシンボルが登録されているテーブルとなる。このように、インターフェース毎のアクセス権情報は、ソースコードのファイルから抽出されたインターフェース定義を、スコープ毎のアクセス権情報と関連付けて保持したものである。
テーブル3900は、ソースコードのファイルを編集、保存したタイミングで更新される。これにより、新規に関数などを追加した場合にもアクセス権情報が同期して更新されることになる。図36はソースコードのファイル保存時のシーケンスを示す図である。このシーケンスは図6のシーケンスとほぼ同じであるが、このシーケンスには、ステップS1901において、開発環境制御部204がアクセス権設定部207に対し、アクセス権情報の更新を要求する処理が追加されている。
図37はアクセス権設定部207によるシンボル単位のアクセス権テーブルの更新処理手順を示すフローチャートである。まず、アクセス権設定部207は、スコープ単位のアクセス制限情報テーブル3800を参照し、対象のファイルが対象スコープ(フィールド3801)に含まれるか否かを判断する(ステップS1501)。この判断は、対象スコープ(フィールド3801)がディレクトリもしくはファイルであるので、対象のファイルが、設定されているディレクトリに含まれるか、あるいは設定されているファイルと一致するか否かで行われる。
対象スコープに含まれる場合(ステップS1501のYES)、アクセス権設定部207は、まず対象ファイルに含まれるシンボルの宣言を、対象ファイルを文法解析して抽出する。そして、アクセス権設定部207は、抽出したシンボルを、シンボル単位のアクセス制限情報テーブル3900に登録する(ステップS1502)。この後、アクセス権設定部207は本処理を終える。なお、対象ファイルが、複数の対象スコープに含まれる場合、スコープ範囲の狭いほうが適用される。また、テーブル3900に設定済みのシンボルが、対象ファイルに存在しない場合、テーブル3900から削除される。
一方、保存対象ファイルが対象スコープに含まれない場合(ステップS1501のNO)、アクセス権設定部207は、テーブル3900の更新を行わない。そして、アクセス権設定部207は本処理を終える。
テーブル3900の更新のタイミングとして、他に、テーブル3800にアクセス権が定義されるタイミングで更新される場合もある。これは、アクセス制限の対象スコープを追加した場合に相当する。図8のステップS611において、アクセス権情報206の設定が行われるが、その際、テーブル3800の更新を行う。さらに、追加された対象スコープ内の全ファイルに対し、図37の処理を行ってテーブル3900の更新を行う。
つぎに、第2の実施形態における、ソースコード330のディレクトリツリーをパネル2106に表示する際のアクセス制限の処理について説明する。図17のシーケンスにおいて、ステップS805におけるアクセス権判定部205の処理が前記第1の実施形態と異なる。アクセス権判定部205は、ディレクトリ内に含まれる各ヘッダファイル、実装ファイル、ディレクトリに対してアクセス権を判定する。図38はその際のアクセス権判定部205の処理手順を示すフローチャートである。
まず、アクセス権判定部205は、スコープ単位のアクセス制限情報テーブル3800を参照し、対象ファイルがアクセス制限のスコープに含まれるファイルであるか否かを判定する(ステップS1601)。アクセス制限対象に含まれない場合(ステップS1601のNO)、アクセス権判定部205は、ファイル名の表示を可能と判断し(ステップS1605)、本処理を終える。
一方、アクセス制限対象に含まれる場合(ステップS1601のYES)、アクセス権判定部205は、テーブル3800を参照し、操作ユーザが対象ファイルへの利用権限、あるいは参照/編集権限を有するか否かを判断する(ステップS1603)。
権限がある場合(ステップS1603のYES)、アクセス権判定部205は、ファイル名の表示を可能と判断し(ステップS1605)、本処理を終える。一方、権限がない場合(ステップS1603のNO)、アクセス権判定部205は、ファイル名を表示不可と判断し(ステップS1604)、本処理を終える。
また、ソースコード330をパネル2105で表示する際のアクセス制限の処理は次のようになる。図20のシーケンスにおいて、ステップS1102におけるアクセス権判定部205の処理が前記第1の実施形態と異なる。図39はその際のアクセス権判定部205によるアクセス制限処理手順を示すフローチャートである。アクセス権判定部205は、まず、スコープ単位のアクセス制限情報テーブル3800を参照し、対象ファイルがアクセス制限のスコープに含まれるファイルであるか否かを判定する(ステップS1701)。
アクセス権判定部205は、アクセス制限対象に含まれる場合(ステップS1701のYES)、アクセス制限情報テーブル3800を参照し、操作ユーザが対象ファイルへの参照/編集権限を有する否かを判断する(ステップS1702)。
参照/編集権限がある場合(ステップS1702のYES)、アクセス権判定部205は、対象ファイルの内容を表示可能と判断し(ステップS1705)、本処理を終える。一方、アクセス権がない場合(ステップS1702のNO)、アクセス権判定部205は、アクセス制限情報テーブル3800を参照し、操作ユーザが対象ファイルへの利用権限を有するか否かを判断する(ステップS1703)。
利用権限がある場合(ステップS1703のYES)、アクセス権判定部205は、対象ファイルのソースコードの表示を、宣言のみに限定すると判断し(ステップS1706)、本処理を終える。一方、利用権限がない場合(ステップS1703のNO)、アクセス権判定部205は、対象ファイルを表示不可と判断し(ステップS1704)、本処理を終える。
ステップS1701でアクセス制限対象に含まれない場合、アクセス権判定部205は、対象ファイル中の実装で外部のシンボルを参照している箇所、つまり外部ファイルで定義されている関数の呼び出し、変数の参照などを抽出する(ステップS1707)。この外部のシンボルを参照している箇所、つまり外部ファイルで定義されている関数の呼び出し、変数の参照などは、外部インターフェースに相当する。
アクセス権判定部205は、得られた外部参照している各シンボルに対し、アクセス制限情報テーブル3900を参照し、シンボルに対する利用権限があるか否かを判断する(ステップS1708)。これは、テーブル3900を参照し、判断対象のシンボルの定義ファイル(フィールド3902)を特定し、その定義ファイルの利用権限を、テーブル3800を参照して特定することにより行われる。
シンボルに対するアクセス権がない場合(ステップS1708のNO)、アクセス権判定部205は、ソースコードの表示を宣言のみに限定すると判断し(ステップS1711)、本処理を終える。一方、シンボルに対する利用権限がある場合、アクセス権判定部205は、残りの抽出された全てのシンボルについて、終わるまで同じ検証を行う(ステップS1709)。全てのシンボルの検証が終了した場合(ステップS1709のYES)、アクセス権判定部205は、対象ファイルのソースコードを表示可能と判断し(ステップS1710)、本処理を終える。
さらに、ステップS1706、S1711で宣言のみに表示を制限すると判断された場合、表示すべきインターフェースを抽出する処理を行う。図40は表示すべきインターフェースの抽出処理手順を示すフローチャートである。
アクセス権設定部207は、ソースコードから実装を除いた、宣言のみの状態、つまり関数宣言、変数宣言、構造体の定義またはマクロ定義のみの状態とし、各宣言について、それらの宣言で利用されている外部参照のシンボルを抽出する(ステップS4201)。
アクセス権設定部207は、テーブル3900を参照し、シンボルに対する利用権限があるか否かを判断する(ステップS4202)。利用権限がない場合、アクセス権設定部207は、その宣言を表示対象から削除する(ステップS4203)。全ての宣言について検証を終えるまで上記の処理を繰り返す(ステップS4204)。
第2の実施形態におけるソフトウェア開発システムによれば、C言語などシンボルの名前空間が言語仕様上不明確な場合や、言語仕様上のアクセス制限機能がない場合においても、シンボルが定義されているスコープの特定を容易にすることができる。また、スコープ単位でのアクセス権の設定が可能になる。また、開発担当者単位でのアクセス制限を行うことが可能になる。また、機密情報への外部からのアクセスを防ぐことができる。
[第3の実施形態]
第3の実施形態として、アクセスの制限を、特定のユーザではなく、ユーザの操作場所(配置場所単位)で行う場合を示す。また、アクセス制限対象クラスにおいて、インスタンスの値を参照する際にアクセス制限を行う場合について説明する。例えば、顧客情報がデータベース313に含まれている場合、プログラムは顧客情報を表すクラスによりその情報にアクセスする場合、デバッガ上で顧客情報を表すクラスの値を参照することによる顧客情報の表示を制限する。なお、第3の実施形態におけるソフトウェア開発システムのシステム構成は前記第1の実施形態と同様である(図1参照)。
図41は第3の実施形態におけるアクセス権情報206を示すテーブルである。フィールド4001の「対象スコープ」は、図11の対象スコープ(フィールド2501)と同じものである。フィールド4002の「利用可」には、利用可能権限が与えられたIPアドレスが設定される。IPアドレスには、アクセスを許可するネットワークを示すサブネットマスク値が設定されている。フィールド4003の「編集可」にも、同様に、参照/編集可能権限が与えられたネットワークのIPアドレスが設定されている。
図42はデバッグ時の動作例として、図4のパネル2104に、あるクラスの変数の値を表示する際の動作を示す図である。あるクラスで定義されている変数を参照することは、そのクラスに対する参照/編集権限がある場合に制限される。例えば、図15の表示2905で示すように、User3はClass B1(2602)の実装を参照できないため、Class C1(2604)がClass B1(2602)のインスタンス変数を保持することになる。あるいは、メソッドのリターン値がClass B1(2602)のインスタンスである場合、それらの変数の値、あるいは、リターン値の参照は制限されることになる。
まず、ユーザが変数の参照操作を行うと(ステップS1801)、開発環境GUI101はクライアント通信部201に対して変数参照要求を送出する(ステップS1802)。クライアント通信部201は開発環境制御部204に変数参照を指示する(ステップS1803)。開発環境制御部204は、デバッガ322に対して変数参照を実行させ、変数の値を取得する(ステップS1804)。
次に、開発環境制御部204は、クライアント通信部201からクライアント端末100のIPアドレスを取得する(ステップS1805)。そして、開発環境制御部204は、アクセス権判定部205に対し、対象の変数が定義されているクラスを特定し、そのクラスのアクセス権の判断を依頼する(ステップS1806)。このとき行われるアクセス権の判断は、図21の処理と同じである。操作ユーザが利用権限、あるいは参照/編集可能権限を有するか否かの判断は、ステップS1805で取得したクライアント端末100のIPアドレスが、フィールド4002、フィールド4003のネットワークアドレスに含まれているか否かによって行われる。
そして、ステップS1807で対象クラスの表示方法が返却される。開発環境制御部204は、表示方法として、対象クラスのソースコードを表示可能である場合、変数表示画面にステップS1804で取得した変数値が表示された画面を生成し、それ以外、変数値が表示されない画面を生成する(ステップS1808)。生成された画面はクライアント通信部201から開発環境GUI101に送信される(ステップS1809)。
第3の実施形態のソフトウェア開発システムによれば、アクセスの制限を、特定のユーザではなく、ユーザの操作場所で行う場合においても、前記第1の実施形態と同様の効果を得ることができる。
なお、本発明は、上記実施形態の構成に限られるものではなく、特許請求の範囲で示した機能、または本実施形態の構成が持つ機能が達成できる構成であればどのようなものであっても適用可能である。
また、本発明の目的は、以下の処理を実行することによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出す処理である。
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、プログラムコードを供給するための記憶媒体としては、次のものを用いることができる。例えば、フロッピー(登録商標)ディスク、ハードディスク、光磁気ディスク、CD−ROM、CD−R、CD−RW、DVD−ROM、DVD−RAM、DVD−RW、DVD+RW、磁気テープ、不揮発性のメモリカード、ROM等である。または、プログラムコードをネットワークを介してダウンロードしてもよい。
また、コンピュータが読み出したプログラムコードを実行することにより、上記実施の形態の機能が実現される場合も本発明に含まれる。加えて、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
更に、前述した実施形態の機能が以下の処理によって実現される場合も本発明に含まれる。即ち、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行う場合である。
Webアプリケーションの開発環境を備えたソフトウェア開発システムの構成を示す図である。 リモート開発環境300をサーバ200上に構築する際のシーケンスを示す図である。 開発環境GUI101で表示されるプロジェクト一覧画面2000を示す図である。 開発環境GUI101で表示される開発環境画面2100を示す図である。 開発環境画面2100の操作例として、ソースコード330をエディタパネル2105に表示する際のシーケンスを示す図である。 開発環境画面2100の操作例として、ソースコード330のコンパイルを行う際のシーケンスを示す図である。 開発環境画面2100の操作例として、デバッガ操作を行う際のシーケンスを示す図である。 アクセス権限を設定する操作が行われるときの動作シーケンスを示す図である。 開発環境GUI101で表示されるアクセス権設定対象選択画面2200を示す図である。 開発環境GUI101で表示されるアクセス権設定画面2300を示す図である。 アクセス権情報206で記録されている情報を示すテーブルである。 クラスの関係をUML(Unified Modeling Language)のクラス図の表記を用いて示す図である。 User1の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。 User2の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。 User3の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。 ユーザ認証のシーケンスを示す図である。 パネル2106でソースコード330が格納されているディレクトリを表示する際のアクセス制限の処理を示す図である。 ステップS805におけるアクセス権判定部205によるアクセス権の判定処理手順を示すフローチャートである。 ステップS901の判定処理手順を示すフローチャートである。 エディタパネル2105でソースコードの内容を表示する際のアクセス制限の処理を示す図である。 ステップS1102の依頼に応じて行われるソースコード330の表示方法を決定する処理手順を示すフローチャートである。 アクセス権判定部205によるソース表示方法の判断処理手順を示すフローチャートである。 クラス継承時のアクセス権判定部205によるソース表示方法の判断処理手順を示すフローチャートである。 パネル2105でのコードアシスト機能の表示例を示す図である。 入力可能な候補の一覧を作成する際の処理手順を示すフローチャートである。 多重継承の関係があるクラス階層の例をUMLのクラス図の形式で示した図である。 User1の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。 User2の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。 User3の各クラスのソースコードを開いたときのエディタパネル2105での表示内容を示す図である。 第2の実施形態におけるソースコードファイルの関係を示す図である。 スコープ単位のアクセス権情報を示すテーブルである。 User1の表示内容を示す図である。 User2の表示内容を示す図である。 User3の表示内容を示す図である。 シンボル毎のアクセス権情報を示すテーブルである。 ソースコードのファイル保存時のシーケンスを示す図である。 アクセス権設定部207によるシンボル単位のアクセス権テーブルの更新処理手順を示すフローチャートである。 アクセス権判定部205の処理手順を示すフローチャートである。 アクセス権判定部205によるアクセス制限処理手順を示すフローチャートである。 表示すべきインターフェースの抽出処理手順を示すフローチャートである。 第3の実施形態におけるアクセス権情報206を示すテーブルである。 デバッグ時の動作例として、図4のパネル2104に、あるクラスの変数の値を表示する際の動作を示す図である。
符号の説明
50 ネットワーク
100 クライアント端末
101 開発環境GUI
200 サーバ
201 クライアント通信部
202 開発環境生成部
204 開発環境制御部
205 アクセス権判定部
206 アクセス権情報
207 アクセス権設定部
300 リモート開発環境
310 実行環境
320 開発ツール
330 ソースコード
2100 開発環境画面

Claims (15)

  1. 開発対象のソースコードを含む開発環境を備えたサーバ装置と、前記開発環境へのユーザインターフェースを備えたクライアント端末とを有するソフトウェア開発システムであって、
    前記サーバ装置は、
    当該サーバ装置に前記開発環境を構築する開発環境生成手段と、
    前記ソースコードに対するアクセス権情報を設定するアクセス権情報設定手段と、
    前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断手段とを備え、
    前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御することを特徴とするソフトウェア開発システム。
  2. 前記アクセス権限判断手段は、前記アクセス権情報を基に、前記ソースコードを全て表示するか、インターフェースのみ表示するか、あるいは表示しないかを判断することを特徴とする請求項1記載のソフトウェア開発システム。
  3. 前記アクセス権限判断手段は、前記ソースコードから外部インターフェースを抽出し、前記抽出した外部インターフェースが定義されているソースコードのアクセス権情報を基に、前記ソースコードの表示方法を判断することを特徴とする請求項2記載のソフトウェア開発システム。
  4. 前記アクセス権限判断手段は、前記ソースコードから抽出した外部インターフェースがアクセス可能であると判断された場合、前記ソースコードを全て表示すると判断し、前記外部インターフェースがアクセス不可であると判断された場合、前記インターフェースのみ表示すると判断することを特徴とする請求項3記載のソフトウェア開発システム。
  5. 前記アクセス権限判断手段は、前記インターフェースのみ表示すると判断した場合、当該インターフェースの要素に、前記アクセス不可である外部インターフェースを含まないインターフェースのみを表示対象とすることを特徴とする請求項4記載のソフトウェア開発システム。
  6. 前記ソースコードがクラス継承機能を持つプログラミング言語で記述され、
    前記アクセス権限判断手段は、前記インターフェースのみ表示すると判断した場合、クラスの継承元が利用不可能なクラスである場合、それを除外したクラス継承階層に変更し、除外したクラスでオーバライド定義されていたメソッドを、クラス継承先に移動し、前記インターフェースに、利用不可能なクラスのメソッドのオーバライド定義が含まれる場合、当該メソッドを除外することを特徴とする請求項5記載のソフトウェア開発システム。
  7. 前記ソースコードが言語仕様上のアクセス制御機能を持つプログラミング言語で記述され、
    前記アクセス権限判断手段は、前記インターフェースのみ表示すると判断した場合、前記言語仕様上のアクセス制御機能において利用不可能なインターフェースを除外することを特徴とする請求項4記載のソフトウェア開発システム。
  8. 前記アクセス権情報は、プログラミング言語の言語仕様上における名前空間のスコープ単位で設定され、
    前記アクセス権限判断手段は、前記ソースコードの表示方法を判断する際、対象のインターフェースが前記名前空間に含まれるか否かを判断することを特徴とする請求項1記載のソフトウェア開発システム。
  9. 前記アクセス権情報は、ディレクトリ単位もしくはファイル単位の、スコープ毎のアクセス権情報と、前記ソースコードのファイルから抽出されたインターフェース定義を、前記スコープ毎のアクセス権情報と関連付けて保持した、インターフェース毎のアクセス権情報とからなり、
    前記インターフェース毎のアクセス権情報は、前記スコープ毎のアクセス権情報でインターフェースのみアクセス可能と設定されているソースコードのファイルから抽出したインターフェース定義の情報を保持し、
    前記アクセス権限判断手段は、前記外部インターフェースのアクセス権限の判断を、前記インターフェース毎のアクセス権情報を基に行うことを特徴とする請求項5記載のソフトウェア開発システム。
  10. 前記サーバ装置は、ユーザ認証手段を備え、
    前記アクセス権情報は、ユーザ単位のアクセス権を保持し、
    前記アクセス権限判断手段は、ユーザ単位のアクセス権限を判断することを特徴とする請求項1記載のソフトウェア開発システム。
  11. 前記アクセス権情報は、前記クライアント端末の配置場所単位でアクセス権を保持し、
    前記アクセス権限判断手段は、前記クライアント端末の配置場所単位のアクセス権限を判断することを特徴とする請求項1記載のソフトウェア開発システム。
  12. 開発対象のソースコードを含む開発環境を備えたサーバ装置と、前記開発環境へのユーザインターフェースを備えたクライアント端末とを有するソフトウェア開発システムのアクセス制限方法であって、
    前記サーバ装置は当該サーバ装置に前記開発環境を構築しておく開発環境生成ステップと、
    前記サーバ装置は前記ソースコードに対するアクセス権情報を設定しておくアクセス権情報設定ステップと、
    前記サーバ装置は前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断ステップと、
    前記サーバ装置は前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御する表示制御ステップとを有することを特徴とするソフトウェア開発システムのアクセス制限方法。
  13. 開発対象のソースコードを含む開発環境を備え、前記開発環境へのユーザインターフェースを備えたクライアント端末と共にソフトウェア開発システムを構築するサーバ装置であって、
    当該サーバ装置に前記開発環境を構築する開発環境生成手段と、
    前記ソースコードに対するアクセス権情報を設定するアクセス権情報設定手段と、
    前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断手段とを備え、
    前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御することを特徴とするサーバ装置。
  14. 開発対象のソースコードを含む開発環境を備えたサーバ装置と、前記開発環境へのユーザインターフェースを備えたクライアント端末とを有するソフトウェア開発システムを制御するアクセス制限方法をコンピュータに実行させるプログラムにおいて、
    前記アクセス制限方法は、
    前記サーバ装置は当該サーバ装置に前記開発環境を構築しておく開発環境生成ステップと、
    前記サーバ装置は前記ソースコードに対するアクセス権情報を設定しておくアクセス権情報設定ステップと、
    前記サーバ装置は前記設定されたアクセス権情報を基に、前記ソースコードの表示方法を判断するアクセス権限判断ステップと、
    前記サーバ装置は前記判断されたソースコードの表示方法に従って、前記クライアント端末における前記ソースコードの表示を制御する表示制御ステップとを有することを特徴とするプログラム。
  15. 請求項14記載のプログラムを格納することを特徴とするコンピュータで読み取り可能な記憶媒体。
JP2007305798A 2007-11-27 2007-11-27 ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体 Pending JP2009129326A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007305798A JP2009129326A (ja) 2007-11-27 2007-11-27 ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007305798A JP2009129326A (ja) 2007-11-27 2007-11-27 ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体

Publications (1)

Publication Number Publication Date
JP2009129326A true JP2009129326A (ja) 2009-06-11

Family

ID=40820152

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007305798A Pending JP2009129326A (ja) 2007-11-27 2007-11-27 ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体

Country Status (1)

Country Link
JP (1) JP2009129326A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013025612A (ja) * 2011-07-22 2013-02-04 Kddi Corp Ui作成装置およびui作成プログラム
CN111625782A (zh) * 2020-05-25 2020-09-04 杭州安恒信息技术股份有限公司 源码的访问权限控制方法、装置、计算机设备和存储介质
CN112558963A (zh) * 2020-12-16 2021-03-26 中国人寿保险股份有限公司 一种软件开发方法及装置
CN113872991A (zh) * 2021-10-28 2021-12-31 郑州云海信息技术有限公司 一种云平台接口权限控制方法、装置、设备及介质
WO2022259311A1 (ja) * 2021-06-07 2022-12-15 日本電信電話株式会社 デバッグ装置、デバッグ方法、及びプログラム

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013025612A (ja) * 2011-07-22 2013-02-04 Kddi Corp Ui作成装置およびui作成プログラム
CN111625782A (zh) * 2020-05-25 2020-09-04 杭州安恒信息技术股份有限公司 源码的访问权限控制方法、装置、计算机设备和存储介质
CN111625782B (zh) * 2020-05-25 2023-09-19 杭州安恒信息技术股份有限公司 源码的访问权限控制方法、装置、计算机设备和存储介质
CN112558963A (zh) * 2020-12-16 2021-03-26 中国人寿保险股份有限公司 一种软件开发方法及装置
WO2022259311A1 (ja) * 2021-06-07 2022-12-15 日本電信電話株式会社 デバッグ装置、デバッグ方法、及びプログラム
CN113872991A (zh) * 2021-10-28 2021-12-31 郑州云海信息技术有限公司 一种云平台接口权限控制方法、装置、设备及介质
CN113872991B (zh) * 2021-10-28 2024-06-07 郑州云海信息技术有限公司 一种云平台接口权限控制方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
Maesa et al. Blockchain based access control services
JP5264748B2 (ja) シンクライアントソフトウエア開発環境
JP2009099136A (ja) コンポジットアプリケーションフィールドのためのセキュリティ強化フレームワーク
JP5575071B2 (ja) 情報処理装置、情報処理方法、およびプログラム
JP2009151755A (ja) セキュリティアノテーションを使用した複合アプリケーション
JP4938869B2 (ja) Sdk使用制限付加装置及び使用制限付ソフトウェア開発システム
JP2009129326A (ja) ソフトウェア開発システム、そのアクセス制限方法、サーバ装置、プログラムおよび記憶媒体
US20090060178A1 (en) Management system for web service developer keys
Quinton et al. Using multiple feature models to design applications for mobile phones
CN106326691A (zh) 加解密功能的实现方法、装置及服务器
CN114139114A (zh) 一种基于前端低代码开发维护系统及方法
JP2000172646A (ja) アプリケーション機能指定装置及び記憶媒体
CN116249980A (zh) 通过异构加密的软件访问
Kupietz et al. Building paths to corpus data. A multi-level least effort and maximum return approach
CN116305011A (zh) 应用程序的保护方法和安装方法
Beckers et al. A structured method for security requirements elicitation concerning the cloud computing domain
JP2011076546A (ja) データ書き込み装置及びインストール装置
Tout et al. Towards a BPEL model-driven approach for web services security
CN111262836B (zh) 一种微服务授权方法、设备及存储介质
JP2008015615A (ja) 情報フィルタ装置、情報フィルタ制御方法、情報フィルタの制御プログラム及び記録媒体
KR100346647B1 (ko) 홈페이지 화면 이미지 자동변경 제어방법
Heap et al. Advanced Ansible
WO2004055651A1 (en) A simple digital right management language
JP4909432B2 (ja) コンテンツマネジメントシステム
JP2007241560A (ja) ホームゲートウェイソフトウェアパーミッション管理システム