質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

実務でのunittestについて

受付中

回答 6

投稿

  • 評価
  • クリップ 1
  • VIEW 827

keip

score 33

現在Pythonの学習を行っています。
その中でunittestの学習を行っています。
基本的なunittestの使い方は理解できましたが、ファイルを扱うテストなどは非常に難しかったです。おそらくさらに複雑なコードをテストするとなるとかなり知識と理解が必要なのではないかと思いました。

そこで質問なのですが、実務においてこのunittestというのはよく使われるものなのでしょうか?
一学習者の観点からするとあまり使いどころが理解できませんでした。
「unittestを使って検査するなら、テスト環境で色んなパターンを試してエラーに対応した方が速いのではないか」と思ってしまったからです。(もちろん上級者にとってはunittestもそんなに難しいことではないのかもしれませんが)

実務で活躍している方などご回答いただけると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+5

一人で小さいコードを書いているうちはあまりやらなくてもいいかもしれません。ご自身で経験されているので分かると思いますが、テストツールを使うための勉強等準備するのに手間がかかりますので。

テストの重要性は正直使ってる人しか実感しにくいものだと思います。私の経験上、テストコードを書いている暇があれば開発に当てたほうがいいとおっしゃる方もいました。

ユニットテストが大事になるのは、例えば

  • ライブラリなりパッケージを開発している場面
    -> 生成するものがそもそも実行形式ではないので、部品を検査する方法が必要
  • 中規模以上のコード開発
    -> 規模が大きくなるに従って、バグの原因を特定するのに時間がかかる。
    -> ユニットテストがないとリファクタリングできない

じゃないかと思います。

また、ソースコードの品質を測る観点からカバレッジのパーセンテージを参考にすることがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/05 14:29 編集

    tachikomaさん
    ご回答ありがとうございます。使いどころが理解できました。
    そのようにパッケージの開発や中規模以上での開発では確かに使いどころがあるんですね。

    おっしゃる通りテストツールを駆使するのには勉強が必要ですし、個人的には実際何かしらの開発を行う(学習の段階でのコーディングのレッスンの内容)よりもユニットテストを使うのは難易度が高かったです。

    とても勉強になりました。ありがとうございました。

    キャンセル

+5

そこで質問なのですが、実務においてこのunittestというのはよく使われるものなのでしょうか?

モダンな開発環境を使っている企業では使われているが、逆にレガシーな開発環境を使っている企業では、全くと言っていいほど使われておらず、企業文化によって二極化している状況だと思います。

複数人が開発に関わるプロジェクトや、保守が長期間にわたるプロジェクトなどの場合に、ユニットテストがないと品質を維持するのが困難になります。

個人開発でもユニットテストを作っておくことをおすすめしますが、負担がかかるようならそこまで無理をする必要もないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/05 14:55

    nskydivingさん
    ご回答ありがとうございます。
    >「企業文化によって二極化している状況だと思います。」
    そうなんですね。ある意味ではユニットテストは必須でないことを意味し、ある意味ではユニットテストがないものは品質を保てないという、方針、考え方、プロジェクトの規模、リソースの割き方などにも関係あるんですね。
    ご回答の内容を読んで、無理をしてまでユニットテストに学習の時間を割くほどのことはないが、ユニットテストを扱える方がもちろん良いし、開発するものの品質、個人のレベルとしても一段上になるという風に感じました。

    現在Pythonの学習中ですが、ユニットテストは本気で理解しようとすると時間がかかってしまいそうなので、とりあえずPython学習を進めて、必要になった段階、または学習を一通り終えた段階でもう一度しっかり振り返って勉強してみようと思いました。

    実務におけるユニットテストに関して理解が深まりました。ご回答いただき感謝いたします。

    キャンセル

+4

Pythonに限らずプログラム全般のユニットテストについての質問だと理解して回答します。

そこで質問なのですが、実務においてこのunittestというのはよく使われるものなのでしょうか?

