カプセル化の有害性、オブジェクト指向は愚かな考え at TECH
[2ch|▼Menu]
[前50を表示]
450:デフォルトの名無しさん
20/06/27 22:55:59.77 kHv6hhb8.net
リフレクションはオブジェクト指向にとっては黒魔術でしかないので正当なやり方ではない
この問題の本質はオブジェクト指向にテストの概念がないことにある
オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが
現代ではそれにテストも入れるべきなんだよ
データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向

451:デフォルトの名無しさん
20/06/27 22:56:59.64 gS37C1rZ.net
>>432
じゃあ何のためにprivateにするんだよ?
テスト(外部)からアクセスするんだろ

452:デフォルトの名無しさん
20/06/27 22:57:06.02 UrcM2fcl.net
>>434
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw
inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、
粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは?
何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw

453:デフォルトの名無しさん
20/06/27 22:57:18.00 gS37C1rZ.net
>>436
設計したこと無いの?

454:デフォルトの名無しさん
20/06/27 22:57:58.35 kHv6hhb8.net
>>436
privateはプログラムの話だから客は関係ないだろ
客がメソッドコールするわけじゃないからな

455:デフォルトの名無しさん
20/06/27 22:58:22.25 e0+LQFD/.net
>>440
あるよ、そしてそれが何度も顧客によって
覆ったこともな。

456:デフォルトの名無しさん
20/06/27 23:00:01.68 kHv6hhb8.net
>>438
内部からのみ処理したいものだからprivateにするんだよ
テストはしたいけどテストのためだけに他のオブジェクトからも
呼び出せるようにはしたくないよねって話をしてるんだ僕は

457:デフォルトの名無しさん
20/06/27 23:00:03.74 8YCrt6Qf.net
privateをテストするしないっていう想定自体が理解できない
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで
そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず
よっぽどprivateメソッドで複雑なことしていない限りそのテストで十


458:分だろうし それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう



459:デフォルトの名無しさん
20/06/27 23:02:02.14 kHv6hhb8.net
>>444
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです

460:デフォルトの名無しさん
20/06/27 23:02:14.45 gS37C1rZ.net
>>442
顧客によって覆ることが何の関係があるの?

461:デフォルトの名無しさん
20/06/27 23:02:29.65 kHv6hhb8.net
仕様が覆るのはあたりまえじゃん
それとアクセス修飾子の話は違うわ

462:デフォルトの名無しさん
20/06/27 23:02:36.66 gS37C1rZ.net
>>443
> 内部からのみ処理したいものだからprivateにするんだよ
テスト(外部)から処理したいんだろ
何矛盾したこと言ってるんだよw

463:デフォルトの名無しさん
20/06/27 23:03:54.57 gS37C1rZ.net
>>445
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの
複雑なメソッドは小さくしてください
設計がそもそも間違っています
テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。

464:デフォルトの名無しさん
20/06/27 23:03:58.42 kHv6hhb8.net
>>448
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす

465:デフォルトの名無しさん
20/06/27 23:04:46.01 /AdLJL3G.net
いや、この問題は言語と開発環境の問題だろ
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話

466:デフォルトの名無しさん
20/06/27 23:05:10.21 kHv6hhb8.net
>>449
僕は複雑なメソッドを大きく作ってるとは言ってないので
小さくしてくださいというアドバイスをいただいても困惑するばかりです

467:デフォルトの名無しさん
20/06/27 23:05:23.02 UrcM2fcl.net
逆に聞きたいけどpythonとかアクセス修飾子ない言語で、大規模プロジェクトがあったら、
ルール以外でアクセスはどう統制とってるの?
そういう言語の経験はWebくらいしか知らないから、全体何百万行(ステップ数でも人月でもいい)くらいのコードでこうしてた(る)ってのあったら教えて欲しい

468:デフォルトの名無しさん
20/06/27 23:06:53.54 gS37C1rZ.net
>>452
なぜできないんですか?

