カプセル化の有害性、オブジェクト指向は愚かな考え at TECH
[2ch|▼Menu]
[前50を表示]
550:デフォルトの名無しさん
20/07/02 21:40:09 UKbwg08G.net
>>531
せやろ、ワイの会社も結合テストのことをunit testと呼んでるわ
本当のunit testはやってない

551:デフォルトの名無しさん
20/07/02 22:14:17.02 /yt09sjO.net
>>528
Form1とかそんな感じじゃん

552:デフォルトの名無しさん
20/07/03 07:01:01.95 Ul5hp/bW.net
>>525
誰も使わんからテスト不要だね

553:デフォルトの名無しさん
20/07/03 08:34:55.79 zR3byV+3.net
>>532
それは珍しいな

554:デフォルトの名無しさん
20/07/03 08:56:10.03 N+TCe3uh.net
これは酷い。RFC 3439はネットワークの仕様の話であってオブジェクト志向なんか
一切関係ないし、プログラミングの話でもない。
偏差値が低い学校でだけ教えてた事実なんてないしアメリカの大規模システムは
全部OOでカプセル化が基本。
的外れすぎて開いた口が塞がらない。これ書いた人間が全く一切わかってないのはよくわかった。

555:デフォルトの名無しさん
20/07/03 09:22:53.27 r9jTvXIP.net
>>536
わざとバカなことを言って他の人が本気で反論や議論してくるのを笑ってる可能性もゼロではないが、まあ単に本物のバカという可能性のが高いと思う

556:デフォルトの名無しさん
20/07/03 10:20:55.42 N+TCe3uh.net
>>537
本気感が凄いね。反論とかしようがない1から10まで間違ってるレベルだし。

557:デフォルトの名無しさん
20/07/03 10:22:52.04 N+TCe3uh.net
こんなんでもRFC確認する人なんてほとんどいないだろうし、クラウドがあるじゃないですか!
のレベルの日本ではショーンK的に通用しそうというか、結構このスレでも通用してるのがおっかない。

558:デフォルトの名無しさん
20/07/03 10:25:42.60 lDWf2b6S.net
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?
超論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?

559:デフォルトの名無しさん
20/07/03 10:27:37.08 N+TCe3uh.net
単に道具だから自分で考えて必要なら使えば良い訳で。
カプセル化ってのはつまり部署ごとにお前のところはお前で責任を持て、
お前が変えたからって他の部署に仕事をさせるな、ということだから、
それができてればなんでも良い。

560:デフォルトの名無しさん
20/07/03 11:40:51 x82j4VqA.net
複数の開発会社が絡む大規模案件と
一社開発や個人開発の小規模案件を
ゴッチャゴチャにして同列で語り合うから、話が噛み合わないし、話が終わらないんよ。

561:デフォルトの名無しさん
20/07/03 11:47:43 Gy+Up1+B.net
>>542
各クラスの仕様を明確にするのか仕様を決めずに実装するかの差だよ
開発手法の差だが開発規模の差ではない

562:デフォルトの名無しさん
20/07/03 11:51:37 uIgOlo/V.net
>>543
仕様が明確じゃないのにテストする意味あるの?
それともprivateメソッドの仕様を明確にするの?

563:デフォルトの名無しさん
20/07/03 11:53:31 N+TCe3uh.net
そもそもOO


564:ニかは大規模開発するために出てきた手法だから個人で小さいもの 作ってるなら関数でもスパゲッティでも本人わかってりゃいいわけだし、昔は 関数でも部署ごとで話し合ってちゃんとやってたけど、どうしても直接アクセスして 変更の際ぶっ壊れるようなものを作るやつが出るから、じゃあもう見せなきゃそういう 事態は起こらないということで実際それはうまくいってる。 個人のソフトとかは好きにすれば良いし、好きにできるようになってるんだから それぞれ道具を自分の必要に応じて使って勝手にやれば良い。



565:デフォルトの名無しさん
20/07/03 11:59:07 Gy+Up1+B.net
>>544
「privateはxunit testingしなくていい」と言われる理由はそこだ
他のクラスとの関わりとして必要な仕様は非privateメンバのみに着目すればいい
publicメンバの振る舞いが変わらずすべてのテストをパスできるならprivateがどう変更されようが他のクラスからは関係ないからな

566:デフォルトの名無しさん
20/07/03 12:07:31 uIgOlo/V.net
つまりprivateをテストするってことは仕様が明確になってるわけで
publicにしても問題ないってことだよね

567:デフォルトの名無しさん
20/07/03 12:07:34 Gy+Up1+B.net
勢いで書いたから非privateとpublicがごっちゃになってるけどこの手の話題でpublicと書いてあったら全部非privateと読み替えて下さい

