2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

テストしにくいコードをテストする方法 その2

1 :デフォルトの名無しさん:2017/01/03(火) 14:50:44.83 ID:f6cee8Pv.net
ここで言うテストっていうのは
ユニットテストみたいなものね。

人間がぽちぽち操作してやるテストじゃありません。


前スレ テストしにくいコードをテストする方法教えて下さい
http://echo.2ch.net/test/read.cgi/tech/1334408391/

621 :デフォルトの名無しさん:2017/08/19(土) 23:35:58.11 ID:uww7i/PR.net
>>620
ですよね。これぐらいの短いコードに
テストコードがあったて意味が無いと思ってました

622 :デフォルトの名無しさん:2017/08/20(日) 00:18:36.94 ID:4afFh/HS.net
>>618
テスト対象は今後変更することは無い?
もし変更するのであれば、テストコードはリグレッションテスト用として価値があるかと。

623 :デフォルトの名無しさん:2017/08/20(日) 00:29:40.53 ID:ye9mPKN8.net
>>622
変更するときは仕様を変えるときだろうな。
その時はテストも変えないといけないだろうね。

100行って意外と大したことないよ。
コマンドライン引数の処理部分で20行ぐらい使ってるし。
(当然ライブラリ使ってるのでここに条件分岐とかない)

624 :デフォルトの名無しさん:2017/08/20(日) 00:40:08.51 ID:PGSVSpKF.net
今ある機能はそのままで機能追加とかよくある事だと思うんだけど

625 :デフォルトの名無しさん:2017/08/20(日) 00:41:57.09 ID:ye9mPKN8.net
シンプルに単機能にしてるからなぁ。

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

出来る限り機能は削ぎたいぐらい

626 :デフォルトの名無しさん:2017/08/20(日) 00:42:02.88 ID:PGSVSpKF.net
あと、テストを後から書こうとするから面倒くさいん

627 :デフォルトの名無しさん:2017/08/20(日) 00:54:04.14 ID:ye9mPKN8.net
というかクラスにも関数にもなってないようなもの
というかそうするまでもないような短いコードに
どうやってテストを書けばいいのかわからん

テストを書くためにわざわざ関数やクラスにして
モック使って倍以上の量にして
それを読めって言う方が大変だろう

628 :デフォルトの名無しさん:2017/08/20(日) 02:15:26.56 ID:4afFh/HS.net
>>623
あぁ、テスト対象って特定の機能じゃなくてクラスとかモジュールとかもっと大きな単位で考えてたわ。言葉足らずだったか。
今までの機能はそのままで追加機能とか別の機能の変更とかそういう時のリグレッションテストに役立つかと。

629 :デフォルトの名無しさん:2017/08/20(日) 04:05:43.40 ID:zvlsjK6m.net
テストはなくても簡単にサンプルが実行できるスクリプトとかは
書いておいた方がいいんじゃないの?

630 :デフォルトの名無しさん:2017/08/20(日) 05:56:24.39 ID:PGSVSpKF.net
ライブラリ使ってるというならそのライブラリの挙動含めて意図通りになってるかテスト書いておいた方がいいと思うけどね。
俺の環境では動いたは仕事では通らないし。
環境含めて提供するなら別だが、単機能のツールにDockerとか持ち出されても困るだろ。

趣味なら好きにしたらいい

631 :デフォルトの名無しさん:2017/08/20(日) 10:00:51.11 ID:dyFXBla+.net
100行程度のツールとかなら
・正常系
・ファイルがないとか読めない
・サーバーにアクセスできない
・...(ファイルの内容を色々)
程度のテストはする
よほど重要とか多数の人に配るとかでもない限りREST API のモックまではやらないな

632 :デフォルトの名無しさん:2017/08/20(日) 12:09:58.79 ID:8rqqhxmU.net
こいつは単にテストする気がないだけだろ

633 :デフォルトの名無しさん:2017/08/20(日) 12:24:27.07 ID:m30rRqux.net
いや、テストなら手動でやってるよ。

634 :デフォルトの名無しさん:2017/08/20(日) 12:27:14.87 ID:m30rRqux.net
良い例えを思いついたよ。