469:デフォルトの名無しさん
20/06/27 23:07:46.64 XQLOkAsO.net
>>454
あいつらサボってるからだろ

470:デフォルトの名無しさん
20/06/27 23:07:46.82 gS37C1rZ.net
誰でもできることができないなんて、能力がないなぁ

471:デフォルトの名無しさん
20/06/27 23:10:28.90 npRplKHX.net
お前らほんとプログラムのことしか知らないのな
品質を改善するときには品質を測るな これがテストの鉄則
タグチメソッドの入門でもよめ

472:デフォルトの名無しさん
20/06/27 23:12:05.09 gS37C1rZ.net
1.モノを作る前に品質を創れ
2.品質工学は統計ではない
3.科学的思考ではモノは出来ない
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない

473:デフォルトの名無しさん
20/06/27 23:12:06.00 kHv6hhb8.net
>>457
ありがとー!タグっちゃん!

474:デフォルトの名無しさん
20/06/27 23:13:46.29 gS37C1rZ.net
どこから品質の話が出てきたのか知らんが、
品質とテストの話は
> 5.完全な設計は試験や検査は不要
これですかね?

475:デフォルトの名無しさん
20/06/27 23:19:08.91 gS37C1rZ.net
>>458はいくつか日本語の文章に問題があるな
1.モノを作る前に品質を創れ
2.品質工学は統計ではない        ×「品質工学は○○である」と言おう
3.科学的思考ではモノは出来ない     ×「○○的思考でモノは出来る」と言おう
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要     ×「不完全な設計は試験や検査が必要」と言おう
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな   ×「品質を改善するときには○○をしろ」と言おう
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない  ×「システムは複雑なら、改善ができる」と言おう
こう偉そうなことを言ってるのに、じゃあどうすればいいかを
相手に考えさせるのって、どうなんでしょうかね(苦笑)

476:デフォルトの名無しさん
20/06/27 23:24:56.40 gS37C1rZ.net
「品質が欲しければ、品質を測るな!」は
「品質が欲しければ、機能を測って改善しろ!」という意味みたいですな
つまりオブジェクトの品質を上げたければ
テストできるように機能を改善しろということですな
privateメソッドであれば、


477:インターフェースを明確にして 機能に昇格させればpublicになるわけです。



478:デフォルトの名無しさん
20/06/27 23:31:52.99 npRplKHX.net
>>462
ホントにタグチメソッド知らなかったのか?
その割には理解が早いな
ようするにバクをなくしたいのだろ?
それならバクがでるかどうかのテストをすることが自体がずれてるんだ
そんなことは最終段階でやることじゃないんだ どうせモグラたたきになる  
最初の設計段階で徹底的にいじめ抜け
どれだけ変更に強いかをテストするんだ
品質が欲しければ,機能を測れ これにつきる

479:デフォルトの名無しさん
20/06/27 23:40:30.32 gS37C1rZ.net
>>463
では「機能を測る」とは?
どうやって測るのかを言ってみましょう
できるかな?w

480:デフォルトの名無しさん
20/06/27 23:41:10.95 ZFnYFbMi.net
単体テストとどう違うの?

481:デフォルトの名無しさん
20/06/27 23:41:18.54 gS37C1rZ.net
>>463
> その割には理解が早いな
あんなもん当たり前のことを誰かがまとめただけだからね
デザインパターンと一緒。
よく知られたものに、名前をつけてるだけ

482:デフォルトの名無しさん
20/06/27 23:42:26.37 gS37C1rZ.net
>>465
複雑なものを複雑のままテストをしても意味がない
シンプルにテスト可能な形に設計を変えることがテストの目的の一つ
ようはprivateはpublicになるように設計を変えろということ

483:デフォルトの名無しさん
20/06/27 23:43:10.60 ZFnYFbMi.net
単体テストって結合してからテストするの?

484:デフォルトの名無しさん
20/06/27 23:46:52.77 ZFnYFbMi.net
王家秘伝のレシピ教えてやるよ。
#define private public
皆には内緒だぞ。

