[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/04 02:09 / Filesize : 316 KB / Number-of Response : 1037
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

カプセル化の有害性、オブジェクト指向は愚かな考え



1 名前:デフォルトの名無しさん [2020/06/18(木) 23:47:36.69 ID:l/2SQUll.net]
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。

かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

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

558 名前:デフォルトの名無しさん [2020/07/03(金) 10:25:42.60 ID:lDWf2b6S.net]
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?

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

559 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:27:37.08 ID:N+TCe3uh.net]
単に道具だから自分で考えて必要なら使えば良い訳で。

カプセル化ってのはつまり部署ごとにお前のところはお前で責任を持て、
お前が変えたからって他の部署に仕事をさせるな、ということだから、
それができてればなんでも良い。

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

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

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

563 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:53:31 ID:N+TCe3uh.net]
そもそもOO

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

個人のソフトとかは好きにすれば良いし、好きにできるようになってるんだから
それぞれ道具を自分の必要に応じて使って勝手にやれば良い。
[]
[ここ壊れてます]

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



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

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

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

569 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:16:49.80 ID:N+TCe3uh.net]
Privateをテストするかどうかはプロジェクトごとのテストのやり方次第だし、
なんのテストかにもよるわけで。

デベロッパーテストなら当然するだろうし、リグレッションテストで普通は
プライベートメソッドをテストしないだろう。

その辺はカプセル化とかOOとかはあまり関係の無い話。

570 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:22:55.88 ID:hDsckVNf.net]
privateもテストしろよハゲ

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

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

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

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

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

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



576 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:19:27.55 ID:Gy+Up1+B.net]
>>555
privateテストでテスト数減るならその方がいいのは自分も同意

誤 privateはテストしなければならない
誤 privateはテストしてはならない
正 必要なテストだけ簡単になるように書けば良い

577 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:48:21.04 ID:BB9T+E2r.net]
>>556
https://ja.coder.work/so/java/17371

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

579 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:31:34 ID:/F47has6.net]
>>525
もしかして 神オブジェクト?

580 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:33:00 ID:/F47has6.net]
よく見たら全部privateか。
...いや、そんなの誰が呼ぶんだ。

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

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

583 名前:デフォルトの名無しさん [2020/07/03(金) 16:51:38 ID:36TwtcUk.net]
じゃあpimplで。

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

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



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

587 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:47:09.01 ID:DQKehNsV.net]
それな

588 名前:デフォルトの名無しさん mailto:age [2020/07/03(金) 19:19:16 ID:TUVANe+h.net]
>>566
普通そうだよね

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

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

591 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:06:04.59 ID:DQKehNsV.net]
あー、ここ組み込みとかのやつらが多いのか!納得だわ

592 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 03:14:27.24 ID:1AXxY7r6.net]
>>559
そりゃインナークラスは親クラスのメンバーなんだから
親クラスから見えるのは当たり前。

巨大クラスを作ってその中にインナークラスが大量にあるような
コードならそれはカプセル化できてない。Java使ったから自動的に
カプセル化できるものでも適切なOOの設計になるわけでもない。
それらがやりやすいような言語なだけ。

適切に使えば、インナークラスを使わなかった場合パブリックで
メンバーにアクセスさせなければいけないのに対して、インナークラスの
メンバーはアウタークラス以外には見えないわけだから、よりカプセル化は
進んでいる。

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

594 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 08:51:34.07 ID:+L2cGNSv.net]
>>572
組み込み開発やってるけど、ちゃんと最先端の勉強をしている人はオブジェクト指向理解しているよ(別にOOP自体は普及しきったノウハウだが)。
言語はC/C++言語ほぼ一択だけど。(他はRustくらいだが、まだ普及しない)

まぁ、WEBやアプリ開発等、我々から見て抽象レイヤーで使われるノウハウを軽視するおじさん上司も多いし、組み込みに残念なプログラマーが多いことは否定しないけど。

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



596 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:13:15.22 ID:6t8LAACC.net]
>>576
ねーよ
黙って100%にしろや

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

598 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:30:23 ID:xLCX+W2/.net]
>>578
いいよ
100%にできる方法でやって

