0

ソフトウェアが開発されると、ユニット、統合、機能、マニュアルなど、さまざまな種類のテストが行​​われます。私の現在のプロジェクト (SQL サーバーを使用した winforms) には、レガシー コード (テストなし) があり、多くのバグがあります。手動とテストの組み合わせ(主に統合)を使用してそれらを削除しようとしています

しかし、それでもいくつかのバグは逃げることができます。

例 (架空のシナリオ) - 顧客が過去 6 か月間に相当の商品を購入した場合、6 か月が経過すると、その購入に対していくらかの割引が与えられる必要があります。彼のステータスは特権に更新される必要があります。

しかし、何らかの理由 (コードのバグ) により、システムはそうしていません。このようなシナリオにどのように対処すればよいでしょうか? 説明したようなシナリオを探すスクリプトをデータベースで実行する必要がありますか? シナリオの別の拡張として、顧客は特権を与えられたらギフトを送る必要がありますが、そうするためのシステムがありません。

考え?

4

2 に答える 2

1

「説明されているようなシナリオを探すスクリプトをデータベースで実行する必要がありますか?」

「データベースにスクリプトを入れて問題を修正する」という意味ですか、それではありません

いいえ。一度もない。いかなる状況下で。特殊な特殊なケースのロジックを追加してバグを回避することは、実際には非常に悪い考えです。

  1. その独特の特殊なケースのロジックに独自のバグがある場合は、バグのあるコードを追加して、バグのあるコードを修正してみます。純損失。

  2. システムを強化しようとすると、意味をなさないこの独特の特殊なケースのロジックがあります。

    a。運が良ければ、回避できるはずのバグを修正したので、冗長になります。今何?どのコピーを削除しますか?

    b。そうしないと、他のコードと矛盾します。今何?どちらが正しいですか?

「データベースにスクリプトを入れて問題の発見とデバッグに役立てる」という意味であれば、そうです。短時間で、自由に使えるすべてのツールを使用して、バグを見つけて修正します。見つかって修正すると、このスクリプトは役に立たなくなり、削除する必要があります。

「データベースにスクリプトを記述してアプリケーションをテストする」という意味であれば、そうです。それがユニットテストスクリプトの目的です。それらを使用してください。

データベースに配置するスクリプトを作成するよりも、単体テストを作成する方がはるかに優れています。 ユニットテストが最善のアプローチです。

于 2010-03-09T17:14:06.623 に答える
0

自動化されたテストスイートを設置する必要があります。このテストスイートは、仕様に必要なすべてのシナリオを実装します。割引が機能することをテストするために6か月待つことができないため、実際の実装は模擬実装に置き換えられます(例はJavaですが、同じ原則が他の言語にも適用されます)。たとえば、6か月が経過したことを「シミュレート」します。 。アサーションを使用してテストを自動化できます。

テストスイート全体の準備ができたら、コードのリファクタリング/変更後に(以前と同様に)すべてのテストに合格すれば、リファクタリングによって機能が壊れていないことを確認できます。

于 2010-03-09T17:12:09.653 に答える