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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

6回答

1793閲覧

実務でのunittestについて

keip

総合スコア33

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/04/05 03:49

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

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

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

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

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

投稿2019/04/05 05:36

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keip

2019/04/05 05:55

nskydivingさん ご回答ありがとうございます。 >「企業文化によって二極化している状況だと思います。」 そうなんですね。ある意味ではユニットテストは必須でないことを意味し、ある意味ではユニットテストがないものは品質を保てないという、方針、考え方、プロジェクトの規模、リソースの割き方などにも関係あるんですね。 ご回答の内容を読んで、無理をしてまでユニットテストに学習の時間を割くほどのことはないが、ユニットテストを扱える方がもちろん良いし、開発するものの品質、個人のレベルとしても一段上になるという風に感じました。 現在Pythonの学習中ですが、ユニットテストは本気で理解しようとすると時間がかかってしまいそうなので、とりあえずPython学習を進めて、必要になった段階、または学習を一通り終えた段階でもう一度しっかり振り返って勉強してみようと思いました。 実務におけるユニットテストに関して理解が深まりました。ご回答いただき感謝いたします。
guest

0

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

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

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

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

じゃないかと思います。

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

投稿2019/04/05 05:01

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keip

2019/04/05 05:30 編集

tachikomaさん ご回答ありがとうございます。使いどころが理解できました。 そのようにパッケージの開発や中規模以上での開発では確かに使いどころがあるんですね。 おっしゃる通りテストツールを駆使するのには勉強が必要ですし、個人的には実際何かしらの開発を行う(学習の段階でのコーディングのレッスンの内容)よりもユニットテストを使うのは難易度が高かったです。 とても勉強になりました。ありがとうございました。
guest

0

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

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

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

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

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

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

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

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

投稿2019/04/05 05:14

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keip

2019/04/05 05:23

tanatさん ご回答ありがとうございます。unittestについて理解が深まりました。 >「unittestを書いたことがない、書けない」という人は技術レベルに疑問を持たれて門前払いをされるケースもあると思います。 そうなんですね。ということは完全に無視していいような内容でもないんですね。 >「どこか一つでも修正が起きるたびに毎回全パターンを同一の条件とクオリティで手動でテスト出来るならそれもアリです。」 そのような場合に一つ一つ手動でテストするのは確かに手間のかかる作業になりますね。 難しいですが、少しずつ慣れていこうと思います。ご回答ありがとうございました。
guest

0

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

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

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

投稿2019/04/08 02:52

poemt

総合スコア48

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2019/04/05 14:55

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考情報

  • APIテストは効果的、なのになぜみんなやらないの?

https://parasoft.techmatrix.jp/api-testing-is-great-so-why-isnt-everyone-doing-it

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

  • ユニットテストにまつわる10の勘違い

https://dev.classmethod.jp/testing/10_errors_about_unit_testing/

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

投稿2019/04/06 14:03

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問