Dockerfileから呼び出す
エントリーポイントのシェルスクリプト

例えばこんなのな
https://github.com/docker-library/mysql/blob/e207dbbdfd5c95e4b51bdc2dae62c5f72a1dd908/8.0/docker-entrypoint.sh

これはループも条件分岐もある203行のコードだが
これに対するテストコード書くの?って話

635 :デフォルトの名無しさん:2017/08/20(日) 12:30:16.44 ID:8rqqhxmU.net
>>634
だからお前はここで何がしたいの?

636 :デフォルトの名無しさん:2017/08/20(日) 12:32:36.13 ID:m30rRqux.net
>>635
最初に書いてあるよね?

> やる価値ありますか?

637 :デフォルトの名無しさん:2017/08/20(日) 14:01:19.93 ID:t7S1uBht.net
>>636
誰にとっての価値を聞いてる?

638 :デフォルトの名無しさん:2017/08/20(日) 14:03:33.58 ID:m30rRqux.net
そりゃテストコードを書く場合と一緒だろ
お前は誰のためにテスト書いてるんだよ?

639 :デフォルトの名無しさん:2017/08/20(日) 15:08:35.49 ID:3YN/FpP2.net
>>634
俺なら書くよ。

逆に聞きたいけど、例えばその規模のコードを書くとき、全く動作確認もせずに0から全部書き切るの?
いや、動作確認はするよってことだったら、それはテストだよね。

640 :デフォルトの名無しさん:2017/08/20(日) 15:28:02.06 ID:m30rRqux.net
>>639
テストコードは書かないよ
実際に動かしてテストすればいい

641 :デフォルトの名無しさん:2017/08/20(日) 15:36:34.11 ID:3YN/FpP2.net
>>640
10行書く毎にテストするとして、最後の1回の動作確認は最後に書いた10行分の動作確認をするの?
それとも、今まで確認したこと全てやりなおすの?

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

だから、俺たちはテストコードを書くんだ。

642 :デフォルトの名無しさん:2017/08/20(日) 15:44:22.01 ID:m30rRqux.net
> それとも、今まで確認したこと全てやりなおすの?

単機能なんで、今まで確認したことの全て=一つと言ってもいいぐらいなんだよw

643 :デフォルトの名無しさん:2017/08/20(日) 15:46:20.52 ID:m30rRqux.net
もちろん全く一つではないけどね。
オプションで-vをつけると詳細なログがでる。

というテストを書く?

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

というテストを書く?

--versionと書くとVERSION変数の中身を表示するだけ
というテストを書く?

644 :デフォルトの名無しさん:2017/08/20(日) 16:05:48.62 ID:3YN/FpP2.net
>>642
> 単機能なんで、今まで確認したことの全て=一つと言ってもいいぐらいなんだよw
いやいや、例えば>>634のコードなら、というのが前提の話だよ。

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

仮に_check_config(), _get_config()なんかがリファクタリング(重複コードのメソッド抽出)の
結果だとするなら、何度もテストできるテストコードがあってよかった、ってことになると思う。

645 :デフォルトの名無しさん:2017/08/20(日) 17:34:52.00 ID:P16figJJ.net
>>636
もうお前の中で結論出てるんだろ

646 :デフォルトの名無しさん:2017/08/20(日) 20:32:13.07 ID:UwJAOTbj.net
夏休みも終わりだな

647 :デフォルトの名無しさん:2017/08/21(月) 17:53:08.75 ID:/uRF2gxn.net
まあ短いコードでもネットワークアクセスやデータベースアクセスみたいに
副作用の強いものとつながってるんなら、
そういう部分をスタブで置き換えてテストできるくらいには
整えておくのもいいんじゃないかね。

648 :デフォルトの名無しさん:2017/08/22(火) 06:13:39.28 ID:cjA4wxxB.net
テストするかどうかも決まってないのに
方法に来てどうするんだ

649 :デフォルトの名無しさん:2017/08/22(火) 06:40:15.00 ID:kG/K9vWp.net
各々の中で決まってるだろ。