485:デフォルトの名無しさん
20/06/28 01:34:12.55 wUTwjqhp.net
>>469
#define ディレクティブを使用して、通常 C および C++ で行うように定数値を宣言することはできません。
C# の定数は、クラスまたは構造体の静的メンバーとして定義することができます。
そのような定数がいくつかある場合は、それを保持するための "Constants" クラスを個別に作成することを検討してください。

486:デフォルトの名無しさん
20/06/28 02:01:57.56 pODeKu4C.net
privateメソッドの直接テストしたいけど可視性を変えたくない場合は
リフレクションを簡単に使えるようにしてるテストフレームワークだったりライブラリ使えばいい
ちなみにGoやRustはprivateもテストできる仕組み持ってる

487:デフォルトの名無しさん
20/06/28 05:51:03.49 qNzQpEfW.net
>>469
あざーす!国王あざーす!

488:デフォルトの名無しさん
20/06/28 05:51:56.56 qNzQpEfW.net
>>471
ええなー

489:デフォルトの名無しさん
20/06/28 09:51:30.71 lfkBrldT.net
>>463
ソフトウェアの作り方も知らずにタグチメソッド真に受けたら、
糞みたいな品質のものしかできんぞw
単体テストってのは設計の一部なんだよ。品質テストとは全く異なる。
抽象論でタグチメソッドを適用しようとしてる輩が一番ヤバい。

490:デフォルトの名無しさん
20/06/28 10:22:04 4vfVPlvE.net
なんだミニ四駆のモータに学ぶことでもあんのか?って思ったら
品質100%の更に上の話じゃねーか

現場の単体テストもロクにやらないクソが問題になってるITでそんなもんいらん

491:デフォルトの名無しさん
20/06/28 12:40:59.37 L5Cpw8A4.net
中の磁石が強いほどトルクが上がって回転数が下がる
磁力が弱いほどトルクが下がって回転数が上がる

492:デフォルトの名無しさん
20/06/28 13:22:34.10 S7usk0qp.net
>>326
わかりやすい

493:デフォルトの名無しさん
20/06/28 18:21:30.86 3Si3AZJb.net
privateのテストってリファクタリングの妨げじゃないのか

494:デフォルトの名無しさん
20/06/28 18:55:54.96 nHckGJvd.net
開発体制が複数の会社でピラミッド状の階層化されてたら指揮系統的に相当厳しいだろうね。

495:デフォルトの名無しさん
20/06/28 19:33:26.78 JoVMtTbA.net
Javaの修飾子宣言鬱陶しくて


496:ルんと嫌い



497:デフォルトの名無しさん
20/06/29 14:12:08 EmVrB3rr.net
明示的な状態管理は、(不可能ではないにせよ)管理すべき状態の量が増えてくると非常に困難になってくるところ、関数型言語の考え方を取り込むことによってその負担を軽減できるのではないかーーという意見もあるようだけど、
このスレの人(カプセル化肯定派・否定派いずれも)としてはどう?

498:デフォルトの名無しさん
20/06/29 19:41:29.30 bVpw4tuk.net
カプセル化の可否はともかく
階層化の有害性についてはこう思います。
例えばディレクトリを階層化のすると
親ディレクトリと子ディレクトリに同じデータを重複格納
する人が出たりしてデータの二重管理が発生
しやすくなると思います。
そのうちどれが正なのか分からなくなります。
あと単純に子供に格納するほどデータのアクセスパスが
長くなってどこにあるのか探し出すのが大変になると
思います。
これはオブジェクトの階層構造でも
JSONなどの構造についても言えることだと思います。

499:デフォルトの名無しさん
20/06/29 20:06:40.16 cYsf6eW3.net
プログラムで階層化なんて意識したことないけど問題起こったことない
分野が違うのかな

500:デフォルトの名無しさん
20/06/29 20:18:08.97 6d9dL1u1.net
そう、問題が起こるのはいつも人間関係です

501:デフォルトの名無しさん
20/06/29 20:19:42.34 tYVp58Ca.net
つまり、人間関係の問題を持ってきても、技術を否定したことにはならないのです。