568:デフォルトの名無しさん
20/07/03 12:10:41.37 BB9T+E2r.net
>>540
超論理的思考によるとって、論理を超えた思考なんかされたって会話にならないから、論理的思考をした上で疑問があれば相談してくれ。

569:デフォルトの名無しさん
20/07/03 12:16:49.80 N+TCe3uh.net
Privateをテストするかどうかはプロジェクトごとのテストのやり方次第だし、
なんのテストかにもよるわけで。
デベロッパーテストなら当然するだろうし、リグレッションテストで普通は
プライベートメソッドをテストしないだろう。
その辺はカプセル化とかOOとかはあまり関係の無い話。

570:デフォルトの名無しさん
20/07/03 12:22:55.88 hDsckVNf.net
privateもテストしろよハゲ

571:デフォルトの名無しさん
20/07/03 12:26:06.83 sqXfkC+n.net
privateをpublicにしてもいいよねって言ってるやつは、改修で命名とかしたことないんかな

572:デフォルトの名無しさん
20/07/03 12:26:36.41 hDsckVNf.net
どこの現場でも通じないトンデモ理論を前面に出して話してんじゃねーぞガイジ

573:デフォルトの名無しさん
20/07/03 12:29:48.69 Gy+Up1+B.net
>>551
クラスの仕様変更でpublicになったときに追加すればいい
極端な話、複数のpublicメンバの中でprivateAとprivateBが使われてて各privateの挙動は実装者の想定と実は違ったとしてもすべてのpublicメンバの挙動が仕様通りなら(クラス仕様変更して変なバグを引く羽目になるまで)なんの問題もない
その時対処する事案

574:デフォルトの名無しさん
20/07/03 12:55:27.30 MMMvRh6C.net
privateな状態を確認するテストのがテスト数が減る。
二つのpublicなメソッドの関連をテストする場合、
n*m になるが
状態が k 個の場合、 (n + m)*k になるわけだよ。
無理にpublicだけのテストを書くことがどれだけアホか。

575:デフォルトの名無しさん
20/07/03 13:00:40 lDWf2b6S.net
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?

論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?

576:デフォルトの名無しさん
20/07/03 13:19:27.55 Gy+Up1+B.net
>>555
privateテストでテスト数減るならその方がいいのは自分も同意
誤 privateはテストしなければならない
誤 privateはテストしてはならない
正 必要なテストだけ簡単になるように書けば良い

577:デフォルトの名無しさん
20/07/03 13:48:21.04 BB9T+E2r.net
>>556
URLリンク(ja.coder.work)

578:デフォルトの名無しさん
20/07/03 14:48:27.68 lDWf2b6S.net
>>558
それは内クラスから外クラスが見えることの説明。
わたしの質問はなぜ外クラスから内クラスのprivateメンバが見れるのか?

579:デフォルトの名無しさん
20/07/03 15:31:34 /F47has6.net
>>525
もしかして 神オブジェクト?

580:デフォルトの名無しさん
20/07/03 15:33:00 /F47has6.net
よく見たら全部privateか。
...いや、そんなの誰が呼ぶんだ。

581:デフォルトの名無しさん
20/07/03 15:36:50.41 FAOrvW1R.net
しらんがな、言ったやつがコードサンプルでも出さなきゃ説明力足りてないから分からんだろ
外部クラスがどうのとか言ってるやつもな。Javaの外部内部の関係も理解が曖昧なんだろ

582:デフォルトの名無しさん
20/07/03 16:46:44.22 q5wbDGG6.net
Javaって修飾子付けないとpackage privateがデフォルトだからその事言ってんじゃね?
package privateとは言い換えればpakage内publicと同じだから

583:デフォルトの名無しさん
20/07/03 16:51:38 36TwtcUk.net
じゃあpimplで。

584:デフォルトの名無しさん
20/07/03 16:55:37 hDsckVNf.net
>>554
言い訳こいてんじゃねーよ
単体テストにpublicもprivateもねーよ
全メソッドテストしろや

585:デフォルトの名無しさん
20/07/03 16:58:29 36TwtcUk.net
弊社はC2カバレッジ100%に満たないものは出荷できませんけどね。

586:デフォルトの名無しさん
20/07/03 17:19:33.24 Gy+Up1+B.net
c2の100%は分野次第だがwebや基幹程度なら無駄と欺瞞で逆に信用できない

587:デフォルトの名無しさん
20/07/03 17:47:09.01 DQKehNsV.net
それな

588:デフォルトの名無しさん
20/07/03 19:19:16 TUVANe+h.net
>>566
普通そうだよね

589:デフォルトの名無しさん
20/07/03 19:53:44 FArQoHTp.net
特に組み込みはC2カバレッジが常識なんだけど、ISO26262では関数カバレッジでOKという不思議。

