JP5147728B2 - 質的に注釈を付けられた注釈付きコード - Google Patents

質的に注釈を付けられた注釈付きコード Download PDF

Info

Publication number
JP5147728B2
JP5147728B2 JP2008551273A JP2008551273A JP5147728B2 JP 5147728 B2 JP5147728 B2 JP 5147728B2 JP 2008551273 A JP2008551273 A JP 2008551273A JP 2008551273 A JP2008551273 A JP 2008551273A JP 5147728 B2 JP5147728 B2 JP 5147728B2
Authority
JP
Japan
Prior art keywords
code
persona
guidance
classification
module
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.)
Expired - Fee Related
Application number
JP2008551273A
Other languages
English (en)
Other versions
JP2009524856A (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.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009524856A publication Critical patent/JP2009524856A/ja
Application granted granted Critical
Publication of JP5147728B2 publication Critical patent/JP5147728B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

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)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Adjustment And Processing Of Grains (AREA)
  • Endoscopes (AREA)
  • User Interface Of Digital Computer (AREA)

Description

アプリケーション、プログラム、関数、およびプログラム可能な実行可能コードのその他の集合体は通常、サードパーティ(つまり「カスタマ」)の使用のために記述される。したがって、効果的なコードは、サードパーティの使用のシナリオが実現可能にされ、サードパーティの期待に応えるような方法で記述される。
アプリケーション、プログラム、関数、およびプログラム可能な実行可能コードのその他の集合体はモジュール化され、少なくとも1つのそのようなコードのモジュールに関連付けられているデータには、モジュールの使用に関する質的なガイダンスを提供するように注釈を付けることができる。
注釈付きコードを生成し、注釈を使用して、コードの使用法に関するガイダンスを提供するためのツール、システム、および方法が、本明細書において説明される。さらに、コードの少なくとも一部に注釈を付けることおよび注釈を使用することに関する説明は、一部のコードの意図される用途をカスタマに知らせるために使用されうるツール、システム、プロセス、命令、技術、およびルーチンに関連する場合もある。つまり、例えばコードの各々の部分の機能的意図などを示すペルソナ(persona)または分類を用いてコードの少なくとも一部に注釈を付けることによって、カスタマは、容易には破壊またはクラッシュしない、高い効率のアプリケーション、プログラム、関数、またはプログラム可能な実行可能コードのその他の集合体を記述する資格を与えられうる。さらになお、そのようなツール、システム、およびプロセスは、ネットワーク環境において1つまたは複数のデバイス、またはノードで実施されうる。
本明細書において説明される「モジュール」とは、共通の物理および/または論理リソースを利用することができる、メソッド、クラス、DLL(ダイナミックリンクライブラリ)、フレームワークなどのような個別のエンティティを示すことができる。
本明細書において説明される「集合体」とは、コードの配置の単位を示すことができる。
図1は、注釈付きコードを生成し、注釈を活用して、コードの使用法に関するガイダンスを提供するために例示の技術が実施されうるネットワーク環境の例100を示す。しかし、そのような例示の技術は、ネットワーク環境に限定されない。そのような技術は、本明細書に説明されるように、質的に注釈を付けられた注釈付きコード120に関連付けられているツール、方法(例えば技法)、およびシステムを含むことができるが、これらに限定されることはない。図1において、クライアント装置105、サーバ装置110、および「その他の」装置115は、ネットワーク125を介して相互に通信可能に結合されうる。さらに、クライアント装置105、サーバ装置110、および「その他の」装置115のうちの少なくとも1つは、前述の技術を実施することが可能でありうる。
クライアント装置105は、質的に注釈を付けられた注釈付きコード120の生成および使用のうちの少なくとも1つを行うために例示の技術を実施することができるデスクトップパーソナルコンピュータ(PC)、ワークステーション、メインフレームコンピュータ、インターネットアプライアンス、セットトップボックス、またはゲーム用コンソールを含む様々な既知のコンピューティング装置のうちの少なくとも1つであってもよい。クライアント装置105は、さらに、携帯(つまりセル式)電話、携帯情報端末(PDA)、ラップトップコンピュータなどを含む、有線および/または無線リンクによってネットワーク125に関連付けることができる少なくとも1つの装置であってもよい。さらになお、クライアント装置105は、それらの様々な数および/または組合せの前述のクライアント装置であってもよい。「その他の」装置115もまた、クライアント装置105の上記の例のいずれかによって具現することができる。
サーバ装置110は、質的に注釈を付けられた注釈付きコード120の生成および使用のうちの少なくとも1つを行うための少なくとも1つの実施態様により、様々なデータおよび/または機能のいずれかをクライアント装置105または「その他の」装置115に提供することができる任意の装置であってもよい。データは、公開されるか、または代替として、例えば、特定のユーザのみに限定されるか、あるいは適切なサブスクリプション料またはライセンス料が支払われる場合に限定されるなどのように、限定されてもよい。サーバ装置110は、ネットワークサーバ、アプリケーションサーバ、ブレードサーバ、またはそれらの任意の組合せのうちの少なくとも1つにすることができる。通常、サーバ装置110は、コンテンツのソースとなりうる任意の装置であってもよく、クライアント装置105は、ネットワーク125経由またはオフラインの方法でそのようなコンテンツを受信することができる任意の装置であってもよい。しかし、本明細書において説明される例示の実施態様によれば、クライアント装置105およびサーバ装置110は、ネットワーク環境100において、交互に送信側ノードまたは受信側ノードになることができる。「その他の」装置115もまた、サーバ装置110の上記の例のいずれかによって具現することができる。
「その他の」装置115は、本明細書に説明される例示の技術のうちの1つまたは複数に従って、質的に注釈を付けられた注釈付きコード120を開発および/または活用することができる任意のさらなる装置であってもよい。つまり、「その他の」装置115は、例えばコードの各々の部分の機能的意図などを示すペルソナまたは分類を用いてコードの少なくとも一部に注釈を付けること、および/または割り当てられたペルソナに基づいてコードの部分の使用法に関するガイダンスをカスタマに提供することができる装置であってもよい。したがって、「その他の」装置115は、オペレーティングシステム、インタープリタ、コンバータ、コンパイラ、または実施されるランタイム実行環境のうちの少なくとも1つを有するコンピューティングまたは処理装置であってもよい。これらの例は、いかなる方法においても限定的であることを意図してはおらず、そのため限定的に解釈されるべきではない。
ネットワーク125は、有線および/または無線ネットワークを含むことができる、様々な標準的なネットワークトポロジおよびタイプのいずれかであってもよい。ネットワーク125はさらに、公開および/または独自開発のプロトコルを含む、様々な標準的なネットワークプロトコルのいずれかを活用することができる。ネットワーク125は、例えば、インターネット、および802.11システムのような1つまたは複数のローカルエリアネットワーク(個別に「LAN」とも呼ばれる)の少なくとも一部、またはさらに大規模なワイドエリアネットワーク(つまり「WAN」)、あるいはブルートゥースのようなパーソナルエリアネットワーク(つまりPAN)を含むことができる。
装置105、110、および115のうちの少なくとも1つにおけるコンピュータアーキテクチャは通常、ハードウェアとソフトウェアに関してコンピュータプラットフォームを定義してきた。コンピューティング装置のソフトウェアは、機能に基づいて、ハードウェア抽象化層(あるいは「HAL」と呼ばれる)、オペレーティングシステム(あるいは「OS」と呼ばれる)、およびアプリケーションを含むことができるグループに分類されてきた。
ランタイム実行環境は、OSとアプリケーション、プログラム、関数、またはコードのその他の集合体の間に常駐することができる。ランタイム実行環境は、アプリケーション、プログラム、関数、またはコードのその他の集合体が処理装置105、110、および115のうちの任意の1つまたは複数上で特定のタスクを実行することができるスペースとしての役割を果たすことができる。詳細には、ランタイム実行環境は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、およびモバイル処理/通信装置を含む範囲の増大する処理装置105、110、および105上で、そのような装置で稼働するアプリケーションに抽象化の層とサービスを提供することにより、およびメモリ管理とその構成を含む機能をアプリケーションにさらに提供することにより、アプリケーション、プログラム、関数、またはコードのその他の集合体の実行の信頼性を高めることができる。
ランタイム実行環境は、プログラミングおよび実行プラットフォームのうちの少なくとも1つとしての役割を果たすことができる。プログラミングプラットフォームとして、ランタイム実行環境は、複数のコンピューティング言語の1つで記述されうるターゲットのアプリケーション、プログラム、関数、またはコードのその他の集合体のうちの1つまたは複数を、中間言語(これ以降「IL」と呼ぶ)またはバイトコードにコンパイルすることができる。ILは通常プラットフォームから独立しており、中央演算処理装置(これ以降「CPU」と呼ぶ)がILを実行する。実際、ILは、多くのCPU機械言語よりも高レベルの言語である。
実行プラットフォームとして、ランタイム実行環境は、コンパイル済みILをネイティブの機械命令に解釈することができる。ランタイム実行環境は、インタープリタまたはコンパイラ(例えば、「ジャストインタイム(Just−In−Time)」あるいは「JIT」コンパイラ)を活用して、そのような命令を実行することができる。いずれにしても、次いで、ネイティブの機械命令は、CPUによって直接実行されうる。ILはCPUに依存しないので、CPUプラットフォームで稼働するOSが適切なランタイム実行環境をホスティングする限りILはあらゆるCPUプラットフォーム上で実行することができる。
代替として、アプリケーション、プログラム、関数、またはコードのその他の集合体のうちの少なくとも一部は、プリコンパイルされ、ランタイム実行環境でネイティブイメージファイルとしてインストールされうるので、JITコンパイルに必要とされるCPUの消費が回避される。事実上、プリコンパイルされた部分は、ネイティブプラットフォームの実行形式ではなく、IL形式(例えば、アセンブリ、メソッド、またはタイプ)で分散されるソフトウェアコンポーネントである。そのようなプリコンパイル済みILのソースは、非管理対象の実行環境、あるいは装置105、110、および115のうちの同じかまたは別個の装置でのランタイム実行環境の別個の実施のいずれかで配置されうる。ソースは、プリコンパイル済みILが対応する、アプリケーション、プログラム、メソッド、関数、またはプログラム可能な実行可能コードのその他の集合体のインストール時間中またはインストール前にプリコンパイル済みILを配置することができる。
いずれにしても、質的に注釈を付けられた注釈付きコード120を生成および/または活用するための技術が実施されうるランタイム環境の例は、Visual Basicランタイム環境、例えばJava(登録商標)ルーチンを実行するために使用されるJava(登録商標)Virtual Machineランタイム環境、または例えばMicrosoft .NET(商標)アプリケーションを呼び出しルーチンの実行前に機械言語にコンパイルするCommon Language Runtime(CLR)を含む。しかし、ランタイム環境のこのリストは、例を示すに過ぎない。本明細書において説明される例示の技術は、これらの管理対象の実行環境のみに限定されない。詳細には、1つまたは複数の例がテスト環境および/または非管理対象の実行環境内で実施されうるので、例示の実施態様は管理対象の実行環境にのみ限定されることはない。
ILにコンパイルされたアプリケーション、プログラム、関数、およびコードのその他の集合体は、「管理対象コード」と呼ぶことができ、そのためランタイム実行環境は代替として「管理対象の実行環境」と呼ばれることもある。実行するためにランタイム実行環境を使用しないコードは、ネイティブコードのアプリケーションと呼ばれることもあることに留意されたい。
図2は、質的に注釈を付けられた注釈付きコード120(図1を参照)を開発および活用するための技術が実施されうるランタイム実行環境200の例を示す。
少なくとも1つの例示の実施態様によれば、ランタイム実行環境200は、コンピューティング装置プラットフォームの管理対象コードの実行を容易にすることができる。管理対象コードは、アプリケーション開発技術のコアセットの一部であると考えることができ、さらに、ランタイム実行環境200で実行してコンピューティング装置プラットフォームに対応するサービスを提供するためにコンパイルされるかまたはロードされる、アプリケーション、プログラム、関数、またはプログラム可能および実行可能コードのその他の集合体と見なすことができる。加えて、ランタイム実行環境200は、管理対象コードを解釈レベルにおいて、プロキシ化されてからプロセッサによって実行されうる命令に変換することができる。代替として、管理対象コードは、インタープリタまたはコンパイラを介して、あるいはネイティブイメージとしてインストール時に実行するよう設計されたコンパイラの形態で実行されてもよい。ランタイム実行環境200のフレームワークはまた、管理対象アプリケーションのソフトウェアビルディングブロックと見なすことができるクラスライブラリも提供する。
ランタイム実行環境200は、他の場合であればカーネルに期待されうる少なくとも部分的な機能を提供することができるが、これは装置105、110、および115(図1を参照)のうちの特定の1つのリソース制約に応じてコンピューティング装置プラットフォームになくても、またはあってもよい。したがって、ランタイム実行環境200の少なくとも1つの例は、入出力(これ以降「I/O」と呼ぶ)ルーチン管理、コンパイル、メモリ管理、およびサービスルーチン管理を実施することができる。したがって、ランタイム実行環境200は、I/Oコンポーネント205、コンパイラ210、少なくとも1つのメモリ管理コンポーネント215、サービスルーチン管理コンポーネント220、および実行コンポーネント225を含むことができる。以下でさらに詳細に説明されるこれらのコンポーネントは例として提供されるが、これらはランタイム実行環境200の特定の実施態様に限定することを意図されるものではなく、そのような推定が行われるべきではない。したがって、コンポーネントは、その様々な組合せおよび構成によりランタイム実行環境200の例において実施されうる。
ランタイム実行環境200のI/Oコンポーネント205は、同期アクセスまたは非同期アクセスのうちの少なくとも1つを、コンピューティング装置プラットフォームに関連付けられている物理リソース(例えば、プロセッサおよび周辺機器)と論理リソース(例えば、ドライバ、または特定の方法で区分された物理リソース)に提供することができる。詳細には、I/Oコンポーネント205は、ランタイム実行環境200に、堅固なシステムスループットをもたらし、さらに、I/O要求が送出されるアプリケーション、プログラム、関数、またはプログラム可能および実行可能コードのその他の集合体のパフォーマンスを合理化することができる。
コンパイラ210は、ランタイム実行環境200での実行のために、コンパイル済みILをネイティブの機械命令に解釈することができるランタイム実行環境200内のコンポーネントを示すことができる。さらに、質的に注釈を付けられた注釈付きコード120を開発および活用するための技術の少なくとも1つの代替実施態様によれば、コンパイラ210は、プロファイリング/記録の目的で、様々な目的のために、アプリケーション、プログラム、関数、またはプログラム可能および実行可能コードのその他の集合体に関連付けられたコードのモジュールの動作を動的に装備することができる。コードのモジュールは、ランタイム実行環境200にロードされても、されなくてもよい。コードのモジュールがランタイム実行環境200にロードされる場合、プロファイリングは、記録することを含むか、またはそれ以外の場合コードの各々のモジュールとランタイム実行環境200の1つまたは複数のコンポーネントとの間の対話を追跡することを含むことができる。コードの各々のモジュールとランタイム実行環境200の特定のコンポーネントとの間のそのような対話は、データ、パラメータ、および状態の受信と送信を含む。プロファイリングは、コードモジュールの実行可能部分に作用するかまたは影響することなく実行され、コンパイル時、初期ランタイム時、または実行パスの実行可能部分の実行に関連するその後の任意の時間に実行されうる。
ローダ215は、必要に応じてアセンブリを見つけて読み込むために呼び出されうるアセンブリマネージャを示すことができる。ローダ325は、実行環境200に配置されうるが、非管理対象実行環境(すなわちOS)の少なくとも1つの実施態様はその中にローダ325を含むことができる。ローダ215は、ランタイム実行環境200にロードするために、開発中またはインストール時に、プリコンパイル済みILを収集することができる。したがって、ランタイム実行環境200の少なくとも1つの代替実施態様によれば、ローダ215はランタイム実行環境200へのプリコンパイル済みILのエントリポイントとしての役割を効果的に果たすことができる。
メモリ管理コンポーネント220は、ガーベッジコレクションを実施する「ガーベッジコレクタ」と呼ばれることができる。ガーベッジコレクションは、メモリヒープのスイープまたはスキャン時に、アプリケーション、プログラム、関数、またはコードのその他の集合体によってオブジェクトがもはや使用されないと判別される場合、オブジェクトが自動的に解放される(すなわち、割り振り解除される)管理対象コード実行環境の堅固な特徴と見なすことができる。さらに、メモリ管理コンポーネント220によって実施されるさらなる機能は、コンピューティング装置プラットフォームで稼働するタスク間で有限揮発性RAM(すなわち、メモリヒープ)ストレージの1つまたは複数の連続ブロックもしくはメモリの連続ブロックのセットを管理すること、コンピューティング装置プラットフォームで稼働する少なくとも1つのアプリケーション、プログラム、関数、またはプログラム可能および実行可能コードのその他の集合体にメモリを割り振ること、アプリケーション、プログラム、関数、またはコードのその他の集合体の少なくとも1つによる要求に応じてメモリの少なくとも一部を解放すること、およびアプリケーション、プログラム、関数、またはコードのその他の集合体のいずれかが、別のアプリケーション、プログラム、関数、またはコードのその他の集合体のいずれかに割り振られているメモリスペースに侵入するようにアクセスすることを防ぐことを含むことができる。
サービスルーチンマネージャ225は、コンピューティング装置プラットフォームに関連付けられている物理および論理リソースのサービス機能を提供するために、アプリケーションサポート層の少なくとも一部として含むことができる。質的に注釈を付けられた注釈付きコード120を開発および/または活用するための例示の技術(例えば、ツール、方法、およびシステム)は、サービスルーチンマネージャ225によって管理されうる。つまり、そのような技術は、そのような技術の様々な代替実施態様に従って、コンパイラ210(上記で参照)、サービスルーチンマネージャ225、またはランタイム実行環境200の一部の他のコンポーネントによって単独で、または組み合わせて実施されうる。サービスルーチンマネージャ225によるそのような寄与は、コードのモジュールの実行可能部分に作用するかまたは影響することなく実行され、コンパイル時、初期ランタイム時、またはコードモジュールの実行可能部分の実行に関連するその後の任意の時間に行われうる。
実行コンポーネント230は、コンピューティング装置プラットフォームの管理対象コードの実行を可能にすることができる。詳細には、質的に注釈を付けられた注釈付きコード120を開発および/または活用するための技術の実施態様に関して、実行コンポーネント230は、コンパイル時、初期ランタイム、またはその後コードモジュールの実行可能部分の実行中の任意の時間に、1つまたは複数のコードモジュールの注釈を注釈付けおよび/または解釈するために1つまたは複数のツール、システム、およびプロセスを実施することができるランタイム実行環境200内の模範的なコンポーネントとしての役割を果たすことができる。
図3は、質的に注釈を付けられた注釈付きコード120(図1を参照)に関連付けられている1つまたは複数の例示の技術を実施するデータフローの例300を示す。詳細には、質的に注釈を付けられた注釈付きコード120は、特定のコードのモジュールの少なくとも1つの質的パフォーマンス特性に関連のある典型的ペルソナまたは分類を割り当てられているコードである。そのような質的パフォーマンス特性は、特定のコードのモジュールの機能的な意図を含むことができる。「機能的な意図」を指示することにより、ペルソナまたは分類は、その正確な機能を説明するのではなく、特定のコードのモジュールが使用に適しているという1つまたは複数のコンテキストを説明することができる。いずれにせよ、そのようなパフォーマンス特性の参照は、非限定的な例としてのみ提供される。質的なセキュリティ特性はまた、ペルソナまたは分類が各々のコードのモジュールに割り当てられる少なくとも部分的な基盤としての役割を果たすことができる。
さらに、質的に注釈を付けられた注釈付きコード120は、ランタイム実行環境200によってコンパイルされるか、またはランタイム実行環境200に対しプリコンパイルされる管理対象コードであってもよい。いずれにせよ、コードの各々のモジュールの潜在的なパフォーマンス関連の障害は、たとえ明確に予期されないとしても、予測することができるので、望ましい程度まで回避することができる。
そのために、質的に注釈を付けられた注釈付きコード120は、堅固である汎用のガイダンスを提供することができる。つまり、コードの各々のモジュールに対応する厳密な規則がコードの改訂に沿って変更される必要がある量的ガイダンスとは対照的に質的ガイダンスを提供することにより、質的に注釈を付けられた注釈付きコード120に対応するペルソナまたは分類は、コードに対する変更を許容することができ、そのため抑制的なガイダンスではなく規範的なガイダンスとしての役割を果たす。
さらになお、質的に注釈を付けられた注釈付きコード120の各々のモジュールに割り当てられた各々のペルソナまたは分類によって提供される汎用ガイダンスは、コード120によって呼び出されうる好ましいメソッド、コード120が起動することができる動作、コード120が有することができる依存性を示すことができ、あるいはさらに、例えば循環的複雑度(cyclomatic complexity)のような複雑性パラメータなどに基づいて複雑さの所定の程度さえも示すことができる。もちろん、そのようなガイダンスは、質的に注釈を付けられた注釈付きコード120に割り当てられたペルソナまたは分類によって影響を受ける可能性のある広範なプログラミング要因を示すための例としてのみ提供される。
いずれにしても、以下の説明において、コード注釈ツール315に関連付けられているコンポーネントによって実行される様々な操作が説明される。これらのコンポーネントのうちの特定の1つに関して説明される操作は、コンポーネント自身によって、ツールに関連付けられている他のコンポーネントと組み合わせて、またはランタイム実行環境200(図2を参照)の1つまたは複数のコンポーネントと協働する特定のコンポーネントによって実行されうる。加えて、コード注釈ツール315の各コンポーネントの操作は、単一または複数のプロセッサによって実行することができ、ハードウェア、ファームウェア、またはソフトウェアとして、単一または様々な組合せで実施することができる。
コード注釈ツール315の例示の実施態様は、ランタイム実行環境200のコンポーネントのいずれかとは分離した、オフラインの方法で実施されうる。しかし、コード注釈ツール315の少なくとも1つの実施態様は、コンパイラ210の任意の部分、サービスルーチンマネージャ220、または単一または組合せによるランタイム実行環境200のその他のコンポーネントと合体されうる。そのような実施態様において、コード注釈ツール315は、実行コンポーネント225によって実行されるか、または処理されうる。
モジュール305は、例えばランタイム実行環境200の実行コンポーネント230に従って実行可能なアプリケーション、プログラム、関数、またはその他のコードの集合体に対応する実行可能命令の1つまたは複数のモジュールを示すことができる。詳細には、モジュール305は、メソッド、クラス、DLL(ダイナミックリンクライブラリ)、フレームワークなどのようなエンティティを示すことができる。
コード310は、モジュール305に関連付けられているアプリケーションプログラミングインターフェース(あるいは、これ以降「API」と呼ばれる)を示すことができる。詳細には、API310は、クラスによって公開され、ランタイム実行環境200またはオペレーティングシステムによるプロシージャのパフォーマンスを指示するためにアプリケーション、プログラム、メソッド、関数、またはコードのその他の集合体によって使用される1つまたは複数のメソッドまたはルーチンと見なすことができる。
コード注釈ツール315は、適切なペルソナまたは分類に従ってアプリケーション、プログラム、関数、またはその他のコードの集合体に対応するコードのモジュールの注釈を容易にし、各々のモジュールの機能的意図の少なくとも1つまたは割り当てられたペルソナまたは分類に従ってそのようなモジュールのアクティビティの監視、記録、および/またはプロファイリングを容易にし、コードのモジュールの意図の少なくとも1つまたはコードのモジュールに割り当てられたペルソナまたは分類に従ってコードのモジュールの使用法に関するガイダンスを提供することを可能にすることができる多機能ツールを示すことができる。
コード注釈ツール315内に配置されるか、またはそれ以外の場合は機能的に関連付けられているアナライザ320は、コードのモジュールの機能的意図を含む(ただし、これに限定されない)特徴に基づいて適切な注釈または分類をコードのモジュールと関連付けることができるコンポーネントと見なされうる。アナライザはさらに、アプリケーション、プログラム、関数、またはその他のコードの集合体に対応するコードのモジュールに関連付けられている注釈を読み取ることができ、さらになお、単一で、またはコード注釈ツール315の別のコンポーネントとの組合せにより、そのような注釈の内容をユーザに伝達することができる。
モジュール325は、例えばランタイム実行環境200の実行コンポーネント230に従って実行可能なアプリケーション、プログラム、関数、またはその他のコードの集合体に対応する実行可能命令のモジュールを示すことができる。詳細には、モジュール325は、コード310および関連する注釈330を含む、メソッド、クラス、DLL(ダイナミックリンクライブラリ)、フレームワークなどのようなエンティティを示すことができる。
注釈330は、コード310に関連付けられているテキストファイルを示すことができる。特に、注釈330は、コード注釈ツール315によってコード310に割り当てられているペルソナまたは分類を一覧するテキストファイル(例えば、XML)であってもよいか、あるいは注釈300は、例えば機能特性またはコード310の意図などを明確にするテキストファイルであってもよい。注釈330は、コード310に関連付けられており、そのためモジュール325の一部としてコード310に接続されたランタイム実行環境200に受信され、ランタイム実行環境200によってコンパイルされうる。代替として、注釈330は、コード310に関連付けられているが、プリコンパイルされうるので、コード310とは分離されたランタイム実行環境200に受信されてもよい。例えば、注釈330は、実行可能コード200の開発者または管理者からネットワーク125を介してオンラインでランタイム実行環境200に受信されうるか(図1を参照)、または注釈330は、前述の開発者または管理者から(例えば、移植可能なコンピュータ可読媒体を介して)オフラインの方法でランタイム実行環境200に受信されうる。
前述のように、注釈330は、コード310に割り当てられているペルソナまたは分類を一覧にすることができる。そのようなペルソナまたは分類は、コード310の機能的意図(例えば、API、メソッド、またはルーチン)を示すデータを提供することができる。つまり、データは、コード310の使用が適切となりうる1つまたは複数のコンテキストを示すことができる。さらに、上級コード生成または例外コードプロファイリングのためのコード310の意図される用途をカスタマに質的に知らせるため、アナライザ320によって関連付けられたペルソナまたは分類は通常、分析された特性に関して相互に関連しており、ペルソナまたは分類は通常、信頼できるガイダンスを提供し、さらに例外および/または創造性を許可する近似と見なされる。
コード310に割り当てられたペルソナまたは分類の例は、説明のための例示のみとして、内部ループコード、スループットコード、対話型コード、およびスタートアップコードを含むことができる。そのようなペルソナの名称は、例としてのみ提供される。各々のペルソナまたは分類に対してコードの機能的意図またはその他の機能特性を示す名前を割り当てることが好ましい場合もあるが、ペルソナまたは分類は任意の様々な名前を割り当てられてもよい。
内部ループコードのペルソナは、コード310が、より大きいアルゴリズムの一環として、クライアントアプリケーション、プログラム、関数、またはコードのその他の集合体によってより大きいループで呼び出される可能性が高いことを示すことができる。詳細には、内部ループコード310は、対応するアプリケーション、プログラム、関数、またはコードのその他の集合体に対して「最も内側」になるコードと見なされうる。その例としては、比較関数、ハッシング関数、低レベルフォーマッティング設定関数などを含む。そのようなコードの場合、メモリ割り振りは奨励されない場合もある。内部ループコード330に関連付けられている注釈330は、そのようなコードが、以下に説明される例示のコードペルソナ/分類(例えば、スループット、対話型、スタートアップ)のいずれかを割り当てられるコードによって呼び出されうることを助言することができる。
スループットコードペルソナは、コード310がWebページなどのバッチプロセスまたはサービスプロセスで使用される可能性が高いことを示すことができる。詳細には、スループットコード310は、一時オブジェクトが作成されうるコードと見なされ、そのために一部のメモリ割り振りが許可されうる。そのようなコードは通常、Webページまたはビジネスロジックによって実施され、そのようなコードの意図は、リソース(例えば、メモリ)のコストにかかわらず実行することである。スループットコードのガイダンスの例は、スループットコードが機能的に内部ループコードとの互換性がなく、そのため場合によっては内部ループコードによって呼び出されないということである。したがって、スループットコード310に関連付けられている注釈330は、内部ループペルソナまたは分類を割り当てられているコードを呼び出さないよう助言するか、またはそれを禁じることさえできる。
対話型コードのペルソナは、コード310が、アプリケーション、プログラム、関数、または対話型イベントによって駆動されるコードのその他の集合体の一部によって使用される可能性が高いことを示すことができる。詳細には、対話型コード310は、モードが突然変化することがあるコードと見なされ、そのようなコードの意図は、その実行中に可能な限り少ない資源(例えば、メモリ)を使用することである。対話型コードのガイダンスの例は、対話型コードは内部ループコードを呼び出すことができるということである。したがって、対話型コード310に関連付けられている注釈330は、内部ループペルソナまたは分類を割り当てられているコードを呼び出すことを推奨することができる。さらなる例は、スループットコードを呼び出す対話型コードを含むことができるが、対話型コードは使用されるリソースを節約することを意図されており、スループットコードはリソースのコストにかかわりなく主張することを意図されているため、これはあり得ないシナリオである。したがって、対話型コード310に関連付けられている注釈330はさらに、スループットコードペルソナまたは分類を割り当てられているコードを呼び出すことを妨げることができる。
スタートアップコードのペルソナは、コード310が、対応するアプリケーション、プログラム、関数、またはコードのその他の集合体の起動パスで表示される可能性が高いことを示すことができる。詳細には、スタートアップコード310は、依存性および入出力(IO)に敏感なコードと見なされうる。スタートアップコード310に関連付けられている注釈330は、別のペルソナまたは分類を割り当てられているコードからの呼び出しを妨げるかまたは拒否することができる。
したがって、コード310の呼び出しを含むアプリケーション、プログラム、関数、またはプログラム可能/実行可能コードのその他の集合体をプログラミングする場合、注釈330は、対話型ガイダンス、診断(つまり、プロファイラ)ガイダンス、コード生成ガイダンス、コード保守ガイダンス、および推論ガイダンスを含む(ただし必ずしもこれらに限定されない)ガイダンスをプログラミングカスタマに提供することができる。前述のガイダンスのこれらのカテゴリはすべて、例えばコード310の既知の機能的意図などに基づいてアナライザ320によって実施されうる。ガイダンスのこれらの例示のカテゴリは、以下で説明される。
対話型プログラミングのガイダンスは、例えば別のペルソナまたは分類が割り当てられているAPI、メソッド、またはルーチンであってもなくてもよい、より最近に呼び出されたコード310の実施態様を備えるコード310の機能的互換性を指示することができる。代替として、前述のより最近に呼び出されたコード310の実施態様に関連して、コード310に割り当てられたペルソナまたは分類の潜在的なプログラミング違反を警告するプログラミング規則を提供することができる。
診断(つまり、プロファイラ)ガイダンスは、コード310および/またはコード310に割り当てられているペルソナまたは分類の測定されたプログラミングイベントに関連するレポートを提供することができる。詳細には、コード310および/またはコード310に割り当てられているペルソナまたは分類に関連するプログラミングイベントのレコードに基づいて、診断/プロファイラガイダンスは、コード310の使用法に関する統計的分析および/または勧告を提供することができる。分析および/または勧告は、以前推奨されたガイダンスに対してコード310に関連するプログラミングイベントの測定を含むことさえできる。プログラミングイベントのレコードは、例えばアナライザ320などによって生成され、プログラミングイベントは、コード310が以前呼び出された関数、およびコード310が特定のアプリケーション、プログラム、関数、またはコードのその他の集合体に対して呼び出された回数を含むことができるが、これらに限定されることはない。
コード生成ガイダンスは、コンパイラのプログラミングガイダンスを提供することができる(例えば、コンパイラ210。図2を参照)。例えば、コード生成ガイダンスは、コード310の機能的意図の可能性のある指示を提供することができ、そのためコンパイラは、コンパイルされたコード310の特性を活用するような方法で、コード310をコンパイルすることができる。詳細には、注釈330によって明確にされたコード生成ガイダンスは、対話型コード310の機能的意図が可能な限り少ないリソースを使用することであることを指示することができ、そのためコンパイラは、使用されるスペースを軽減するコンパクトな方法でコード310をコンパイルするよう導かれうる。代替として、コード生成ガイダンスは、内部ループコード310の機能的意図がメモリをそこに割り振らせないことであることを指示することができ、そのためコンパイラは、速度を最適化する方法でコンパイラ305に導かれうる。これらのシナリオは、例としてのみ提供され、いかなる方法においても限定的に解釈されるべきではない。
コード保守ガイダンスは、コード310に割り当てられているペルソナまたは分類の1つまたは複数の論理的根拠を示すプログラミングガイダンスを提供することができる。そのようなガイダンスはさらに、コード310の少なくとも一部が変更されるべきであった場合、コード310に割り当てられうるペルソナまたは分類の説明を行うことができる。したがって、コード保守ガイダンスは、特定のペルソナまたは分類を割り当てられているコードから別のペルソナまたは分類に割り当てられているコードへの移行を、部分的に導くことができる。
推論ガイダンスは、コード注釈ツールが統計分析ツールの一部として使用される場合、コード310の遡及的注釈を提供することができる。つまり、アプリケーション、プログラム、関数、またはすでにコンパイルされているプログラム可能/実行可能コードのその他の集合体について、アナライザ320はコード310のペルソナまたは分類を遡及的に割り当てることができる。したがって、コード310の分析と、コード310を呼び出した関数およびコード310によって呼び出された関数は、カスタマに提供されうる。
図4は、質的に注釈を付けられた注釈付きコード120の少なくとも1つの例示の実施態様を生成して活用するデータフローの例400を示す(図1を参照)。詳細には、データフローの例400は、コードジェネレータまたはコードエンフォーサのいずれかに対して実施されうる。
以下の説明において、様々な操作は、ランタイム実行環境200(図2を参照)またはコード注釈ツール315(図3を参照)に関連付けられているコンポーネントによって実行されるものと説明されるが、図4の参照番号は以前の図面の番号とは異なっていてもよい。これらのコンポーネントのうちの特定の1つに関して説明される操作は、コンポーネント自身によって、ツールに関連付けられている他のコンポーネントと組み合わせて、またはランタイム実行環境200の1つまたは複数のコンポーネントと協働する特定のコンポーネントによって実行されうる。加えて、コード注釈ツール315の各コンポーネントの操作は、単一または複数のプロセッサによって実行することができ、ハードウェア、ファームウェア、またはソフトウェアとして、単一または様々な組合せで実施することができる。
第1の例示のデータフローの実施態様400は、手動または自動コードジェネレータに関連する。
ブロック405は、行われる触媒アクション(catalytic action)、または行われようとしている触媒アクションを示すことができ、これはAPI、メソッド、またはルーチンなどのコードのモジュールに影響を与えることができる。そのような触媒アクションは、別のコードのモジュールによって呼び出されるコードのモジュールを含めることができる。
したがって、データモジュール410は、例えばランタイム実行環境200の実行コンポーネント230に従って実行可能なアプリケーション、プログラム、関数、またはコードのその他の集合体に対応する実行可能命令の1つまたは複数のモジュールを示すことができる。詳細には、データモジュール410は、メソッド、クラス、DLL(ダイナミックリンクライブラリ)、フレームワークなどのようなエンティティを示すことができる。
コード415は、データモジュール410に関連付けられているAPI、メソッド、またはルーチンを示すことができる。詳細には、コード415は、クラスによって公開され、ランタイム実行環境200またはオペレーティングシステムによるプロシージャのパフォーマンスを指示するためにアプリケーション、プログラム、メソッド、関数、またはプログラム可能および実行可能コードのその他の集合体によって使用されうる。
アナライザ435は、コードのモジュールの機能的意図を含む(ただし、これに限定されない)特徴に基づいて適切な注釈または分類をコードのモジュールと関連付けることができるコンポーネントを示すことができる。アナライザ425は、注釈付きコードを開発および/または活用するためのさらに包括的なツールに関連付けられうるか、または、ランタイム実行環境200のコンポーネント(例えば、コンパイラ)としても実装されうる。
いずれにしても、受信コード415を有し、データモジュール410の内部に組み入れられるかまたはデータモジュール410から分離された、アナライザ435は、コード415の機能的意図またはその他の機能特性を判別するためのあらかじめ定められたアルゴリズムを実施して、それによりペルソナまたは分類をコード415と関連付けることができる。コード415のペルソナまたは分類がその機能的意図を基にすることについて、例示としてのみ説明される。
注釈付きガイダンス440は、コード310に関連付けられているテキストファイルを示すことができる。特に、注釈440は、コード注釈ツール315によってコード415に割り当てられているペルソナまたは分類を一覧するテキストファイル(例えば、XML)であってもよい。代替として、注釈付きガイダンス440は、例えば、コード415に関連付けられている規則またはガイダンスを明確にするダイアログボックスまたはドロップダウンメニュー、色分けされたフォント(例えば、許容可能には緑、注意には黄色、禁止には赤など)の形でユーザインターフェースの一部としてカスタマに提示されてもよい。
第2の例示のデータフローの実施態様400はまた、手動または自動コードジェネレータに関連する。
ブロック405は、行われる触媒アクション、または行われようとしている触媒アクションを示すことができ、これはAPI、メソッド、またはルーチンなどのコードのモジュールに影響を与えることができる。そのような触媒アクションは、コンパイルされるか、またはコンパイルされるようサブミットされるコードのモジュールを含むことができる。
データモジュール420は、データモジュール410と同様に、メソッド、クラス、DLL(ダイナミックリンクライブラリ)、フレームワークなどのような実行可能命令の1つまたは複数のモジュールを示すことができる。
コード425は、コード425と同様に、データモジュール420に関連付けられているAPI、メソッド、またはルーチンを示すことができる。
注釈430は、例えば、テキストファイル(XMLなど)の形でコード425に関連付けられ、コード425の機能的意図またはその他の指定された機能特性に基づいてコード425に割り当てられているペルソナまたは分類を一覧にするテキストファイルを示すことができる。詳細には、第2のデータフローの例400によれば、コード425はすでに、本明細書において説明されるように、手動プロセスまたは自動プロセスによって注釈を付けられている。
アナライザ435は、コード425に関連付けられている注釈430を読み取ることができるコンポーネントを示すことができる。したがって、ランタイム実行環境200の一環として、アナライザ435は、注釈430で明確にされた機能的意図と機能的に互換性を備えるためにコード425がコンパイルされるように、コンパイラ210(図2を参照)の注釈付きガイダンス440を提供することができる。
第3の例示のデータフローの実施態様400は、手動または自動コードプロファイラまたは診断ツールに関連する。
ブロック405は、行われる触媒アクション、または行われようとしている触媒アクションを示すことができ、これはAPI、メソッド、またはルーチンなどのコードのモジュールに影響を与えることができる。コードプロファイラのコンテキストにおいて、そのような触媒アクションは、分析あるいは他の調査または研究形態のためにプロファイリングツールにサブミットされる以前コンパイルされたコードを含むことができる。
データモジュール410は、メソッド、クラス、DLL(ダイナミックリンクライブラリ)、フレームワークなどのような実行可能命令の1つまたは複数のモジュールを示すことができる。
コード415は、データモジュール410に関連付けられているAPI、メソッド、またはルーチンを示すことができる。
アナライザ435は、すでにコンパイルされているコード425を読み取ることができ、確立された基準に基づいてコード415の機能的意図または他の指定された機能特性を解読することができるコンポーネントを示すことができる。したがって、アナライザ435はさらに、適切なペルソナまたは分類をコード415に関連付けることができる。
注釈付きガイダンス440は、アナライザ435によってコード415に割り当てられているペルソナまたは分類を明確にするコード415に関連付けられるテキストファイルを示すことができる。加えて、注釈付きガイダンス440は、特定のペルソナまたは分類に対応する規則または他の形態のプログラムガイダンスを明確に示すことができる。注釈付きガイダンス440は、例えば、コード415に関連付けられている規則またはガイダンスを明確にするダイアログボックスまたはドロップダウンメニュー、色分けされたフォント(例えば、許容可能には緑、注意には黄色、禁止には赤など)の形でユーザインターフェースの一部としてカスタマに提示されてもよい。
図1から図4に関連する前述の説明により、ペルソナまたは分類は、管理対象実行環境または非管理対象実行環境において質的なプログラミングガイダンスを提供するために、コードの1つまたは複数のモジュールに割り当てることができる。しかし、本明細書において説明される例示の実施態様は、図1の環境、図2のコンポーネント、図3の実行パス、または図4のプロセスのみに限定されることはない。質的に注釈を付けられた注釈付きコード120(図1を参照)に関連付けられている技術(例えば、ツール、方法、およびシステム)は、図2〜図4を参照して説明されるコンポーネントの様々な組合せにより実施することができる。
さらに、前述の実施例および実施態様のコンピュータ環境は、例えば、1つまたは複数のプロセッサまたは処理装置、システムメモリ、および様々なシステムコンポーネントを結合するシステムバスを有するコンピューティング装置を含むことができる。
コンピューティング装置は、揮発性および不揮発性媒体、取り外し可能および固定式媒体を共に含む、様々なコンピュータ可読媒体を含むことができる。システムは、ランダムアクセスメモリ(RAM)のような揮発性メモリ、および/または読み取り専用メモリ(ROM)またはフラッシュRAMのような不揮発性メモリの形態のコンピュータ可読媒体を含むことができる。例示のコンピューティングシステムおよび環境を実施するために、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)または他の光学記憶装置、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去可能ROM(EEPROM)など、コンピュータによってアクセス可能なデータを格納することができるその他のタイプのコンピュータ可読媒体も使用されうることを理解されたい。
本明細書全体を通じて、特定の説明されている特徴、構造、または特性が本発明の少なくとも1つの実施態様に含まれることを示す、「例」、「代替の例」、「少なくとも1つの例」、「実施態様」、または「例示の実施態様」に参照が行われている。したがって、そのような句の使用は、1つの実施態様にとどまらずそれ以上の実施形態を参照することができる。さらに、説明される特徴、構造、または特性は、1つまたは複数の実施形態において任意の適切な方法で組み合わせることができる。
しかし、従来技術の当業者は、コードモジュール初期化が、1つまたは複数の具体的な詳細を使用せず、あるいはその他の方法、リソース、素材などを使用して実施されうることを理解するであろう。その他の例において、単に本発明の態様をあいまいにすることを避けるため、既知の構造、リソース、または操作は詳細には示されないかまたは説明されていない。
コードモジュール初期化の例示の実施態様および用途が示され説明されてきたが、本発明は前述したとおりの構成およびリソースに限定されないことを理解されたい。本明細書に開示される本発明の方法およびシステムの配置、操作、および詳細には、上記および添付の特許請求の範囲で説明されるように、本発明の範囲を逸脱することなく、当業者には明らかな様々な修正、変更、および変形を加えることができる。
注釈付きコードの生成および活用のうちの少なくとも1つの技術例を実施する装置と、ネットワークを介して通信する装置を示す図である。 注釈付きコードの生成および活用のうちの少なくとも1つの技術例を実施する実行環境の例を示す図である。 注釈付きコードの例を生成するツールに関してサンプルのデータフローを示す図である。 注釈付きコードを活用するツールに関して例示のデータフローを示す図である。