502:デフォルトの名無しさん
20/06/29 21:42:10.57 P3P3vIj6.net
>>483
>>1に書いてあることが理解できない?

503:デフォルトの名無しさん
20/06/29 23:35:22 L39gVdue.net
>>482
そこで挙げている階層化の問題だが、階層化せずフラットに格納すれば解決するのか?
階層化しないということは同じレベルに大量の物が同格に並ぶわけだが、そうなると目的の物を探すのが困難になりすでにあるデータと同じものを重複して格納する危険性があるだろう。
またアクセスパスが長くなるというが、フラットな構造で多数の物を適切に命名しようとすれば階層的な名前付けが役立つはずだが、それすら長くなると忌避するなら場当たり的に短い名前を着けていっていずれ収集が着かなくなるだけでないの?
お前さんが挙げた階層化の問題は階層化の仕方が悪い(下手な)だけで、階層化をしなければ解決するというものではなかろう。

504:デフォルトの名無しさん
20/06/30 05:33:42.93 v2qXZCJh.net
結局、分類だったり抽象化のやり方がクソってだけの話だろ。
フラットにしようが階層にしようが、クソな分け方したらどうにもならんてだけの話だ。

505:デフォルトの名無しさん
20/06/30 08:05:51.26 GiU27GCt.net
URLリンク(monobook.org)

506:デフォルトの名無しさん
20/06/30 08:11:00.58 PIU/381m.net
>>486
ぴえ?

507:デフォルトの名無しさん
20/06/30 10:40:18.75 J3IrN4Ey.net
>>1が例に上げてるRFC3439は「Layering Considered Harmful」という強い言葉を使ってるが
レイヤ化は万能じゃなくデメリットもあるという当たり前のことを書いてるだけ
もちろん「カプセル化は絶対やめろ」なんてことは書いてない
メリット・デメリットを把握した上で
状況に応じたトレードオフの判断ができない人(>>1)には
ソフトウェアの設計はできない

508:途中から見た。
20/06/30 19:35:05 g7PLkMcM.net
なんか、privateメソッドのテストでもめているけど、なんで。
そもそも、privateメソッドを外部から呼び出してテストしないといけない場面が想像できないのだが。
クラスライブラリのコードを紛失したとか笑えないケースを想定しているの?

509:デフォルトの名無しさん
20/06/30 19:48:43 MKfuvp+I.net
gitや自動ビルドツールの存在がなかった時代の
オブジェクト指向技術は淘汰されてもいいんじゃない?

昔はこれらがなかったからカプセル化で神経質に
防御してたけど
今は無理にパッケージを固めてやり取りすることが
なくなって

gitでソースを差分転送して再ビルドする方式に
切り替わった
旧仕様はブランチを切り分けといて復旧が簡単に
なって、仕様変更に対してそこまでビビらなくて良くなった。

それと自作のアプリのオブジェクトで
webからインストールしたライブラリや
フレームワークが自動生成して提供するもの以外で
それほど長時間状態を保持するような巨大なオブジェクト
構造を自作設計して作成することがあるか?
あるとすれば
webのセッションや
オープンワールドやFPSみたいなゲームくらいか

510:デフォルトの名無しさん
20/06/30 20:19:26 v2qXZCJh.net
今でもSIerなんかはコード書き換えないことに固執してるから可視範囲に対して神経質なんだよ。

511:デフォルトの名無しさん
20/06/30 20:27:32.13 +5DxT57L.net
>>492
それは「テストの時にだけpublicに変えればいいじゃん」か「privateはpublicに内在してるから直接テストする必要ないじゃん」のどっちの意味ですか?

512:デフォルトの名無しさん
20/06/30 20:58:39.82 Ya6sc1A9.net
>>492
コード紛失してなくても他社開発のをガッチャンコだと手が出せないでしょ。