590:デフォルトの名無しさん
20/07/03 20:32:31.27 Gy+Up1+B.net
>>569
分野によるって言ってるだろ
人命関わらないgui優先で運用回避がまかり通る分野全般はカバレッジなしやc0カバレッジ70%(自動生成コード除く)とかなんだよ

591:デフォルトの名無しさん
20/07/03 21:06:04.59 DQKehNsV.net
あー、ここ組み込みとかのやつらが多いのか!納得だわ

592:デフォルトの名無しさん
20/07/04 03:14:27.24 1AXxY7r6.net
>>559
そりゃインナークラスは親クラスのメンバーなんだから
親クラスから見えるのは当たり前。
巨大クラスを作ってその中にインナークラスが大量にあるような
コードならそれはカプセル化できてない。Java使ったから自動的に
カプセル化できるものでも適切なOOの設計になるわけでもない。
それらがやりやすいような言語なだけ。
適切に使えば、インナークラスを使わなかった場合パブリックで
メンバーにアクセスさせなければいけないのに対して、インナークラスの
メンバーはアウタークラス以外には見えないわけだから、よりカプセル化は
進んでいる。

593:デフォルトの名無しさん
20/07/04 03:31:41.97 1AXxY7r6.net
親クラスは不適切だった。インナークラスはアウタークラスのメンバーなんだから
メンバーを見られるのは当たり前。

594:デフォルトの名無しさん
20/07/04 08:51:34.07 +L2cGNSv.net
>>572
組み込み開発やってるけど、ちゃんと最先端の勉強をしている人はオブジェクト指向理解しているよ(別にOOP自体は普及しきったノウハウだが)。
言語はC/C++言語ほぼ一択だけど。(他はRustくらいだが、まだ普及しない)
まぁ、WEBやアプリ開発等、我々から見て抽象レイヤーで使われるノウハウを軽視するおじさん上司も多いし、組み込みに残念なプログラマーが多いことは否定しないけど。

595:デフォルトの名無しさん
20/07/04 09:02:21.50 +L2cGNSv.net
>>566
カバレッジテストとアクセス修飾子って関係あるの?
カバレッジテストを合格するためにpublicにするとか、本末転倒じゃね?

596:デフォルトの名無しさん
20/07/04 10:13:15.22 6t8LAACC.net
>>576
ねーよ
黙って100%にしろや

597:デフォルトの名無しさん
20/07/04 10:19:47.88 +L2cGNSv.net
話の流れからして、テストのためにpublicにしろに読み取れたけど、ミスリード?
まぁ、そんな馬鹿な話、あるわけねーか。

598:デフォルトの名無しさん
20/07/04 10:30:23 xLCX+W2/.net
>>578
いいよ
100%にできる方法でやって

599:デフォルトの名無しさん
20/07/04 10:45:14.19 MjvraXl0.net
草、どんな立場だよw

600:デフォルトの名無しさん
20/07/04 11:02:29 pmIasW6W.net
publicにしなくてもリフレクション使ったりすればええんやで
privateだからテストしないなんてプログラマとしてありえない

601:デフォルトの名無しさん
20/07/04 11:03:03 pmIasW6W.net
C2 100%は新人でも最低ライン

602:デフォルトの名無しさん
20/07/04 11:06:53 pmIasW6W.net
テストの仕方を知らない教えない会社があるんだなー

603:デフォルトの名無しさん
20/07/04 11:08:56.73 M3d71N9d.net
>>576
> カバレッジテストとアクセス修飾子って関係あるの?
当然関係ないよ。(ここらへんで関係があるとか言ってるのはアホからだ


604:ウ視していい。) privateになってようが、それはpublic経由でテストするのだから カバレッジは変わらない テストのしやすさが変わるだけ。もしprivateのままだとテストしづらいなら そのprivateの仕様を明確にしてpublicにして問題ないような設計に変えるだけのこと



605:デフォルトの名無しさん
20/07/04 11:13:54 pmIasW6W.net
>>584
publicにしないとテストできないってどんな言語?
privateのままテストしたらええやんけ
unit testは最小単位でテストすることでテストのコストを
最小化するものだからpublic経由でprivateなメソッド呼び出してたら
unit testの意味をわかってないアホの極みだしテストのためだけにpublicにするよう
設計に手をいれるのは本末転倒

606:デフォルトの名無しさん
20/07/04 11:14:51 9ghyGMpS.net
とある大手家電メーカー勤めだが、以前までC2カバレッジ必須でやってたんだけど、色々な計測の結果じつはユニットテストでカバレッジに時間かけるよりシステムテストに時間かけたほうが品質が上がるという結果が出てからはユニットテスト必須じゃなくなったわ。

607:デフォルトの名無しさん
20/07/04 11:14:53 pmIasW6W.net
テストの仕方って教えないものなんだなー

608:デフォルトの名無しさん
20/07/04 11:16:50 M3d71N9d.net
外部から使うかどうかという(間違った)考え方で
privateにするかpublicにするかを決めてると
例えば、全文検索エンジンなんか最低限
文書の登録メソッドregisterと検索メソッドsearchだけでいいってことになってしまう

しかし全文検索エンジンとかいうのは内部で
高速なデータ検索を行うためにいろんなアルゴリズムやデータ構造を
使っているわけで、それらを(実際に使用例ができるかどうかは別として)
汎用的に使えるようにライブラリとして分離すればいいわけ

privateにするかpublicにするかっていうのは、そのシステムで外部から使うか?ではなくて
オブジェクトとして外部から使うかなわけで、privateでテストしづらいようなものは
別オブジェクトに分離とするとか設計をみなすべきってことなんだよ

609:デフォルトの名無しさん
20/07/04 11:18:52 pmIasW6W.net
>>588
privateのままテストしたらオブジェクト分ける必要ないよ
privateのままテストする方法がわからないからオブジェクトわけましょうなんて愚の骨頂
愚かの極み

610:デフォルトの名無しさん
20/07/04 11:18:58 M3d71N9d.net
>>585
> publicにしないとテストできないってどんな言語?

そんな話はしてない
可能不可能な話はしていない
やりやすいかどうかの話をしている
コストを考えなきゃいかんよ?

できるけど大変っていうのは、問題を何も解決してない
ちゃんと設計をせずに関数のインターフェースを定義せずに
無理やりprivateのテストをしても、private=外部から使わない=変更しても問題ないわけで
それに対してテストをしていると、変更しても問題ないはずのprivateメソッドを変更したら
テストが失敗するってことになるのでよくない

611:デフォルトの名無しさん
20/07/04 11:20:06 M3d71N9d.net
>>589
お前はprivateメソッドを変更したときの
影響の大きさがわかってないよね

612:デフォルトの名無しさん
20/07/04 11:23:05 pmIasW6W.net
>>590
privateでテストできないならpublicに設計し直すんやって言ってたじゃん
privateのままでテストするのに何も大変なことなんてない
テストのためだけに設計し直すのは頭おかしい

テストされてないメソッドが存在する方が問題だよ
外部から使わないから問題ないよねって感覚で勝手に修正されるわけないだろw
メソッド書き換えたらテストも修正するのは当たり前

613:デフォルトの名無しさん
20/07/04 11:24:25 pmIasW6W.net
>>591
わかってないのはそっちの方、unit testでカバーしてなかったら
仕様通り動いてるのを確認できない

614:デフォルトの名無しさん
20/07/04 11:26:55 pmIasW6W.net
privateなメソッドであっても事前条件も事後条件もある
unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる

615:デフォルトの名無しさん
20/07/04 11:27:43 1AXxY7r6.net
大規模システムでずっと来てるけどカバレッジって初めて聞いた。調べたら
アメリカだと航空宇宙とか自動車とかでやるみたいね。

ERPで分岐ごとにやってたら多分完成まで数世紀かかるよw

privateとかpublicとかは単に現場次第だよね。正式なQAメソッドではそこまで
言わないし、どうで


616:もいいというか、臨機応変にやるとこ。



617:デフォルトの名無しさん
20/07/04 11:30:38 pmIasW6W.net
>>595
臨機応変にやるのは会社を首にならないためですよねw
それは社会をどうやって生き抜いていくかサラリーマンとしての心得じゃないですか

プログラマとして品質の高いプログラムを作るためにC2 100%は最低条件ですよ

618:デフォルトの名無しさん
20/07/04 11:33:41.81 1AXxY7r6.net
>>596
プログラマって言ったってサラリーマンと対して変わりがないくらい幅広いわけで。
大規模ビジネスシステムで分岐ごと全部テストしてたらピラミッド建設みたいな事に
なりますw

619:デフォルトの名無しさん
20/07/04 11:36:02 1AXxY7r6.net
ちなみに臨機応変にやるとこなのは会社首とかはどうでもよくて、
ユニットテストはなに、リグレッションは、アクセプタンスはってのは
QAのメソッドとして確立してるけど、JavaのPrivateがどうするかみたいなのは
完全に現場次第だから。

世界標準はないでしょ。

620:デフォルトの名無しさん
20/07/04 11:39:33.69 pmIasW6W.net
>>597
大規模システムってみずほとか?
テストは組み合わせを考えると膨大になるのだけれども
最小単位のunit testだとそうでもなくてだからこそunit testは大事なんよ
Salesforceは知ってる?クラウド型のサービスでアプリ作ったりできるんだけど
カバレッジが75%以下だとデプロイできなくなってる
大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない

621:デフォルトの名無しさん
20/07/04 11:39:35.50 MJUVFEDB.net
昔の組み込みの少ない経験だけでイキってるんやろ