現場によるとしか言えませんが、
「よく使われると言えば使われるが、責任者がユニットテストのメリットを理解していない場合や開発者にテストケースを書く能力が無い現場では使われない。」という感じです。

(特に言語標準でユニットテスト環境が存在する様な言語だと)「unittestを書いたことがない、書けない」という人は技術レベルに疑問を持たれて門前払いをされるケースもあると思います。

「unittestを使って検査するなら、テスト環境で色んなパターンを試してエラーに対応した方が速いのではないか」

今後、どこか一つでも修正が起きるたびに毎回全パターンを同一の条件とクオリティで手動でテスト出来るならそれもアリです。
とても単純なプログラムであれば、可能な場合もあると思います。

多くの場合そうではないので、自動かつ同一条件でテストを行い、問題が発生しないことを確認してくれる仕組みはアプリケーションのクオリティアップや生産性の向上に寄与してくれます。

もちろんメリットばかりではないのですが、
ユニットテスト 意義 ユニットテスト メリット TDD テストファースト あたりで調べてみるとメリットデメリットが見えてくるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/05 14:23

    tanatさん
    ご回答ありがとうございます。unittestについて理解が深まりました。
    >「unittestを書いたことがない、書けない」という人は技術レベルに疑問を持たれて門前払いをされるケースもあると思います。
    そうなんですね。ということは完全に無視していいような内容でもないんですね。

    >「どこか一つでも修正が起きるたびに毎回全パターンを同一の条件とクオリティで手動でテスト出来るならそれもアリです。」
    そのような場合に一つ一つ手動でテストするのは確かに手間のかかる作業になりますね。

    難しいですが、少しずつ慣れていこうと思います。ご回答ありがとうございました。

    キャンセル

+3

unittestはよく使いますよ。unittestでテストするということは、テストしにくいコードを書かないための抑止にもなるので良いです。

持論ですが、コードの良し悪しは実行した回数に比例すると私は考えているので、ずっと淡々と成功を記録し続けるだけのテストケースにも多大な価値があり、コードカバレッジが7〜8割くらいまでは進んでunittestでテストすると良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

最近まで業務で使用していましたが、unittestは必要かと思います(Pythonに限らず他の言語とかでも)。
実際に製造段階から試験段階に進み、結合試験などで不具合が見つかると原因の特定に追われますが
それと同時にその不具合がどこで混入したのか、どこで検出できるはずの不具合だったかなども
問われる場合もあります。

unittestをすることでそういう不具合があとあとになって出てくるケースを防げる可能性があります。
もちろんunittestをしたからといってそのテストコードが良くないものだったら検出できない場合もあるのですが・・・(2敗)

不具合の早期発見に役立つことには違いないと思います。
学習コストはありますが、自動化ができるものもあるので使えたら便利です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

参考情報

...
業界アナリストやMartin FowlerやMike Cohnなどのアジャイルの専門家は、APIテストが最善の道であることに同意しています。それなのに、何が私たちを引きとめているのでしょうか?
...
APIテストの採用を妨げる根本的な問題は、開発者とテスターの間に存在する知識のギャップです。APIテストには、テスト担当者があまり持っていない知識と能力が必要ですが、マネージャーは開発者に統合テストやAPIテストをやらせることを望みません。
...

...
JUnitは効率よくテストを行うためのツールであり、使うことが目的としてはならない
ユニットテストを行うにはプログラミングだけではなくソフトウェアテストのスキルも必要である
ユニットテストを行いながら、テスト対象を改善していく体制が必要である
ユニットテストのコストは非常に高い
優秀な開発者がユニットテストを行わなければ品質は高くならない
ユニットテストが適用しにくい部分も存在する
カバレッジはユニットテストを行う時の指標でしかない
ユニットテストは繰り返し何度も実行することで効果がある
ユニットテストだけでは不十分なので、インテグレーションテストも必要
そのプロジェクトでユニットテストの効果が充分にあるかを検討すべき
みなさんの開発チームでは、ユニットテストしてますか?
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る