650 :デフォルトの名無しさん:2018/05/23(水) 21:54:18.74 ID:Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

UZFWS

651 :デフォルトの名無しさん:2018/07/05(木) 00:08:07.11 ID:RfoszcD2.net
KWG

652 :デフォルトの名無しさん:2018/07/26(木) 19:44:42.33 ID:7pP0Ecr7.net
>>646
バカヤロウ、まだ始まってもいねぇよ!

653 :デフォルトの名無しさん:2020/06/14(日) 00:53:03.07 ID:5oNWegSg.net
イチカラツクリナオセ

654 :デフォルトの名無しさん:2020/06/14(日) 13:20:55.07 ID:m+2zmaXu.net
ユニットにできないなら結合した状態でテストするしかあるまい。
リファクタリングするなりして徐々にテスト範囲を小さくするが王道。

655 :デフォルトの名無しさん:2020/07/04(土) 07:57:34.91 ID:9B1sQRM5.net
ftpクライアントみたいなsocket通信を含むライブラリを開発しようと思ったらどうやってテストコード書きます?

2つソケット作って相互テストする?

656 :デフォルトの名無しさん:2020/07/04(土) 08:07:16.61 ID:gmurOIZf.net
一応別プロセス立ち上げてお互いに通信させるようなコード書くかな。

657 :デフォルトの名無しさん:2020/07/04(土) 08:28:39.39 ID:ewxE356G.net
テストしたいのが通信そのものじゃなくて自分のロジックならスタブやモックを使うのが良いんじゃね。
総コーディング量が多くなったり想定していない状況が漏れたりする可能性があるけど、逆に
想定できる状況なら網羅性を高くできるしテスト環境準備の手間も少なくなる。

658 :デフォルトの名無しさん:2021/05/25(火) 11:08:34.53 ID:6aeoZGgo.net
関数のアウトプットのオブジェクトがダイナミックに構造を変える時のパラメータ化テストが難しい

659 :デフォルトの名無しさん:2021/05/25(火) 19:59:55.83 ID:vDgp1zAi.net
>>658
いくら構造が変わるからといっても条件があるだろうから、その条件を固定して出力構造を固定化してやればよくね?

660 :デフォルトの名無しさん:2021/05/25(火) 20:15:23.88 ID:7xIwUOw5.net
>>659
条件固定でやるのは当然だけど
出力の構造が異なるとパラメータ化して一気にテストってのができない
構造ごとにテストケースを書かないといけない

661 :デフォルトの名無しさん:2021/05/30(日) 12:47:56.92 ID:sJ/lY+qu.net
外部APIクライアントのテストってどうやってんだ?
テスト専用アカウント作ってやるとか?

662 :デフォルトの名無しさん:2021/06/27(日) 10:51:06.30 ID:h2kpgEo5.net
>>661
インフラではなく、プログラミングレベルの妥当性確認がしたいのなら、フレームワークの機能を使ってテストするのが一般的じゃないかな。
やることは大抵、登録処理の実行、レスポンスの確認、データ取得処理の実行、レスポンスの確認、登録エラーが起こる処理の実行...をテストフレームワークが用意したライブラリを使ってゴリゴリテストコードに記述していくだけだけど。

当然、テストフレームワーク環境での実行なので、サーバーサイドは真っ白な状態からスタートする。

663 :デフォルトの名無しさん:2022/12/15(木) 16:54:51.27 ID:MV1x1AJa.net
夜間バッチのテストが難しすぎて困った
組み合わせ多すぎ、処理フロー複雑すぎでどうやってテストしたらいいか頭が追いつかない

664 :デフォルトの名無しさん:2022/12/15(木) 18:45:15.92 ID:kp2u5+JM.net
ログ仕込め

665 :デフォルトの名無しさん:2022/12/19(月) 11:53:17.90 ID:7xt1WnSN.net
ずっと悩んでるけど夜間バッチ処理のテストいまだにわからんすわ
ペアワイズ法とか色々小賢しいテクニックでテストケースを減らすことができることは学んだけど
それやった上でもまともに管理できるテストケース数じゃなくなるんだが…
マジでどうすりゃいいのさ

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

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