599 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 10:45:14.19 ID:MjvraXl0.net]
草、どんな立場だよw

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

601 名前:デフォルトの名無しさん [2020/07/04(土) 11:03:03 ID:pmIasW6W.net]
C2 100%は新人でも最低ライン

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

603 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:08:56.73 ID:M3d71N9d.net]
>>576
> カバレッジテストとアクセス修飾子って関係あるの?

当然関係ないよ。(ここらへんで関係があるとか言ってるのはアホからだ

604 名前:ウ視していい。)
privateになってようが、それはpublic経由でテストするのだから
カバレッジは変わらない

テストのしやすさが変わるだけ。もしprivateのままだとテストしづらいなら
そのprivateの仕様を明確にしてpublicにして問題ないような設計に変えるだけのこと
[]
[ここ壊れてます]

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



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

607 名前:デフォルトの名無しさん [2020/07/04(土) 11:14:53 ID:pmIasW6W.net]
テストの仕方って教えないものなんだなー

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

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

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

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

610 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:18:58 ID:M3d71N9d.net]
>>585
> publicにしないとテストできないってどんな言語?

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

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

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

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

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

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

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

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

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

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



616 名前:もいいというか、臨機応変にやるとこ。 []
[ここ壊れてます]

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

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

618 名前:デフォルトの名無しさん [2020/07/04(土) 11:33:41.81 ID:1AXxY7r6.net]
>>596
プログラマって言ったってサラリーマンと対して変わりがないくらい幅広いわけで。

大規模ビジネスシステムで分岐ごと全部テストしてたらピラミッド建設みたいな事に
なりますw

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

世界標準はないでしょ。

620 名前:デフォルトの名無しさん [2020/07/04(土) 11:39:33.69 ID:pmIasW6W.net]
>>597
大規模システムってみずほとか?
テストは組み合わせを考えると膨大になるのだけれども
最小単位のunit testだとそうでもなくてだからこそunit testは大事なんよ

Salesforceは知ってる?クラウド型のサービスでアプリ作ったりできるんだけど
カバレッジが75%以下だとデプロイできなくなってる

大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない

621 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:39:35.50 ID:MJUVFEDB.net]
昔の組み込みの少ない経験だけでイキってるんやろ

622 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:40:52.54 ID:M3d71N9d.net]
>>592
> privateでテストできないならpublicに設計し直すんやって言ってたじゃん
> privateのままでテストするのに何も大変なことなんてない

自分で答え言ってるじゃんw
privateでテストできないならpublicに設計し直すんだから
privateのテストは大変じゃなくて必要ないってこと

623 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:41:39.32 ID:M3d71N9d.net]
>>593
> わかってないのはそっちの方、unit testでカバーしてなかったら
> 仕様通り動いてるのを確認できない

ユニットテストでカバーしないなんて一言も言ってないんだが?
何に反論してるんだよ

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

625 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:42:23.92 ID:M3d71N9d.net]
>>594
> privateなメソッドであっても事前条件も事後条件もある
> unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる

最初からpublic経由でテストするって言ってるよね?



626 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:43:01.27 ID:czCytfqY.net]
あたい知ってるよ
カバレッジテストを合格するために、privateをpublicにしてメソッドを呼び出せばいいんだよね。

あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されている条件文全て消せばいいんだよね。

あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されているコードを全部消せばいいんだよね。

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

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

629 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:44:22.90 ID:M3d71N9d.net]
>>606
> privateのテストは必要だよ

だから何度も言ってるがprivateでテストしたいと思ったら
publicに変更するんだから、privateのテストはしなくてすむと言ってる

お前短絡思考なんだよ。
privateはprivateのままテストしなくちゃいけないんだって思ってるだろ

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

631 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:45:01.10 ID:M3d71N9d.net]
>>607
> 君はprivateのテストは書かないってことだから
> privateのメソッドはunit testでカバーされてないよねってこと

なんですぐ上でprivateはpublic経由でテストするって言ってるのに
理解できてないの?

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

633 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:46:08.10 ID:M3d71N9d.net]
>>609
> それはunit testにならないよってこと
> privateのメソッドをテストできてないよってこと

