「デッドマンスイッチ」を使用して、時間に敏感なコードを管理する


8

私たちのソフトウェア環境では、おそらく良い習慣として、私たちはしばしばa / bテストを実行します。ただし、私たちの環境は、非常に短い時間で、コードがデッドテストで非常に壊れやすくなるように設定されています。テストレジストリは、内部wikiページのコレクションに過ぎません。

私は「デッドマンスイッチ」スタイルの機能しないコード管理を考えました。この用語に慣れていない場合は、何かがトリガーされないようにするために定期的にリセットする必要があるスイッチを指します。つまり、応答しない場合、スイッチがトリガーし、スイッチに何をしたいかを示します。トリガーが実行されます。

たとえば、いくつかのコードを記述し、何らかの方法でこのシステムに登録し、事前に選択した日付が循環すると、介入しない限り(手動で)このコードが削除される(自動的にクリーンアップされる)との通知を受け取りますクリーンアップ、またはスヌーズ)。

そのようなシステムを組み込むことの長所、短所、実行可能性は何ですか?それは可能ですか?腐敗に対してコードを管理するいくつかの代替方法は何でしょうか?


回答:


8

コードを自動的に削除するシステムが心配です。あなたのチームが非常によくしつけられていない限り、私はこれを涙と痛みへの道としてしか見ることができません。物事が起こります:人々は休暇に出かけ、病気になり、会社を辞め、有効期限が近づいているコードが何をするのかを忘れてしまいます...そして、コードが自動的にクリーンアップされると、あらゆる種類のトラブルを招きます。これらのモジュール間にコンパイラーの依存関係がないことを確認する必要があります。そうしないと、依存するものが存在しなくなったときに、コンパイルに突然失敗する可能性があります。また、運用サポートの誰かが古いトラブルチケットで作業していて、エラーメッセージのスタックトレースが削除されたコードを参照している場合にどうなるかを忘れないでください。そして、これは監査を行う人々をあまり起こさないと思います...

より安全かもしれないものは、コードの小さなモジュールがアクティブ化の日付と非アクティブ化の日付をクエリできるフレームワークです。コードの一部が実行されようとすると、データベースは日付をチェックし、現在の日付がアクティブ化と非アクティブ化の日付の間にある場合、フレームワークはコードの実行を許可します。また、これらの日付をデータベースに保存すると、n日以内に期限切れになるすべてのモジュールのレポートを生成するスクリプトを簡単に作成し、メールで送信するので、月曜日の朝に受信トレイで最初に受け取ることができます。


これは、発券システムと統合されている場合に最適です。ありがとう!
dclowd9901 2013年

2
有効化/無効化は、利用可能なライセンスシステムで表現できるため、自分で作成する必要もありません。個々のアセンブリには、そのようなライセンスシステムを適用することができ、そのアセンブリのエクスポートされたインターフェースのいずれかにアクセスすると、フローティングライセンスサーバーで使用可能なライセンス(有効期限が切れていない)があることが自動的に確認されます。
ジミーホファ2013年

6

このシステムは、孤立したテストの問題を引き起こします。テストのスイートとそれに関連する一連の本番コードを書いた人が会社を去った場合、テストは新しい所有者の脱落により早期に削除される危険があります。

「テストが多すぎる」ことは問題ではないと私は思います。テストが自動化されている限り、無駄は主にCPU時間に限定されます。これは、人時間と比較するとわずかな変化です。デッドマンのスイッチを介して自動的に削除されたテストは、そうでなければ本番環境で終了するバグをキャッチし、将来深刻なメンテナンスの問題を引き起こす可能性があります。

コードのモジュールとテストスイートを組み合わせたレジストリを作成することで、プロセスベースの代替案を構築できると思います。モジュールでメンテナンスが実行されるたびに、対応するテストスイートの維持/削除/更新を決定するプロセスが必要になります。これは純粋な簿記なので、コードがリストから自動的に削除される危険はありません。


1
孤立したコードの問題は非常に関連性があると考えましたが、自動化の代替案を知らないほど愚かだったと思っていました。しかし、それが自動化されていなくても、別の代替案を提示してくれてうれしいです(私たち2人が同意できるのは、ほぼ間違いなく涙に終わるでしょう)。
dclowd9901 2013年

@ dclowd9901-削除するコードをテストするテストを削除しないのはなぜですか?さらに、テストは同じファイル内に含まれるべきではありません。テストまたは少なくとも、どのテストが実行されるコード内のコメントですか?
ラムハウンド2013年

怠惰?正直に言って、私はこのシステムを最初の実装よりもずっと前に使いました。テスト自体は、特定の状況下でコードを削除します。彼らは文字通りコード自体と一緒に座っています。
dclowd9901 2013年

3

私は長い間、シンプルなカレンダーアラートを使用してきました(会社で使用しているカレンダーソフトウェアで十分な場合)。いつでもアラートが届くように設定し、必要なすべての情報を入力して、アラートが鳴るまでにすべてを忘れてしまったと想定しています。

SSL証明書をインストールしますか?有効期限を確認し、自分自身(および、私たち3人のうちの1人または2人が会社にもういなくなった場合のマネージャーと別のエンジニア)のカレンダーイベントを設定します。交換が必要な人に警告し、証明書を受け取った人の連絡先情報、証明書が使用された特定の場所、および証明書を期限切れにすることの体系的な影響の詳細を入力します(おそらく、システムと証明書が無効になっている可能性があります)その時間になると期限切れになるはずです)。

自動コード修正は、実に恐ろしくて危険な考えです。カレンダーを慎重に使用して、時間が重要なものに関連する時間が通知されるようにしてください。これが特にカレンダーの目的です。責任ある方法で時間に敏感なイベントに注意を払わないという問題がある場合、私はあなたが職場で尋ねたくなるかもしれないまったく異なる問題を抱えていると思います。


2

後のコードそれらの変更に依存するため、非常に悪い考えのように思えます。自動ロールバックは広範囲にわたる損傷を引き起こします。

代わりに、テストを自動(ユニット)テストとして記述し、夜間に実行します。


自動化された単体テスト?それは相互作用テストでどのように機能しますか?
dclowd9901 2013年

@ dclowd9901-その場合、他のすべての相互作用テストが実行されるのと同じくらい頻繁に実行されます。どのインタラクションを実行する必要があるかを特定の時点で実行するのではなく、理解することは難しくありません。難しい場合は、プロセスに問題があります。
ラムハウンド2013年

@ dclowd9901:UIの背後にあるコードが頻繁に変更される場合でも、実際には毎週UIを変更していないことを願っています。ユーザーはUIの変更を好まないため、Microsoftに質問してください。したがって、テストするのは、UIが十分に同一であることです。
MSalters 2013年

Webアプリケーションでは、さまざまなUIアプローチ(配置や色などを微調整する)を非常に迅速に反復可能な方法でテストする機会があるため、それを利用します。ただし、毎週の変更ではありません。通常、データは数か月にわたって収集されます。
dclowd9901 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.