513:デフォルトの名無しさん
20/06/30 20:58:42.09 ww2Xd+MO.net
× テストの時にだけpublicに変えればいいじゃん
○ テストがやりにくいというのは設計がまずいということ
自然な形でpublicになるような設計を改善すべきだ

514:デフォルトの名無しさん
20/06/30 20:59:02.71 Ya6sc1A9.net
小規模なら問題ない

515:デフォルトの名無しさん
20/06/30 21:38:14 BIUXizBX.net
他社のコードをテストすんの?

516:デフォルトの名無しさん
20/06/30 22:07:21.34 GiU27GCt.net
>>497
はぁ?バカはレスすんなよ

517:デフォルトの名無しさん
20/06/30 22:42:13.84 zKRJDZmr.net
>>499
そりゃ結合試験はするだろ

518:デフォルトの名無しさん
20/06/30 23:23:26.17 BIUXizBX.net
>>501
結合試験時に他社コードのprivateメソッドを態々呼出してテストすんの?

519:途中から見た。
20/07/01 00:09:32.11 vgPSMoJs.net
>>495
よくわからないが...強いて言うなら後者?
第一、クラスって実装者が責任を持ってテストするものだろう。
なんで、privateで定義されたものをpublicにして呼び出そうとするのかも、正直、わからない。
ブラックボックステストでもしたいの?
まぁ、ブラックボックステストってprivateメソッドを呼び出せば成立するかというと、違うと思うけど。
正直、何がしたいのかわからなさすぎて困惑している。

520:デフォルトの名無しさん
20/07/01 00:11:23.37 Dh09feZF.net
>第一、クラスって実装者が責任を持ってテストするものだろう。
これが守られてりゃこのスレみたいな議論は起こらんわ。

521:デフォルトの名無しさん
20/07/01 00:22:36 dTufBNXb.net
守るも何もクラスに不具合があれば実装者の責任だろ
って言うのが通用しないのか?

522:デフォルトの名無しさん
20/07/01 00:26:31 Dh09feZF.net
責任といってももういない奴に責任は取れんわな。

523:デフォルトの名無しさん
20/07/01 00:33:27.93 XAYXSYxH.net
客先に納めたプログラムを客先が勝手に変更したら責任は外れる契約になってると思う
これは弊社の納めたプログラムではありませんってなるから
社内で引き継いだなら文句を言うのは自由だが任された者がなんとかしろの精神だろ

524:デフォルトの名無しさん
20/07/01 00:43:31.96 Dh09feZF.net
クラスごとにしっかりテストがあって
引き継ぎがしっかりされる職場ばかりなら何の問題もないだろうね。
とても幸せな世界でいいですね。

525:デフォルトの名無しさん
2020/0


526:7/01(水) 01:04:03.02 ID:Ke5amsYp.net



527:デフォルトの名無しさん
20/07/01 01:36:00.07 bx11ZQ99.net
違うよ
visualstudioがテストプロジェクトでprivateをpublicみたいに呼べるようにするだけ

528:デフォルトの名無しさん
20/07/01 06:19:16.09 y/Wgtnem.net
>>503
privateを呼び出す必要があるってのはUnit Testの時で、実装者とテスターが同一人物かどうかは関係ないよ。
オブジェクト指向に限らずテスト理論の話になっちゃうんだけど、プロジェクトや規格で指定されるUnit Testの種類によってはpublic経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
なので十分に単純化されたprivateを含めて関数毎にテストする必要が出てくるのよ。

529:デフォルトの名無しさん
20/07/01 06:46:59.11 5jdJ/dE3.net
>>501
> そりゃ結合試験はするだろ
統合試験って言うことは、当然標準ライブラリの
テストも行うんだよな?例えばprintf関数のテストとか

530:デフォルトの名無しさん
20/07/01 06:53:14.54 lozEWamw.net
>>511
> public経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
そういうことだよね。だからそれはpublicメソッドが行ってる機能が多すぎるわけで
複数のpublicメソッドに分解するわけ。これが設計。
適切な関数の行数って思ったより短いものだから。
俺の場合、一部のcaseテーブルのようなものを除いてロジックと呼べるようなものがあるコードは
長いもので1関数30行〜40行程度半分以上は10行程度だよ