publicメソッド経由でテストしますがなにか?
publicメソッド経由でテストするのが大変なものは
設計を変更すべきなんだよ

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

635 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:47:15.08 ID:M3d71N9d.net]
>>611
> テストしたいからpublicにするのが間違ってて
> privateのままテストするのがオブジェクト指向として正当なやり方

だからprivateのままpublicメソッド経由でテストすりゃいいじゃん(笑)
何度も言ってる。

それが難しいなら、それはコードがすでに複雑である証拠なので
複雑なものを直さないでテストすると破綻する



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

637 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:47:48.99 ID:M3d71N9d.net]
>>613
> public経由でのテストはunit testではないよってこと

その根拠は?お前のユニットテストの定義は?
それはどこで勉強したこと?

638 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:48:47.27 ID:M3d71N9d.net]
>>615
> だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから

複雑だからオブジェクトを変えてるんだよ
アホなのか?

privateのテストはpublicメソッド経由でやる
それが難しいなら、コードが複雑だから設計を治す

639 名前:デフォルトの名無しさん [2020/07/04(土) 11:48:55.01 ID:1AXxY7r6.net]
>>599
アメリカの某有名パッケージだね。

その界隈では知ってる限りunit testでカバレージを求められることは無いし
GAFAあたりでも分岐ごとにやらないはず。エッジケースをどうするかとかは
聞かれるけど。

だいたいデベロッパーテストで全分岐をカバーしたところであまり意味はないし。
どのみちQAに回すわけで他人がやんなきゃ意味ない。

カバレージという概念を求められるのが少なくともアメリカでは航空宇宙や
自動車のようだし、良い悪いは別として、これが求められるようなところは
OOとかカプセル化とかが大事なプロジェクトとはちょっと違うよね。

千人のデベロッパーに五百人のテスターで組み込みとかやらないでしょ。
いや知らんのでイメージだけど。

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

641 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:49:55.50 ID:M3d71N9d.net]
>>619
> public経由したらunit testではないよってこと

だからその主張の根拠は何?
お前のオレオレルールの話なんか
何のやくにも立たないだろ

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

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

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

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


t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods#%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B


私の回答
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。

ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。

ただし、この議論にはプロダクトコードもテストコードも自分で書いていることという前提があります。プロダクトコードに手を入れられず、テストコードも無いレガシーコードに対しては、リフレクションは強力な手段です。

プライベートなメソッドのテストに関しては、4つの考え方があります。

パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。



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

647 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:52:52.72 ID:M3d71N9d.net]
>>622

> unit testは最小単位だから、世界共通の定義
> publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
> unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない

それはお前の定義であって、なんの根拠もないことはわかってる

648 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:53:29.28 ID:M3d71N9d.net]
>>625
> privateのテストはprivateを直接テストしないとunit testにならないよ

何度も「根拠を言わないことを繰り返す」のは
根拠がないからってことだよねw

649 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:53:30.11 ID:czCytfqY.net]
>>615

<

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

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

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

653 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:54:52.11 ID:M3d71N9d.net]
>>628
> テストのために、コード書き換えてどうするんだよってね。

お前の目的は、テストがしづらい複雑なコードを変えないことなの?(笑)

それともちゃんとテストが出来るコードを開発することなの?
どっちなのさ

目的を理解してるか?

654 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:55:05.15 ID:MJUVFEDB.net]
「メソッド単位のunit テストを強制されてるのです」ww

655 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 11:55:51.40 ID:M3d71N9d.net]
>>628
> 誰だよそれ、YouTuberか?

え? t-wadaさんを知らないってそれまずくね?w

https://twitter.com/t_wada
プログラマ。TDD 実践者。power-assert-js 作者。
『テスト駆動開発』『プログラマが知るべき97のこと』『SQLアンチパターン』を翻訳/監訳しました。
(deleted an unsolicited ad)



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

657 名前:デフォルトの名無しさん [2020/07/04(土) 11:56:48.02 ID:pmIasW6W.net]
>>632
TDDとか知らないの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<316KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef