私がすることはすべてSQL Serverであると言うことから始めたいので、それらは私が与える例です。ただし、一般に、これはシステムに関係なく、あらゆる形式のコードに適用されます。
これを少し分解することから始めましょう。
アップグレード
システムがあり、その一部またはすべてをアップグレードしようとしています。たとえば、インスタンスをSQL Server 2012から2014にアップグレードします。この時点でテストが不可欠です。残念ながら、小さなアプリケーションのすべての部分をテストすることはおそらく不可能です。その時点で、「作業」テストと呼ばれることを行います。基本システムは機能していますか。一般的なタスクを最初から最後まで実行します。すべてのオプションをテストするのではなく、メインパスのみをテストしてください。
SQL Serverのアップグレードを行う際には、いくつかの必読事項もあります。基本的Backward Compatibility
に、新しいバージョンのエントリ(ここでは2014のエントリ)を読み、リストに何も含まれていないこと(重大な変更、動作の変更など)を確認します。
アプリケーションコード
ここでは、新しい/変更中のアプリケーションコードを調べています(もちろん、既存のものは既にテスト済みですから?)。この場合、すべてをテストする必要があります。テストケースを事前にセットアップし、影響を受ける機能の少なくとも大部分を実行する必要があります。この時点で、他の人に同様のチェックを行わせることをお勧めします。このコードは、おそらくかなり長い間、適切な場所に配置され、多くの人々によって使用されます。あなたはそれがうまく機能していることを確認したい。
これに本当に役立つことができるものの1つは、unit tests
簡単に再現可能なセットを生成することです。 Steve Jonesは、tSQLtを使用してTSQLコードをテストすることをお勧めします(SQL Serverのみが心配です)。しかし、これを行うことにより、固定された一連のテストをすばやく実行でき、リグレッションテスト(アップグレードを行う前など、すべてをテストする)に非常に役立ちます。
機能/構成
アプリケーションコードの変更だけでなく、新しい機能や構成の変更を徹底的にテストする必要があります。たとえば、列ストアインデックスの使用を開始する場合初めて、影響を受けるテーブルに触れるすべてのコードをテストする必要があります。生成した単体テストを使用して、アプリケーションをテストします。これらの機能はおそらく新しいもので(おそらくプラットフォームでは新しいものです)、おそらく予期しないいくつかの落とし穴があります。構成の変更に関しては、おそらくシステム全体に影響を与える可能性のある何かについて話しています。経験則は、テストし、慎重にテストすることです。アクティブなシステム(おそらく実稼働システムのみ)に入るまで実際には表示されない変更がいくつかありますが、それは最初にテスト環境でそれらを試さないことの言い訳ではありません。
ユーザーデータを参照/影響するアドホッククエリ
ユーザーデータに影響するコードがある場合は、一般的にテストする必要がありますAd Hoc
。異なるパラメーターを使用して同じコードを何度も繰り返し実行している場合は、毎回テストする必要はないでしょう。
たとえば、四半期ごとにAdListテーブルから1つ以上の広告を削除する必要があります。
DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')
その時点で、すでにコードをテストしており(固定文字列を変更しているだけです)、おそらくコードを実行するだけでかなり安全です(万が一に備えて適切なバックアップがあると仮定します)。
一つの簡単なテストする方法DELETE
、UPDATE
またはINSERT
あなたが期待する行の数と種類が返されていることを確認した後、SELECTにそれらを変更し、それらを実行することです。
SELECT
s をテストする必要がないと思うかもしれません。実際にはデータを変更しないからです。しかし、あなたは正しい理由でコードを実行していますか?あなたがマネージャーのために調査を行っているとしましょう。マネージャーは、このデータをマネージャーなどに渡します。間違ったデータを取得していないことを確認するためにテストします(または他の人がデータを収集するのをブロックします)。
システムデータを参照/影響するアドホッククエリ
これは、おそらく「すべてをテストする」ルールの1つの例外です。システムデータに対して情報クエリを実行しています。ここで重要なことは、期待するデータを取り戻すことです。クエリが単純なもの(システムビューのクエリ)である場合は、ビュー/列の実際の意味を確認している限り、おそらく大丈夫です。クエリが複雑な場合(たとえば、返された列の計算で3つまたは4つのシステムビューを押す)、期待するデータが返されることを確認するために、いくつかのテストを実行することができます。
概要
要約すると、はい、すべてをテストする必要があります。作成して実行することが重要である場合は、テストすることが重要です。ただし、すべてのコード行のすべてのブランチをテストするのに膨大な時間を費やす必要があるわけではありません。ただし、ある程度のテストを行う必要があります。
自動化された単体テストはあなたの友人です。出現によりDevOps
とContinuous Integration
、あなたはより多くのアプリケーションを迅速かつ簡単にあなたのコードをテストする方法が表示されます。もちろん、それには適切なテスト環境とデータが必要ですが、それはまったく異なる議論です。