形式化された単体テストを要求する最も説得力のある方法は何ですか?

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

  •  02-07-2019
  •  | 
  •  

質問

これは確かに、単体テストが良いことであることを前提としています。私たちのプロジェクトにはある程度の単体テストがありますが、よく言っても一貫性がありません。

形式化された単体テストは良いことであり、それを必須にすることが実際に私たちが取り組んでいる「大規模な」プロジェクトにとって最大の利益になることを皆に説得するためにあなたが使用した、またはあなたと一緒に使用した最も説得力のある方法は何ですか。私は開発者ではありませんが、品質保証に携わっており、納品された作業の品質を向上させてテストの準備が整っていることを確認したいと考えています。

形式化された単体テストとは、単に次のことを言っているだけです。

  • 作成する単体テストの特定
  • テストデータの特定 (または説明)
  • これらのテストを書く
  • これらのテストの追跡 (および必要に応じて再利用)
  • 結果を利用可能にする
役に立ちましたか?

解決 13

この質問をしてから 2 年後、新しい SDLC に移行することが必要だったという予想外の答えが得られました。5 年前、私たちは最初の正式な SDLC を設立しました。これにより状況は改善されましたが、自動化などの重要な点がいくつか残されました。現在、テナントの 1 つがオートメーションである新しい SDLC (新しい管理の下で) を設立する過程にあります。単体テストを自動化するだけでなく、機能テストも自動化します。

教訓は、私の考えが小さすぎたということだと思います。ソフトウェアの作成方法を変更する場合は、慣れていない場合は段階的な変更を提案するのではなく、「徹底的に」行って大幅な変更を加えてください。

他のヒント

非常に説得力のある方法は、チームや会社が何をしているかに関係なく、形式化された単体テストを自分で行うことです。特にこの種の実践に慣れていない場合は、追加の努力が必要になる場合があります。

その後、自分のコードが優れており、他の開発者よりも生産性が高いことを示すことができれば、彼らはその理由を知りたがるでしょう。次に、お気に入りの単体テスト方法を彼らに伝えます。

同僚の開発者を説得したら、経営陣も一緒に説得します。

私が使う メイビン とともに 確実な そして コベルトゥーラ 私のすべてのビルドのプラグイン。実際のテストケースは次のように作成されます。 JUnit, Dbユニット そして イージーモック.

単体テストの特定私はテスト駆動開発に従おうとしていますが、正直に言うと、通常は少数のテスト ケースに対してそれを行うだけで、後から戻ってきてエッジ ケースや例外ケースのテストを作成します。

テストデータの特定DbUnit は、単体テストのテスト データをロードするのに最適です。

テストケースの作成JUnit を使用してテスト ケースを作成します。私は自己文書化されたテスト ケースを作成しようとしていますが、明らかではない部分については Javadoc を使用してコメントします。

結果の追跡と利用可能化私は Surefire プラグインを使用して単体テストを Maven ビルド サイクルに統合し、Corbertura プラグインを使用してそれらのテストによって達成されたカバレッジを測定します。私は毎日のビルドの一部として、Surefire レポートと Cobertura レポートを含む Web サイトを常に生成して公開し、どのテストが失敗したか、どのテストが成功したかを確認できるようにしています。

私を確信させた出来事は、3 回連続のリリースで 3 回バグを回復できたときでした。クライアントが行った後で些細な間違いを常に修正しなければ、プログラマとして自分がどれだけ生産性が高かったかに気づき、同僚のコードが彼らが主張したとおりに実行するだろうという温かい漠然とした感情を抱くことができたとき、私はこうなりました。改宗者。

私がメインフレームで COBOL 開発を行っていた当時、私が働いていたいくつかの会社ではこれを宗教的に行っていましたが、環境がそれを強制しているため、それが物事のやり方として受け入れられていました。これは当時の非常に典型的な計画だったと思いますが、おそらくいくつかの理由があなたに当てはまるかもしれません:-

ほとんどのメインフレーム環境と同様に、開発、品質保証、運用という 3 つの領域がありました。プログラマーはそこで開発と単体テストを行い、サインオフして満足すると、その単体は QA 環境 (テストと結果のドキュメントとともに) に移行され、専任の QA スタッフによってシステム テストが行​​われました。開発から QA への移行は、一夜にして行われた正式なステップでした。QA が完了すると、コードは運用環境に移行されました。バグはほとんどありませんでした。

単体テストを正しく実行しようとする動機は、単体テストを実行せずに QA スタッフによってバグが発見された場合、作業を行っていないことが明らかになるからでした。したがって、あなたの評判はあなたがどれだけ厳格であるかによって決まりました。もちろん、ほとんどの人は時折バグに遭遇することになりますが、常にしっかりとしたテスト済みのコードを作成するプログラマーはすぐにスターの評判を獲得し、バグのあるコードを作成したプログラマーも注目されるようになりました。プッシュは常にゲームを向上させるためのものであり、その結果、最初に提供されるバグのないコードを推進する文化が生み出されました。

該当箇所の抽出 -

  1. コーダーの評判は、バグのないテスト済みコードの提供と結びついています
  2. 単体テストされたコードを次のレベルに移動すると、かなりのオーバーヘッドが発生するため、これを繰り返さずに最初から正しく実行する動機になります。
  3. システム テストは単体テストとは別の人、理想的には別のチームによって実行されます。

環境は異なると思いますが、原則は翻訳可能である可能性があります。

