上級開発者と単体テスト - 必須ですか?彼らは部下を使用することを許可されていますか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/23688

  •  09-06-2019
  •  | 
  •  

質問

上級開発者は単体テストを免除されるべきでしょうか? それとも、部下を使って単体テストを実装することを許可されるべきでしょうか?単体テスト手法の使用に慣れていない人々に、単体テスト手法を採用するよう動機付ける最善の方法は何でしょうか?

役に立ちましたか?

解決

私は TDD 純粋主義の観点からそう主張したいと思います (つまり、単体テストを書くべきだと考えている人 前に 実装)、上級開発者が書く必要があります もっと 部下よりも単体テスト、ではなく 少ない.

その理由は、単体テストが最初に行われるため、単体テストを作成するにはコード ベースに関する深い知識が必要になるからです。従者にコードを書かせると、本質的に、ドメインについてほとんど知らない人にコード ベースの構造を指示させることになります。それは私には悪い考えのように思えます。

他のヒント

部下に他の誰かのために単体テストをさせることは、そもそも単体テストを行う意味を破壊していると思います。コードを作成するプログラマは、コードがどのように壊れるべきか、そしてコードがどのような動作を期待されるかを知っている必要があります。他の人がやったからといって、元のプログラマがその責任から解放されるわけではありません。

(性別中立のため、表現が曖昧です。)

テストを書く人 = システムがどのように動作するかを定義する人 = 「上司」

テストを実施する人々はいわゆる「怠け者」です

新しい芸が嫌いな老犬のケースのようですね。そして、よく言われるように、彼らを変えてもらうのは難しいです...TFD (テストファースト開発) は、一度始めると非常に楽しいものです。チーム全体が参加する TDD または TFD に関する社内 1 日ワークショップを開催するとよいでしょう。

上級開発者は単体テストを免除されるべきか

絶対違う。その場合、彼らは上級開発者であるべきではありません。上級開発者は道を示すリーダーであるべきですが、部下がそれを行うという考えはばかげているように思えます。それなら、なぜわざわざテストする必要があるのでしょうか。

このような状況に対処する 1 つの可能な方法は、上級開発者が単体テストの大部分を作成できることだと思います。つまり、彼らはプログラムの方法を定義し、設計しているのです。 すべき 仕事。その後、部下はテストに適合するコードを作成し、テストをしながら先輩の設計哲学を学ぶことができます。

パート I (上級開発者と単体テスト)

TDD またはテスト駆動設計について考えるとき、単体テストは問題を排除するという目的を果たします。 進化したデザイン システムの継続的な改善が期待されます。
テストを作成すると、コードが形成されたり、すでに行われた決定の問題が強調表示されたりするため、設計の品質を向上させるためのリファクタリング プロセスが実現することが期待されます。

私の経験では、上級開発者は通常、最も経験と能力が高い人です。つまり、上級開発者は、こうしたリファクタリングの機会を見つけるのに有利な立場にあるはずです。(コードの匂いを検知)

他の人があなたのためにテストを書いている状況として、思いつく限り 3 つの状況が考えられます。 できた 受け入れられるようになる。

  1. 受け入れテスト/顧客テスト/エンドツーエンドのテスト。どう呼んでも構いませんが、データ入力ポイント (Web サービス、Web ページ、アプリケーション画面入力) から始まり、システムのスタック全体 (データベース、別のサービスの呼び出し、入力結果画面に戻るなど)。これは、テストで実行される個々のユニットの詳細を実装していない誰かによって書かれた可能性があります。
  2. ペアプログラミング (ピンポンパターン) -

    新しいテストを書いて、それが失敗したことを確認します。
    Bは、テストに合格するために必要なコードを実装します。
    Bは次のテストを書き込みます。
    Aがそれを実装します。

  3. バグ修正テスト - バグが見つかった場合は、欠陥を明らかにする失敗するテストを作成することをお勧めします。このテストが実施されると、誰かがテストに合格するコードを実装する可能性が十分にあります。欠陥が原因で失敗するテストを作成するという行為によって、修正がどのように生成されるかについての洞察が得られることが多いため、これがそれほど良いアイデアとは思えません。

最初の質問に対する私の答えを簡単に言うと、上級開発者は単体テストの作成を免除されるべきではない、ということになります。

パート II (人々にテストを書くよう動機づける)