Claims (12)

  1. 注釈を使用して記憶装置に記憶されたコードの使用に関するガイダンスを提供する方法であって、コンピュータのプロセッサにより実行される前記方法は、
    前記コードの分析により判断された前記コードのモジュールの機能的意図に基いて、適当な注釈を前記コードのモジュールと関連づけるステップであって、
    注釈は前記コードに割り当てられているペルソナまたは分類をリストし、
    機能的意図を示すことにより、前記ペルソナまたは分類は、正確な機能自体を記述するのではなく、コードの特定のモジュールが使用に適している1または複数のコンテキストを記述し、
    前記コードに割り当てられたペルソナまたは分類は、
    より大きなループにおいて、より大きなアルゴリズムの部分として、クライアントアプリケーション、プログラム、関数またはコードの集合体により呼び出される可能性が高いコードを表す内部ループコードペルソナ、
    バッチプロセスまたはサービスプロセスにおいて使用される可能性が高いコードを表すスループットコードペルソナ、
    アプリケーション、プログラム、関数、または対話型イベントにより駆動される他のコードの集合体の部分により使用される可能性が高いコードを表す対話型コードペルソナ、
    対応するアプリケーション、プログラム、関数または他のコードの集合体の起動パスに存在する可能性が高いコードを表すスタートアップコードペルソナ
    のうちの少なくとも1つを含む、関連づけるステップと、
    注釈付けされたガイダンスをユーザインタフェースの部分として表示するステップであって、前記ガイダンスは、
    内部ループコードペルソナについて、そのようなコードが、スループットコード、対話型コードまたはスタートアップコードのペルソナまたは分類が割り当てられたコードにより呼び出されることができることを知らせ、
    スループットコードペルソナについて、スループットコードが内部ループコードと機能的に互換性がなく、内部ループコードにより呼び出すことができないことを知らせ、
    対話型コードペルソナについて、内部ループペルソナまたは分類が割り当てられているコードの呼び出しを提案し、
    スタートアップコードペルソナについて、別のペルソナまたは分類が割り当てられているコードからの呼び出しを阻止しまたは拒否する、表示するステップと
    を含むことを特徴とする方法。
  2. 前記コードは、プリコンパイルされていることを特徴とする請求項1に記載の方法。
  3. 前記コードは、まだコンパイルされていないことを特徴とする請求項1に記載の方法。
  4. 前記ガイダンスは、前記コードを使用するための少なくとも1つの規則を示すことを特徴とする請求項1に記載の方法。
  5. 前記ガイダンスは、前記コードが前記コードを呼び出しているメソッドと機能的に互換性を持つかどうかを示すことを特徴とする請求項1に記載の方法。
  6. 前記ガイダンスは、呼び出されたメソッドが前記コードと機能的に互換性を持つかどうかを示すことを特徴とする請求項1に記載の方法。
  7. 前記ガイダンスは、前記コードによって正常に呼び出されうるメソッドを識別することを特徴とする請求項1に記載の方法。
  8. 前記注釈は、前記コードの分類を示すことを特徴とする請求項1に記載の方法。
  9. 前記注釈は、前記コードの分類を示し、さらに別のコードの機能的に互換性のある分類を示すことを特徴とする請求項1に記載の方法。
  10. 前記ガイダンスは、前記コードに影響を及ぼすようにアクションが行われるときに表示されることを特徴とする請求項1に記載の方法。
  11. 前記ガイダンスは、前記コードに影響を及ぼすようにアクションが行われるときにダイアログボックスに表示されることを特徴とする請求項1に記載の方法。
  12. 前記ガイダンスは、前記コードに影響を及ぼすようにアクションが行われるときにドロップダウンメニューに表示されることを特徴とする請求項1に記載の方法。