場合によっては、例を挙げて説明することが最善の方法である場合もあります。また、物事がテストされているときには、特定のことが起こらないことを人々に思い出させることも重要だと思います。次回誰かがあなたに何かを書くように頼んだときは、関係なくテストを行ってください。最終的には、コードを簡単に変更でき、それがまだ機能することがわかることに同僚が嫉妬するようになるでしょう。

管理に関しては、テストされていないコードベース X に変更を加える必要があるときに発生する核爆発によって、どれだけの時間が無駄になるかを強調する必要があります。

多くの開発者は、システム全体の動作を確実に維持することなく、どれだけリファクタリングを行っているかに気づいていません。私の意見では、これが単体テストと TDD の最大の利点です。

  1. ソフトウェア要件の変更
  2. 要件に合わせてソフトウェアを変更する

唯一確実なのは変化だ。テスト中ではないコードを変更する場合、開発者は考えられるあらゆる動作上の副作用を認識する必要があります。現実には、すべての順列を読み取れると考えているプログラマーは、明らかに何も壊れないまで、骨の折れる試行錯誤のプロセスによって読み取っています。この時点で彼らはチェックインします。

現実的なプログラマーは、自分が完璧ですべてを知っているわけではないこと、そしてテストはリファクタリングの綱渡りを迅速かつ安全に行うためのセーフティネットのようなものであることを認識しています。

いつグリーンフィールド コードにテストを書くべきかについては、私はできる限り主張する必要があります。時間をかけて定義する 行動 システムから取り出して、それらのより高いレベルの構造を表現するために最初にテストを作成します。単体テストは、思考が具体化するときに行われることがあります。

お役に立てれば。

教育および/または認定。

チーム メンバーにテスト分野での正式なトレーニングを提供します。場合によっては認定試験を行うこともあります (チーム メンバーと認定に対するあなた自身の態度に応じて)。そうすることでテストをより高いレベルに引き上げることができ、チーム メンバーはテストに対してプロフェッショナルな態度をとる可能性が高くなります。

の間には大きな違いがあります 説得力のある そして 必要とする.

同僚に記事を書くよう説得する方法が見つかったら、それは素晴らしいことです。ただし、形式的なルールを作成し、単体テストの作成を要求すると、彼らはこれを克服する方法を見つけるでしょう。その結果、何の価値もない単体テストが大量に生成されます。利用可能なすべてのクラスに単体テストがあり、セッターとゲッターをテストします。

ルールを作成して適用する前に、よく考えてください。開発者はそれらを克服するのが得意です。

最初は、先に進んで書いて、それだけの価値があることを人々に示すだけで済みます。私は 3 つのプロジェクトで、それが人々を説得する唯一の方法であることに気づきました。コーディングをしない人もいます (例:若手プロジェクト マネージャーなど)は、目の前で見つめられるまでその価値がわかりません。

私のソフトウェア チームでは、テストの作成と追跡に使用できる時間を確保するために、これらの問題に関する小さなビジネス ケースを作成し、経営陣に提示する傾向があります。私たちは、テストにかかる時間は、危機に瀕し、すべてが危機に瀕しているときに十分に補えると説明します。また、単体テストの追跡を一元化するために Hudson ビルド サーバーをセットアップしました。これにより、開発者は失敗したテストを追跡し、繰り返し発生する問題を発見することが非常に簡単になります。

チームや他の開発者に、彼らはアマチュアではなくプロであることを思い出させてください。私にとっては役に立ちました!

また、最近ではそれが業界標準になっています。単体テストの経験がなければ、将来の雇用主にとって従業員としての魅力も価値も低くなります。

チームリーダーとして、プログラマーが作業しているすべてのモジュールに対して単体テストを確実に実行するようにするのが私の責任です。現時点では、どうやって彼らを説得するかという問題ではなく、それが求められているのだと思います。大規模なプロジェクトではなく、常にというわけではありません。単体テストは、保守する必要があるものを本番環境に導入することに対する防御の第一線です。単体テストやシステムテストが完全に行われていないものが本番環境に導入されると、それが戻ってきてあなたに悪影響を及ぼします。これをサポートするためにここで用意されているポリシーの 1 つは、本番環境で問題が発生した場合、または問題が発生した場合、そのモジュールのコーディングとテストを担当するプログラマが問題に対処し、クリーンアップを行うということだと思います。 、など。それだけでもかなり良いモチベーションになります。
もう一つは、それはプライドに関するものであるということです。私は約 75 人のプログラマーからなる職場で働いています。これはある基準からすると大きいですが、実際には全員がお互いを知るには十分な規模です。また、その規模が非常に小さいため、お互いが何を取り組んでいるのかがわかり、本番環境に移行したときに異常終了や障害などを認識できます。注意して単体テストとシステムテストを実行すると、障害を引き起こすことなく何かを本番環境に移行できる可能性が大幅に高まります。何かを実稼働環境に移行して、それを実現できない場合は 1 ~ 2 時間かかるかもしれませんが、失敗しないことには大きなメリットがあります。プロジェクトが失敗せずに引っ越したときに、廊下でお祝いの言葉を聞くのは本当にうれしいことです。

それらを大量に作成し、単体テストによって生産性とコードの品質が向上したことを実証してください。何らかの証拠がなければ、人々はそれが価値があると信じないことがあります。

Google の取り組みからインスピレーションを得ることもできます。彼らのテスト チームは、テスト自動化の利点の知名度を高めるために、トイレの個室内に例、ヒント、利点を置き始めました。

https://testing.googleblog.com/2007/01/introducing-testing-on-toilet.html

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