JP2016509737A - ソース位置を欠くコードセグメントを有するソースコードをモデル化する方法 - Google Patents

ソース位置を欠くコードセグメントを有するソースコードをモデル化する方法 Download PDF

Info

Publication number
JP2016509737A
JP2016509737A JP2015556990A JP2015556990A JP2016509737A JP 2016509737 A JP2016509737 A JP 2016509737A JP 2015556990 A JP2015556990 A JP 2015556990A JP 2015556990 A JP2015556990 A JP 2015556990A JP 2016509737 A JP2016509737 A JP 2016509737A
Authority
JP
Japan
Prior art keywords
code
node
source
pigment
data model
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.)
Granted
Application number
JP2015556990A
Other languages
English (en)
Other versions
JP5974191B2 (ja
Inventor
ゴー,ジェフリー・バン
イェゲ,スティーブン・エフ
フロムバーガー,マイケル・ジョゼフ
シャリ,アミン
ウエスト,グレゴリー・スコット
デネット,ジェイムズ・アンソニー
エスペホルト,ラッセ
ブラウンスタイン,ロナルド・アーロン
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2016509737A publication Critical patent/JP2016509737A/ja
Application granted granted Critical
Publication of JP5974191B2 publication Critical patent/JP5974191B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

位置を有さないコードセグメントをモデル化するシステムおよび方法が開示される。ソースコードは、コード要素を表わすノードとノード間の関係を表わすエッジとを用いて、データグラフにおいてインデックス化およびモデル化され得る。しかしながら、一部のコード要素は、非表示もしくは黙示であり、このため位置情報を欠き得る。これらの場合において、コードフィグメントが作成され、グラフにおけるノードとして表わされる。フィグメントノードは、フィグメントノードが現実のソースコードノードから容易に区別され得るように、特殊に指定がなされ得る。そして、グラフは、非表示もしくは黙示コードと相互作用するノードにおいてコードフィグメントについての位置情報を含むように更新される。データグラフは、ユーザに対して提供され得る、またはコード化ツールによって使用されるサービスとして提供され得る。

Description

背景
ソフトウェア開発者は、いくつかの異なるプログラミング言語でソースコードを書く。各プログラミング言語は、異なるシンタックスおよびセマンティクスを有する。コードブラウザ、統合開発環境(IDE)、および履歴分析ツールなどを含むコード化ツールは、これらのツールがソフトウェア開発者にとって有用なものとなるように、ソースコード言語を理解できる必要がある。多くのツールは、1つまたは2つの言語を良好に表わすが、他の言語を支持することが難しい。全てのプログラミング言語を支持する適切なツールを得るためには、全てのツールによって使用され得る単一のコードモデルを設けるべきである。全ての言語のソースコードのセマンティクスおよびシンタックスを表わすには、各言語の微妙な差異を理解する複合データモデルおよびサービスが必要となる。また、データモデルおよびサービスは、任意のプログラミング言語から、または言語間で、要素をインデックス化し、要素間の関係を表示することができる必要がある。
概要
この明細書は、概してデータのモデル化に関する技術、具体的にはソース位置を欠くコードセグメントをモデル化する方法およびシステムに関する技術を記載するものである。
概して、この明細書に記載の主題の一局面は、ソースコードをモデル化するシステムおよび方法において具現化され得る。例示的なシステムは、1つ以上の処理装置と、命令を記憶する1つ以上の記憶装置とを含み、命令が1つ以上の処理装置によって実行されると、1つ以上の処理装置は、ソース位置を有さないコードセグメントを含むソースコードを受け取り、受け取ったソースコードをインデックス化し、インデックス化されたソースコードから、コード要素を表わす複数のノードと要素間の関係についての複数のエッジとを含むデータモデルを作成し、各ノードと関連付けられるソース位置を判定し、コードセグメントの1つを非表示もしくは黙示コードセグメントとして認識することに応答して、コードセグメントについてのフィグメント表現(figment representation)を作成し、作成されたフィグメントを、コードセグメントノードと関連付けられたソース位置として割り当てる。例示的な方法は、ソース位置を有さないコードセグメントを含むソースコードを受け取るステップと、受け取ったソースコードをインデックス化するステップと、インデックス化されたソースコードから、コード要素を表わす複数のノードと要素間の関係についての複数のエッジとを含むデータモデルを作成するステップと、各ノードと関連付けられるソース位置を判定するステップと、コードセグメントの1つを非表示もしくは黙示コードセグメントとして認識することに応答して、コードセグメントについてのフィグメント表現を作成するステップと、作成されたフィグメントをコードセグメントのノードと関連付けられたソース位置として割り当てるステップとを含む。ソース位置を有さないコードセグメントを表わすデータモデルを使用する第2の例示的な方法は、ソース位置を有さないコードセグメントを含むコードについてのデータモデルを要求するステップと、ソース位置を有さないコードセグメントのフィグメント表現を含む、要求されたデータモデルを受け取るステップと、任意でコードセグメントのフィグメント表現をエンドユーザに表示するステップとを含む。
これらおよび他の実施形態は、以下の特徴のうち1つ以上を任意で含み得る。フィグメントノードは、データモデルにおいてノードを他のノードから区別するために、特殊な注釈付けがなされ得る。データモデルは、ユーザに対して提供され得る。データモデルは、アプリケーションプログラムインターフェイス(API)を介して提供され得る。データモデルは、ユーザインターフェイスを介してユーザに対して提供され得る。データモデルは、コマンドラインコードを介してユーザに対して提供され得る。フィグメント表現の内容は有効なコードシンタックスであり得る。フィグメント表現の内容はコード挙動をモデル化するが、有効なコードシンタックスを表わさない。非表示もしくは黙示コードセグメントを使用するソースコードについてのノードと作成されたフィグメントを表わすノードとの間にはエッジがあり得る。データモデルは、フィグメント表現についてのメタデータを含み得る。メタデータは、エンドユーザにフィグメント表現を示すために、またはエンドユーザからフィグメント表現を隠すために使用され得る。メタデータは、コードセグメントがフィグメントであるという情報を表示するために使用され得る。メタデータは、コードセグメントがフィグメントを含むという情報を表示するために使用され得る。データモデルは、アプリケーションプログラムインターフェイスを使用して要求され得る。
本発明の1つ以上の実施形態の詳細は、例示のみによって与えられる添付の図面、および以下の記載において述べられる。本発明の他の特徴、局面、および利点は、明細書、図面、および請求項から明らかとなる。様々な図面における同様の参照番号および名称は、同様の要素を示す。
例示的なコードセグメントを示すブロック図である。 例示的なコードセグメントを示すブロック図である。 図1aおよび図1bに規定されるコードセグメントについてのデータモデルを示すブロック図である。 2つのコードセグメントをインデックス化およびグラフ化する例示的な処理を示すブロック図である。 図3に規定されたコードセグメントについてのデータモデルを示すブロック図である。 非表示および/もしくは黙示コードについてのコードフィグメントを含む、図3に規定されたコードセグメントについての例示的なモデルを示すブロック図である。 マクロをインデックス化およびグラフ化する例示的な処理を示すブロック図である。 図6に規定されるマクロについてのデータモデルを示すブロック図である。 非表示および/もしくは黙示コードについてのコードフィグメントを含む、図6に規定されるマクロについての例示的なモデルを示すブロック図である。 非表示および/もしくは黙示コードを表わすコードフィグメントを作成する例示的な方法を示すフロー図である。 例示的な演算装置を示すブロック図である。 ソース位置を有さないコードセグメントを表わすデータモデルを使用する例示的な方法を示すフロー図である。
詳細な説明
例示的なデータモデルおよびサービスは、言語に依存しない標準的なソースコードおよびコンパイラメタデータの表現を提供する。モデルは、ソースコードをデータグラフとして表わす。データグラフは、データを記憶し、ノードと呼ばれる点およびエッジと呼ばれる線の有限の集合を使用してデータ間の関係を示すデータ構造である。グラフ内の関係は、図2に示されるように、エッジを使用してノードを互いに接続することによって表される。
ソースコードからデータグラフモデルを作成するために、ソースコードは、グラフを形成するノードおよびエッジの集合に変えなければならない。高いレベルの正確性を得る便利な方法は、ソースコードのための既存のコンパイラを再利用することである。コンパイラには、コンパイラからデータを抽出してデータグラフモデルのためのノードおよびエッジを構築するインデクサが設けられ得る。図1aおよび図1bは、「hello world」という単語を印刷するために合わせて使用され得るソースコードファイルの2つの例示的なスニペットを示す。図1aにおけるファイル「stdio.h」(105)は、アーギュメントとしてポインターをストリング「format」に取り込む2行目の関数「printf」の定義を含み、「format」によってポイントされたストリングを標準出力に書き込む。図1bにおいて、ファイル「hello.c」(11)は、2行目の「stdio.h」ファイルを含み、4行目の「stdio.h」からの「printf」の定義を「main」(3行目)と呼ばれる関数において使用し、ストリング「hello world」を標準出力に書き込む。データモデルは、図2に示されるグラフと類似のグラフとしてソースコードスニペットを表わし得る。図2は、グラフにおけるノードとして2つのファイル「hello.c」(232)および「stdio.h」(234)を示し、2つのノード間の双方向エッジによって表わされる「含む/含まれる(includes/included by)」関係を伴う。ファイル「hello.c」(232)を表わすノードは、2つのノード間の「宣言する/宣言される(declares/declared by)」関係を示す双方向エッジによって、関数「main」(224)を表わすノードに接続される。ファイル「stdio.h」(234)を表わすノードは、「宣言する/宣言される」関係エッジによって「printf」(222)のノードに接続される。ソースコードにおいて「printf」は「main」によって呼び出されることから、「main」(224)を表わすノードは、「呼び出す/呼び出される(calls/called by)」関係鏡映エッジによって、「printf」(222)を表わすノードに接続される。グラフにおいて、「main」(224)についてのノードおよび「printf」(222)についてのノードの両方は、それらが戻る組み込み型に対して関係を有する。「main」(224)は、ボイド戻り(204)を有し、「printf」は「int」(206)を戻す。
上述のように、ノードは、ソースコードのセグメントを表わすために作成される。ノードは、組み込み型、パラメータ化された型、構成型、ポインタ型、シンボルの宣言、ユーザ定義型、参照、方法、方法呼び出し、フィールド、割り当て、コメント、インラインドキュメンテーション、およびファイルなどのいくつかの異なるタイプの要素を表わし得る。各ノードは、ノードについてのグローバル一意識別子、要素の種類、表示名、ソースコードにおける要素の位置、要素の変更子、次元、およびソースコードにおける要素まわりにあるコードのスニペットを含む、特定の情報を含み得る。ノードは、未解決、コメント、損失、ネームスペース、パッケージ、モジュール、クラス、構造、インターフェイス、列挙、列挙定数、関数、方法、コンストラクタ、フィールド、ローカル、パラメータ、変数、プロパティ、ブーリアン、文字、ストリング、正規表現、整数、フロート、定数、有理数、複素数、大数、オブジェクト、インスタンス、ファイル、ディレクトリ、シンボリックリンク、診断、ポインタ、参照、エイリアス、ヌル、ボイド、ユニット、変動型、パラメータ型、変数型、特殊型、シンボル、名前、値、使用、配列、セット、マップ、リスト、タプル、および結合などのいくつかの種類のうちの1つであり得るが、これらに限定されない。
エッジは、データモデルにおける要素間の関係を表わし得る。これらのエッジは、双方向であり得る。これは、第1のノードから第2のノードへの各エッジが、第2のノードから第1のノードへの鏡映エッジを有することを意味する。拡張する/拡張される、実施する/実施される、オーバーライドする/オーバーライドされる、承継する/承継される、宣言する/宣言される、取り込む/取り込まれる、ベース型/構成型、型を有する/の型である、戻り型/戻される、呼び出す/呼び出される、インスタンス生成する/インスタンス生成される、参照する/参照される、特性を有する/の特性、宣言を有する/の宣言、定義を有する/の定義、入力を有する/消費される、出力を有する/作成される、生成する/生成される、制限される/アクセスを許可される、使用コンテキスト/包含された使用、注釈付される/の注釈、親/子、および投げる/投げられるなどを含む、いくつかの異なるエッジペアがある。
一部の例において、データグラフは、ソース位置を有さない要素についてのセマンティック情報を記憶する。なぜなら、一部のコード片は、非表示もしくは黙示であり、物理的位置を有さないからである。位置を有さないコードの例としては、デフォルトコンストラクタ、マクロ展開、テンプレートインスタンス化、静的にインデックス化可能なランタイムオブジェクト、陰関数アーギュメント、ラムダ拡張、ドキュメントコメント、定数畳込、および生成コードが含まれる。
非表示もしくは黙示コードセグメントは、参照され得る、使用され得る、またはソースコードの他の部分に結合され得る。これらのコードセグメントが位置を欠いていることは問題である。ユーザが上記のコードセグメントの1つを呼び出すソースコードにおける場所からセグメントへデータグラフを移動したい場合、通常の「ジャンプ」機能は働かない。なぜなら、非表示もしくは黙示コードセグメントについてはソースコードにおける実際の物理的な場所がなく、要素についてのデータグラフにおける位置がないためである。非表示もしくは黙示コードセグメントは、ソース言語における有効なシンタックスである表現を有し得ない。
非表示もしくは黙示コードがある特定の場合において、慣習的なデータモデルでは、利用可能なソース位置がないことをユーザに伝えるメッセージが表示される場合が多い。他の慣習的なモデルでは、ソースコードの関連する断片へポイントされた位置が代替的に合成される。この合成手法は、ソフトウェア開発者がコードを理解するには十分に良いものであるが、この手法は静的解析ツールには使用することができない。たとえば、デフォルトコンストラクタの場合において、ユーザがコンストラクタのインスタンス化をクリックした場合、データグラフモデルは、代わりにクラスの宣言へユーザを導き得る。多くのユーザは、デフォルトコンストラクタをクリックした場合、なぜ黙示的デフォルトコンストラクタを有らしめた宣言にデータグラフモデルがユーザを導くのかを理解し得る。しかしながら、静的解析ツールは、この特殊な知識を有し得ない。このため、非表示もしくは黙示コードが有る時に静的解析ツールがソースコードをリファクタする場合、ツールがコードを無効なコードに書き換える可能性が最も高い。他の慣習的なモデルは、カスタムユーザインターフェイスを構築することを含むが、このモデルでは、各種の非表示/黙示データがそれぞれメタデータおよびカスタムUIを記憶する方法を有する必要がある。
例示的なデータグラフモデルは、非表示もしくは黙示コードセグメントに対する代替的な位置をスキップまたは合成しない。代わりに、例示的なモデルは、コードフィグメントを作成することにより、非表示/黙示コードセグメントの表現を露出させる。例示的な方法は、ソースコード内の非表示/黙示コードセグメントを認識する。そして、ソース「フィグメント」が、非表示/黙示コードについて生成される。これらのフィグメントは、実際にコンパイルされたコード、またはソース言語における有効なシンタックスである必要はない。しかしながら、フィグメントは、意味のある方法で非表示もしくは黙示コードを表わすべきである。フィグメントは、エンドユーザがフィグメントを理解することができるように、出来る限り元のソース言語に近いシンタックスを有するのが好ましい。
ソース位置を有さないコードセグメントをモデル化する例示的な方法は、図9に示されるように、ソースコードを受け取ること(901)から始まる。そして、ソースコードはインデックス化されるべきである(903)。要素を表わすノードおよびノード間の関係を表わすエッジを使用してインデックス化ソースコードからデータモデルが作成され得る(905)。各ノードについて、ソース位置が判定され得る(907)。ノードによって表されるコードセグメントが非表示もしくは黙示である場合、コードセグメントのコードフィグメント表現が作成され得る(909)。そして、非表示もしくは黙示コードの任意の局面を表わす任意のノードにおける位置をモデル化するためにフィグメント位置が使用され得る(911)。また、フィグメントノードは、フィグメントノードを現実のノードから区別するために特殊な注釈付けがなされ得る。そして、データは、ユーザインターフェイス、アプリケーションプログラムインターフェイス、または一部の他の機構を介してエンドユーザに対して提供され得る。
図3は、例示的なサービスが2つのjava(登録商標)ファイルをインデックス化して例示的なデータグラフモデルを作成する処理を示す。Demo.java()(305)は、テスタークラスのデフォルトコンストラクタへの呼び出しを3行目に有する。テスタークラスは、Tester.java (303)において定義されるが、Tester.java(303)においてデフォルトコンストラクタの明示的な定義はない。このため、このコンストラクタのためのソースコードはなく、コンパイラは、コードのためのプレースホルダとしてデフォルト実施を行ない得る。
図4は、Demo.java()(305)とTester.java()(303)との間の相互作用についてのデータグラフモデルの部分的な実施である。上述のように、ノードは、ソースコードにおける要素を記載する。この例において、各ノードは、一意識別子(チケット名)とソース位置とを有する。ノードは、ラベル付けされたエッジを介して関係する。Demo.java3行目(409)からテスターコンストラクタ(404、3行目)へ呼び出しが行われた場合、コンストラクタ(412)の使用とコンストラクタノード(408)との間にエッジを発することは難しい。なぜなら、コンストラクタノード(408)を記載するノードに付されたソース位置がないからである。
図5に示されるような例示的なデータグラフモデルにおいて、フィグメント(519)が加えられ、黙示テスターコンストラクタ(521)が表わされる。自己コンパイル可能となり得ないjava(登録商標)コードのスニペットであるこのフィグメント(519)は、ユーザが黙示コードを理解するのに十分なコンストラクタについての情報を含む。フィグメント(519)を記載するノードには、ノードに示されるように「フィグメント:真」などの特殊な注釈がラベル付けされており、ノードがフィグメントであることを示す。そして、テスターコンストラクタ(509)を記載するノードは、新たに加えられたフィグメントに対するノードの位置点を有するように変更される。
図6は、マクロ(601)を定義および使用するC++ファイルをモデル化する例示的な処理を示す。マクロは、規定の手順に従ってどのように特定の入力シーケンスが置換入力シーケンスへマップ化されるべきかを特定する規則またはパターンである。
図7は、図6のソースコードをインデックス化する際に作成され得るデータグラフの部分的な実施である。このグラフにおいて、ソースコードの10行目の「IntegerContainer」の使用(703)をモデル化することは難しい。なぜなら、構造体(704、07行目)は、7行目のマクロに対する呼び出し(703)によって導入されたが、構造体の定義についての実際のソースコードが存在しないためである。加えて、11行目の「IntegerContainer」型のフィールド値(703)をモデル化することは難しい。なぜなら、「IntegerContainer」についての実際のソースコードが無いためである。「IntegerContainer」は、位置を欠いた状態でグラフに示される(711)。また、「IntegerContainer」の値は、位置の無い状態でグラフに組み込まれる(713)。
図8は、IntegerContainer構造体(807)の定義を含む新しいファイル「//figments/container.cc/ IntegerContainer」(804)を作成する例示的なグラフを示す。この新しいファイル(804)は、IntegerContainer構造体(805)を表わすノードのためのノードおよびIntegerContainer値フィールド(816)のためのノードの両方についての位置情報として使用され得る。さらに、使用ノード(817)は、元のソースファイルにおける値フィールドのタイプとtypedefの定義との間に加えられ得る。加えて、フィグメントはユーザアクションによって作成されたセマンティクスを表わすことから、マクロの使用(803)とフィグメントファイル(804)との間にエッジが作成され得て、これら2つのノード間の「フィグメント/のフィグメント(FIGMENT/FIGMENT_OF)」関係が定義される。
位置情報は、コードセグメントの位置について有用な任意の種類の情報であり得る。図面における位置情報はファイルおよび行番号で示されるが、この情報は単に例示を目的として示される。
例示的な実施形態において、コード化ツールおよびユーザインターフェイスは、フィグメントを用いて向上したデータモデルを使用し、エンドユーザに対してコードを表わす。ソース位置を有さないコードセグメントを表わすデータモデルを使用する例示的な方法は、図11に示されるようにデータモデルを要求することから始まる(1101)。データモデルは、例示的なデータグラフモデルサービスを呼び出すアプリケーションプログラムインターフェイス(API)を使用して要求され得る。受け取ったデータモデルは、ソース位置を有さない少なくとも1つのコードセグメントを含み得る。受け取ったデータモデルは、ソース位置を有さないコードセグメントのフィグメント表現を含み得る(1103)。このデータモデルは、エンドユーザに対して表示され得る(1105)。ソース位置を有さないコードセグメントのフィグメント表現に加えて、データモデルはフィグメント表現についてのメタデータを含み得る。このメタデータは、フィグメントであるモデルノードとフィグメントでないノードとの間の区別を含み得る。また、データモデルは、ソース位置の無いコードセグメントを含むノードとソース位置の無いコードセグメントを表わすノードとの間のエッジ関係を提供し得る。エッジ関係は、「のフィグメント/フィグメントを有する(FIGMENT_OF/HAS_FIGMENT)」関係としてモデル化され得る。コードツールおよびユーザインターフェイスは、メタデータ、エッジ関係、および他の提供された情報を使用し、どの情報をユーザに対して表示するかを判定し得る。
図10は、コードセグメントがソース位置を有さない場合にデータモデルにおいてコードセグメントをモデル化するために配列された例示的なコンピュータ(1000)を示す高レベルブロック図である。非常に基本的な構成において(1001)、演算装置(1000)は、通常、1つ以上のプロセッサ(1010)とシステムメモリ(1020)とを含む。メモリバス(1030)は、プロセッサ(1010)とシステムメモリ(1020)との間の通信のために使用され得る。
所望の構成に応じて、プロセッサ(1010)は、マイクロプロセッサ(μP)、マイクロコントローラ(μΘ)、デジタル信号プロセッサ(DSP)、またはこれらの任意の組合せを含むタイプであり得るが、これらに限定されない。プロセッサ(1010)は、レベル1キャッシュ(1011)およびレベル2キャッシュ(1012)などの1つ以上のレベルのキャッシュと、プロセッサコア(1013)と、レジスタ(1014)とを含み得る。プロセッサコア(1013)は、算術論理演算ユニット(ALU)、浮動小数点ユニット(FPU)、デジタル信号処理コア(DSPコア)またはこれらの任意の組合せを含み得る。また、メモリ制御部(1016)は、プロセッサ(1010)と共に使用され得る、または、一部の実施において、メモリ制御部(1015)は、プロセッサ(1010)の内蔵部品であり得る。
所望の構成に応じて、システムメモリ(1020)は、揮発性メモリ(RAMなど)、不揮発性メモリ(ROM、フラッシュメモリなど)、またはこれらの任意の組み合わせを含む任意のタイプであり得るが、これらに限定されない。システムメモリ(1020)は、通常、オペレーティングシステム(1021)と、1つ以上のアプリケーション(1022)と、プログラムデータ(1024)とを含む。アプリケーション(1022)は、ユーザが取る可能性の高いアクションに関連付けられた注釈のみがユーザに対して示されるように電子メール注釈を二重フィルタリングするシステムを含み得る。プログラムデータ(1024)は命令を記憶し、この命令が1つ以上の処理装置によって実行されると、電子メールテキストからのアクション可能な項目をパースするとともに、これらのアクション可能な項目を、ユーザがアクションを行う可能性の高いもののみを表示するようにフィルタリングするシステムおよび方法を実施する。(1023)。一部の実施形態において、アプリケーション(1022)は、オペレーティングシステム(1021)上でプログラムデータ(1024)と共に動作するように配置され得る。
演算装置(1000)は、追加の特徴または機能ならびに追加のインターフェイスを有し、基本的な構成(1001)と任意の必要な装置およびインターフェイスとの間の通信を容易にし得る。
システムメモリ(1020)は、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリ、もしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、もしくは他の光学記憶部、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置、または、所望の情報を記憶するために使用することができ、演算装置1000によってアクセスすることができる任意の他の媒体を含むが、これらに限定されない。任意のこのようなコンピュータ記憶媒体は、装置(1000)の一部であり得る。
演算装置(1000)は、携帯電話、スマートフォン、パーソナルデータアシスタント(PDA)、パーソナルメディアプレイヤ装置、タブレットコンピュータ(タブレット)、無線ウェブ視聴装置、パーソナルヘッドセット装置、特定用途向け装置、または上記の機能のいずれかを含むハイブリッド装置など、小さいフォームファクタの持ち運び可能(またはモバイル)電子装置の一部として実施され得る。演算装置(1000)は、ラップトップコンピュータおよび非ラップトップコンピューター構成の両方を含むパーソナルコンピュータとしても実施され得る。
上記の詳細な説明では、ブロック図、フローチャート、および/または例を用いて装置および/または処理の様々な実施形態について述べた。このようなブロック図、フローチャート、および/または例が1つ以上の機能および/または動作を含む限りにおいては、当業者は、このようなブロック図、フローチャート、または例における各機能および/または動作が、広い範囲のハードウェア、ソフトウェア、ファームウェア、または実質的にこれらの任意の組み合わせによって、個別および/または集合的に実施され得ることを理解する。一実施形態において、ここに記載される主題のいくつかの部分は、特定用途向けIC(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DPS)、または他の統合された形態を用いて実施され得る。しかしながら、当業者は、ここに開示される実施形態の一部の局面が、全体的もしくは部分的に、1つ以上のコンピュータ上で実行される1つ以上のコンピュータプログラムとして(たとえば、1つ以上のコンピュータシステム上で実行される1つ以上のプログラムとして)、1つ以上のプロセッサ上で実行される1つ以上のプログラムとして(たとえば、1つ以上のマイクロプロセッサ上で実行される1つ以上のプログラムとして)、ファームウェアとして、または実質的にこれらの任意の組み合わせとして、集積回路において等しく実施され得ることを理解するとともに、回路を設計すること、ならびに/またはソフトウェアおよび/もしくはファームウェアのためのコードを書くことは、この開示に鑑みて当業者の技術の範囲内となり得ることを理解する。加えて、当業者は、ここに記載の主題の機構が様々な形態のプログラム製品として配布することが可能であること、およびここに記載の主題の例示的な実施形態が配布を実際に行う際に非一時的信号担持媒体の特定のタイプに関係なく適用され得ることを理解する。非一時的信号担持媒体の例としては、フロッピー(登録商標)ディスク、ハードディスクドライブ、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、デジタルテープ、コンピュータメモリなどの記録可能型媒体、ならびにデジタルおよび/もしくはアナログ通信媒体などの送信型媒体(たとえば、光ファイバケーブル、導波管、有線通信リンク、無線通信リンクなど)が含まれるが、これらに限定されない。
ここでの実質的に複数形および/または単数形の用語の使用に関し、当業者は、文脈および/または用途に適するように、複数形から単数形、および/または単数形から複数形へと解釈を変更し得る。様々な単数形/複数形の置き換えが明瞭化のためにここに明示的に述べられ得る。
したがって、主題の特定の実施形態が記載された。他の実施形態は、以下の請求項の範囲内にある。一部の場合において、請求項に規定される動作は、異なる順序で行われ得て、それでもなお所望の結果が実現される。加えて、添付の図面に示される処理は、所望の結果を実現するために必ずしも示される特定の順序、または連続的な順序を必要とするものではない。特定の実施において、多重タスク処理および並列処理が有利な場合もある。

Claims (14)

  1. ソースコードをモデル化する方法であって、
    ソース位置を有さないコードセグメントを含むソースコードを受け取るステップ(901)と、
    受け取ったソースコードをインデックス化するステップ(903)と、
    前記インデックス化ソースコードから、コード要素を表わす複数のノードと要素間の関係についての複数のエッジとを含むデータモデルを作成するステップ(905)と、
    各ノードと関連付けられるソース位置を判定するステップ(907)と、
    前記コードセグメントの1つを非表示もしくは黙示コードセグメントとして認識することに応答して、前記コードセグメントについてのフィグメント表現を作成するステップ(909)と、
    前記作成されたフィグメントを前記コードセグメントのノードと関連付けられた前記ソース位置として割り当てるステップ(909)とを備える、方法。
  2. フィグメントノードは、前記データモデルにおいて前記ノードを他のノードから区別するために、特殊な注釈付けがなされる、請求項1に記載の方法。
  3. 前記データモデルをユーザに対して提供するステップをさらに備える、請求項1に記載の方法。
  4. 前記データモデルは、API、ユーザインターフェイス、および/またはコマンドラインコードを介してユーザに対して提供される、請求項3に記載の方法。
  5. 前記フィグメント表現の内容は有効なコードシンタックスである、請求項1に記載の方法。
  6. 前記フィグメント表現の内容は、コード挙動をモデル化するが、有効なコードシンタックスを表わさない、請求項1に記載の方法。
  7. 前記非表示もしくは黙示コードセグメントを使用する前記ソースコードについての前記ノードと前記作成されたフィグメントを表わすノードとの間にエッジをさらに備える、請求項1に記載の方法。
  8. ソースコードをモデル化するシステムであって、
    1つ以上の処理装置と、
    命令を記憶する1つ以上の記憶装置とを備え、前記命令が前記1つ以上の処理装置によって実行されると、前記1つ以上の処理装置は、
    ソース位置を有さないコードセグメントを含むソースコードを受け取り(901)、
    前記受け取ったソースコードをインデックス化し(903)、
    前記インデックス化ソースコードから、コード要素を表わす複数のノードと要素間の関係についての複数のエッジとを含むデータモデルを作成し(905)、
    各ノードと関連付けられる前記ソース位置を判定し(907)、
    前記コードセグメントの1つを非表示もしくは黙示コードセグメントとして認識することに応答して、前記コードセグメントについてのフィグメント表現を作成し(909)、
    前記作成されたフィグメントを、前記コードセグメントのノードと関連付けられた前記ソース位置として割り当てる(909)、システム。
  9. フィグメントノードは、前記データモデルにおいて前記ノードを他のノードから区別するために、特殊な注釈付けがなされる、請求項8に記載のシステム。
  10. 前記データモデルをユーザに対して提供することをさらに備える、請求項8に記載のシステム。
  11. 前記データモデルは、API、ユーザインターフェイス、および/またはコマンドラインコードを介してユーザに対して提供される、請求項8に記載のシステム。
  12. 前記フィグメント表現の内容は有効なコードシンタックスである、請求項8に記載のシステム。
  13. 前記フィグメント表現の内容は、コード挙動をモデル化するが、有効なコードシンタックスを表わさない、請求項8に記載のシステム。
  14. 前記非表示もしくは黙示コードセグメントを使用する前記ソースコードのための前記ノードと前記作成されたフィグメントを表わすノードとの間にエッジをさらに備える、請求項8に記載のシステム。
JP2015556990A 2013-02-06 2014-02-04 ソース位置を欠くコードセグメントを有するソースコードをモデル化する方法 Active JP5974191B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/760,641 2013-02-06
US13/760,641 US9116780B2 (en) 2013-02-06 2013-02-06 Method for modeling source code having code segments that lack source location
PCT/US2014/014591 WO2014123856A1 (en) 2013-02-06 2014-02-04 A method for modeling source code having code segments that lack source location

Publications (2)

Publication Number Publication Date
JP2016509737A true JP2016509737A (ja) 2016-03-31
JP5974191B2 JP5974191B2 (ja) 2016-08-23

Family

ID=50231507

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015556990A Active JP5974191B2 (ja) 2013-02-06 2014-02-04 ソース位置を欠くコードセグメントを有するソースコードをモデル化する方法

Country Status (9)

Country Link
US (2) US9116780B2 (ja)
EP (1) EP2954408A1 (ja)
JP (1) JP5974191B2 (ja)
KR (1) KR101597599B1 (ja)
CN (2) CN107273109B (ja)
AU (1) AU2014215529B2 (ja)
BR (1) BR112015018808A8 (ja)
DE (1) DE202014010926U1 (ja)
WO (1) WO2014123856A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10901804B2 (en) 2017-12-15 2021-01-26 Fujitsu Limited Apparatus and method to select services for executing a user program based on a code pattern included therein

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2504122A (en) * 2012-07-19 2014-01-22 Ibm Locating software units of a software module to facilitate software refactoring
US9116780B2 (en) * 2013-02-06 2015-08-25 Google Inc. Method for modeling source code having code segments that lack source location
US9753960B1 (en) * 2013-03-20 2017-09-05 Amdocs Software Systems Limited System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria
US9952843B2 (en) * 2014-05-15 2018-04-24 Nvidia Corporation Partial program specialization at runtime
CN107015905A (zh) * 2016-06-02 2017-08-04 阿里巴巴集团控股有限公司 查询源代码的方法和装置
US10628959B2 (en) * 2017-05-03 2020-04-21 International Business Machines Corporation Location determination using street view images
US10623444B2 (en) * 2017-07-17 2020-04-14 General Electric Company Apparatus and method for analysis of binary targets to generate security policy
CN113704384A (zh) * 2021-08-27 2021-11-26 挂号网(杭州)科技有限公司 语音识别生成代码的方法及装置、电子设备、存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03240128A (ja) * 1990-02-17 1991-10-25 Mitsubishi Electric Corp モジュール構成図自動生成システム
JP2004530236A (ja) * 2001-06-15 2004-09-30 ベリシティ リミテッド 検証言語の合成
JP2011113147A (ja) * 2009-11-24 2011-06-09 Nomura Research Institute Ltd ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03113571A (ja) * 1989-09-27 1991-05-14 Nippon Telegr & Teleph Corp <Ntt> パターン認識方法
US5345380A (en) * 1990-12-18 1994-09-06 Bell Communications Research, Inc. System and processes specifying customized customer telecommunication services using a graphical interface
US5596703A (en) * 1993-10-22 1997-01-21 Lucent Technologies Inc. Graphical display of relationships
WO2000022517A1 (en) * 1998-10-13 2000-04-20 Codagen Technologies Corp. Component-based source code generator
GB2360370B (en) * 2000-03-14 2002-04-24 Inventec Corp Software driver installation method
US8015554B2 (en) * 2006-03-24 2011-09-06 International Business Machines Corporation Source-to-source transformation for language dialects
KR20090056525A (ko) * 2007-11-30 2009-06-03 인하대학교 산학협력단 객체 분할을 이용한 객체지향프로그램의 동적 분할시스템및 그 방법
US8762962B2 (en) * 2008-06-16 2014-06-24 Beek Fund B.V. L.L.C. Methods and apparatus for automatic translation of a computer program language code
GB0907171D0 (en) * 2009-04-27 2009-06-10 Springsource Ltd Method and apparatus for automatically generating source code files in a storage unit
CN102110048B (zh) * 2009-12-28 2014-07-09 国际商业机器公司 用于基于框架的应用程序的回归测试选择方法和装置
CN101872313B (zh) * 2010-05-18 2012-12-12 重庆大学 开发功能可重组智能控件化虚拟仪器的方法
US20110302563A1 (en) * 2010-06-08 2011-12-08 Avaya Inc. Program structure recovery using multiple languages
WO2012057170A1 (ja) 2010-10-27 2012-05-03 株式会社日立製作所 ソースコード変換方法およびソースコード変換プログラム
CN102156640A (zh) * 2011-04-19 2011-08-17 山东浪潮金融信息系统有限公司 一种数据操作代码生成方法
US8516443B2 (en) * 2011-05-26 2013-08-20 Oracle International Corporation Context-sensitive analysis framework using value flows
US8695021B2 (en) * 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US20140214731A1 (en) * 2012-11-13 2014-07-31 MNB Technologies, Inc. Method and System for Automated Computer Program Generation
US9659085B2 (en) * 2012-12-28 2017-05-23 Microsoft Technology Licensing, Llc Detecting anomalies in behavioral network with contextual side information
US9116780B2 (en) * 2013-02-06 2015-08-25 Google Inc. Method for modeling source code having code segments that lack source location
CN110795080A (zh) * 2019-10-21 2020-02-14 山东舜知信息科技有限公司 一种基于数据库注释的代码自动生成系统及构建方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03240128A (ja) * 1990-02-17 1991-10-25 Mitsubishi Electric Corp モジュール構成図自動生成システム
JP2004530236A (ja) * 2001-06-15 2004-09-30 ベリシティ リミテッド 検証言語の合成
JP2011113147A (ja) * 2009-11-24 2011-06-09 Nomura Research Institute Ltd ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6016000657; 今関雄人、高田眞吾: '"ソフトウェアの動的モデルに着目したラウンドトリップエンジニアリングの支援"' 情報処理学会研究報告 Vol.2007,No.97, 20070927, pp.47-54(2007-SE-157(7)), 社団法人情報処理学会 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10901804B2 (en) 2017-12-15 2021-01-26 Fujitsu Limited Apparatus and method to select services for executing a user program based on a code pattern included therein

Also Published As

Publication number Publication date
BR112015018808A8 (pt) 2018-01-02
US20140223415A1 (en) 2014-08-07
JP5974191B2 (ja) 2016-08-23
AU2014215529B2 (en) 2015-12-17
CN107273109B (zh) 2020-11-10
AU2014215529A1 (en) 2015-08-27
KR101597599B1 (ko) 2016-02-25
BR112015018808A2 (pt) 2017-07-18
DE202014010926U1 (de) 2017-01-18
WO2014123856A1 (en) 2014-08-14
CN104969188A (zh) 2015-10-07
US20150324194A1 (en) 2015-11-12
US9116780B2 (en) 2015-08-25
CN107273109A (zh) 2017-10-20
CN104969188B (zh) 2017-05-17
KR20150106458A (ko) 2015-09-21
EP2954408A1 (en) 2015-12-16

Similar Documents

Publication Publication Date Title
JP5974191B2 (ja) ソース位置を欠くコードセグメントを有するソースコードをモデル化する方法
US9411556B1 (en) Template dependency inlining
JP6563381B2 (ja) 再計算ユーザインタフェースにおける変換の編さん
CN108139891B (zh) 用于生成建议以纠正未定义标记错误的方法和系统
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
US20140306964A1 (en) Incremental compiling of a declarative program
TWI556170B (zh) 將作業系統之原始應用程式介面投射至其它程式語言(二)
CN103718155A (zh) 运行时系统
US20140310681A1 (en) Assisted creation of control event
Boshernitsan Harmonia: A flexible framework for constructing interactive language-based programming tools
US20160062748A1 (en) Embedded domain specific languages as first class code artifacts
CN110221825A (zh) 一种在计算机上实现母语编程的方法
JP5600301B2 (ja) システム表現およびハンドリング技術
Stoeckle et al. A framework for visual notation exchange
Juhár et al. A review of source code projections in integrated development environments
Gill Building Web Applications with C# and. NET: A Complete Reference
Mohamed Python for Deep Learning: A General Introduction
Gupta Demography growth in China
Jackson II Peephole pretty printing
Huu-Duc Type-directed Compilation of ML Supporting Interoperable Memory Management System

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160418

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160517

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160615

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160715

R150 Certificate of patent or registration of utility model

Ref document number: 5974191

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250