JP2008551273A 2006-01-24 2006-12-26 質的に注釈を付けられた注釈付きコード Expired - Fee Related JP5147728B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/275,690 2006-01-24
US11/275,690 US7987456B2 (en) 2006-01-24 2006-01-24 Qualitatively annotated code
PCT/US2006/049353 WO2007087062A2 (en) 2006-01-24 2006-12-26 Qualitatively annotated code

Publications (2)

Publication Number Publication Date
JP2009524856A JP2009524856A (ja) 2009-07-02
JP5147728B2 true JP5147728B2 (ja) 2013-02-20

Family

ID=38309709

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008551273A Expired - Fee Related JP5147728B2 (ja) 2006-01-24 2006-12-26 質的に注釈を付けられた注釈付きコード

Country Status (6)

Country Link
US (1) US7987456B2 (ja)
EP (1) EP1977337A4 (ja)
JP (1) JP5147728B2 (ja)
KR (1) KR20080099247A (ja)
CN (1) CN101361058B (ja)
WO (1) WO2007087062A2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070250810A1 (en) * 2006-04-20 2007-10-25 Tittizer Abigail A Systems and methods for managing data associated with computer code
US8756564B2 (en) 2009-05-29 2014-06-17 International Business Machines Corporation Techniques for providing environmental impact information associated with code
CA2672337C (en) * 2009-07-15 2017-01-03 Ibm Canada Limited - Ibm Canada Limitee Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis
US8370354B2 (en) 2010-06-30 2013-02-05 International Business Machines Corporation Acceleration of legacy to service oriented (L2SOA) architecture renovations
US9141414B2 (en) * 2010-12-21 2015-09-22 Sap Se Preferred compilation
US8875093B2 (en) 2012-06-13 2014-10-28 International Business Machines Corporation Instantiating a coding competition to develop a program module in a networked computing environment
US9086943B2 (en) 2012-06-13 2015-07-21 International Business Machines Corporation Integrated development environment-based repository searching in a networked computing environment
US9286039B2 (en) * 2013-03-14 2016-03-15 Microsoft Technology Licensing, Llc Operating system support for contracts
US9378034B2 (en) * 2013-05-16 2016-06-28 Sap Se Dynamic bytecode modification of classes and class hierarchies
CN103645931B (zh) * 2013-12-25 2016-06-22 盛杰 代码转换的方法及装置
US9501274B1 (en) * 2016-01-29 2016-11-22 International Business Machines Corporation Qualitative feedback correlator
US10216620B2 (en) * 2016-07-05 2019-02-26 Synopsys, Inc. Static code testing of active code
CN106992010B (zh) * 2017-06-02 2020-02-21 厦门大学 无直达声条件下的麦克风阵列语音增强装置
US10534585B1 (en) * 2018-10-29 2020-01-14 Sap Se Integrated development environment with deep insights and recommendations
US11785015B2 (en) 2021-02-24 2023-10-10 Bank Of America Corporation Information security system for detecting unauthorized access requests

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1994009432A1 (de) * 1992-10-15 1994-04-28 Siemens Aktiengesellschaft Verfahren zur durchfürhung mindestens eines tests an mindestens einem von auf einem rechner parallel ablauffähigen objekten eines objektorientierten programmes
US5467441A (en) * 1993-07-21 1995-11-14 Xerox Corporation Method for operating on objects in a first image using an object-based model data structure to produce a second contextual image having added, replaced or deleted objects
JPH07104986A (ja) * 1993-09-30 1995-04-21 Oki Techno Syst Lab:Kk プログラム生成用ツール
AU722149B2 (en) * 1996-02-29 2000-07-20 Bt Financial Group Pty Limited Determination of software functionality
US5727950A (en) * 1996-05-22 1998-03-17 Netsage Corporation Agent based instruction system and method
CA2201278C (en) * 1997-03-27 2001-02-20 Ibm Canada Limited-Ibm Canada Limitee Hierarchical metadata store for an integrated development environment
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6842877B2 (en) * 1998-12-18 2005-01-11 Tangis Corporation Contextual responses based on automated learning techniques
IT1313720B1 (it) * 1999-09-24 2002-09-17 San Raffaele Centro Fond Apparato di misura di prestazioni visive
US7490292B2 (en) * 1999-12-17 2009-02-10 International Business Machines Corporation Web-based instruction
US6675370B1 (en) * 2000-02-02 2004-01-06 International Business Machines Corporation System and method for imbedding hyperlinked language grammar notation in a “literate” programming environment
US20050091576A1 (en) * 2003-10-24 2005-04-28 Microsoft Corporation Programming interface for a computer platform
AU2001259107A1 (en) * 2000-04-21 2001-11-07 Togethersoft Corporation Methods and systems for supporting and deploying distributed computing components
US6721921B1 (en) * 2000-07-26 2004-04-13 Itm Associates Method and system for annotating documents using an independent annotation repository
US7095979B2 (en) * 2001-04-20 2006-08-22 Educational Testing Service Method of evaluation fit of raw data to model data
US7437710B2 (en) * 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US6918107B2 (en) 2001-07-02 2005-07-12 Bea Systems, Inc. Programming language extensions for processing data representation language objects and related applications
US7356803B2 (en) 2001-07-02 2008-04-08 Bea Systems, Inc. Annotation based development platform for asynchronous web services
US20030225719A1 (en) * 2002-05-31 2003-12-04 Lucent Technologies, Inc. Methods and apparatus for fast and robust model training for object classification
US7039898B2 (en) * 2002-07-12 2006-05-02 Netspective Communications, Llc Computer system for performing reusable software application development from a set of declarative executable specifications
WO2004008348A1 (en) * 2002-07-16 2004-01-22 Horn Bruce L Computer system for automatic organization, indexing and viewing of information from multiple sources
US7707564B2 (en) * 2003-02-26 2010-04-27 Bea Systems, Inc. Systems and methods for creating network-based software services using source code annotations
US20040187140A1 (en) * 2003-03-21 2004-09-23 Werner Aigner Application framework
US20040220792A1 (en) * 2003-04-30 2004-11-04 Gallanis Peter Thomas Performance modeling for information systems
US7519577B2 (en) * 2003-06-23 2009-04-14 Microsoft Corporation Query intermediate language method and system
US7219330B2 (en) * 2003-06-26 2007-05-15 Microsoft Corporation Extensible metadata
US20050081189A1 (en) * 2003-10-14 2005-04-14 Sophia Krasikov Aggregation of document elements into runtime code
IES20040811A2 (en) 2003-12-03 2005-08-10 Corect Ltd Control of processes
US8291375B2 (en) * 2004-03-29 2012-10-16 Sybase, Inc. Attribute-based component programming system and methodology for object-oriented languages
US7343379B2 (en) * 2004-05-21 2008-03-11 Bea Systems, Inc. System and method for controls
US7975256B2 (en) * 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining
US7562342B2 (en) * 2004-12-02 2009-07-14 International Business Machines Corporation Method and apparatus for incrementally processing program annotations

