Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

あなたがテストを書かない5つの理由――よくある罠とその乗り越え方

優れた開発者なら、コードにはテストが必要だとわかっています。ところが現実には、テストが省略されたり、雑に済ませられたり、そもそも書かれないまま終わったりすることが少なくありません。ここでは、多くの開発者が陥りがちな「よくある罠」を5つ紹介します。どれも、テストを書く意欲を静かに削いでいく厄介なものばかりです。

1. RSpec?Cucumber?Capybara?Minitest?どれを使えばいい?

新しいプロジェクトを始めるとき、「最適なテストツール」を選ぼうと膨大な時間を費やしてしまいがちです。しかし、この種の先延ばしは、本当はどこから始めればいいのかわからないという事実を隠しているだけ。ツール選びをしている間は、生産的に感じられますが、実際には何も生み出していません。

代わりに、自分が最も得意なスタックを選びましょう。特に経験のあるテストフレームワークがないなら、Railsが標準で提供するものから始めるのがおすすめです。後からいつでも追加できます。新しいツールを試すこと自体は悪いことではありませんが、プロジェクトやワークフローに慣れてきた段階で少しずつ導入するほうが、はるかに効果的です。

2. ユニットテスト?機能テスト?結合テスト?どれから始める?

プロジェクト開始時点で、どの機能や画面を最初に作るべきか、ある程度の見当はあるはずです。そこが絶好の出発点です。機能リストの最初の項目を選び、それに対する失敗する結合テスト(インテグレーションテスト)を書いてみましょう。すると、不足しているコントローラーやルートが明らかになり、次は失敗する機能テストが必要だとわかります。コントローラーが動作するにはデータとロジックが必要なので、続いてユニットテストとモデルを書きます。

こうしてユニットテストが通れば、機能テストも通り、最終的に結合テストも通るはずです。あとは次の機能へ進むだけ。「常に次のステップが定義されている」テストプロセスがあれば、モチベーションを維持しやすくなります。判断に迷う場面が減れば、先延ばしが忍び込む隙間も自然となくなっていくのです。

3. ネットワーク処理・CLIツール・Rakeタスクのテスト方法がわからない!

こうした「テストしにくいコード」への最も簡単な対策は、テスト可能なロジックを別のオブジェクトに切り出すことです。テストしにくいファイルやクラスから、できるだけ多くのコードを、テストしやすい新しいオブジェクトへ移します。そうすれば、元の難しい部分は「新しいオブジェクトを作ってパラメータを渡すだけ」の薄い層になります。

もちろん、テストしにくい本体は依然として残ります。しかしそれは数行のコードになっているはずなので、スタブ化したりフェイクに置き換えたりするのも格段に簡単になります。

4. 「プロジェクトはもうすぐ完成。あとはテストを書くだけ!」

開発者は誰でも、コードをリリースしたいという欲求を強く持っています。テストがリリース前の最後の作業になってしまうと、「たぶん動くだろう」という程度の自信を得られる最小限のテストしか書かなくなります。この習慣がつくと、テストは役立つ道具ではなく厄介な義務として映るようになり、書く意欲を保つのはさらに困難になります。

TDD(テスト駆動開発)の魅力のひとつは、テストを設計やコーディングと一体化できる点にあります。テストをコーディングの一部として捉えられるようになれば、作業ははるかに楽しくなり、しかもテストによる恩恵をずっと早い段階で受けられます。

5. もし自分のやり方が間違っていたら?

Rubyコミュニティは、コード品質、ユニットテスト、オブジェクト指向設計の原則を強く重視することで知られています。これは素晴らしい文化ですが、裏を返せば「初回から完璧なコードを、100%のテストカバレッジでリリースしなければならない」という過剰なプレッシャーを感じやすくなるということでもあります。

そのため、プロジェクト――特に他の人がコードを目にするオープンソース――を始めること自体が心理的なハードルになります。「SOLID原則に従っていなかったら、人は何と言うのだろう?」と考えてしまうのです。このプレッシャーに対処するために、私が学んだことをいくつか紹介します。

  • 優れた開発者ほど、後に恥ずかしく思えるコードを書いています。それは成長の証です。
  • リリースされた良いコードは、リリースされない完璧なコードより無限に価値があります。
  • 中にはただコードをからかいたいだけの人もいます。本当に嫌な体験で、丸々一週間を台無しにされたこともあります。しかし、本物の優れた開発者は批判するのではなく助けてくれるものです。あなたの憧れのプログラマーにそのコードを見せても、嘲笑されることはなく、むしろ改善を一緒に手伝ってくれるはずです。

あなたはどう感じていますか?

これらの罠のうち、どれに心当たりがありますか?脱出のきっかけになったものは何でしたか?また、ここで取り上げなかった罠で気づいたものはありますか?

もし自分がこれらの罠のどれかに当てはまると気づいたなら、そこから抜け出すために、今日から何を始めますか?


  1. WiFiが繋がらない・使えないときに考えられるすべての原因と解決策

    空気と同じように、現代の生活においてインターネットはもはや欠かせない存在となっています。しかし、接続トラブルはつきもので、その中でもユーザーを最も悩ませるのが「WiFiが機能しない」という問題です。なぜこのような事態が起こるのでしょうか?ここでは、WiFiにインターネットアクセスがない場合に考えられる主な原因と、問題を解消するための具体的な方法をご紹介します。 不具合のあるドライバー WiFiが動作しない原因の一つとして、ドライバーの不具合が挙げられます。より正確に言えば、システム内のWiFiドライバーを再インストールする必要があるかもしれません。再インストールの方法は主に2つあります。

  2. iPhone XのFace IDが無効になる原因とは?再有効化・完全オフの設定方法も解説

    iPhone XのFace IDが使えなくなるのはなぜ?iPhone Xは発売当時、数多くの変更点を携えて登場しました。ソフトウェアやハードウェア、ディスプレイなど、あらゆる部分が大幅に進化しています。中でも最大の変更点は、ホームボタンの廃止でした。従来、ホームボタンは指紋認証(Touch ID)センサーとして機能していましたが、iPhone Xでは代わりに「Face ID」が導入されました。Face IDは、指紋認証よりも安全性の高い生体認証システムとされています。Face IDを支えているのは「TrueDepth(トゥルーデプス)カメラ」です。約30,000個の不可視のドットを顔に投影して