X



テストしにくいコードをテストする方法 その2 [無断転載禁止]©2ch.net
0618デフォルトの名無しさん
垢版 |
2017/08/19(土) 23:06:20.61ID:uww7i/PR
>>617
テストすることで何が得られるんでしょうか?
100行程度なので実行コードを見れば
何をしているかなんて明らかななんですよ

テストコード書いたらおそらく100行以上になるので
実行コードを見るよりも時間が掛かるでしょう。
0620デフォルトの名無しさん
垢版 |
2017/08/19(土) 23:25:31.12ID:9sjMFNW8
>>618
何が得られるかはお前にしか分からない
テストしても新たな情報が得られないのが分かっているならテストしなくて良いよ
0622デフォルトの名無しさん
垢版 |
2017/08/20(日) 00:18:36.94ID:4afFh/HS
>>618
テスト対象は今後変更することは無い?
もし変更するのであれば、テストコードはリグレッションテスト用として価値があるかと。
0623デフォルトの名無しさん
垢版 |
2017/08/20(日) 00:29:40.53ID:ye9mPKN8
>>622
変更するときは仕様を変えるときだろうな。
その時はテストも変えないといけないだろうね。

100行って意外と大したことないよ。
コマンドライン引数の処理部分で20行ぐらい使ってるし。
(当然ライブラリ使ってるのでここに条件分岐とかない)
0624デフォルトの名無しさん
垢版 |
2017/08/20(日) 00:40:08.51ID:PGSVSpKF
今ある機能はそのままで機能追加とかよくある事だと思うんだけど
0625デフォルトの名無しさん
垢版 |
2017/08/20(日) 00:41:57.09ID:ye9mPKN8
シンプルに単機能にしてるからなぁ。

全く別の機能を追加するぐらいだったら
別のツールにするし。

出来る限り機能は削ぎたいぐらい
0626デフォルトの名無しさん
垢版 |
2017/08/20(日) 00:42:02.88ID:PGSVSpKF
あと、テストを後から書こうとするから面倒くさいん
0627デフォルトの名無しさん
垢版 |
2017/08/20(日) 00:54:04.14ID:ye9mPKN8
というかクラスにも関数にもなってないようなもの
というかそうするまでもないような短いコードに
どうやってテストを書けばいいのかわからん

テストを書くためにわざわざ関数やクラスにして
モック使って倍以上の量にして
それを読めって言う方が大変だろう
0628デフォルトの名無しさん
垢版 |
2017/08/20(日) 02:15:26.56ID:4afFh/HS
>>623
あぁ、テスト対象って特定の機能じゃなくてクラスとかモジュールとかもっと大きな単位で考えてたわ。言葉足らずだったか。
今までの機能はそのままで追加機能とか別の機能の変更とかそういう時のリグレッションテストに役立つかと。
0629デフォルトの名無しさん
垢版 |
2017/08/20(日) 04:05:43.40ID:zvlsjK6m
テストはなくても簡単にサンプルが実行できるスクリプトとかは
書いておいた方がいいんじゃないの?
0630デフォルトの名無しさん
垢版 |
2017/08/20(日) 05:56:24.39ID:PGSVSpKF
ライブラリ使ってるというならそのライブラリの挙動含めて意図通りになってるかテスト書いておいた方がいいと思うけどね。
俺の環境では動いたは仕事では通らないし。
環境含めて提供するなら別だが、単機能のツールにDockerとか持ち出されても困るだろ。

趣味なら好きにしたらいい
0631デフォルトの名無しさん
垢版 |
2017/08/20(日) 10:00:51.11ID:dyFXBla+
100行程度のツールとかなら
・正常系
・ファイルがないとか読めない
・サーバーにアクセスできない
・...(ファイルの内容を色々)
程度のテストはする
よほど重要とか多数の人に配るとかでもない限りREST API のモックまではやらないな
0638デフォルトの名無しさん
垢版 |
2017/08/20(日) 14:03:33.58ID:m30rRqux
そりゃテストコードを書く場合と一緒だろ
お前は誰のためにテスト書いてるんだよ?
0639デフォルトの名無しさん
垢版 |
2017/08/20(日) 15:08:35.49ID:3YN/FpP2
>>634
俺なら書くよ。

逆に聞きたいけど、例えばその規模のコードを書くとき、全く動作確認もせずに0から全部書き切るの?
いや、動作確認はするよってことだったら、それはテストだよね。
0641デフォルトの名無しさん
垢版 |
2017/08/20(日) 15:36:34.11ID:3YN/FpP2
>>640
10行書く毎にテストするとして、最後の1回の動作確認は最後に書いた10行分の動作確認をするの?
それとも、今まで確認したこと全てやりなおすの?

前者だとしたら、今までOKだったものが動作しなくなっている場合に検知できないし、後者なら
動作確認に時間がかかりすぎる。

だから、俺たちはテストコードを書くんだ。
0642デフォルトの名無しさん
垢版 |
2017/08/20(日) 15:44:22.01ID:m30rRqux
> それとも、今まで確認したこと全てやりなおすの?

単機能なんで、今まで確認したことの全て=一つと言ってもいいぐらいなんだよw
0643デフォルトの名無しさん
垢版 |
2017/08/20(日) 15:46:20.52ID:m30rRqux
もちろん全く一つではないけどね。
オプションで-vをつけると詳細なログがでる。

というテストを書く?

オプションで--debugとつけると
デバッグログが出力される

というテストを書く?

--versionと書くとVERSION変数の中身を表示するだけ
というテストを書く?
0644デフォルトの名無しさん
垢版 |
2017/08/20(日) 16:05:48.62ID:3YN/FpP2
>>642
> 単機能なんで、今まで確認したことの全て=一つと言ってもいいぐらいなんだよw
いやいや、例えば>>634のコードなら、というのが前提の話だよ。