>664
ログ出力で何をするんですかね

666 :デフォルトの名無しさん:2022/12/19(月) 18:13:03.14 ID:KnS+FMSG.net
テストが難しいような単位で物を作っているからいけない。

667 :デフォルトの名無しさん:2023/03/21(火) 01:20:44.21 ID:PRQ38MNf.net
画面がないと動かせない
データベースがないと動かせない
切り離すのめんどくさい

668 :デフォルトの名無しさん:2023/06/06(火) 22:27:59.61 ID:jiKuTUOv.net
テストドライバやスタブの概念がないレベルか?

669 :デフォルトの名無しさん:2023/08/14(月) 10:18:51.03 ID:lHGygmd4x
最近地球破壊テ囗リス├税金泥棒自閉隊が都心付近まて゛クソヘリやらC-130やらクソ爆音航空機飛は゛しまくって低周波騒音引き起こしてるな
自閉隊とは,國民の生命と財産を守る存在て゛はなく、税金泥棒しながら、エネ価格に物価にと暴騰させて、住民の権利を強奪して破壞して
氣候変動させて災害連發させて國土まで破壞しながら私腹を肥やすテ囗リストの典型た゛と理解しよう!
ウクライナの軍事予算はGDΡ比4%以上あったわけた゛し.軍のク一テ゛ターによって政権掌握されたミャンマ‐はGDp比2%台.
徴兵して拒否すれは゛犬コ□公務員に制圧させて殺害可能な社會にしようとしてるのか゛防衛予算のために増税まて゛計画している岸田増税文雄
ちなみに,2014年にマレ―シア地球破壞テ口リス├機MH17を地対空ミサイ儿9K37フ゛━クて゛見事に撃墜したのは,戦闘民族ウクライナ人な
真の防衛として,利権を貪って税金泥棒して地球破壞して私権侵害して私腹を肥やすだけの人類に涌いた害蟲クソ公務員を全滅させて,
新≡種の神器、拳銃.スティンガ―、手榴弾を−刻も早く全家庭に普及させないとお前ら間違いなく口シア逃亡民みたいな目に合うぞ

創価学会員は.何百万人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まて゛出てる世界最惡の殺人腐敗組織公明党を
池田センセ−が□をきけて容認するとか本氣で思ってるとしたら侮辱にもほどがあるそ゛!
hΤTРs://i,imgur.cоm/hnli1ga.jpeg

670 :デフォルトの名無しさん:2023/11/24(金) 04:33:48.06 ID:Jzh7gNS7X
池田犬作が死亡したわけだがマインドコントロー儿されてる創価学会員は一刻も早く統一教会のような返還請求しないと
私腹を肥やすためなら都心まで数珠つなぎで日本近海の海水温か゛突出して上昇するほど莫大な温室効果カ゛スまき散らして気候変動
魚は捕れない、農産物は壊滅、鳥ウイルスやら蔓延して鷄卵やら食糧価格暴騰、日本のみならず世界中て゛土砂崩れ、洪水.暴風、熱中症にと
災害連発させて世界中の住民の生命と財産を強奪して私腹を肥やす世界最悪の殺人テロ組織公明党強盗殺人の首魁蓄財3億円超の斉藤鉄夫ら
テロリストどもに俺も俺もと食い荒らされて10兆円の資産なんてあっという間に消滅するぞ、多額の金を払ってニ束三文の山奥の墓を買った
ジジババとか維持管理され続けるなんて甘いこと考えてんじゃねえた゛ろうな、さらに多額の管理費とか請求されてこれは金にならない
となれは゛とっとと切り捨て朽ち果て荒れ放題とても墓参りなんて不可能な状態になるのが目に見えてるわ
創価学会資産の実質的支配者は池田犬作なんだから相続税を課させるようお前らも運動しないとダメ絶対!
(羽田)ttps://www.сall4.jp/info.php?type=items&id=I0000062 , tTps://haneda-projecT.jimdofree.com/
〔成田)Тtps://n-souonhigaisosyoudan.amebaownd.com/
(テロ組織)tTps://i.imgur.com/hnli1ga.jpeg

225 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★