IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特表2023-553587第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供
<>
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図1
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図2
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図3
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図4
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図5
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図6
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図7
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図8
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図9
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図10
  • 特表-第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-12-25
(54)【発明の名称】第三者ライブラリ開発システムによる使用のためのアプリケーションエラーデータの提供
(51)【国際特許分類】
   G06F 11/07 20060101AFI20231218BHJP
   G06F 15/00 20060101ALI20231218BHJP
【FI】
G06F11/07 190
G06F15/00 410Z
G06F11/07 140A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023524718
(86)(22)【出願日】2020-11-09
(85)【翻訳文提出日】2023-06-19
(86)【国際出願番号】 US2020059707
(87)【国際公開番号】W WO2022086571
(87)【国際公開日】2022-04-28
(31)【優先権主張番号】2020-04014
(32)【優先日】2020-10-22
(33)【優先権主張国・地域又は機関】GR
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ゴンザレス・サンチェス,アルベルト
(72)【発明者】
【氏名】イルコス,イオアニス
(72)【発明者】
【氏名】ヒューズ,ディノ・デレク
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GA05
5B042GA12
5B042KK15
5B042MA08
5B042MA14
5B042MC15
(57)【要約】
例示的な方法は、アプリケーションサーバシステムが、1つ以上のクライアントコンピューティングデバイスから、少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信することと、(i)アプリケーションのライブラリ依存ソースコードと、(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信することとを含み、ライブラリ依存ソースコードは、アプリケーションの実行中に少なくとも1つの第三者ライブラリからロードされ、本方法はさらに、アプリケーションエラーデータおよびマッピングデータに基づいて、ライブラリ依存ソースコードとアプリケーションエラーデータの少なくとも1つの部分との間の一致を判定することと、少なくとも1つのエラーを少なくとも1つの第三者ライブラリに帰属させることと、少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成することと、ライブラリエラーデータを少なくとも1つの第三者ライブラリ開発システムに送信することとを含む。
【特許請求の範囲】
【請求項1】
方法であって、
1つ以上のプロセッサを含むアプリケーションサーバシステムが、1つ以上のクライアントコンピューティングデバイスから、前記1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信することと、
前記アプリケーションサーバシステムが、(i)前記少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信することとを含み、前記ライブラリ依存ソースコードは、前記少なくとも1つのアプリケーションの実行中に前記少なくとも1つの第三者ライブラリからロードされ、前記方法はさらに、
前記アプリケーションサーバシステムが、前記アプリケーションエラーデータおよび前記マッピングデータに基づいて、前記ライブラリ依存ソースコードと前記アプリケーションエラーデータの少なくとも1つの部分との間の一致を判定することと、
前記一致を判定することに応答して、前記アプリケーションサーバシステムが、前記少なくとも1つのアプリケーションの実行中に発生した前記少なくとも1つのエラーを前記少なくとも1つの第三者ライブラリに帰属させることと、
前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成することとを含み、前記ライブラリエラーデータは、前記アプリケーションエラーデータの前記少なくとも1つの部分を含み、前記方法はさらに、
前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、前記ライブラリエラーデータを送信することを含む、方法。
【請求項2】
前記アプリケーションエラーデータは、前記少なくとも1つのアプリケーションを前記1つ以上のクライアントコンピューティングデバイス上でクラッシュさせた前記少なくとも1つのエラーに関連付けられるアプリケーションクラッシュレポートデータを含み、
前記アプリケーションエラーデータの前記少なくとも1つの部分は、前記アプリケーションクラッシュレポートデータの少なくとも1つの部分を含み、
前記ライブラリエラーデータは、前記アプリケーションクラッシュレポートデータの前記少なくとも1つの部分を含むライブラリクラッシュレポートデータを含む、請求項1に記載の方法。
【請求項3】
前記アプリケーションクラッシュレポートデータは、前記少なくとも1つのアプリケーションのネスト化された関数呼び出しを表すスタックトレースデータを含み、
前記アプリケーションクラッシュレポートデータの前記少なくとも1つの部分は、前記スタックトレースデータの少なくとも1つの部分を含む、請求項2に記載の方法。
【請求項4】
前記一致を判定することは、前記アプリケーションサーバシステムが、前記スタックトレースデータおよび前記マッピングデータに基づいて、前記ライブラリ依存ソースコードのうちの1つ以上のパターンを、前記スタックトレースデータの前記少なくとも1つの部分における1つ以上のコード位置と照合することを含む、請求項3に記載の方法。
【請求項5】
前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリを開発する前記少なくとも1つの第三者ライブラリ開発システムから、前記ライブラリ依存ソースコードに関連付けられる難読化解除データを受信することと、
前記アプリケーションサーバシステムが、前記難読化解除データに基づいて、前記スタックトレースデータの前記少なくとも1つの部分を難読化解除することとをさらに含む、請求項3に記載の方法。
【請求項6】
前記ライブラリエラーデータを生成することは、前記アプリケーションサーバシステムが、前記スタックトレースデータからアプリケーション依存ソースコードを除去して前記ライブラリエラーデータを生成することを含む、請求項3に記載の方法。
【請求項7】
前記少なくとも1つの第三者ライブラリは、少なくとも第1の第三者ライブラリおよび第2の第三者ライブラリを含み、
前記ライブラリ依存ソースコードは、前記第1の第三者ライブラリに関連付けられる第1のライブラリ依存ソースコードと、前記第2の第三者ライブラリに関連付けられる第2のライブラリ依存ソースコードとを含み、
前記アプリケーションエラーデータの前記少なくとも1つの部分は、前記第1のライブラリ依存ソースコードを含み、
前記ライブラリエラーデータを生成することは、前記アプリケーションサーバシステムが、前記第2のライブラリ依存ソースコードを前記スタックトレースデータから除去して前記ライブラリエラーデータを生成することをさらに含む、請求項6に記載の方法。
【請求項8】
前記ライブラリエラーデータは、さらに、前記少なくとも1つの第三者ライブラリの少なくとも1つのバージョン番号、前記1つ以上のクライアントコンピューティングデバイスによって実行される少なくとも1つのオペレーティングシステムの少なくとも1つのバージョン番号、前記1つ以上のクライアントコンピューティングデバイスの少なくとも1つのデバイスタイプ、ある期間にわたって前記少なくとも1つのエラーによって影響を受けるアプリケーションの数、前記ある期間にわたって前記少なくとも1つのエラーによって影響を受けるユーザの数、または前記ある期間にわたる前記少なくとも1つのエラーの発生数、のうちの1つ以上を示す、請求項1~7のいずれか1項に記載の方法。
【請求項9】
前記方法はさらに、
前記アプリケーションサーバシステムが、前記ライブラリエラーデータに含まれる前記アプリケーションエラーデータの前記少なくとも1つの部分に関連付けられる第1のフィンガープリント識別子を決定することと、
前記アプリケーションサーバシステムが、前記第1のフィンガープリント識別子と、以前に生成されたライブラリエラーデータに関連付けられる第2のフィンガープリント識別子との間の一致を判定することとを含み、前記以前に生成されたライブラリエラーデータは、前記少なくとも1つの第三者ライブラリに関連付けられ、前記以前に生成されたライブラリエラーデータは、前記1つ以上のクライアントコンピューティングデバイス上での前記少なくとも1つのアプリケーションの実行中に発生した前記少なくとも1つのエラーに関連付けられるアプリケーションエラーデータの少なくとも1つの部分を含み、前記方法はさらに、
前記第1のフィンガープリント識別子と前記第2のフィンガープリント識別子との間で前記一致を判定することに応答して、前記アプリケーションサーバシステムが、前記ライブラリエラーデータを、前記以前に生成されたライブラリエラーデータとクラスタ化して、前記少なくとも1つの第三者ライブラリに関連付けられるクラスタ化されたライブラリエラーデータを生成することを含み、前記クラスタ化されたライブラリエラーデータは、前記少なくとも1つのエラーによって影響を受ける少なくともある数のアプリケーションを示し、
前記ライブラリエラーデータを送信することは、前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリ開発システムに、前記クラスタ化されたライブラリエラーデータを送信することを含む、請求項1~8のいずれか1項に記載の方法。
【請求項10】
前記方法はさらに、
前記アプリケーションサーバシステムが、前記少なくとも1つのエラーによって影響を受ける前記アプリケーションの数が閾値数を超えると判断することを含み、
前記クラスタ化されたライブラリエラーデータを送信することは、前記少なくとも1つのエラーによって影響を受ける前記アプリケーションの数が前記閾値数を超えるという判断に応答して生じる、請求項9に記載の方法。
【請求項11】
前記マッピングデータを受信することは、前記アプリケーションサーバシステムが、前記少なくとも1つのアプリケーションを開発する少なくとも1つのアプリケーション開発システムから、前記マッピングデータを受信することを含む、請求項1~10のいずれか1項に記載の方法。
【請求項12】
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサによって実行可能な命令を記憶するよう構成される少なくとも1つのコンピュータ可読記憶装置とを備え、前記命令は、
1つ以上のクライアントコンピューティングデバイスから、前記1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信し、
(i)前記少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信するよう、前記少なくとも1つのプロセッサによって実行可能であり、前記ライブラリ依存ソースコードは、前記少なくとも1つのアプリケーションの実行中に前記少なくとも1つの第三者ライブラリからロードされ、前記命令はさらに、
前記アプリケーションエラーデータおよび前記マッピングデータに基づいて、前記ライブラリ依存ソースコードと前記アプリケーションエラーデータの少なくとも1つの部分との間の一致を判定し、
前記一致を判定することに応答して、前記少なくとも1つのアプリケーションの実行中に発生した前記少なくとも1つのエラーを前記少なくとも1つの第三者ライブラリに帰属させ、
前記少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成するよう、前記少なくとも1つのプロセッサによって実行可能であり、前記ライブラリエラーデータは、前記アプリケーションエラーデータの前記少なくとも1つの部分を含み、前記命令はさらに、
前記少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、前記ライブラリエラーデータを送信するよう、前記少なくとも1つのプロセッサによって実行可能である、アプリケーションサーバシステム。
【請求項13】
前記少なくとも1つのコンピュータ可読記憶装置に記憶された前記命令は、さらに、請求項2~11のいずれか1項に記載の前記方法を実行するよう、前記少なくとも1つのプロセッサによって実行可能である、請求項12に記載のアプリケーションサーバシステム。
【請求項14】
命令を記憶するコンピュータ可読記憶装置であって、前記命令は、実行されると、少なくとも1つのプロセッサに、動作を実行させ、前記動作は、
1つ以上のクライアントコンピューティングデバイスから、前記1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信することと、
(i)前記少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信することとを含み、前記ライブラリ依存ソースコードは、前記少なくとも1つのアプリケーションの実行中に前記少なくとも1つの第三者ライブラリからロードされ、前記動作はさらに、
前記アプリケーションエラーデータおよび前記マッピングデータに基づいて、前記ライブラリ依存ソースコードと前記アプリケーションエラーデータの少なくとも1つの部分との間の一致を判定することと、
前記一致を判定することに応答して、前記少なくとも1つのアプリケーションの実行中に発生した前記少なくとも1つのエラーを前記少なくとも1つの第三者ライブラリに帰属させることと、
前記少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成することとを含み、前記ライブラリエラーデータは、前記アプリケーションエラーデータの前記少なくとも1つの部分を含み、前記動作はさらに、
前記少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、前記ライブラリエラーデータを送信することを含む、コンピュータ可読記憶装置。
【請求項15】
前記命令は、前記少なくとも1つのプロセッサに、請求項2~11のいずれか1項に記載の前記方法をさらに実行させる、請求項14に記載のコンピュータ可読記憶装置。
【発明の詳細な説明】
【背景技術】
【0001】
背景
モバイルコンピューティングデバイスを含む既存のコンピューティングデバイスは、時間とともに任意の数の異なるアプリケーション(例えば、モバイルアプリケーション、ゲーム)を実行するよう構成される。種々の異なるアプリケーションの開発者が、1つ以上のアプリケーション開発システムを使用して、これらのアプリケーションを開発および配信してもよく、次いで、これらのアプリケーションは、エンドユーザに関連付けられるクライアントコンピューティングデバイスによって実行されてもよい。多くの場合、1つ以上の集中型アプリケーションサーバは、これらのアプリケーションが開発された後、それらのアプリケーションおよび対応するメタデータを記憶してもよく、エンドユーザは、エンドユーザのそれぞれのクライアントコンピューティングデバイス上でこれらのアプリケーションをダウンロードおよび使用してもよい。残念ながら、ある状況では、任意の所与のアプリケーションは、その実行中にエラーを経験し得、場合によっては、発生するエラーの重大度またはタイプに基づいて、クラッシュまたは実行をアボートしさえし得る。
【発明の概要】
【課題を解決するための手段】
【0002】
概要
本開示は、1つ以上のアプリケーションの実行中に発生する1つ以上のエラーに基づいて、これらのアプリケーションによって使用される第三者ライブラリを開発する第三者ライブラリ開発システムによる使用のためにアプリケーションエラーデータの1つ以上の部分を提供することを対象とする。本開示の技法によれば、アプリケーションサーバシステムは、1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生するそのようなエラーに関連付けられるアプリケーションエラーデータを処理し、ライブラリエラーデータ内に含まれるそのようなデータの少なくとも一部を第三者ライブラリ開発システムに出力するよう構成されてもよい。そのような方式では、1つ以上の第三者ライブラリのライブラリ開発者は、そのようなライブラリエラーデータを受信および検討してもよく、それは、実行中にアプリケーションに含まれるかまたはアプリケーションによって使用される対応するライブラリ依存コードの実行に関連してもよい。ライブラリエラーデータを検討および分析することによって、第三者ライブラリ開発者および/または第三者ライブラリ開発システムは、アプリケーション実行中にランタイムエラーを引き起こした可能性のある、第三者ライブラリにおける任意のコーディング障害または他の問題を識別することを試みてもよい。
【0003】
一例では、ある方法は、1つ以上のプロセッサを含むアプリケーションサーバシステムが、1つ以上のクライアントコンピューティングデバイスから、1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信することと、アプリケーションサーバシステムが、(i)少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信することとを含み、ライブラリ依存ソースコードは、少なくとも1つのアプリケーションの実行中に少なくとも1つの第三者ライブラリからロードされ、本方法はさらに、アプリケーションサーバシステムが、アプリケーションエラーデータおよびマッピングデータに基づいて、ライブラリ依存ソースコードとアプリケーションエラーデータの少なくとも1つの部分との間の一致を判定することを含む。例示的な方法は、さらに、一致を判定することに応答して、アプリケーションサーバシステムが、少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーを少なくとも1つの第三者ライブラリに帰属させることと、アプリケーションサーバシステムが、少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成することとを含み、ライブラリエラーデータは、アプリケーションエラーデータの少なくとも1つの部分を含み、本方法はさらに、アプリケーションサーバシステムが、少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、ライブラリエラーデータを送信することを含む。
【0004】
別の例では、アプリケーションサーバシステムは、少なくとも1つのプロセッサと、命令を記憶するよう構成される少なくとも1つのコンピュータ可読記憶装置とを含み、上記命令は、1つ以上のクライアントコンピューティングデバイスから、1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信し、(i)少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信するよう、少なくとも1つのプロセッサによって実行可能であり、ライブラリ依存ソースコードは、少なくとも1つのアプリケーションの実行中に少なくとも1つの第三者ライブラリからロードされ、上記命令はさらに、アプリケーションエラーデータおよびマッピングデータに基づいて、ライブラリ依存ソースコードとアプリケーションエラーデータの少なくとも1つの部分との間の一致を判定し、一致を判定することに応答して、少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーを少なくとも1つの第三者ライブラリに帰属させ、少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成するよう、少なくとも1つのプロセッサによって実行可能であり、ライブラリエラーデータは、アプリケーションエラーデータの少なくとも1つの部分を含み、上記命令は、さらに、少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、ライブラリエラーデータを送信するよう、少なくとも1つのプロセッサによって実行可能である。
【0005】
別の例では、コンピュータ可読記憶装置は、実行されると少なくとも1つのプロセッサに動作を実行させる命令を記憶する。これらの例示的な動作は、1つ以上のクライアントコンピューティングデバイスから、1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信することと、(i)少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信することとを含み、ライブラリ依存ソースコードは、少なくとも1つのアプリケーションの実行中に少なくとも1つの第三者ライブラリからロードされ、例示的な動作はさらに、アプリケーションエラーデータおよびマッピングデータに基づいて、ライブラリ依存ソースコードとアプリケーションエラーデータの少なくとも1つの部分との間の一致を判定することを含む。例示的な動作は、さらに、一致を判定することに応答して、少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーを少なくとも1つの第三者ライブラリに帰属させることと、少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成することとを含み、ライブラリエラーデータは、アプリケーションエラーデータの少なくとも1つの部分を含み、上記例示的な動作は、さらに、少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、ライブラリエラーデータを送信することを含む。
【0006】
1つ以上の例の詳細が、添付の図面および以下の説明に記載される。本開示の他の特徴、目的、および利点は、説明および図面、および特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【0007】
図1】本開示の1つ以上の局面による、第三者ライブラリ開発システムによる使用のためにアプリケーションエラーデータを処理するよう構成されるアプリケーションサーバシステムを含む例示的な分散システムを示すブロック図である。
図2】本開示の1つ以上の局面による、第三者ソフトウェア開発キット(SDK)開発システムによる使用のためにアプリケーションクラッシュレポートデータを処理するよう構成されるアプリケーションサーバシステムを含む別の例示的な分散システムを示すブロック図である。
図3】本開示の1つ以上の局面による、例示的なアプリケーションサーバシステムを示すブロック図である。
図4】本開示の1つ以上の局面による、ライブラリ依存ソースコードおよびアプリケーション依存ソースコードの両方を含む例示的なスタックトレースデータを示す概念図である。
図5】本開示の1つ以上の局面による、アプリケーションのライブラリ依存ソースコードの1つ以上の部分と、アプリケーションの実行中にライブラリ依存ソースコードがロードされる少なくとも1つの第三者ライブラリとの間のマッピングを提供する例示的なマッピングデータを示す概念図である。
図6】本開示の1つ以上の局面による、1つ以上のSDK開発システムに提供されるSDKクラッシュレポートに含まれる例示的なスタックトレースデータを示す概念図である。
図7】本開示の1つ以上の局面による、1つ以上のSDK開発システムに提供されるSDKクラッシュレポートに含まれるスタックトレースデータの別の例を示す概念図である。
図8】本開示の1つ以上の局面による、1つ以上のSDK開発システムに提供されるSDKクラッシュレポートに含まれるスタックトレースデータのさらなる例を示す概念図である。
図9】本開示の1つ以上の局面による、アプリケーションサーバシステムによって提供されるデータに基づいて1つ以上の第三者ライブラリ開発システムにおいて表示されてもよい例示的なグラフィカルユーザインターフェースを示すスクリーン図である。
図10】本開示の1つ以上の局面による、アプリケーションサーバシステムによって提供されるデータに基づいて1つ以上の第三者ライブラリ開発システムにおいて表示されてもよい別の例示的なグラフィカルユーザインターフェースを示すスクリーン図である。
図11】本開示の1つ以上の局面による、アプリケーションサーバシステムの例示的な動作を示す流れ図である。
【発明を実施するための形態】
【0008】
詳細な説明
図1は、本開示の1つ以上の局面による、1つ以上の第三者ライブラリ開発システム132による使用のためにアプリケーションエラーデータを処理するよう構成されるアプリケーションサーバシステム102を含む例示的な分散システム100を示すブロック図である。図1の例では、システム100は、アプリケーションサーバシステム102と、1つ以上のアプリケーション開発システム128と、1つ以上の第三者ライブラリ開発システム132と、1つ以上のクライアントコンピューティングデバイス140とを含む。アプリケーションサーバシステム102、アプリケーション開発システム128、第三者ライブラリ開発システム132、およびクライアントコンピューティングデバイス140は、1つ以上の無線および/または有線ネットワークを含んでもよい1つ以上のネットワーク126を介して互いに通信可能に結合されてもよい。
【0009】
アプリケーションサーバシステム102、アプリケーション開発システム128、および第三者ライブラリ開発システム132は各々、1つ以上のコンピューティングデバイスまたはサーバを含んでもよく、各コンピューティングデバイスまたはサーバは、1つ以上のプロセッサを含む。クライアントコンピューティングデバイス140も、1つ以上のプロセッサを含んでもよい。クライアントコンピューティングデバイス140の例は、限定はしないが、携帯電話、タブレットコンピュータ、携帯情報端末(PDA)、ラップトップコンピュータ、ポータブルゲームデバイス、ポータブルメディアプレーヤ、ウェアラブルコンピューティングデバイス(例えば、腕時計、手首装着型コンピューティングデバイス、頭部装着型コンピューティングデバイス)、テレビプラットフォーム、または他のタイプのコンピューティングデバイスを含む。アプリケーションサーバシステム102、アプリケーション開発システム128、第三者ライブラリ開発システム132、およびクライアントコンピューティングデバイス140は各々、(図3に示されるような)1つ以上の通信ユニットを含んでもよい。これらの通信ユニットは、一つ以上の他のコンピューティングデバイスまたはシステムからデータを送信および/または受信してもよい。いくつかの例では、通信ユニットは、無線および/または有線通信をサポートし、任意の様々な通信プロトコルを使用してデータを送信および/または受信してもよい。
【0010】
前述のように、クライアントコンピューティングデバイス140は、1つ以上のアプリケーション104の任意の数のもの(例えば、モバイルアプリケーション、ゲーム)を経時的に実行するよう構成される。様々な異なるアプリケーション開発者は、アプリケーション開発システム128を使用して、そのようなアプリケーション104を開発および配信してもよく、アプリケーション104は、次いで、クライアントコンピューティングデバイス140によって実行されてもよい。多くの場合、図1に示されるように、アプリケーション開発システム128は、アプリケーション104のローカルコピーを記憶してもよく、また、アプリケーションサーバシステム102上の記憶のためにアプリケーション104のコピーを配信してもよい。次いで、クライアントコンピューティングデバイス140のエンドユーザは、クライアントコンピューティングデバイス140上でアプリケーション104をダウンロードおよび実行してもよく、そのようなアプリケーション104は、アプリケーション開発システム128を使用して任意の数の異なるアプリケーション開発者によって開発されてもよい。アプリケーション104は、クライアントコンピューティングデバイス140のために様々な関数を実行するかまたは1つ以上のサービスにアクセスしてもよい。電子メールアプリケーション、カメラアプリケーション、カレンダーアプリケーション、メッセージングアプリケーション、ソーシャルメディアアプリケーション、旅行アプリケーション、ゲームアプリケーション、株式アプリケーション、および天気アプリケーションはすべて、アプリケーション104の例である。
【0011】
いくつかの状況では、アプリケーション104のうちの1つ以上は、クライアントコンピューティングデバイス140上での実行中にエラーを経験することがあり、発生するエラーの重大度またはタイプに基づいて、いくつかの場合にはクラッシュまたは実行をアボートすることさえあり得る。これらの状況では、アプリケーションがクライアントコンピューティングデバイスのうちの1つ以上での実行中にエラーまたはクラッシュを有するとき、クライアントコンピューティングデバイス140のランタイムシステムは、アプリケーションに関連付けられるアプリケーションサーバシステム102および/またはアプリケーション開発システム128のうちの1つ以上に送信されるエラー報告を生成してもよい。そのような態様では、アプリケーションのアプリケーション開発者は、クライアントコンピューティングデバイス140上でランタイムエラーを引き起こした可能性のあるアプリケーション内の任意のコーディング障害または他の問題を識別しようとして、アプリケーション開発システム128を介してこれらのエラー報告を受信および検討してもよい。
【0012】
多くの場合、アプリケーション104は、アプリケーション依存ソースコードおよびライブラリ依存ソースコードの両方を含む。アプリケーション依存ソースコードは、典型的には、特にアプリケーション104のために(例えば、アプリケーション開発システム128を使用するアプリケーション開発者によって)開発されたソースコードである。ライブラリ依存ソースコードは、典型的には、アプリケーション104のうちの種々の異なるアプリケーション104に組み込まれるかまたは別様にそれによって使用されてもよい第三者ライブラリ138内に組み込むために(例えば、第三者ライブラリ開発システム132を使用するライブラリ開発者によって)開発されたライブラリベースのコードである。その結果、アプリケーション104のソースコードの大きなパーセンテージは、実際にはライブラリ依存ソースコードを含んでもよい。したがって、アプリケーション104に、実行中にエラーおよびクラッシュを経験させるソースコードは、潜在的に、アプリケーション104内に含まれるライブラリ依存ソースコードの1つ以上の部分を含み得る。
【0013】
そのようなライブラリ依存ソースコードに存在する障害は、そのようなコードを含むアプリケーション104のいずれかにエラーまたはクラッシュさえ経験させ得る。従来、上述のように、アプリケーション104におけるエラーまたはアプリケーション104のクラッシュに関連付けられるアプリケーションエラーデータ122は、これらのアプリケーション104が開発されたアプリケーション開発システム128にのみ提供される。しかしながら、このアプリケーションエラーデータ122は、従来、ライブラリ開発者が、そのようなアプリケーションエラーデータ122へのアクセスを有し、ライブラリ開発者によって開発された第三者ライブラリ138のうちのいずれかが、アプリケーションエラーまたはクラッシュの原因であり得るかどうかを査定し得るように第三者ライブラリ開発システム132に提供されてはいなかった。
【0014】
したがって、本開示の技法によれば、アプリケーションサーバシステム102は、クライアントコンピューティングデバイス140の1つ以上でのアプリケーション104の1つ以上の実行中に発生するエラーに関連付けられるアプリケーションエラーデータ122を処理し、ライブラリエラーデータ124に含まれるそのようなデータの少なくとも一部を、第三者ライブラリ開発者に、第三者ライブラリ開発システム132を使用して出力するよう構成されてもよい。このように、1つ以上の第三者ライブラリ138のライブラリ開発者は、そのようなライブラリエラーデータ124を受信および検討してもよく、それは、実行のためにアプリケーション104に含まれる第三者ライブラリ138からのライブラリ依存コードの実行に関連してもよい。ライブラリエラーデータ124を検討および分析することによって、第三者ライブラリ開発者および/または第三者ライブラリ開発システム132は、クライアントコンピューティングデバイス140上でのアプリケーション104の実行中にランタイムエラーを引き起こした可能性がある、第三者ライブラリ138内の任意のコーディング障害または他の問題を識別することを試みてもよい。
【0015】
図1に示され、以下でさらに詳細に説明されるように、アプリケーションサーバシステム102は、様々な機能モジュールを含む。これらは、ライブラリエラーデータ生成部110、アプリケーションエラー処理モジュール120、およびライブラリエラー報告モジュール121を含む。ライブラリエラーデータ生成部110は、ライブラリ帰属モジュール114と、スクラビングモジュール116と、クラスタ化モジュール118と、任意選択の難読化解除モジュール112とを含む。これらのモジュールは、アプリケーションサーバシステム102に常駐する、および/もしくはアプリケーションサーバシステム102で実行する、ソフトウェア、ハードウェア、ならびに/またはファームウェアの任意の組み合わせを使用して、本明細書で説明される動作を個別にまたは集合的に実行してもよい。アプリケーションサーバシステム102は、1つ以上のプロセッサを使用してこれらのモジュールを実行してもよい。場合によっては、アプリケーションサーバシステム102は、基底のハードウェア上で実行する1つ以上の仮想マシンとして、これらのモジュールを実行してもよい。場合によっては、これらのうちの1つ以上は、オペレーティングシステムまたはコンピューティングプラットフォームのサービスとして実行してもよい。
【0016】
以下でさらに詳細に説明するように、アプリケーションサーバシステム102のアプリケーションエラー処理モジュール120は、クライアントコンピューティングデバイス140のアプリケーションエラー報告モジュール142から、クライアントコンピューティングデバイス140上での1つ以上のアプリケーション104の実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータ122を受信してもよい。したがって、アプリケーションエラー報告モジュール142は、アプリケーション104の実行に関連付けられるそのようなアプリケーションエラーデータ122をアプリケーションサーバシステム102のアプリケーションエラー処理モジュール120に送信するよう構成される。
【0017】
アプリケーション104のうちの1つ以上がクラッシュまたは他の予期しない終了を経験する場合、アプリケーションエラーデータ122は、アプリケーション104のうちの1つ以上をクラッシュさせた少なくとも1つのエラーに関連付けられるアプリケーションクラッシュレポートデータを含んでもよい。アプリケーションクラッシュレポートデータは、アプリケーション104のネスト化された関数呼び出しを表すスタックトレースデータを含んでもよく、アプリケーションクラッシュレポートデータの少なくとも1つの部分は、スタックトレースデータの少なくとも1つの部分を含む。スタックトラックデータのネスト化された関数呼び出しは、例えば、プログラムローダから、アプリケーション104のうちの1つ以上のそれぞれの実行中にクラッシュが発生した場所に至った可能性がある呼び出しである。図4は、そのようなスタックトレースデータの一例を示す。
【0018】
アプリケーションサーバシステム102はまた、(i)アプリケーション104のライブラリ依存ソースコードと、(ii)アプリケーション104の実行中にライブラリ依存ソースコードがロードされる、サードパーティライブラリ138の少なくとも1つのサードパーティライブラリとの間のマッピングを提供するマッピングデータ108を(例えば、アプリケーション開発システム128から)受信する。場合によっては、アプリケーション開発システム128は、アプリケーションデータ106をアプリケーションサーバシステム102に提供してもよく、アプリケーションデータ106は、アプリケーション104に関連付けられるメタデータを含んでもよい。例えば、アプリケーションデータ106は、マッピングデータ108を含んでもよい。アプリケーションデータ106はまた、アプリケーションバージョン番号情報、アプリケーション104のサポートされるオペレーティングシステムに関連付けられる情報(例えば、1つ以上のオペレーティングシステムのバージョン番号)、クライアントコンピューティングデバイスのサポートされるデバイスタイプに関連付けられる情報、アプリケーション104のコードに関連付けられる難読化解除データまたはファイルなど、アプリケーション104に関連付けられる他の情報を含んでもよい。
【0019】
アプリケーションサーバシステム102は、アプリケーションエラーデータ122およびマッピングデータ108に基づいて、ライブラリ依存ソースコードとアプリケーションエラーデータ122の少なくとも1つの部分との間の一致を判定する。例えば、アプリケーションサーバシステム102上のライブラリエラーデータ生成部110のライブラリ帰属モジュール114が、この一致を判定してもよい。アプリケーションエラー報告モジュール142によって提供されるアプリケーションエラーデータ122がスタックトレースデータを含む場合、ライブラリ帰属モジュール114は、このスタックトレースデータおよびマッピングデータ108に基づいて、ライブラリ依存ソースコードの1つ以上のパターンをスタックトレースデータの少なくとも1つの部分における1つ以上のコード位置と照合することによって、一致を判定するよう構成されてもよい。その結果、ライブラリ帰属モジュール114は、アプリケーション104内のコードと、コードがロードされる第三者ライブラリ138のいずれかとの間のマッピングを識別してもよい。このマッピングは、スタックトレースが任意の第三者ライブラリ依存ソースコードをトラバースするかどうかをライブラリ帰属モジュール114が判定する機構を提供し、ライブラリ帰属モジュール114は、1つ以上のエラー(例えば、アプリケーションクラッシュ)を、第三者ライブラリ138のうちの識別されたものに帰属させ得る。
【0020】
一致を判定することに応答して、ライブラリ帰属モジュール114は、アプリケーション104の実行中に発生した少なくとも1つのエラーを、第三者ライブラリ138に含まれる少なくとも1つの第三者ライブラリに帰属させてもよい。次いで、ライブラリ帰属モジュール114は、少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータ124を生成してもよく、ライブラリエラーデータ124は、アプリケーションエラーデータ122の少なくとも1つの部分を含む。例えば、アプリケーションエラーデータ122がアプリケーションクラッシュレポートデータを含む場合、ライブラリエラーデータ124は、アプリケーションクラッシュレポートデータの少なくとも1つの部分を含むライブラリクラッシュレポートデータを含んでもよい。
【0021】
ライブラリ帰属モジュール114がライブラリエラーデータ124を生成した後、アプリケーションサーバシステム102のライブラリエラー報告モジュール121は、ネットワーク126を介して、少なくとも1つの第三者ライブラリを開発する1つ以上の第三者ライブラリ開発システム132の1つ以上に、ライブラリエラーデータ124を送信する。少なくとも1つの第三者ライブラリは第三者ライブラリ138に含まれる。例えば、ライブラリエラー報告モジュール121は、ライブラリエラーデータ124を、第三者ライブラリ開発システム132の、またはそれに関連付けられる、1つ以上のライブラリコンソールインターフェース134に送信してもよい。ライブラリコンソールインターフェース134は、いくつかの例では、ライブラリエラーデータ124を第三者ライブラリ開発システム132上においてローカルに記憶してもよい。ライブラリコンソールインターフェース134はまた、図9図10の例に示されるように、1つ以上の表示装置130における表示のためにライブラリエラーデータ124を出力してもよい。表示装置130は、いくつかの例では、液晶ディスプレイ(LCD)、ドットマトリックスディスプレイ、発光ダイオード(LED)ディスプレイ、有機発光ダイオード(OLED)ディスプレイ、マイクロ発光ダイオード(マイクロLED)ディスプレイ、アクティブマトリックス有機発光ダイオード(AMOLED)ディスプレイ、eインク、または第三者ライブラリ開発システム132を使用して第三者開発者に可視情報を出力することが可能な同様のモノクロもしくはカラーディスプレイのうちの1つ以上を含んでもよい。
【0022】
いくつかの例では、ライブラリエラー報告モジュール121は、表示装置130に表示するためにライブラリエラーデータ124を出力するために、ライブラリコンソールインターフェース134によって呼び出されるアプリケーションプログラミングインターフェース(API)を含むかまたは提供してもよい。アプリケーションサーバシステム102は、ライブラリエラー報告モジュール121を介してライブラリエラーデータ124を第三者ライブラリ開発システム132に送信するよう構成されてもよい。第三者ライブラリ開発システム132は、ライブラリコンソールインターフェース134を実行して、表示装置130を使用して1人以上の開発者に表示するためにライブラリエラーデータ124を出力してもよいグラフィカルユーザインターフェースを(例えば、ブラウザ内に)提供してもよい。ライブラリコンソールインターフェース134は、場合によっては、実行のためにアプリケーションサーバシステム102によって第三者ライブラリ開発システム132に提供される実行可能コードを含んでもよい。
【0023】
場合によっては、第三者ライブラリ開発システム132はまた、第三者ライブラリ138に関連付けられるメタデータを含んでもよいライブラリデータ136を記憶してもよい。たとえば、図2を参照してさらに説明するように、ライブラリデータ136は、クライアントコンピューティングデバイス140から受信されるアプリケーションエラーデータ122(たとえば、スタックトレースデータ)の1つ以上の部分を難読化解除するためにアプリケーションサーバシステム102のオプションの難読化解除モジュール112によって使用可能な難読化解除データを含んでもよく、そして、難読化解除された部分は、次いで、ライブラリエラーデータ生成部110によって使用されて、ライブラリエラーデータ124を生成する。この難読化解除データは、アプリケーション104のライブラリ依存ソースコードに関連付けられる。場合によっては、アプリケーション開発システム128によってアプリケーションサーバシステム102に提供されるアプリケーションデータ106も、アプリケーションエラーデータ122の1つ以上の部分を難読化解除するために難読化解除モジュール112によって使用可能な難読化解除データを含んでもよく、そのような難読化解除データは、アプリケーション104のアプリケーション依存ソースコードに関連付けられる。
【0024】
多くの場合、アプリケーションエラー報告モジュール142によって提供されるアプリケーションエラーデータ122(例えば、スタックトレースデータ)は、アプリケーション104のためのアプリケーション特定データ、および/またはアプリケーション104に関連付けられる機密内部データを含んでもよい。加えて、アプリケーションエラーデータ122は、アプリケーション104のうちの複数の異なるアプリケーション104の実行エラーに関連付けられる変動性を有し得、なぜならば、異なるアプリケーションが、潜在的に障害のあるライブラリ依存ソースコードを、異なる文脈において利用し得るからである。さらに、アプリケーションエラーデータ122は、場合によっては、第三者ライブラリのうちの複数の異なる第三者ライブラリに対するライブラリ依存ソースコードの指示を含んでもよい。結果として、これらの場合、ライブラリエラーデータ生成部110は、第三者ライブラリ開発システム132に提供されるライブラリエラーデータ124を生成するときに、アプリケーションエラーデータ122の1つ以上の部分を除去することを決定してもよい。
【0025】
たとえば、ライブラリエラーデータ生成部110のスクラビングモジュール116は、ライブラリエラーデータ124を生成するときにアプリケーションエラーデータ122からすべてのアプリケーション依存情報(たとえば、アプリケーション依存ソースコード)を除去するよう構成されてもよい。その結果、第三者ライブラリ開発システム132は、ライブラリコンソールインターフェース134による使用または表示のために、ライブラリエラーデータ124内のいかなるそのようなアプリケーション依存情報も受信しない。
【0026】
アプリケーションエラーデータ122が、第三者ライブラリ開発システム132によって開発された第三者ライブラリ138のうちの複数の異なる第三者ライブラリのためのライブラリ依存ソースコードを含む場合、スクラビングモジュール116はまた、ライブラリエラーデータ124を生成するときに、例えば、ライブラリ帰属モジュール114が現在のエラーに帰属させる識別された第三者ライブラリに関連付けられていない任意のライブラリ依存ソースコードのような、そのようなライブラリ依存ソースコードの1つ以上の部分を除去するよう構成されてもよい。例えば、アプリケーションエラーデータ122は、第三者ライブラリの第1の第三者ライブラリ138に関連付けられる第1のライブラリ依存ソースコードを含むデータの少なくとも1つの部分を有してもよく、アプリケーションエラーデータ122はまた、第三者ライブラリの第2の第三者ライブラリ138に関連付けられる第2のライブラリ依存ソースコードを含むデータの少なくとも1つの部分も有してもよい。ライブラリ帰属モジュール114が、アプリケーションエラーデータ122に関連付けられる少なくとも1つのエラーを第1の第三者ライブラリに帰属させる場合、スクラビングモジュール116は、図7図8に示すように、ライブラリエラーデータ124を生成するときに、アプリケーションエラーデータ122(例えば、スタックトレースデータ)から第2のライブラリ依存ソースコードを除去してもよい。
【0027】
図1に示されるように、ライブラリエラーデータ生成部110は、クラスタ化モジュール118も含む。以下でさらに詳細に説明するように、様々な例では、クラスタ化モジュール118は、アプリケーション開発システム128によって開発されてもよいアプリケーション104の複数の異なるアプリケーションによって生成されたアプリケーションエラーデータ122(たとえば、スタックトレースデータ)の部分をクラスタ化するよう構成されてもよい。これらのアプリケーション104は、異なるアプリケーション開発者によって開発されてもよい。アプリケーションエラーデータ122のクラスタ化された部分は、例えば、同様の特徴または特性を有する、異なるアプリケーションエラー報告の、クラスタ化または集約されたグループを含んでもよい。クライアントコンピューティングデバイス140のアプリケーションエラー報告モジュール142はすべて、アプリケーションエラーデータ122をアプリケーションサーバシステム102に提供するよう構成され、アプリケーションエラーデータ122は、異なるアプリケーション開発者によって開発された潜在的に複数の異なるアプリケーション104の実行中に発生するエラーに関連付けられるため、アプリケーションサーバシステム102は、そのようなデータをライブラリエラーデータ124に集約およびクラスタ化することが可能であってもよい。その結果、第三者ライブラリ138を開発するライブラリ開発者は、ライブラリコンソールインターフェース134を介して、ライブラリ開発者が開発するライブラリに関するそのような集約および/またはクラスタ化された情報を閲覧してもよい。
【0028】
例えば、複数の異なるアプリケーション開発者によって開発されたアプリケーション104のうちの複数の異なるアプリケーション104が、各々、第三者ライブラリ開発システム132によって提供される第三者ライブラリ138に含まれる潜在的に障害のある第三者ライブラリを含む場合、これらのアプリケーション104のうちの1つ以上は、実行中に同様のエラーまたはクラッシュを経験し得る。結果として、エラーがそのようなアプリケーション104で発生するときに同様のアプリケーションエラーデータ122が生成され得、アプリケーションサーバシステム102のクラスタ化モジュール118は、これらのアプリケーション104の実行中に発生するエラーの各々に対応するアプリケーションエラーデータ122の部分において同様のライブラリ依存ソースコードを識別してもよい。次いで、ライブラリ帰属モジュール114は、潜在的に障害のある第三者ライブラリに関連付けられるライブラリ依存ソースコードを識別するクラスタ化されたエラーデータ(例えば、スタックトレースデータ)を含むライブラリエラーデータ124を生成してもよい。ライブラリエラー報告モジュール121は、このライブラリのライブラリ開発者がライブラリコンソールインターフェース134を使用してライブラリエラーデータ124を見ることができるように、そのようなライブラリエラーデータ124を第三者ライブラリ開発システム132に送信してもよい。このライブラリエラーデータ124はまた、このライブラリを使用するときにエラーを経験する異なるアプリケーションの数、アプリケーション実行中に使用されるクライアントコンピューティングデバイス140のタイプ、クライアントコンピューティングデバイス140のオペレーティングシステム、アプリケーションまたはライブラリバージョン番号など、開発者にとって有用であり得る追加の情報を含んでもよい。
【0029】
以下でさらに詳細に概説されるように、スクラビングモジュール116が、まず、上記で説明されるように、アプリケーション依存および/または他のライブラリ依存のソースコード情報をアプリケーションエラーデータ122から除去してもよく、クラスタ化モジュール118が、次いで、1つ以上のアプリケーションについての類似アプリケーションエラーデータ122をライブラリエラーデータ124にクラスタ化してもよい。場合によっては、異なるアプリケーションについて生成されたアプリケーションエラーデータ122の同様の特徴または特性を識別するために、クラスタ化モジュール118は、エラーが発生する異なるアプリケーション104について生成されたアプリケーションエラーデータ122の部分についてフィンガープリント識別子(たとえば、ハッシュ識別子)を生成してもよく、アプリケーションエラーデータ122のこれらの部分は、ライブラリエラーデータ124に記憶または含まれてもよい。次いで、クラスタ化モジュール118は、アプリケーションエラーデータ122のこれらの部分の一致するフィンガープリント識別子に基づいて、ライブラリエラーデータ124を生成するときにアプリケーションエラーデータ122を(例えば、リアルタイムで、アプリケーションエラーデータ122のバッチ処理を介して1日の間に1回以上)クラスタ化してもよい。例えば、上記で概説した例を使用して、潜在的に障害のある第三者ライブラリを含む複数の異なるアプリケーション104は、各々、このライブラリのライブラリ依存ソースコードの同様の部分を含むかまたは識別するアプリケーションエラーデータ122の部分に関連付けられてもよい。クラスタ化モジュール118は、アプリケーションエラーデータ122のこれらの部分について類似のまたは一致するフィンガープリント識別子を生成してもよく、フィンガープリント識別子は、ライブラリ依存ソースコードのこの部分を識別するかまたはそれに関連付けられてもよい。次いで、クラスタ化モジュール118は、ライブラリ依存ソースコードを含むかまたはそれに一致するアプリケーションエラーデータ122のこの部分をライブラリエラーデータ124内に含めてもよい。ライブラリエラーデータ124はまた、このコードを含み、エラーを経験したアプリケーションの数を示す情報を含んでもよい。
【0030】
たとえば、クラスタ化モジュール118は、ライブラリエラーデータ124に含まれるアプリケーションエラーデータの少なくとも1つの部分に関連付けられる第1のフィンガープリント識別子を決定してもよい。この少なくとも1つの部分は、ライブラリ依存ソースコードを含んでもよい。クラスタ化モジュール118はまた、第1のフィンガープリント識別子と、ライブラリエラーデータ124に含まれる、以前に生成されたライブラリエラーデータに関連付けられる第2のフィンガープリント識別子との間の一致を判定してもよく、以前に生成されたライブラリエラーデータは、少なくとも1つの第三者ライブラリに関連付けられる。この、以前に生成されたライブラリエラーデータも、クライアントコンピューティングデバイス140上でアプリケーション104の1つ以上の実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータの少なくとも1つの部分(例えば、同じまたは同様のライブラリ依存ソースコード)を含む。一致を判定することに応答して、クラスタ化モジュール118は、ライブラリエラーデータを、以前に生成されたライブラリエラーデータとクラスタ化して、クラスタ化されたライブラリエラーデータをライブラリエラーデータ124内に生成してもよく、クラスタ化されたライブラリエラーデータは、少なくとも1つの第三者ライブラリに関連付けられる。いくつかの場合において、以下でさらに詳細に説明されるように、クラスタ化されたライブラリエラーデータは、少なくとも1つのエラーによって影響を受ける少なくともいくつかのアプリケーションを示す。次いで、ライブラリエラー報告モジュール121は、クラスタ化されたライブラリエラーデータを第三者ライブラリ開発システム132に送信してもよい。
【0031】
場合によっては、クラスタ化モジュール118は、アプリケーション開発システム128のアプリケーションおよびアプリケーション開発者に関する1つ以上のアプリケーション匿名化関数を実行してもよい。例えば、アプリケーション104のうちの1つ以上に関連付けられるライブラリエラー情報をライブラリエラーデータ124内に含めるとき、クラスタ化モジュール118は、アプリケーション104のうち、ライブラリエラーデータ124に関連付けられるものに関する任意の特定情報または識別情報を含めることを控えてもよい。代わりに、クラスタ化モジュール118は、概してアプリケーションの数など、そのようなアプリケーション104に関する包括的な情報のみを含んでもよい。場合によっては、クラスタ化モジュール118は、クライアントコンピューティングデバイス140によって(例えば、アプリケーションエラー報告モジュール142によって)アプリケーションサーバシステム102に提供されるアプリケーションエラーデータ122に含まれる情報のタイプおよび詳細に応じて、アプリケーションのタイプ、1つ以上の第三者ライブラリ138の1つ以上のバージョン番号、アプリケーション情報、クライアントコンピューティングデバイス140によって実行される少なくとも1つのオペレーティングシステムの少なくとも1つのバージョン番号、クライアントコンピューティングデバイス140に関する情報(例えば、オペレーティングシステムまたはデバイスタイプ情報)などのさらなる情報を含んでもよい。加えて、以下でさらに詳細に説明されるように、クラスタ化モジュール118はまた、ライブラリエラーデータ124内に、ある期間(例えば、30日、60日、現在までのすべての累積時間など)にわたって少なくとも1つのエラーによって影響を受けるアプリケーション104の数、その期間にわたって少なくとも1つのエラーによって影響を受けるユーザの数、またはその期間にわたる少なくとも1つのエラーの発生数、のうちの1つ以上を含んでもよい。
【0032】
場合によっては、クラスタ化モジュール118は、1つ以上のアプリケーション閾値化関数を実行してもよい。例えば、クラスタ化モジュール118は、エラーを経験するアプリケーションの匿名性をさらに潜在的に保存するために、閾値数を超えるアプリケーションに影響を及ぼすエラーデータをライブラリエラーデータ124内に含むだけでもよい。ある場合には、この閾値数を超えるアプリケーションにわたって観察されるエラー(例えば、クラッシュ)のみが、第三者ライブラリ開発システム132に報告されてもよい。これらのエラーは、ライブラリエラーデータ124に関連付けられる1つ以上の第三者ライブラリのライブラリ開発者にとって特に興味深い共通の問題またはバグに関連してもよい。したがって、1つ以上の例では、アプリケーションサーバシステム102は、少なくとも1つのエラーによって影響を受けるアプリケーション104の数が閾値数を超えると判断してもよく、ライブラリエラー報告モジュール121は、少なくとも1つのエラーによって影響を受けるアプリケーションの数が閾値数を超えると判断したことに応答して、クラスタ化されたライブラリエラーデータ124を送信するようにのみ構成されてもよい。場合によっては、この閾値数は、所定数またはデフォルト数のアプリケーションであってもよい。
【0033】
本明細書で開示する技法によれば、アプリケーションデータ106、ライブラリデータ136、アプリケーションエラーデータ122、および/またはライブラリエラーデータ124などの特定のデータの記憶は、様々な例では、コンピューティングデバイスまたはシステム(例えば、クライアントコンピューティングデバイス140および/またはシステム102、128、132)が1つ以上のアプリケーションもしくはライブラリ開発者またはエンドユーザなどの1人以上のユーザから肯定的な同意または応答を受信したことに応答してのみ生じてもよい。ユーザには、本明細書で説明されるシステム、プログラム、もしくは特徴が情報の収集および/記憶を可能にし得るかどうか、およびいつそれを可能にし得るか、ならびに/または本明細書で説明されるシステム、プログラム、もしくは特徴がデバイス間のコンテンツもしくは通信の伝送を可能にし得るかどうか、およびいつそれを可能にし得るかの両方について、ユーザが選択を行うことを可能にする制御が与えられてもよい。加えて、上述のように、あるデータ(例えば、ライブラリエラーデータ124)は、アプリケーション104に関連付けられる識別可能な情報が除去されるように、記憶または使用前に1つ以上の方法で処理されてもよい。
【0034】
図2は、本開示の1つ以上の局面による、第三者ソフトウェア開発キット(SDK)開発システム232による使用のためにアプリケーションクラッシュレポートデータ222を処理するよう構成されるアプリケーションサーバシステム202を含む別の例示的な分散システム200を示すブロック図である。システム200は、システム100の一例であり、図2に示す様々な構成要素は、図1に示す同様の番号の構成要素と同様の機能を提供する。
【0035】
例えば、システム200は、1つ以上のネットワーク226を介して、1つ以上のアプリケーション開発システム228、1つ以上のSDK開発システム232、および1つ以上のクライアントコンピューティングデバイス240に通信可能に結合される、1つ以上のアプリケーションサーバシステム202を含む。アプリケーションサーバシステム202は、図1に示すアプリケーションサーバシステム102の一例であり;ネットワーク226は、ネットワーク126の一例であり;アプリケーション開発システム228は、アプリケーション開発システム128の一例であり;SDK開発システム232は、第三者ライブラリ開発システム132の一例であり;クライアントコンピューティングデバイス240は、クライアントコンピューティングデバイス140の一例である。
【0036】
図2は、第三者ライブラリが、SDK開発システム232を使用して第三者SDK開発者によって開発されるSDK238を含む例を示す。様々な例において、SDKは、インストール可能なライブラリにおいて提供されるソフトウェア開発ツールまたは構成要素の集まりを含む。図2に示されるように、SDK開発システム232は、SDK開発システム232を使用して1人以上の第三者SDK開発者によって開発されてもよい1つ以上のSDK238を含む。アプリケーション開発システム228を使用して開発されたアプリケーション204などの様々な異なるアプリケーションは、SDK238のうちの1つ以上を含んでもよい。図1の第三者ライブラリ開発システム132と同様に、図2のSDK開発システム232は、SDK238、SDKデータ236、SDKクラッシュレポートデータ224、1つ以上のSDKコンソールインターフェース234、および1つ以上の表示装置230を含む。SDKクラッシュレポートデータ224は、ライブラリエラーデータ124の一例であり、アプリケーション204の実行に関連付けられるエラーの1つ以上は、1つ以上のアプリケーションクラッシュを含む。場合によっては、SDK開発システム232によってアプリケーションサーバシステム202に提供されるSDKデータ236は、前述のように、SDK238のライブラリ依存ソースコードに関連付けられる難読化解除データを含んでもよい。アプリケーションサーバシステム202は、そのようなデータを難読化解除データ209にローカルに記憶してもよい。SDKクラッシュレポート生成部210の難読化解除モジュール212は、SDKクラッシュレポート生成部210がSDKクラッシュレポートデータ224を生成するために、そのような難読化解除データ209を使用してアプリケーションクラッシュレポートデータ222の1つ以上の部分(たとえば、ライブラリ依存ソースコード)を難読化解除してもよい。
【0037】
図1に示されるアプリケーション開発システム128と同様に、図2のアプリケーション開発システム228は、アプリケーション204と、マッピングデータ208を含む対応するアプリケーションデータ206とを含む。1人以上のアプリケーション開発者は、アプリケーション開発システム228を使用してアプリケーション204を作成してもよい。場合によっては、アプリケーション開発システム228によってアプリケーションサーバシステム202に提供されるアプリケーションデータ206も、アプリケーション204のアプリケーション依存ソースコードに関連付けられる難読化解除データを含んでもよい。アプリケーションサーバシステム202は、そのようなデータを難読化解除データ209にローカルに記憶してもよい。
【0038】
図1に示されるクライアントコンピューティングデバイス140と同様に、図2のクライアントコンピューティングデバイス240は、アプリケーション204を含む。アプリケーション204のうちの1つ以上は、クラッシュするか、またはさもなければ実行を終了する場合があり、アプリケーションクラッシュレポートデータ222は、これらのクラッシュに関連付けられるデータを含んでもよい。アプリケーションクラッシュレポートデータ222は、図1に示すアプリケーションエラーデータ122の一例である。1つ以上のアプリケーションクラッシュ報告モジュール242は、アプリケーションクラッシュレポートデータ222をアプリケーションサーバシステム202に送信するよう構成される。
【0039】
アプリケーションサーバシステム202は、アプリケーション204および対応するアプリケーションデータ206を含む。アプリケーションデータ206は、マッピングデータ208および任意選択の難読化解除データ209を含む。アプリケーションサーバシステム202はまた、SDKクラッシュレポート生成部210と、アプリケーションエラー処理モジュール220と、SDKクラッシュ報告モジュール221と、アプリケーションクラッシュレポートデータ222と、SDKクラッシュレポートデータ224とを含む(これらはそれぞれ、ライブラリエラーデータ生成部110、アプリケーションエラー処理モジュール120、ライブラリエラー報告モジュール121、アプリケーションエラーデータ122、およびライブラリエラーデータ124の例である)。
【0040】
ライブラリエラーデータ生成部110と同様に、SDKクラッシュレポート生成部210は、SDK帰属モジュール214と、スクラビングモジュール216と、クラスタ化モジュール218と、任意選択の難読化解除モジュール212とを含む。SDKクラッシュレポート生成部210は、アプリケーションクラッシュ報告モジュール242によって送信されアプリケーションサーバシステム202のアプリケーションエラー処理モジュール220によって処理されたアプリケーションクラッシュレポートデータ222に基づいてSDKクラッシュレポートデータ224を生成するよう構成される。アプリケーションクラッシュレポートデータ222は、アプリケーションクラッシュ報告モジュール242によって提供されるスタックトレースデータ223を含んでもよく、SDKクラッシュレポート生成部210によって生成されるSDKクラッシュレポートデータ224も、スタックトレースデータ225を含んでもよい。スタックトレースデータ225は、図1のライブラリエラーデータ124およびアプリケーションエラーデータ122を参照して上述したように、スタックトレースデータ223の1つ以上の部分を含んでもよい。アプリケーションサーバシステム202のSDKクラッシュ報告モジュール221は、SDKクラッシュレポートデータ224をSDK開発システム232に送信してもよく、次いでSDK開発システム232は、この表示の1つ以上の部分を表示装置230に表示してもよい。
【0041】
図3は、本開示の1つ以上の局面による、例示的なアプリケーションサーバシステム302を示すブロック図である。アプリケーションサーバシステム302は、アプリケーションサーバシステム102(図1)および/またはアプリケーションサーバシステム202(図2)の一例であってもよい。図3は、アプリケーションサーバシステム302の1つの特定の例のみを示し、アプリケーションサーバシステム302の多くの他の例が他の例において使用されてもよい。様々な場合において、アプリケーションサーバシステム302は、図3に示される構成要素のサブセットを含んでもよく、または図3に示されない追加の構成要素を含んでもよい。
【0042】
図3の例では、アプリケーションサーバシステム302は、表示装置348と、1つ以上のプロセッサ344と、1つ以上の入力構成要素346と、1つ以上の通信ユニット350と、1つ以上の出力構成要素354と、1つ以上の記憶装置358とを含む。通信チャネル347は、(物理的に、通信可能に、および/または動作可能に)構成要素間通信のために構成要素344、346、348、350、354、および/または358の各々を相互接続してもよい。いくつかの例では、通信チャネル347は、システムバス、ネットワーク接続、プロセス間通信データ構造、またはハードウェアおよび/もしくはソフトウェア間でデータを通信するための任意の他の方法を含んでもよい。
【0043】
アプリケーションサーバシステム302の1つ以上の入力構成要素346は、ユーザからの入力などの入力を受信してもよい。入力の例は、タッチ/触覚、存在感知、および音声入力である。入力構成要素346の例は、存在感知スクリーン、タッチ感知スクリーン、タッチスクリーン、マウス、キーボード、トラックパッド、音声応答システム、ビデオカメラ、マイクロフォン、または人間もしくは機械からの入力を検出するための任意の他のタイプのデバイスを含む。
【0044】
アプリケーションサーバシステム302の1つ以上の出力構成要素354は、出力を生成してもよい。出力の例は、触覚出力、音声出力、および視覚出力である。出力構成要素354の例は、存在感知スクリーン、タッチ感知スクリーン、タッチスクリーン、サウンドカード、ビデオグラフィックアダプタカード、スピーカ、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、マイクロ発光ダイオード(マイクロLED)ディスプレイ、アクティブマトリクス有機発光ダイオード(AMOLED)ディスプレイ、触覚デバイス、または人間もしくは機械への出力を生成するための任意の他のタイプのデバイスを含む。
【0045】
アプリケーションサーバシステム302の1つ以上の通信ユニット350は、1つ以上のネットワーク(例えば、1つ以上の有線および/または無線ネットワーク)上でネットワーク信号を送信および/または受信することによって、1つ以上のネットワークを介して外部デバイスと通信してもよい。たとえば、アプリケーションサーバシステム302は、セルラー無線ネットワークなどの無線ネットワーク上で無線信号を送信および/または受信するために通信ユニット350を使用してもよい。同様に、通信ユニット350は、全地球測位システム(GPS)ネットワークなどの衛星ネットワーク上で衛星信号を送信および/または受信してもよい。通信ユニット350の例は、ネットワークインターフェースカード(例えば、イーサネット(登録商標)カードなど)、光送受信機、無線周波数送受信機、GPS受信機、または情報を送信および/もしくは受信することができる任意の他のタイプのデバイスを含む。通信ユニット350の他の例は、短波無線機、セルラーデータ無線機、ワイヤレスイーサネットネットワーク無線機、およびユニバーサルシリアルバス(USB)コントローラを含んでもよい。
【0046】
場合によっては、アプリケーションサーバシステム302は、表示装置348を含んでもよい。いくつかの例では、表示装置348は、出力構成要素354を参照して上述したように、触覚、音声、または視覚刺激を使用してユーザに出力を提供してもよい。たとえば、表示装置348は、出力構成要素354を参照して説明されたように、表示またはビデオ出力を与えてもよい。表示装置348はまた、入力構成要素346を参照して上述したような入力機能を提供してもよい。場合によっては、アプリケーションサーバシステム302は、表示装置348を含まなくてもよい。
【0047】
1つ以上の記憶装置358は、アプリケーションサーバシステム302の動作中に処理するための情報を記憶してもよい。いくつかの例では、記憶装置358は一時メモリを含み、これは、記憶装置358の主目的が長期記憶ではないことを意味する。アプリケーションサーバシステム302上の記憶装置358は、揮発性メモリとして情報の短期記憶のために構成されてもよく、したがって、電源がオフにされた場合、記憶された内容を保持しない。揮発性メモリの例は、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、および当技術分野で知られている他の形態の揮発性メモリを含む。
【0048】
記憶装置358は、いくつかの例では、1つ以上のコンピュータ可読記憶媒体を含む。記憶装置358は、揮発性メモリよりも大量の情報を記憶するよう構成されてもよい。記憶装置358はさらに、情報の長期記憶のために不揮発性メモリ空間として構成されてもよく、電源オン/オフサイクル後に情報を保持してもよい。不揮発性メモリの例は、磁気ハードディスク、光ディスク、フロッピー(登録商標)ディスク、フラッシュメモリ、または電気的プログラマブルメモリ(EPROM)もしくは電気的消去可能プログラマブル(EEPROM)メモリの形態を含む。記憶装置358は、図1図2に示す同様の番号の構成要素またはモジュールの例を含んでもよい、アプリケーション304、アプリケーションデータ306、マッピングデータ308、ライブラリエラーデータ生成部310、アプリケーションエラー処理モジュール320、ライブラリエラー報告モジュール321、アプリケーションエラーデータ322、およびライブラリエラーデータ324のうちの1つ以上に関連付けられるプログラム命令および/またはデータを記憶してもよい。ライブラリエラーデータ生成部310は、難読化解除モジュール312と、ライブラリ帰属モジュール314と、スクラビングモジュール316と、クラスタ化モジュール318とを含む。
【0049】
1つ以上のプロセッサ344は、アプリケーションサーバシステム302内で機能を実現し、および/または命令を実行してもよい。たとえば、アプリケーションサーバシステム302上のプロセッサ344は、アプリケーション304、ライブラリエラーデータ生成部310(難読化解除モジュール312、ライブラリ帰属モジュール314、スクラビングモジュール316、およびクラスタ化モジュール318を含む)、アプリケーションエラー処理モジュール320、および/またはライブラリエラー報告モジュール321の機能を実行する、記憶装置358によって記憶された命令を受信し、実行してもよい。プロセッサ344によって実行されるこれらの命令は、アプリケーションサーバシステム302に、プログラム実行中に記憶装置358内に情報を記憶させてもよい。
【0050】
図4は、本開示の1つ以上の局面による、ライブラリ依存ソースコードとアプリケーション依存ソースコードとの両方を含む例示的なスタックトレースデータ423を示す概念図である。スタックトレースデータ423は、クライアントコンピューティングデバイス240によってアプリケーションサーバシステム202に提供されるアプリケーションクラッシュレポートデータ222に含まれてもよい、図2に示されるスタックトレースデータ223の一例である。スタックトレースデータ423は、例えば図2に示すアプリケーション204の1つの実行中に発生した少なくとも1つのエラーに関連付けられる。例示のみを目的として、図4図8に示す関連する例について、図2に示すシステム200を参照して説明する。
【0051】
図4に示すように、スタックトレースデータ423は、スタックトレースデータ423に関連付けられる1つ以上のエラーを識別するエラー識別子(たとえば、例外識別子)460を含む。スタックトレースデータ423はまた、複数のコード部分、つまり、ライブラリ依存ソースコード461、アプリケーション依存ソースコード462、ライブラリ依存ソースコード463を含む。スタックトレースデータ423は、呼び出し順序464を有するネスト化された関数呼び出しを表すことができ、これは、たとえば、プログラムローダから、アプリケーション(例えば、図2に示すアプリケーション204である)のうちの1つ以上のそれぞれの実行中にクラッシュが発生した場所に至っていてもよい。起こり得るクラッシュに至ったかもしれない関数呼び出しの呼び出し順序464は、図4の例において下から上である(例えば、ライブラリ依存ソースコード463、アプリケーション依存ソースコード462、ライブラリ依存ソースコード461の順である)。
【0052】
様々な例では、図4に示されるスタックトレースデータ423の各ラインは、スタックトレースのフレームまたはコード位置と呼ばれ得る。場合によっては、スタックトレースの各フレームまたはコード位置は、スタックトレースのそのフレームのソースコード(例えば、ライブラリ依存またはアプリケーション依存のソースコード)に関連付けられる情報を示してもよい。例えば、この情報は、ライブラリ名または識別子を含んでもよい。いくつかの例では、名前または識別子は、パッケージ名、名前空間名、モジュール名などを含んでもよい。いくつかの例では、各フレームまたはコード位置についての情報は、別々に、または任意の組合せで、クラス名、メソッド名、および/または関数名のうちの1つ以上などの追加の情報を含んでもよい。場合によっては、スタックトレースの各フレームまたはコード位置は、さらに、ソースコードが含まれるファイルのファイル名、および/またはそのフレームに対するソースコードのライン番号を示してもよい。
【0053】
アプリケーション依存ソースコード462は、例えばアプリケーション204のうちのあるアプリケーションに特有のコードに関連付けられる。ライブラリ依存ソースコード461は、例えば、図2に示すSDK238の第1のSDK(「examplehttp」と名付けられる)からのコードに関連付けられる。ライブラリ依存ソースコード463は、例えば、SDK238の「OS.app」と命名された第2のSDKからのコードに関連付けられ、ここで、「OS」は、この特定の例ではオペレーティングシステムの名前を表してもよい。
【0054】
図5は、本開示の1つ以上の局面による、アプリケーションのライブラリ依存ソースコードの1つ以上の部分と、アプリケーションの実行中にライブラリ依存ソースコードがロードされる少なくとも1つの第三者ライブラリとの間のマッピングを提供する例示的なマッピングデータ508を示す概念図である。マッピングデータ508は、アプリケーション開発システム228によってアプリケーションサーバシステム202に提供されるアプリケーションデータ206に含まれる、図2に示されるマッピングデータ208の一例であってもよい。そのようなマッピングデータの使用は、様々な場合において、SDKクラッシュレポート生成部210が、スタックトレースデータ423などのスタックトレースデータがアプリケーション204内のアプリケーションの任意のライブラリコードをトラバースするかどうかを判断することを可能にして、SDK帰属モジュール214がクラッシュをそのようなコードに対応するライブラリに帰属させてもよいようにしてもよい。
【0055】
場合によっては、アプリケーション開発者および/またはアプリケーション開発システム228は、図2に示されるアプリケーションサーバシステム202上に展開される開発されたアプリケーション204のそれぞれに関連付けられるマッピングデータ508を開発または作成してもよい。アプリケーション開発システム228は、SDKクラッシュレポート生成部210による使用のために、そのようなマッピングデータ508(これは、図2に示すマッピングデータ208の一例である)をアプリケーションサーバシステム202に提供してもよい。場合によっては、アプリケーションサーバシステム202は、マッピングデータ508の1つ以上の部分を、1つ以上の外部ソースまたはリポジトリ(例えば、アプリケーション204に関するそのような情報を提供する公的にアクセス可能なリポジトリ)から取得してもよい。
【0056】
図5に示すように、マッピングデータ508は、アプリケーション204のうちのあるアプリケーションのライブラリ依存ソースコードの1つ以上の部分と、アプリケーションの実行中にライブラリ依存ソースコードがロードされる少なくとも1つの第三者ライブラリ(たとえば、SDK)との間のマッピングを提供する。図5では、ライブラリ依存ソースコードの識別された部分またはパターンと第1のSDK(「examplehttp」)との間の例示的なマッピングが示されている。
【0057】
例えば、マッピングデータ508は、アプリケーションのライブラリ依存ソースコードの第1の部分またはパターン570をこの第1のSDKのSDK識別子571にマッピングする。図5に示すように、パターン570は、パッケージ名が「okttp3」であり、クラス名が「ExampleHttpClient」であるライブラリ依存ソースコードを識別する。パターン570中の「*」ワイルドカード文字は、このパッケージおよびクラス名を伴うライブラリ依存ソースコード中の任意の関数/メソッドがSDK識別子571にマッピングされることを示す。マッピングデータ508は、ライブラリ依存ソースコードのパターン570を、SDK識別子571を有する第1のSDKにマッピングする。SDK識別子571は、この第1のSDK(「examplehttp」)を識別し、SDK識別子571は、SDK名およびバージョン番号(「4.8.1」)も識別してもよい。
【0058】
マッピングデータ508はまた、ライブラリ依存ソースコードの第2の部分またはパターン572を第1のSDKのSDK識別子571にマッピングする。パターン572は、パッケージ名「examplehttp」およびクラス名「ExampleHttpClient$Builder」を有するライブラリ依存ソースコードを識別する。パターン572中の「*」ワイルドカード文字は、このパッケージおよびクラス名を伴うライブラリ依存ソースコード中の任意の関数/メソッドがSDK識別子571にマッピングされることを示す。
【0059】
マッピングデータ508はまた、ライブラリ依存ソースコードの第3の部分またはパターン573を第1のSDKのSDK識別子571にマッピングする。パターン573は、パッケージ名が「examplehttp」であり、クラス名が「OSPlatform」であるプラットフォームコードに関連付けられるライブラリ依存ソースコードを識別する。パターン573中の「*」ワイルドカード文字は、このパッケージおよびクラス名を伴うライブラリ依存ソースコード中の任意の関数/メソッドがSDK識別子571にマッピングされることを示す。
【0060】
マッピングデータ508はまた、ライブラリ依存ソースコードの第4の部分またはパターン574を第1のSDKのSDK識別子571にマッピングする。パターン574は、パッケージ名「examplehttp」を有し、クラス名「Platform」を有するプラットフォームコードに関連付けられるライブラリ依存ソースコードを識別する。パターン574中の「*」ワイルドカード文字は、このパッケージおよびクラス名を伴うライブラリ依存ソースコード中の任意の関数/メソッドがSDK識別子571にマッピングされることを示す。したがって、図5の例では、ライブラリ依存ソースコードの部分またはパターン570、571、572、573のすべてが、同じ第1のSDK(「examplehttp」)にマッピングされる。
【0061】
図6は、本開示の1つ以上の局面による、1つ以上のSDK開発システム232に提供されるSDKクラッシュレポートに含まれる例示的なスタックトレースデータ625を示す概念図である。様々な例では、SDKクラッシュレポート生成部210は(たとえば、SDK帰属モジュール214を使用して)、図6に示すスタックトレースデータ625を含むSDKクラッシュレポートデータ224を生成してもよい。次いで、SDKクラッシュ報告モジュール221は、表示装置230への出力のために、このSDKクラッシュレポートデータ224をSDK開発システム232に送信してもよい。
【0062】
様々な例において、前述のように、SDK帰属モジュール214は、SDK238に含まれる1つ以上のSDKにクラッシュを帰属させてもよい。これらのSDKは、このクラッシュの原因であるライブラリ依存ソースコードを含んでもよい。SDK帰属モジュール214は、スタックトレースデータ423(図4)およびマッピングデータ(図5に示すマッピングデータ508を含む)に基づいて、アプリケーションのライブラリ依存ソースコードとスタックトレースデータ423の少なくとも1つの部分との間の一致を判定してもよい。たとえば、マッピングデータ508およびスタックトレースデータ423に基づいて、SDK帰属モジュール214は、第1のSDK(「examplehttp」)を、クラッシュの考えられ得る原因として識別してもよい。加えて、スタックトレースデータ423と、図5に示されていない第2のSDK(「OS.app」)に関連する追加のマッピングデータとに基づいて、SDK帰属モジュール214は、第2のSDKを、クラッシュの、別の、考えられ得る原因として識別してもよい。したがって、SDK帰属モジュール214は、これらの第1および第2のSDKを、クラッシュを引き起こした可能性があるSDK候補678として識別する。いくつかの例では、そのようなSDK候補のうちの1つ以上は、任意の所与のクラッシュに関与してもよい。第1のSDKは、図4に示されるスタックトレースデータ423の最上部に位置するので、SDK帰属モジュール214は、場合によっては、第1のSDKを、第2のSDKに関連してクラッシュに関与する、第1の、または潜在的により強い候補として、ランク付けしてもよい。
【0063】
これらのSDK候補678を識別するために、様々な例では、SDK帰属モジュール214は、マッピングデータを分析し、そのようなデータ中の部分またはパターン(例えば、マッピングデータ508内のパターン570、572、573、574)を、クライアントコンピューティングデバイス240から受信されたスタックトレースデータ423のフレームまたはコード位置に含まれるソースコードと照合することを試みてもよい。1つ以上の一致を見つけると、SDK帰属モジュール214は、次いで、マッピングデータ中のライブラリ識別子に対応する第三者ライブラリ(例えば、マッピングデータ508内のSDK識別子571に関連付けられる第1のSDK「examplehttp」)を、クラッシュの潜在的な原因であり得るライブラリとして識別してもよい。
【0064】
1つ以上の特定の非限定的な例では、SDK帰属モジュール214は、以下の擬似コードに基づいてSDK候補678を識別するよう、そのようなプロセスを実行してもよい:
set<library> matched_libraries = {};
for (string code_location in input_stack_trace.code_locations) {
for (string library_pattern in mapping.library_patterns) {
if (library_pattern.matches(code_location)) {
matched_libraries.add(library_pattern.library);
}
}
}
この擬似コードでは、input_stack_traceはスタックトレースデータ423に対応してもよく、input_stack_trace.code_locationsはスタックトレースデータ423の各フレームまたはコード位置に対応する。擬似コードのmapping.library_patternsは、マッピングデータ508のパターン570、572、573、575に対応してもよい。上述のように、SDK帰属モジュール214は、マッピングデータを分析し、そのようなデータ中の部分またはパターン(例えば、マッピングデータ508内のパターン570、572、573、574)を、クライアントコンピューティングデバイス240から受信されるスタックトレースデータ423のフレームまたはコード位置中に含まれるソースコードと照合することを試みてもよい。そのような一致を見つけると、SDK帰属モジュール214は、各識別されたライブラリ(例えば、ライブラリ識別子)をmatched_librariesのセット(例えば、SDK候補678)に追加してもよい。
【0065】
照合動作を実行した後、SDKクラッシュレポート生成部210は、第1のSDK(「examplehttp」)および第2のSDK(「OS.app」)に関連付けられ、SDKクラッシュレポートデータ224に含まれる、図6に示されるスタックトレースデータ625を生成してもよい。スタックトレースデータ625は、スタックトレースデータ423の1つ以上の部分を含んでもよい。SDKクラッシュ報告モジュール221は、スタックトレースデータ625を含むこのSDKクラッシュレポートデータ224をSDK開発システム232に送信してもよい。
【0066】
例えば、図6に示されるように、スタックトレースデータ625は、エラー識別子660と、SDK238の第1のSDK(「examplehttp」)に関連付けられるライブラリ依存ソースコード661と、第2のSDK(「OS.app」)に関連付けられるライブラリ依存ソースコード663とを含む。エラー識別子660は、図4のスタックトレースデータ423のエラー識別子460に対応し、ライブラリ依存ソースコード661は、ライブラリ依存ソースコード461に対応し、ライブラリ依存ソースコード663は、ライブラリ依存ソースコード463に対応する。
【0067】
しかしながら、図6に示されるように、スタックトレースデータ625は、アプリケーション依存ソースコード462を含まない。代わりに、スタックトレースデータ625は、汎用または一様なプレースホルダ676を含む。図6は、プレースホルダ676として1つ以上の「-」または「_」文字を示すが、他の例では、任意の他の形態の記号または英数字(たとえば、「<private>」)を使用してもよい。上述したように、様々な場合において、スクラビングモジュール216は、図6に示されるスタックトレースデータ625などのライブラリエラーデータを生成するときにスタックトレースデータ423から特定の情報を除去するよう構成されてもよい。
【0068】
たとえば、SDK候補678を識別した後、スクラビングモジュール216は、クラッシュしたアプリケーションのアイデンティティまたは内部詳細に関連付けられる機密または特定の情報をワイプしてもよい。したがって、様々な場合において、スクラビングモジュール216は、スタックトレースデータ625を生成する際にスタックトレースデータ423からすべてのアプリケーション依存情報(例えば、アプリケーション依存ソースコード462)を除去し、この情報をプレースホルダ676に置き換えるよう構成されてもよい。その結果、SDK開発システム232は、SDKコンソールインターフェース234による使用または表示のために、SDKクラッシュレポートデータ224内のいかなるそのようなアプリケーション依存情報も受信しない。
【0069】
SDKクラッシュレポート生成部210(例えば、SDK帰属モジュール214および/またはクラスタ化モジュール218を使用する)は、場合によっては、スタックトレースデータ625の内容に関連付けられる固有のハッシュ識別子などの固有のフィンガープリント識別子(ID)677を生成するよう構成されてもよい。フィンガープリントID677は、以下でさらに詳細に説明されるように、スタックトレースデータ625を、他のアプリケーションクラッシュに関連付けられてもよい他の同様のスタックトレースデータと集約および/またはクラスタ化するために使用されてもよい。SDKクラッシュ報告モジュール221は、スタックトレースデータ625を含むこのSDKクラッシュレポートデータ224を、SDK238に含まれる第1のSDK(「examplehttp」)および第2のSDK(「OS.app」)に関連付けられるSDK開発システム232に送信してもよい。次いで、これらの第1および/または第2のSDKのSDK開発者は、SDKコンソールインターフェース234を使用してSDKクラッシュレポートデータ224を検討してもよい。
【0070】
しかしながら、他の場合には、スクラビングモジュール216は、スタックトレースデータ625から、他のSDKに関連付けられる情報を除去するようにさらに構成されてもよい。したがって、SDK帰属モジュール214が第1および第2のSDKをSDK候補678として識別した図6の例では、スクラビングモジュール216は、第1および第2のSDKに関連付けられる、スタックトレースデータの2つの別個のインスタンスを生成してもよい。第1のスタックトレースデータは、第1のSDKに関連付けられるライブラリ依存ソースコードのみを含んでもよく、第2のスタックトレースデータは、第2のSDKに関連付けられるライブラリ依存ソースコードのみを含んでもよい。第1および第2のスタックトレースデータの両方が、SDKクラッシュレポートデータ224に記憶されてもよい。SDKクラッシュ報告モジュール221は、第1のスタックトレースデータを含むSDKクラッシュレポートデータ224の部分を、SDK238の第1のSDKを開発するSDK開発システム232の1つ以上に送信してもよく、SDKクラッシュ報告モジュール221は、第2のスタックトレースデータを含むSDKクラッシュレポートデータ224の部分を、第2のSDKを開発するSDK開発システム232の1つ以上に送信してもよい。次いで、これらの第1および第2のSDKのそれぞれのSDK開発者は、アプリケーションクラッシュに関連付けられるそれぞれの第1および第2のスタックトレースデータを検討してもよい。図7図8は、そのような第1および第2のスタックトレースデータの例を提供する。この手法を利用することによって、スクラビングモジュール216は、第1のスタックトレースデータを第1のSDKの開発者に提供するときに第2のSDKに関するSDK情報を除去し、第2のスタックトレースデータを第2のSDKの開発者に提供するときに第1のSDKに関するSDK情報を除去するよう構成される。
【0071】
図7は、本開示の1つ以上の局面による、1つ以上のSDK開発システム232に提供されるSDKクラッシュレポート(たとえば、SDKクラッシュレポートデータ224)に含まれるスタックトレースデータ725の別の例を示す概念図である。図4のスタックトレースデータ423が、第三者ライブラリ開発システム232(図2)によって開発された第三者ライブラリ238のうちの複数の異なる第三者ライブラリのためのライブラリ依存ソースコードを含む場合、スクラビングモジュール216は、スタックトレースデータ725を生成するときに、ライブラリ帰属モジュール214が現在のエラーに帰属させる識別された第三者ライブラリに関連付けられていない任意のライブラリ依存ソースコードのような、そのようなライブラリ依存ソースコードの1つ以上の部分を除去するよう構成されてもよい。
【0072】
したがって、図7の例では、スクラビングモジュール216は、アプリケーション依存ソースコード462と、第1の識別されたSDK(ライブラリ)候補「examplehttp」に関連付けられていない任意のライブラリ依存ソースコードとを含む、クライアントコンピューティングデバイス240によって提供されるスタックトラックデータ423のすべてのフレームを除去する。したがって、スクラビングモジュール216は、スタックトレースデータ725を生成または更新するときに、第2の識別されたSDK(ライブラリ)候補「OS.app」に関連付けられるライブラリ依存ソースコード463を除去する。図7に示すように、スタックトレースデータ725は、エラー識別子760と、第1のSDK候補「examplehttp」に関連付けられるライブラリ依存ソースコード761とを含む。クラスタ化モジュール218はまた、以下でより詳細に説明されるように、スタックトレースデータ725を他のアプリケーションクラッシュに関連付けられる他の同様のスタックトレースデータとクラスタ化するために使用されてもよい、スタックトレースデータ725のための固有フィンガープリント識別子777を生成してもよい。
【0073】
図8は、本開示の1つ以上の局面による、1つ以上のSDK開発システム232に提供されるSDKクラッシュレポート(たとえば、SDKクラッシュレポートデータ224)に含まれるスタックトレースデータ825の別の例を示す概念図である。図4のスタックトレースデータ423が、第三者ライブラリ開発システム232(図2)によって開発された第三者ライブラリ238のうちの複数の異なる第三者ライブラリのためのライブラリ依存ソースコードを含む場合、スクラビングモジュール216は、スタックトレースデータ825を生成するときに、ここでも、ライブラリ帰属モジュール214が現在のエラーに帰属させる識別された第三者ライブラリに関連付けられていない任意のライブラリ依存ソースコードのような、そのようなライブラリ依存ソースコードの1つ以上の部分を除去するよう構成されてもよい。
【0074】
したがって、図8の例では、スクラビングモジュール216は、アプリケーション依存ソースコード462と、第2の識別されたSDK(ライブラリ)候補「OS.app」に関連付けられていない任意のライブラリ依存ソースコードとを含む、クライアントコンピューティングデバイス240によって提供されるスタックトラックデータ423のすべてのフレームを除去する。したがって、スクラビングモジュール216は、スタックトレースデータ825を生成または更新するときに、第1の識別されたSDK(ライブラリ)候補「examplehttp」に関連付けられるライブラリ依存ソースコード463を除去する。図8に示すように、スタックトレースデータ825は、エラー識別子860と、第2のSDK候補「OS.app」に関連付けられるライブラリ依存ソースコード863とを含む。クラスタ化モジュール218はまた、スタックトレースデータ825のための固有のフィンガープリント識別子877を生成してもよく、これは、スタックトレースデータ825を、他のアプリケーションクラッシュに関連付けられる他の同様のスタックトレースデータとクラスタ化するために使用されてもよい。
【0075】
その結果、スクラビングモジュール216は、これらの第1および第2のSDKに関連付けられる、スタックトレースデータの2つの別個のインスタンスを生成してもよい。第1のスタックトレースデータは、第1のSDKに関連付けられるライブラリ依存ソースコードのみを含んでもよく、第2のスタックトレースデータは、第2のSDKに関連付けられるライブラリ依存ソースコードのみを含んでもよい。1つ以上の特定の非限定的な例では、スクラビングモジュール216は、以下の擬似コードと同様に、または以下の擬似コードに基づいて、SDK開発システム232に送信されるSDKクラッシュレポートデータ224に含めるために、異なる候補SDKに対してそのようなスタックトレースデータを生成するためのプロセスを実行してもよい:
list<stack_trace> library_stack_traces = [];
for (library in matched_libraries) {
library_stack_trace = library_stack_traces.add_new();
last_matched = false;
for (code_location in input_stack_trace.code_locations) {
if (library.matches(code_location) {
last_matched = true;
library_stack_trace.append(code_location)
} else if (last_matched) {
last_matched = false;
library_stack_trace.append('_')
}
}
}
この擬似コードでは、matched_librariesは、それらのSDK候補678、すなわち、第1のSDK(「examplehttp」)および第2のSDK(「OS.app」)である。この擬似コードは、library_stack_traceのリスト内で、第1および第2のSDKのために、スタックトレースデータの、別個の第1および第2のインスタンスを作成する。例えば、スクラビングモジュール216は、第1のライブラリスタックトレースデータ725(library_stack_trace)を作成し、それを、入力スタックトレースデータ423(input_stack_trace)から生成されるスタックトレースデータ725内の第1のSDKのためのライブラリ依存ソースコード761を含む、library_stack_traceのリストに追加する。スクラビングモジュール216は、スタックトレースデータ423の各フレームまたはcode_locationをトラバースして、第1のSDKのライブラリ依存ソースコード461を識別する。そのようなコードを識別すると、スクラビングモジュール216は、このコードをライブラリ依存ソースコード761としてリスト内の第1のライブラリスタックトレースデータ725(library_stack_trace)に追加または付加する。任意の他のライブラリ依存ソースコード(例えば、ライブラリ依存ソースコード463)または任意のアプリケーション依存ソースコード(例えば、アプリケーション依存ソースコード462)について、スクラビングモジュール216は、図7に示すようにこのコードをスタックトレースデータ725内で完全に除去するか、またはそのようなコードを1つ以上の一様なプレースホルダ(たとえば、「_」文字)(図7には図示せず)で置き換える。
【0076】
同様に、スクラビングモジュール216は、第2のライブラリスタックトレースデータ825(library_stack_trace)を作成し、それを、入力スタックトレースデータ423(input_stack_trace)から生成されるスタックトレースデータ825内の第2のSDKのためのライブラリ依存ソースコード863を含む、library_stack_traceのリストに追加する。スクラビングモジュール216は、スタックトレースデータ423の各フレームまたはcode_locationをトラバースして、第1のSDKのライブラリ依存ソースコード463を識別する。そのようなコードを識別すると、スクラビングモジュール216は、このコードをライブラリ依存ソースコード863としてリスト内の第1のライブラリスタックトレースデータ825(library_stack_trace)に追加または付加する。任意の他のライブラリ依存ソースコード(例えば、ライブラリ依存ソースコード461)または任意のアプリケーション依存ソースコード(例えば、アプリケーション依存ソースコード462)について、スクラビングモジュール216は、図8に示すように、このコードをスタックトレースデータ825内で完全に除去するか、またはそのようなコードを1つ以上の一様なプレースホルダ(たとえば、「_」文字)(図8には図示せず)で置き換える。
【0077】
上述のように、クラスタ化モジュール218はまた、スタックトレースデータ725のための固有のフィンガープリント識別子777を生成してもよく、これは、スタックトレースデータ725を、他のアプリケーションクラッシュに関連付けられる他の同様のスタックトレースデータとクラスタ化するために使用されてもよい。クラスタ化モジュール218は、同様に、スタックトレースデータ825のための固有のフィンガープリント識別子877を生成してもよく、これは、スタックトレースデータ825を、他のアプリケーションクラッシュに関連付けられる他の同様のスタックトレースデータとクラスタ化するために使用されてもよい。クラスタ化モジュール218は、様々な場合において、フィンガープリント識別子777および877を(例えば、SDKクラッシュレポートデータ224において、または関連付けられるデータストアにおいて)記憶してもよい。
【0078】
スタックトレースデータ725および825の各々は、それぞれ識別されたフィンガープリント識別子777、877に基づいて、処理され、同様のデータまたはレポートのグループにクラスタ化されてもよい。クラスタ化モジュール218を使用して1つ以上のクラスタ化動作を実行することによって、SDKクラッシュレポート生成部210は、アプリケーション開発システム228上で任意の数の異なるアプリケーション開発者によって開発された任意の数の異なるアプリケーション204に関連付けられるアプリケーションクラッシュレポートデータ222を処理し、次いで、これらのアプリケーション204の実行中に発生した同様のエラーおよびクラッシュを集約およびクラスタ化するよう構成されてもよい。次いで、SDKクラッシュ報告モジュール221は、特定の識別されたSDK238に関連付けられるクラスタ化されたSDKクラッシュレポートデータ224をSDK開発システム232に出力してもよく、そのデータは、次いで、それぞれのSDK開発者による検討のために、SDKコンソールインターフェース234を介して表示装置230に表示されてもよい。
【0079】
様々な場合において、そのような集約またはクラスタ化を実行するために、SDKクラッシュレポート生成部210および/またはSDKクラッシュ報告モジュール221は、SDKクラッシュレポートデータ224のスタックトレースデータ225内の現在のスタックトレースデータおよび履歴スタックトレースデータを、そのようなスタックトレースデータにそれぞれ関連付けられるフィンガープリント識別子に従ってインデックス付けまたはグループ化して記憶してもよい。したがって、一例として、SDKクラッシュレポート生成部210は、スタックトレースデータ225にスタックトレースデータ725を記憶してもよい。クラスタ化モジュール218はまた、SDKクラッシュレポートデータ224内に、スタックトレースデータ725をもたらした特定のクラッシュに関連付けられる、アプリケーションクラッシュ報告モジュール242から受信されたアプリケーションクラッシュレポートデータ222の1つ以上の他の部分を記憶してもよい。たとえば、アプリケーションクラッシュレポートデータ222が、アプリケーション204によって使用されるオペレーティングシステムのバージョン番号情報、アプリケーション204に含まれる任意のSDKのバージョン番号、クライアントコンピューティングデバイス240のデバイスタイプなどを含む場合、クラスタ化モジュール218は、そのような情報をSDKクラッシュレポートデータ224内に記憶してもよい。場合によっては、クラスタ化モジュール218はまた、マッピングデータ208からSDKバージョン情報を取得してもよい。SDKクラッシュレポートデータ224およびスタックトレースデータ225内のそのような情報のすべては、フィンガープリント識別子777に従ってインデックス付けまたはグループ化されてもよい。場合によっては、クラスタ化モジュール218はまた、SDKバージョン情報および/またはSDK名情報をマッピングデータ208から取得してもよく、次いで、SDKクラッシュレポートデータ224に記憶してもよい。
【0080】
同様に、SDKクラッシュレポート生成部210は、スタックトレースデータ825をスタックトレースデータ225に記憶してもよい。クラスタ化モジュール218はまた、SDKクラッシュレポートデータ224内に、スタックトレースデータ725およびスタックトレース825(例えば、アプリケーション204によって使用されるオペレーティングシステムのバージョン番号、アプリケーション204に含まれる任意のSDKのバージョン番号、クライアントコンピューティングデバイス240のデバイスタイプなど)の両方の生成をもたらした特定のクラッシュに関連付けられる、アプリケーションクラッシュ報告モジュール242から受信されたアプリケーションクラッシュレポートデータ222の1つ以上の他の部分を記憶してもよい。SDKクラッシュレポートデータ224およびスタックトレースデータ225内のこの情報は、さらに、フィンガープリント識別子877に従ってインデックス付けまたはグループ化されてもよい。さらに、以下でさらに詳細に説明するように、クラスタ化モジュール218はまた、SDKクラッシュレポートデータ224内に、ある期間(例えば、30日、60日、現在までのすべての累積時間など)にわたって少なくとも1つのエラーによって影響を受けるアプリケーション204の数、その期間にわたって少なくとも1つのエラーによって影響を受けるユーザの数、またはその期間にわたる少なくとも1つのエラーの発生数、のうちの1つ以上を含んでもよい。
【0081】
経時的に、SDKクラッシュレポート生成部210は、アプリケーション204の実行中に遭遇したさらなるエラーまたはクラッシュに関連付けられるさらなるアプリケーションクラッシュレポートデータ222を処理してもよい。これらは、アプリケーション開発システム228を使用して1人以上の異なるアプリケーション開発者によって開発されたアプリケーション204の1つ以上を含んでもよい。SDKクラッシュレポート生成部210は、これらのエラーまたはクラッシュに関連付けられる追加のスタックトレースデータを生成してもよい。クラスタ化モジュール218は、そのようなスタックトレースデータのための対応するフィンガープリント識別子を生成してもよく、これらのフィンガープリント識別子を、SDKクラッシュレポートデータ224に以前に記憶されたスタックトレースデータおよび他のデータに関連付けられる、以前に生成されたフィンガープリント識別子と比較してもよい。フィンガープリント識別子の一致がある場合、クラスタ化モジュール218は、現在のエラーまたはクラッシュデータを、以前に収集されたデータと集約またはクラスタ化するために、1つ以上のクラスタ化動作を実行してもよく、そのようなクラスタ化は、SDK238のうち同様のものを利用する1つ以上のアプリケーション204において経時的に発生するエラーまたはクラッシュ間の類似性を示してもよい。次いで、SDKクラッシュ報告モジュール221は、SDKクラッシュレポートデータ224をSDK開発システム232に出力して、個々のSDK開発者が、彼らが開発した、そして1つ以上のアプリケーションエラーの原因であり得る、SDK238のうちの1つ以上に対応する、SDKクラッシュレポートデータ224の部分を、SDKコンソールインターフェース234を介して閲覧してもよいようにしてもよい。
【0082】
クラスタ化モジュール218は、実行されたクラスタ化動作に基づいて、SDKクラッシュレポートデータ234内に様々な形態のクラスタ化情報を記憶してもよい。例えば、クラスタ化モジュール218は、ある期間にわたる同様のエラー(例えば、レポート、問題、クラッシュ)の発生数、同様のエラーを経験したアプリケーション(および/もしくはアプリケーションのユーザ)の数、エラーに関連付けられるライブラリ(例えば、SDK)の名前、ライブラリバージョン、エラーが発生したコンピューティングデバイスのオペレーティングシステムおよび/もしくはオペレーティングシステムバージョン、ならびに/またはエラーが発生したクライアントコンピューティングデバイスのタイプ、の情報のうちの1つ以上を、クラスタ化されたデータと関連付けて、SDKクラッシュレポートデータ234内に含めてもよい。SDKクラッシュレポートデータ224内のそのような集約および/またはクラスタ化されたデータを受信すると、SDK開発システム232は、SDKコンソールインターフェース234を使用して、そのようなデータの1つ以上の部分を表示装置230に出力してもよく、それは、問題のSDKのそれぞれのSDK開発者によって検討されてもよい。図9図10は、そのような出力の例を提供する。
【0083】
上述したように、場合によっては、クラスタ化モジュール218は、アプリケーション開発システム228のアプリケーションおよびアプリケーション開発者に関して1つ以上のアプリケーション匿名化関数を実行してもよい。たとえば、アプリケーション104のうちの1つ以上に関連付けられるSDKクラッシュレポートデータ224内にエラー情報(たとえば、クラスタ化情報)を含めるとき、クラスタ化モジュール218は、アプリケーション204のうち、SDKクラッシュレポートデータ224に関連付けられるものに関する、任意の特定情報または識別情報を含めることを控えてもよい。代わりに、クラスタ化モジュール218は、概してアプリケーションの数など、そのようなアプリケーション204に関する包括的な情報のみを含んでもよい。場合によっては、クラスタ化モジュール218は、クライアントコンピューティングデバイス240によって(例えば、アプリケーションエラー報告モジュール242によって)アプリケーションサーバシステム202に提供されるアプリケーションクラッシュレポートデータ222に含まれる情報のタイプおよび詳細に応じて、アプリケーションのタイプ、クライアントコンピューティングデバイス140に関する情報(例えば、オペレーティングシステムまたはデバイスタイプ情報)といった、さらなる情報を含んでもよい。
【0084】
場合によっては、クラスタ化モジュール218は、たとえば、匿名化のさらなる形態として、1つ以上のアプリケーション閾値化関数を実行してもよい。例えば、クラスタ化モジュール218は、エラーを経験する1つ以上のアプリケーション204の匿名性をさらに潜在的に保存するために、閾値数を超えるアプリケーションに影響を及ぼすエラーデータをSDKクラッシュレポートデータ224内に含ませるだけでもよい。場合によっては、この閾値数を超えるアプリケーションにわたって観察されるエラー(例えば、クラッシュ)のみがSDK開発システム232に報告されてもよい。これらのエラーは、SDKクラッシュレポートデータ224に関連付けられる1つ以上のSDK238のライブラリ開発者にとって特に興味深い共通の問題またはバグに関連してもよい。場合によっては、この閾値は、所定数またはデフォルト数のアプリケーションを含んでもよい。
【0085】
図9は、本開示の1つ以上の局面による、アプリケーションサーバシステムによって提供されるデータに基づいて1つ以上の第三者ライブラリ開発システムにおいて表示されてもよい例示的なグラフィカルユーザインターフェース980を示すスクリーン図である。例示のみを目的として、図9は、図2に示されるSDK開発システム232およびアプリケーションサーバシステム202を参照して説明される。
【0086】
前述のように、SDKクラッシュ報告モジュール221は、SDKクラッシュレポートデータ224をSDK開発システム232に送信してもよい。SDK開発システム232の1つ以上のSDKコンソールインターフェース234は、1つ以上の表示装置230における表示のために、そのようなSDKクラッシュレポートデータ224の1つ以上の部分を(例えば、1つ以上のグラフィカルユーザインターフェースにおいて)出力してもよい。その結果、1つ以上のSDKライブラリ開発者は、SDKコンソールインターフェース234によって出力される情報を検討して、彼らが開発または維持したSDK238のそれぞれに関する任意の問題を判定してもよい。図9に示すグラフィカルユーザインターフェース980は、このようなグラフィカルユーザインターフェースの一例である。
【0087】
グラフィカルユーザインターフェース980は、クラスタ化モジュール218によって提供される様々な情報を含む。また、前述のように、クラスタ化モジュール118は、クラスタ化されたライブラリエラーデータ124を生成してもよく、同様に、クラスタ化されたSDKクラッシュレポートデータ224を生成してもよい。たとえば、アプリケーション204のうちの1つ以上の実行中に発生する1つ以上のエラー(たとえば、クラッシュ)についてそのようなクラスタ化されたSDKクラッシュレポートデータ224を生成するとき、クラスタ化モジュール118は、SDKクラッシュレポートデータ224とともに様々な形態のクラスタ化された情報を含めてもよい。たとえば、クラスタ化モジュール118は、クライアントコンピューティングデバイス240によってアプリケーションサーバシステム202に提供されるアプリケーションクラッシュレポートデータ222に含まれる情報のタイプおよび詳細に依って、アプリケーション204のタイプ、対応するSDK238のうちの少なくとも1つの1つ以上のバージョン番号、クライアントコンピューティングデバイス240によって実行される少なくとも1つのオペレーティングシステムの少なくとも1つのバージョン番号、クライアントコンピューティングデバイス240に関する情報(例えば、オペレーティングシステムまたはデバイスタイプ情報)などの情報を含んでもよい。加えて、クラスタ化モジュール218は、また、SDKクラッシュレポートデータ224内に、ある期間(例えば、30日、60日、現在までのすべての累積時間など)にわたって少なくとも1つのエラーによって影響を受けるアプリケーション204の数、その期間にわたって少なくとも1つのエラーによって影響を受けるユーザの数、および/またはその期間にわたる少なくとも1つのエラーの発生数、のうちの1つ以上を含んでもよい。
【0088】
図9に示すグラフィカルユーザインターフェース980は、そのような情報の様々な例を含む。グラフィカルユーザインターフェース980の上部は、直近の30日にわたる特定のエラーまたはクラッシュの発生に関連付けられるグラフ981、982、983を含む。場合によっては、SDKコンソールインターフェース234は、SDK開発システム232において提供される1人以上のSDK開発者から受信された入力に基づいて、これらのグラフを出力してもよい。例えば、SDK開発者は、ユーザ入力をSDKコンソールインターフェース234として与えて、直近の30日間についてのグラフィカルユーザインターフェース内の情報を要求してもよい。他の例では、SDK開発者は、他の期間(例えば、60日間、累積全時間)についての情報を要求してもよい。
【0089】
グラフ981は、経時的にプロットされた特定されたクラッシュのレポート(例えば発生)の数のグラフ表示を示す。グラフ981について、x軸は時間を日数単位で示し、左側のy軸はレポートの数を示す。グラフ982は、経時的にクラッシュの影響を受けたユーザの数のグラフ表示を示す。グラフ982について、x軸は時間を日数単位で示し、左側のy軸は影響を受けたユーザの数を示す。グラフ983は、クラッシュについて、経時的に影響を受けたアプリケーションの数のグラフ表示を示す。グラフ983について、x軸は時間を日数単位で示し、右側のy軸は影響を受けたアプリケーションの数(例えば、アプリケーション204のうち影響を受けたものの数)を示す。
【0090】
図9に示されるように、グラフィカルユーザインターフェースはまた、1つ以上の未決事項を含んでもよい、さらなるクラッシュ詳細984を含む。図9の例では、クラッシュ詳細984は、1つ以上の異なる時点または日についての情報を含んでもよい。例えば、(グラフ982によって表される)特定数のユーザおよび/または(グラフ983によって表される)アプリケーションに影響を及ぼす、(グラフ981によって表される)直近の30日間にわたり特定回数発生した特定のクラッシュに関して、クラッシュ詳細984の各ラインは、グラフ981、982、983によって表される1つの時点(例えば、1日)についての詳細な情報を含んでもよい。例えば、図9に示すように、クラッシュ詳細984は、特定の日に対応する各それぞれの行について、クラッシュに関連付けられるSDKの名前または識別子、SDKの第1の影響を受けたバージョン番号、(グラフ982上の1つの点についての)影響を受けたユーザの数、(グラフ983上の1つの点についての)影響を受けたアプリケーションの数、および(グラフ981上の1つの点についての)クラッシュの発生の報告回数を識別するかまたは示してもよい。
【0091】
図10は、本開示の1つ以上の局面による、アプリケーションサーバシステムによって提供されるデータに基づいて1つ以上の第三者ライブラリ開発システムにおいて表示されてもよい別の例示的なグラフィカルユーザインターフェース1090を示すスクリーン図である。例示のみを目的として、図10は、図2に示されるSDK開発システム232およびアプリケーションサーバシステム202を参照して説明される。
【0092】
グラフィカルユーザインターフェース1090は、SDKコンソールインターフェース234によってSDK開発システム232の表示装置230に表示するために出力されてもよいインターフェースの別の例である。SDKコンソールインターフェース234は、SDKクラッシュレポートデータ224の受信で、表示のために、グラフィカルユーザインターフェース1090を出力してもよく、SDKクラッシュレポートデータ224は、上述のように、クラスタ化モジュール218によって生成された、クラスタ化されたデータを含んでもよい。
【0093】
グラフィカルユーザインターフェース1090の上部は、直近の30日にわたる特定のエラーまたはクラッシュの発生に関連付けられるグラフ1091、1092、1093を含む。アプリケーション204の1つ以上の経時的な実行中の、この特定のクラッシュの、異なる発生は、アプリケーション204に含まれるかまたはアプリケーション204によって使用される特定のSDKの1つ以上のバージョン番号、アプリケーション204の実行中にクライアントコンピューティングデバイス240によって実行されるオペレーティングシステム(OS)の1つ以上のバージョン番号、ならびに/またはクライアントコンピューティングデバイス240の1つ以上のデバイスタイプ(例えば、製造業者および/もしくはモデルに基づくデバイスタイプ、クライアントコンピューティングデバイス240の物理的特性に基づくデバイスタイプなど)に関連付けられてもよい。
【0094】
グラフ1091は、SDKバージョンによってクラスタ化される、特定のクラッシュまたはクラッシュの種類のこれらの発生の割合を表示する棒グラフであり、各棒グラフは異なるSDKバージョン番号を表す。この特定のSDKのSDK開発者は、グラフ1091を検討して、直近の30日間にわたる同じまたは同様のクラッシュの、異なる発生に関連付けられる、SDKの異なるバージョンの内訳を識別してもよい。グラフ1092は、OSバージョンによってクラスタ化される、特定のクラッシュまたはクラッシュの種類の発生の割合を表示する棒グラフであり、各棒グラフは異なるOSバージョン番号を表す。SDKバージョンは、グラフ1092を検討して、直近の30日間にわたる同じまたは同様のクラッシュの、異なる発生に関連付けられる、クライアントコンピューティングデバイス240によって実行されるOSの、異なるバージョンの内訳を識別してもよい。
【0095】
グラフ1093は、クライアントコンピューティングデバイス240のデバイスタイプによってクラスタ化される、特定のクラッシュまたはクラッシュのタイプの発生の割合を表示する棒グラフであり、各棒グラフは異なるデバイスタイプを表す。SDKバージョンは、グラフ1093を検討して、直近の30日にわたる同じまたは同様のクラッシュの、異なる発生に関連付けられる、クライアントコンピューティングデバイス240の、異なるデバイスタイプの内訳を識別してもよい。
【0096】
グラフィカルユーザインターフェース1090はまた、スタック情報1094を含む。スタック情報1094は、様々な場合において、SDKクラッシュレポートデータ224に含まれるスタックトレースデータ225のグラフィカルな表現を含んでもよい。図10に示されるように、スタック情報1094は、表示されたスタックトレースに関連付けられるOSバージョンおよびSDKバージョンの識別子を含んでもよい。たとえば、スタックトレースは、クラッシュしたアプリケーションに含まれるかまたはクラッシュしたアプリケーションによって使用されるSDKの特定のバージョン番号と、アプリケーションの実行中にクライアントコンピューティングデバイス240のうちの1つ以上によって実行されるOSの特定のバージョン番号とに関連付けられてもよい。スタック情報1094はまた、スタックトレースデータ225の1つ以上の部分のテキスト表現を含む。例えば、このテキスト表現は、図7に示されるように、スタックトレースデータ725に含まれるエラー識別子760およびライブラリ依存ソースコード761のうちの1つであってもよい。この例では、クラッシュの発生に関連付けられてもよいSDK238のうちの特定のSDKは、「examplehttp」SDKである。
【0097】
図11は、本開示の1つ以上の局面による、図1図3に示すアプリケーションサーバシステムのいずれかなどのアプリケーションサーバシステムによって実行されるプロセス1100の例示的な動作を示す流れ図である。例示のみを目的として、図11の動作は、図1に示されるアプリケーションサーバシステム102を参照して説明される。
【0098】
図11に示されるように、プロセス1100は、アプリケーションサーバシステム102が、(例えば、アプリケーションエラー処理モジュール120を使用して、)クライアントコンピューティングデバイス140から、クライアントコンピューティングデバイス140上でアプリケーション104のうちの少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータ122を受信すること(1102)を含む。プロセス1100は、アプリケーションサーバシステム102が、(i)少なくとも1つのアプリケーションのライブラリ依存ソースコードと、(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータ108を受信すること(1104)を含み、ライブラリ依存ソースコードは、少なくとも1つのアプリケーションの実行中に少なくとも1つの第三者ライブラリからロードされる。少なくとも1つの第三者ライブラリは、第三者ライブラリ138に含まれてもよい。
【0099】
プロセス1100はまた、アプリケーションサーバシステム102が、アプリケーションエラーデータ122およびマッピングデータ108に基づいて、ライブラリ依存ソースコードとアプリケーションエラーデータ122の少なくとも1つの部分との間の一致を判定すること(1106)と、一致を判定することに応答して、アプリケーションサーバシステム102が(例えば、ライブラリエラーデータ生成部110のライブラリエラーデータ生成部110のライブラリ帰属モジュール114を使用して)、少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーを、少なくとも1つの第三者ライブラリに帰属させること(1108)とを含む。プロセス1100は、さらに、アプリケーションサーバシステム102が(例えば、ライブラリエラーデータ生成部110のライブラリ帰属モジュール114および/またはクラスタ化モジュール118を使用して)、少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータ124を生成すること(1110)を含み、ライブラリエラーデータ124は、アプリケーションエラーデータ122の少なくとも1つの部分を含み、プロセス1100は、さらに、アプリケーションサーバシステム102が(例えば、ライブラリエラー報告モジュール121を使用して)、ライブラリエラーデータ124を、少なくとも1つの第三者ライブラリを開発する1つ以上の第三者ライブラリ開発システム132に送信すること(1112)を含む。
【0100】
1つ以上の例では、説明した関数は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実現されてもよい。ソフトウェアで実現する場合、それらの関数は、1つ以上の命令もしくはコードとしてコンピュータ可読媒体上に記憶されるかまたはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行されてもよい。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含んでもよい。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応してもよい。データ記憶媒体は、本開示で説明する技法の実現のために命令、コードおよび/またはデータ構造を取り出すよう1つ以上のコンピュータまたは1つ以上のプロセッサによってアクセスされ得る任意の利用可能な媒体であってもよい。コンピュータプログラム製品がコンピュータ可読媒体を含んでもよい。
【0101】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気記憶装置、フラッシュメモリ、または命令またはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の記憶媒体を含み得る。また、いかなる接続もコンピュータ可読媒体と適切に称される。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、撚り対線、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、撚り対線、DSL、または赤外線、無線、マイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【0102】
命令は、1つ以上のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路もしくはディスクリートな論理回路などの、1つ以上のプロセッサによって実行されてもよい。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実現に好適な任意の他の構造のいずれかを指し得る。さらに、いくつかの局面では、本明細書で説明した機能は、専用ハードウェアおよび/またはソフトウェアモジュール内で提供されてもよい。また、本技法は、1つ以上の回路または論理要素において完全に実現され得る。
【0103】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、もしくはICの組(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実現されてもよい。本開示では、開示する技法を実行するよう構成されるデバイスの機能的な局面を強調するために、様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上で説明されたように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとの関連において、上で説明されたような1つ以上のプロセッサを含んで、ハードウェアユニットにおいて組み合わされるか、または動作中のハードウェアユニットの集合によって提供されてもよい。
【0104】
実施形態に応じて、本明細書で説明される方法のいずれかの特定の行為またはイベントは、異なるシーケンスで実行され得、追加、マージ、または完全に除外されてもよい(例えば、記載された行為またはイベントのすべてが方法の実施に必要であるわけではない)ことを認識されたい。さらに、特定の実施形態では、行為またはイベントは、順次ではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通じて同時に実行されてもよい。
【0105】
いくつかの例では、コンピュータ可読記憶媒体は非一時的媒体を含む。「非一時的」という用語は、記憶媒体が搬送波または伝搬される信号で具現化されないことを示す。いくつかの例では、非一時的記憶媒体は、経時的に変化し得るデータを(たとえば、RAMまたはキャッシュに)記憶してもよい。
【0106】
様々な例について説明した。これらおよび他の例は、以下の特許請求の範囲内にある。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
【手続補正書】
【提出日】2023-11-08
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
方法であって、
1つ以上のプロセッサを含むアプリケーションサーバシステムが、1つ以上のクライアントコンピューティングデバイスから、前記1つ以上のクライアントコンピューティングデバイス上での少なくとも1つのアプリケーションの実行中に発生した少なくとも1つのエラーに関連付けられるアプリケーションエラーデータを受信することと、
前記アプリケーションサーバシステムが、(i)前記少なくとも1つのアプリケーションのライブラリ依存ソースコードと(ii)少なくとも1つの第三者ライブラリとの間のマッピングを提供するマッピングデータを受信することとを含み、前記ライブラリ依存ソースコードは、前記少なくとも1つのアプリケーションの実行中に前記少なくとも1つの第三者ライブラリからロードされ、前記方法はさらに、
前記アプリケーションサーバシステムが、前記アプリケーションエラーデータおよび前記マッピングデータに基づいて、前記ライブラリ依存ソースコードと前記アプリケーションエラーデータの少なくとも1つの部分との間の一致を判定することと、
前記一致を判定することに応答して、前記アプリケーションサーバシステムが、前記少なくとも1つのアプリケーションの実行中に発生した前記少なくとも1つのエラーを前記少なくとも1つの第三者ライブラリに帰属させることと、
前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリに関連付けられるライブラリエラーデータを生成することとを含み、前記ライブラリエラーデータは、前記アプリケーションエラーデータの前記少なくとも1つの部分を含み、前記方法はさらに、
前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリを開発する少なくとも1つの第三者ライブラリ開発システムに、前記ライブラリエラーデータを送信することを含む、方法。
【請求項2】
前記アプリケーションエラーデータは、前記少なくとも1つのアプリケーションを前記1つ以上のクライアントコンピューティングデバイス上でクラッシュさせた前記少なくとも1つのエラーに関連付けられるアプリケーションクラッシュレポートデータを含み、
前記アプリケーションエラーデータの前記少なくとも1つの部分は、前記アプリケーションクラッシュレポートデータの少なくとも1つの部分を含み、
前記ライブラリエラーデータは、前記アプリケーションクラッシュレポートデータの前記少なくとも1つの部分を含むライブラリクラッシュレポートデータを含む、請求項1に記載の方法。
【請求項3】
前記アプリケーションクラッシュレポートデータは、前記少なくとも1つのアプリケーションのネスト化された関数呼び出しを表すスタックトレースデータを含み、
前記アプリケーションクラッシュレポートデータの前記少なくとも1つの部分は、前記スタックトレースデータの少なくとも1つの部分を含む、請求項2に記載の方法。
【請求項4】
前記一致を判定することは、前記アプリケーションサーバシステムが、前記スタックトレースデータおよび前記マッピングデータに基づいて、前記ライブラリ依存ソースコードのうちの1つ以上のパターンを、前記スタックトレースデータの前記少なくとも1つの部分における1つ以上のコード位置と照合することを含む、請求項3に記載の方法。
【請求項5】
前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリを開発する前記少なくとも1つの第三者ライブラリ開発システムから、前記ライブラリ依存ソースコードに関連付けられる難読化解除データを受信することと、
前記アプリケーションサーバシステムが、前記難読化解除データに基づいて、前記スタックトレースデータの前記少なくとも1つの部分を難読化解除することとをさらに含む、
請求項3または4に記載の方法。
【請求項6】
前記ライブラリエラーデータを生成することは、前記アプリケーションサーバシステムが、前記スタックトレースデータからアプリケーション依存ソースコードを除去して前記ライブラリエラーデータを生成することを含む、請求項3~5のいずれか1項に記載の方法。
【請求項7】
前記少なくとも1つの第三者ライブラリは、少なくとも第1の第三者ライブラリおよび第2の第三者ライブラリを含み、
前記ライブラリ依存ソースコードは、前記第1の第三者ライブラリに関連付けられる第1のライブラリ依存ソースコードと、前記第2の第三者ライブラリに関連付けられる第2のライブラリ依存ソースコードとを含み、
前記アプリケーションエラーデータの前記少なくとも1つの部分は、前記第1のライブラリ依存ソースコードを含み、
前記ライブラリエラーデータを生成することは、前記アプリケーションサーバシステムが、前記第2のライブラリ依存ソースコードを前記スタックトレースデータから除去して前記ライブラリエラーデータを生成することをさらに含む、請求項6に記載の方法。
【請求項8】
前記ライブラリエラーデータは、さらに、前記少なくとも1つの第三者ライブラリの少なくとも1つのバージョン番号、前記1つ以上のクライアントコンピューティングデバイスによって実行される少なくとも1つのオペレーティングシステムの少なくとも1つのバージョン番号、前記1つ以上のクライアントコンピューティングデバイスの少なくとも1つのデバイスタイプ、ある期間にわたって前記少なくとも1つのエラーによって影響を受けるアプリケーションの数、前記ある期間にわたって前記少なくとも1つのエラーによって影響を受けるユーザの数、または前記ある期間にわたる前記少なくとも1つのエラーの発生数、のうちの1つ以上を示す、請求項1~7のいずれか1項に記載の方法。
【請求項9】
前記方法はさらに、
前記アプリケーションサーバシステムが、前記ライブラリエラーデータに含まれる前記アプリケーションエラーデータの前記少なくとも1つの部分に関連付けられる第1のフィンガープリント識別子を決定することと、
前記アプリケーションサーバシステムが、前記第1のフィンガープリント識別子と、以前に生成されたライブラリエラーデータに関連付けられる第2のフィンガープリント識別子との間の一致を判定することとを含み、前記以前に生成されたライブラリエラーデータは、前記少なくとも1つの第三者ライブラリに関連付けられ、前記以前に生成されたライブラリエラーデータは、前記1つ以上のクライアントコンピューティングデバイス上での前記少なくとも1つのアプリケーションの実行中に発生した前記少なくとも1つのエラーに関連付けられるアプリケーションエラーデータの少なくとも1つの部分を含み、前記方法はさらに、
前記第1のフィンガープリント識別子と前記第2のフィンガープリント識別子との間で前記一致を判定することに応答して、前記アプリケーションサーバシステムが、前記ライブラリエラーデータを、前記以前に生成されたライブラリエラーデータとクラスタ化して、前記少なくとも1つの第三者ライブラリに関連付けられるクラスタ化されたライブラリエラーデータを生成することを含み、前記クラスタ化されたライブラリエラーデータは、前記少なくとも1つのエラーによって影響を受ける少なくともある数のアプリケーションを示し、
前記ライブラリエラーデータを送信することは、前記アプリケーションサーバシステムが、前記少なくとも1つの第三者ライブラリ開発システムに、前記クラスタ化されたライブラリエラーデータを送信することを含む、請求項1~8のいずれか1項に記載の方法。
【請求項10】
前記方法はさらに、
前記アプリケーションサーバシステムが、前記少なくとも1つのエラーによって影響を受ける前記アプリケーションの数が閾値数を超えると判断することを含み、
前記クラスタ化されたライブラリエラーデータを送信することは、前記少なくとも1つのエラーによって影響を受ける前記アプリケーションの数が前記閾値数を超えるという判断に応答して生じる、請求項9に記載の方法。
【請求項11】
前記マッピングデータを受信することは、前記アプリケーションサーバシステムが、前記少なくとも1つのアプリケーションを開発する少なくとも1つのアプリケーション開発システムから、前記マッピングデータを受信することを含む、請求項1~10のいずれか1項に記載の方法。
【請求項12】
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサによって実行可能な命令を記憶するよう構成される少なくとも1つのコンピュータ可読記憶装置とを備え、前記命令は、請求項1~11のいずれか1項に記載の方法を実行するよう、前記少なくとも1つのプロセッサによって実行可能である、アプリケーションサーバシステム。
【請求項13】
命令を記憶するコンピュータ可読記憶装置であって、前記命令は、実行されると、少なくとも1つのプロセッサに、請求項1~11のいずれか1項に記載の方法を実行させ、コンピュータ可読記憶装置。
【国際調査報告】