> というテストを書く?
書かないよ。
まぁざっくり言えばC0カバレッジで考えたときに、明らかに意味のないもの以外のテストを書くだろうね。

仮に_check_config(), _get_config()なんかがリファクタリング(重複コードのメソッド抽出)の
結果だとするなら、何度もテストできるテストコードがあってよかった、ってことになると思う。
0647デフォルトの名無しさん
垢版 |
2017/08/21(月) 17:53:08.75ID:/uRF2gxn
まあ短いコードでもネットワークアクセスやデータベースアクセスみたいに
副作用の強いものとつながってるんなら、
そういう部分をスタブで置き換えてテストできるくらいには
整えておくのもいいんじゃないかね。
0649デフォルトの名無しさん
垢版 |
2017/08/22(火) 06:40:15.00ID:kG/K9vWp
各々の中で決まってるだろ。
0650デフォルトの名無しさん
垢版 |
2018/05/23(水) 21:54:18.74ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

UZFWS
0651デフォルトの名無しさん
垢版 |
2018/07/05(木) 00:08:07.11ID:RfoszcD2
KWG
0653デフォルトの名無しさん
垢版 |
2020/06/14(日) 00:53:03.07ID:5oNWegSg
イチカラツクリナオセ
0654デフォルトの名無しさん
垢版 |
2020/06/14(日) 13:20:55.07ID:m+2zmaXu
ユニットにできないなら結合した状態でテストするしかあるまい。
リファクタリングするなりして徐々にテスト範囲を小さくするが王道。
0655デフォルトの名無しさん
垢版 |
2020/07/04(土) 07:57:34.91ID:9B1sQRM5
ftpクライアントみたいなsocket通信を含むライブラリを開発しようと思ったらどうやってテストコード書きます?

2つソケット作って相互テストする?
0657デフォルトの名無しさん
垢版 |
2020/07/04(土) 08:28:39.39ID:ewxE356G
テストしたいのが通信そのものじゃなくて自分のロジックならスタブやモックを使うのが良いんじゃね。
総コーディング量が多くなったり想定していない状況が漏れたりする可能性があるけど、逆に
想定できる状況なら網羅性を高くできるしテスト環境準備の手間も少なくなる。
0658デフォルトの名無しさん
垢版 |
2021/05/25(火) 11:08:34.53ID:6aeoZGgo
関数のアウトプットのオブジェクトがダイナミックに構造を変える時のパラメータ化テストが難しい
0659デフォルトの名無しさん
垢版 |
2021/05/25(火) 19:59:55.83ID:vDgp1zAi
>>658
いくら構造が変わるからといっても条件があるだろうから、その条件を固定して出力構造を固定化してやればよくね?
0660デフォルトの名無しさん
垢版 |
2021/05/25(火) 20:15:23.88ID:7xIwUOw5
>>659
条件固定でやるのは当然だけど
出力の構造が異なるとパラメータ化して一気にテストってのができない
構造ごとにテストケースを書かないといけない
0661デフォルトの名無しさん
垢版 |
2021/05/30(日) 12:47:56.92ID:sJ/lY+qu
外部APIクライアントのテストってどうやってんだ?
テスト専用アカウント作ってやるとか?
0662デフォルトの名無しさん
垢版 |
2021/06/27(日) 10:51:06.30ID:h2kpgEo5
>>661
インフラではなく、プログラミングレベルの妥当性確認がしたいのなら、フレームワークの機能を使ってテストするのが一般的じゃないかな。
やることは大抵、登録処理の実行、レスポンスの確認、データ取得処理の実行、レスポンスの確認、登録エラーが起こる処理の実行...をテストフレームワークが用意したライブラリを使ってゴリゴリテストコードに記述していくだけだけど。

当然、テストフレームワーク環境での実行なので、サーバーサイドは真っ白な状態からスタートする。
0663デフォルトの名無しさん
垢版 |
2022/12/15(木) 16:54:51.27ID:MV1x1AJa
夜間バッチのテストが難しすぎて困った
組み合わせ多すぎ、処理フロー複雑すぎでどうやってテストしたらいいか頭が追いつかない
0665デフォルトの名無しさん
垢版 |
2022/12/19(月) 11:53:17.90ID:7xt1WnSN
ずっと悩んでるけど夜間バッチ処理のテストいまだにわからんすわ
ペアワイズ法とか色々小賢しいテクニックでテストケースを減らすことができることは学んだけど
それやった上でもまともに管理できるテストケース数じゃなくなるんだが…
マジでどうすりゃいいのさ

クラスが綺麗に分離しててそれぞれ独立にテストできればそうして結合は手抜きでも良いかなって考えたんだけど
コードをリファクタリングする権限なんて無いしな…

副作用はRDBだけだからインフラ周りで難しいことはないけど
単純にテストケース数が多すぎて手に負えない
みんなどうやって解決してんだろ

>664
ログ出力で何をするんですかね
0666デフォルトの名無しさん
垢版 |
2022/12/19(月) 18:13:03.14ID:KnS+FMSG
テストが難しいような単位で物を作っているからいけない。
0667デフォルトの名無しさん
垢版 |
2023/03/21(火) 01:20:44.21ID:PRQ38MNf
画面がないと動かせない
データベースがないと動かせない
切り離すのめんどくさい
0668デフォルトの名無しさん
垢版 |
2023/06/06(火) 22:27:59.61ID:jiKuTUOv
テストドライバやスタブの概念がないレベルか?
レスを投稿する