1714903162
2024-05-02 08:28:48
まず、私の資格情報です。 私が人生で書いたコードの半分以上はテストコードです。 私の名前が付いているのは、 何百もの の ページ TDDの。 ソフトウェア開発者としての最初のインターンシップでは、最初の週にテストを作成し、ペアプログラミングをしながら TDD を行いました。 私は単体テスト、統合テスト、探索のためのテスト、問題の再発を防ぐためのテスト、メッセージを残すためのテスト、テスト フレームワークと BDD を使用したテスト (フレームワークをまったく使用しないテスト)、Ruby、JavaScript、C、Go、Rust でのテストを作成しました。 、スキーム、バッシュ。 2杯飲んだ後、私は他の多くの人よりもテストについてよく知っていると言いたいと思います。 今のところ、飲み物はありませんが、私はテストが大好きで、テストを書くことが私に大きな喜びをもたらしていると言いたいと思います。
しかし、私はもはや疑いがないとは言えません。 テーマを貫くために: 10 年前に比べて、今日の私はテストに対してはるかに冷静になっています。 最近、ここ数カ月で疑問が大きくなってきました。
不安定なテストが多すぎます。 正しいと分かっていた小さな変更を加えた後、テストが成功しないためにテストに合格するまでに時間がかかりすぎました。 統合テストが多すぎて、変更をマージできるまで 20 分、30 分、40 分も待たされた結果、何ヶ月も経ってから何もテストしていないことが判明しました。 何度もバグを修正してきましたが、 知っていた この問題は手動で徹底的にテストし、コードがどのように機能するかを理解しており、この問題が二度と起こらないことを 100% 確信していたため修正されました。しかしその後、バグを修正するのに私がかかった時間の 10 倍の時間を費やしました。バグが修正されていることを私がずっと知っていたことを証明するためだけにテストを書きます。
私がテストで大文字 b 信者だったわけではありません。 私はテスト カバレッジを指標として信じたことはありませんし、誰かが最初にテストを書いたか最後にテストを書いたかを気にしたこともありませんでした (とはいえ、TDD を真剣に試したことがある人は少なすぎると思います)。関数テストか統合テストか、テストの中身についての議論のほとんどは、これは大きな誤解であり、テストでデータベースにアクセスしてはいけないと言っている人は真剣に考えるべきであり、おそらくまだ十分なテストを書いていないのでしょう。
それでも、私は常にテストは良いものであり、テストされていないコードは悪いものだと考えてきました。 テストのないものをマージするときはいつも、テストに価値がないかもしれないと心の底ではわかっていても、罪悪感を感じました。 テストは品質の表れであり、テストがより適切であればあるほど、製品の品質は高くなると思いました。
どちらも、私がこれまで使用し、ハッキングした中で最高品質のソフトウェアの 1 つです。
どちらも予想よりもテストが少ないです。
もちろんどちらもテストはあります。 Ghostty には、ターミナル状態、フォント レンダリング、エスケープ シーケンスとコントロール シーケンスのパーサーなど、そのコアに関する広範なテストがあります。 Zed はまた、基本的なデータ構造 (ロープ、SumTree、エディターなど) について多くのテストを行い、大きな機能についてもテストします。 非常にスマートでクールな非同期コードのプロパティ テスト。
しかし、どちらのコードベースにも、たとえば実行に非常に時間がかかるテストはありません。 UI とスクリーンショットをクリックして比較し、ネットワークにアクセスするテストはありません。 Zed の完全なテストスイートでは、CI で 1052 個のテストを実行するのに 136 秒かかります。 Ghostty の場合、コンパイルを含めて 38 秒かかります。 テストはたくさんありましたが、思ったよりも少ないです。
どちらのコードベースでも、私はテストを行わずに PR をマージしましたが、他のコードベースでも同じことをしているのを頻繁に見かけます。 そして世界は終わらず、誰も涙を流しませんでした。製品は今でも私がこれまでに使用した中で最高のものの一部であり、コードベースには私がこれまで読んだ中で最もエレガントなコードのいくつかが含まれています。
それで、今これを書いていて、ソフトウェアの品質とテストの間には相関関係がないのではないかと思い始めている、と言うのは告白のような気がします。 もしかしたら、検査は単なる症状かもしれません。 品質の原因となる他の何かの症状。
おそらく、テストについてこれまで言われた中で最も賢明なことであり、おそらくテストについて知っておくべき唯一のこと – テスト ピラミッド、モックとスタブの議論、依存性インジェクター、およびカバレッジの数値のことは忘れてください – はケントの言葉です。ベックは言った 16 年前の Stack Exchange での回答:
私はテストではなく、機能するコードに対して報酬をもらっているので、一定の信頼レベルに達するまでテストは最小限にするというのが私の哲学です。 […]。 通常、何らかの間違い (コンストラクターで間違った変数を設定するなど) を犯さない場合は、テストはしません。
たぶん、必要なのはそれだけです。 それと気にする人々。
#テストについての一言 #Thorsten #Ball #著