JP2009129127A - プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 - Google Patents
プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 Download PDFInfo
- Publication number
- JP2009129127A JP2009129127A JP2007302377A JP2007302377A JP2009129127A JP 2009129127 A JP2009129127 A JP 2009129127A JP 2007302377 A JP2007302377 A JP 2007302377A JP 2007302377 A JP2007302377 A JP 2007302377A JP 2009129127 A JP2009129127 A JP 2009129127A
- Authority
- JP
- Japan
- Prior art keywords
- class
- invariant
- variable
- information
- classified
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
【課題】 オブジェクト指向プログラムから,静的な解析によって不変オブジェクトを高速かつ高精度に抽出する。
【解決手段】 プログラム入力受付部10は抽出対象プログラム2を受け付ける。プログラム構文解析部12は,抽出対象プログラム2を解析し,その全クラスを未分類に分類し,全クラスの親子情報とフィールド情報とを取得する。不変物抽出部13は,可変フィールドを持つクラスを可変物に変更する。また,可変物のクラスについて,その祖先クラスであって可変物ではないクラスを中立物に変更し,その子孫クラスを可変物に変更する。さらに,中立物のクラスの祖先クラスであり可変物ではないクラスを中立物に変更する。さらに,未分類のままのクラスを不変物に変更し,不変物のクラスを特定する不変物抽出情報を出力する。
【選択図】 図1
【解決手段】 プログラム入力受付部10は抽出対象プログラム2を受け付ける。プログラム構文解析部12は,抽出対象プログラム2を解析し,その全クラスを未分類に分類し,全クラスの親子情報とフィールド情報とを取得する。不変物抽出部13は,可変フィールドを持つクラスを可変物に変更する。また,可変物のクラスについて,その祖先クラスであって可変物ではないクラスを中立物に変更し,その子孫クラスを可変物に変更する。さらに,中立物のクラスの祖先クラスであり可変物ではないクラスを中立物に変更する。さらに,未分類のままのクラスを不変物に変更し,不変物のクラスを特定する不変物抽出情報を出力する。
【選択図】 図1
Description
本発明は,オブジェクト指向プログラムの静的解析処理における不変オブジェクト抽出処理に関する。より詳しくは,クラス構造が静的に定まっているオブジェクト指向プログラムから,プログラム実行を行うことなく,不変オブジェクトを抽出する技術に関する。
不変オブジェクトとは,オブジェクト生成後は,そのオブジェクトの木構造や値を変更することができないようなオブジェクト指向プログラムにおける実行時データ構造をいう。
不変オブジェクトは,しばしば,プログラム開発者によって意図的にプログラム内に用意される。不変オブジェクトの設定は,例えば,その型のオブジェクトは全て不変オブジェクトになるような不変クラスを定義することによって行われる。
例えば,Java(登録商標)において不変オブジェクトにするためには,クラス定義のときに以下の条件を満たすようにする。
・ フィールドを変更する可能性があるメソッドを用意しない。
・ すべてのフィールドをfinalにする。
・ すべてのメソッドもしくはクラス自体をfinalと宣言してオーバーライドを禁止する。
・ フィールドが不変でないオブジェクトを参照する場合に,そのオブジェクトの参照を公開しない。
非特許文献1にも記載されているように,プログラム開発者が不変物クラスを正しく定義することによって,以下のようなメリットが生じ,プログラムの生産性を向上させることが良く知られている。
具体的には,不変オブジェクトでは値が変化する危険性がないため,不変オブジェクトへの参照をキャッシュする場合に,その参照がその後も必ず同じ値を指すことを前提に自由にキャッシュを実行することが可能となる。さらに,不変オブジェクトのプロパティも変化しないため,不変オブジェクトのフィールドやメソッドの結果も自由にキャッシュすることができる。
また,不変オブジェクトが正しく作成されている場合,すなわち,オブジェクト参照がコンストラクタの外部に渡らないように作成されている場合には,そのオブジェクトの状態は変更されないため,「書き込み−書き込み」や「読み込み−書き込み」などの競合が発生せず,アクセスの際の同期をとる必要がなくなる。
さらに,通常のメソッドにオブジェクトを渡す場合でも,不変オブジェクトであれば,オブジェクトが変更されて返されるという危険がなくなる。
不変オブジェクトによるプログラムの生産性向上を図る観点から,不変オブジェクトの自動抽出技術が重要になっている。
そこで,非特許文献2には,Java(登録商標)プログラムから不変オブジェクトを抽出する手法も開示されている。この手法では,全クラスを不変と可変とに分類し,全インスタンスフィールドが不変であれば不変に分類し,可変のインスタンスフィールドが
1つでも存在すれば可変に分類し,未分類のクラスを可変に分類するものである。
Brian Goetz, "Java theory and practice: To mutate or not to mutate?", <http://www-128.ibm.com/developerworks/java/library/j-jtp02183.html>, 2002年2月18日 S. Porat, et. al., "Automatic Detection of Immutable Fields in Java", Proceedings of CASCON 2000, page 10, Canada, 2000年
1つでも存在すれば可変に分類し,未分類のクラスを可変に分類するものである。
Brian Goetz, "Java theory and practice: To mutate or not to mutate?", <http://www-128.ibm.com/developerworks/java/library/j-jtp02183.html>, 2002年2月18日 S. Porat, et. al., "Automatic Detection of Immutable Fields in Java", Proceedings of CASCON 2000, page 10, Canada, 2000年
上記非特許文献2の処理手法では,処理の速度性能が良くないうえ,循環的参照構造を持つクラス群を抽出することができない場合があるという問題があった。
循環的参照構造を持つクラス群は,クラスの定義に必要な情報を相互あるいは循環的に参照しあうクラス群であり,実際は不変クラスであるにもかかわらず,従来手法では抽出されないクラスの一例である。
本発明は,上記課題に鑑みてなされたものであり,クラス構造が静的に定まっているオブジェクト指向プログラムから,プログラムを実行させることなく高速かつ高精度で不変オブジェクトを抽出する処理技術を提供することを目的とする。
本発明では,クラスの種類として,不変物,可変物および中立物の3つを設ける。さらに,不変物に分類される条件を以下のように設定する。
不変物条件1:クラスのフィールド全てが,代入禁止かつ型が不変物クラスである。
不変物条件2:クラスの祖先クラス全てが,不変物または中立物に分類されている。
不変物条件3:クラスの子孫クラス全てが,不変物に分類されている。
また,中立物に分類される条件は,不変物条件1,2とする。
対象プログラムの全クラスから,解析処理結果の親子情報とフィールド情報とを用いて,上記の不変物条件1〜3に合わないクラスを記録していき,初期種類のまま残っているクラスを不変物に分類されるクラスとして抽出する。
本発明にかかるプログラムは,1)処理対象とするオブジェクト指向プログラムを入力として受け付けるプログラム入力処理と,2)前記入力されたオブジェクト指向プログラムを構文解析し,当該オブジェクト指向プログラムの全クラスについて,クラス間の親子情報およびフィールド情報を取得するクラス情報取得処理と,3)クラスの種類として,未分類,不変物,可変物および中立物を設け,前記オブジェクト指向プログラムから解析された全クラスを未分類に分類する初期分類処理と,4)前記フィールド情報をもとに,前記未分類に分類されているクラスが可変フィールドを持つかを判定し,前記未分類に分類されているクラスが可変フィールドを持つ場合に,当該クラスの種類を可変物に変更する第1の分類変更処理と,5)前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第2の分類変更処理と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更する第3の分類変更処理と,6)前記種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第4の分類変更処理と,7)前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理の処理後に,前記全クラスから未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更する不変物抽出処理と,8)前記不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する不変物情報出力処理とを,コンピュータに実行させるためのものである。
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更する第3の分類変更処理と,6)前記種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第4の分類変更処理と,7)前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理の処理後に,前記全クラスから未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更する不変物抽出処理と,8)前記不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する不変物情報出力処理とを,コンピュータに実行させるためのものである。
前記コンピュータは,以下のように動作する。
まず,処理対象とするオブジェクト指向プログラムを入力として受け付け,入力されたオブジェクト指向プログラムを構文解析し,当該オブジェクト指向プログラムの全クラスについて,クラス間の親子情報およびフィールド情報を取得する。そして,クラスの種類として,未分類,不変物,可変物および中立物を設け,前記オブジェクト指向プログラムから解析された全クラスを未分類に分類する。
次に,フィールド情報をもとに,未分類に分類されているクラスが可変フィールドを持つかを判定し,未分類に分類されているクラスが可変フィールドを持つ場合に,当該クラスの種類を可変物に変更する。さらに,種類が可変物に分類されているクラスについて,親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する。さらに,種類が可変物に分類されているクラスについて,親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更する。次に,種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する。
これらの処理後に,全クラスから依然未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更し,不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する。
このように,本発明では,不変物および可変物の他に中立物という種類を設定することによって,不変物となるクラスを誤りなく抽出することができる。
また,従来手法であれば,可変物として分類されることが多い循環的参照構造を持つクラス群も,不変物として抽出することができる。
さらに,本発明にかかるプログラムは,9)不変物に分類するクラスを示す不変物指定情報を入力として受け付ける不変物指定情報入力処理と,10)前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理のいずれかの処理において,種類を可変物または中立物へ変更するクラスが,前記不変物指定情報で指定されたクラスである場合に,当該クラスを不正不変物として出力する不正不変物出力処理とを,前記コンピュータに実行させるためのものである。
必要であれば,不変物を人手によって指定できるようにする。通常,あるクラスが不変物か否かは,そのクラスが参照している他のクラスが不変物であるかに依存している。したがって,初期条件として,不変物であるクラスが指定されることによって,当該指定をもとにより多くの不変物を抽出することが可能となる。
また,人手による不変物の指定が矛盾する場合に,矛盾が生じているクラスに関する情報を不正不変物として出力することができる。
本発明によれば,オブジェクト指向プログラムを実際に実行させることなく,静的解析処理の結果を用いて,不変オブジェクトを,高速かつ誤りなく抽出することが可能となる。
よって,本発明によって出力された不変物抽出情報を用いて,例えば「クラスxxは不変クラスとして実装する」などの仕様どおりに,プログラムが実装されているかを検証することができる。
また,ある種のAPIでは実引数として不変インスタンスを要求するものがあるが,このような場合の確認を行うことができる。
また,不変物インスタンスには手続き呼び出しでの副作用がないため,高度なプログラム解析における参考情報として利用することができる。
図1に,本発明の実施の最良の形態における構成例を示す。
本発明にかかる不変物抽出装置1は,抽出対象プログラム2および不変物指定情報3を入力とし,抽出不変物情報4または不正不変物指定情報5を出力とする。
抽出対象プログラム2は,不変物抽出の対象である実行準備可能な任意のオブジェクト指向プログラムである。
本形態では,抽出対象プログラム2は,Java(登録商標)プログラムとし,プログラムで使用される可能性がある全クラスを読み込むことが可能であり,各クラスの親子関係および各クラスのフィールドが静的に決定しており(動的に変更できない),フィールドにfinal制約(代入を一度しか許容しない制約)を課すことが可能なものとする。
不変物指定情報3は,必要に応じて入力される,不変物として指定されるクラスを示す情報である。
抽出不変物情報4は,抽出対象プログラム2から抽出された,不変物に分類されたクラスの識別子群を含む情報である。
不正不変物指定情報5は,不変物指定情報3によって不正であることが判明した,不正不変物として判定されたクラスの識別子を含む情報である。
不変物抽出装置1は,CPUおよびメモリからなるコンピュータであり,ソフトウェアプログラムなどによって構成される,プログラム入力受付部10,不変物指定入力受付部11,プログラム構文解析部12,不変物抽出部13,および結果出力部14を備える。
プログラム入力受付部10は,抽出対象プログラム2としてJava(登録商標)クラスファイル群を受け付ける処理部である。
不変物指定入力受付部11は,必要があれば,不変物として指定されたクラスを示す不変物指定情報3を受け付ける処理部である。
プログラム構文解析部12は,抽出対象プログラム2の既知の解析処理を実行する処理部であり,初期種類生成部121,親子情報生成部122,フィールド情報生成部123を備える。
プログラム構文解析部12は,入力された抽出対象プログラム2(クラスファイル群)に既知の構文解析処理を行い,クラス情報を生成する処理部である。
初期種類生成部121は,抽出対象プログラム2のクラスについて初期の分類種類として「未分類」を設定する処理部である。不変物指定入力受付部11によって不変物指定情報3が入力された場合には,不変物指定情報3をもとに,該当するクラスの初期種類を「不変物」とする。
親子情報生成部122は,抽出対象プログラム2の解析処理の結果から,各クラスの祖先クラスおよび子孫クラスを示す親子情報を利用可能にする処理部である。
フィールド情報生成部123は,抽出対象プログラム2の解析処理の結果から,フィールド情報を利用可能にする処理部である。フィールド情報には,代入制約,配列の不変性などが含まれる。
不変物抽出部13は,初期種類,親子情報,フィールド情報をもとに,抽出対象プログラム2中の各クラスを,不変物か否かに分類する処理部である。また,クラスの初期種類に不正がないかを判定し,初期種類が不正であった場合には対応する不正物指定を,不正な指定として抽出する。
結果出力部14は,不変物抽出部13によって抽出された不変物であるクラスを示す抽出不変物情報4または,不変物指定が不正であるクラスを示す不正不変物指定情報5を出力する処理部である。
図2および図3を用いて,不変物抽出装置1の処理の流れを説明する。
ステップS1: 不変物抽出装置1のプログラム入力受付部10は,抽出対象プログラム2としてJava(登録商標)クラスファイル群を受け付ける。
ステップS2: 不変物指定入力受付部11は,不変物指定情報3として,クラスを一意に特定する名前である完全限定クラス名群を受け付ける。不変物指定情報3の入力は任意であり,空集合を受け付けるようにしてもよい。
ステップS3: プログラム構文解析部12は,既知の構文解析処理(例えば,JakartaBCEL(Byte Code Engineering Library))を使用して,抽出対象プログラム2(クラスファイル群)のクラス情報を生成する。
ステップS4: 初期種類生成部121は,抽出対象プログラム2の構文解析されたクラス群のすべてについて,完全限定クラス名をキーとし,分類先の種類の「未分類」を値とするハッシュ表(種類ハッシュ表)を作成する。さらに,抽象対象プログラム2の言語仕様において不変物とされているクラスの値を「不変物」とする。例えば,Java(登録商標)ではStringなどが該当する。また,不変物指定情報3が入力されていれば,不変物指定情報3の完全限定クラス名群に指定されたクラスの値を「不変物」とする。
ステップS5: 親子情報生成部122は,抽象対象プログラム2の構文解析されたクラス群すべてについて親子情報を生成する。具体的には,BCELのJavaClass.getInterfaces ( )およびJavaClass.getSuperClass ( )などの手続きを用いる。クラスの親子関係の組ごとに親情報と子情報とを作成する。
親情報は,完全限定クラス名をキーとし,その親クラスの完全限定クラス名を値とするハッシュ表(親情報ハッシュ表)である。また,子情報は,完全限定クラス名をキーとし,その子クラスの完全限定クラス名を値とするハッシュ表(子情報ハッシュ表)である。
ステップS6: フィールド情報生成部123は,抽出対象プログラム2の構文解析されたクラス群すべてについてフィールド情報を生成する。
フィールド情報は,完全限定クラス名をキーとし,単位フィールド情報を値とするハッシュ表(フィールドハッシュ表)である。
単位フィールド情報は,そのフィールドの型である完全限定クラス名とそのフィールドが「明らかに可変であるか」を示す論理値との組である。単位フィールド情報を,完全限定クラス名をキーとし,「明らかに可変であるか」を示す論理値を値とするハッシュ表で表現する。
ここでは,final制約がなければ「明らかに可変である」に該当する。また,フィールド型が配列型であれば「明らかに可変である」に該当する。
一方,final制約がある基本型フィールドは,不変であるので,フィールド情報に登録しない。
ステップS7: 不変物抽出部13は,それまでに生成された,初期種類,親子情報,フィールド情報をもとに,抽出対象プログラム2中の各クラスから「不変物」に分類されるクラスを抽出する。また,不変物指定情報3によってクラスの種類に不正がないかを判定し,種類が不正であった場合には対応する不正不変物指定を抽出する。
不変物抽出部13は,抽出対象プログラム2の各クラスについて,設定された種類が変化しなくなるまで,以下の手順で種類を決定する。
ステップS70: 可変フィールドを持つクラスについて,その種類が「未分類」であれば「可変物」に変更する。
ステップS71: ステップS71の処理で,種類が「可変物」であるクラスについて,その親クラスまたは子クラスのうち種類が「不変物」であるクラスを不正不変物指定とする。
ステップS72: 種類が「可変物」であるクラスの祖先クラスについて,その種類が「可変物」ではないクラスの種類を「中立物」に変更する。
ステップS73: 種類が「可変物」であるクラスの子孫クラスの種類を「可変物」に変更する。
ステップS74: ステップS72,S73の処理で,種類が「可変物」であるクラスについて,その親クラスのうち種類が「不変物」であるクラスを不正不変物指定とする。
ステップS75: 種類が「中立物」であるクラスについて,その祖先クラスのうち種類が「可変物」ではないクラスの種類を「中立物」に変更する。
ステップS76: ステップS70〜S75の処理後,種類が「未分類」であるクラスの種類を「不変物」に変更する。
ステップS8: 結果出力部14は,種類が「不変物」であるクラスの完全限定クラス名群を示す抽出不変物情報4を出力する。また,不正不変物指定に該当するクラスの完全限定クラス名群を示す不正不変物指定情報5を出力する。
図4〜図6は,不変物抽出部13を実現する疑似コード例を示す図である。図4〜図6は,不変物抽出部13を示す1つの擬似コードであり,各図における「step」の番号は,前述のステップS70〜S76とほぼ対応している。
図4の疑似コードの第1行目に示す処理において,「Map」は,java.util.Mapでありハッシュ表に相当する。また,その引数は,それぞれ順に,初期種類(種類),親情報,子情報,フィールド情報に相当する。
「Set」はjava.util.Set,「HashSet」はjava.util.HashSetであり,値のないハッシュ表に相当する。
「LinkedList」は,java.util.LinkedListであり,データ構造キュー(FIFO)に相当する。
図6の疑似コードの第12〜14行目で,「フィールド情報が空集合(null)であるフィールドを持つクラスは可変フィールドを持つ」としている。これは,フィールドについては必ずしもリンクが可能ではないような抽出対象プログラム2も入力として扱うことができるようにするためである。すなわち,型(クラス)のコードがないフィールドを持つクラスを含むような抽出対象プログラム2の入力を受け付けた場合に,このようなクラスは,可変フィールドを持つクラスとして処理される。
図7は,図4〜図6に不変物抽出部13で使用しているクラス種類(Kind),クラス名(ClassName),不正不変物指定(InvalidInputException)のコード例を示す図である。
クラスの種類を示すクラスKindは,未分類,不変物,中立物,可変物の4つの値のいずれか1つを示す列挙型である。
完全限定クラス名を表現するクラスClassNameは,文字列(String)を保持する型である。
不正不変物指定情報5を表現するクラスInvalidInputExceptionは,不正は不変物指定とされたClassNameを保持する型である。
なお,以上の処理を行う不変物抽出装置1としてコンピュータを機能させるためのプログラムは,コンピュータが読み取り可能な可搬媒体メモリ,半導体メモリ,ハードディスクなどの適当な記録媒体に格納することができ,これらの記録媒体に記録して提供され,または,通信インタフェースを介して種々の通信網を利用した送受信により提供される。
1 不変物抽出装置
10 プログラム入力受付部
11 不変物指定入力受付部
12 プログラム構文解析部
121 初期種類生成部
122 親子情報生成部
123 フィールド情報生成部
13 不変物抽出部
14 結果出力部
2 抽出対象プログラム
3 不変物指定情報
4 抽出不変物情報
5 不正不変物指定情報
10 プログラム入力受付部
11 不変物指定入力受付部
12 プログラム構文解析部
121 初期種類生成部
122 親子情報生成部
123 フィールド情報生成部
13 不変物抽出部
14 結果出力部
2 抽出対象プログラム
3 不変物指定情報
4 抽出不変物情報
5 不正不変物指定情報
Claims (5)
- 処理対象とするオブジェクト指向プログラムを入力として受け付けるプログラム入力処理と,
前記入力されたオブジェクト指向プログラムを構文解析し,当該オブジェクト指向プログラムの全クラスについて,クラス間の親子情報およびフィールド情報を取得するクラス情報取得処理と,
クラスの種類として,未分類,不変物,可変物および中立物を設け,前記オブジェクト指向プログラムから解析された全クラスを未分類に分類する初期分類処理と,
前記フィールド情報をもとに,前記未分類に分類されているクラスが可変フィールドを持つかを判定し,前記未分類に分類されているクラスが可変フィールドを持つ場合に,当該クラスの種類を可変物に変更する第1の分類変更処理と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第2の分類変更処理と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更する第3の分類変更処理と,
前記種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第4の分類変更処理と,
前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理の処理後に,前記全クラスから未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更する不変物抽出処理と,
前記不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する不変物情報出力処理とを,
コンピュータに実行させるためのプログラムの不変物抽出処理プログラム。 - 不変物に分類するクラスを示す不変物指定情報を入力として受け付ける不変物指定情報入力処理と,
前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理のいずれかの処理において,種類を可変物または中立物へ変更するクラスが,前記不変物指定情報で指定されたクラスである場合に,当該クラスを不正不変物として出力する不正不変物出力処理とを,
前記コンピュータに実行させるための請求項1に記載のプログラムの不変物抽出処理プログラム。 - 処理対象とするオブジェクト指向プログラムを入力として受け付けるプログラム入力部と,
前記入力されたオブジェクト指向プログラムを構文解析し,当該オブジェクト指向プログラムの全クラスについて,クラス間の親子情報およびフィールド情報を取得するクラス情報取得部と,
クラスの種類として,未分類,不変物,可変物および中立物を設け,前記オブジェクト指向プログラムから解析された全クラスを未分類に分類する初期分類部と,
前記フィールド情報をもとに,前記未分類に分類されているクラスが可変フィールドを持つかを判定し,前記未分類に分類されているクラスが可変フィールドを持つ場合に,当該クラスの種類を可変物に変更する第1の分類変更部と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第2の分類変更部と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更する第3の分類変更部と,
前記種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第4の分類変更部と,
前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理の処理後に,前記全クラスから未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更する不変物抽出部と,
前記不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する不変物情報出力部とを備える
プログラムの不変物抽出処理装置。 - コンピュータが,
処理対象とするオブジェクト指向プログラムを入力として受け付け,
前記入力されたオブジェクト指向プログラムを構文解析し,当該オブジェクト指向プログラムの全クラスについて,クラス間の親子情報およびフィールド情報を取得し,
クラスの種類として,未分類,不変物,可変物および中立物を設け,前記オブジェクト指向プログラムから解析された全クラスを未分類に分類し,
前記フィールド情報をもとに,前記未分類に分類されているクラスが可変フィールドを持つかを判定し,前記未分類に分類されているクラスが可変フィールドを持つ場合に,当該クラスの種類を可変物に変更し,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更し,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更し,
前記種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更し,
前記全クラスから未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更し,
前記不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する
ことを特徴とするプログラムの不変物抽出処理方法。 - 処理対象とするオブジェクト指向プログラムを入力として受け付けるプログラム入力処理と,
前記入力されたオブジェクト指向プログラムを構文解析し,当該オブジェクト指向プログラムの全クラスについて,クラス間の親子情報およびフィールド情報を取得するクラス情報取得処理と,
クラスの種類として,未分類,不変物,可変物および中立物を設け,前記オブジェクト指向プログラムから解析された全クラスを未分類に分類する初期分類処理と,
前記フィールド情報をもとに,前記未分類に分類されているクラスが可変フィールドを持つかを判定し,前記未分類に分類されているクラスが可変フィールドを持つ場合に,当該クラスの種類を可変物に変更する第1の分類変更処理と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第2の分類変更処理と,
前記種類が可変物に分類されているクラスについて,前記親子情報をもとに,当該クラスの子孫クラスの種類を可変物に変更する第3の分類変更処理と,
前記種類が中立物に分類されているクラスについて,前記親子情報をもとに,当該クラスの祖先であって種類が可変物ではないクラスを特定し,当該特定したクラスの種類を中立物に変更する第4の分類変更処理と,
前記第1の分類変更処理,前記第2の分類変更処理,前記第3の分類変更処理および前記第4の分類変更処理の処理後に,前記全クラスから未分類に分類されているクラスを取り出し,当該取り出したクラスの種類を不変物に変更する不変物抽出処理と,
前記不変物に分類されたクラスに関する情報を,不変物抽出情報として出力する不変物情報出力処理とを,
コンピュータに実行させるためのプログラムの不変物抽出処理プログラムを記憶する記憶媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007302377A JP2009129127A (ja) | 2007-11-22 | 2007-11-22 | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 |
US12/273,177 US20090138850A1 (en) | 2007-11-22 | 2008-11-18 | Processing device for extracting immutable entity of program and processing method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007302377A JP2009129127A (ja) | 2007-11-22 | 2007-11-22 | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009129127A true JP2009129127A (ja) | 2009-06-11 |
Family
ID=40670834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007302377A Withdrawn JP2009129127A (ja) | 2007-11-22 | 2007-11-22 | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20090138850A1 (ja) |
JP (1) | JP2009129127A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010108076A (ja) * | 2008-10-28 | 2010-05-13 | Internatl Business Mach Corp <Ibm> | ソースコード変換方法、サーバシステム、およびサーバプログラム |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9026993B2 (en) * | 2008-06-27 | 2015-05-05 | Microsoft Technology Licensing, Llc | Immutable types in imperitive language |
US9569282B2 (en) | 2009-04-24 | 2017-02-14 | Microsoft Technology Licensing, Llc | Concurrent mutation of isolated object graphs |
US9674637B2 (en) * | 2011-06-16 | 2017-06-06 | Microsoft Technology Licensing, Llc | Object marshaling |
US9971578B2 (en) * | 2012-10-15 | 2018-05-15 | Microsoft Technology Licensing, Llc | Reference attribute annotation signifying no external reference |
US9053028B2 (en) | 2013-01-04 | 2015-06-09 | Microsoft Technology Licensing Llc | Type casting in a managed code system |
US9098269B2 (en) * | 2013-01-04 | 2015-08-04 | Microsoft Technology Licensing, Llc | System and method to ensure resource access safety with immutable object types |
US9189446B2 (en) * | 2013-01-04 | 2015-11-17 | Microsoft Technology Licensing, Llc | Immutable sharable zero-copy data and streaming |
US9323693B2 (en) | 2013-01-04 | 2016-04-26 | Microsoft Technology Licensing, Llc | Zero-copy caching |
US9189206B2 (en) * | 2013-05-21 | 2015-11-17 | Red Hat, Inc. | System and method for managing immutable objects |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4558413A (en) * | 1983-11-21 | 1985-12-10 | Xerox Corporation | Software version management system |
US6442753B1 (en) * | 1997-08-28 | 2002-08-27 | International Business Machines Corporation | Apparatus and method for checking dependencies among classes in an object-oriented program |
US6901588B1 (en) * | 2000-04-17 | 2005-05-31 | Codemesh, Inc. | Sharing components between programming languages by use of polymorphic proxy |
US6925638B1 (en) * | 2000-09-21 | 2005-08-02 | International Business Machines Corporation | Mutability analysis in Java |
US7089541B2 (en) * | 2001-11-30 | 2006-08-08 | Sun Microsystems, Inc. | Modular parser architecture with mini parsers |
US7486294B2 (en) * | 2003-03-27 | 2009-02-03 | Microsoft Corporation | Vector graphics element-based model, application programming interface, and markup language |
US7511718B2 (en) * | 2003-10-23 | 2009-03-31 | Microsoft Corporation | Media integration layer |
US7730450B2 (en) * | 2004-08-12 | 2010-06-01 | National Instruments Corporation | Automatic versioning and data mutation of user-defined data types |
US7657899B2 (en) * | 2005-03-09 | 2010-02-02 | Computer Associates Think, Inc. | Dynamic creation of proxy software objects at time of execution |
US7805409B2 (en) * | 2008-02-21 | 2010-09-28 | Oracle America, Inc. | Dynamic composition of an execution environment from multiple immutable file system images |
US8762969B2 (en) * | 2008-08-07 | 2014-06-24 | Microsoft Corporation | Immutable parsing |
-
2007
- 2007-11-22 JP JP2007302377A patent/JP2009129127A/ja not_active Withdrawn
-
2008
- 2008-11-18 US US12/273,177 patent/US20090138850A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010108076A (ja) * | 2008-10-28 | 2010-05-13 | Internatl Business Mach Corp <Ibm> | ソースコード変換方法、サーバシステム、およびサーバプログラム |
Also Published As
Publication number | Publication date |
---|---|
US20090138850A1 (en) | 2009-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009129127A (ja) | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 | |
US11880270B2 (en) | Pruning and prioritizing event data for analysis | |
CN110162296B (zh) | 应用程序编程接口文档的生成方法、装置及终端设备 | |
Fazzini et al. | Automatically translating bug reports into test cases for mobile apps | |
US10394686B2 (en) | Static feature extraction from structured files | |
US8028276B1 (en) | Method and system for generating a test file | |
US8516443B2 (en) | Context-sensitive analysis framework using value flows | |
US20180024911A1 (en) | Software code debugger for quick detection of error root causes | |
US7849509B2 (en) | Detection of security vulnerabilities in computer programs | |
US9690946B2 (en) | Security analysis using relational abstraction of data structures | |
US10216500B2 (en) | Method and apparatus for synchronization annotation | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US9311111B2 (en) | Programming environment with support for handle and non-handle user-created classes | |
US9390073B2 (en) | Electronic file comparator | |
Hoshieah et al. | A static analysis of android source code for lifecycle development usage patterns | |
CN117234517A (zh) | 接口参数校验方法、装置、设备及存储介质 | |
Petrescu et al. | Do names echo semantics? A large-scale study of identifiers used in C++’s named casts | |
JP2006277742A (ja) | Udtに対するデータフォーマットについてストリーミングチェックを行うシステムおよび方法 | |
US8010572B1 (en) | Kstore scenario simulator processor and XML file | |
US8935663B2 (en) | Identifying deprecated external routines invoked by a software application implementing subtype polymorphism | |
CN108153666B (zh) | 一种静态检测安卓代码中的资源回收漏洞的方法和装置 | |
CN105279434A (zh) | 恶意程序样本家族命名方法及装置 | |
WO2023067667A1 (ja) | 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム | |
CN112783755B (zh) | 一种基于自然语言理解函数原型发现内存破坏漏洞的方法 | |
EP4285256B1 (en) | Generation of a causality tree representation of threat analysis report data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20110201 |