531:デフォルトの名無しさん
20/07/01 08:23:11.98 y4QPMVjI.net
>>512
何時何分何秒地球が何周回ったときに言いましたかーみたいな煽りだな

532:デフォルトの名無しさん
20/07/01 08:27:13.77 3Re1TFuk.net
>>512
そりゃprintf使うシステムの結合テストならもちろん結合テストのセンスでprintfもテストするよ。
ユニットテストの粒度とは違って「〜が標準出力されること」ってテスト項目になるけど。

533:途中から見た。
20/07/01 11:10:06.09 LiVkSFt2.net
結合テストと総合テストって同じ意味なのか?

534:デフォルトの名無しさん
20/07/01 12:14:34.41 hgyYQ8XK.net
総合テストって検収テストと同じじゃね?

535:デフォルトの名無しさん
20/07/01 12:24:10 wljUBRxY.net
テストの呼び方はプロジェクトによって違うからなんとも言えんなぁ

536:途中から見た。
20/07/01 12:36:28.97 LiVkSFt2.net
なんというか...コミュニケーションがまともにとれていないのでは?
恐らく、他人の作ったライブラリに対して単体テストをお前はやるのか?という意図で聞いた質問に、結合試験はするだろと回答したり、
結合試験と総合試験という字面で見ると似ているけど全然違う話を混在させたり、
似ているようで関係のない話を持ち出して混沌としているな。
語りたい事の本質が行方不明になっているように見える。

537:デフォルトの名無しさん
20/07/01 14:20:36 JqIYLyXt.net
>>512は総合じゃなく統合って書いてるぞ

結合テストのことを統合テストと呼ぶところもある
結合の度合いによって結合、統合、総合とそれぞれ分けてるところもある

単なる読み間違いなのか結合 = 統合の意味で使ってるのかは知らんけど

538:途中から見た。
20/07/01 14:54:20.92 LiVkSFt2.net
うわっ!恥ずかしいミスをしてたのは自分だったか。あとで、読み直す...。

539:デフォルトの名無しさん
20/07/01 17:50:33.35 1PwA88RR.net
visualstudioのテストプロジェクトが不甲斐ないってだけやし

540:デフォルトの名無しさん
20/07/02 19:42:17 84e/i8uV.net
privateメソッドテストするとか正気?
テストしなくてよくするためのprivateだろ

541:デフォルトの名無しさん
20/07/02 19:49:51.80 iX514c6x.net
テストする必要があるというのは
全部書き直した方がましということだが

542:デフォルトの名無しさん
20/07/02 20:08:44.37 /yt09sjO.net
>>523
特大クラス一つの


543:中に全部privateでメソッド作成したら どういう理由で全メソッドテスト免除になるの?



544:デフォルトの名無しさん
20/07/02 20:10:40.42 /yt09sjO.net
マイクロソフトに頼らんで独自にテストプロジェクト作ってるような会社はできてんで
visualstudioの都合でテストやりたくないって言ってるだけだろクズども

545:デフォルトの名無しさん
20/07/02 20:46:21.86 Vurtjy2V.net
関数どころか変数に至るまで一つ一つ丁寧に検査してましたわ。

546:デフォルトの名無しさん
20/07/02 21:29:57 lIo9GiA1.net
>>525
どんだけ巨大なクラスでも全部privateだと外から一切呼び出せないデッドコードになるのでテストする意味さえないだろ。

547:デフォルトの名無しさん
20/07/02 21:35:43 UKbwg08G.net
>>528
せやかてpublic通してたら結合テストじゃんw

548:デフォルトの名無しさん
20/07/02 21:36:02 UKbwg08G.net
unit testの意味わかっとんのけ?

549:デフォルトの名無しさん
20/07/02 21:37:29 7zBU/W9S.net
プロジェクトによって違ってたなあ

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%以下だとデプロイできなくなってる
大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない


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

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