622:デフォルトの名無しさん
20/07/04 11:40:52.54 M3d71N9d.net
>>592
> privateでテストできないならpublicに設計し直すんやって言ってたじゃん
> privateのままでテストするのに何も大変なことなんてない
自分で答え言ってるじゃんw
privateでテストできないならpublicに設計し直すんだから
privateのテストは大変じゃなくて必要ないってこと

623:デフォルトの名無しさん
20/07/04 11:41:39.32 M3d71N9d.net
>>593
> わかってないのはそっちの方、unit testでカバーしてなかったら
> 仕様通り動いてるのを確認できない
ユニットテストでカバーしないなんて一言も言ってないんだが?
何に反論してるんだよ

624:デフォルトの名無しさん
20/07/04 11:41:45.39 pmIasW6W.net
>>598
現場次第だから現場に従うんだっていうのはそれはサラリーマンとして生き残るために
そうせざるを得ないだけだよね、品質の高いプログラムを作るなら常にテストはしないといけない
世界標準がないからいんだっていうのじゃないよ

625:デフォルトの名無しさん
20/07/04 11:42:23.92 M3d71N9d.net
>>594
> privateなメソッドであっても事前条件も事後条件もある
> unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる
最初からpublic経由でテストするって言ってるよね?

626:デフォルトの名無しさん
20/07/04 11:43:01.27 czCytfqY.net
あたい知ってるよ
カバレッジテストを合格するために、privateをpublicにしてメソッドを呼び出せばいいんだよね。
あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されている条件文全て消せばいいんだよね。
あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されているコードを全部消せばいいんだよね。

627:デフォルトの名無しさん
20/07/04 11:43:01.49 pmIasW6W.net
>>601
privateのテストは必要だよ
privateでテストできないからpublicにすると言ってるのは君の方
僕はprivateでテストするべきだって立場

628:デフォルトの名無しさん
20/07/04 11:43:56.50 pmIasW6W.net
>>602
君はprivateのテストは書かないってことだから
privateのメソッドはunit testでカバーされてないよねってこと

629:デフォルトの名無しさん
20/07/04 11:44:22.90 M3d71N9d.net
>>606
> privateのテストは必要だよ
だから何度も言ってるがprivateでテストしたいと思ったら
publicに変更するんだから、privateのテストはしなくてすむと言ってる
お前短絡思考なんだよ。
privateはprivateのままテストしなくちゃいけないんだって思ってるだろ

630:デフォルトの名無しさん
20/07/04 11:44:50.09 pmIasW6W.net
>>604
それはunit testにならないよってこと
privateのメソッドをテストできてないよってこと

631:デフォルトの名無しさん
20/07/04 11:45:01.10 M3d71N9d.net
>>607
> 君はprivateのテストは書かないってことだから
> privateのメソッドはunit testでカバーされてないよねってこと
なんですぐ上でprivateはpublic経由でテストするって言ってるのに
理解できてないの?

632:デフォルトの名無しさん
20/07/04 11:45:43.09 pmIasW6W.net
>>608
テストしたいからpublicにするのが間違ってて
privateのままテストするのがオブジェクト指向として正当なやり方

633:デフォルトの名無しさん
20/07/04 11:46:08.10 M3d71N9d.net
>>609
> それはunit testにならないよってこと
> privateのメソッドをテストできてないよってこと
publicメソッド経由でテストしますがなにか?
publicメソッド経由でテストするのが大変なものは
設計を変更すべきなんだよ

634:デフォルトの名無しさん
20/07/04 11:46:12.42 pmIasW6W.net
>>610
public経由でのテストはunit testではないよってこと

635:デフォルトの名無しさん
20/07/04 11:47:15.08 M3d71N9d.net
>>611
> テストしたいからpublicにするのが間違ってて
> privateのままテストするのがオブジェクト指向として正当なやり方
だからprivateのままpublicメソッド経由でテストすりゃいいじゃん(笑)
何度も言ってる。
それが難しいなら、それはコードがすでに複雑である証拠なので
複雑なものを直さないでテストすると破綻する

636:デフォルトの名無しさん
20/07/04 11:47:24.81 pmIasW6W.net
>>612
だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから
本末転倒だってこと

637:デフォルトの名無しさん
20/07/04 11:47:48.99 M3d71N9d.net
>>613
> public経由でのテストはunit testではないよってこと
その根拠は?お前のユニットテストの定義は?
それはどこで勉強したこと?

638:デフォルトの名無しさん
20/07/04 11:48:47.27 M3d71N9d.net
>>615
> だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから
複雑だからオブジェクトを変えてるんだよ
アホなのか?
privateのテストはpublicメソッド経由でやる
それが難しいなら、コードが複雑だから設計を治す

