DE112014007090T5 - Verfahren und systeme zum automatischen tagging anhand von software-ausführungs-traces - Google Patents
Verfahren und systeme zum automatischen tagging anhand von software-ausführungs-traces Download PDFInfo
- Publication number
- DE112014007090T5 DE112014007090T5 DE112014007090.4T DE112014007090T DE112014007090T5 DE 112014007090 T5 DE112014007090 T5 DE 112014007090T5 DE 112014007090 T DE112014007090 T DE 112014007090T DE 112014007090 T5 DE112014007090 T5 DE 112014007090T5
- Authority
- DE
- Germany
- Prior art keywords
- application
- call stack
- instance
- stack information
- call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
Abstract
Description
- ALLGEMEINER STAND DER TECHNIK
- Kostengünstige Softwareanwendungen sind für eine Reihe von Computerplattformen erhältlich. Im Allgemeinen interagieren manche Arten von Softwareanwendungen, wenn sie auf einem Hostgerät ausgeführt werden, mit vom Hostgerät entfernten Backend-Servern. Die Backend-Server können in manchen Situationen Informationen mit Anwendungsinstanzen über ein Netzwerk austauschen.
- KURZDARSTELLUNG
- In einigen Aspekten betrifft die Offenbarung ein System mit einer Wissensbasis, die eine gesammelte Vielzahl von erfolgreichen Traces aus einer Vielzahl von Instanzen einer Anwendung auf einer Vielzahl von entfernten Geräten speichert. Das System beinhaltet eine Netzwerkschnittstelle und einen Computerprozessor, der dafür konfiguriert ist, eine oder mehrere Einheiten von Aufrufstapelinformationen über die Netzwerkschnittstelle von einer ersten Instanz der Anwendung zu empfangen, die auf einem ersten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die erste Instanz der Anwendung beinhalten, und dafür konfiguriert ist, von der ersten Instanz der Anwendung einen Indikator dafür zu empfangen, dass die erste Instanz der Anwendung eine Vorgabe ausgeführt hat. Der Computerprozessor ist so konfiguriert, dass er in Reaktion auf das Empfangen des Indikators die empfangenen Einheiten von Aufrufstapelinformationen bis zur ausgeführten Vorgabe als erfolgreiche Trace ansammelt und das erfolgreiche Trace in der Wissensbasis speichert. Der Computerprozessor ist so konfiguriert, dass dieser von einer zweiten Instanz der Anwendung, die auf einem zweiten entfernten Gerät ausgeführt wird, eine oder mehrere Einheiten von Aufrufstapelinformationen empfängt, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die zweite Instanz der Anwendung beinhalten; dass dieser eine Ähnlichkeit zwischen den von der zweiten Instanz der Anwendung empfangenen Aufrufstapelinformationen und der Vielzahl von erfolgreichen Traces feststellt; und dass dieser in Reaktion auf das Feststellen der Ähnlichkeit das zweite entfernte Gerät zu einer Population von Geräten hinzufügt, die die Aufgabe voraussichtlich ausführen werden.
- In einigen Aspekten betrifft die Offenbarung ein Verfahren, das das Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer ersten Instanz einer Anwendung beinhaltet, die auf einem ersten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die erste Instanz der Anwendung beinhalten, und das Empfangen von der ersten Instanz der Anwendung eines Indikators dafür beinhaltet, dass die erste Instanz der Anwendung eine Vorgabe ausgeführt hat. Das Verfahren beinhaltet das Aggregieren der empfangenen Einheiten von Aufrufstapelinformationen, die zu der ausgeführten Vorgabe führen, als erfolgreiche Trace, und das Sammeln einer Vielzahl von erfolgreichen Traces aus einer Vielzahl von Instanzen der Anwendung, die auf einer Vielzahl von entfernten Geräten ausgeführt werden. Das Verfahren beinhaltet weiterhin das Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die zweite Instanz der Anwendung beinhalten, die auf einem zweiten entfernten Gerät ausgeführt wird; das Feststellen einer Ähnlichkeit zwischen den von der zweiten Instanz der Anwendung empfangenen Aufrufstapelinformationen und der Vielzahl von erfolgreichen Traces; sowie das Hinzufügen des zweiten entfernten Geräts zu einer Population von Geräten, die die Aufgabe voraussichtlich ausführen werden.
- In einigen Aspekten betrifft die Offenbarung computerlesbare Medien, auf denen Anweisungen gespeichert sind, die bei Ausführung durch ein Computergerät, das einen oder mehrere Prozessoren beinhaltet, das Computergerät zum Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer ersten Instanz einer Anwendung veranlassen, die auf einem ersten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die erste Instanz der Anwendung beinhalten, und zum Empfangen von der ersten Instanz der Anwendung eines Indikators dafür veranlassen, dass die erste Instanz der Anwendung eine Vorgabe ausgeführt hat. Die Anweisungen veranlassen das Computergerät weiterhin zum Aggregieren der empfangenen Einheiten von Aufrufstapelinformationen, die zu der ausgeführten Vorgabe führen, als erfolgreiche Trace und zum Sammeln einer Vielzahl von erfolgreichen Traces aus einer Vielzahl von Instanzen der Anwendung, die auf einer Vielzahl von entfernten Geräten ausgeführt werden. Die Anweisungen veranlassen das Computergerät weiterhin dazu, dass dieses von einer zweiten Instanz der Anwendung, die auf einem zweiten entfernten Gerät ausgeführt wird, eine oder mehrere Einheiten von Aufrufstapelinformationen empfängt, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die zweite Instanz der Anwendung beinhalten; dass dieses eine Ähnlichkeit zwischen den von der zweiten Instanz der Anwendung empfangenen Aufrufstapelinformationen und der Vielzahl von erfolgreichen Traces feststellt; und dass dieses in Reaktion auf eine affirmative Feststellung das zweite entfernte Gerät zu einer Population von Geräten hinzufügt, die die Aufgabe voraussichtlich ausführen werden.
- KURZBESCHREIBUNG DER ZEICHNUNGEN
- Die oben genannten und damit verbundenen Aufgaben, Merkmale und Vorteile der vorliegenden Offenbarung lassen sich unter Berücksichtigung der folgenden ausführlichen Beschreibung in Verbindung mit den beigefügten Figuren vollständiger erfassen, wobei:
-
1 eine schematische Darstellung einer Netzwerkumgebung entsprechend einer exemplarischen Implementierung zeigt; -
2 eine visuelle Darstellung eines Aufrufstapels zeigt; -
3 ein Ablaufdiagramm zeigt, das eine Implementierung für ein Verfahren zum periodischen Erfassen und Senden von Aufrufstapelinformationen darstellt; -
4 ein Ablaufdiagramm zeigt, das eine Implementierung für ein Verfahren zum Sammeln und Vergleichen von Aufrufstapelinformationen für eine Vielzahl von entfernten Geräten darstellt; -
5 ein Ablaufdiagramm zeigt, das eine Implementierung für ein Verfahren zum Reagieren auf die Erkennung einer Segmentzuordnung für die empfangenen Aufrufstapelinformationen darstellt; und -
6 ein Blockdiagramm eines Computersystems zeigt, das für die Verwendung in den verschiedenen beschriebenen Implementierungen geeignet ist. - Zur Vereinfachung sind in den jeweiligen Figuren ggf. nicht alle Komponenten beschriftet. Die Zeichnungen sollen nicht maßstabsgetreu sein. In den verschiedenen Figuren werden gleiche Bezugszeichen und Bezeichnungen für gleiche Elemente verwendet.
- AUSFÜHRLICHE BESCHREIBUNG
- Kostengünstige Softwareanwendungen sind für eine Reihe von Computerplattformen erhältlich. Ein Anwendungsbenutzer bezahlt ggf. einen kleinen Geldbetrag oder in manchen Fällen gar nichts, um eine Anwendung auf einem Benutzergerät zu installieren und die Anwendung auszuführen. Benutzer bezahlen ggf. einen kleinen Betrag, um Zusatzfunktionen der Anwendung freizuschalten oder ein Upgrade auf die Premium-Version zu erhalten. In einigen Fällen bietet die Anwendung Inhalte, die entweder vom Entwickler der Anwendung oder von einer Drittpartei bereitgestellt werden. In manchen Fällen wird die Anwendung in Verbindung mit einem anderen Produkt, zum Beispiel als Marketing-Draufgabe für eine Veranstaltung oder einen Veranstaltungsort, vertrieben. Im Allgemeinen kommunizieren manche Anwendungen, die manchmal als „Apps“ bezeichnet werden, mit einem oder mehreren Backend-Servern, um Aktualisierungen, Interaktionen mit mehreren Beteiligten und zusätzliche Inhalte zu erhalten. Die Backend-Server können die an die einzelnen Anwendungsinstanzen zu liefernden Inhalte anhand verschiedener Parameter auswählen. In einigen Implementierungen werden spezifische Ausführungsmuster für eine bestimmte Instanz der Anwendung verwendet, um die Auswahl der Inhalte zu unterstützen. Einige Ausführungsmuster können eine erhöhte Wahrscheinlichkeit für die Ausführung eines oder mehrerer bestimmter Ereignisse anzeigen. Wenn ein Ausführungsmuster nahelegt, dass eine bestimmte Anwendungsinstanz ein Zielereignis voraussichtlich ausführt, können Inhalte ausgewählt werden, die dabei helfen, einen Benutzer der Anwendung zur Vorgabe hinzuführen. Vorgaben beinhalten unter anderem die Interaktion des Benutzers mit ausgewählten Inhalten, Einkäufe innerhalb der App und die fortgesetzte Beschäftigung des Benutzers mit der Anwendung. In einem Szenario kann der Benutzer der Anwendung, wenn eine Unterhaltungsanwendung (z. B. ein Spiel) wiederholt Funktionsaufrufe von einem schwierigen Level im Spiel ausführt, an Hinweisen daran interessiert sein, wie man von einem schwierigen Level aus weiterkommt.
-
1 zeigt eine grobe Übersicht einer schematischen Darstellung einer Netzwerkumgebung. Ein Netzwerk110 ermöglicht Kommunikation zwischen verschiedenen Benutzergeräten120 und Backend-Servern130 . Jedes Benutzergerät120 (a)–120 (n) führt eine jeweilige Instanz124 (a)–124 (n) einer Anwendung aus. Die Anwendungsinstanzen124 (a)–124 (n) (im Allgemeinen als Instanz124 bezeichnet) übertragen jeweils Aufrufstapelinformationen über das Netzwerk110 an Stapelaggregationsserver140 . Die Stapelaggregationsserver140 speichern die empfangenen Daten im Speicher134 . Die Server140 erkennen Ausführungsmuster in den Aufrufstapelinformationen und legen ein Segment der Anwendungsinstanzen124 für den Empfang von speziellen Inhalten basierend auf dem erkannten Muster fest. Inhaltsserver160 stellen den Anwendungsinstanzen124 Inhalte bereit. Anwendungsinstanzen124 im festgelegten Segment erhalten von den Inhaltsservern160 die für das Segment ausgewählten speziellen Inhalte. - Genauer gesagt, übermittelt das Netzwerk
110 Informationen zwischen den Benutzergeräten120 und den Backend-Servern130 . Das Netzwerk110 setzt sich aus verschiedenen miteinander verbundenen Netzwerkgeräten zusammen, die einen oder mehrere Kommunikationspfade zwischen den beteiligten Geräten bilden. Jedes Netzwerkgerät beinhaltet mindestens eine Netzwerkschnittstelle zum Senden und Empfangen von Daten, in der Regel als ein oder mehrere Pakete. Die Netzwerkschnittstellen verbinden die Netzwerkgeräte mit dem Netzwerk110 und über das Netzwerk110 miteinander. Ein exemplarisches Netzwerk110 ist das Internet; es können jedoch auch andere Netzwerke verwendet werden. Das Netzwerk110 kann sich aus mehreren miteinander verbundenen Subnetzen zusammensetzen. Bei dem Netzwerk110 kann es sich um ein lokales Netzwerk (LAN), zum Beispiel ein Firmen-Intranet, ein regionales Netzwerk (MAN), ein Großraumnetzwerk (WAN), ein Inter-Netzwerk wie das Internet oder ein Peer-to-Peer-Netzwerk, z. B. ein Adhoc- WLAN-Peer-to-Peer-Netzwerk, handeln. Bei den Datenverbindungen zwischen den Geräten im Netzwerk110 kann es sich um eine beliebige Kombination von drahtgebundenen Verbindungen (z. B. Glasfaser, Kabel, Kat-5 usw.) und/oder um drahtlose Verbindungen (z. B. auf der Basis von Funk, Satellit oder Mikrowellen) handeln. Bei dem Netzwerk110 kann es sich um ein öffentliches Netz, ein privates Netz oder eine Kombination aus öffentlichen und privaten Netzen handeln. Bei dem Netzwerk110 kann es sich um eine beliebige Art und/oder Form von Datennetzwerken und/oder Kommunikationsnetzwerken handeln. - Ein Benutzergerät
120 ist in der Lage, über das Netzwerk110 Informationen auszutauschen. Bei einem Benutzergerät120 kann es sich um eine beliebige Art von Computergerät handeln, das zur Interaktion mit einem Benutzer konfiguriert ist. Bei einem Benutzergerät120 kann es sich unter anderem um einen Laptop, Desktop, ein Tablet, elektronisches Tablet, einen PDA, ein Smartphone, Videospiel, Fernsehgerät, eine Set-Top-Box, einen Kiosk oder einen tragbaren Computer handeln. Im Allgemeinen und ohne Einschränkung ist ein Benutzergerät120 in der Lage, einem Benutzer Inhalte darzustellen oder die Darstellung von Inhalten für einen Benutzer zu ermöglichen. Ein Benutzergerät120 führt in der Regel ein Betriebssystem aus, das die Ausführung von Softwareanwendungen auf dem Benutzergerät120 verwaltet. In einigen Implementierungen wird das Betriebssystem mit dem Benutzergerät120 geliefert. Das unter Bezugnahme auf6 beschriebene Computergerät ist ein Computergerät, das in einigen Konfigurationen zur Verwendung als Benutzergerät120 geeignet ist. - Die Backend-Server
130 beinhalten Stapelaggregationsserver140 und Inhaltsserver160 , die im Folgenden ausführlicher beschrieben werden. Zu den Backend-Servern130 können in einigen Implementierungen andere unterstützende Systeme wie Netzwerkgeräte, die als Router oder Switches funktionieren, Datenverarbeitungs- und Filterserver, Datenspeichersysteme134 , Anwendungsserver und so weiter gehören. Die Backend-Server130 können an einem einzelnen Standort untergebracht oder über mehrere Standorte verteilt und entweder durch das Netzwerk110 und/oder durch ein sekundäres Backbone-Netzwerk miteinander verbunden sein. Einige Backend-Server130 können virtualisiert sein, d. h. ein Backend-Server130 kann als virtuelle Maschine auf einem anderen Computergerät gehostet werden. In manchen Fällen können ein oder mehrere virtuelle Server von einem externen Cloud-Dienstanbieter gehostet werden. Einige Backend-Server130 können in benutzerspezifischer Hardware implementiert sein. Einige Backend-Server130 können generische Computergeräte sein, die mit spezifischen, nichtgenerischen Funktionen konfiguriert sind. Das unter Bezugnahme auf6 beschriebene Computergerät ist ein Computergerät, das in einigen Konfigurationen zur Verwendung als Backend-Server130 geeignet ist. - Der Backend-Server
130 beinhaltet Datenspeicher134 , bei dem es sich um ein beliebiges Gerät oder eine Sammlung von Geräten handeln kann, die zum Speichern von computerlesbaren Daten geeignet sind. Bei den Datenspeichergeräten134 kann es sich um flüchtige oder nichtflüchtige Speicher, Netzwerkspeicher oder Speichernetzwerke handeln. Datenspeichergeräte134 können ein oder mehrere Massenspeichergeräte umfassen, die sich am gleichen Standort befinden oder verteilt angeordnet sein können. Zu den zum Speichern von Daten geeigneten Medien gehören sämtliche Arten von Festspeichern, Medien und Speichergeräten, einschließlich Halbleiterspeicherelemente, wie beispielsweise EPROM, EEPROM, SDRAM und Flash-Speichergeräte; magnetische Festplatten, wie z. B. interne Festplatten oder Wechselplatten; magneto-optische Festplatten; und CD-ROM-, DVD-ROM- und Blu-Ray®-Disc-Laufwerke. Datenspeichergeräte können virtualisiert sein. Auf Datenspeichergeräte kann über einen zwischengeschalteten Server und/oder über ein Netzwerk zugegriffen werden. Datenspeichergeräte können Daten als eine Sammlung von Dateien oder Datenblöcken (Chunks) strukturieren. Bei einigen Datenspeichergeräten kann durch redundante Speicher und/oder Fehlerkorrekturdaten (z. B. Paritätsbits) eine Fehlerkorrektur vorgesehen sein. Der Datenspeicher134 kann eine Datenbank, z. B. eine relationale Datenbank, hosten. Der Datenspeicher134 kann ein Dateiablagesystem hosten. Im Datenspeicher134 gespeicherten Daten können als Wissensbasis gegliedert sein. Die Daten können in verschlüsselter Form gespeichert sein. Der Zugriff auf den Datenspeicher134 kann durch ein oder mehrere Authentifizierungssysteme beschränkt werden. - Ein Benutzer kann ein Benutzergerät
120 so betreiben, dass es mit verschiedenen Backend-Servern130 über das Netzwerk110 entfernt interagiert. In manchen Szenarien kann ein Benutzer mit einem Clientgerät120 ein oder mehrere Inhaltselemente von einem Backend-Server130 , z. B. einem Inhaltsserver160 , anfordern. In Reaktion auf vom Backend-Server130 empfangene Anfragen werden angeforderte Inhalte von einem oder mehreren Inhaltsservern160 über das Netzwerk110 an das Clientgerät120 geliefert. Das Clientgerät120 gibt die empfangenen Inhalte dann zur Darstellung für den Benutzer wieder. Ein Benutzer kann mit den Backend-Servern130 so interagieren, dass eine Reihe von Anfragen, Antworten und darauf folgenden Anforderungen eine Sitzung ergeben kann. Die Sitzung des Benutzers wird fortgesetzt, bis der Benutzer keine Inhaltselemente mehr anfordert. In einigen Implementierungen bleibt die Sitzung für einen festen Zeitraum nach Lieferung des letzten Inhaltselements aktiv und gibt dem Benutzer so Zeit, sich mit den Inhalten zu beschäftigen und eine nachfolgende Anfrage auszulösen. In einigen Implementierungen sind die an das Clientgerät120 gelieferten Inhalte so konfiguriert, dass diese periodisch Anfragen zum Backend-Server130 senden, damit die Sitzung aktiv bleibt. In einigen Implementierungen entspricht eine Sitzung einer über einen bestimmten Zeitraum erfolgenden logischen Gruppierung von Anfragen von einem Clientgerät120 . - In einigen Implementierungen hat jedes Benutzergerät
120 eine Kennung, mit der zwischen verschiedenen Benutzergeräteinstanzen unterschieden werden kann. Die Kennungen können eindeutig sein. In einigen Implementierungen wird eine IP-Adresse als Kennung verwendet. In einigen Implementierungen ordnet ein Hersteller oder Lieferant einem Benutzergerät120 eine permanente Systemkennung, zum Beispiel eine DUID, INID, IMSI oder MIN zu, die z. B. in einer SIM-Karte gespeichert ist und als Kennung verwendet wird. In einigen Implementierungen liefert ein Benutzer Informationen, mit denen ein Benutzergerät120 identifiziert wird. In einigen Implementierungen wird eine Kennung an ein Benutzergerät120 geliefert und im Benutzergerät, z. B. als Cookie, gespeichert. Wenn ein Benutzergerät120 mit einem Backend-Server130 interagiert, kann das Benutzergerät120 die gespeicherte Kennung für den Server130 bereitstellen. In einigen Implementierungen ist die zur Speicherung an das Benutzergerät120 gelieferte Kennung eine beliebige oder zufällig ausgewählte Zahl oder Zeichenkette. In einigen Implementierungen führt ein Backend-Server130 eine Sequenznummer; für jede erste Interaktion mit einem Benutzergerät120 sendet der Server130 diese Sequenznummer an das neu vorgefundene Benutzergerät120 als Kennung und erhöht dann die Sequenznummer um einen festen oder dynamischen Betrag. In einigen Implementierungen ist die zum Speichern im Benutzergerät120 gelieferte Kennung eine Funktion von Datum und Uhrzeit einer ersten Interaktion zwischen dem Benutzergerät120 und dem Backend-Server130 . In einigen Implementierungen erhält jede Anwendungsinstanz124 ihre eigene Kennung, die nicht zu den von anderen Anwendungen auf dem gleichen Host-Benutzergerät120 verwendeten Kennungen gehört. In einigen Implementierungen hat die zum Speichern im Benutzergerät120 gelieferte Kennung keine andere Bedeutung, als dass sie eindeutig einer bestimmten Instanz eines Benutzergeräts120 (oder einer Anwendung124 , die auf einem Benutzergerät120 ausgeführt wird) zugeordnet ist, sodass die Kennzeichnung in keiner Weise die Identität eines Benutzers online oder offline angibt oder mit derselben zusammenhängt. - Benutzergeräte
120 führen verschiedene Softwareanwendungen aus. In einigen Implementierungen sind eine oder mehrere Softwareanwendungen so eingerichtet, dass sie periodisch Statusinformationen erzeugen und diese Statusinformationen periodisch an einen Backend-Server130 senden. In einigen Implementierungen sind die Statusinformationen Aufrufstapelinformationen für eine bestimmte Anwendungsinstanz124 . In einigen Implementierungen stellen die Aufrufstapelinformationen eine Momentaufnahme des aktuellen Ausführungsstatus einer Anwendung dar. Aufrufstapelinformationen werden ausführlicher unter Bezugnahme auf2 beschrieben, die einer Darstellung der Aufrufstapelinformationen entspricht. Eine spezifische Anwendungsinstanz124 kann periodisch Statusinformationen erzeugen, indem sie Aufrufstapelinformationen erfasst und die Statusinformationen an den Backend-Server130 sendet. Die übertragenen Informationen können mit einer Kennung für die Anwendungsinstanz124 assoziiert sein, brauchen jedoch keine persönlichen Daten über den Benutzer zu beinhalten. Das Senden von Aufrufstapelinformationen wird ausführlicher mit Bezug auf3 beschrieben, die einem Ablaufdiagramm entspricht, das eine Implementierung für ein Verfahren zum periodischen Erfassen und Senden von Aufrufstapelinformationen darstellt. Die2 und3 werden nachstehend näher beschrieben. In einigen Implementierungen kann ein Benutzer eine Option zum Deaktivieren des Sendens von Statusinformationen an den Backend-Server130 auswählen. - Ein Stapelaggregationsserver
140 ist ein Backend-Server130 , der für das Empfangen von Aufrufstapelinformationen von den verschiedenen Benutzergeräten120 über das Netzwerk110 konfiguriert ist. In einigen Implementierungen verarbeitet der Stapelaggregationsserver140 die Aufrufstapelinformationen, filtert z. B. anhand einer Reihe von Regeln Informationen heraus und/oder ermittelt anhand der Aufrufstapelinformationen, ob die sendende Anwendungsinstanz124 eine bestimmte Funktion oder ein bestimmtes Ereignis ausgeführt hat. In einigen Implementierungen zeichnet der Stapelaggregationsserver140 alle oder einige der empfangenen Aufrufstapelinformationen im Datenspeicher134 auf. In einigen Implementierungen arbeitet ein Stapelaggregationsserver140 in Verbindung mit einem oder mehreren zusätzlichen Stapelaggregationsservern140 . In einigen Implementierungen greifen die mehreren Stapelaggregationsserver140 auf einen gemeinsamen Datenspeicher, z. B. den Datenspeicher134 , zu. In einigen Implementierungen vergleicht der Stapelaggregationsserver140 empfangene Aufrufstapelinformationen mit den gespeicherten Aufrufstapelinformationen und erkennt eventuelle Ähnlichkeiten. Die im Folgenden beschriebene4 zeigt ein Ablaufdiagramm, das eine Implementierung für ein Verfahren zum Sammeln und Vergleichen von Aufrufstapelinformationen für eine Vielzahl von entfernten Geräten darstellt. - Im Allgemeinen ist der Stapelaggregationsserver
140 für das Empfangen von Aufrufstapelinformationen von einem Benutzergerät120 (z. B. Benutzergerät120 (a)) und zum Vergleichen der empfangenen Aufrufstapelinformationen mit den aggregierten Aufrufstapelinformationen, die zuvor von anderen Benutzergeräten120 (z. B. Benutzergeräten120 (b)–120 (n)) empfangen wurden, konfiguriert. Genauer gesagt, können die aggregierten Aufrufstapelinformationen in zwei oder mehrere (als „Segmente“ bezeichnete) Untergruppen der Quellenbenutzergeräte120 unterteilt werden. In einigen Implementierungen werden die Gruppen anhand von in den Vergleichen erkannten Ähnlichkeiten eingeteilt, sodass ein Benutzergerät120 in Abhängigkeit von den Ähnlichkeiten zwischen den Aufrufstapelinformationen, die der Stapelaggregationsserver140 von den verschiedenen Benutzergeräten120 empfangen hat, als Teil eines Segments oder eines anderen Segments angesehen werden kann. In einigen Implementierungen werden die Gruppen anhand von zusätzlichen Faktoren eingeteilt. In einigen dieser Implementierungen beinhalten die zusätzlichen Faktoren, ob eine Anwendungsinstanz andere Vorgaben, zum Beispiel ein bestimmtes Spiel-Level oder den Abschluss eines Kaufs innerhalb einer App, erreicht hat. In einigen Implementierungen werden Segmente durch Anwenden eines Clustering-Algorithmus, z. B. eines hierarchischen Clustering-Algorithmus, auf die empfangenen Aufrufstapelinformationen generiert. - In einigen Implementierungen sind die Aufrufstapelinformationen anwendungsspezifisch, sodass nur Benutzergeräte
120 , die eine Instanz124 der Anwendung ausführen, Aufrufstapelinformationen für die Vergleiche einreichen. Wenn eine spezielle Aktion für Benutzergeräte120 in einem bestimmten Segment reserviert ist, kann der Stapelaggregationsserver140 oder ein anderer Backend-Server130 , wie z. B. ein Inhaltsserver160 , die bestimmte Aktion in Reaktion auf die Feststellung ausführen, dass das Benutzergerät120 zu dem bestimmten Segment gehört. In einigen Implementierungen können spezielle Inhalte an ein Benutzergerät geliefert werden, das in ein bestimmtes Segment fällt. In einigen Implementierungen kann eine Spielanwendung mit mehreren Levels bestimmen, dass Benutzern, die wiederholt bestimmte Funktionen bei einem besonders schwierigen Level aufrufen, ein Hinweis darauf, wie man zum nächsten Level gelangt, von Nutzen sein könnte; während in Reaktion auf diese Feststellung die Anwendungsinstanzen der Benutzer eine spezielle Nachricht mit dem Hinweis empfangen oder den Empfänger zum Kauf des Hinweises auffordern können. Die im Folgenden beschriebene5 zeigt ein Ablaufdiagramm, das eine Implementierung für ein Verfahren zum Reagieren auf das Erkennen einer Segmentzuordnung für die empfangenen Aufrufstapelinformationen darstellt, und das die Quelle der empfangenen Aufrufstapelinformationen zum Empfangen von speziellen Inhalten vorsieht, wenn die Quelle als Teil des bestimmten Segments erkannt wird. -
2 zeigt eine grobe Übersicht einer Aufrufstapel-Visualisierung200 . Aufrufstapel können als Daten strukturiert sein, die Zustandsdaten von Subroutinen enthalten. Eine Aufrufstapel-Momentaufnahme setzt sich aus Stapelrahmen für jeden Thread einer Anwendung zu einem gegebenen Moment zusammen. Jeder Stapelrahmen im Aufrufstapel entspricht einem Aufruf an eine Subroutine, die noch nicht mit einer Rückgabe abgeschlossen ist. In einigen Implementierungen bindet der Anwendungsentwickler eine Instrumentierungsbibliothek ein, die in regelmäßigen Abständen eine Spur des Aufrufstapels der Anwendung erfasst. In einigen Implementierungen erfasst das Betriebssystem selbst in periodischen Abständen Aufrufstapelinformationen für die Anwendung. In einigen Implementierungen stellen die Aufrufstapelinformationen eine Momentaufnahme des aktuellen Betriebsstatus einer Anwendung dar, z. B. welche Threads welche Funktionen aufgerufen haben und zum Zeitpunkt der Momentaufnahme darauf warten, dass die Funktionen ihre Ausführung beenden. Die Daten in der Darstellung können normalisiert sein. In einigen Implementierungen entsprechen die Aufrufstapelinformationen einem Satz von Thread-Kennungen, Objektkennungen und Verfahrensnamen. In einigen Implementierungen werden die Aufrufstapelinformationen als Datenfeld oder verlinkte Liste von Objektnamen und Verfahrensnamen dargestellt oder gespeichert. -
3 zeigt eine grobe Übersicht eines Ablaufdiagramms, das eine Implementierung für ein Verfahren zum periodischen Erfassen und Senden von Aufrufstapelinformationen darstellt. Im Verfahren300 erfasst ein Stapeldaten-Erfassungsmodul an einem Benutzergerät120 in Schritt310 Aufrufstapelinformationen zum Ausführen einer Anwendung und generiert und speichert in Schritt320 eine lokale Repräsentation der erfassten Aufrufstapelinformationen. Das Modul wiederholt das Erfassen aus Schritt310 und das Speichern aus Schritt320 in regelmäßigen Abständen, was durch den Pfeil330 angegeben wird. Nach dem Generieren einer Repräsentation von mindestens einem Aufrufstapel bündelt das Modul in Schritt340 einen Satz von einer oder mehreren Repräsentationen von erfassten Aufrufstapelinformationen und sendet den gebündelten Satz von Aufrufstapelinformationen in Schritt350 über das Netzwerk110 an die Backend-Server130 . Das Stapeldaten-Erfassungsmodul kann ein im Benutzergerät120 implementierter Hardware-Schaltkreis, z. B. ein ASIC, oder ein Softwaremodul sein, das entweder vom Betriebssystem des Benutzergeräts120 oder von einer in die Anwendungsinstanz124 eingebundenen Softwarebibliothek bereitgestellt wird. In einigen Implementierungen erhalten Softwareanwendungsentwickler eine Softwarebibliothek zum Einbinden in die Anwendung, während eine Anwendungsinstanz124 mit einer oder mehreren Bibliotheksanweisungen das Stapeldaten-Erfassungsmodul aufruft. - Das Verfahren
300 beinhaltet unter ausführlicherer Bezugnahme auf3 das periodische Erfassen von Aufrufstapelinformationen (Schritt310 ) und das Erzeugen einer lokalen Repräsentation der erfassten Aufrufstapelinformationen (Schritt320 ). - Bei Schritt
310 erfasst ein Stapeldaten-Erfassungsmodul Aufrufstapelinformationen an einem Benutzergerät120 . Ein Aufrufstapel gibt, wie mit Bezug auf2 beschrieben, den Zustand der einzelnen Threads für eine Anwendung an. In einigen Implementierungen erfasst ein Stapeldaten-Erfassungsmodul an einem Benutzergerät120 in Schritt310 Aufrufstapelinformationen für eine in Ausführung befindliche Anwendung, indem es eine Defektlokalisierungsfunktion aufruft. Das Ergebnis der Funktion sind Aufrufstapelinformationen, z. B. Traces oder Trace-Speicherinhaltsausgaben. In einigen Implementierungen werden Aufrufstapelinformationen von einem Aufruf an eine Betriebssystemanweisung, die den Zustand der Ausführung einer Anwendung ausgibt, erfasst. In einigen Implementierungen werden Aufrufstapelinformationen von einem Aufruf an eine Programmausführungsumgebung (z. B. einen Debugger oder Perl-Interpreter) oder eine virtuelle Maschine (z. B. Java Virtual Machine), die den Zustand der Ausführung einer Anwendung ausgibt, erfasst. Die Aufrufstapel-Generierungsanweisungen beinhalten unter anderem: „jstack“ in Java; „caller“ in Perl; „debug_backtrace“ in PHP; „backtrace“ in Linux; „android: CallStack“ in Android; „Environment.StackTrace“ und „TraceEventCache.Callstack“ in .NET; sowie „StackTrace“ in C++, von der mscorlib. dll library. - In Schritt
320 verarbeitet das Stapeldaten-Erfassungsmodul die Aufrufstapelinformationen und generiert eine Repräsentation der erfassten Aufrufstapelinformationen, die es dann im lokalen Speicher des Benutzergeräts120 speichert. Die lokale Repräsentation der Aufrufstapelinformationen kann in einigen Implementierungen als Datenfeld oder verlinkte Liste von Objektnamen und Verfahrensnamen strukturiert sein. In einigen Implementierungen beinhaltet die Darstellungsstruktur hierarchische Daten. In einigen Implementierungen filtert das Aufrufstapel-Erfassungsmodul in Schritt320 Funktionsaufrufe heraus, die nicht informativ sind. In einigen Implementierungen werden dann, wenn es nicht ausreicht zu wissen, dass eine hochrangige Funktion aufgerufen wurde, von der hochrangigen Funktion aufgerufene untergeordnete Funktionen durch ein Filter entfernt. Das heißt, wenn ein Aufruf darin besteht, dass eine Schaltfläche auf dem Bildschirm dargestellt wird und es nicht ausreicht zu wissen, dass die Schaltfläche dargestellt wird, braucht man nicht zu wissen, wie genau die Schaltfläche dargestellt wird, und das Filter kann die am Darstellen der Schaltfläche beteiligten untergeordneten Funktionen auslassen. In einigen Implementierungen ist die lokale Repräsentation komprimiert. - Die Schritte
310 und320 zum Erfassen und Speichern von Aufrufstapelinformationen werden, wie durch den Pfeil330 angegeben, wiederholt. In einigen Implementierungen werden die Schritte in regelmäßigen periodischen Intervallen im Bereich von einer Iteration alle Zehntelsekunden (oder weniger) bis zu einer Iteration alle sechzig Sekunden (oder mehr) wiederholt. In einigen Implementierungen ist das periodische Intervall festgelegt. In einigen Implementierungen wird das periodische Intervall vom Anwendungsentwickler festgelegt. In einigen Implementierungen ist das periodische Intervall, z. B. mit beliebigen Intervalllängen oder mit Intervalllängen, die routinemäßig angepasst werden, variabel, um eine Auswirkung auf die Leistung zu verhindern. - Nachdem eine oder mehrere Repräsentationen der Aufrufstapelinformationen in Schritt
320 generiert und gespeichert wurden, bündelt das Stapeldaten-Erfassungsmodul die Daten (Schritt340 ) und sendet den gebündelten Satz von Aufrufstapelinformationen an den Backend-Server130 (Schritt350 ). In einigen Implementierungen basiert die Anzahl der in Schritt340 gebündelten iterativen Aufrufstapel-Repräsentationen auf einer vorbestimmten Anzahl von Iterationen, z. B. alle fünf Iterationen. In einigen Implementierungen basiert die Anzahl der in Schritt340 gebündelten iterativen Aufrufstapel-Repräsentationen auf einer vorbestimmten Zeitspanne, z. B. sämtliche alle fünf Minuten erfassten Daten. In einigen Implementierungen werden die Iterationen330 fortgesetzt, bis der Prozessorbedarf unter einen prozentualen Auslastungsschwellenwert fällt. In einigen Implementierungen werden die Iterationen330 fortgesetzt, bis die Netzwerkbandbreite unter einen Schwellenwert fällt. In einigen Implementierungen werden die Iterationen330 fortgesetzt, bis die Netzwerkqualität über einem Schwellenwert liegt. In einigen Implementierungen werden die Daten nicht über eine mobile Netzwerkverbindung, zum Beispiel eine 3G- oder 4G-Netzwerkverbindung gesendet, sondern werden zurückgehalten, bis eine WLAN-Netzwerkverbindung zur Verfügung steht. - Die Aufrufstapelinformationen können in Schritt
350 mit einem beliebigen geeigneten Netzwerkprotokoll, z. B. dem Transmission Control Protocol (TCP), dem Stream Control Transmission Protocol (SCTP) oder dem User Datagram Protocol (UDP), gesendet werden. In einigen Implementierungen werden die Aufrufstapelinformationen mit dem File Transfer Protocol (FTP) übertragen. In einigen Implementierungen werden die Aufrufstapelinformationen mit einem benutzerspezifischen Protokoll übertragen, womit eines der anderen Protokolle, wie z. B. TCP, SCTP oder TCP, überlagert wird. -
4 zeigt eine grobe Übersicht eines Ablaufdiagramms, das eine Implementierung für ein Verfahren400 zum Sammeln und Vergleichen von Aufrufstapelinformationen für eine Vielzahl von entfernten Geräten darstellt. Ein Stapelaggregationsserver140 sammelt eine Vielzahl von erfolgreichen Traces aus einer Vielzahl von „ersten“ Instanzen124 einer Anwendung, wobei jede Instanz auf einem jeweiligen entfernten Gerät120 in einer Vielzahl von entfernten Geräten ausgeführt wird (Schritt410 ). Nach dem Sammeln von mindestens einigen erfolgreichen Traces in Schritt410 empfängt der Stapelaggregationsserver140 Aufrufstapelinformationen von einer „zweiten“ Instanz124 der Anwendung, die auf einem entfernten Gerät120 ausgeführt wird (Schritt430 ). Der Stapelaggregationsserver140 bestimmt eine Ähnlichkeit zwischen den Aufrufstapelinformationen, die von der zweiten Instanz124 der Anwendung empfangen wurden, und den Aufrufstapelinformationen in der Vielzahl von erfolgreichen Traces, die von den ersten Anwendungsinstanzen (Schritt450 ) empfangen wurden. In Reaktion auf eine affirmative Feststellung in Schritt450 , dass die Aufrufstapelinformationen, die von der zweiten Instanz124 der Anwendung empfangen wurden, mit den in Schritt410 gesammelten erfolgreichen Traces vergleichbar sind, fügt der Stapelaggregationsserver140 dann das entfernte Benutzergerät120 zu einer Population von Geräten hinzu, bei denen davon ausgegangen wird, dass sie die bestimmte Vorgabe (Schritt470 ) voraussichtlich ausführen werden. - Unter ausführlicherer Bezugnahme auf
4 beginnt das Verfahren400 damit, dass ein Stapelaggregationsserver140 eine Vielzahl von erfolgreichen Traces aus einer Vielzahl von Instanzen124 einer Anwendung sammelt, wobei jede Instanz auf einem jeweiligen entfernten Gerät120 in einer Vielzahl von entfernten Geräten (Schritt410 ) ausgeführt wird. Zum Sammeln in Schritt410 gehört, dass der Stapelaggregationsserver140 in Schritt422 Aufrufstapelinformationen von einer ersten Instanz124 einer auf einem Benutzergerät120 ausgeführten Anwendung (z. B. unter Bezugnahme auf1 der Anwendungsinstanz124 (a), die auf Benutzergerät120 (a) ausgeführt wird) empfängt und in Schritt424 einen Indikator empfängt, dass die erste Instanz124 (a) der Anwendung eine Vorgabe ausgeführt hat. Der Stapelaggregationsserver140 aggregiert in Reaktion auf den Indikator die bis zur ausgeführten Vorgabe empfangenen Aufrufstapelinformationen und behandelt die aggregierten Daten in Schritt426 als erfolgreicher Trace. Die Sammlung von erfolgreichen Traces in Schritt410 ist fortlaufend und kann gleichzeitig mit dem Empfang von Stapeldaten zum Vergleich mit den erfolgreichen Traces oder nach dem Empfang dieser Daten erfolgen. - In Schritt
422 empfängt der Stapelaggregationsserver140 Aufrufstapelinformationen von einer ersten Instanz124 (a) einer Anwendung, die auf einem ersten entfernten Gerät120 (a) ausgeführt wird. Das entfernte Benutzergerät120 legt die Daten, z. B. wie mit Bezug auf3 beschrieben, zum Empfang durch den Server140 vor. In einigen Implementierungen, wenn der Stapelaggregationsserver140 Aufrufstapelinformationen empfängt, speichert der Server140 die empfangenen Aufrufstapelinformationen im Datenspeicher134 . In einigen Implementierungen identifiziert der Stapelaggregationsserver140 eine Quelle für die empfangenen Aufrufstapelinformationen, z. B. eine Kennung, die mit der ersten Anwendungsinstanz124 (a) und/oder dem ersten entfernten Gerät120 (a) assoziiert ist. In einigen Implementierungen aggregiert der Stapelaggregationsserver140 die empfangenen Daten mit zuvor von der gleichen Anwendungsinstanz124 (a) und/oder dem gleichen entfernten Gerät120 (a) empfangenen Daten. In einigen Implementierungen filtert der Stapelaggregationsserver140 die empfangenen Daten, z. B. um nicht informative Funktionsaufrufe herauszufiltern. In einigen Implementierungen werden dann, wenn es nicht ausreicht zu wissen, dass eine hochrangige Funktion aufgerufen wurde, von der hochrangigen Funktion aufgerufene untergeordnete Funktionen durch ein Filter entfernt. In einigen Implementierungen erkennt das Filter dynamisch Funktionsaufrufe, die in allen, von allen Anwendungsinstanzen empfangenen Aufrufstapelinformationen übereinstimmen, und entfernt die so erkannten Funktionsaufrufdaten. In einigen Implementierungen können alle Aufrufstapelinformationen, die für die Unterscheidung zwischen Ausführungsmustern nicht von Nutzen sind, herausgefiltert und entfernt werden. In einigen Implementierungen, wenn der Stapelaggregationsserver140 in Schritt430 Aufrufstapelinformationen von einer Anwendungsinstanz empfängt, behandelt der Server140 in Schritt422 auch diese empfangenen Daten als Dateneingang. - In Schritt
424 empfängt der Stapelaggregationsserver140 einen Indikator, dass die erste Instanz124 (a) der Anwendung eine Vorgabe ausgeführt hat. In einigen Implementierungen ist der Indikator ein ausdrücklicher von der Anwendungsinstanz124 ausgehender Indikator. In einigen Implementierungen wird der Indikator durch Analyse der in Schritt422 empfangenen Aufrufstapelinformationen identifiziert. In einigen Implementierungen besteht die Vorgabe im Ausführen eines bestimmten Funktionsaufrufs (oder einer Reihe von Funktionsaufrufen); in einigen dieser Implementierungen bedeutet der Indikator, dass die bestimmte Vorgabe ausgeführt wurde, dass der bestimmte Funktionsaufruf (oder die Reihe von Funktionsaufrufen) ausgeführt wurde, was durch Vorhandensein der Funktion(en) in den empfangenen Aufrufstapelinformationen erkannt wird. In einigen Implementierungen wird der Indikator von einem Backend-Server130 empfangen. In einigen Implementierungen wird die Vorgabe durch Interaktion zwischen dem Benutzergerät120 und einem Backend-Server130 ausgeführt, wobei der Server130 den Indikator für die erfolgreiche Ausführung der Vorgabe (an den Stapelaggregationsserver140 ) meldet. In einigen Implementierungen besteht der Indikator darin, dass die empfangenen Aufrufstapelinformationen für ein Ausführungsmuster mit der erfolgreichen Ausführung der Vorgabe übereinstimmen. In einigen dieser Implementierungen verwendet der Stapelaggregationsserver140 einen Clustering-Algorithmus, um zu bestimmen, ob die empfangenen Aufrufstapelinformationen den Aufrufstapelinformationen für Anwendungsinstanzen entsprechen, die die Vorgabe ausgeführt haben, und gibt, wenn dies der Fall ist, an, dass die Anwendungsinstanz ebenfalls die Vorgabe ausgeführt hat. In einigen dieser Implementierungen generiert der Clustering-Algorithmus eine Vertrauenswertung, und der Stapelaggregationsserver140 verwendet eine über einem vorbestimmten Schwellenwert liegende Vertrauenswertung als Indikator dafür, dass die Anwendungsinstanz die Vorgabe ausgeführt hat. In Schritt424 bestimmt der Stapelaggregationsserver140 , ob die erste Instanz124 (a) der Anwendung die Vorgabe ausgeführt hat, sodass die Aufrufstapelinformationen, die in Schritt422 empfangen wurden, Aufrufstapelinformationen darstellen, die mit Ausführungsmustern übereinstimmen, die voraussichtlich die Ausführung der Vorgabe beinhalten. - In Schritt
426 aggregiert der Stapelaggregationsserver140 in Reaktion auf den Indikator die bis zur ausgeführten Vorgabe empfangenen Aufrufstapelinformationen und behandelt die aggregierten Daten als erfolgreichen Trace. In einigen Implementierungen werden die aggregierten Aufrufstapelinformationen und/oder der Indikator, z. B. im Speicher134 , gespeichert. Die in Schritt410 gesammelte Vielzahl von erfolgreichen Traces beinhaltet die aggregierten Aufrufstapelinformationen aus Schritt426 für jede von einer Vielzahl von Anwendungsinstanzen124 . - Nach dem Sammeln von mindestens einigen erfolgreichen Traces in Schritt
410 empfängt der Stapelaggregationsserver140 in Schritt430 Aufrufstapelinformationen von einer Instanz124 der Anwendung, die auf einem entfernten Gerät120 ausgeführt wird (z. B. Anwendungsinstanz124 (b) die wie in1 dargestellt auf Benutzergerät120 (b) ausgeführt wird). Die Anwendungsinstanz in den Schritten430 ,450 und470 wird als „zweite Instanz“ der Anwendung im Vergleich zu den verschiedenen „ersten Instanzen“ der Anwendung, die in der Vielzahl von Instanzen in Schritt410 verwendet wurden, bezeichnet. In einigen Implementierungen kann eine „zweite Instanz“ der Anwendung bereits als „erste Instanz“ beteiligt gewesen sein, während die „zweite Instanz“ in anderen Implementierungen speziell von einer Beteiligung als „erste Instanz“ ausgeschlossen sein kann. Der Stapelaggregationsserver140 empfängt die Aufrufstapelinformationen von einem entfernten Benutzergerät120 über das Netzwerk110 . Das entfernte Benutzergerät120 legt die Daten, z. B. wie mit Bezug auf3 beschrieben, zum Empfang durch den Server140 vor. In einigen Implementierungen filtert der Stapelaggregationsserver140 die empfangenen Daten, z. B. um nicht informative Funktionsaufrufe herauszufiltern. In einigen Implementierungen entfernt das Filter Funktionsaufrufe, die in von allen Instanzen der Anwendung empfangenen Aufrufstapelinformationen übereinstimmen. In einigen Implementierungen können alle Aufrufstapelinformationen, die für die Unterscheidung zwischen Ausführungsmustern nicht von Nutzen sind, herausgefiltert und entfernt werden. - In Schritt
450 bestimmt der Stapelaggregationsserver140 eine Ähnlichkeit zwischen den Aufrufstapelinformationen, die in Schritt430 von der zweiten Instanz124 (b) der Anwendung empfangen wurden, und den Aufrufstapelinformationen in der Vielzahl der in Schritt410 gesammelten erfolgreichen Traces. In einigen Implementierungen werden Ähnlichkeiten durch Anwenden eines Clustering-Algorithmus auf die empfangenen Aufrufstapelinformationen identifiziert. Ein Clustering-Algorithmus, zum Beispiel ein hierarchischer Clustering-Algorithmus, erkennt Cluster von empfangenen Aufrufstapelinformationen, die einen hohen Grad von Ähnlichkeit aufweisen. Ein oder mehrere dieser Cluster sind mit erfolgreichen Traces assoziiert, und sollten die in Schritt430 von der zweiten Instanz124 (b) der Anwendung empfangenen Aufrufstapelinformationen mit einem mit erfolgreichen Traces assoziierten Cluster gruppiert werden, sind die in Schritt430 empfangenen Aufrufstapelinformationen für eine Anwendungsinstanz bestimmt, die voraussichtlich Teil eines erfolgreichen Trace ist. In einigen Implementierungen wird der Ähnlichkeitsgrad durch eine Ähnlichkeitswertung gemessen, wobei die Ähnlichkeitswertung in Schritt450 über einem Schwellenwert liegen muss, damit die in Schritt430 empfangenen Aufrufstapelinformationen als einem bestimmten Cluster von Aufrufstapelinformationen hinreichend ähnlich angesehen werden. In einigen Implementierungen legt der Stapelaggregationsserver140 fest, dass die Aufrufstapelinformationen das Benutzergerät aus dem Segment von Benutzergeräten, die die Vorgabe voraussichtlich ausführen, ausschließen. Das heißt, dass in manchen Fällen keine Ähnlichkeit zwischen den empfangenen Aufrufstapelinformationen und den Aufrufstapelinformationen in der Vielzahl der in Schritt410 gesammelten erfolgreichen Traces besteht. In einigen Implementierungen wird diese Unähnlichkeit als alternatives Segment aufgezeichnet. - In Reaktion auf eine affirmative Feststellung in Schritt
450 , dass die Aufrufstapelinformationen, die von der zweiten Instanz124 der Anwendung empfangen wurden, mit den in Schritt410 gesammelten erfolgreichen Traces vergleichbar sind, fügt der Stapelaggregationsserver140 dann in Schritt470 das entfernte Benutzergerät120 zu einer Population von Geräten hinzu, bei denen davon ausgegangen wird, dass sie die bestimmte Vorgabe (Schritt470 ) voraussichtlich ausführen werden. In einigen Implementierungen wird ein mit einer Kennung für das Benutzergerät verbundener Datensatz z. B. im Speicher134 mit einem Tag oder einer Kennung aktualisiert, dass das Benutzergerät eine Anwendung hostet, die sich in dem bestimmten Segment befindet, das die bestimmte Vorgabe voraussichtlich ausführen wird. -
5 zeigt eine grobe Übersicht eines Ablaufdiagramms, das eine Implementierung für ein Verfahren500 zum Reagieren auf die Erkennung einer Segmentzuordnung für die empfangenen Aufrufstapelinformationen darstellt. Ein Stapelaggregationsserver140 empfängt, wie mit Bezug auf4 beschrieben, Aufrufstapelinformationen von einer Instanz124 der auf einem entfernten Benutzergerät120 ausgeführten Anwendung. Der Stapelaggregationsserver140 erkennt in Schritt530 des Verfahrens500 eine Segmentzuordnung für das entfernte Gerät120 anhand der Aufrufstapelinformationen, die von der Anwendung empfangen wurden, die auf dem entfernten Benutzergerät ausgeführt wird. Der Stapelaggregationsserver140 bestimmt in Schritt540 , ob es für das erkannte Segment spezielle Inhalte gibt. und bezeichnet, wenn dies der Fall ist, in Schritt550 das entfernte Gerät für den Empfang der speziellen Inhalte. Der Stapelaggregationsserver140 speichert in Schritt560 die empfangenen Aufrufstapelinformationen und die erkannte Segmentzuordnung in einer Wissensbasis, die z. B. im Datenspeicher134 gespeichert ist. - Unter ausführlicherer Bezugnahme auf
5 erkennt der Stapelaggregationsserver140 in Schritt530 des Verfahrens500 eine Segmentzuordnung für das entfernte Gerät120 anhand der Aufrufstapelinformationen, die von der Anwendung empfangen wurden, die auf dem entfernten Benutzergerät ausgeführt wird. Der Stapelaggregationsserver140 empfängt die Aufrufstapelinformationen in der zuvor beschriebenen Weise von dem entfernten Benutzergerät120 . Das heißt, das Benutzergerät120 erfasst die Aufrufstapelinformationen und sendet die Daten über das Netzwerk110 zum Stapelaggregationsserver140 , der die Daten empfängt. Der Stapelaggregationsserver140 erkennt, wie mit Bezug auf4 beschrieben, eine Segmentzuordnung für das Benutzergerät120 anhand der empfangenen Aufrufstapelinformationen. In einigen Implementierungen verwendet der Stapelaggregationsserver140 einen Clustering-Algorithmus zum Vergleichen der empfangenen Aufrufstapelinformationen mit zuvor empfangenen Daten und zum Erkennen einer Teilmenge der zuvor empfangenen Daten, die am meisten mit den neu empfangenen Daten übereinstimmen. Die auf diese Weise erkannte Teilmenge entspricht einem Populationssegment. Der Stapelaggregationsserver140 erkennt in Schritt530 die Segmentzuordnung für das Benutzergerät auf der Grundlage dieser Vergleiche. - In Schritt
540 stellt der Stapelaggregationsserver140 dann fest, ob spezielle Inhalte für das erkannte Segment vorliegen. In einigen Implementierungen können Inhalte für das Segment vorliegen, wenn davon ausgegangen wird, dass das bestimmte Segment eine bestimmte Vorgabe voraussichtlich ausführen wird, wobei die Inhalte die Ausführung der bestimmten Vorgabe unterstützen sollen. In einigen Implementierungen werden die Inhalte von einem Entwickler oder Lieferanten der jeweiligen Softwareanwendung designiert. In einigen Implementierungen werden die Inhalte von (oder auf Anforderung von) einer Drittpartei angegeben. In einigen Implementierungen ist die Festlegung, ob spezielle Inhalte vorliegen, vom Empfangen der Aufrufstapelinformationen getrennt. Das heißt, dass der Stapelaggregationsserver140 die Aufrufstapelinformationen in einem ersten Zeitraum empfangen kann, und dann in einem späteren zweiten Zeitraum feststellt, ob es spezielle Inhalte für das erkannte Segment gibt. - Falls der Stapelaggregationsserver
140 in Schritt540 feststellt, dass es für die Lieferung an das in Schritt530 erkannte Segment spezielle Inhalte gibt, gibt der Server140 in Schritt550 das entfernte Gerät für den Empfang der speziellen Inhalte an. In einigen Implementierungen veranlasst der Stapelaggregationsserver140 einen Inhaltsserver160 dazu, die Inhalte an das Benutzergerät120 zu senden. In einigen Implementierungen setzt der Stapelaggregationsserver140 ein Flag oder verzeichnet einen von einem Inhaltsserver160 verwendeten Indikator zur Kennzeichnung der für die speziellen Inhalte designierten Empfänger. In einigen Implementierungen aktualisiert der Stapelaggregationsserver140 eine Wissensbasis mit einem Datensatz, der mit dem Benutzergerät120 assoziiert ist, das die Anwendungsinstanz124 hostet. Die Aktualisierung zeigt einem Inhaltsserver160 an, dass das Benutzergerät120 die speziellen Inhalte empfangen sollte. Der Inhaltsserver160 sendet dann in Reaktion auf den Datensatz den Inhalt über das Netzwerk110 an das Benutzergerät120 . - In Schritt
560 speichert der Stapelaggregationsserver140 die empfangenen Aufrufstapelinformationen und die erkannte Segmentzuordnung in einer Wissensbasis, z. B. im Datenspeicher134 . In einigen Implementierungen werden diese Daten, wie mit Bezug auf4 beschrieben, auf die gleiche Weise gespeichert. -
6 zeigt ein Blockdiagramm eines Computersystems910 , das für die Verwendung in den verschiedenen beschriebenen Implementierungen geeignet ist. In grober Übersicht beinhaltet das Computersystem910 mindestens einen Prozessor950 für die Durchführung von Aktionen in Übereinstimmung mit Anweisungen, sowie ein oder mehrere Speichergeräte970 und/oder975 zum Speichern von Anweisungen und Daten. Das dargestellte Computersystem910 beinhaltet einen oder mehrere Prozessoren950 in Kommunikation über einen Bus915 mit Speicher970 und mit mindestens einem Netzwerkschnittstellen-Controller920 mit einer Netzwerkschnittstelle922 , zum Anschließen an externe Netzwerkgeräte924 , die z. B. an einem Netzwerk (wie den in1 dargestellten Netzwerken110 ,160 und180 ) beteiligt sind. Der eine oder die mehreren Prozessoren950 sind ebenfalls über den Bus915 mit E/A-Geräten an einer oder mehreren E/A-Schnittstellen930 und beliebigen anderen Geräten980 verbunden. Der dargestellte Prozessor950 ist in Zwischenspeicher975 integriert oder direkt mit demselben verbunden. Im Allgemeinen führt ein Prozessor Anweisungen aus, die vom Speicher empfangen werden. - Genauer gesagt, kann es sich bei dem Prozessor
950 um eine beliebige Logikschaltung handeln, die Anweisungen, z. B. Anweisungen, die aus dem Speicher970 oder Zwischenspeicher975 geholt werden, verarbeitet. In vielen Ausführungsformen ist der Prozessor950 eine Mikroprozessoreinheit oder ein Spezialprozessor. Das Computergerät910 kann auf einem beliebigen Prozessor oder einem Satz von Prozessoren basieren, der/die in der Lage ist/sind, wie hierin beschrieben zu funktionieren. Der Prozessor950 kann ein Einzelkern- oder Multikernprozessor sein. Der Prozessor950 kann aus mehreren Prozessoren bestehen. - Der Speicher
970 kann ein beliebiges Gerät sein, das für die Speicherung computerlesbarer Daten geeignet ist. Der Speicher970 kann ein Gerät mit Festspeicher oder ein Gerät zum Einlesen von Wechselspeichermedien sein. Der Speicher970 kann sämtliche Formen von nicht flüchtigem Speicher, Medien und Speichergeräten, Halbleiterspeichergeräten (z. B. EPROM, EEPROM, SDRAM und USB-Flash-Speichergeräte), magnetische Datenträger, magneto-optische Datenträger und optische Datenträger (z. B. CD-ROM, DVD-ROM und Blu-Ray®-Discs) beinhalten. Ein Computersystem910 kann eine beliebige Anzahl von Speichergeräten970 aufweisen. - Der Zwischenspeicher
975 entspricht im Allgemeinen einer Form von Computerspeicher, der für schnelle Lesezeiten in unmittelbarer Nähe zum Prozessor950 angeordnet ist. In einigen Implementierungen ist der Zwischenspeicher975 Teil von oder auf dem gleichen Chip angeordnet wie der Prozessor950 . In einigen Implementierungen gibt es mehrere Zwischenspeicherebenen975 , z. B. Zwischenspeicherschichten L2 und L3. - Der Netzwerkschnittstellen-Controller
920 verwaltet den Datenaustausch über die Netzwerkschnittstelle922 . Der Netzwerkschnittstellen-Controller920 verarbeitet die physischen und Datenverbindungsschichten des OSI-Modells für die Netzwerkkommunikation. In einigen Implementierungen werden Aufgaben des Netzwerkschnittstellen-Controllers von dem Prozessor950 verarbeitet. In einigen Implementierungen ist der Netzwerkschnittstellen-Controller920 Teil des Prozessors950 . In einigen Implementierungen hat ein Computersystem910 mehrere Netzwerkschnittstellen-Controller920 . In einigen Implementierungen ist die Netzwerkschnittstelle922 ein Anschlusspunkt für eine physische Netzwerkverbindung, z. B. ein RJ45-Steckverbinder. In einigen Implementierungen unterstützt der Netzwerkschnittstellen-Controller920 drahtlose Netzwerkverbindungen, während ein Schnittstellenport922 einem drahtlosen Empfänger/Sender entspricht. Im Allgemeinen tauscht ein Computergerät910 Daten mit anderen Computergeräten924 über physische oder drahtlose Verbindungen mit einer Netzwerkschnittstelle922 aus. In einigen Implementierungen implementiert der Netzwerkschnittstellen-Controller920 ein Netzwerkprotokoll, wie zum Beispiel Ethernet. - Die anderen Computergeräte
924 sind mit dem Computergerät910 über eine Netzwerkschnittstelle922 (manchmal zur Unterscheidung von einem Anschluss auf Protokollebene als „Port“ oder „physischer Anschluss“ bezeichnet) verbunden. Bei den anderen Computergeräten924 kann es sich um ein gleichrangiges Computergerät, ein Netzwerkgerät oder ein beliebiges anderes Computergerät mit Netzwerkfunktion handeln. In einigen Implementierungen kann das andere Computergerät924 ein Netzwerkgerät, wie z. B. ein Hub, eine Bridge, ein Switch oder ein Router sein, sodass das andere Computergerät924 das Computergerät910 mit einem Datennetzwerk wie dem Internet verbindet. - In manchen Verwendungen unterstützt die E/A-Schnittstelle
930 ein Eingabegerät und/oder ein Ausgabegerät (nicht dargestellt). In manchen Verwendungen sind Eingabegerät und Ausgabegerät, z. B. als Touchscreen, in die gleiche Hardware integriert. In manchen Verwendungen, z. B. in einem Serverkontext, gibt es keine E/A-Schnittstelle930 oder wird die E/A-Schnittstelle930 nicht verwendet. In manchen Verwendungen sind zusätzliche Komponenten980 mit dem Computersystem910 , z. B. über einen Universal Serial Bus (USB) angeschlossene externe Geräte, verbunden. - Die anderen Geräte
980 können eine E/A-Schnittstelle930 , serielle Anschlüsse für externe Geräte und beliebige zusätzliche Coprozessoren beinhalten. In einigen Implementierungen beinhaltet das Computersystem910 eine Schnittstelle (z. B. eine Universal Serial Bus(„USB“)-Schnittstelle) zum Anschließen von Eingabegeräten (z. B. eine Tastatur, ein Mikrofon, eine Maus oder ein anderes Zeigegerät, Ausgabegeräte (z. B. Videoanzeige, Lautsprecher, ein aktualisierbares Braille-Terminal oder einen Drucker) oder zusätzliche Speichergeräte (wie z. B. einen tragbaren Flash-Speicher oder ein externes Medienlaufwerk). In einigen Implementierungen ist das E/A-Gerät in das Computersystem910 , z. B. als Touchscreen auf einem Tablet-Gerät, integriert. In einigen Implementierungen beinhaltet ein Computergerät910 ein zusätzliches Gerät980 , wie zum Beispiel einen Coprozessor, z. B. kann ein mathematischer Coprozessor den Prozessor950 bei Berechnungen mit hoher Präzision oder komplexen Berechnungen unterstützen. - Implementierungen des Gegenstands und die in dieser Spezifikation beschriebenen Vorgänge können in digitalen elektronischen Schaltungen oder in Computer-Software implementiert sein, die in einem physischen Medium, Firmware oder Hardware, einschließlich der in dieser Spezifikation offenbarten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehreren derselben, enthalten sind. Implementierungen des in dieser Spezifikation beschriebenen Gegenstandes können als ein oder mehrere Computerprogramme implementiert werden, die auf einem physischen Medium, d. h. als ein oder mehrere Module mit Computerprogrammanweisungen enthalten sind, die auf einem oder mehreren Computerspeichermedien codiert sind, um von einem Datenverarbeitungsgerät ausgeführt zu werden bzw. den Betrieb desselben zu steuern. Bei einem Computerspeichermedium kann es sich um ein computerlesbares Speichergerät, ein computerlesbares Speichersubstrat, eine frei adressierbare oder serielle Zugriffsspeicheranordnung oder -Vorrichtung oder eine Kombination aus einem oder mehreren derselben handeln, oder kann darin enthalten sein. Bei dem Computerspeichermedium kann es sich zudem um eine oder mehrere separate Komponenten oder Medien (z. B. mehrere CDs, Datenträger oder andere Speichervorrichtungen) handeln bzw. diese können darin enthalten sein. Das Computerspeichermedium kann physisch und nicht transitorisch sein.
- Die in dieser Spezifikation beschriebenen Vorgänge können als Vorgänge implementiert werden, die durch eine Datenverarbeitungsvorrichtung an Daten ausgeführt werden, die auf einer oder mehreren computerlesbaren Speichervorrichtung(en) gespeichert oder von anderen Quellen empfangen werden. Die Prozesse und Logikabläufe können zudem durch eine Zwecklogikschaltung, wie z. B. einen FPGA (Field Programmable Gate Array) oder einen ASIC (anwendungsspezifischen integrierten Schaltkreis) ausgeführt und das Gerät in Form derselben implementiert werden.
- Auch wenn diese Spezifikation viele spezifische Implementierungsdetails enthält, sollten diese nicht als Einschränkungen des Umfangs der Erfindungen oder der Ansprüche ausgelegt werden, sondern als Beschreibungen von Merkmalen, die für bestimmte Implementierungen bestimmter Erfindungen spezifisch sind. Bestimmte Merkmale, die in dieser Spezifikation im Zusammenhang mit separaten Implementierungen beschrieben werden, können darüber hinaus in Kombination in einer einzelnen Implementierung implementiert werden. Umgekehrt können verschiedene Merkmale, die im Zusammenhang mit einer einzelnen Implementierung beschrieben werden, auch in mehreren Implementierungen separat oder in einer geeigneten Teilkombination implementiert werden. Außerdem können, auch wenn die Merkmale weiter oben ggf. als in bestimmten Kombinationen wirkend beschrieben und sogar zunächst als solche beansprucht werden, in einigen Fällen ein oder mehrere Merkmale einer beanspruchten Kombination aus der Kombination herausgeschnitten und die beanspruchte Kombination auf eine Teilkombination oder eine Variante einer Teilkombination gerichtet werden.
- Verweise auf „oder“ können als einschließend ausgelegt werden, sodass alle Begriffe, die mithilfe von „oder“ beschrieben werden, einen beliebigen einzelnen, mehr als einen oder alle beschriebenen Begriffe angeben können. Die Begriffe „erster“, „zweiter“, „dritter“ usw. sollen nicht notwendigerweise eine Reihenfolge angeben und dienen im Allgemeinen lediglich zur Unterscheidung zwischen gleichartigen oder ähnlichen Gegenständen oder Elementen.
- Es wurden somit bestimmte Implementierungen des Gegenstands beschrieben. Andere Implementierungen liegen innerhalb des Umfangs der folgenden Ansprüche. So können in einigen Fällen die in den Patentansprüchen angegebenen Aktionen in einer anderen Reihenfolge durchgeführt werden und dennoch die erwünschten Ergebnisse erzielen. Außerdem erfordern die in den beigefügten Figuren dargestellten Prozesse nicht unbedingt die gezeigte spezielle Reihenfolge oder fortlaufende Reihenfolge, um die erwünschten Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking oder Parallelverarbeitung verwendet werden.
Claims (20)
- System, umfassend: eine Wissensbasis, die eine gesammelte Vielzahl von erfolgreichen Traces von einer Vielzahl von Instanzen einer Anwendung auf einer Vielzahl von entfernten Geräten speichert; eine Netzwerkschnittstelle; und einen Computerprozessor, konfiguriert zum: Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen über die Netzwerkschnittstelle von einer ersten Instanz der Anwendung, die auf einem ersten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die erste Instanz der Anwendung beinhalten; Empfangen von der ersten Instanz der Anwendung eines Indikators dafür, dass die erste Instanz der Anwendung eine Vorgabe ausgeführt hat; Aggregieren, in Reaktion auf das Empfangen des Indikators, der empfangenen Einheiten von Aufrufstapelinformationen, die zu der ausgeführten Vorgabe führen, als erfolgreicher Trace und Speichern des erfolgreichen Trace in der Wissensbasis; Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer zweiten Instanz der Anwendung, die auf einem zweiten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die zweite Instanz der Anwendung beinhalten; Feststellen einer Ähnlichkeit zwischen den von der zweiten Instanz der Anwendung empfangenen Aufrufstapelinformationen und der Vielzahl von erfolgreichen Traces; und Hinzufügen, in Reaktion auf das Feststellen der Ähnlichkeit, des zweiten entfernten Geräts zu einer Population von Geräten, die die Vorgabe voraussichtlich ausführen wird.
- System nach Anspruch 1, weiterhin umfassend ein Filter, das für die Verwendung eines Regelsatzes konfiguriert ist, um Informationen, die alle Instanzen der Anwendung gemeinsam haben, aus jeder empfangenen Einheit von Aufrufstapelinformationen auszuschließen.
- System nach Anspruch 2, wobei der Computerprozessor konfiguriert ist, den Regelsatz anhand der gesammelten Vielzahl von erfolgreichen Traces zu aktualisieren.
- System nach Anspruch 2, wobei der Computerprozessor konfiguriert ist, den Regelsatz anhand von Aufrufstapel-Traces, bei denen die Vorgabe nicht ausgeführt wurde, zu aktualisieren.
- System nach Anspruch 1, wobei die Aufrufstapelinformationen von einer mit der Anwendung verknüpften Bibliothek empfangen werden.
- System nach Anspruch 1, wobei eine Einheit von Aufrufstapelinformationen mehrere gebündelte Aufrufstapel-Erfassungen beinhaltet.
- System nach Anspruch 1, wobei die Periodizität der Aufrufstapel-Erfassungen zwischen einer Erfassung pro Sekunde und einer Erfassung pro Minute liegt.
- System nach Anspruch 1, wobei das Feststellen einer Ähnlichkeit zwischen den Aufrufstapelinformationen, die von der zweiten Instanz der Anwendung empfangen wurden, und der Vielzahl von erfolgreichen Traces das Verwenden eines Clustering-Algorithmus umfasst, mit dem bestimmt wird, ob von der zweiten Instanz der Anwendung empfangene Aufrufstapelinformationen zu einem Cluster von erfolgreichen Traces gehören.
- System nach Anspruch 1, wobei die Vorgabe ein Kaufereignis ist.
- Verfahren, umfassend: Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer ersten Instanz der Anwendung, die auf einem ersten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die erste Instanz der Anwendung beinhalten; Empfangen von der ersten Instanz der Anwendung eines Indikators dafür, dass die erste Instanz der Anwendung eine Vorgabe ausgeführt hat; Aggregieren der empfangenen Einheiten von Aufrufstapelinformationen, die zu der ausgeführten Vorgabe führen, als erfolgreicher Trace; Sammeln einer Vielzahl von erfolgreichen Traces aus einer Vielzahl von Instanzen der Anwendung, die auf einer Vielzahl von entfernten Geräten ausgeführt werden; Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer zweiten Instanz der Anwendung, die auf einem zweiten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die zweite Instanz der Anwendung beinhalten; Feststellen einer Ähnlichkeit zwischen den von der zweiten Instanz der Anwendung empfangenen Aufrufstapelinformationen und der Vielzahl von erfolgreichen Traces; sowie Hinzufügen des zweiten entfernten Geräts zu einer Population von Geräten, die die Vorgabe voraussichtlich ausführen werden.
- Verfahren nach Anspruch 10, weiterhin umfassend das Filtern der Aufrufstapelinformationen mit einem Regelsatz, um alle Informationen, die alle Instanzen der Anwendung gemeinsam haben, auszuschließen.
- Verfahren nach Anspruch 11, umfassend das Aktualisieren des Regelsatzes anhand der gesammelten Vielzahl von erfolgreichen Traces.
- Verfahren nach Anspruch 11, umfassend das Aktualisieren des Regelsatzes anhand von Aufrufstapel-Traces, bei denen die Vorgabe nicht ausgeführt wurde.
- Verfahren nach Anspruch 10, umfassend, dass die Aufrufstapelinformationen von einer mit der Anwendung verknüpften Bibliothek empfangen werden.
- Verfahren nach Anspruch 10, wobei eine Einheit von Aufrufstapelinformationen mehrere gebündelte Aufrufstapel-Erfassungen beinhaltet.
- Verfahren nach Anspruch 10, wobei die Periodizität der Aufrufstapel-Erfassungen zwischen einer Erfassung pro Sekunde und einer Erfassung pro Minute liegt.
- Verfahren nach Anspruch 10, wobei das Feststellen einer Ähnlichkeit zwischen den Aufrufstapelinformationen, die von der zweiten Instanz der Anwendung empfangen wurden, und der Vielzahl von erfolgreichen Traces das Verwenden eines Clustering-Algorithmus umfasst, mit dem bestimmt wird, ob von der zweiten Instanz der Anwendung empfangene Aufrufstapelinformationen zu einem Cluster von erfolgreichen Traces gehören.
- Verfahren nach Anspruch 10, wobei die Vorgabe ein Kaufereignis ist.
- Nicht-flüchtiges computerlesbares Medium, auf dem Anweisungen gespeichert sind, die bei Ausführung durch einen oder mehrere Computerprozessoren den einen oder die mehreren Computerprozessoren veranlassen zum: Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer ersten Instanz der Anwendung, die auf einem ersten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die erste Instanz der Anwendung einschließen; Empfangen von der ersten Instanz der Anwendung eines Indikators dafür, dass die erste Instanz der Anwendung eine Vorgabe ausgeführt hat; Aggregieren, in Reaktion auf das Empfangen des Indikators, der empfangenen Einheiten von Aufrufstapelinformationen, die zu der ausgeführten Vorgabe führen, als erfolgreicher Trace und Speichern des erfolgreichen Trace in einer Wissensbasis, die eine gesammelte Vielzahl von erfolgreichen Traces aus einer Vielzahl von Instanzen der Anwendung speichert, die auf einer Vielzahl von entfernten Geräten ausgeführt werden; Empfangen einer oder mehrerer Einheiten von Aufrufstapelinformationen von einer zweiten Instanz der Anwendung, die auf einem zweiten entfernten Gerät ausgeführt wird, wobei die Aufrufstapelinformationen periodische Erfassungen eines Ausführungsstatus für die zweite Instanz der Anwendung beinhalten; Feststellen einer Ähnlichkeit zwischen den von der zweiten Instanz der Anwendung empfangenen Aufrufstapelinformationen und der Vielzahl von erfolgreichen Traces; und Hinzufügen des zweiten entfernten Geräts zu einer Population von Geräten, die die Vorgabe voraussichtlich ausführen werden.
- Nicht-flüchtiges computerlesbares Medium nach Anspruch 19, auf dem Anweisungen gespeichert sind, die bei Ausführung durch einen oder mehrere Computerprozessoren den einen oder die mehreren Computerprozessoren dazu veranlassen, die Aufrufstapelinformationen mit einem Regelsatz zu filtern, um Aufrufstapelinformationen, die alle Instanzen der Anwendung gemeinsam haben, auszuschließen.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/089468 WO2016061820A1 (en) | 2014-10-24 | 2014-10-24 | Methods and systems for automated tagging based on software execution traces |
Publications (1)
Publication Number | Publication Date |
---|---|
DE112014007090T5 true DE112014007090T5 (de) | 2017-07-13 |
Family
ID=55760101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE112014007090.4T Pending DE112014007090T5 (de) | 2014-10-24 | 2014-10-24 | Verfahren und systeme zum automatischen tagging anhand von software-ausführungs-traces |
Country Status (5)
Country | Link |
---|---|
US (4) | US9940579B2 (de) |
CN (2) | CN107077341B (de) |
DE (1) | DE112014007090T5 (de) |
GB (1) | GB2546205B (de) |
WO (1) | WO2016061820A1 (de) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9330119B2 (en) | 2013-04-11 | 2016-05-03 | Oracle International Corporation | Knowledge intensive data management system for business process and case management |
KR102408649B1 (ko) * | 2016-02-19 | 2022-06-15 | 삼성전자주식회사 | 환경 설정 방법 및 장치 |
US11074609B1 (en) * | 2016-03-03 | 2021-07-27 | Google Llc | Systems and method for improving mediated sponsored content networks using a stack trace |
US10534643B2 (en) | 2016-05-09 | 2020-01-14 | Oracle International Corporation | Correlation of thread intensity and heap usage to identify heap-hoarding stack traces |
US10268601B2 (en) * | 2016-06-17 | 2019-04-23 | Massachusetts Institute Of Technology | Timely randomized memory protection |
US10310991B2 (en) | 2016-08-11 | 2019-06-04 | Massachusetts Institute Of Technology | Timely address space randomization |
US11314623B2 (en) * | 2019-01-23 | 2022-04-26 | Red Hat, Inc. | Software tracing in a multitenant environment |
US11074155B2 (en) * | 2019-04-04 | 2021-07-27 | International Business Machines Corporation | Generating representative microbenchmarks |
US11080114B2 (en) | 2019-11-26 | 2021-08-03 | International Business Machines Corporation | Controlling interaction with a scalable application |
CN111611161B (zh) * | 2020-05-20 | 2023-08-08 | 中电科航空电子有限公司 | 一种应用于航空电子软件的轻量级调试工具的实现方法 |
US20220116782A1 (en) * | 2020-10-08 | 2022-04-14 | Qatar Foundation For Education, Science And Community Development | Compromised mobile device detection system and method |
US11356524B1 (en) | 2020-12-18 | 2022-06-07 | International Business Machines Corporation | Coordinating requests actioned at a scalable application |
US11422880B1 (en) * | 2021-04-30 | 2022-08-23 | Intuit Inc. | Methods and systems for determining crash similarity based on stack traces and user action sequence information |
CN117749854A (zh) * | 2022-09-13 | 2024-03-22 | 腾讯科技(深圳)有限公司 | 一种建立网络连接的方法、装置、电子设备及存储介质 |
Family Cites Families (79)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5848396A (en) | 1996-04-26 | 1998-12-08 | Freedom Of Information, Inc. | Method and apparatus for determining behavioral profile of a computer user |
US5928369A (en) | 1996-06-28 | 1999-07-27 | Synopsys, Inc. | Automatic support system and method based on user submitted stack trace |
US6282701B1 (en) | 1997-07-31 | 2001-08-28 | Mutek Solutions, Ltd. | System and method for monitoring and analyzing the execution of computer programs |
US6112240A (en) | 1997-09-03 | 2000-08-29 | International Business Machines Corporation | Web site client information tracker |
US6651243B1 (en) | 1997-12-12 | 2003-11-18 | International Business Machines Corporation | Method and system for periodic trace sampling for real-time generation of segments of call stack trees |
US6751789B1 (en) | 1997-12-12 | 2004-06-15 | International Business Machines Corporation | Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination |
US6002872A (en) | 1998-03-31 | 1999-12-14 | International Machines Corporation | Method and apparatus for structured profiling of data processing systems and applications |
US6857120B1 (en) | 2000-11-01 | 2005-02-15 | International Business Machines Corporation | Method for characterizing program execution by periodic call stack inspection |
US6944660B2 (en) | 2001-05-04 | 2005-09-13 | Hewlett-Packard Development Company, L.P. | System and method for monitoring browser event activities |
CA2491419A1 (en) | 2002-06-28 | 2004-01-08 | Omniture, Inc. | Capturing and presenting site visitation path data |
US7458078B2 (en) * | 2003-11-06 | 2008-11-25 | International Business Machines Corporation | Apparatus and method for autonomic hardware assisted thread stack tracking |
US7987453B2 (en) * | 2004-03-18 | 2011-07-26 | International Business Machines Corporation | Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data |
US7299319B2 (en) * | 2004-03-22 | 2007-11-20 | International Business Machines Corporation | Method and apparatus for providing hardware assistance for code coverage |
US7421684B2 (en) * | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7792954B2 (en) | 2004-04-02 | 2010-09-07 | Webtrends, Inc. | Systems and methods for tracking web activity |
US7730460B1 (en) * | 2004-06-18 | 2010-06-01 | Apple Inc. | Code execution visualization using software fingerprinting |
CN1606307A (zh) * | 2004-11-15 | 2005-04-13 | 南京大学 | 基于安全操作系统的网络强制访问控制的方法 |
US20060130001A1 (en) * | 2004-11-30 | 2006-06-15 | International Business Machines Corporation | Apparatus and method for call stack profiling for a software application |
US7509632B2 (en) * | 2005-03-24 | 2009-03-24 | International Business Machines Corporation | Method and apparatus for analyzing call history data derived from execution of a computer program |
US7792919B2 (en) * | 2005-04-15 | 2010-09-07 | Microsoft Corporation | Methods and apparatus for performing diagnostics of web applications and services |
US7356590B2 (en) | 2005-07-12 | 2008-04-08 | Visible Measures Corp. | Distributed capture and aggregation of dynamic application usage information |
US7734768B2 (en) | 2005-07-26 | 2010-06-08 | International Business Machines Corporation | System and method for adaptively collecting performance and event information |
US20070038896A1 (en) * | 2005-08-12 | 2007-02-15 | International Business Machines Corporation | Call-stack pattern matching for problem resolution within software |
JP5090661B2 (ja) | 2006-04-12 | 2012-12-05 | 株式会社エヌ・ティ・ティ・ドコモ | ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法 |
US20080005281A1 (en) * | 2006-06-29 | 2008-01-03 | Microsoft Corporation | Error capture and reporting in a distributed computing environment |
US20080052678A1 (en) * | 2006-08-07 | 2008-02-28 | Bryan Christopher Chagoly | Method for Providing Annotated Transaction Monitoring Data for Initially Hidden Software components |
GB0623355D0 (en) * | 2006-11-23 | 2007-01-03 | Ibm | Software tracing |
GB0623354D0 (en) * | 2006-11-23 | 2007-01-03 | Ibm | Software tracing |
US7533130B2 (en) | 2006-12-19 | 2009-05-12 | Yahoo! Inc. | User behavior reporting based on pre-aggregated activity data |
JP5081480B2 (ja) * | 2007-03-28 | 2012-11-28 | 株式会社エヌ・ティ・ティ・ドコモ | ソフトウェア挙動モデル化装置、ソフトウェア挙動モデル化方法、ソフトウェア挙動検証装置及びソフトウェア挙動検証方法 |
US8214806B2 (en) * | 2007-05-09 | 2012-07-03 | International Business Machines Corporation | Iterative, non-uniform profiling method for automatically refining performance bottleneck regions in scientific code |
US8185880B2 (en) * | 2007-10-04 | 2012-05-22 | International Business Machines Corporation | Optimizing heap memory usage |
US10664889B2 (en) | 2008-04-01 | 2020-05-26 | Certona Corporation | System and method for combining and optimizing business strategies |
CN101582048A (zh) * | 2008-05-16 | 2009-11-18 | 国际商业机器公司 | 一种用于缺陷管理的方法和系统 |
US20090328005A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Debugger call stack caching |
CN101615143B (zh) * | 2008-06-27 | 2013-04-17 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
CN101661425B (zh) | 2008-08-26 | 2012-03-21 | 国际商业机器公司 | 测试覆盖分析方法和装置 |
US7877642B2 (en) * | 2008-10-22 | 2011-01-25 | International Business Machines Corporation | Automatic software fault diagnosis by exploiting application signatures |
US8578019B2 (en) | 2008-11-02 | 2013-11-05 | Observepoint, Llc | Monitoring the health of web page analytics code |
US8713157B2 (en) | 2008-11-14 | 2014-04-29 | Interpret, Llc | System for collecting computer application usage data of targeted application programs executed on a plurality of client devices |
WO2010093996A1 (en) * | 2009-02-13 | 2010-08-19 | Peter Anthony Crosby | Memory utilization analysis |
US8930818B2 (en) | 2009-03-31 | 2015-01-06 | International Business Machines Corporation | Visualization of website analytics |
CN101561775B (zh) * | 2009-05-12 | 2010-09-15 | 华为技术有限公司 | 内存监控方法和装置 |
US9020939B2 (en) * | 2009-06-30 | 2015-04-28 | International Business Machines Corporation | Correlating queries issued by applications with their source lines and analyzing applications for problem determination and where used analysis |
US20100333071A1 (en) * | 2009-06-30 | 2010-12-30 | International Business Machines Corporation | Time Based Context Sampling of Trace Data with Support for Multiple Virtual Machines |
CN101937439B (zh) | 2009-06-30 | 2013-02-20 | 国际商业机器公司 | 用于收集用户访问相关信息的方法和系统 |
US8453027B2 (en) * | 2009-09-17 | 2013-05-28 | Microsoft Corporation | Similarity detection for error reports |
CA2776913C (en) * | 2009-10-08 | 2017-01-03 | Irdeto Canada Corporation | A system and method for aggressive self-modification in dynamic function call systems |
US9600347B2 (en) * | 2009-11-26 | 2017-03-21 | International Business Machines Corporation | Verifying synchronization coverage in logic code |
US8584098B2 (en) * | 2009-12-04 | 2013-11-12 | Sap Ag | Component statistics for application profiling |
US9081888B2 (en) | 2010-03-31 | 2015-07-14 | Cloudera, Inc. | Collecting and aggregating log data with fault tolerance |
CN102262527B (zh) * | 2010-05-31 | 2015-12-09 | 国际商业机器公司 | 生成网络服务的方法和系统 |
US8959442B2 (en) * | 2010-06-11 | 2015-02-17 | Microsoft Corporation | Memory allocation visualization for unmanaged languages |
US8799872B2 (en) * | 2010-06-27 | 2014-08-05 | International Business Machines Corporation | Sampling with sample pacing |
US20120078708A1 (en) | 2010-09-23 | 2012-03-29 | Kate Taylor | System and Method for Recording and Analyzing Internet Browser Traffic Independent of Individual or Specific Digital Platforms or Websites |
US8949675B2 (en) * | 2010-11-30 | 2015-02-03 | Microsoft Corporation | Error report processing using call stack similarity |
US9274919B2 (en) * | 2011-04-29 | 2016-03-01 | Dynatrace Software Gmbh | Transaction tracing mechanism of distributed heterogenous transactions having instrumented byte code with constant memory consumption and independent of instrumented method call depth |
US8898290B2 (en) | 2011-05-11 | 2014-11-25 | Google Inc. | Personally identifiable information independent utilization of analytics data |
US9146909B2 (en) | 2011-07-27 | 2015-09-29 | Qualcomm Incorporated | Web browsing enhanced by cloud computing |
US8881107B2 (en) | 2011-08-24 | 2014-11-04 | Microsoft Corporation | Automatic memory leak detection |
JP5686199B2 (ja) * | 2011-09-22 | 2015-03-18 | 富士通株式会社 | サーバ装置、ログ転送プログラム、ログ転送方法およびログ転送システム |
US20130227352A1 (en) * | 2012-02-24 | 2013-08-29 | Commvault Systems, Inc. | Log monitoring |
US20130249917A1 (en) * | 2012-03-26 | 2013-09-26 | Microsoft Corporation | Profile data visualization |
US9183108B2 (en) * | 2012-03-27 | 2015-11-10 | Microsoft Technology Licensing, Llc | Logical grouping of profile data |
US10063645B2 (en) | 2012-05-10 | 2018-08-28 | Clicktale Ltd. | Method and system for monitoring and tracking browsing activity on handled devices |
US8719791B1 (en) * | 2012-05-31 | 2014-05-06 | Google Inc. | Display of aggregated stack traces in a source code viewer |
US9317460B2 (en) * | 2012-06-15 | 2016-04-19 | International Business Machines Corporation | Program event recording within a transactional environment |
US20140040786A1 (en) | 2012-08-01 | 2014-02-06 | KeyMetric, Inc. | Automatic tracking of user engagement with computing interfaces |
US9658941B2 (en) * | 2013-01-28 | 2017-05-23 | Rackspace Us, Inc. | Methods and systems of function-specific tracing |
US9135145B2 (en) * | 2013-01-28 | 2015-09-15 | Rackspace Us, Inc. | Methods and systems of distributed tracing |
US9223681B2 (en) * | 2013-02-15 | 2015-12-29 | International Business Machines Corporation | Automated debug trace specification |
US9021448B1 (en) * | 2013-02-28 | 2015-04-28 | Ca, Inc. | Automated pattern detection in software for optimal instrumentation |
US10817312B2 (en) * | 2013-03-14 | 2020-10-27 | Microsoft Technology Licensing, Llc | Programming model for performant computing in document-oriented storage services |
US9465717B2 (en) * | 2013-03-14 | 2016-10-11 | Riverbed Technology, Inc. | Native code profiler framework |
US9256515B2 (en) * | 2013-08-21 | 2016-02-09 | Vmware, Inc. | Stack trace compression |
US9697545B1 (en) * | 2014-03-11 | 2017-07-04 | Vmware, Inc. | Service monitor for monitoring and tracking the performance of an application running on different mobile devices |
US9183116B1 (en) * | 2014-04-23 | 2015-11-10 | Microsoft Technology Licensing, Llc | Call chain interval resource impact aggregation differencing |
US9588872B2 (en) * | 2015-02-20 | 2017-03-07 | Vmware, Inc. | Discovery of code paths |
US10949316B2 (en) | 2018-06-03 | 2021-03-16 | Apple Inc. | Detection and analysis of energy consumption of software applications |
-
2014
- 2014-10-24 DE DE112014007090.4T patent/DE112014007090T5/de active Pending
- 2014-10-24 GB GB1705847.0A patent/GB2546205B/en active Active
- 2014-10-24 WO PCT/CN2014/089468 patent/WO2016061820A1/en active Application Filing
- 2014-10-24 CN CN201480082848.1A patent/CN107077341B/zh active Active
- 2014-10-24 CN CN202010620871.9A patent/CN111913875B/zh active Active
-
2016
- 2016-01-25 US US15/005,777 patent/US9940579B2/en active Active
-
2018
- 2018-04-06 US US15/947,666 patent/US10977561B2/en active Active
-
2020
- 2020-11-10 US US17/094,642 patent/US20210056439A1/en not_active Abandoned
- 2020-11-30 US US17/107,795 patent/US11379734B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
GB2546205A (en) | 2017-07-12 |
US10977561B2 (en) | 2021-04-13 |
WO2016061820A1 (en) | 2016-04-28 |
GB2546205B (en) | 2021-07-21 |
US20210081812A1 (en) | 2021-03-18 |
US11379734B2 (en) | 2022-07-05 |
US20180225575A1 (en) | 2018-08-09 |
US20160140031A1 (en) | 2016-05-19 |
US9940579B2 (en) | 2018-04-10 |
CN111913875A (zh) | 2020-11-10 |
US20210056439A1 (en) | 2021-02-25 |
CN107077341B (zh) | 2020-07-14 |
CN111913875B (zh) | 2024-04-26 |
CN107077341A (zh) | 2017-08-18 |
GB201705847D0 (en) | 2017-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE112014007090T5 (de) | Verfahren und systeme zum automatischen tagging anhand von software-ausführungs-traces | |
DE102017121758A1 (de) | Intelligente Assistenz für wiederholte Aktionen | |
DE102015004127A1 (de) | Verfahren und System zum Vergleichen von verschienenen Versionen einer cloud-basierten Anwendung in einer Produktionsumgebung unter Verwendung von getrennten Back-End-Systemen | |
DE112016002120T5 (de) | Entwicklungs- und Vetriebsplattform für Software | |
DE112010003144T5 (de) | Erweiterbare Grundstruktur zur Unterstützung verschiedener Einsatzarchitekturen | |
DE202015009298U1 (de) | Dynamische Anpassung von Shard-Zuweisungen | |
DE202017106604U1 (de) | Benutzerdefinierte digitale Komponenten | |
DE112012002362T5 (de) | Automatisierte Empfehlungen für Cloud-Computing-Optionen | |
DE112021002820T5 (de) | Dynamische automatisierung einer auswahl von pipeline-artefakten | |
DE102014114005A1 (de) | Risikobeurteilung von Interaktionen von Anwendungen für mobile Einheiten aufgrund von Reputation | |
DE202014010940U1 (de) | Dynamische Shuffle-Rekonfiguration | |
DE102013201664B4 (de) | Vorausschauendes Zwischenspeichern bei Telekommunikationstürmen unter Verwendung der Weitergabe der Kennung von Elementen von Daten mit hohem Bedarf auf einer geographischen Ebene | |
DE112012004776T5 (de) | Erzeugen einer Produktionsserver-Lastaktivität für einen Testserver | |
DE112012001441B4 (de) | Umsetzen von HTTP-Anforderungen in Vertrauenswürdigkeitsnachrichten zur Sicherheitsverarbeitung | |
DE112016002226T5 (de) | Systeme und verfahren zur verwendung von webseitenskripten zu segmenten von kundensitzungen auf einer webseite | |
DE102014116744B4 (de) | Management von Informationstechnologieressourcen | |
DE202014010924U1 (de) | Nichtflüchtiges Shuffle-System | |
DE112012000305B4 (de) | Gemeinsame Wiederherstellung von Datenquellen | |
DE112013006588T5 (de) | Verwaltungssystem zum Verwalten eines Computersystems und Verwaltungsverfahren hierfür | |
DE112014002960T5 (de) | Ableitung verallgemeinerter Testfälle | |
DE112020004760T5 (de) | Steuern von interaktionen mit einer skalierbaren anwendung | |
DE102013209934A1 (de) | Systemverwaltungsvorrichtung, Systemverwaltungsverfahren und Speichermedien | |
US11726893B2 (en) | System for automatically evaluating a change in a large population of processing jobs | |
DE112021004854T5 (de) | Dynamische ersetzung von verarbeitungselementen mit einem leistungsabfall in streaming-anwendungen | |
DE112020004688T5 (de) | Debuggen und erstellen von profilen von maschinenlernmodelltraining |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed | ||
R081 | Change of applicant/patentee |
Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US |
|
R082 | Change of representative |
Representative=s name: KASTEL, STEFAN, DIPL.-PHYS.UNIV., DE Representative=s name: KILBURN & STRODE LLP, GB Representative=s name: KILBURN & STRODE LLP, NL Representative=s name: MAIKOWSKI & NINNEMANN PATENTANWAELTE PARTNERSC, DE |
|
R082 | Change of representative |
Representative=s name: KASTEL, STEFAN, DIPL.-PHYS.UNIV., DE Representative=s name: KILBURN & STRODE LLP, GB Representative=s name: KILBURN & STRODE LLP, NL |
|
R082 | Change of representative |
Representative=s name: KASTEL, STEFAN, DIPL.-PHYS.UNIV., DE Representative=s name: KILBURN & STRODE LLP, GB Representative=s name: KILBURN & STRODE LLP, NL |
|
R082 | Change of representative |
Representative=s name: KILBURN & STRODE LLP, GB Representative=s name: KILBURN & STRODE LLP, NL |
|
R082 | Change of representative |
Representative=s name: KILBURN & STRODE LLP, GB Representative=s name: KILBURN & STRODE LLP, NL |
|
R082 | Change of representative |
Representative=s name: KILBURN & STRODE LLP, NL |