Header background

Dynatrace Live Debuggerのデバッグを超えた5つの強力な活用事例

製品を開発しリリースする上で最も大きな喜びの一つは、本番環境や顧客向けデモ、あるいはユーザーの手に渡った製品が初めて動作する瞬間を目撃することです。そして、ご自身が携わる製品を愛しているならば、この感動は二度目、十度目、いや百度目になっても決して色褪せることはありません。

お客様とのご協働には、時に予想外の喜びが伴います。Dynatraceでは、お客様が当社のプラットフォームを創造的かつ予想外の方法で活用される様子に、常に感銘を受けております。

このたび発表した「Dynatrace Live Debugger」は、開発者にリアルタイムデータと実行時動作の洞察をこれまでにない形で提供します。この強力なツールは本番環境を含む様々な環境で活用でき、開発プロセスの強化と堅牢なアプリケーションパフォーマンスの確保に貢献します。以下に、エンジニアの皆様がLive Debuggerで実現された特に素晴らしい活用例をご紹介します。

ホワイトボックステスト

UI変更を本番環境にデプロイする最大の利点は、変更内容を即座に動作確認できる点です。新バージョンのデプロイを確認し、期待通りに動作することをテストすれば完了です。

一方、バックエンドへの新コードデプロイは複雑で、このような透明性は得られません。アルゴリズムやデータソースの変更、新機能フラグの動作を確認するにはどうすればよいでしょうか?

多くの開発者はログでこの課題を軽減しようとしますが、それは手間がかかり、エラーが発生しやすいプロセスです。言うまでもなく、ログが欠落している場合、アプリケーションやサービスを再度デプロイし直す必要があります。

Dynatrace Live Debugger を使用すれば、非破壊的なブレークポイントを設定し、新しいコードが意図した新しいパスを辿っているか、新しい引数が考慮されているか、入力引数と出力引数が期待通りに一致しているかを即座に確認できます。これにより、現実が期待と異なる場合でも、トレース ID、デバッグレベルのログ、リアルタイムのスナップショットが指針となります。

テストデータの収集

正確なテストデータは生死を分けることもあります。結局のところ、統合開発環境(IDE)内で実世界の状況を全く考慮せずにテストデータをでっち上げたところで、どれほどの有用性があるでしょうか?

文字列のような単純なデータ型でさえ、長さ、エンコーディング、ロケール、文字種など、無限のバリエーションが存在します。リスト、配列、オブジェクトは当然ながらさらに複雑です。最悪の場合、関数が予期しないデータ型を受け取る可能性もあります。

Live Debugger を使用すれば、本番環境でコードが呼び出す正確な入力を確認できるため、それに応じてテストを設計できます。テストに影響を与える可能性のあるシステム設定を検証し、実際に動作している様子を確認することも可能です。

Figure 1. Live snapshot includes variables, process, stack trace, and tracing information.
図1. ライブスナップショットには、変数、プロセス、スタックトレース、およびトレース情報が含まれます。

パフォーマンスベンチマーク

パフォーマンスベンチマークは、ソフトウェアエンジニアリングにおける未解決の課題の一つです。多くの点で、科学というよりむしろ芸術に近いと言えます。

時には、重厚なツールが必要になることもあります。負荷生成ツールはトラフィックをシミュレートします。分散トレースはトランザクションをエンドツーエンドで可視化します。メモリやCPUのプロファイリングは「藁の中の針」を見つける手助けとなります。

しかし、時には単純に「ポイントAからポイントBまでの所要時間」を簡単に測定したい場合もあるでしょう。特定のサービス、エンドポイント、ユーザー、ユースケースに焦点を当てたい場合や、異なるシステム負荷下でのパフォーマンスを監視したい場合、あるいはシステム内のイベント同士を相関分析したい場合などです。

いずれの場合も、Live Debugger を使用すれば、開発者は 2 つのブレークポイントを設定し、それらの呼び出し間の時間を測定できます。これにより、二分探索などの動的な手法を用いて問題のあるコードの正確な行を特定し、より精密なパフォーマンスベンチマークが可能になります。

Figure 2. Set multiple non-breaking breakpoints to measure and correlate data.
図2. データを測定し相関させるため、複数の非解除ブレークポイントを設定します。

デッドコード検出

関数を見て、それが実際に呼び出されたことがあるのか疑問に思ったことはありませんか?特定の関数が使用されたかどうかを確実に教えてくれる、わずかなログ行を確認したいと思ったことはありませんか?もう心配はいりません!

ワンクリックで関数に非中断ブレークポイントを設定し、1週間後に戻って確認すれば、その関数が誰によって呼び出されたか、あるいは呼び出されたかどうかがわかります。

さらに一歩進めて、特定の分岐内にブレークポイントを設定し、条件が真か偽かをテストすることも可能です。条件付きブレークポイントを設定して、引数が使用されているか、特定の値を取得しているか、あるいは特定の範囲やサイズを超えているかをチェックできます。

Figure 3. Set conditional non-breaking breakpoints.
図3. 条件付き非中断ブレークポイントを設定します。

コードを理解する

理解できないコードに直面することはどれほど頻繁にあるでしょうか?そのコードが1か月前、あるいは10年前に書かれたものかもしれません。前任者、別のチーム、あるいは新しいGenAIツールによって書かれた可能性もあります。時には、他人の「スパゲッティコード」を解読する喜びを味わうこともあるでしょう。

どこから手をつけて、どのようにコードを追跡すべきかを知ることは、特に現代の動的言語においては大きな課題となる場合があります。IDEでのステップバイステップのデバッグでは、特にローカルでのコード実行が容易でない場合、十分な成果が得られないことがよくあります。Live Debuggerは、実際の環境でコードの実行をリアルタイムに追跡することを可能にします。

どの関数がどのコードを呼び出しているのか、実際の値がどのように処理されているのか、そしてコードが特定の動作や出力をどのように形成しているのかを確認できます。

トラブルシューティングとデバッグ

当然のことながら、多くのお客様はより明白な用途、すなわちコードのトラブルシューティングやデバッグのためにライブデバッガーをご利用になります。

現代のソフトウェア開発手法は、コードのデバッグを非常に困難にすることで知られています。その理由は数多くあります。

  • クラウドネイティブサービスは、ローカル環境での実行が困難です。
  • 分散サービスは複数のプロセスとランタイムを伴います。
  • レガシーサーバーは時間の経過とともに複雑さと依存関係を増大させます。
  • コンプライアンスとセキュリティにより、厳しく制限された環境では容易なアクセスが制限されます。

しかし、デバッグが容易なサービスであっても、再現不可能なトラブルシューティングの問題が発生することがよくあります。例えば:

  • (分散)アプリケーションの状態に関連する動作。
  • 不明瞭かつ予期しない入力に起因する不具合。
  • オープンソースおよびサードパーティの依存関係における(誤った)動作に起因する不具合。
  • 欠陥は特定の段階またはデプロイメントでのみ発生します。

Live Debuggerを導入することは、本番環境レベルのツールでコードを調査できることを意味します。あらゆる環境やアーキテクチャで使用可能なこのツールは、必要な時に必要な場所で、コードの最も深い内部動作を即座に可視化します。

ご利用を開始する

Dynatrace Live Debugger およびVisual Studio CodeJetBrains向けプラグインは、Dynatrace Platform サブスクリプションをお持ちのすべての Dynatrace SaaS 顧客様にご利用いただけます。

詳細については、最新のLive Debugger発表ブログ記事および関連プレスリリースをご覧ください。