639:デフォルトの名無しさん
20/07/04 11:48:55.01 1AXxY7r6.net
>>599
アメリカの某有名パッケージだね。
その界隈では知ってる限りunit testでカバレージを求められることは無いし
GAFAあたりでも分岐ごとにやらないはず。エッジケースをどうするかとかは
聞かれるけど。
だいたいデベロッパーテストで全分岐をカバーしたところであまり意味はないし。
どのみちQAに回すわけで他人がやんなきゃ意味ない。
カバレージという概念を求められるのが少なくともアメリカでは航空宇宙や
自動車のようだし、良い悪いは別として、これが求められるようなところは
OOとかカプセル化とかが大事なプロジェクトとはちょっと違うよね。
千人のデベロッパーに五百人のテスターで組み込みとかやらないでしょ。
いや知らんのでイメージだけど。

640:デフォルトの名無しさん
20/07/04 11:49:13.09 pmIasW6W.net
>>614
public経由したらunit testではないよってこと
privateメソッドをテストすることは難しいことではないよ

641:デフォルトの名無しさん
20/07/04 11:49:55.50 M3d71N9d.net
>>619
> public経由したらunit testではないよってこと
だからその主張の根拠は何?
お前のオレオレルールの話なんか
何のやくにも立たないだろ

642:デフォルトの名無しさん
20/07/04 11:50:29.94 MJUVFEDB.net
誰のためにユニットテストするの?w
語ってるべき論は誰かを想定しちゃってない?w

643:デフォルトの名無しさん
20/07/04 11:50:46.08 pmIasW6W.net
>>616
unit testは最小単位だから、世界共通の定義
publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない

644:デフォルトの名無しさん
20/07/04 11:51:29.32 MG3qPS+J.net
名前をつけるとpublicだろうがprivateだろうがテストしなきゃいけない
→つまり無名にしてその場で使い捨てればテストしなくてOK!

645:デフォルトの名無しさん
20/07/04 11:51:49.54 M3d71N9d.net
もう答えがすでに出てる話をまだづつても無意味なんだけどなw

t-wadaのブログ
URLリンク(t-wada.hatenablog.jp)

私の回答
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
ただし、この議論にはプロダクトコードもテストコードも自分で書いていることという前提があります。プロダクトコードに手を入れられず、テストコードも無いレガシーコードに対しては、リフレクションは強力な手段です。
プライベートなメソッドのテストに関しては、4つの考え方があります。
パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。

646:デフォルトの名無しさん
20/07/04 11:52:44.14 pmIasW6W.net
>>617
privateのテストはprivateを直接テストしないとunit testにならないよ

647:デフォルトの名無しさん
20/07/04 11:52:52.72 M3d71N9d.net
>>622
> unit testは最小単位だから、世界共通の定義
> publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
> unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない
それはお前の定義であって、なんの根拠もないことはわかってる

648:デフォルトの名無しさん
20/07/04 11:53:29.28 M3d71N9d.net
>>625
> privateのテストはprivateを直接テストしないとunit testにならないよ
何度も「根拠を言わないことを繰り返す」のは
根拠がないからってことだよねw

649:デフォルトの名無しさん
20/07/04 11:53:30.11 czCytfqY.net
>>615
<


650:a href="../test/read.cgi/tech/1592491656/605" rel="noopener noreferrer" target="_blank" class="reply_link">>>605の皮肉と同じだよな。 テストのために、コード書き換えてどうするんだよってね。



651:デフォルトの名無しさん
20/07/04 11:53:42.19 pmIasW6W.net
>>624
誰だよそれ、YouTuberか?
権威主義的に誰かにすがりつくような真似をするな!

652:デフォルトの名無しさん
20/07/04 11:54:47.69 pmIasW6W.net
>>627
根拠は示したけどね、理解する気がないだけなんじゃない?

653:デフォルトの名無しさん
20/07/04 11:54:52.11 M3d71N9d.net
>>628
> テストのために、コード書き換えてどうするんだよってね。
お前の目的は、テストがしづらい複雑なコードを変えないことなの?(笑)
それともちゃんとテストが出来るコードを開発することなの?
どっちなのさ
目的を理解してるか?

654:デフォルトの名無しさん
20/07/04 11:55:05.15 MJUVFEDB.net
「メソッド単位のunit テストを強制されてるのです」ww

655:デフォルトの名無しさん
20/07/04 11:55:51.40 M3d71N9d.net
>>628
> 誰だよそれ、YouTuberか?
え? t-wadaさんを知らないってそれまずくね?w
URLリンク(twitter.com)
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。
(deleted an unsolicited ad)

656:デフォルトの名無しさん
20/07/04 11:56:33.70 M3d71N9d.net
プログラマでテスト駆動開発者の@t_wadaさんをお招きした
社内勉強会での様子をお届け!#メルカリな日々
URLリンク(mercan.mercari.com)

