私は最近、ゲーム開発のテストについて質問しました。これは、私がこのテストについて知っていた方法です。そこの答えは、いくつかの奇妙で具体的な欠点を示しています。
- コードを高度に結合する必要がある場合は、コストがかかります。
- さまざまなハードウェアプラットフォームに注意する必要がある場合、ユーザーへの出力を分析する必要がある場合、コードの結果がより広いコンテキストでのみ意味をなす場合、実行することは困難です。
- UIとUXのテストは非常に困難です。
- そして、特に、自動テストは、非常に低コストの(または無料の)ベータテスターの束よりも高価で効果が低い場合があります。
4番目の点は、私の経験を思い出させてくれます。私は非常にスリムでXP指向のスクラム管理会社で働いていましたが、そこでは単体テストが強く推奨されました。しかし、よりスリムで官僚的でないスタイルへの道のりで、同社はQAチームの構築を怠りました。テスターはいませんでした。そのため、テスト範囲が95%を超える場合でも、顧客はいくつかのシステムを使用して些細なバグを頻繁に発見しました。そこで、別のポイントを追加します。
- 自動化されたテストでは、QAとテストは重要ではないと感じることがあります。
また、私は当時、ドキュメンテーションについて考えていましたが、テスト2に(多少は)有効であると思われる仮説を作成しました。コードは非常に急速に進化するので、そのような速度に沿ったドキュメントを作成するのはかなり難しいと感じたため、簡単に古くなった重いドキュメントを書くよりもコードを読みやすくすることに時間を費やす方が価値があります。(もちろん、これは APIには適用されず、内部実装にのみ適用されます。)テストには、同じ問題が少しあります。テストされたコードと比較すると、書くのが遅すぎるかもしれません。OTOH、テストは古いことを警告しているので、ささいな問題ではありませんが、ドキュメントを非常に慎重に読み直さない限り、ドキュメントは静かなままです。
最後に、私が時々見つける問題:自動化されたテストはツールに依存しているかもしれず、それらのツールは不完全に書かれているかもしれません。しばらく前にXULを使用してプロジェクトを開始しましたが、そのようなプラットフォーム用の単体テストを書くのは苦痛です。Objective-C、Cocoa、およびXcode 3を使用して別のアプリケーションを開始しましたが、そのテストモデルは基本的に多くの回避策でした。
自動テストの欠点について他の経験もありますが、それらのほとんどは他の回答に記載されています。それにもかかわらず、私は自動化されたテストの激しい支持者です。これにより、非常に多くの作業と頭痛が軽減され、デフォルトで常にお勧めします。自動テストの利点と比較した場合、これらの欠点は単なる詳細に過ぎないと判断します。(オートダフェを避けるために異端をコメントした後は、常にあなたの信仰を宣言することが重要です。)