これは私が過去に問題を抱えていたことです。今では適切な頻度で TDD を実行しようとしていますが、テストを書くことに本当のメリットがあることがわかるまでに数か月かかりました。
TDD と単体テストの利点を他の人に示そうとするのは、非常に難しいことだと思います。TDD/単体テストがコードの微妙な点を浮き彫りにし、他の方法では見逃していたかもしれない、あるいは短期間でバグを修正するのに役立ったかもしれない、「ああ、なるほど」という瞬間を人が自分で体験したときだけ、メリットをご覧ください。そこまで到達させるのはかなり難しいかもしれません。
私個人としては、前述のピンポン パターンでのペア プログラミングによってそこに到達し、経験豊富な TDDer と協力し、重要な機能を解決するために作成していたコードが洗練されたソリューションと呼べるものに進化するのを確認しました。続いて、その作業は、問題が提起されることなく QA を通過し、ライブ環境に移行します。

つまり、単体テストを作成することで得られる利点をすでに確信している経験豊富なプログラマーとペアになることは、単体テストを作成する意欲を高めるのに役立つ素晴らしい方法だと思います。

絶対違う;少なくとも、自分で開発したコードのテストを書く方がずっと簡単だからです。ただし、年功に関係なく、すべての開発者にとって、すべてのコードを単体テストすることが重要です。コードがテスト可能である必要があることを理解して開発する場合、その労力の成果はさらに大きくなるでしょう。

開発者に単体テストへの動機を与える必要がある場合は、長期的にはメリットと時間が節約されることを強調するだけです。コードの単体テストを書く習慣が身につくと、すぐに当然のこととしてそれを行うようになるでしょう。

上級開発者が独自のテストを行っていない場合、その人は上級開発者ではありません。

テストに対する意欲の欠如は、ほとんどの場合、怠惰または無能 (またはその両方) の兆候であり、どちらも上級開発者に見られるべき特性ではありません。

私が思いつく唯一のシナリオとして、上級開発者が他の人に単体テストを書いてもらうのが適切なのは、若手の新入社員に物事の知識を教え込む場合です。コードを書きながら実践するには良い作業かもしれません。

単体テストの最大の利点の 1 つは、テストの成果がすぐに得られることです。テストの実装を外部委託した場合、設計が機能するかどうかに関するフィードバックは得られません。そして、悪いデザインに悩んでいる人々には、それを修正する手段がありません。

あなたが上級開発者である場合、単体テストが優れた開発手法であることを十分に経験していることが理由の 1 つです。 あなた より良いソフトウェアを生み出す

私は TDD の信奉者ではありませんが、単体テストなどに多くの価値があると考えており、コードを作成する際には頻繁にテストを行っています。

重要なのは、誰もいないということです 本当に コードを書いた人以外はそのコードが何をするべきかを知っていますが、多くの場合、彼らも知りません。

それを念頭に置くと、「怠け者」がテストを書いてもあまり価値が得られないでしょう。

  1. 彼らはすべての微妙なケースを深く理解することはできません
  2. コードには何も投資していないため、コードには関心がありません
  3. 彼らは自分たちがバカ扱いされていると感じるでしょう。

たとえ彼らが愚か者だったとしても、愚か者のように扱われることを好む人は誰もいません。従業員に辞めてもらいたい場合、これは従業員を励ます良い方法です。

誰も単体テストの作成を免除されるべきではありません。すべての開発者がテストを作成できる必要があり、単体テストもコード レビュー プロセスの一部としてレビューされる必要があります。単体テストの複雑さは通常、開発者のスキルに応じて決まります。より複雑なコードは上級開発者に渡されるため、より複雑でより多くの単体テストも同様に行われます。

適応できない開発者が 1 人以上いる場合は、1 対 1 で支援を提供し、開発者がコツを掴み始めるまで単体テストをペアで行うようにしてください。コードを書ける人が単体テストを作成できないほど技術的に複雑なことはありません。そのように見える場合は、おそらくその人のスキルセットに大きな問題が生じる前兆です。

個人的には、テスターに​​とっても、プロジェクトの一部である単体テストを少なくとも理解できるようにしておくと役立つと思います。欠陥を正確に診断して修正するには、開発者とテスターの協力が非常に重要です。彼らがテストを書く必要があるとは期待していませんが、開発者と一緒に座って、テストが失敗する理由/方法についての概念を検討できるはずです。

まあ、私は「はい」と答えますが、それは下僕が見つかったバグの修正を先輩に任せることが許可されている場合に限ります。それは彼に教えることになるだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top