2

ソフトウェアの断片を独立したレイヤーに分割し、動的検出と依存性注入を使用してそれらを分離する努力が増えるにつれて、システム内のどの「レイヤー」が「アプリケーション」のシステム全体の障害に寄与しているかを判断することが難しくなっています。

単体テストは、レイヤーを構成するすべての「モジュール」が期待どおりに機能していることを確認するのに役立ちます。ただし、単体テストは、スタブやモックなどの手法を使用して各「モジュール」を分離するように記述されています。

以下の単純な例を考えてみましょう。

L1。データベース -> L2。データベース層 -> L3。Windows サービス -> L4。クライアント アプリケーション

たとえば、データベース エンジンがダウンしている場合、システムは正常に動作しません。データベース エンジンが本当にダウンしているのか、それともデータベース レイヤー (L2) コードにバグがあるのか​​を判断するのは困難です。確認するには、何らかのデータベース管理ツールを起動して、データベース エンジンが実行されているかどうかを確認する必要があります。

私たちが達成しようとしているのは、システムに「何か問題がある」ときにいつでも起動できる開発者ツールです。このツールは、各レイヤーに「整合性」または「診断」データを「照会」します。このツールは、ソフトウェア層とその「整合性ステータス」のリストを提供します。これですぐに、レイヤ X が問題の原因である (つまり、データベース エンジンがダウンしている) と言うことができます。

もちろん、各レイヤーは、ツールによって照会できる独自の「診断方法」を提供する責任があります。

ここで達成しようとしているのは、ある種の「統合テスト」フレームワーク、または実行時に使用できる同様のものです (単体テストのようなコンパイル/ビルド時間ではありません)。インスピレーションは、車のような独自の「オンボード診断」を備えた物理デバイスから生まれました。ソフトウェアの世界での良い例は、コンピュータの電源を入れるたびに実行されるパワーオン セルフ テストです。

このようなことを見たり聞いたりしたことがある人はいますか?提案や指針はきっと大いに役立ちます!

4

1 に答える 1

0

各レイヤーがWCFサービスとして実装する共通のインターフェイスを持つことができます。このようにして、すべてのレイヤーに接続して診断することができます。この診断を利用できるようにしておくと便利かもしれませんが、どこにでも(すべてのレイヤーで)実装したい場合は、失敗する可能性のある別の問題になります。どのように診断しますか?システムはWCFサービスで群がりますが、これは多くのメンテナンスが必要であり、安定性が低下するため、良くありません。さらに、実装には多くの作業が必要です。

私が提案する代替案は、適切なロギングシステムを導入することです。最低限、すべてのモジュールですべてのcatchセクションでエラーをログに記録する必要がありますが、特にデバッグの目的で、それ以上のものをお勧めします。無料で非常に柔軟なLog4Netの使用をお勧めします。不要な場合はログを記録しないので効果的です。つまり、ログレベルを高く設定でき、本番コードでもパフォーマンスに影響を与えません。構成ファイルの設定を変更することにより、実行時にログレベルを変更できます。私はLog4Netをよく使用し、うまく機能します。

コードロギングを取得したら、すべてのログが中央データベースに入るようにLog4Netを構成できます。そうすれば、何が起こっているのか、何が失敗したのか、どこで何が例外またはメッセージであったのかを比較的簡単に診断できる場所が1つあります。何か問題が発生したときに送信される電子メールメッセージを設定することもできます。

于 2012-07-05T17:37:57.287 に答える