Also Published As

Publication number Publication date
CN101361058B (zh) 2013-09-11
EP1977337A2 (en) 2008-10-08
JP2009524856A (ja) 2009-07-02
CN101361058A (zh) 2009-02-04
WO2007087062A2 (en) 2007-08-02
EP1977337A4 (en) 2009-06-24
KR20080099247A (ko) 2008-11-12
US20070180455A1 (en) 2007-08-02
US7987456B2 (en) 2011-07-26
WO2007087062A3 (en) 2007-10-04

Similar Documents

Publication Publication Date Title
JP5147728B2 (ja) 質的に注釈を付けられた注釈付きコード
US7730464B2 (en) Code compilation management service
JP5139987B2 (ja) 拡張可能メタデータ
US7441094B2 (en) Memory management configuration
RU2419854C2 (ru) Основанное на шаблоне управление службами
US11556348B2 (en) Bootstrapping profile-guided compilation and verification
US20120278813A1 (en) Load balancing
US20160154673A1 (en) Methods, systems, and computer program products for providing a minimally complete operating environment
US8701095B2 (en) Add/remove memory pressure per object
US8713524B2 (en) Memory management configuration
US8904359B2 (en) On-demand monitoring of memory usage
US20090089749A1 (en) Automatically Adding Bytecode to a Software Application to Determine Network Communication Information
JP2009528589A (ja) 適応コンパイルコード
US20070180433A1 (en) Method to enable accurate application packaging and deployment with optimized disk space usage
US20070067762A1 (en) Exposing code contentions
CN103064783A (zh) 使用重复利用动态链接库进行功能测试的系统和方法
US20070168742A1 (en) Isolating code modules
US7673051B2 (en) Resource usage conflict identifier
CN113031964A (zh) 一种大数据应用的管理方法、装置、设备及存储介质
US20060288336A1 (en) Module initialization
CN116775563A (zh) 一种文件访问控制方法、装置、设备及存储介质
Dumont et al. Mobile application validation through virtualization

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091124

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120314

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120316

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120618

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120713

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121015

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: 20121109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121127

R150 Certificate of patent or registration of utility model

Ref document number: 5147728

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151207

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

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

LAPS Cancellation because of no payment of annual fees