657:デフォルトの名無しさん
20/07/04 11:56:48.02 pmIasW6W.net
>>632
TDDとか知らないの?

658:デフォルトの名無しさん
20/07/04 11:57:31.94 czCytfqY.net
>>631
おめーこそ、テストの目的を理解してんのか、カス。
privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
それを外部から呼び出して単体テスト合格とかふざけんな。
テストなめてんだろ。

659:デフォルトの名無しさん
20/07/04 11:58:00.26 M3d71N9d.net
>>635
TDDで有名な人の名前って知ってる?

t-wadaのブログ
URLリンク(t-wada.hatenablog.jp)
URLリンク(twitter.com)
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。

> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> パブリックメソッド経由でテストする
(deleted an unsolicited ad)

660:デフォルトの名無しさん
20/07/04 11:58:12.80 pmIasW6W.net
>>633
有名な人を自分は知ってるんだ、だから自分が正しいんだって論旨かの?
その人のことを君は知ってるんだ、すごいねwww

661:デフォルトの名無しさん
20/07/04 11:58:45.56 M3d71N9d.net
>>636
> おめーこそ、テストの目的を理解してんのか、カス。
> privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw

662:デフォルトの名無しさん
20/07/04 11:59:28.07 czCytfqY.net
で、でたー!!!
有名人の権威に頼る詭弁!
流石、詭弁のプロッ!

663:デフォルトの名無しさん
20/07/04 11:59:33.33 pmIasW6W.net
>>637
知らない、誰それ、興味もない
人の名前覚えて品質の高いプログラム作れるようになるわけじゃないし
そういうこと頑張ってるのってただの意識高い系じゃない?www

664:デフォルトの名無しさん
20/07/04 11:59:35.76 M3d71N9d.net
>>638
> 有名な人を自分は知ってるんだ、だから自分が正しいんだって論旨かの?
そこはさぁ、専門家が言っていることは正しいんだって言うべきじゃね?w
専門家以外に、誰を信じればいいのか知らんが

665:デフォルトの名無しさん
20/07/04 12:00:04.79 M3d71N9d.net
>>641
つまりそういうこと。お前は「テスト技術」に興味がない

666:デフォルトの名無しさん
20/07/04 12:01:48 M3d71N9d.net
なぜ日本でTDDの専門家といって一番目に出てくるような人を知らないで
テストの話について語っているのか?
勉強したら必ず何度も目にする名前だろうに

667:デフォルトの名無しさん
20/07/04 12:05:38.40 pmIasW6W.net
>>643
僕は@t_wadaさんを知らないだけですよ
有名な人の名前を知ってるから自分はテスト技術に興味があって正しい知識を持ってるんだって思ってる?
論理を無視した権威による詭弁としか思えないし、それってただのマウンティングにしかならないんじゃないですか?
俺はt_wadaさんのこと知ってんだぞ!!おめーどーなっても知らねえからな!みたいな中卒ヤンキーのマインドを
お持ちなのはわかったけど、議論の向き先としてそっちで良いのって僕は思いましたよ

668:デフォルトの名無しさん
20/07/04 12:06:25.67 M3d71N9d.net
> 僕は@t_wadaさんを知らないだけですよ
その意味がわかってないんだろ?
お前は勉強した必ず目にする名前を知らないって言ってるんだよ
つまり勉強したことがないってこと

669:デフォルトの名無しさん
20/07/04 12:07:22 XvIYAIJA.net
いいんじゃね、全てのメソッドをテストしたけりゃすればw
ただそれを強制されてることが一般的だと思って奴がいるのは滑稽だなw

670:デフォルトの名無しさん
20/07/04 12:08:56 pmIasW6W.net
>>646
人の名前覚えて悦に入る人の心境がわからないんだよなー
僕はプログラムのことにしか興味がないから
誰がそれを書いたのかよりも書いてある内容の方に興味がある
執筆者の名前を覚えて勉強した気になってるだけじゃないの?

671:デフォルトの名無しさん
20/07/04 12:09:30.14 M3d71N9d.net
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

672:デフォルトの名無しさん
20/07/04 12:10:37.41 M3d71N9d.net
>>648
> 誰がそれを書いたのかよりも書いてある内容の方に興味がある
>>649にあなたが興味があるはずの「内容の方」書きました。
本当に興味があるなら読んでね(読まないだろうけどw)

673:デフォルトの名無しさん
20/07/04 12:14:01.28 pmIasW6W.net
>>650
著作権法に違反してない? 大丈夫?
僕はt_wadaさんを知らないし、信奉する立場でもないので
t_wadaさんがそう言ってるからそうなんだと思うことはないよ
内容に興味があるっていうのは、書いてあることをそっくりそのまま
自分の考えにするということではなくて自分の経験や知識に照らし合わせて
自分の考えを持つってことだよ
僕はその文章を読んでprivateメソッドをテストするべきだと思った

674:デフォルトの名無しさん
20/07/04 12:15:48.22 M3d71N9d.net
> 著作権法に違反してない? 大丈夫?
もはや技術の話に反論できなくなったか
引用の範囲で著作権は関係ないな(爆笑)
> 僕はt_wadaさんを知らないし、信奉する立場でもないので
あのさぁ、お前。「t_wadaを知らない」という人の話じゃなくて
その人が言った内容についての話をしろよ

675:デフォルトの名無しさん
20/07/04 12:16:19.37 M3d71N9d.net
> 僕はその文章を読んでprivateメソッドをテストするべきだと思った
それはあなたの感想です。考えは何も述べていません。

676:デフォルトの名無しさん
20/07/04 12:18:15.28 czCytfqY.net
>>639
> ↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw
別に、デバッグ目的で一時的にprivateメソッドを呼びたいのなら、勝手に呼んでどうぞ。
だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
本来、呼ばれないはずのprivateだったメソッドが呼ばれてしまえば、本来、不合格だったはずのカバレッジテストに合格してしまう可能性が出てくるし、privateメソッドを呼んだことで、本来ありえないクラス内部状態を作ってしまったら、単体テストの結果も変わってしまう。
テストは本番と同じ状態を保たないと駄目だよ。
プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?

677:デフォルトの名無しさん
20/07/04 12:19:20.76 XvIYAIJA.net
最後の行ありそう


678:w



679:デフォルトの名無しさん
20/07/04 12:19:46.76 M3d71N9d.net
>>654
> だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
ウォーターフォール開発?
テストで問題が出ても問題を上流に戻したらだめって
バグが出ても直したらいかんのかよw

680:デフォルトの名無しさん
20/07/04 12:20:53 M3d71N9d.net
>>654
> プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?

今はプログラマーの開発工程におけるデバッグの話ですよ?
動作確認でprivateメソッドを呼んでテストなんてしませんから

681:デフォルトの名無しさん
20/07/04 12:21:57 pmIasW6W.net
>>652
大丈夫かなって正直に思っただけ、君が引用だと思っててもt_wadaさんが勝手に転載してんじゃねえ
ぶっ殺すぞと思ってたらやばいじゃん、t_wadaさんって人を僕は知らないから
君がすごくぶっ殺されたりとかしないかなって思っただけ

t_wadaさんの話を振ったのは君ですよ
t_wadaさんを知らないのかー遅れてるーうひょーって有頂天になって書き込んでたのは君ですよ
僕は内容の話をしましたよ

682:デフォルトの名無しさん
20/07/04 12:22:14 czCytfqY.net
> テストは本番と同じ状態を保たないと駄目だよ。

これを曲解されても困るから補足説明するけど、単体テストって、クラス単体のテストのことな?
クラスを動かすための環境は自由に変えてもいいけど、クラスそのものを弄りかえるなって意味だからな?

683:デフォルトの名無しさん
20/07/04 12:24:12.62 xAj06qrt.net
テストがでかけるアサートと本番動作は普通は異なるがな。
なんでも統一させようとして無理が出るから public, privateの議論はくだらんなと思うわけだ。

684:デフォルトの名無しさん
20/07/04 12:28:01.42 czCytfqY.net
>>657
>>631でなんで、俺に反論した。

685:デフォルトの名無しさん
20/07/04 12:33:59.87 M3d71N9d.net
>>658
やっぱりまだ人の話を続けるんですねw
t_wadaさんが言った「内容」の話をしましょうね
負け組おじさんw

686:デフォルトの名無しさん
20/07/04 12:34:18.71 M3d71N9d.net
>>661
知らんがなw

687:デフォルトの名無しさん
20/07/04 12:35:58.47 M3d71N9d.net
>>660
クラスを動かすための環境というのはクラスの外界ってことはわかってるか?
クラスの外界は変えていいから、テストコードから呼び出すし
クラスの中で呼んでいる外界をモックやスタブで置き換えていいんだよ

688:デフォルトの名無しさん
20/07/04 12:37:35.05 exw+beGf.net
テストの前提として、テストされるコードをいじってはいけない
テストのためにコードをいじってテストが終わったらコードを戻すんだと
本来のコードが仕様通り動くことが保証できない
いじるのなら納品物が変わってくる

689:デフォルトの名無しさん
20/07/04 12:38:43.12 pmIasW6W.net
>>662
t_wadaさんを知らないのかーって言ったのは君で
これがt_wadaさんの神々しい高貴な文章なんだーと引用したのは君じゃん
僕はそれを読みました。読んだ感想を今から言います。よく聞いてください。
privateメソッドをテストするべきだと思いました。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1386日前に更新/316 KB
担当:undef