X



カプセル化の有害性、オブジェクト指向は愚かな考え
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:47:36.69ID:l/2SQUll
カプセル化(英語: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)
0002デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:48:12.14ID:l/2SQUll
大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。
0003デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:48:21.02ID:l/2SQUll
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
0004デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:49:03.96ID:l/2SQUll
実例

XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。

ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。

世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信した直後にGetData関数でそのまま返してもらうトリッキーなコードでめでたく回避できた。

しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。

さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。

カプセル化は恐ろしいね!!
0005デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:50:00.80ID:RTNtaITn
仕様変更
それは雲の上で決まったことなので底辺社畜のITドカタにはどうすることもできない。
意見を言おうにも雲の上にいる奴らの顔すら知らない。
それこそが階層化で起きることだ。

オブジェクト指向云々ではない。
0006デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:50:50.45ID:vbQxaIet
シンプルなほうが解読しやすいよね
散逸して現物しか残ってない場合とか特に
0007デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:51:52.81ID:aKnQJHa5
副作用の起きない処理はpublicでも問題ないだろうな
問題が起きるとすれば運用側の問題
0008デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:53:22.90ID:evvN6o0n
データベースに出し入れするだけの業務システムなんかは問題ない。
データベース上のデータなんてグローバル変数となんら変わらない。
クラスは構造体としてしか使わないから深い階層化も起きないし。
0009デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:54:18.03ID:evvN6o0n
>>2
C++が流行りだしたころに、これ言ったら変な目で見られたわ。
設計能力と未来を見通す能力がある人限定なんだよ。
大人数だと低い方に合わされるから、大人数プロジェクトには不向き。優秀な少数精鋭プロジェクトなら良いんだけどね。
0010デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:54:53.81ID:evvN6o0n
日本の場合はカプセル化されてようがいまいが基底クラスなんて弄ったら再テストしなきゃいけないから
同じ機能を持ったクラスを作るので意味が無い
0011デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:55:28.61ID:/lqvqqb1
そもそもアランケイの考えたものと今のオブジェクト指向が違うっていうね
オブジェクトなんて名前を使ったせいでオブジェクトが重要だと勘違いしてるし全員
よって失敗
ただ発展には貢献したそれだけ
0012デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:56:10.69ID:TSP7N+np
昔作ったクラスを継承したり再利用したりなんて殆どない

データと関数数個だけで済むものを
無駄にクラス化して
ヘッダと実装にわけて無駄にコード追いにくくするのはあかん
0013デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:57:06.18ID:MtNDH7Ee
>>4
この実例は良くないよね
Modelクラスが何かにラップされてるならその元を探して改良すべきなのに
それやらないでトリッキーな方法で回避するから余計面倒になってる
0014デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:58:55.32ID:YGaYv0dq
>>13
その相手が壮大なオープンソースのフレームワークで
改変した修正パッチが開発チームから拒絶されたら死ぬ。

フォークしても誰がメンテナンスするんだよ
0016デフォルトの名無しさん
垢版 |
2020/06/18(木) 23:59:49.19ID:q6R3f09j
オブジェクト指向で設計やるとしばしば手段が目的化してしまって不必要に複雑化する
0017デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:00:25.84ID:/31ICsy6
privateの考え方自体は悪くないんだが、
privateの必要性を理解できる人間はそもそもprivateを必要としないんだよ
そしてprivateが必要な人間はprivateの本質を理解せずにおかしな使い方をしてしまう
こういうジレンマは何にでもある
0018デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:01:18.25ID:+IhkHRGD
カプセル化は机上の空論ってのは頭いい人しかいないチームでしか通用しない
日本のIT土方みたいに想像を絶する馬鹿が無限に湧いてくる現場ではコードを守るために不可欠
0020デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:02:19.49ID:wxIbXk9M
あとになって公開できないなら隠蔽するなってことだろ
ずっと保守し続けて、公開してくれって言われたらすぐ設計変更して公開できるなら別にかまわん
でもずっと保守し続けるかどうかは予算や人事で決まるんだから、それらに関われないと責任持てんわな
0022デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:04:23.05ID:mHF7j7mX
特定の事例はオブジェクト指向とかクラスが悪いわけじゃなくて
その設計が失敗してるだけですね
0023デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:05:13.42ID:bOeh/ohg
>>4
OpenGL ESはファイルからテクスチャ1枚読み込むのにもアホみたいに面倒臭いからなw
OpenGLの手法すら使えないとか何故そこまで削った…って感じだし
0024デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:06:06.77ID:wn9UnRAm
OOPにすらついていけない本物のバカには無理ってだけ
まあOOPが無理ならどんなプログラミングも無理だけど
0025デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:06:46.04ID:OaIc6ajp
路線バス、タクシー、レンタカー、自家用車の4つを使ってオブジェクト指向を説明して欲しい。

難しすぎて全然頭に入らない。
0029デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:08:50.90ID:ih59xFoN
オブジェクト思考は糞
関数の引数と戻り値だけ信用すれば良い
オブジェクトに状態持たせるフィールドなんて可読性落ちるだけなのに理解できない一周も二週も遅れてるやつが声高に叫んでるのは笑えるw
0030デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:09:59.54ID:DxHcuyZI
>>4
頂点データは常に見られるようじゃないとダメだろ…
レンダリングエンジンとの結びつきどうなってるんだ?
0031デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:11:36.72ID:A+kahko2
>>30

>>252
ざっくり見た感じVRAMに送り込んでオリジナルは破棄だな。
もともとXBOX360のフレームワークだからリソースがいまほど潤沢じゃない前提の設計だな。

それがOpenGL ESの「VRAMが書込専用」という追加仕様の襲来で火を吹いた感じだな
https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Platform/Graphics/Vertices/VertexBuffer.DirectX.cs
https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Platform/Graphics/Vertices/VertexBuffer.OpenGL.cs
0035デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:13:25.36ID:+NZQ8ymG
オブジェクト思考って何?
誰か説明して
0036デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:13:53.03ID:0YXkLCwz
カプセル化は新人や増援部隊に変な事させない為の仕組み
開発者全員が高度なプロフェッショナルならただの足枷でしかない
0037デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:14:23.01ID:sx6tbUfu
オブジェクト原理主義者のコードを引き継ぐ事になった時の絶望感は異常
0038デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:15:15.75ID:yjfNCK7+
iPhoneアプリ開発に必須のobjective-cやswiftもカプセル化はできない。
人工知能で大流行のpythonもカプセル化はできないようになってる。

これらはアクセス非推奨だがアクセス自体はできる
0039デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:15:51.85ID:a/1dBbgF
「カプセル化は悪」「カプセル化はオブジェクト指向ではない」というのがやっと広まりだした。
0046デフォルトの名無しさん
垢版 |
2020/06/19(金) 00:49:19.41ID:8/oqYbS2
>>45
XNA作ったマイクロソフトの超エリートたちですら設計ミスをするくらいオブジェクト指向は難しい。
0048デフォルトの名無しさん
垢版 |
2020/06/19(金) 01:27:35.28ID:gQU/M+Sr
> オブジェクト指向の発案者であるアラン・ケイもコーディング規約
> (頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、
> アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

つまり
1. privateという概念(アンダースコアという概念)自体はOK
2. ただしprivateでも外部からアクセスできるようにすること
という話
0049デフォルトの名無しさん
垢版 |
2020/06/19(金) 03:21:23.63ID:sPM5NjRd
経験的に言えば、ライブラリや部品的なクラスでは、カプセル化はかなり有効で、
安全になる。
ところがアプリ自体の中にクラスの場合、隠蔽しても余り意味が無い事が
分かって来た。
ファイルツリービューの中のデータを隠して、メインウィンドウのクラスからいじれないように
しても、アプリの場合にははっきり言って意味が無い。
0050デフォルトの名無しさん
垢版 |
2020/06/19(金) 04:46:03.37ID:8+I0eawj
>>49
そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?

カプセル化の是非は、グローバル変数の弊害の話と本質は同じだよね
影響範囲を狭くした方がミスは防げるが、柔軟性は失われる
0051デフォルトの名無しさん
垢版 |
2020/06/19(金) 06:36:33.75ID:wpvtDg0l
>>48
ちょっと違うな
ST80でもOWでもVWでも共通だが
privateはあくまでもプロトコルの一つという設計だから外部からアクセスできるように・・という考え方ではないよ
具体的な扱われ方としてはインスタンス専用のローカルメソッドのような使われ方をする

なおprivateプロトコルは全てではないが
他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする
(外部からは使わせないよってこと)
0052デフォルトの名無しさん
垢版 |
2020/06/19(金) 07:02:17.44ID:wpvtDg0l
>>49
データを誰が保持するのかって問題はMVCの当初から大問題にはなってたからね
単純にModelが必ず持つという形にすると指摘した問題が必ず発生するから

経緯的にPluggableMVCへと変遷しどこからでもupdateプロトコルを受け付けることができるようになった
データはMVCのどれも保持しなくなり、ひとまずの決着がついたが
この形式であっても誰がどのようにupdateをかけているのか逐一コーディングしなければならない問題が残ってた

そこで現在ではデータを保持するAspectAdaptor系は
いわゆるアクセサを書く必要もなくなり通知を受け取るだけで動作するようになっている
(updateのためにアクセサを呼ぶなどということはしない)
0053デフォルトの名無しさん
垢版 |
2020/06/19(金) 07:18:54.82ID:gQU/M+Sr
>>51
> 他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする

殆どの言語はprivateにアクセスできる
0055デフォルトの名無しさん
垢版 |
2020/06/19(金) 09:36:31.93ID:wpvtDg0l
>>53
目的が違うので
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
のとbehaviorにさえアクセスを許さなかったりする

ただこれは言語仕様としてコントロールしているわけではないので
あくまでも慣例として扱われてる
適当なクラスを作ってprivateプロトコルに適当なメソッドを組めば好きに外部から呼び出すことは出来る

そうは言っても慣例破ってるコードはすぐ見つかってしまうのでまあよろしくないことになる
0057デフォルトの名無しさん
垢版 |
2020/06/19(金) 11:46:38.71ID:gQU/M+Sr
>>55
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている)
頭文字にアンダースコアを付けるなどの命名規則で縛る程度のも、外部から呼ばれることを意図しない(ことになっている)
0058デフォルトの名無しさん
垢版 |
2020/06/19(金) 11:54:17.24ID:I4TvFtlH
>>54
業務システムだとDBいじくるだけだから深い階層構造に関わることはまずないだろ。
DBというグローバル変数をクラスという名の構造体にコピーして、編集して、書き戻すという単純作業の繰り返し。
0059デフォルトの名無しさん
垢版 |
2020/06/19(金) 12:44:14.84ID:dtaC8DdL
隠蔽って言うからおかしくなる
privateは一貫性を守るために変更可能性のスコープをオブジェクト内部に限定するためのものであって、内部状態の秘匿が目的じゃない
というかオブジェクトの内部状態が外から分からないようなものはテスト出来ないでしょ
ダメだろそんなクラス
0060デフォルトの名無しさん
垢版 |
2020/06/19(金) 16:09:36.39ID:sPM5NjRd
>>50
>そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね?
個々のクラスをじっくり丁寧に作って、データを変更する専用のメソッドをきっちり
作り上げれば安全性は確かに高まる。
これは、人数の多いプロジェクトなら可能だと思われる。
ただ、個人製作のアプリだと、そこまでクラスを作りこむのは時間が掛かりすぎてとても
効率が悪くなる。
結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて
データはpublicにしておいて、それに気をつけながら、アプリの他のクラスからでも普通に書き込みアクセスするように
した方が開発時間は少なくて済むようだ。
0061デフォルトの名無しさん
垢版 |
2020/06/19(金) 16:12:27.76ID:sPM5NjRd
>>59
その気持ちも分かる。
しかし、その一方で、例えば fopen()のようなライブラリ関数を使う際、
FILE構造体の中身までしっかり公開されてなくても、fopenの使い方が
しっかり説明されいればそれで十分であり、逆にFILE構造体の中を勝手に見て、
それを前提にプログラムしすぎることは、FILE構造体の中身が変更になった
場合に問題となる。
0062デフォルトの名無しさん
垢版 |
2020/06/19(金) 17:22:18.89ID:gQU/M+Sr
>>60
> 結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて

それをソースコードの中に書くんでしょ? privateって
0064デフォルトの名無しさん
垢版 |
2020/06/19(金) 17:34:28.47ID:sPM5NjRd
>>62
昔から言われていることなんだけど、ソースコード以外の場所にちゃんと
フローチャートなり、データの構造や関数の関係図、何らかの図など
プログラム中に書きにくい注意事項をどこかに予め書いておくと、
プログラムにとても役立つんだ。
0065デフォルトの名無しさん
垢版 |
2020/06/19(金) 22:59:31.97ID:wpvtDg0l
>>60
そこは考え方次第だからねー
asyncでいいならファイルツリーはすべてNodeクラス配下で汎用的に扱う方が楽なので
俺ならそうする
コードも少なくて済むし扱いやすい
常にsyncって話になるとfsevent見て反映させる

カプセル化のメリットは全体像を知らなくても扱えるように理解して努力していれば
結果的にコストが下がることにあるけれど
オブジェクト扱ってるのに中身は関数で組んでいる人が混じると割と悲惨なことに(なった)
0066デフォルトの名無しさん
垢版 |
2020/06/19(金) 23:03:14.16ID:wpvtDg0l
>>64
それよりもテストコードが含まれてないソースは信用できないね個人的に
コードが更新される時ドキュメントも更新されるとは限らないし
ドキュメントには本当に必要な情報がなかったりもする・・
0067デフォルトの名無しさん
垢版 |
2020/06/20(土) 18:55:53.44ID:EGdSCTAj
こっちでも始まったのか
0068デフォルトの名無しさん
垢版 |
2020/06/20(土) 19:10:33.56ID:Zs4RBEp5
>>66
でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ
テストコードなんて動くの?
0069デフォルトの名無しさん
垢版 |
2020/06/20(土) 19:23:07.65ID:H+D2eLk6
>>68
デバイスを使う「ソフトウェアコード」のテストをするんだから、
デバイスのテストをしても意味がないぞ

「デバイス」のテストなのか、デバイスを使う「ソフトウェア」のテストなのか
どちらを対象としたテストなのかをはっきりさせよう

デバイスのテストはデバイスのテストで別にやる
両方を同時にテストしようとするな
0070デフォルトの名無しさん
垢版 |
2020/06/20(土) 19:47:22.29ID:Zs4RBEp5
>>69
でも全部ひっくるめて正常に動いて欲しいんだろ?
どう組んだら正しいのか誰もわからないものでプログラマをぶん殴る口実がほしいと
0071デフォルトの名無しさん
垢版 |
2020/06/21(日) 21:47:24.01ID:yZ1Fm+rk
>>64
> プログラム中に書きにくい注意事項をどこかに予め書いておく
これが必要になる場面って大抵は設計が歪んでいる
0072デフォルトの名無しさん
垢版 |
2020/06/21(日) 22:27:56.93ID:TM3DTGpo
>>68
>でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ
そういうところを切り出してモックなら動くことを示してソフト側は悪くないって
言い張るための技術だぞ。
0074デフォルトの名無しさん
垢版 |
2020/06/23(火) 14:03:05.97ID:Amhn2FuL
頭が悪いやつが多い業界だし、カプセル化は有用だと思うがな
勝手に変更させない、有用に変更しても理解できないので変更しないほうがいいって
2重の意味で
0075デフォルトの名無しさん
垢版 |
2020/06/23(火) 15:11:05.61ID:o6bKn79R
>>1
そのカリフォルニア大学ソースどこ?
むしろ、彼らの作成するソース(github)を見るとオブジェクト指向で、@private(JSDoc)を律儀に記述しているけど。
ん?JavaScript以外?C#やJava?
privateをサポートする言語でカプセル化しない馬鹿なんてこの世に存在するの?
0076デフォルトの名無しさん
垢版 |
2020/06/23(火) 23:33:42.34ID:JaUjApVc
>>74
そういうクラスを作る側が頭が良くて
利用する側がどうせ頭が悪いという傲慢さが
オブジェクト指向が批判される原因だと思うわ。

大体 既に書かれたコードの記述で
新規プログラマーのコーディングを制限しようと
言う考えが傲慢以外の何物でもない。


お前らの言う頭の悪い奴は元のクラスのprivateを
publicに変えるかもしれないし
Personというクラスの隣に
Person2と言うクラスを複製してそっちの方をpublicに
変えて利用するかもしれない。
でもそれって止められるわけないだろ?
それを言語仕様で止めようとしてる事がどうかしてる
元のクラスが使いにくくて変えたいから変えたいんだよ。

それに5重6重にカプセル化されたオブジェクトなんて
邪魔でしかないんだよ。デバッグしにくいし
0078デフォルトの名無しさん
垢版 |
2020/06/24(水) 00:33:12.84ID:Vx2zY5TL
むしろクラスを作る側が>>76みたいな頭の良い人から身を守るために必要
想定してない使用法でバグった時に責任とりたくないもん
Person2に不具合があっても俺には関係ないから好きにやってくれ
0081デフォルトの名無しさん
垢版 |
2020/06/24(水) 01:57:06.31ID:W7e3ICMc
>>76を見てると、オブジェクト指向を批判しているのはバカが過剰に騒いでいるだけなんだなと良く分かるw
0084デフォルトの名無しさん
垢版 |
2020/06/24(水) 04:52:29.63ID:evfa9tXu
>>76
何がいいたいのか全くわからん。

例えばお前が言ってる頭の悪いやつが、
ローカル変数をグローバル変数に変えるかもしれんよな?
そういう場合、なんだっていうんだ?
ローカル変数が悪いって話をしてるのか?
それを止められないからローカル変数は邪魔といいたいのか?
0087デフォルトの名無しさん
垢版 |
2020/06/24(水) 12:20:09.25ID:irp07WaX
>>76
というか、MFCみたいに修正が推奨されて無い場合は除いて、
自社開発のプログラムであれば、能力がある人にはあなたが修正するのを
上司が許可してくれると思うんだ。
もし、修正を許可してもらえないなら、実績が足りて無いか能力のアピールが足りてない。
0088デフォルトの名無しさん
垢版 |
2020/06/24(水) 12:31:25.83ID:bZ0w8eld
オブジェクト指向の肝は擬人化と依頼だからな
頼む相手の内部状態を勝手に変えないってのは
無茶重要でしょ 
0090デフォルトの名無しさん
垢版 |
2020/06/24(水) 13:54:42.95ID:bZ0w8eld
擬人化キャラ(クラス)の関係性で物語を生成する=オブジェクト指向
そんなかんじで習ってそのまま理解してたな ちなみに学校は恥ずかしくて
言えないような底辺学校
0092デフォルトの名無しさん
垢版 |
2020/06/24(水) 14:40:07.82ID:bZ0w8eld
>>91
頭わるくてまともな学校にいけない奴らに
教えるために先生が工夫してくれたんだろうね 依頼ってのも困ったら
依存心の高い奴らに教えるのにそういう言い回ししたんだろうね
いま思えばなかなか立派な先生だったな 口は臭かったが
0093デフォルトの名無しさん
垢版 |
2020/06/24(水) 15:16:35.37ID:W7e3ICMc
>>92
分かりやすく噛み砕いて教える方法としては良いと思うけど、>>88のように一般的に通じるつもりでいきなり独自用語を使うと話が変な方にいくから、不特定多数を相手にするときは一般的な用語を使った方がいいぞ。
0096デフォルトの名無しさん
垢版 |
2020/06/24(水) 19:00:14.27ID:z1f+Mb2g
>>76

> お前らの言う頭の悪い奴は元のクラスのprivateを
> publicに変えるかもしれないし
> Personというクラスの隣に
> Person2と言うクラスを複製してそっちの方をpublicに
> 変えて利用するかもしれない。

ねーよw
もう少し基礎知識学んでから出直してこい。
まず、ライブラリの中身を書き換えること自体、ありえない。

たぶん、見ず知らずの人達が書いたコードを共有する仕組みから知らないのだろう。
0097デフォルトの名無しさん
垢版 |
2020/06/24(水) 19:25:00.99ID:vlqGopWc
>>96
いや、そもそもできちゃうじゃん
そして別にできてもいいじゃん
それが嫌だとしたらそれをドキュメントに書いとけよ
ソースには書けないし書いても消せるからさ
0098デフォルトの名無しさん
垢版 |
2020/06/24(水) 19:30:57.72ID:6CkV8gwI
>>96
いや、周囲や協力会社(依頼元クライアント側プログラマ)
にこれやるやつゴロゴロいるんだって
ソースファイルでもテーブルでも何でも他人が書いたやつ
複製して仕様変更に対応するんだわ。
privateとかカプセル化なんて笑っちまうよマジで
でも意外と何とかなってる、複製したあとはレガシーコードは
全部捨てちまうんだわ

職場で新人研修で「抽象クラスって何のために作るんですか?」
って毎回のように訊かれるけど
「俺にも分からない。必要性を感じたことも、便利だと思った
事も無い。」って正直に答えてる。
オブジェクト指向の入門書に当然のようにabstract紹介
されてるけどそれの有用性を的確に説明している
教科書を見たことがない
interfaceのほうは重要性は分かるしちゃんと説明している
0099デフォルトの名無しさん
垢版 |
2020/06/24(水) 19:42:39.07ID:J59L1bOF
>>98
abstractは
上の方の人達が未知の設計概要として会議で使う
コーダーじゃない営業や客とのコミュニケーション用
0100デフォルトの名無しさん
垢版 |
2020/06/24(水) 19:53:36.46ID:GEcMOOIw
>>75
これだろ
https://ja.m.wikipedia.org/wiki/DARPAモデル

DARPAモデルとは、インターネットの持つべき通信機能を階層構造に分割したモデルである。

アプリケーション層、トランスポート層、インターネット層、ネットワーク層の4層で構成される。

DARPAモデルという呼称は、インターネットの研究開発を行っていたDARPAに由来する。
元々は確固たる仕様や定義はなく、IPやTCPやUDPなどの仕様中に個々に、あるいは暗黙の前提として存在していたものだが、後からRFC 1122で1つにまとめられた。


IP群はプロトコルとサービスをカプセル化する事によって抽象化する。
通常、より上位層のプロトコルはその目的の達成に役立てるために、より下位層のプロトコルを用いる。
これまでIETFはインターネット・プロトコル・スタックをRFC 1122で定義された4層から変更した事はない。
IETFは7層からなるOSI参照モデルに従うような試みはせず、また標準化過程(Standards Track)にあるプロトコル仕様やその他の構造上の文書をOSI参照モデルに対して参照する事もしない。

https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:UDP_encapsulation.svg

RFC 3439では、インターネット構造に関して第3章の序文に"Layering Considered Harmful (階層化の有害性)"と題された節が有り、
「階層化」という考え方が概念的および構造的にさまざまな利点を持っているが、
実装面では層単位で同じような最適化が繰り返し発生することによる無駄な処理により効率的な実装を阻害し、複雑化を招くことがあり、
また低層部分のみに存在するデータにアクセスできない場面が発生するなど、

インターネット・プロトコルの目指す「単純化」という原則に反することもあることが明記された。
0102デフォルトの名無しさん
垢版 |
2020/06/24(水) 21:01:40.99ID:7L466iYI
>>98
抽象クラスは単なるテンプレ
クラスを作る際の約束事を規定できる
具体的には実装忘れやメソッド名を間違えるのを防げる
自分のような忘れぽい人間には役立つ
0103デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:26:02.81ID:z1f+Mb2g
>>98
> 「俺にも分からない。必要性を感じたことも、便利だと思った事も無い。」って正直に答えてる。

正直なのはいいけど...なんで、privateの有効性がわからないのに、カプセル化を批判するのか。
無知の批判ほど、初心者が誤解を生む原因になるからやめてほしい。

例えばだよ。
何の言語をよく使うのか不明だが...標準ライブラリってあるじゃん?
その標準ライブラリのクラスに「呼び出したら破綻する(内部処理実装用の)メソッドや変数」が定義されていたら、どうする?
クラスを使う人に呼び出してほしくない機能はprivateにするべきでしょ。
実装する側の都合だけじゃなくて、クラスを使うユーザーのことも配慮して使うものだよ。

OOPアンチとOOP活用者の絶対的な違いは自作したクラスを使う人のことを深く考えているかどうか。そこだよ。
0104デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:30:44.22ID:MQA513Hf
>>103
使う側と作る側が完全に分離した環境に当たったことがない
win32apiや.netframeworkを作る人以外にそんな需要ってあるの?
0106デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:32:45.63ID:z1f+Mb2g
って、わからないのは抽象クラスかいッ!
なんか、アンカを間違えたような間違えていないような微妙な回答をしてしまった...。
まぁ、抽象クラスは>>102に書かれている通りって事で。
0107デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:34:51.23ID:MQA513Hf
>>105
俺が作るならいらん
状態をクラスのインスタンスが内部に保持してしまうのは害にしかならない
0108デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:42:26.10ID:MQA513Hf
なんか今までノリでクラスで作ってきたのを止めると物凄くスキルアップするぜ

一度はオブジェクト指向をやってみるのもいいかもなってのは思う
クラス構造で便利なものとそうでないものは当然ながらこの世にはあって
そのほとんどが実はクラスにしないほうがうまくいくものばかりだ
大半の処理は
入力→処理→出力
の繰り返しであってこれのまとまりが
機能となる
ただ極稀にクラス構造で考えた方が便利な構造のものもある
役に立つのはその時だけだ
そしてそのケースは極めて稀である
0109デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:43:14.13ID:z1f+Mb2g
>>104
.netは勿論、Android、iOSネイティブ、バックエンド node.jsやPython、mbed(組み込み)、
まぁ、一部private機能をサポートしていない環境はあるけど、作る側・使う側の意識は常に持つよ。

.netを知っているってことは、Nugetのことは知っていると思うけど...
gradleとか、npmとか、github等と連携させて他人の作ったライブラリの自動追加及びアップデートの仕組みはいくらでもある。

てか、自分で作ったコードですら、作る側・使う側は意識するよ。
過去に作った自分のソースなんて、他人が作ったソースみたいなものだし。
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
0111デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:47:38.19ID:evfa9tXu
最初からオブジェクト指向は大規模なものを
複数の人で作るためのもので
それをわかってないから、

「俺が一人で作るようなものならいらん」

なんて発言が出てしまうんだよな
0112デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:52:50.78ID:7L466iYI
>>109
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
まあこれだよね 
頭いいやつには必要ない技術かもね 凡人には必須だとおもうけどな
あと設計思想とかそんな面倒な話じゃなくてシンプルに補完ができるのが楽 
0113デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:54:20.40ID:VGKuFIs7
>>107
内部に保持するのが良いとは言わんが外部に公開すれば良いってもんでも無いでしょ
いつ何時外部から状態が変更されても破綻しないように責任持てと言われても
僕は頭が悪いから無理です
0114デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:55:53.79ID:evfa9tXu
そもそもprivateっていうのはコミュニケーションの道具で
privateって書いていなければ、好き放題アクセスしてOKという意味に
捉えられるかもしれないわけだ。

コメントの高度版なのだからコメントなくてもできるのは当たり前
だがそうすると修正が難しくなる

俺が作るなら〜っていうのはコミュニケーションが
必要ないから言える話
0115デフォルトの名無しさん
垢版 |
2020/06/24(水) 22:58:49.48ID:z1f+Mb2g
>>112
まぁ、そうだな。
ただ、面白いのが...
頭のいい人がOOPに漬かると、余裕ができた分、コンピューターの仕組みにとらわれずエンドユーザーの事を全力で配慮した品質の高い製品を作れるようになる。
0119デフォルトの名無しさん
垢版 |
2020/06/24(水) 23:27:50.80ID:MQA513Hf
>>111
逆だな
デカければでかいほどオブジェクト指向で組むのはやめた方がいい
内部の状態遷移を誰も理解できない
0120デフォルトの名無しさん
垢版 |
2020/06/24(水) 23:31:43.79ID:MQA513Hf
そもそもさ
クラスで状態を保持するソースってさ
実装全部見て
何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
これが最高にダルイ
もう年取ったしこんなの付き合ってらんない面倒臭くて
0121デフォルトの名無しさん
垢版 |
2020/06/24(水) 23:32:23.15ID:fkg3GZzF
単なるモジュール切り離しのための技術の一つだよ。
バカが騒ぎまくったせいでクソみたいなインターフェイスによる切り離しで
逆に見通しが悪くなることが多くなった。
細かい粒度で使うような技術じゃない。
0123デフォルトの名無しさん
垢版 |
2020/06/25(木) 00:13:01.48ID:JeYxH76v
内部に状態変数をもたれたらグローバル変数の比ではないほど厄介。
単体テストやデバッグが壮大なことになる。
0124デフォルトの名無しさん
垢版 |
2020/06/25(木) 00:16:04.75ID:JeYxH76v
「状態によって挙動が変わる」ものが何十個も何百個も集まったら誰も把握しきれない。誰も制御しきれない。
0125デフォルトの名無しさん
垢版 |
2020/06/25(木) 01:13:10.51ID:h5MGZkZK
>>119
>内部の状態遷移を誰も理解できない

使う側は内部の状態遷移なんて理解する必要ない
理解しないと使えないようならその設計が悪い
0126デフォルトの名無しさん
垢版 |
2020/06/25(木) 01:41:45.27ID:Q34w5rfS
内包してる初期化フラグ一つで
全く同じ入力に対して全く異なる出力が出てくるんだから
こいつは厄介だよ

勘がいいやつはこれだけでこの仕組みを使わない
0128デフォルトの名無しさん
垢版 |
2020/06/25(木) 03:13:43.10ID:AD4h9H61
>>110 君頭悪いねってよく言われない?
0131デフォルトの名無しさん
垢版 |
2020/06/25(木) 05:35:58.45ID:AD4h9H61
レス番まで指摘されても自分のおかしい発言に気づけないとはいとあはれ
0135デフォルトの名無しさん
垢版 |
2020/06/25(木) 07:30:13.69ID:p+gLKGcc
>>122
めんどくさくて新しい(もう20年以上前からメジャーではあるが...)考え方についていけません、てだけだろw

お前が懸念している内部の状態遷移が見えないというのは、見えなくていいように作り、見えなくていい部分だけを隠すんだよ。
お前の大好きな従来の手続き型だって、下手に作れば手続きを呼び出す順序や渡すべきデータの構造や内容が訳分からない複雑なものになるだろう。

単に自分の知ってる手法では良い設計を知っていて問題点を避けられる、よく知らない手法は問題を回避する方法がわからなくて問題のある手法と思えてしまう、ただそれだけのこと。
0136デフォルトの名無しさん
垢版 |
2020/06/25(木) 07:32:40.30ID:U43KJZDw
クラスの状態はクラスが知ってれば良い
という思想なんじゃねえの?
オブジェクト指向は?
0138デフォルトの名無しさん
垢版 |
2020/06/25(木) 07:53:57.86ID:Q34w5rfS
>>135
違うだろ
内部の状態が見えないのにテストなんかできないだろ
そのクラス使ってある限りそいつの状態次第で色んな動作しちまうんだから
はっきり言ってクラスは欠陥製品
特に内部に状態を保持するような使い方は害悪
0139デフォルトの名無しさん
垢版 |
2020/06/25(木) 08:19:04.16ID:p+gLKGcc
>>138
お前はオブジェクトの状態として、外部に影響を与える外部仕様の状態と、外部に影響を与えない内部仕様としての状態を混同してないか?
文字列のオブジェクトが文字列"abcd"を持つとして、それは外部に影響を与えるものだから、privateのメンバとして保持されていようがテストケースとしてそれを与えて状態を設定してテストすればいい。
一方、その文字列がどういう実装で保持されているか、ヒープなのか固定配列なのか、参照カウンタやさらに複雑な仕組みを使っているのかといった内部仕様的な状態は、このクラスを他と組み合わせてテストする段階ではテストする必要がない。こういう部分は、先にクラス単体のテストで保証しておけば良い。
そういう切り分けができない作りになっているなら、それは設計が悪い。
0140デフォルトの名無しさん
垢版 |
2020/06/25(木) 08:42:04.56ID:Q34w5rfS
>>139
いや、MSのクラスだってなんかよくわからん動作するのあるし
いいとか悪いとかじゃなくて状態を保持したら地獄行き

覚えといてね
0141デフォルトの名無しさん
垢版 |
2020/06/25(木) 08:57:56.71ID:rghIsJSV
>>122
めんどくさいのはその通り。
テスト駆動開発の本とか読んでどういうオブジェクトを引数にすると
テストしやすいかが理解できてくるとありがたさがわかってくる。
オブジェクト設計とか言い出す馬鹿は無視しろ。
0142デフォルトの名無しさん
垢版 |
2020/06/25(木) 08:58:07.22ID:XTsRyKlX
>>120

> そもそもさ
> クラスで状態を保持するソースってさ
> 実装全部見て
> 何やるとどう状態遷移が起こるのか把握しないと使えないじゃん
> これが最高にダルイ
> もう年取ったしこんなの付き合ってらんない面倒臭くて

だ、か、ら、
それを解決するためのオブジェクト指向だ つってんだろ!
クラスをオブジェクト指向も意識せずに、ただただ構造体みたいに実装して使うから、そうなるんだよ。
0143デフォルトの名無しさん
垢版 |
2020/06/25(木) 09:10:36.57ID:p+gLKGcc
>>140
どのクラスを指して言ってるのか知らないが、それはそのクラスの仕様自体の複雑さかお前の理解不足が原因で正しい挙動が分かってないとか未定義動作をさせているとかでないの?
状態を保持するのが問題なのではなく、知っておくべき状態、情報を知らずに上手くいかないのをオブジェクト指向のせいにしているだけのように見えるぞ。
0144デフォルトの名無しさん
垢版 |
2020/06/25(木) 09:17:11.38ID:rghIsJSV
状態をできるかぎり持たない方がいいってのはその通り。
ただ通信ソケットみたいなもの実装しようとすればどうしても状態を持つわな。
コネクション張るオーバーヘッドが小さくない時点で、性能出そうと思えば状態をもつしかないので。
0145デフォルトの名無しさん
垢版 |
2020/06/25(木) 09:21:43.95ID:H2Spozu7
オブジェクト指向って設計手法であると同時に
責任の切り分け手法でもあるんだよね 別の共同体(無償で手伝う気なしって意味で)
と作業する場合は必須でしょ
0148デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:09:53.75ID:Q34w5rfS
>>145
いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?
切り分けじゃないッスよね?
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる可能性もあるンスから
テストはちゃんとやるのであれば状態全網羅でしょう

ぶっちゃけ無理っすわ
状態を保持をやった時点で地獄行き

覚えた?確定事項よ
0149デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:11:45.88ID:Q34w5rfS
>>147
グローバル変数さえなければ入力に対してぜってー決まった出力しか出ないのに何が問題出るの?
頭おかしいんじゃない?
○○構造のとき作りにくいってのはあると思うけど
わかりやすさでこれ以上はないよ
0150デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:18:17.66ID:H2Spozu7
>>148
クラスAとクラスBがそれぞれチェックされててもそれらが合わさったことでバグが発生してる
可能性もあるンスから

こうなったときにAもBも直す必要がないでしょってこと どちらかを直すかは共同体
同士のパワーバランスで決まるんだけどねw そこはまあ大人になるしかない
0151デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:20:16.04ID:XTsRyKlX
>>148

> >>145
> いやー、クラス内で状態を保持するクラスが大量に呼ばれてて
> 本来はそれらの全ケースを網羅する必要があるが作業者の裁量で省略されてる状態じゃないっすか?

何いってるんだ、こいつ。
クラスの基本的な仕組みから理解していないのか。
状態はインスタンスの数だけ持つことになるけど、呼ばれるロジックは一つだよ?
一つのロジックだけをテストすればいいのに、君はstatic化することで、わざわざ一つの状態につき一つのロジックを用意しようとしている。
つまり、君は一つのインスタンスにつき、一つのロジックを記述することで膨大な数のテストをしなければいけない状況を自分で作っている訳だ。

お前のやり方の方が無理ですわ。
0152デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:27:24.45ID:Q34w5rfS
>>150
いや、わからないよね?
クラスCで使うためのクラスAとクラスBであるなら使えなきゃしょうがないじゃん
まあ、他でも使ってるなら安全牌はクラスC用のクラスAクラスBの複製だけどw
0154デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:29:59.55ID:XTsRyKlX
しかも、1つの状態につき、一つのロジックを書くってことは...似たようなクラスが10個必要になったら、そのクラスのロジックを10回、コピペするわけだ。

で、その後、ロジックを修正することになった場合...10回、コードを書き直すの?
そっちの方が無理ですわ。

いっそのこと、staticにしないで、10個の状態が1個のロジックを参照するようにしておけば、ロジックの修正は一回で済む。
そっちの方が断然、楽だね。
0155デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:31:50.71ID:XTsRyKlX
>>153

ブーメラン刺さってますよ。
私は仕事するので、その間に頑張って言い訳でも考えていてね!
0156デフォルトの名無しさん
垢版 |
2020/06/25(木) 10:38:02.77ID:H2Spozu7
>>152
もしかしてインスタンスの意義がわかってないのか?

他でも使ってるなら安全牌はクラスC用のクラスAクラスBの複製だけどw

まさしくこの状態を作りたいからクラスAクラスBのインスタンスをつかうんだけどな
0158デフォルトの名無しさん
垢版 |
2020/06/25(木) 11:34:09.20ID:emOdy//g
クラス使わない人ってどうするんだろ
構造体?
全部インタプリタみたいな感じ?
0159デフォルトの名無しさん
垢版 |
2020/06/25(木) 11:40:28.84ID:h5MGZkZK
スレ主の愚痴はオブジェクト指向かどうかと関係ない
単に設計やテストのやり方を知らないだけ
0160デフォルトの名無しさん
垢版 |
2020/06/25(木) 12:22:45.24ID:9YSX2wtH
>>138
> 内部の状態が見えないのにテストなんかできないだろ

ん?全部publicにしておけばテストできるって話じゃないの?
もしくはprivateであっても、privateを読み書きできる機能があればテストできるでしょ?
0161デフォルトの名無しさん
垢版 |
2020/06/25(木) 12:25:19.77ID:XTsRyKlX
クラス使っても、staticにするとか訳のわからない事を言い出すし、根本的にオブジェクト指向を理解していない人達が愚痴っているだけだよな。

むしろ、何でもstaticにするのはC言語やC++言語から入った初心者なら誰もがやる失敗。
そんな初心者の失敗をいい歳したおっさんが、オブジェクト指向を批判しながらstaticを勧めるから駄目なんだよ。
我々からすれば、俺らの黒歴史時代の経験を何で上から目線で偉そうに語っているんだ?って感じだね。
流石に、上から目線で語る程、俺の黒歴史は酷くなかったぞ。
0162デフォルトの名無しさん
垢版 |
2020/06/25(木) 12:43:43.74ID:KZb+gCmD
カプセル化が要らない、と言うのなら、

誰もがデータを読み書きできる状態でどうやってアトミック処理を保証するのか

を教えて欲しいな。
もしかしたら大発明かも。
0163デフォルトの名無しさん
垢版 |
2020/06/25(木) 12:49:36.79ID:Q34w5rfS
>>160
内包されるよりいくらかCool
ただ、そこまでpublicにできるならstaticにしてほしい
実行時にstatesがnoneでないと正しく動かないんですよこのメソッドって
言われても知らねーよそんなのって感じ
じゃあstatesはどうやってnoneにするんだべって
俺に調べさせるのやめてもらっていい?

もっと言えばstaticにすればそんなことないじゃん?
0165デフォルトの名無しさん
垢版 |
2020/06/25(木) 13:06:39.24ID:XTsRyKlX
そもそも、クラスって正常に動く前提で使うものであって、なんで、クラスを使う側がクラス内部動作をテストしないといけないのかわからん。
クラスのテストは、クラスを実装する側の責任だろうに。

...というツッコミをそろそろしてもいいかな?
0166デフォルトの名無しさん
垢版 |
2020/06/25(木) 13:17:56.03ID:p+gLKGcc
>>165
それに類することをすでに>>139で指摘したんだが、自分考えに凝り固まった意固地なおじさんには通じなかったようだ。
0167デフォルトの名無しさん
垢版 |
2020/06/25(木) 13:23:03.90ID:p+gLKGcc
>>163
そのstatesがnoneでなければならないという仕様は、そのクラスの使い方として外部に明示すべき仕様だろう。そそういう情報が示されていないならドキュメントの不備だし、そういう仕様が公開されていても外部からstatesの値を参照または設定できないのなら設計の不備だろう。
延々と繰り返し指摘しているように、それはオブジェクト指向そのものの問題でなく正しく設計、運用がされていない問題だろう。
0169デフォルトの名無しさん
垢版 |
2020/06/25(木) 15:28:55.17ID:xmAi/11M
カプセル化の最大のメリットは中で何をしているかどうなっているかは気にせずに
外からは引数を与えると仕様通りの値が戻ってくるというところだよね?
0170デフォルトの名無しさん
垢版 |
2020/06/25(木) 16:47:53.33ID:CiEXbKUP
グローバル変数に格納されている値で関数の挙動が変わるより悲惨だぞ。
グローバル変数が見えないんだから。
0173デフォルトの名無しさん
垢版 |
2020/06/25(木) 17:03:53.35ID:p+gLKGcc
ここまで話の通じない奴だと思うと相手するのがバカらしくなってくるね。まさに徒労という言葉がふさわしい。
0176デフォルトの名無しさん
垢版 |
2020/06/25(木) 20:15:30.81ID:LQ8CyLE7
オブジェクト指向のあらゆる用語が
ノムリッシュみたいになってると思う

JavaScriptが発展して、クラス名と同じ名前の
ファイル名にしなくていい事が分かったわけじゃん
それどころかクラスすら必要なしでオブジェクトが作れる事が
分かったわけじゃん
クラス名と同じ名前のコンストラクタなん定義しなくても
オブジェクトが作れる事が分かったじゃん

オブジェクトとは詰まるところ連想配列と大して違いが
ないキーと値で構成された入れ物でしかない事がわかった。
この「連想配列と違いがない」というシンプルな真実が
どれだけありがたいことか

クラスを始めとする様々なルールは
ソフトウェア設計上の重要な概念かと思ってたら
単なるJavaの変な言語仕様でしかなかったわけだ。
変数を「フィールド」
関数を「メソッド」
関数を「コンストラクタ」
こう言い換える必要がどこにある?

こんなノムリッシュなバズワードに
今までどれだけ煙にまかれて
シンプルな真実が見えなくなってたことか
0178デフォルトの名無しさん
垢版 |
2020/06/25(木) 20:24:37.53ID:LQ8CyLE7
それに加えて
「継承」「抽象クラス」「オーバーライド」
「カプセル化」「ポリモーフィズム」
こんな用語は必ずしもやるのが正しいものではないし
やればやるほどシステムを必要以上に複雑にして
邪魔にしかならないものばかり

それなのに
「オブジェクト指向の本質は継承とカプセル化とポリモーフィズムだ。」
なんて馬鹿げた事を言い始めるノムリッシュな奴が出始めて

JavaScriptならオブジェクトの内部に
別のオブジェクトを入れるという一瞬の操作で
終わるものを「委譲」など余計な用語を定義して

わざわざ定義しなくてもいいようなくだらない
小難しそうな用語だらけになって
「お前はooの概念を正しく理解してない」
という偉そうな批判がどれだけ飛び交うことか
0179デフォルトの名無しさん
垢版 |
2020/06/25(木) 20:31:34.09ID:LQ8CyLE7
webフレームワークの
MVCの「モデル」ってそんなに重要ものなのか?
「モデル」なんてものがSQLやDBMSを隠蔽して
何がありがたいと言うのか
むしろ隠蔽されて困ることの方が多いんじゃないか?
何故一度テーブル作成時にて定義した
大量の列定義を
またモデル層のフィールド定義で2度もやり直さないといけないのか
要らないだろ。「モデル」なんて

最近は従来軽視されてきたクライアントサイドJavaScriptの
方がよっぽど重要なことが分かってきて
ReactやVueのようなクライアントサイドフレームワークが
重要視されてるわけじゃん

「オブジェクト指向」って結局何がありがたいのよ?
0181デフォルトの名無しさん
垢版 |
2020/06/25(木) 21:03:32.44ID:9YSX2wtH
> 「オブジェクト指向」って結局何がありがたいのよ?

多くの人で作業分担し、協力してプログラムを作れる所
0184デフォルトの名無しさん
垢版 |
2020/06/25(木) 21:04:45.08ID:9YSX2wtH
>>183
Javaはオブジェクト指向を採用した言語の一つだよ
いつから代表になったのさ
お前が代表だと思っていて、代表だと思ってる自分自身を批判してるだけじゃんw
0186デフォルトの名無しさん
垢版 |
2020/06/25(木) 21:09:21.00ID:9YSX2wtH
>>185
お前の文章の話をしてるんだが。
そもそも読んでないのに、抽象化が何の関係があるんだ?
0187デフォルトの名無しさん
垢版 |
2020/06/25(木) 21:17:15.89ID:lu0UaGfG
>>184
>>177
>クラスを始めとする様々なルールは
>……
>単なるJavaの変な言語仕様でしかなかったわけだ。

で、「いつから代表になったのさ」がなんだって?
数スレも遡れないようじゃ生きていくの大変だろうに……
0189デフォルトの名無しさん
垢版 |
2020/06/26(金) 02:54:16.76ID:uM2i3sYA
関数化したりクラス化したらプログラムが高速化したんだけどGCが発生するタイミングが細かくなったってことでええんか?
0190デフォルトの名無しさん
垢版 |
2020/06/26(金) 07:35:03.68ID:eLfJJdHb
オブジェクト指向は整理術
棚なんて要らん棚があるから余計な物も管理する羽目になると床置する人が現実に居るのと同じ
0191デフォルトの名無しさん
垢版 |
2020/06/26(金) 08:53:43.63ID:crXMwmqp
まああまりに糞な抽象化だともう全部publicでレコードとして扱えやとは思うな。
抽象化を万能なものと思い込みすぎな馬鹿が多すぎるからオブジェクト指向に対する誤解が生まれる。
0192デフォルトの名無しさん
垢版 |
2020/06/26(金) 09:44:19.22ID:8zz5Zpvs
っていうか抽象化ってどんな仕様のどの部分を一括に扱ってるのか?
ドキュメントがないと最悪
ここの仕様は特殊だからこれとは別にしないとなって話ができない
ドキュメント書かないなら抽象化するな
害悪でしかない
0193デフォルトの名無しさん
垢版 |
2020/06/26(金) 09:50:43.03ID:Op8/e6Io
>>190
直置きはダメだが
ほとんどの場合「棚をしまう為の棚」
「それをしまう為の棚、それをしまうための棚…」
ってなってる

で、「ハサミ使いたいんだけどどこにあったっけ?」
って探すのに非常に苦労する。
見つけやすくするための棚だったはずなのに。

それどころか
棚「ハサミは内部で使うから自分で使わなくていいです。
『切る 』という目的だけに集中して、そう命令してください」
と、棚に言われる。
しかし切られた結果を見ると自分が欲しかった結果と微妙に
違うことがよくある。
だから「もう俺が直接切るから、いいからハサミをよこせ」
っていう話になる。


あと抽象化については
「これは抽象的な棚なので中には何も入っていません。
私を参考にした具体的な棚が何処かにあると思うのでそれを
探してください。」となる。

じゃあ「具体的な棚って一体どれだ?なんか長い名前の棚が
やたら沢山あるけどどの棚から探せばいいんだ??」
となる
0195デフォルトの名無しさん
垢版 |
2020/06/26(金) 09:55:48.09ID:50iMo9Ym
具体的に何のことを言ってるのか
考えなきゃならんようなたとえ話に価値はねーからな
説明が下手すぎる
0196デフォルトの名無しさん
垢版 |
2020/06/26(金) 10:13:27.50ID:wYfFflLL
>>193
整理が下手なやつの例をあげて、だから整理はすべきでないと言ったって意味がないだろう。
0198デフォルトの名無しさん
垢版 |
2020/06/26(金) 10:41:42.69ID:s43csjES
>>193
だから具体的な問題>>162に答えてくれよ。
複数のプロセス・スレッドが勝手気ままにデータを処理しても問題ない、というならおめでたいわ。
0200デフォルトの名無しさん
垢版 |
2020/06/26(金) 10:54:38.35ID:crXMwmqp
>>198
アルゴリズムレイヤーでアクセスを無駄に禁止するようなクラスは有害でしかない。
適切なpublic具合というものがある。
例えばc++のstd::vectorなんかはかなりオープンアクセスなクラスだがあれが適切なんだよ。
でもって馬鹿に適切なアクセス制御なんて無理ってこと。
変に細かくするな。
馬鹿はクラスレベルで制御なんかしないでいいからモジュールレベルでアクセスするapiだけ公開してろってこった。
0202デフォルトの名無しさん
垢版 |
2020/06/26(金) 11:23:09.67ID:TcIyIoqu
トレードオフを理解できてないうちはどっちもどっち
物事の一面しか見れてない

>>190>>193の比喩は理解の程度が知れるという意味ではすごく有意義
0204デフォルトの名無しさん
垢版 |
2020/06/26(金) 11:48:31.80ID:klgKDCEw
>>200
たぶん、162はクラスユーザーが呼び出した処理を実行している最中に内部処理を呼び出したら破綻するけど、いいのか?って言いたいのだと思う。
適切なアクセス修飾子をつけろは同意だが、彼に言うことではないと思う。
0206デフォルトの名無しさん
垢版 |
2020/06/26(金) 12:36:59.06ID:s43csjES
>>199
好き勝手にデータに読み書きできるのに、どうやって「その時だけ」を保証するんだよ。

結局カプセル化必須じゃねぇか。
何のアイディアも無しか。アホらしい。
0207デフォルトの名無しさん
垢版 |
2020/06/26(金) 13:04:36.71ID:8zz5Zpvs
>>206
そういう場所だけそうすればいいじゃん
全部そうなら無能過ぎてプログラム組む前にもっとやることあるんじゃないかなぁ
0208デフォルトの名無しさん
垢版 |
2020/06/26(金) 13:19:36.46ID:SlEx0yXd
大昔、Javaやりだしてイキりだしたやつらが、オブジェクト指向もできない
老害とか騒いでいた歴史がある。そんな老害から見ると、gcに難しい事をまかせて、
馬鹿を吊り上げる仕組みなんだよなあ〜と皆言っていたのを思い出した。
今はPythonね。もっさ〜として、ダサすぎ。でも「俺AIの最前線だぜ」とか勘違い。
歴史は繰り返すのだ。
0209デフォルトの名無しさん
垢版 |
2020/06/26(金) 13:22:51.90ID:TcIyIoqu
atomicityを保証するのを
呼び出し側の責任とするのか呼び出された側の責任とするのかは
pros/cons考えて使い分ければいい話でカプセル化必須とかにはならないよ

使う前にopenして終わったらcloseしてください的なAPIと
open/close含めて全部やってくれるAPIの違いと同じこと
0211デフォルトの名無しさん
垢版 |
2020/06/26(金) 14:30:22.45ID:uqHA56uo
すげえ、スレタイも日本語になってなくて、さらにまともな議論にすらなってないのに盛り上がってるw
オブジェクト指向じゃないやつのオブジェクト指向型言語のコード見れると思ってきたが、カオスだなw
0212デフォルトの名無しさん
垢版 |
2020/06/26(金) 17:24:31.99ID:MKv++1da
staticおじさんの詭弁ばかりで議論にすらならないから、もう、staticおじさん隔離スレ作った方がいいかもね。

【隔離】オブジェクト指向アンチスレ
みたいな感じで。
0213デフォルトの名無しさん
垢版 |
2020/06/26(金) 17:45:37.11ID:pGd8NqU0
>>212
もういっそのこと、こんなんでどうだろうか?
【老害】staticおじさんと戯れるファンの集い【詭弁】
0214デフォルトの名無しさん
垢版 |
2020/06/26(金) 18:11:48.36ID:QQ2hFNnS
カプセル化はオブジェクト指向に限らずあるんだが
privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足
0215デフォルトの名無しさん
垢版 |
2020/06/26(金) 18:24:19.05ID:xc/k+9g/
privateとprotectedの使い分けってみんなどうしてる?
俺は昔はpublic以外はよほど理由がない限り全てprivateにしてたんだけど、最近はよほど理由がない限り全てprotectedにするようになったわ。
0216デフォルトの名無しさん
垢版 |
2020/06/26(金) 18:33:11.88ID:50iMo9Ym
protectedはよくわからんので基本private
必要になったらprotected
必要ないならprivateでいい
変更してはいけないというルールはないんだから
0217デフォルトの名無しさん
垢版 |
2020/06/26(金) 18:33:48.93ID:eLfJJdHb
オブジェクト指向は素晴らしいだろ
金正恩という概念から好きなだけ金正恩を生み出せるんだぞ
staticじゃ1匹しか生み出せない
その1匹が糖尿で死んだら北朝鮮は成り立たない
0222デフォルトの名無しさん
垢版 |
2020/06/26(金) 18:42:48.62ID:QQ2hFNnS
金正恩というデータから好きなだけ金正恩産み出すのはオブジェクト思考に限らずできるんだが
オブジェクト指向と全く関係ない
勉強不足
0223デフォルトの名無しさん
垢版 |
2020/06/26(金) 18:59:47.63ID:MKv++1da
>>214
> privateにして外からアクセス不能にすることをカプセル化だと思ってる奴は完全に勉強不足

それな。
カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。

>>215
基本的にはprivate。自分が定義したメンバ変数やメソッドを継承先がどのように使うのか想像ができないのなら、privateにした方がいいと思っている。
継承先で意図しないメソッドの呼び出しや、変数の使い方をされたら困るからね。
当然、継承先での用途を考えた上でprotectedを使う場合もあるけどね。
0224デフォルトの名無しさん
垢版 |
2020/06/26(金) 19:08:51.52ID:QQ2hFNnS
いやもうお前らprivateとかprotectedとかいう言葉を使ってカプセル化を語るのやめたほうがいいよ
privateという機能がなくてもカプセル化は実現できるから
百歩譲ってデータ隠蔽だけをカプセル化と呼ぶにしても、privateのように外からのアクセスを不能にする機能がなくてもカプセル化は実現できるし
0227デフォルトの名無しさん
垢版 |
2020/06/26(金) 19:47:03.28ID:crXMwmqp
pimpleパターンくらいは知っとけよ。。
てかカプセル化について馬鹿みたいにこだわる奴でまともなインターフェイス設計できる奴見たことねーわ。
リファクタリングもしないで一発で正解にたどり着けるとでも考えてるんだろうな。
0229デフォルトの名無しさん
垢版 |
2020/06/26(金) 20:33:23.82ID:QQ2hFNnS
オブジェクト思考言語アレルギーの老害は論外として

特定のオブジェクト指向言語を習得している人は無数にいても、
オブジェクト指向そのものを理解してる人は殆どいなそう
0230デフォルトの名無しさん
垢版 |
2020/06/26(金) 20:37:52.02ID:Op8/e6Io
>>229
それってオブジェクト指向という概念そのもの
がおかしいものだからですよね?
っていう議論をずっとしてるんですが
誰にでも理解出来て納得出来ることが正しい
ことだと思うんですが
0231デフォルトの名無しさん
垢版 |
2020/06/26(金) 20:43:25.43ID:ODDHilOW
> オブジェクト指向そのものを理解

どういうこと?
アランケイがどう考えたとか
OOPがどういう成り立ちだとかそういういこと?
0232デフォルトの名無しさん
垢版 |
2020/06/26(金) 20:54:59.05ID:0CWC8I0Q
アランケイが考えたオブジェクト指向は洗練され完成されたオブジェクト指向なのです。
初号機が最強であるのはどこの世界でも同じことです。
初期版が完成です。改良などありえません。
0233デフォルトの名無しさん
垢版 |
2020/06/26(金) 21:47:56.68ID:ks+n8Bmz
第一、privateサポートしてない言語なんて普通にあるしな。Javascriptなんてそうだし。
0234223
垢版 |
2020/06/26(金) 21:51:49.87ID:ks+n8Bmz
あ、ID変わっちゃった。223です。
0235デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:03:26.05ID:TcIyIoqu
>>223
>カプセル化はクラス使用者にとって必要な機能やデータを公開し、その他内部実装を秘匿することで標準ライブラリの如く使いやすいクラスを作りましょうという実にシンプルなものなのにね。

カプセル化といった時に一般的な定義は2種類あってそれはそのうちの1つで情報隠蔽(Infomation Hiding)とほぼ同じ意味

もう一つはデータとそれを操作する関数/メソッドを一つの単位に束ねることを言う(隠蔽されてるかどうかは気にしない)

人によっては2つを合成した定義でカプセル化という言葉と使ってるので
まともな議論をしたければどういう定義でカプセル化と言ってるのか確認する必要がある
0236223
垢版 |
2020/06/26(金) 22:20:46.34ID:ks+n8Bmz
自分が議論したいというよりは...
このスレ主と>>138みたいな謎方向の議論をする人の思うカプセル化について、そりゃ違うだろって言いたいだけ。

215への回答は聞かれたから答えただけで深い意味はない。
0237デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:21:20.66ID:0CWC8I0Q
>>235
違う違う。情報隠蔽のことをカプセル化と間違っていってる人がいるだけ

カプセル化の定義は必要なものだけをインターフェースとして提供する
必要ないものは隠蔽するってことなんだが

全部必要だから公開しているのに、カプセル化されてない!って言うやつがいるだけ
0238デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:33:13.54ID:Pmgb6tek
>>237
それが正しいという一次ソースあるん?
0239デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:33:39.59ID:Pmgb6tek
ないんだったらそれあなたの感想ですよね
0240デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:34:17.18ID:TcIyIoqu
>>237
>カプセル化の定義は必要なものだけをインターフェースとして提供する
>必要ないものは隠蔽するってことなんだが

情報隠蔽と何が違うの?
0241デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:35:17.42ID:0CWC8I0Q
>>240
情報隠蔽は、情報隠蔽しなければカプセル化じゃないって騒ぐが
必要なものだけを公開するなら、情報隠蔽しなくてもカプセル化
0242223
垢版 |
2020/06/26(金) 22:40:01.42ID:ks+n8Bmz
俺は...カプセル化の本質さえ抑えておけば、言葉としての違いは気にしないけどな。

privateにすること=カプセル化だと勘違いしていても、そいつがカプセル化の有り難みを理解できているのなら、深入りしないだけだよ。

言葉の定義にどこまで拘るかは議論の相手次第。

だが、staticおじさん、貴方は駄目だ。
俺のような細かいことを気にしないレベルの人間ですら駄目だわ。
昔からオブジェクト指向を批判し続けて初心者に誤解を与える老害だから見つけ次第、徹底的に叩く。
0243デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:42:23.17ID:Pmgb6tek
オブジェクト指向を勉強してる意識高い系のアホが
引数も戻り値も使わず、全部インスタンス変数使ってる例を見て
僕はstaticおじさんになっちゃいそう
0244デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:49:00.20ID:TcIyIoqu
>>241
必要なものだけを公開するってことは
必要じゃないものは公開しない、つまり隠蔽しているんだから同じじゃない?

“隠蔽”の捉え方が違うのかな
0245デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:50:30.87ID:Pmgb6tek
構造化プログラミングをできるようになって
データと関数をオブジェクトとしてまとめるともっと良いかもと
オブジェクト指向を身につけるならいんだけど

オブジェクト指向では名詞を抜き出すんだ
そうやってオブジェクトを分ければ良いプログラムができあがるんだと
オブジェクト指向に幻想抱いてるアホが作ったプログラムは手に負えん
0246デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:50:54.79ID:0CWC8I0Q
>>244
隠蔽を必須としてる、隠蔽のことだけをカプセル化と言ってるやつがいる
それが間違いということ
0248デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:52:06.30ID:Pmgb6tek
>>247
天才は幻想を抱かない
0249デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:52:57.33ID:Pmgb6tek
僕は天才だからわかる
僕のどこが天才なのかは説明できないけどわかって
0250デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:53:19.24ID:0CWC8I0Q
>>248
どうでもいいよw
プログラムが手に負えるかどうかは、アホかどうかが焦点だろって話
お前が長々と書いてることに意味がない
0251デフォルトの名無しさん
垢版 |
2020/06/26(金) 22:54:34.05ID:Pmgb6tek
>>250
焦点はそこじゃない、どこみてんのよ!
構造化プログラミングの実装技術の先にオブジェクト指向があることを
理解してない人間をアホと言ってるんだよ、焦点はそっち
0253デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:08:49.57ID:0CWC8I0Q
人の話と技術の話の区別ぐらいつけよう。
人をいくらアホだ馬鹿だと叩いても
技術を否定したことにはならない
0254デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:09:53.77ID:Pmgb6tek
ListやStack、HTTP Clientといったものはオブジェクト指向と見事に調和するんだけど
それは変えられることがないから、これはこういう機能のものだってのが決まっていて
システムの仕様が変わっても変更されることがない

いっぽうでビジネスドメインにオブジェクト指向を適用しようとすると
仕様がころころ変わるから最初の設計ではうまくいかなくなることが多い
仕様が変わったらオブジェクトの設計もやり直せるならいんだけど
一度システムが動き出したら数万〜数億の人が影響受けるから
なかなか変えられないのが実際のところ
カプセル化されると困るというのはそういう状況の話じゃないかと僕は思いました

ドメインの安定性によってオブジェクト指向の適否は左右されると天才の僕は提言します
0255デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:12:02.84ID:Pmgb6tek
>>252
オブジェクト指向に幻想を抱くアホを作り出すオブジェクト指向の功罪は大きい
実装と離れて語られるオブジェクト指向は宗教と言っても良い
0257デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:20:58.30ID:Pmgb6tek
>>256
何いってんだお前
0258デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:21:20.47ID:Pmgb6tek
僕が願ってるのは世界平和だけ
0259デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:35:54.37ID:n1YsnRgt
カプセル化するなら
一切ソースコードレビューしなくていいんだな
変数やメソッドの命名もインデントも全部
適当にやるからな
文句つけるならテストの結果だけで文句を言って
くれよ、ソースコードには文句言うなよな。
例外をキャッチする必要もないな。
俺が利用するクラスで発生した問題はそのクラス内部の
責任だ。内部事情は意識しなくてもいいんだからな。
おっとロギングも内部事情だからやる必要ないな。
そんな事情は利用側は知りたくもないし結果だけが
欲しいんだもんな。

逆にこれらを押し付けるなら全部publicで問題ないよな。
クラスの内部を知りたいってことだからな。

「↑こいつはカプセル化が何なのかを理解してない。」


カプセル化おじさんがどうせこう言うだろうから先に
言っておいたわ。
0260デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:45:57.60ID:0CWC8I0Q
>>259
「↑こいつはカプセル化が何なのかを理解してない。」

いや、先に言っておくと言っても、俺も同じこと言うんだが、
それで言われることを予測していたんだろ?
反論までは用意してないの?
0261デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:50:21.75ID:ks+n8Bmz
珍しくこの手のスレでは比較的、リアルな批判がでたかも。

汎用性の無いビジネスドメインをオブジェクト指向を意識しながらクラス化したところで、メリット薄いよね?って話はまぁ、理解できる。
でも、ビジネスドメインを構成するクラスを汎用性の高いクラスだけで構成させることができれば、大分スッキリする。
いや、ほんと、そこがオブジェクト指向信者の腕の見せ所なんだがな。

たぶん、ビジネスドメインの責務分割の仕方を誤って神クラスを作ってしまうパターンにはまってるのかも。
0262デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:56:26.67ID:ks+n8Bmz
でも、まぁ...開発者の立場次第にもよるのかも。
俺みたいに自社開発しているエンジニアだったら、利益を上げるレベルの品質を根拠にいくらでも納期を伸ばしてもらえるので、ド丁寧なオブジェクト指向プログラムを書く余裕があるけど、受託開発になると納期がギリギリに設定されがちだし(偏見?)、そんな最中、丁寧なコードなんて記述できるかって言われると...まぁ、どうなんだろうね。
0263デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:58:23.12ID:34AfLaws
「状態によって挙動が変わる」ものが何十個も何百個も集まったら凡人には把握しきれない。

ましてや内部の状態が読み取りすらできないとなれば絶望的なことになるのバカでもわかる。

ウェブシステムや業務システムみたいにデータベースという巨大グローバル変数群を構造体にコピーしては書き戻すというのを繰り返すだけだと深い階層化が発生しないから問題は起きないんだろうね。
0264デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:59:12.73ID:5Zl1C0wL
>>260
お前が俺の書いたことに反論してみろ
お前が言う真のカプセル化とやらを説明しろ。
0265デフォルトの名無しさん
垢版 |
2020/06/26(金) 23:59:54.02ID:TcIyIoqu
>>259
前半はコードの品質をどういう観点から担保するかという話
例外やロギングはどういう責務/役割をどこに持たせるかという話
どちらもオブジェクト指向特有のものではない
0266デフォルトの名無しさん
垢版 |
2020/06/27(土) 00:00:02.19ID:ihk0yOtr
問題が起きやすいのはハードウェアに近い低層と、ライブラリ層と、ビジネスロジック層なんかに分業している分野だろうね。
0267デフォルトの名無しさん
垢版 |
2020/06/27(土) 00:05:48.57ID:n2G2JMaM
>>261
お前の主張の最大のメリットであるスッキリがお前の主観でしかない
そもそも設計書とソースの構造を一致させるための設計技術ではないのかな?
0268デフォルトの名無しさん
垢版 |
2020/06/27(土) 00:09:26.27ID:ihk0yOtr
データベースを使っているようなシステムはまず深い階層化は起きない。
RDBと階層化は相性が悪いからね。
それなのに深い階層化を使っている気分になっている人が多い。

ハードウェア制御絡みの本当に深い階層化を経験している人とは住んでいる世界が違う。

だから話が噛み合わない。
0269デフォルトの名無しさん
垢版 |
2020/06/27(土) 00:31:59.28ID:npRplKHX
みんな難しく考えすぎw
オブジェクト指向はインテリセンスが効くんで便利
それで納得しろよ これがないとダルいだろ
0270デフォルトの名無しさん
垢版 |
2020/06/27(土) 00:33:18.96ID:0UrSdNRf
>>267

> お前の主張の最大のメリットであるスッキリがお前の主観でしかない

事実を主観でしかないと批判されましても困るね。
実際、汎用性の高いクラス...それこそ、listやstack、http cliant並みに汎用性の高いクラスだけでプログラムが書かれてたらスッキリするだろ。
代替案があるなら、どうぞ。

> そもそも設計書とソースの構造を一致させるための設計技術ではないのかな?

何の話?
0271デフォルトの名無しさん
垢版 |
2020/06/27(土) 00:47:38.59ID:eG65KKvD
スッキリって何?コードが短くなるの?
頭悪いから50行以上は読めないんだけど
0274デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:02:58.36ID:kHv6hhb8
>>261
ドメインが安定してるところはオブジェクトを作って
ゆるふわなところは骨組みメソッド作る感じ?
それなら僕と同じです
0275デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:03:48.38ID:0UrSdNRf
いや、普通にOOPのコードだけど...。
逆に、list,stack並みに...で、なぜ伝わらない。
当たり前すぎて伝わらなかったのか、初めて聞いた単語だから伝わらなかったのか。
このスレの連中だと高低差激しすぎてコミュニケーションが難しいな。
0277デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:08:16.33ID:0UrSdNRf
>>274
強いて言うのなら、ドメインが安定しているところに見える範囲がオブジェクト指向信者とオブジェクト指向使いとstaticおじさんで、どれくらい違うのかなって感じですが。
0278デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:11:06.46ID:kHv6hhb8
こうなるんだったらもっとこういうオブジェクトにすれば
良かったと思うことがザラにある
今最高にきれいでも未来の仕様変更でど汚くなることもある
いま汚くても未来の仕様変更がきれいにできることもある
その見極め方が僕には未だにわからない
0279デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:11:51.83ID:F7GoDPAy
>>269
いや動的になる分、効きづらくなるだろばか。
それでもモジュール切り離しの視点で良いこともあるってのがオブジェクト指向の旨みなわけだが。
依存逆転のモジュール構造が作りやすいってだけの話なのにバカが変な哲学持ち出すから
カスみたいな輩がお前はわかってない、俺が真の意味を理解してるとか言い出すわけだよ。
0282デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:28:03.05ID:kHv6hhb8
業務で扱うようなある程度複雑な仕様をどう設計して実装するか
みんなでプログラミングして比較してみたいねー
0283デフォルトの名無しさん
垢版 |
2020/06/27(土) 01:31:55.47ID:kHv6hhb8
>>281
内容によるんじゃないかな
みっちりコントロールフローが1万行あったら嫌だけど
御経がほとんどを占めてたらわかるだろうし徳が高まりそう
0284デフォルトの名無しさん
垢版 |
2020/06/27(土) 02:14:37.03ID:n/FbqQvh
>>282
業務というのはIBM(International Business Machines )より
パンチングカードの集計から始まっているので
主にアンケート調査結果や在庫管理プログラム
の設計ということになるだろう
0285デフォルトの名無しさん
垢版 |
2020/06/27(土) 06:21:43.43ID:pgI/H4Wp
>>282
業務に限らず、OOPに限らず
そもそもはそれが問題なんよ
複雑さそのものが
ある程度以上複雑なモンは人類にはムリなんよ
それが人類とプログラミングの関係なんよ

サンプルプログラムや学校の課題書いたり
趣味で小さいの書いてる連中と
ある程度以上複雑なモンを書いてる連中とはまずそこからして
想定してるもんが違いすぎる
0286デフォルトの名無しさん
垢版 |
2020/06/27(土) 07:01:10.93ID:U90iCGW6
>>285
きっと>>282
小さな趣味プログラムでも大きな業務プログラムでも
ほらね、カプセル化したコーディングだとあーだこーだ
だからいったじゃん
「カプセル化は絶対にやめろ!」
という結論にもっていきたいだけだお
0287デフォルトの名無しさん
垢版 |
2020/06/27(土) 07:42:28.66ID:e0+LQFD/
「オブジェクト指向は高度で複雑な事をやる技術者
だけが恩恵を受けられるもので簡単なシステム
書いてるような凡人プログラマは恩恵を
感じにくい。」

だったら入門書でそんなもの教えるな
初心者プログラマにソケット通信や
システムコールやカーネルみたいな話を
いきなり教えるんか?
0288デフォルトの名無しさん
垢版 |
2020/06/27(土) 07:44:28.06ID:e0+LQFD/
凡人にとってオブジェクト指向は
邪魔でしかないんだよ。

高度な技術者の勝手な利便性を
凡人に押し付けるな。
凡人の方が大多数なんだよ。
0290デフォルトの名無しさん
垢版 |
2020/06/27(土) 08:29:03.79ID:0UrSdNRf
>>286
どうだろ。
staticおじさん(「オブジェクト指向ってしっくりこないんです」の記事を書いて炎上、詭弁を重ねて意固地にstaticを薦めた有名な老害)じゃないのなら、まだ、大丈夫なんじゃね?
0291デフォルトの名無しさん
垢版 |
2020/06/27(土) 08:38:52.96ID:0UrSdNRf
それ以前に、カプセル化は絶対駄目の結論に持っていこうとしているのか?
日が変わるとID変わるから、誰が誰だかよくわからなくなってきた...。
0292デフォルトの名無しさん
垢版 |
2020/06/27(土) 09:43:50.27ID:8YCrt6Qf
何事も程度次第
ただ丁度良い程度を知るのは少数の天性のセンス持ちだけで
凡人には理解できなかったり極端に走ったりする

俺は凡人とセンス持ちの間、というか凡人の域を超えられないのかなあ
プログラム書くたびにどの程度で済ませるか、いつも迷ってる
0293デフォルトの名無しさん
垢版 |
2020/06/27(土) 10:00:13.69ID:pgI/H4Wp
OOP批判の大半はクラス設計の難しさによる
OOPによってもたらされたクラスライブラリが
十分に使いやすいのに対して
自分でクラスやインタフェースを作ろうとしたとき
納得の行かない結果になる

問題の切り分けが出来ず
再利用性のある単位ぴったりにフォーカスできず
一緒にあるべきものを別にしたり
別にあるべきものを一緒にしたり
縦に割る物を横に割ろうとしたり
いろんな判断をあやまった結果

最後に、クラス設計が悪いのではなくてOOPそのものが悪いと断ずる
0294デフォルトの名無しさん
垢版 |
2020/06/27(土) 10:09:46.57ID:twDHZDh4
>>287
別に初心者だってオブジェクト指向の恩恵は受けられるだろう。良くあるコンテナや文字列とかの基本的なものだってオブジェクト指向的なものだし。

それに初心者の内からオブジェクト指向について知っておく、慣れておくことは重要だろう。
世の中の便利なライブラリやフレームワーク等の多くはオブジェクト指向で作られているからそれを使えるようになるために必要。
自分で設計するのも初めは難しいが、理屈や理論を学びながら実例に触れ、試行錯誤しながら徐々に慣れていく。

何より、初心者だからとオブジェクト指向をまったく触れずに手続き型のみで経験を積んで、ある程度自分なりのノウハウや経験論を身に付けてから別のパラダイムを取り入れようとすると、中にはアレルギー反応を起こして適応できなくなってしまう人もごく稀にいるから。
0295デフォルトの名無しさん
垢版 |
2020/06/27(土) 10:47:57.21ID:n2G2JMaM
長い上に全く中身がないな
スッキリ以上のオブジェクト指向のメリットは出てないからね

これで技術者やってるつもりなんだから早く死ねよ
0297デフォルトの名無しさん
垢版 |
2020/06/27(土) 12:40:58.84ID:ut+wnsgT
カプセル化って別に外部からのアクセスを不能にすることじゃないよ
外部から『直接的』にアクセスさせることを避けて、そのかわり外部向けにわかりやすい何かを提供すること
現実のカプセルのように、扱いにくいものを隠して扱いやすく提供すること
別にカプセル化してもリフレクションやその他諸々で遠回りなアクセスが可能なこともある
カプセル化ってのはかなり意味の広い言葉で、「臭いものに蓋」みたいなこと全般をカプセル化と呼ぶ
極端な例だと、関数にわかりやすい名前をつけることで関数内部を見なくて済むようにすることもカプセル化と呼ぶ
0298デフォルトの名無しさん
垢版 |
2020/06/27(土) 12:43:14.13ID:npRplKHX
>>288
いやいや兵隊がよくわからないのに使えるするのが
オブジェクト指向の利点の一つだろ つかそれができないなら
オブジェクト指向にする意義がない まあ兵隊がよくわからないのに
使えるぐらいのオブジェクト指向ができるなら、設計した本人たちは
そもそもオブジェクト指向にしなくても出来ちゃうって逆説はあるわな
0299デフォルトの名無しさん
垢版 |
2020/06/27(土) 13:14:49.52ID:e0+LQFD/
>>293
その通りだと思う
オブジェクト指向で作られたOSSの、ライブラリは
とても便利だし、役に立つと思う。

なら初心者や凡人へはクラスをインポートして使い方
のみを教えるべきで、クラスの作り方なんて
教えない方が親切だと思う

正直、自分でクラスなんて作りたくないし
組織内のメンバーが作成したローカル内の
クラスなんて利用や継承したくないし
自分が作ったクラスを誰かに利用して
欲しくない、使い捨てで十分。
再利用性は以前自分が書いたコードを複製
して微修正すればいいよ、
自分が書いたコードだから修正箇所は
把握してる。


JavaScriptやpyみたいな言語はオブジェクト指向
導入してるけどクラスの作成は必須じゃない
だけどJavaみたいな静的言語はクラスの作成が
必須になってる。ここがおかしいと思う。
クラス作ること強制してる言語仕様やフレームワークは
おかしいと思う。
0301デフォルトの名無しさん
垢版 |
2020/06/27(土) 13:45:44.90ID:ssxfEnBq
そして再利用しようとすると微妙に仕様が変わって結局中身を改造しないといけなくなる罠。
汎用的なパーツ以外はクラス化すると余計手間かかるな。
0302デフォルトの名無しさん
垢版 |
2020/06/27(土) 13:51:13.06ID:eG65KKvD
なんというかprivate云々とかそういう次元の話じゃないよねこれ
なんか脱力した
0303デフォルトの名無しさん
垢版 |
2020/06/27(土) 13:56:46.31ID:kHv6hhb8
再利用しなくてもテストしやすくなったりするからオブジェクトは素敵な概念だと思うよ
0304デフォルトの名無しさん
垢版 |
2020/06/27(土) 13:58:08.98ID:kHv6hhb8
修正が必要になったとき、それを使う側に影響を与えないっていう性質があっていっぱいちゅき
0305デフォルトの名無しさん
垢版 |
2020/06/27(土) 13:58:50.41ID:kHv6hhb8
まあ修正の程度にもよるんですけどね!(げきおこ
0307デフォルトの名無しさん
垢版 |
2020/06/27(土) 14:13:22.91ID:UrcM2fcl
このスレタイの主張、可能なら複数の言語で、
オブジェクト指向で書かれたそれなりの量のコードを、
それより機能的で保守性があって行数も少なくて万人が読みやすいようにリファクタリングするとかして証明して欲しいなあ

それがプログラマの矜持ってもんだと思う
コードで語れってね
0309デフォルトの名無しさん
垢版 |
2020/06/27(土) 14:23:12.65ID:1p1mL4Jd
バカなやつほど長文で演説した挙げ句オブジェクト指向のメリットをスッキリ以上のモノを挙げられない
レスしにくるなよ惨めだから
0310デフォルトの名無しさん
垢版 |
2020/06/27(土) 14:26:38.74ID:Z/pHF8i9
>>282
一般的な業務システムはデータベースに出し入れするだけだから深い階層構造にはならない。
データベースに出し入れする際の受け皿となる構造体が1層あるくらいだろ。

そもそもRDBは階層構造そのままぶち込めないし。
0311デフォルトの名無しさん
垢版 |
2020/06/27(土) 14:34:40.99ID:Z/pHF8i9
>>307
最近流行りのPythonで作られたシステムを見て回れば?
カプセル化は言語仕様で禁止されてるから強制的に>>1の言うとおりに作るしかない。
0312デフォルトの名無しさん
垢版 |
2020/06/27(土) 14:37:58.51ID:Z/pHF8i9
>>307
というか最初の開発で問題になるようなことではないからソースコードでは比較できないでしょ。
機能追加・改修案件で発生する問題の話だし。
0314デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:01:24.90ID:Z/pHF8i9
これオブジェクト指向の善し悪しじゃないよね。
改修発生時に雲の上で決まった無茶な追加仕様にどれだけ耐えられる構造にできるかという話だ。

ただオブジェクト指向は昔ながらの教科書どおりにやると耐えられない構造になりがち。
もちろんオブジェクト指向でなくても発生する。
C言語でも発生する。

そうならないようコーディングの約束事を決めよう。
そうなってないかコードレビューはしっかりやろう。
0315デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:03:08.36ID:kHv6hhb8
>>311
へーPythonにはアクセス修飾子がないんだ知らなかった
命名規則でこれはprivateなものだよと示すわけね
JavaScriptみたい
0317デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:09:38.92ID:kHv6hhb8
Pythonにアクセス修飾子がないことはググればわかるじゃん
0318デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:09:51.10ID:kHv6hhb8
ソースは僕だ!
0320デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:10:51.38ID:kHv6hhb8
マヨネーズの君とソースの僕
0321デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:12:52.88ID:qJyof1ZF
>>310
構造体が別の構造体を参照してるデータ構造は階層構造とは呼ばないということかな?

階層構造の深さがカプセル化やオブジェクト指向と何の関係があるの?
0322デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:13:38.77ID:kHv6hhb8
そう言えば日本の業務形態には貧血ドメインの方がよく適合するなんて話があったなあ
貧血って言うと悪い印象があるからシンドメインとかスリムドメインに言い換えて
スリムドメインの方が優れてるんだって風潮がそろそろ出てきても良いと思う
0325デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:18:13.32ID:e0+LQFD/
そもそも、一昔前ならソフトウェアは
製品化して値段を付けて売るって考えがあったから
保守や仕様変更の影響範囲について関心が高かった。
だからオブジェクト指向は必要だったかもしれない

だが現在ではソフトウェアは基本無料が当たり前だし
プロジェクト依頼元の依頼を受けてオーダーメイドで
システムを作るから依頼元だけが金を払ってくれるの
であって
あとはスマホアプリを無料配布して
そのアプリで課金してもらって金を稼ぐみたいな
稼ぎ方だから、ソフトウェア自体に売却する価値はない。
売却する資産価値がないからオブジェクト指向で
保守する価値がない、使い捨てにすればいい。

実際、スマホアプリとかのほとんどが軽微なバグ
とか沢山潜んだままリリースされていて、ずっと
放置されてたりするじゃん。
0326デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:19:44.46ID:Z/pHF8i9
>>321
ポインタは横の繋がり
上下関係ではない

深い階層化というのは、雲の上で決まった仕様に底辺開発者は意見できないということ。

深い階層化というのは、底辺開発者が受けてるパワハラなど雲の上は知らないということ。
0327デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:20:21.12ID:kHv6hhb8
>>323
では君と僕のカプセル化の定義が異なるだけじゃん
君のカプセル化の定義で僕が言ってることを解釈するからFalseになる
僕が言ってることは僕の定義で解釈したらTrueになる
アクセス修飾子が存在することをカプセル化可能と定義します
よろしくおねがいします
0329デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:25:23.02ID:kHv6hhb8
>>328
だからさー君のカプセル化の定義を知らないしそれを言ってもらわないことには
真偽値だけ言われても僕どうしたらいいかわからないよーえーん(T_T)
0330デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:26:25.05ID:kHv6hhb8
カプセル化とはアクセス修飾子でprivateにできることを言います
0332デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:31:32.87ID:qJyof1ZF
>>326

>>310
>一般的な業務システムはデータベースに出し入れするだけだから深い階層構造にはならない。

このレスに書いてる”階層構造”の定義を聞いてるに
全く違う”階層化”の話を出されても困る
特に考えてなかったんなら別にそれで構わない
0334デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:40:51.44ID:Z/pHF8i9
>>332
データベースで深い階層化が起こるとすれば、
・データベースの出し入れはストアドプロシージャ経由のみ
・誰かが作ったストアドプロシージャを叩くライブラリ
・末端開発者が見えるのはライブラリのみ

という状況
0335デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:45:38.60ID:kHv6hhb8
>>331
ホントっす
0337デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:46:32.04ID:kHv6hhb8
>>333
なんでFalseになるか説明できる?
できないんだったら君は間違ってる
0338デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:47:10.15ID:kHv6hhb8
>>336
何が違うんですか!?なんでですか?説明してください!
0341デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:48:32.24ID:kHv6hhb8
>>340
説明くらいできるだろハゲ、横着すんな
0342デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:48:33.70ID:PPBVSkWl
ぬるぽ
0345デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:53:25.63ID:kHv6hhb8
>>343
なるほどね、アレルギーが、そういうことね
0346デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:53:46.87ID:kHv6hhb8
恥かいた
0347デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:54:37.70ID:kHv6hhb8
安価ミスってんじゃないよ!!
納得した僕が馬鹿みたいでしょうが!!
0349デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:56:18.48ID:e0+LQFD/
ああもうめちゃくちゃだよ!
0351デフォルトの名無しさん
垢版 |
2020/06/27(土) 16:02:43.02ID:kHv6hhb8
カプセル化には強度があります。

C言語のヘッダやJavaのprivateといった言語機能として
カプセル化できることを強カプセル化と言います

JavaScriptやPythonのように命名規則によって使用者に
知らせるカプセル化のことを弱カプセル化と言うのです。

>>348 僕のこと見直してくれてもいいです
0354デフォルトの名無しさん
垢版 |
2020/06/27(土) 17:59:51.27ID:kHv6hhb8
>>353
嘘つき!
0355デフォルトの名無しさん
垢版 |
2020/06/27(土) 18:27:35.27ID:e0+LQFD/
>>351
これまでの話を統合した結論として、

いまはgitなどバージョン管理差分確認ツールや
エディタやIDEの機能が充実してるから

言語機能でカプセル化して
「内部を意識しない」ように隠蔽したり制限するのではなく
開発ツールを駆使して内部を意識はするけど
ソースの仕様変更切り替えに対応しやすくなっている
やり方が主流

開発ツール進化によりカプセル化はその役割を終えた。
継承や抽象クラスやオーバーライドも非推奨
これをやると同じ名前のメソッドが沢山あって
IDEによるプロジェクト内キーワード全文検索を
阻害するから
0356デフォルトの名無しさん
垢版 |
2020/06/27(土) 18:38:03.92ID:kHv6hhb8
>>355
カプセル化しなかったら仕様変更がしやすいのか、なるほど
0357デフォルトの名無しさん
垢版 |
2020/06/27(土) 18:45:55.84ID:e0+LQFD/
>>356
読解を間違えています

カプセル化をしないことで仕様変更しやすくなるのではなく

カプセル化を「しなくても」代わりに
開発ツールが充実してるから
ブランチ切り替えや差分確認でスマートな
仕様変更と仕様切り替えが可能です。
だからカプセル化はもう不要になりました。
0359デフォルトの名無しさん
垢版 |
2020/06/27(土) 18:52:34.90ID:kHv6hhb8
>>357
カプセル化せずに発生するオブジェクトを破壊するような変更を
差分確認で見つけ出せるわけですね、差分確認が重要ですね
0360デフォルトの名無しさん
垢版 |
2020/06/27(土) 18:54:31.03ID:twDHZDh4
>>355
×これまでの話を統合した結論として
◯これまでの話はすっ飛ばしてボクの言いたいことだけを言うと
0361デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:01:29.07ID:7UzCd1n0
IDEの助けがあるとは言え、grepした時の重複は勘弁して欲しい。
どれやねんっていつも思う。
本当にOOPってメンテしやすいんだろうか?
0362デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:03:28.66ID:kHv6hhb8
わかりました、grepを禁止します!
0363デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:07:51.73ID:kHv6hhb8
世界的超人気言語はC言語、Java、Pythonと変遷していってるわけだけれども
たしかにカプセル化の機能は時代とともに弱まってるように見える
0364デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:10:52.99ID:e0+LQFD/
>>359
そのオブジェクト破壊って一体何を意味してる?

多少オブジェクトが破壊されたところで
アプリは動くし すぐバグになる訳じゃないだろう。
多少経験あるプログラマなら知らないオブジェクトへの
破壊的代入は軽率にはやらないだろうし、
オブジェクトのバックアップ変数作ったり少し考えれば
それくらいやるだろう。

やる時はどうしてもやる時はそうせざるを得ないからやる訳で
破壊するのにもそれなりの理由があるんだよ。
それをprivateとかprotectedするなんて余計なお節介
もいいところ
そして、そういう操作の是非は
gitでコードレビューできるだろ。
0365デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:13:53.12ID:npRplKHX
カプセル化って一種の安全装置なわけだし、作業性とはトレードオフに
なるわな どちらかを選択するなら当然安全装置を選択するが
0366デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:26:08.84ID:D2Sdnpa5
使い捨てだの再利用しないだの
素晴らしい含蓄をみずほレベルの巨大案件に適用してれば歴史が変わっていたかも知れない
0367デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:29:44.84ID:kHv6hhb8
>>364
Javaでいうところのprivateやprotectedの値を書き換えたり参照したりといったことを
オブジェクトの破壊と言ってます
コードレビューできるっていうのはそれをやらないと洗い出せないってことでしょ
カプセル化の機能を使っていれば実装時に気付けることをレビューまで先延ばしにすることによって
得られることがそんなに多いのですかね
0368デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:37:50.49ID:kHv6hhb8
たとえばこの先Pythonが、名前が_から始まるメンバに外からアクセスすると
構文エラーになるようになった場合、動作するプログラムにカプセル化を破壊するような
操作がないことは明白になるのでとても便利だと思います
0371デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:50:55.69ID:kHv6hhb8
>>370
そうです、そのdart的な感じです
dartを使ったことがないので僕は知りませんけど
0372デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:53:28.59ID:kHv6hhb8
アクセス修飾子でアクセス制限をかけてしまうと
テストすることさえできなくなります
これがカプセル化の圧倒的な弱点です
0373デフォルトの名無しさん
垢版 |
2020/06/27(土) 19:55:33.60ID:kHv6hhb8
privateではありつつもテスト時などにアクセス可能なバックドアが必要で、それが現代のプログラミング言語には欠けていると思います
0374デフォルトの名無しさん
垢版 |
2020/06/27(土) 20:15:27.61ID:7UzCd1n0
>>373
そのへんJavaとかリフレクション駆使して回避してるので構造的、致命的な欠点とは言い切れないと思うよ。
リフレクションがバックドアと言われたらそれはその通りなので反論できないけど。
0375デフォルトの名無しさん
垢版 |
2020/06/27(土) 20:17:13.10ID:mehAi5n4
グローバル変数使用禁止の
public staticが唯一無二の解決策だというのにわからん奴がいるな
0376デフォルトの名無しさん
垢版 |
2020/06/27(土) 20:34:22.57ID:gS37C1rZ
>>373
テストでアクセスするならそれはpublicにすべきもの
言い換えると、テストですらアクセスしないものをprivateにする
0378デフォルトの名無しさん
垢版 |
2020/06/27(土) 20:39:11.40ID:e0+LQFD/
まず重要な前提として
システムの仕様変更というのは
appのソースコードの変更だけではない。
データベースの変更や接続してる外部サーバや
ストレージに関連する仕様変更とかもある。

そして、カプセル化を初めとするオブジェクト指向の
設計技法はメモリ内の瞬間的なごく狭い範囲の
事しか考えてない。

外部環境の仕様が変わったり、フェイルオーバーなどの
不具合が起きてシステム全体のデバッグしたり
不具合調査するときに、app層がカプセル化されていたり
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
想像に難くないと思う。

仮想化やクラウド化が進んでる最近では
こういう外部環境の隠蔽は逆に困るんだよ。
0379デフォルトの名無しさん
垢版 |
2020/06/27(土) 20:46:30.95ID:npRplKHX
>>378
オブジェクト指向の技法が使われているほど
それらが邪魔になってやりにくくなるのは
逆説的だがこれが利点の一つなんだ 手続き型だと
直したつもりになることが多々あり 新たなバクを生む
時間が多少かかっても形式的に処理するべき
0380デフォルトの名無しさん
垢版 |
2020/06/27(土) 20:59:08.97ID:kHv6hhb8
>>376
それはないわー
テストは全メソッドやるでしょ
全部publicにしなければいけないなんて間違ってると思います!
僕はそれ間違ってると思います!
0381デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:00:30.56ID:kHv6hhb8
>>377
publicにしたら別のオブジェクトからアクセスされちゃうじゃん
そのメソッドは内部の状態と深い関わりがあって勝手に呼ばれると困っちゃうの
みたいなことあるじゃんテストのときだけpublicにするのはヤリマンだし
0382デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:03:21.73ID:kHv6hhb8
テストを別オブジェクトにするのが間違ってるのかもわからんね
データと関数をセットにしたものをオブジェクトと呼ぶように
データと関数とテストをセットにした自己メンテナンス完結型のものをアクターと呼ぶことにしようよ!
0383デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:13:44.71ID:gS37C1rZ
>>380
> テストは全メソッドやるでしょ

全メソッドやるかどうかはその人次第
テストするならpublicにする
それだけの話

テストするということは、そのインターフェースは
外部から使用しても良いということを意味する
テストされてるんだから仕様が変わったりしない
0384デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:14:19.20ID:gS37C1rZ
>>381
> publicにしたら別のオブジェクトからアクセスされちゃうじゃん

アクセスしても問題ないだろ?
アクセスしても問題ないようにテストしてるんだから
0385デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:32:11.55ID:kHv6hhb8
>>384
いやいや、公開する必要のないメソッドを公開する意味がない
呼ばれちゃいけないタイミングはある、テストしてるかどうかとは関係ない

テストしてないコードはバグってるよ
人の問題で片付けてはいけない
0386デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:33:25.71ID:kHv6hhb8
テストやるときって前提となる状態を作ってからやるじゃん
公開して自由にアクセスできたら前提が成り立たない状態でアクセスされちゃうじゃん
テストエアプかい?
0387デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:34:14.35ID:kHv6hhb8
ちなみにだけど僕は自動化テストは書いたことがない
書いたことないけど僕はテストにすごく詳しいんだ、わからないことがあったら聞いて
0388デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:36:38.34ID:kHv6hhb8
privateなメソッドにテストが必要ないと思ってる人がいるのが僕は不思議
むしろprivateなメソッドこそテストするべきでpublicなメソッドはただのインターフェース
0389デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:38:48.09ID:kHv6hhb8
privateなメソッドにロジックが書かれていてそのテストを内包してるオブジェクトのことをアクターと呼ぶことにしようか
0390デフォルトの名無しさん
垢版 |
2020/06/27(土) 21:45:24.83ID:OC6QjUii
publicにしたからと言って緩和するだけで結局状態の保持をされて意味不明な動作をするところは変わらんで
staticおじさんの言うことを聞きなさい
0391デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:12:18.34ID:gS37C1rZ
>>385
> いやいや、公開する必要のないメソッドを公開する意味がない

テストするのだから公開する必要があるだろ
なにいってんだおめぇ
0392デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:15:42.36ID:kHv6hhb8
>>391
お前が何いってんだハゲ
privateだとテストできないのが困るのよねえと言ってんだろうが
0393デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:16:57.07ID:kHv6hhb8
テストエアプか?
テストのためだけにpublicにするなんてありえない
0396デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:19:09.22ID:kHv6hhb8
>>394
同じオブジェクトにテスト書けば良いと僕は思います
データ、メソッド、テストを備えたオブジェクトを特別にアクターと呼ぶことにしましょうという
のが僕の提案です
0397デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:20:26.71ID:gS37C1rZ
>>388
テストをするということは、それはインターフェースとして仕様がきっちりしていて
長い期間にわたって変更しない(されにくい)ということなんだよ

インターフェースが適当だったり変わりやすいものは
変わるたびにテストも変えなくてはいけなくなる
つまりテストのメンテナンスのコストが増えてしまう

インターフェースが適当だったり変わりやすいものを作るなという話じゃない
そういうのは作ってもいいがprivateにして、他のpublicメソッドを通して間接的にテストする

privateはテストしなくていいとかテストできないとかじゃなくて
インターフェースが(まだ)明確に決きめずに後回しにできるというメリットが有る

一方テスト可能な段階になったなら、それはインターフェースの仕様が明確に定義されているということ
(明確に定義されてないものをテストなんかできない)
明確に定義されたのならpublicにしていいわけ
0398デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:20:30.54ID:nVWlQ22s
ジャップにオブジェクト指向は100年早いみたいだな
脳死で全てにpublic staticって書いとけ
0399デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:20:37.43ID:kHv6hhb8
>>395
あら、あーたはprivateなメソッドのテストはなさらないの?
それで平気なの?
0400デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:22:06.34ID:gS37C1rZ
>>393
テストというのはオブジェクトを使用するときの例でもあるんだから
テストがやってることは、テスト以外でもやって良いんだよ
テストでしか呼び出してないからって、privateにする必要はない
0401デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:22:39.57ID:kHv6hhb8
>>397
そんなの関係なくメソッド書いたらテストもするでしょ
テストされてないコードはすべてバグだよ

public通してテストするのは粒度が大きすぎる
0402デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:23:50.09ID:gS37C1rZ
>>401
だからprivateをテストするということは、
そのメソッドは仕様が明確に決まったということなので
publicにしていいんだよ
0404デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:24:28.59ID:kHv6hhb8
>>400
テストするときは前提の状態を用意してからやるもので
テストは実装が正しいか確認するためにやる

publicにして他のオブジェクトから自由に呼び出して良いですというものとはわけが違う
テストで呼んだから別のところでも呼んでいんだなんて道理は存在しない
テストエアプか?
0405デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:25:10.97ID:kHv6hhb8
>>402
言い訳がない、privateにするのはよそからアクセスさせないため
テストするためにpublicにしていいわけがない、オブジェクト指向エアプか?
0406デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:25:22.83ID:gS37C1rZ
>>403
仕様が明確に決まってないようなものは
privateにしてテストをサボることができる
サボると言ってもpublicメソッド経由でテストするわけだが
あくまでメソッド単体でのテストをサボるだけ
0408デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:26:14.09ID:gS37C1rZ
>>405
> privateにするのはよそからアクセスさせないため
テスト(よそ)からアクセスするのでpublicです
0409デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:27:02.78ID:kHv6hhb8
>>407
そこで、僕に名案があります
テストを同じオブジェクトの中に用意するんです
そうしてデータ、メソッド、テスト、この3つを備えたオブジェクトをアクターと呼ぶことにしましょう
プログラミングパラダイムはアクターが主流の時代に突入します
0410デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:28:17.85ID:kHv6hhb8
>>408
テストのためにpublicにしたらオブジェクトが壊れるため
テストのためにpublicにするのはオブジェクト指向的にありえない
オブジェクト指向エアプか?
0412デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:30:05.59ID:kHv6hhb8
テストという概念がオブジェクト指向の中にないからこのようなジレンマに陥るのです
そこで、オブジェクトの中にテストを入れてしまおうというのが僕が提唱する新時代の
プログラミングパラダイム、アクター指向です
0413デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:30:26.61ID:kHv6hhb8
>>411
壊れるに決まってるだろ、いい加減なこと言うなハゲ
0414デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:30:40.41ID:kHv6hhb8
privateなめんなよ
0416デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:31:24.07ID:kHv6hhb8
>>415
お前が根拠言えよ
0417デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:31:41.00ID:kHv6hhb8
壊れないことを証明してみせろ
0419デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:33:18.25ID:kHv6hhb8
早くしろよおら、全部publicにしてプログラム書いてみろよ、ぶち、壊してやるから
0420デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:36:21.73ID:kHv6hhb8
アクセス修飾子はテストのために変えるものじゃない
そこに現行のオブジェクト指向の限界がある
そこでオブジェクト内にテストまで用意しましょうというのが新時代のアクター指向
0422デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:38:06.59ID:gS37C1rZ
> アクセス修飾子はテストのために変えるものじゃない
当たり前だろうw

テストというのは外部からインターフェースの仕様が明確に決まってるからこそできること
外部からのインターフェースの仕様が明確に決まったなら
それはpublicにしてよい
0423デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:38:47.14ID:kHv6hhb8
>>422
そんなの当たり前だろ
0425デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:40:35.80ID:kHv6hhb8
>>421
はい、そう言わざる得ないのが現状です
言語が悪いんじゃないプログラミングパラダイムにまだ進化の余地があると
前向きに捉えるのが良いと僕は思います
アクター指向言語がこれから出てくることを祈ります
0426デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:40:49.92ID:kHv6hhb8
>>424
だから当たり前だろ
0427デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:41:07.23ID:kHv6hhb8
あ・た・り・ま・え
0428デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:41:23.91ID:5gWgsM/a
え?privateなメソッドをテストしないって正気?
単に現状のオブジェクト指向言語と開発環境がテストのサポートできてないだけだろ
0429デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:42:31.56ID:kHv6hhb8
>>428
ねー意味分かんないよねー、ドン引きだよねー
0430デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:43:30.93ID:UrcM2fcl
>>399
リフレクション使ってでもやれって言うときはやりますけど?
そこら辺はルール作ってるはずで設計以前で明言されるべき
private要素に外部からアクセスしまくるようなことを許す設計やルールはどうかと思いますけどね

というか他の読み手が安心感を得るためでもある気がしますね
全部publicなプロダクトがあったとしてそれに新しいクラスやらを追加しろって言われたら神経質にならなければいけないw

逆にアクセス修飾子なしの言語はルールだけでやってるよね、あれ怖いわ
まあだいたいが単純なプロジェクトしかなさそうな言語だけど。。
0431デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:43:37.12ID:gS37C1rZ
privateなメソッドをテストしないんじゃなくて
仕様が明確に固まってないからテストしてもメンテナンスのコストが増えるだけ
そういうのはprivateにしてpublicメソッド経由でテストする

それがやりにくいーっていうなら、そのprivateなメソッドの
仕様を明確に決めればpublicにすることができる

ようするに今やるか後回しにするかの問題でしか無い
0432デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:44:43.36ID:kHv6hhb8
>>431
仕様が固まってないからprivateにするんじゃねーんだよ
おめーさてはプログラミングエアプか?
0434デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:45:36.87ID:kHv6hhb8
>>430
じゃあprivateでもテストすればいんじゃないでしょうか
0435デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:52:10.82ID:kHv6hhb8
テストオブジェクトから呼び出すためだけに
オブジェクト内部の処理をpublicにするのはありえない
publicメソッド経由で呼び出すのは粒度が大きすぎて話にならない
リフレクション使えばテストできるんだからそういう機能を持ったテストライブラリを使うべき
0436デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:53:18.84ID:e0+LQFD/
インターフェース仕様にまだ決まってないだとか
確定なんて明確な区切りなんてものは
現実にはない。

まだ確定してなくても仮のものを仮定して
実装はできる。
確定した後にインターフェースを変えたくなったり
ある日根底から覆ったりする。
privateで制限した内容は顧客要求より強い効力を持つの?
だったら凄く有効だよな
でもそうじゃないだろ
0437デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:55:59.77ID:kHv6hhb8
リフレクションはオブジェクト指向にとっては黒魔術でしかないので正当なやり方ではない
この問題の本質はオブジェクト指向にテストの概念がないことにある
オブジェクト指向は規模の大きなシステムの品質を担保するために作られたわけだが
現代ではそれにテストも入れるべきなんだよ
データ、メソッド、テストこの3つを内包するオブジェクトを作ることこそが真のオブジェクト指向
0439デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:57:06.02ID:UrcM2fcl
>>434
メソッドレベルのテストをリフレクション使ってまでやれって言われたことないですけどねw
inoutがテストしなければならないほど複雑になる1つのメソッドを書くことがおかしいし、
粒度が大きすぎてって、それはinoutを整理しきれてない設計がおかしいのでは?
何でも値が入ってきます、全部1つのメソッドで作ってテストしてください、なんて無茶ぶりだとおもいますねw
0441デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:57:58.35ID:kHv6hhb8
>>436
privateはプログラムの話だから客は関係ないだろ
客がメソッドコールするわけじゃないからな
0442デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:58:22.25ID:e0+LQFD/
>>440
あるよ、そしてそれが何度も顧客によって
覆ったこともな。
0443デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:00:01.68ID:kHv6hhb8
>>438
内部からのみ処理したいものだからprivateにするんだよ
テストはしたいけどテストのためだけに他のオブジェクトからも
呼び出せるようにはしたくないよねって話をしてるんだ僕は
0444デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:00:03.74ID:8YCrt6Qf
privateをテストするしないっていう想定自体が理解できない
privateメソッドなら当然それを呼び出しているpublicなメソッドがあるはずで
そのpublicメソッドのテストに当然privateなメソッドのテストも含まれるはず

よっぽどprivateメソッドで複雑なことしていない限りそのテストで十分だろうし
それでテストしきれないほど複雑なら別のモジュールに定義し直した方がいいだろう
0445デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:02:02.14ID:kHv6hhb8
>>444
それなりに複雑でメソッドを一つずつテストしたいけど
テストのためにオブジェクト分けるなんてイカれてると思うの
だってオブジェクトがテストのためにあるわけじゃないから
テストがオブジェクトのためにあるべきで、そこでですよ
オブジェクト内にテストを内包するのが正しいオブジェクト指向と結論するわけです
0447デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:02:29.65ID:kHv6hhb8
仕様が覆るのはあたりまえじゃん
それとアクセス修飾子の話は違うわ
0448デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:02:36.66ID:gS37C1rZ
>>443
> 内部からのみ処理したいものだからprivateにするんだよ

テスト(外部)から処理したいんだろ
何矛盾したこと言ってるんだよw
0449デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:03:54.57ID:gS37C1rZ
>>445
> それなりに複雑でメソッドを一つずつテストしたいけど
> テストのためにオブジェクト分けるなんてイカれてると思うの

複雑なメソッドは小さくしてください
設計がそもそも間違っています

テストのために小さく分けるのではなく
そもそも複雑なのが問題なのです。
問題を解決すればテスト可能になります。
0450デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:03:58.42ID:kHv6hhb8
>>448
だから、そこにジレンマがあるよねって話を最初からしてるつもりっす
0451デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:04:46.01ID:/AdLJL3G
いや、この問題は言語と開発環境の問題だろ
概念は関係ないよ
visualstudioができちゃえば
できますよ
で終わりな話
0452デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:05:10.21ID:kHv6hhb8
>>449
僕は複雑なメソッドを大きく作ってるとは言ってないので
小さくしてくださいというアドバイスをいただいても困惑するばかりです
0453デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:05:23.02ID:UrcM2fcl
逆に聞きたいけどpythonとかアクセス修飾子ない言語で、大規模プロジェクトがあったら、
ルール以外でアクセスはどう統制とってるの?

そういう言語の経験はWebくらいしか知らないから、全体何百万行(ステップ数でも人月でもいい)くらいのコードでこうしてた(る)ってのあったら教えて欲しい
0457デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:10:28.90ID:npRplKHX
お前らほんとプログラムのことしか知らないのな
品質を改善するときには品質を測るな これがテストの鉄則
タグチメソッドの入門でもよめ
0458デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:12:05.09ID:gS37C1rZ
1.モノを作る前に品質を創れ
2.品質工学は統計ではない
3.科学的思考ではモノは出来ない
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない
0459デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:12:06.00ID:kHv6hhb8
>>457
ありがとー!タグっちゃん!
0460デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:13:46.29ID:gS37C1rZ
どこから品質の話が出てきたのか知らんが、
品質とテストの話は

> 5.完全な設計は試験や検査は不要

これですかね?
0461デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:19:08.91ID:gS37C1rZ
>>458はいくつか日本語の文章に問題があるな

1.モノを作る前に品質を創れ
2.品質工学は統計ではない        ×「品質工学は○○である」と言おう
3.科学的思考ではモノは出来ない     ×「○○的思考でモノは出来る」と言おう
4.市場品質はすべて設計できまる
5.完全な設計は試験や検査は不要     ×「不完全な設計は試験や検査が必要」と言おう
6.品質評価はn=1でよい
7.品質を改善するときには品質を測るな   ×「品質を改善するときには○○をしろ」と言おう
8.評価はあるべき姿を定義して、安定性はSN比で行う
9.直交表で設計の再現性をチェックする(パラメータ設計)
10. システムは複雑でなければ、改善はできない  ×「システムは複雑なら、改善ができる」と言おう

こう偉そうなことを言ってるのに、じゃあどうすればいいかを
相手に考えさせるのって、どうなんでしょうかね(苦笑)
0462デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:24:56.40ID:gS37C1rZ
「品質が欲しければ、品質を測るな!」は
「品質が欲しければ、機能を測って改善しろ!」という意味みたいですな

つまりオブジェクトの品質を上げたければ
テストできるように機能を改善しろということですな
privateメソッドであれば、インターフェースを明確にして
機能に昇格させればpublicになるわけです。
0463デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:31:52.99ID:npRplKHX
>>462
ホントにタグチメソッド知らなかったのか?
その割には理解が早いな

ようするにバクをなくしたいのだろ?
それならバクがでるかどうかのテストをすることが自体がずれてるんだ
そんなことは最終段階でやることじゃないんだ どうせモグラたたきになる  
最初の設計段階で徹底的にいじめ抜け
どれだけ変更に強いかをテストするんだ
品質が欲しければ,機能を測れ これにつきる
0465デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:41:10.95ID:ZFnYFbMi
単体テストとどう違うの?
0466デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:41:18.54ID:gS37C1rZ
>>463
> その割には理解が早いな
あんなもん当たり前のことを誰かがまとめただけだからね
デザインパターンと一緒。
よく知られたものに、名前をつけてるだけ
0467デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:42:26.37ID:gS37C1rZ
>>465
複雑なものを複雑のままテストをしても意味がない
シンプルにテスト可能な形に設計を変えることがテストの目的の一つ
ようはprivateはpublicになるように設計を変えろということ
0468デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:43:10.60ID:ZFnYFbMi
単体テストって結合してからテストするの?
0469デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:46:52.77ID:ZFnYFbMi
王家秘伝のレシピ教えてやるよ。

#define private public

皆には内緒だぞ。
0470デフォルトの名無しさん
垢版 |
2020/06/28(日) 01:34:12.55ID:wUTwjqhp
>>469
#define ディレクティブを使用して、通常 C および C++ で行うように定数値を宣言することはできません。
C# の定数は、クラスまたは構造体の静的メンバーとして定義することができます。
そのような定数がいくつかある場合は、それを保持するための "Constants" クラスを個別に作成することを検討してください。
0471デフォルトの名無しさん
垢版 |
2020/06/28(日) 02:01:57.56ID:pODeKu4C
privateメソッドの直接テストしたいけど可視性を変えたくない場合は
リフレクションを簡単に使えるようにしてるテストフレームワークだったりライブラリ使えばいい

ちなみにGoやRustはprivateもテストできる仕組み持ってる
0474デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:51:30.71ID:lfkBrldT
>>463
ソフトウェアの作り方も知らずにタグチメソッド真に受けたら、
糞みたいな品質のものしかできんぞw
単体テストってのは設計の一部なんだよ。品質テストとは全く異なる。
抽象論でタグチメソッドを適用しようとしてる輩が一番ヤバい。
0475デフォルトの名無しさん
垢版 |
2020/06/28(日) 10:22:04.23ID:4vfVPlvE
なんだミニ四駆のモータに学ぶことでもあんのか?って思ったら
品質100%の更に上の話じゃねーか

現場の単体テストもロクにやらないクソが問題になってるITでそんなもんいらん
0476デフォルトの名無しさん
垢版 |
2020/06/28(日) 12:40:59.37ID:L5Cpw8A4
中の磁石が強いほどトルクが上がって回転数が下がる
磁力が弱いほどトルクが下がって回転数が上がる
0479デフォルトの名無しさん
垢版 |
2020/06/28(日) 18:55:54.96ID:nHckGJvd
開発体制が複数の会社でピラミッド状の階層化されてたら指揮系統的に相当厳しいだろうね。
0480デフォルトの名無しさん
垢版 |
2020/06/28(日) 19:33:26.78ID:JoVMtTbA
Javaの修飾子宣言鬱陶しくてほんと嫌い
0481デフォルトの名無しさん
垢版 |
2020/06/29(月) 14:12:08.40ID:EmVrB3rr
明示的な状態管理は、(不可能ではないにせよ)管理すべき状態の量が増えてくると非常に困難になってくるところ、関数型言語の考え方を取り込むことによってその負担を軽減できるのではないかーーという意見もあるようだけど、
このスレの人(カプセル化肯定派・否定派いずれも)としてはどう?
0482デフォルトの名無しさん
垢版 |
2020/06/29(月) 19:41:29.30ID:bVpw4tuk
カプセル化の可否はともかく
階層化の有害性についてはこう思います。
例えばディレクトリを階層化のすると
親ディレクトリと子ディレクトリに同じデータを重複格納
する人が出たりしてデータの二重管理が発生
しやすくなると思います。
そのうちどれが正なのか分からなくなります。
あと単純に子供に格納するほどデータのアクセスパスが
長くなってどこにあるのか探し出すのが大変になると
思います。

これはオブジェクトの階層構造でも
JSONなどの構造についても言えることだと思います。
0483デフォルトの名無しさん
垢版 |
2020/06/29(月) 20:06:40.16ID:cYsf6eW3
プログラムで階層化なんて意識したことないけど問題起こったことない
分野が違うのかな
0485デフォルトの名無しさん
垢版 |
2020/06/29(月) 20:19:42.34ID:tYVp58Ca
つまり、人間関係の問題を持ってきても、技術を否定したことにはならないのです。
0487デフォルトの名無しさん
垢版 |
2020/06/29(月) 23:35:22.76ID:L39gVdue
>>482
そこで挙げている階層化の問題だが、階層化せずフラットに格納すれば解決するのか?
階層化しないということは同じレベルに大量の物が同格に並ぶわけだが、そうなると目的の物を探すのが困難になりすでにあるデータと同じものを重複して格納する危険性があるだろう。
またアクセスパスが長くなるというが、フラットな構造で多数の物を適切に命名しようとすれば階層的な名前付けが役立つはずだが、それすら長くなると忌避するなら場当たり的に短い名前を着けていっていずれ収集が着かなくなるだけでないの?
お前さんが挙げた階層化の問題は階層化の仕方が悪い(下手な)だけで、階層化をしなければ解決するというものではなかろう。
0488デフォルトの名無しさん
垢版 |
2020/06/30(火) 05:33:42.93ID:v2qXZCJh
結局、分類だったり抽象化のやり方がクソってだけの話だろ。
フラットにしようが階層にしようが、クソな分け方したらどうにもならんてだけの話だ。
0491デフォルトの名無しさん
垢版 |
2020/06/30(火) 10:40:18.75ID:J3IrN4Ey
>>1が例に上げてるRFC3439は「Layering Considered Harmful」という強い言葉を使ってるが
レイヤ化は万能じゃなくデメリットもあるという当たり前のことを書いてるだけ
もちろん「カプセル化は絶対やめろ」なんてことは書いてない

メリット・デメリットを把握した上で
状況に応じたトレードオフの判断ができない人(>>1)には
ソフトウェアの設計はできない
0492途中から見た。
垢版 |
2020/06/30(火) 19:35:05.23ID:g7PLkMcM
なんか、privateメソッドのテストでもめているけど、なんで。
そもそも、privateメソッドを外部から呼び出してテストしないといけない場面が想像できないのだが。
クラスライブラリのコードを紛失したとか笑えないケースを想定しているの?
0493デフォルトの名無しさん
垢版 |
2020/06/30(火) 19:48:43.49ID:MKfuvp+I
gitや自動ビルドツールの存在がなかった時代の
オブジェクト指向技術は淘汰されてもいいんじゃない?

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

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

それと自作のアプリのオブジェクトで
webからインストールしたライブラリや
フレームワークが自動生成して提供するもの以外で
それほど長時間状態を保持するような巨大なオブジェクト
構造を自作設計して作成することがあるか?
あるとすれば
webのセッションや
オープンワールドやFPSみたいなゲームくらいか
0494デフォルトの名無しさん
垢版 |
2020/06/30(火) 20:19:26.97ID:v2qXZCJh
今でもSIerなんかはコード書き換えないことに固執してるから可視範囲に対して神経質なんだよ。
0495デフォルトの名無しさん
垢版 |
2020/06/30(火) 20:27:32.13ID:+5DxT57L
>>492
それは「テストの時にだけpublicに変えればいいじゃん」か「privateはpublicに内在してるから直接テストする必要ないじゃん」のどっちの意味ですか?
0497デフォルトの名無しさん
垢版 |
2020/06/30(火) 20:58:42.09ID:ww2Xd+MO
× テストの時にだけpublicに変えればいいじゃん

○ テストがやりにくいというのは設計がまずいということ
自然な形でpublicになるような設計を改善すべきだ
0503途中から見た。
垢版 |
2020/07/01(水) 00:09:32.11ID:vgPSMoJs
>>495
よくわからないが...強いて言うなら後者?
第一、クラスって実装者が責任を持ってテストするものだろう。
なんで、privateで定義されたものをpublicにして呼び出そうとするのかも、正直、わからない。
ブラックボックステストでもしたいの?
まぁ、ブラックボックステストってprivateメソッドを呼び出せば成立するかというと、違うと思うけど。
正直、何がしたいのかわからなさすぎて困惑している。
0504デフォルトの名無しさん
垢版 |
2020/07/01(水) 00:11:23.37ID:Dh09feZF
>第一、クラスって実装者が責任を持ってテストするものだろう。
これが守られてりゃこのスレみたいな議論は起こらんわ。
0505デフォルトの名無しさん
垢版 |
2020/07/01(水) 00:22:36.05ID:dTufBNXb
守るも何もクラスに不具合があれば実装者の責任だろ
って言うのが通用しないのか?
0507デフォルトの名無しさん
垢版 |
2020/07/01(水) 00:33:27.93ID:XAYXSYxH
客先に納めたプログラムを客先が勝手に変更したら責任は外れる契約になってると思う
これは弊社の納めたプログラムではありませんってなるから
社内で引き継いだなら文句を言うのは自由だが任された者がなんとかしろの精神だろ
0508デフォルトの名無しさん
垢版 |
2020/07/01(水) 00:43:31.96ID:Dh09feZF
クラスごとにしっかりテストがあって
引き継ぎがしっかりされる職場ばかりなら何の問題もないだろうね。
とても幸せな世界でいいですね。
0509デフォルトの名無しさん
垢版 |
2020/07/01(水) 01:04:03.02ID:Ke5amsYp
まだ続いてたか
結局問題は出来の悪いモジュールをどうするかって話だろ
0510デフォルトの名無しさん
垢版 |
2020/07/01(水) 01:36:00.07ID:bx11ZQ99
違うよ
visualstudioがテストプロジェクトでprivateをpublicみたいに呼べるようにするだけ
0511デフォルトの名無しさん
垢版 |
2020/07/01(水) 06:19:16.09ID:y/Wgtnem
>>503
privateを呼び出す必要があるってのはUnit Testの時で、実装者とテスターが同一人物かどうかは関係ないよ。
オブジェクト指向に限らずテスト理論の話になっちゃうんだけど、プロジェクトや規格で指定されるUnit Testの種類によってはpublic経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。
なので十分に単純化されたprivateを含めて関数毎にテストする必要が出てくるのよ。
0512デフォルトの名無しさん
垢版 |
2020/07/01(水) 06:46:59.11ID:5jdJ/dE3
>>501
> そりゃ結合試験はするだろ

統合試験って言うことは、当然標準ライブラリの
テストも行うんだよな?例えばprintf関数のテストとか
0513デフォルトの名無しさん
垢版 |
2020/07/01(水) 06:53:14.54ID:lozEWamw
>>511
> public経由でprivate呼び出してたら組合せ爆発してテストドライバやスタブの開発やレビューだけで多大な工数が必要になってやってられなくなる。

そういうことだよね。だからそれはpublicメソッドが行ってる機能が多すぎるわけで
複数のpublicメソッドに分解するわけ。これが設計。

適切な関数の行数って思ったより短いものだから。
俺の場合、一部のcaseテーブルのようなものを除いてロジックと呼べるようなものがあるコードは
長いもので1関数30行〜40行程度半分以上は10行程度だよ
0515デフォルトの名無しさん
垢版 |
2020/07/01(水) 08:27:13.77ID:3Re1TFuk
>>512
そりゃprintf使うシステムの結合テストならもちろん結合テストのセンスでprintfもテストするよ。
ユニットテストの粒度とは違って「〜が標準出力されること」ってテスト項目になるけど。
0516途中から見た。
垢版 |
2020/07/01(水) 11:10:06.09ID:LiVkSFt2
結合テストと総合テストって同じ意味なのか?
0519途中から見た。
垢版 |
2020/07/01(水) 12:36:28.97ID:LiVkSFt2
なんというか...コミュニケーションがまともにとれていないのでは?

恐らく、他人の作ったライブラリに対して単体テストをお前はやるのか?という意図で聞いた質問に、結合試験はするだろと回答したり、
結合試験と総合試験という字面で見ると似ているけど全然違う話を混在させたり、
似ているようで関係のない話を持ち出して混沌としているな。

語りたい事の本質が行方不明になっているように見える。
0520デフォルトの名無しさん
垢版 |
2020/07/01(水) 14:20:36.35ID:JqIYLyXt
>>512は総合じゃなく統合って書いてるぞ

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

単なる読み間違いなのか結合 = 統合の意味で使ってるのかは知らんけど
0521途中から見た。
垢版 |
2020/07/01(水) 14:54:20.92ID:LiVkSFt2
うわっ!恥ずかしいミスをしてたのは自分だったか。あとで、読み直す...。
0523デフォルトの名無しさん
垢版 |
2020/07/02(木) 19:42:17.69ID:84e/i8uV
privateメソッドテストするとか正気?
テストしなくてよくするためのprivateだろ
0525デフォルトの名無しさん
垢版 |
2020/07/02(木) 20:08:44.37ID:/yt09sjO
>>523
特大クラス一つの中に全部privateでメソッド作成したら
どういう理由で全メソッドテスト免除になるの?
0526デフォルトの名無しさん
垢版 |
2020/07/02(木) 20:10:40.42ID:/yt09sjO
マイクロソフトに頼らんで独自にテストプロジェクト作ってるような会社はできてんで
visualstudioの都合でテストやりたくないって言ってるだけだろクズども
0527デフォルトの名無しさん
垢版 |
2020/07/02(木) 20:46:21.86ID:Vurtjy2V
関数どころか変数に至るまで一つ一つ丁寧に検査してましたわ。
0528デフォルトの名無しさん
垢版 |
2020/07/02(木) 21:29:57.44ID:lIo9GiA1
>>525
どんだけ巨大なクラスでも全部privateだと外から一切呼び出せないデッドコードになるのでテストする意味さえないだろ。
0529デフォルトの名無しさん
垢版 |
2020/07/02(木) 21:35:43.34ID:UKbwg08G
>>528
せやかてpublic通してたら結合テストじゃんw
0530デフォルトの名無しさん
垢版 |
2020/07/02(木) 21:36:02.64ID:UKbwg08G
unit testの意味わかっとんのけ?
0532デフォルトの名無しさん
垢版 |
2020/07/02(木) 21:40:09.15ID:UKbwg08G
>>531
せやろ、ワイの会社も結合テストのことをunit testと呼んでるわ
本当のunit testはやってない
0536デフォルトの名無しさん
垢版 |
2020/07/03(金) 08:56:10.03ID:N+TCe3uh
これは酷い。RFC 3439はネットワークの仕様の話であってオブジェクト志向なんか
一切関係ないし、プログラミングの話でもない。

偏差値が低い学校でだけ教えてた事実なんてないしアメリカの大規模システムは
全部OOでカプセル化が基本。

的外れすぎて開いた口が塞がらない。これ書いた人間が全く一切わかってないのはよくわかった。
0537デフォルトの名無しさん
垢版 |
2020/07/03(金) 09:22:53.27ID:r9jTvXIP
>>536
わざとバカなことを言って他の人が本気で反論や議論してくるのを笑ってる可能性もゼロではないが、まあ単に本物のバカという可能性のが高いと思う
0539デフォルトの名無しさん
垢版 |
2020/07/03(金) 10:22:52.04ID:N+TCe3uh
こんなんでもRFC確認する人なんてほとんどいないだろうし、クラウドがあるじゃないですか!
のレベルの日本ではショーンK的に通用しそうというか、結構このスレでも通用してるのがおっかない。
0540デフォルトの名無しさん
垢版 |
2020/07/03(金) 10:25:42.60ID:lDWf2b6S
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?

超論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?
0541デフォルトの名無しさん
垢版 |
2020/07/03(金) 10:27:37.08ID:N+TCe3uh
単に道具だから自分で考えて必要なら使えば良い訳で。

カプセル化ってのはつまり部署ごとにお前のところはお前で責任を持て、
お前が変えたからって他の部署に仕事をさせるな、ということだから、
それができてればなんでも良い。
0542デフォルトの名無しさん
垢版 |
2020/07/03(金) 11:40:51.40ID:x82j4VqA
複数の開発会社が絡む大規模案件と
一社開発や個人開発の小規模案件を
ゴッチャゴチャにして同列で語り合うから、話が噛み合わないし、話が終わらないんよ。
0543デフォルトの名無しさん
垢版 |
2020/07/03(金) 11:47:43.16ID:Gy+Up1+B
>>542
各クラスの仕様を明確にするのか仕様を決めずに実装するかの差だよ
開発手法の差だが開発規模の差ではない
0544デフォルトの名無しさん
垢版 |
2020/07/03(金) 11:51:37.50ID:uIgOlo/V
>>543
仕様が明確じゃないのにテストする意味あるの?
それともprivateメソッドの仕様を明確にするの?
0545デフォルトの名無しさん
垢版 |
2020/07/03(金) 11:53:31.15ID:N+TCe3uh
そもそもOOとかは大規模開発するために出てきた手法だから個人で小さいもの
作ってるなら関数でもスパゲッティでも本人わかってりゃいいわけだし、昔は
関数でも部署ごとで話し合ってちゃんとやってたけど、どうしても直接アクセスして
変更の際ぶっ壊れるようなものを作るやつが出るから、じゃあもう見せなきゃそういう
事態は起こらないということで実際それはうまくいってる。

個人のソフトとかは好きにすれば良いし、好きにできるようになってるんだから
それぞれ道具を自分の必要に応じて使って勝手にやれば良い。
0546デフォルトの名無しさん
垢版 |
2020/07/03(金) 11:59:07.38ID:Gy+Up1+B
>>544
「privateはxunit testingしなくていい」と言われる理由はそこだ
他のクラスとの関わりとして必要な仕様は非privateメンバのみに着目すればいい
publicメンバの振る舞いが変わらずすべてのテストをパスできるならprivateがどう変更されようが他のクラスからは関係ないからな
0547デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:07:31.88ID:uIgOlo/V
つまりprivateをテストするってことは仕様が明確になってるわけで
publicにしても問題ないってことだよね
0548デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:07:34.57ID:Gy+Up1+B
勢いで書いたから非privateとpublicがごっちゃになってるけどこの手の話題でpublicと書いてあったら全部非privateと読み替えて下さい
0549デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:10:41.37ID:BB9T+E2r
>>540
超論理的思考によるとって、論理を超えた思考なんかされたって会話にならないから、論理的思考をした上で疑問があれば相談してくれ。
0550デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:16:49.80ID:N+TCe3uh
Privateをテストするかどうかはプロジェクトごとのテストのやり方次第だし、
なんのテストかにもよるわけで。

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

その辺はカプセル化とかOOとかはあまり関係の無い話。
0552デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:26:06.83ID:sqXfkC+n
privateをpublicにしてもいいよねって言ってるやつは、改修で命名とかしたことないんかな
0553デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:26:36.41ID:hDsckVNf
どこの現場でも通じないトンデモ理論を前面に出して話してんじゃねーぞガイジ
0554デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:29:48.69ID:Gy+Up1+B
>>551
クラスの仕様変更でpublicになったときに追加すればいい
極端な話、複数のpublicメンバの中でprivateAとprivateBが使われてて各privateの挙動は実装者の想定と実は違ったとしてもすべてのpublicメンバの挙動が仕様通りなら(クラス仕様変更して変なバグを引く羽目になるまで)なんの問題もない
その時対処する事案
0555デフォルトの名無しさん
垢版 |
2020/07/03(金) 12:55:27.30ID:MMMvRh6C
privateな状態を確認するテストのがテスト数が減る。
二つのpublicなメソッドの関連をテストする場合、
n*m になるが
状態が k 個の場合、 (n + m)*k になるわけだよ。
無理にpublicだけのテストを書くことがどれだけアホか。
0556デフォルトの名無しさん
垢版 |
2020/07/03(金) 13:00:40.80ID:lDWf2b6S
Javaで外クラスから内クラスのprivateメンバが見れるのはなぜですか?

論理的思考によるとどう考えても理論に欠陥があり矛盾してる。
みなさんはこのJavaにおけるクラス体系をおかしいと思いながら割りきって使ってるのですよね?
0557デフォルトの名無しさん
垢版 |
2020/07/03(金) 13:19:27.55ID:Gy+Up1+B
>>555
privateテストでテスト数減るならその方がいいのは自分も同意

誤 privateはテストしなければならない
誤 privateはテストしてはならない
正 必要なテストだけ簡単になるように書けば良い
0559デフォルトの名無しさん
垢版 |
2020/07/03(金) 14:48:27.68ID:lDWf2b6S
>>558
それは内クラスから外クラスが見えることの説明。
わたしの質問はなぜ外クラスから内クラスのprivateメンバが見れるのか?
0562デフォルトの名無しさん
垢版 |
2020/07/03(金) 15:36:50.41ID:FAOrvW1R
しらんがな、言ったやつがコードサンプルでも出さなきゃ説明力足りてないから分からんだろ
外部クラスがどうのとか言ってるやつもな。Javaの外部内部の関係も理解が曖昧なんだろ
0563デフォルトの名無しさん
垢版 |
2020/07/03(金) 16:46:44.22ID:q5wbDGG6
Javaって修飾子付けないとpackage privateがデフォルトだからその事言ってんじゃね?
package privateとは言い換えればpakage内publicと同じだから
0564デフォルトの名無しさん
垢版 |
2020/07/03(金) 16:51:38.12ID:36TwtcUk
じゃあpimplで。
0566デフォルトの名無しさん
垢版 |
2020/07/03(金) 16:58:29.95ID:36TwtcUk
弊社はC2カバレッジ100%に満たないものは出荷できませんけどね。
0570デフォルトの名無しさん
垢版 |
2020/07/03(金) 19:53:44.94ID:FArQoHTp
特に組み込みはC2カバレッジが常識なんだけど、ISO26262では関数カバレッジでOKという不思議。
0571デフォルトの名無しさん
垢版 |
2020/07/03(金) 20:32:31.27ID:Gy+Up1+B
>>569
分野によるって言ってるだろ
人命関わらないgui優先で運用回避がまかり通る分野全般はカバレッジなしやc0カバレッジ70%(自動生成コード除く)とかなんだよ
0573デフォルトの名無しさん
垢版 |
2020/07/04(土) 03:14:27.24ID:1AXxY7r6
>>559
そりゃインナークラスは親クラスのメンバーなんだから
親クラスから見えるのは当たり前。

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

適切に使えば、インナークラスを使わなかった場合パブリックで
メンバーにアクセスさせなければいけないのに対して、インナークラスの
メンバーはアウタークラス以外には見えないわけだから、よりカプセル化は
進んでいる。
0574デフォルトの名無しさん
垢版 |
2020/07/04(土) 03:31:41.97ID:1AXxY7r6
親クラスは不適切だった。インナークラスはアウタークラスのメンバーなんだから
メンバーを見られるのは当たり前。
0575デフォルトの名無しさん
垢版 |
2020/07/04(土) 08:51:34.07ID:+L2cGNSv
>>572
組み込み開発やってるけど、ちゃんと最先端の勉強をしている人はオブジェクト指向理解しているよ(別にOOP自体は普及しきったノウハウだが)。
言語はC/C++言語ほぼ一択だけど。(他はRustくらいだが、まだ普及しない)

まぁ、WEBやアプリ開発等、我々から見て抽象レイヤーで使われるノウハウを軽視するおじさん上司も多いし、組み込みに残念なプログラマーが多いことは否定しないけど。
0576デフォルトの名無しさん
垢版 |
2020/07/04(土) 09:02:21.50ID:+L2cGNSv
>>566
カバレッジテストとアクセス修飾子って関係あるの?
カバレッジテストを合格するためにpublicにするとか、本末転倒じゃね?
0578デフォルトの名無しさん
垢版 |
2020/07/04(土) 10:19:47.88ID:+L2cGNSv
話の流れからして、テストのためにpublicにしろに読み取れたけど、ミスリード?
まぁ、そんな馬鹿な話、あるわけねーか。
0581デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:02:29.17ID:pmIasW6W
publicにしなくてもリフレクション使ったりすればええんやで
privateだからテストしないなんてプログラマとしてありえない
0582デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:03:03.13ID:pmIasW6W
C2 100%は新人でも最低ライン
0583デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:06:53.34ID:pmIasW6W
テストの仕方を知らない教えない会社があるんだなー
0584デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:08:56.73ID:M3d71N9d
>>576
> カバレッジテストとアクセス修飾子って関係あるの?

当然関係ないよ。(ここらへんで関係があるとか言ってるのはアホからだ無視していい。)
privateになってようが、それはpublic経由でテストするのだから
カバレッジは変わらない

テストのしやすさが変わるだけ。もしprivateのままだとテストしづらいなら
そのprivateの仕様を明確にしてpublicにして問題ないような設計に変えるだけのこと
0585デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:13:54.87ID:pmIasW6W
>>584
publicにしないとテストできないってどんな言語?
privateのままテストしたらええやんけ
unit testは最小単位でテストすることでテストのコストを
最小化するものだからpublic経由でprivateなメソッド呼び出してたら
unit testの意味をわかってないアホの極みだしテストのためだけにpublicにするよう
設計に手をいれるのは本末転倒
0586デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:14:51.95ID:9ghyGMpS
とある大手家電メーカー勤めだが、以前までC2カバレッジ必須でやってたんだけど、色々な計測の結果じつはユニットテストでカバレッジに時間かけるよりシステムテストに時間かけたほうが品質が上がるという結果が出てからはユニットテスト必須じゃなくなったわ。
0587デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:14:53.14ID:pmIasW6W
テストの仕方って教えないものなんだなー
0588デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:16:50.57ID:M3d71N9d
外部から使うかどうかという(間違った)考え方で
privateにするかpublicにするかを決めてると
例えば、全文検索エンジンなんか最低限
文書の登録メソッドregisterと検索メソッドsearchだけでいいってことになってしまう

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

privateにするかpublicにするかっていうのは、そのシステムで外部から使うか?ではなくて
オブジェクトとして外部から使うかなわけで、privateでテストしづらいようなものは
別オブジェクトに分離とするとか設計をみなすべきってことなんだよ
0589デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:18:52.84ID:pmIasW6W
>>588
privateのままテストしたらオブジェクト分ける必要ないよ
privateのままテストする方法がわからないからオブジェクトわけましょうなんて愚の骨頂
愚かの極み
0590デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:18:58.30ID:M3d71N9d
>>585
> publicにしないとテストできないってどんな言語?

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

できるけど大変っていうのは、問題を何も解決してない
ちゃんと設計をせずに関数のインターフェースを定義せずに
無理やりprivateのテストをしても、private=外部から使わない=変更しても問題ないわけで
それに対してテストをしていると、変更しても問題ないはずのprivateメソッドを変更したら
テストが失敗するってことになるのでよくない
0592デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:23:05.84ID:pmIasW6W
>>590
privateでテストできないならpublicに設計し直すんやって言ってたじゃん
privateのままでテストするのに何も大変なことなんてない
テストのためだけに設計し直すのは頭おかしい

テストされてないメソッドが存在する方が問題だよ
外部から使わないから問題ないよねって感覚で勝手に修正されるわけないだろw
メソッド書き換えたらテストも修正するのは当たり前
0593デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:24:25.01ID:pmIasW6W
>>591
わかってないのはそっちの方、unit testでカバーしてなかったら
仕様通り動いてるのを確認できない
0594デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:26:55.62ID:pmIasW6W
privateなメソッドであっても事前条件も事後条件もある
unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる
0595デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:27:43.00ID:1AXxY7r6
大規模システムでずっと来てるけどカバレッジって初めて聞いた。調べたら
アメリカだと航空宇宙とか自動車とかでやるみたいね。

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

privateとかpublicとかは単に現場次第だよね。正式なQAメソッドではそこまで
言わないし、どうでもいいというか、臨機応変にやるとこ。
0596デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:30:38.80ID:pmIasW6W
>>595
臨機応変にやるのは会社を首にならないためですよねw
それは社会をどうやって生き抜いていくかサラリーマンとしての心得じゃないですか

プログラマとして品質の高いプログラムを作るためにC2 100%は最低条件ですよ
0597デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:33:41.81ID:1AXxY7r6
>>596
プログラマって言ったってサラリーマンと対して変わりがないくらい幅広いわけで。

大規模ビジネスシステムで分岐ごと全部テストしてたらピラミッド建設みたいな事に
なりますw
0598デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:36:02.68ID:1AXxY7r6
ちなみに臨機応変にやるとこなのは会社首とかはどうでもよくて、
ユニットテストはなに、リグレッションは、アクセプタンスはってのは
QAのメソッドとして確立してるけど、JavaのPrivateがどうするかみたいなのは
完全に現場次第だから。

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

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

大規模だからビジネスシステムだからテストしなくていいはちょっと今の時代ありえない
0601デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:40:52.54ID:M3d71N9d
>>592
> privateでテストできないならpublicに設計し直すんやって言ってたじゃん
> privateのままでテストするのに何も大変なことなんてない

自分で答え言ってるじゃんw
privateでテストできないならpublicに設計し直すんだから
privateのテストは大変じゃなくて必要ないってこと
0602デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:41:39.32ID:M3d71N9d
>>593
> わかってないのはそっちの方、unit testでカバーしてなかったら
> 仕様通り動いてるのを確認できない

ユニットテストでカバーしないなんて一言も言ってないんだが?
何に反論してるんだよ
0603デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:41:45.39ID:pmIasW6W
>>598
現場次第だから現場に従うんだっていうのはそれはサラリーマンとして生き残るために
そうせざるを得ないだけだよね、品質の高いプログラムを作るなら常にテストはしないといけない
世界標準がないからいんだっていうのじゃないよ
0604デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:42:23.92ID:M3d71N9d
>>594
> privateなメソッドであっても事前条件も事後条件もある
> unit testでカバーしてれば壊れてないことを確認できるからリファクタリングが可能になる

最初からpublic経由でテストするって言ってるよね?
0605デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:43:01.27ID:czCytfqY
あたい知ってるよ
カバレッジテストを合格するために、privateをpublicにしてメソッドを呼び出せばいいんだよね。

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

あたい知ってるよ
カバレッジテストを合格するために、メソッドの中に記載されているコードを全部消せばいいんだよね。
0606デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:43:01.49ID:pmIasW6W
>>601
privateのテストは必要だよ
privateでテストできないからpublicにすると言ってるのは君の方
僕はprivateでテストするべきだって立場
0607デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:43:56.50ID:pmIasW6W
>>602
君はprivateのテストは書かないってことだから
privateのメソッドはunit testでカバーされてないよねってこと
0608デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:44:22.90ID:M3d71N9d
>>606
> privateのテストは必要だよ

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

お前短絡思考なんだよ。
privateはprivateのままテストしなくちゃいけないんだって思ってるだろ
0609デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:44:50.09ID:pmIasW6W
>>604
それはunit testにならないよってこと
privateのメソッドをテストできてないよってこと
0610デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:45:01.10ID:M3d71N9d
>>607
> 君はprivateのテストは書かないってことだから
> privateのメソッドはunit testでカバーされてないよねってこと

なんですぐ上でprivateはpublic経由でテストするって言ってるのに
理解できてないの?
0611デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:45:43.09ID:pmIasW6W
>>608
テストしたいからpublicにするのが間違ってて
privateのままテストするのがオブジェクト指向として正当なやり方
0612デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:46:08.10ID:M3d71N9d
>>609
> それはunit testにならないよってこと
> privateのメソッドをテストできてないよってこと

publicメソッド経由でテストしますがなにか?
publicメソッド経由でテストするのが大変なものは
設計を変更すべきなんだよ
0613デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:46:12.42ID:pmIasW6W
>>610
public経由でのテストはunit testではないよってこと
0614デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:47:15.08ID:M3d71N9d
>>611
> テストしたいからpublicにするのが間違ってて
> privateのままテストするのがオブジェクト指向として正当なやり方

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

それが難しいなら、それはコードがすでに複雑である証拠なので
複雑なものを直さないでテストすると破綻する
0615デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:47:24.81ID:pmIasW6W
>>612
だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから
本末転倒だってこと
0616デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:47:48.99ID:M3d71N9d
>>613
> public経由でのテストはunit testではないよってこと

その根拠は?お前のユニットテストの定義は?
それはどこで勉強したこと?
0617デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:48:47.27ID:M3d71N9d
>>615
> だからテストのためにオブジェクト変えてるのはprivateのテストを知らないだけだから

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

privateのテストはpublicメソッド経由でやる
それが難しいなら、コードが複雑だから設計を治す
0618デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:48:55.01ID:1AXxY7r6
>>599
アメリカの某有名パッケージだね。

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

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

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

千人のデベロッパーに五百人のテスターで組み込みとかやらないでしょ。
いや知らんのでイメージだけど。
0619デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:49:13.09ID:pmIasW6W
>>614
public経由したらunit testではないよってこと
privateメソッドをテストすることは難しいことではないよ
0620デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:49:55.50ID:M3d71N9d
>>619
> public経由したらunit testではないよってこと

だからその主張の根拠は何?
お前のオレオレルールの話なんか
何のやくにも立たないだろ
0621デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:50:29.94ID:MJUVFEDB
誰のためにユニットテストするの?w
語ってるべき論は誰かを想定しちゃってない?w
0622デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:50:46.08ID:pmIasW6W
>>616
unit testは最小単位だから、世界共通の定義
publicを経由してたら内部でどんなにprivateなメソッドを呼び出しまくってても
unit testになるなんて、定義はどこにもないのでpublic経由はunit testに当てはまらない
0623デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:51:29.32ID:MG3qPS+J
名前をつけるとpublicだろうがprivateだろうがテストしなきゃいけない
→つまり無名にしてその場で使い捨てればテストしなくてOK!
0624デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:51:49.54ID:M3d71N9d
もう答えがすでに出てる話をまだづつても無意味なんだけどな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つの考え方があります。

パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
0625デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:52:44.14ID:pmIasW6W
>>617
privateのテストはprivateを直接テストしないとunit testにならないよ
0626デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:52:52.72ID:M3d71N9d
>>622

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

それはお前の定義であって、なんの根拠もないことはわかってる
0627デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:53:29.28ID:M3d71N9d
>>625
> privateのテストはprivateを直接テストしないとunit testにならないよ

何度も「根拠を言わないことを繰り返す」のは
根拠がないからってことだよねw
0629デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:53:42.19ID:pmIasW6W
>>624
誰だよそれ、YouTuberか?
権威主義的に誰かにすがりつくような真似をするな!
0630デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:54:47.69ID:pmIasW6W
>>627
根拠は示したけどね、理解する気がないだけなんじゃない?
0631デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:54:52.11ID:M3d71N9d
>>628
> テストのために、コード書き換えてどうするんだよってね。

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

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

目的を理解してるか?
0635デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:56:48.02ID:pmIasW6W
>>632
TDDとか知らないの?
0636デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:57:31.94ID:czCytfqY
>>631
おめーこそ、テストの目的を理解してんのか、カス。
privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。
それを外部から呼び出して単体テスト合格とかふざけんな。
テストなめてんだろ。
0637デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:58:00.26ID:M3d71N9d
>>635
TDDで有名な人の名前って知ってる?


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

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


> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> パブリックメソッド経由でテストする
https://twitter.com/5chan_nel (5ch newer account)
0638デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:58:12.80ID:pmIasW6W
>>633
有名な人を自分は知ってるんだ、だから自分が正しいんだって論旨かの?
その人のことを君は知ってるんだ、すごいねwww
0639デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:58:45.56ID:M3d71N9d
>>636
> おめーこそ、テストの目的を理解してんのか、カス。
> privateが記述されているってことは、外部から呼び出したら駄目なメソッドだ。

↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw
0641デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:59:33.33ID:pmIasW6W
>>637
知らない、誰それ、興味もない
人の名前覚えて品質の高いプログラム作れるようになるわけじゃないし
そういうこと頑張ってるのってただの意識高い系じゃない?www
0642デフォルトの名無しさん
垢版 |
2020/07/04(土) 11:59:35.76ID:M3d71N9d
>>638
> 有名な人を自分は知ってるんだ、だから自分が正しいんだって論旨かの?

そこはさぁ、専門家が言っていることは正しいんだって言うべきじゃね?w

専門家以外に、誰を信じればいいのか知らんが
0644デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:01:48.43ID:M3d71N9d
なぜ日本でTDDの専門家といって一番目に出てくるような人を知らないで
テストの話について語っているのか?
勉強したら必ず何度も目にする名前だろうに
0645デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:05:38.40ID:pmIasW6W
>>643
僕は@t_wadaさんを知らないだけですよ

有名な人の名前を知ってるから自分はテスト技術に興味があって正しい知識を持ってるんだって思ってる?
論理を無視した権威による詭弁としか思えないし、それってただのマウンティングにしかならないんじゃないですか?

俺はt_wadaさんのこと知ってんだぞ!!おめーどーなっても知らねえからな!みたいな中卒ヤンキーのマインドを
お持ちなのはわかったけど、議論の向き先としてそっちで良いのって僕は思いましたよ
0646デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:06:25.67ID:M3d71N9d
> 僕は@t_wadaさんを知らないだけですよ
その意味がわかってないんだろ?

お前は勉強した必ず目にする名前を知らないって言ってるんだよ
つまり勉強したことがないってこと
0647デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:07:22.80ID:XvIYAIJA
いいんじゃね、全てのメソッドをテストしたけりゃすればw
ただそれを強制されてることが一般的だと思って奴がいるのは滑稽だなw
0648デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:08:56.81ID:pmIasW6W
>>646
人の名前覚えて悦に入る人の心境がわからないんだよなー
僕はプログラムのことにしか興味がないから
誰がそれを書いたのかよりも書いてある内容の方に興味がある
執筆者の名前を覚えて勉強した気になってるだけじゃないの?
0649デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:09:30.14ID:M3d71N9d
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。

テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)

プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)

まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0650デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:10:37.41ID:M3d71N9d
>>648
> 誰がそれを書いたのかよりも書いてある内容の方に興味がある

>>649にあなたが興味があるはずの「内容の方」書きました。
本当に興味があるなら読んでね(読まないだろうけどw)
0651デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:14:01.28ID:pmIasW6W
>>650
著作権法に違反してない? 大丈夫?

僕はt_wadaさんを知らないし、信奉する立場でもないので
t_wadaさんがそう言ってるからそうなんだと思うことはないよ

内容に興味があるっていうのは、書いてあることをそっくりそのまま
自分の考えにするということではなくて自分の経験や知識に照らし合わせて
自分の考えを持つってことだよ

僕はその文章を読んでprivateメソッドをテストするべきだと思った
0652デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:15:48.22ID:M3d71N9d
> 著作権法に違反してない? 大丈夫?

もはや技術の話に反論できなくなったか
引用の範囲で著作権は関係ないな(爆笑)

> 僕はt_wadaさんを知らないし、信奉する立場でもないので
あのさぁ、お前。「t_wadaを知らない」という人の話じゃなくて
その人が言った内容についての話をしろよ
0653デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:16:19.37ID:M3d71N9d
> 僕はその文章を読んでprivateメソッドをテストするべきだと思った

それはあなたの感想です。考えは何も述べていません。
0654デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:18:15.28ID:czCytfqY
>>639

> ↑それ(外部から呼び出したらだめだ!)はテストの目的じゃないよw

別に、デバッグ目的で一時的にprivateメソッドを呼びたいのなら、勝手に呼んでどうぞ。
だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。
本来、呼ばれないはずのprivateだったメソッドが呼ばれてしまえば、本来、不合格だったはずのカバレッジテストに合格してしまう可能性が出てくるし、privateメソッドを呼んだことで、本来ありえないクラス内部状態を作ってしまったら、単体テストの結果も変わってしまう。

テストは本番と同じ状態を保たないと駄目だよ。
プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?
0656デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:19:46.76ID:M3d71N9d
>>654
> だが、テスト工程...特に単体テストでprivateをpublicにするのはアウト。

ウォーターフォール開発?
テストで問題が出ても問題を上流に戻したらだめって
バグが出ても直したらいかんのかよw
0657デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:20:53.65ID:M3d71N9d
>>654
> プログラマーの開発工程におけるデバッグ及び動作確認とテストを混同させていないか?

今はプログラマーの開発工程におけるデバッグの話ですよ?
動作確認でprivateメソッドを呼んでテストなんてしませんから
0658デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:21:57.39ID:pmIasW6W
>>652
大丈夫かなって正直に思っただけ、君が引用だと思っててもt_wadaさんが勝手に転載してんじゃねえ
ぶっ殺すぞと思ってたらやばいじゃん、t_wadaさんって人を僕は知らないから
君がすごくぶっ殺されたりとかしないかなって思っただけ

t_wadaさんの話を振ったのは君ですよ
t_wadaさんを知らないのかー遅れてるーうひょーって有頂天になって書き込んでたのは君ですよ
僕は内容の話をしましたよ
0659デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:22:14.55ID:czCytfqY
> テストは本番と同じ状態を保たないと駄目だよ。

これを曲解されても困るから補足説明するけど、単体テストって、クラス単体のテストのことな?
クラスを動かすための環境は自由に変えてもいいけど、クラスそのものを弄りかえるなって意味だからな?
0660デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:24:12.62ID:xAj06qrt
テストがでかけるアサートと本番動作は普通は異なるがな。
なんでも統一させようとして無理が出るから public, privateの議論はくだらんなと思うわけだ。
0662デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:33:59.87ID:M3d71N9d
>>658
やっぱりまだ人の話を続けるんですねw

t_wadaさんが言った「内容」の話をしましょうね
負け組おじさんw
0664デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:35:58.47ID:M3d71N9d
>>660
クラスを動かすための環境というのはクラスの外界ってことはわかってるか?
クラスの外界は変えていいから、テストコードから呼び出すし
クラスの中で呼んでいる外界をモックやスタブで置き換えていいんだよ
0665デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:37:35.05ID:exw+beGf
テストの前提として、テストされるコードをいじってはいけない
テストのためにコードをいじってテストが終わったらコードを戻すんだと
本来のコードが仕様通り動くことが保証できない
いじるのなら納品物が変わってくる
0666デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:38:43.12ID:pmIasW6W
>>662
t_wadaさんを知らないのかーって言ったのは君で
これがt_wadaさんの神々しい高貴な文章なんだーと引用したのは君じゃん

僕はそれを読みました。読んだ感想を今から言います。よく聞いてください。
privateメソッドをテストするべきだと思いました。
0667デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:43:46.70ID:M3d71N9d
>>665
> テストの前提として、テストされるコードをいじってはいけない
> テストのためにコードをいじってテストが終わったらコードを戻すんだと

いるじもなにもコードなんか変更しないだろ
0668デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:44:39.72ID:M3d71N9d
>>666
だからお前の感想は聞いてないって言ったよね?
少しはまともな意見も言えるかと思えば感想しかいない。
まあ意見を言った所で専門家よりも説得力がでるとは思えないがなw
0669デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:47:54.13ID:9ghyGMpS
>>654
ユニットテストする時は原則毎回新しいインスタンス作るので内部状態はリセットされるよ。
シングルトンがユニットテストやりにくいって言われる理由はこれ。
0670デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:48:05.39ID:M3d71N9d
>>666
> t_wadaさんを知らないのかーって言ったのは君で

それは違うよねw

俺がとある専門家の「意見」を持ってきたら、
そいつは誰だーって言い出したのはお前だよねw

↓はい証拠

629 名前:デフォルトの名無しさん[] 投稿日:2020/07/04(土) 11:53:42.19 ID:pmIasW6W [22/31]
>>624
誰だよそれ、YouTuberか?
権威主義的に誰かにすがりつくような真似をするな!
0671デフォルトの名無しさん
垢版 |
2020/07/04(土) 12:58:30.51ID:wkevF9GB
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
0672デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:01:25.78ID:M3d71N9d
専門家の意見としては

パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。


別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
0673デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:02:51.44ID:pmIasW6W
>>670
君が先にその人を出して
僕が誰それなんでそんなの書いたのって聞いただけだよ
そしたら君がt_wadaを知らないのかーって有頂天になったんじゃん

君はt_wadaさんに憧れてるんでしょ?
だからt_wadaさんが書いた文章を引用したんでしょ
憧れとは理解とは最も遠い感情だってプリキュアが言ってました

僕が誰に憧れてるかはわかりますね?
0674デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:06:20.56ID:M3d71N9d
>>673
> 僕が誰それなんでそんなの書いたのって聞いただけだよ

だから人に興味があるってことだよね?

無名の人なら、そんな無名なんか知るかー
有名な人なら、権威にすがるなー
っていうんでしたっけ?w

どちらにしろ意見に興味がなく
最初から「人」に文句をつけようと思って、誰か聞いたんでしょ?
0675デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:10:46.18ID:pmIasW6W
>>674
t_wadaのブログってリンク提示されてもなにそれとしか思わないから
君がt_wada本人でこれが僕の考えだって示したならなるほどそういうことか
privateメソッドはテストするべきだって思うけど

議論の最中にt_wadaのブログを出されても何いってんだこいつとしか思わない
よくよく話を聞いてみると君はt_wadaさんのことが大変気に入っていて
憧れていてt_wadaさんの言うことは絶対だと思っている

君はt_wadaさんの権威にすがってるだけのつまらない人間なのじゃないかと僕は疑っています
0676デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:12:22.76ID:pmIasW6W
外人が書いた本を翻訳しただけで専門家でもなんでもないんじゃない?
0677デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:12:24.10ID:M3d71N9d
> t_wadaのブログってリンク提示されてもなにそれとしか思わないから

はい、内容を呼んでないと自白しましたw
なんのために内容の一部まで引用したと思ってるんでしょうかね

読まずに誰それと「人」に文句をつけるための
質問しかしませんでした。
0679575
垢版 |
2020/07/04(土) 13:13:09.28ID:sra5+07B
なんで今朝の575からこんなに進んでるの...
0681デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:13:59.57ID:pmIasW6W
>>677
どうしてその内容を引用したの?
君はそれが正しいと思ったの? その根拠は提示できる?
できないでしょ、君はt_wadaを専門家だと思ってて
専門家の言うことは正しいのだ、だから内容が正しいのだと思い込んでいる
だからその内容を引用して何かを示した気になってるだけ
0683デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:14:41.46ID:pmIasW6W
>>678
外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん
0684デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:15:16.84ID:pmIasW6W
>>682
専門家という肩書の権威にすがりつく君のことかな?
0685デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:15:33.49ID:M3d71N9d
>>681
正しい根拠はすでに上の方で何度も言ってるじゃんw
それを補完するために専門家の意見を持ってきただけで
じゃあ反対にお前の言うことが正しいという根拠はなんだよ?
0686デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:15:46.59ID:xAj06qrt
>>665
その辺は結局組織がどうコードを管理するかってだけの話だ。
バカみたいにがんじがらめにした結果誰もコードをいじらない(リファクタリングしない)
ってことにしかならん。
0687デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:16:11.64ID:M3d71N9d
>>683
> 外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん

翻訳「も」してるだけだろw
0688デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:17:04.15ID:pmIasW6W
>>668
t_wadaさんの文章はt_wadaさんの感想でしかないよ
0690デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:18:06.68ID:M3d71N9d
>>688
意見と感想の違いぐらいつけようよw

話は簡単じゃないか
t_wadaさんの意見と
お前の感想

説得力があるかどうかだよ
0691575
垢版 |
2020/07/04(土) 13:18:30.04ID:sra5+07B
とりあえず、落ち着け。
議題がよくわからんが、落ち着け...落ち着くのだ。
0692デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:19:53.55ID:pmIasW6W
>>687
いやいや翻訳だけが全実績じゃん
t_wadaさんがprivateメソッドをテストせずにとても
すばらしいシステムを構築していま全世界で使われてますってことないじゃん

翻訳したからまるで本物の執筆者のように思われてあたかも専門家のように思い込まれてるだけで
専門家でもなんでもなくただの翻訳者だよ
0694デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:21:46.90ID:pmIasW6W
>>690
君が説得力を感じたら意見になり、
説得力を感じなかったら感想になるってだけじゃんそれ
なにそのガバガバな日本語運用

わかりましたでは今から僕が君を説得してみせます、よく聞いてください
privateメソッドはテストするべきです
0695575
垢版 |
2020/07/04(土) 13:21:53.40ID:sra5+07B
>>693
それもそうか(諦め)
内容は読んでないけど、まぁ、ROMるか。
0696デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:22:11.62ID:M3d71N9d
>>692
なんでググらないでウソ書くの?
そうやって他の人を騙そうとしてるでしょ

https://t-wada.hatenablog.jp/entry/clean-code-that-works
職業はコンサルタントであり、プログラマです。最近では技術顧問としてもいくつかの会社を支援しています。
また、自分の自由になる時間には、オープンソースソフトウェアの開発を行っています。
本業はプログラマでありコンサルタントですが、副業としては技術書の出版、具体的には監訳や翻訳に関わっています。

JavaScript でテストを書く際のハードルを大幅に下げるために開発した power-assert は、
Mocha や Jest と組み合わせて使え、 AVA には既に内蔵されており、ありがたいことに世界中で使われるプロダクトまで育ちました。

ひとつ例を挙げるなら、アリババグループで採用頂き、アリペイやアリババクラウドのテストに使われているという話です。



んで、こういう人に比べて、お前はなにかすごいことしたの?
0697デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:25:12.35ID:pmIasW6W
>>696
営業努力の賜物やろな、頑張ってるんやなt_wadaさん

僕がなにかしたのかという質問ですが僕はすごいことを発見しました
privateメソッドはテストした方が良いです
0698デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:25:49.67ID:pmIasW6W
ほんまt_wadaさん好きやな
0700デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:31:25.64ID:pmIasW6W
>>699
他人に憧れをいだいて必要以上に持ち上げるのが僕は気持ち悪く感じます
僕はすごい人ですが、君に憧れられるのは気持ち悪いです、なのでごめんなさい
0701デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:31:55.08ID:pmIasW6W
振ってしまってなんかごめんなさい
0702デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:33:19.09ID:pmIasW6W
他人を必要以上に持ち上げるのって自分に自信がない人がやりがちなので
アドバイスするとしたら色々経験したがいんじゃないかということですね
0703デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:34:54.50ID:KKcCItOc
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
0704デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:48:28.05ID:iuca8iKQ
根拠が聞けるかなと思ったターンで
他人の引用を持ってきて権威に頼っただけである場合
議論は終了である
続ける価値がないから
0705デフォルトの名無しさん
垢版 |
2020/07/04(土) 13:50:52.32ID:M3d71N9d
いえ、自分と同じ意見を言ってる人を持ってきただけなので
話は続いてますよ?

でもなぜか、話の続きをやめてしまっているのです。
なぜでしょうね(笑)
0706デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:09:00.83ID:xhESn47n
プログラム板でコード使って語りもしない時点で両者どちらも無能
プログラマならコードで主張
0707デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:17:35.76ID:pmIasW6W
>>706
有能さんあざーす!コードどこ?
0708デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:19:05.65ID:JeoapmHS
privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?

一方の極は、privateメソッドには極めて単純なことしかさせず、少しでも複雑な内容なら(他のヘルパークラス等の)publicメソッドに切り出すスタイル。
「privateはpublic経由でのみテストする(直接はテストしない)」という方針を採る場合には、privateメソッドの内容は非常にシンプルな内容に限らざるを得ないし、逆にそうしないと>>555指摘の組み合わせ爆発の問題を回避できない。
>>624>>649で紹介されている議論や、>>588はこの立場なんだろう。
このスタイルでは、下記のスタイルでは1つのprivateメソッドで処理できる内容を、複数のクラスに属するメソッドの協調関係で処理することになる。
これを適切な機能分化がされていると肯定的に捉えるか、必ずしも汎用性があるわけではない小さなヘルパークラスが増えることになり、見通しが悪くなると否定的に捉えるかは考え方によるだろう。

もう一方の極は、privateメソッドだからといって、内容をシンプルに限らなければいけない必然性はないというスタイル。>>589は、こちらの立場なんだろう。
このスタイルでは、public経由でprivateのテストをするというのは現実的ではないから、privateメソッドでも直接テストの対象とすることが必要になる。言語機能の関係でprivateを直接テストすることが難しい場合には、テストのやり方に工夫が必要になる。
メリット・デメリットは前記のスタイルの反対。

こんなふうに整理できるんじゃないかと思うが、どうだろう。
0710デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:20:14.26ID:pmIasW6W
>>709
でも僕無能だからコードないよ
君有能だからコードあるよ
早く出すよ
0711デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:22:23.00ID:xhESn47n
>>710
俺は別にプログラムのこのスレタイについて主張したいことないからなあw
君はプログラマでプログラムについて何か主張したいんだろ?
0712デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:23:09.56ID:kiJuYkd6
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
0713デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:23:22.38ID:pmIasW6W
>>711
関係ないよ、早くコード出すよ
0714デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:23:44.26ID:pmIasW6W
早くコードだすよ!
0716デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:28:29.45ID:pmIasW6W
www
0717デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:33:12.47ID:xhESn47n
このように、コードを使わず偏った主張するやつはだいたい頭がおかしい
この板ではこうやって簡単にこういう奴をあぶり出しできるんよな
0718デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:34:10.41ID:pmIasW6W
>>717
君、コード出してないよ
コード出すよ
0719デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:34:57.85ID:pmIasW6W
早 く コ ー ド 出 す よ !
0721デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:56:58.97ID:M3d71N9d
>>708
> privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?

privateとかpublicとか関係なく、複雑なことをやらせるなよ
関数はせいぜい一画面程度(50行)ぐらい、大半は20行以下にするもんだ
0722デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:00:38.98ID:pmIasW6W
はいはいどうせt_wadaがそう言ってたんだろ
0724デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:02:35.63ID:M3d71N9d
権威ある専門家が言ってることだから間違ってます
俺は認めませーんって。どういう気持で言ってるんだろうねw
0725デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:04:45.61ID:M3d71N9d
俺は「そいつは権威ある専門家だ!」って指摘しただけで
勝ったつもりにはなれないなぁ(笑)
0726デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:05:05.57ID:pmIasW6W
t_wadaはなんて言ってるんだよ!
0727デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:05:39.57ID:pmIasW6W
t_wada原理主義
0729デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:07:21.60ID:gUMCer1d
今までたくさんのキチガイPGを見たが
privateメソッドだからテストしないとか言ってるやつだけは許さない
テメーの金玉はここで潰す
0730デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:10:41.07ID:pmIasW6W
ごりごりーごりごりー
そうだ!すりつぶした粉で大根餅作ろうよ!
0731575
垢版 |
2020/07/04(土) 15:11:12.87ID:sra5+07B
>>729
問題なのは、そのprivateの挙動をどうやって確認するのかって話なのかな?

単体テスト?総合テスト?それとも実装中しながらのデバッグ作業の話?

正直、未だにどこで揉めているのかわかりません。
誰か議題教えて。
0733デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:14:01.93ID:M3d71N9d
>>731
1. public、privateに限らずコードはシンプルにするべき
2. シンプルであるなら、privateはpublicメソッド経由でテストできる
3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる
4. 設計上の問題はバグと言ってもいい。バグなんだから直せ

ここまではあってる
0735575
垢版 |
2020/07/04(土) 15:21:35.25ID:sra5+07B
>>734
なんで、スレの流れに沿って説明しただけの俺がゴミカス呼ばわりされるのかもわからん。何このスレ。
>>576 >>578でも俺の意見ですらない部分に的外れな回答がつくし。
0736デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:24:14.77ID:M3d71N9d
動けばOKって考えてる人がどれだけ多いかだな
テストを自動化するという考えがない
シンプルな設計をするという発想がない
動けば設計に問題はないと考えている
0737デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:29:27.53ID:pmIasW6W
>>735
Welcome to Underground
0740デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:39:15.86ID:e19OrKR5
なんかやべえ流れになってるな
とりあえずつっこんどくと
1. unitテストの定義に世界共通の定義など存在しない
2. unitテストという単語はプロジェクト用語であり、プログラム用語ではない
3. マーティンはunitテストという単語と自動テストの単語わけたらいいんじゃない?と提案してる。xunit
4. publicとprivateはクラス設計のため、もっと言えばクラス間の責任範囲のために存在している
5. xunitテストのためだけにprivateをpublicにするのは誤り。本当にやりたければリフレクションでもすればいい
6. c2カバレッジ100%するかどうかは分野次第
7. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある
0741575
垢版 |
2020/07/04(土) 15:57:07.88ID:sra5+07B
ちなみに、的はずれって100%君のことね。まぁ、そんなの今更どうでもいいか。

実際、クラスをどんな風にテストするのか興味あるね。
0743575
垢版 |
2020/07/04(土) 16:32:24.22ID:sra5+07B
そんなー。
0745575
垢版 |
2020/07/04(土) 16:36:24.03ID:sra5+07B
まぁ、Android開発(アセンブラレベルからJavaアプリレベル)をやってるから、たぶん、大丈夫なはず。

組み込み=staticおじさんのレッテルが貼られがちだけど、
私はstaticおじさんじゃないんだけどなー...。
まぁ、アセンブラレベルの階層になると、オブジェクト指向要素なんて微塵もないけど。
0746575
垢版 |
2020/07/04(土) 16:37:37.70ID:sra5+07B
>>744みたいな知的障害者が時々沸くのはなんで?
0747575
垢版 |
2020/07/04(土) 16:46:14.68ID:sra5+07B
もういいや。アホくさ。こんなスレ覗いたのが間違いだったな。
人生を無駄にした気分だ。
このスレを覗く時間を使って別して作業してた方が有意義だったよ。

>>744
君はID変えながら死ね死ね連呼しているみたいだけど、気を付けた方がいいよ。あばよ、中身がない死ぬべき技術者さん。
0748デフォルトの名無しさん
垢版 |
2020/07/04(土) 16:53:03.01ID:4XE5L1k5
プ板、と言うか専門板なんてそれぞれの話題を餌にマウント取り合ったり罵り合ったりする所だから。
相手にしたら負け。
0749デフォルトの名無しさん
垢版 |
2020/07/04(土) 17:09:48.00ID:O/jhkl6h
言語の制約によって思考が制約されてる典型例

カマッてくれる人が量産されて>>1が喜んでる
0750デフォルトの名無しさん
垢版 |
2020/07/04(土) 18:16:38.54ID:sCZUG34Z
privateメソッドのテストしないとか言ってるカスとまともに会話するメリットないだろ
0751デフォルトの名無しさん
垢版 |
2020/07/04(土) 18:35:31.64ID:gmurOIZf
まあテストやるって言ってもこれくらい意見が違って揉め事になるってのは
結構普通だったりするからそういう勉強にはなってるんでないの。
0752デフォルトの名無しさん
垢版 |
2020/07/04(土) 20:02:50.07ID:M3d71N9d
このスレの結論

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

パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。

テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)

プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)

まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
0753デフォルトの名無しさん
垢版 |
2020/07/04(土) 21:00:07.43ID:42LT/T3f
>>752
三行以上は読んでもらえないから工夫が必要。
0754デフォルトの名無しさん
垢版 |
2020/07/04(土) 21:07:29.85ID:n1PM9L+Z
ガワだけのクラスが出来上がるな

#include <iostream>
using namespace std;

class Test{
private:
int methodPrivate(const int x)const{
return 2*x;
}
public:
int method(const int x)const{
return methodPrivate(x);
}
};

int main() {
Test test;
cout << test.method(3) << endl;
return 0;
}

この調子で全部のメソッドにペアになるprivateメソッド作って徹底的に隠蔽してしまえば、相手から調査されることはない

そして上流の方から指定されているメソッドはスッカラカン
実質的に何もしない
名前があるだけ

この技法をprivate開発と名付けよう
相手側に技術が流出することがない
0758デフォルトの名無しさん
垢版 |
2020/07/04(土) 21:43:15.97ID:pmIasW6W
僕の高い知性と豊富な経験に基づく主張を聞いて欲しい
privateメソッドはテストした方がいい
0759デフォルトの名無しさん
垢版 |
2020/07/04(土) 21:56:15.32ID:gmurOIZf
>別クラスのパブリックメソッドとする
>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
>プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
>プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これだけは意味ある意見ではあるな。他はカスみたいな理由だが。
0760デフォルトの名無しさん
垢版 |
2020/07/04(土) 22:11:41.53ID:42LT/T3f
カバレッジ測定ツール高いし持ってないので、private直接テストしたい。
0761デフォルトの名無しさん
垢版 |
2020/07/04(土) 22:19:33.61ID:O/jhkl6h
>>759
>>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>>示唆している場合があります
わかる

>>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これは選択肢の一つであって常にそうすべきなわけではないんだよね
クラスの分割基準とテストを書く書かないの基準は別だから
0762デフォルトの名無しさん
垢版 |
2020/07/04(土) 22:19:58.28ID:O/jhkl6h
プライベートだとテストしにくいので、パブリックメソッドとして抽出し、普通にテストしましょう
これが本音
0764デフォルトの名無しさん
垢版 |
2020/07/05(日) 00:43:13.75ID:9F15TCk0
プライベートがテストできるということはホワイトボックスなわけでユニットテスト段階でしょ。
そもそもプライベートをテストするにはソース自体書き換えないと呼べないじゃん。

ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
なったらブラックボックスが普通。

てかもはやテストの話でカプセル化やOO関係ないな。
0765デフォルトの名無しさん
垢版 |
2020/07/05(日) 01:18:10.47ID:LRfXHt7v
ホワイトやブラックについて語るのは時期が悪いというか、国家を危険にさらす可能性さえあるからね。

もう少し社会情勢に気を配ろうよ。
0766デフォルトの名無しさん
垢版 |
2020/07/05(日) 01:32:28.51ID:LRfXHt7v
昔のホームページにはサイタマップというものがあった。
0768デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:11:14.07ID:58eR5uXa
>>764
> ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと

まさかpublic・privateメソッドのテストをテスト工程でやる、
public・privateメソッドを書いた人と別の人がやるって思ってないか?

public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
当然ソースを書いて(書き換えて)テストするに決まってるじゃん

お前は、その後の(統合)テスト工程でソースコードを変えてテストとか言ってるだろw
0769デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:46:27.47ID:9F15TCk0
>>768
なんなのその口調気持ち悪い。

大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
デベロッパ個人のテストはコーディングの範疇なのでもちろん個人ではやるが
それほど大事ではない。

組み込みで車のブレーキ制御とかは全く別の話だろうがOOとかカプセル化とは
基本かけ離れた分野。
0770デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:48:43.07ID:LRfXHt7v
テストしない理由を考えるのは。
0771デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:50:28.66ID:58eR5uXa
>>769
> 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。

大規模開発だとpublicやprivateメソッドのテストを別の人がやるって?
テストコード専用に書く人でもいるのかよw
それはどこの話だ?事例の一つぐらい持ってきてから言え
0772デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:51:54.42ID:9F15TCk0
>>771
某アメリカ製のパッケージとかだな。

むしろテストコード専門に書く人いないのかよ。じゃあOOとかカプセル化とか
必要なほどの規模じゃないか体制がおかしいな。
0774デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:54:30.54ID:58eR5uXa
ユニットテストのコードを他の人が書いて、どうやってTDDをやるのか不思議なんだがw

先にテストコード書く人がテストコードだけ書いて、
これに通るように実装しろ!
これがTDD(テスト駆動開発)だ!
とか言ってる所とかでもあるんか?

事例を持ってきてくれ
0775デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:56:40.99ID:9F15TCk0
だからユニットテスト自体が少なくともビジネス分野では大事じゃないと
上にも書いてあるが。

事例なんか出せるわけないだろ。中の人なんだから。
0776デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:58:40.47ID:LRfXHt7v
製品についてネットに書き込むときは、法務と企画のハンコ必要なので。
0777デフォルトの名無しさん
垢版 |
2020/07/05(日) 02:59:12.87ID:LRfXHt7v
ちなみに法務俺、規格俺だけど。
0778デフォルトの名無しさん
垢版 |
2020/07/05(日) 03:03:18.34ID:9F15TCk0
今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
億の分岐を全部全パターンテストするの?

テストなんてそのあとファンクショナルやってリグレッションやってアクセプタンスやって
ってあるのに、ユニットテスト「だけ」でそれでしょ?

サグラダ・ファミリアかな?
0779デフォルトの名無しさん
垢版 |
2020/07/05(日) 03:03:49.83ID:58eR5uXa
>>775
中の人だから事例が事例を出せないってことは、
お前の会社以外でやってないってことだろw
0780デフォルトの名無しさん
垢版 |
2020/07/05(日) 03:04:01.72ID:LRfXHt7v
正しいとか正しくないとかどうでも良いので、privateのテストをさせてほしいものですね。
0781デフォルトの名無しさん
垢版 |
2020/07/05(日) 03:05:23.08ID:58eR5uXa
>>778
> 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
> 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
> 億の分岐を全部全パターンテストするの?

それユニットテスト関係ないよね?

手動で全パターンをテストするの?
答えはお前自身が言えるはずだよね?
0782デフォルトの名無しさん
垢版 |
2020/07/05(日) 03:06:25.42ID:58eR5uXa
ユニットテストなんかしてねーよ
ソース修正するたびに、
億の分岐全パターン手動テストしてるんだよ!

って言ってほしいな?
まだかな?
0783デフォルトの名無しさん
垢版 |
2020/07/05(日) 03:13:56.54ID:LRfXHt7v
けんか腰は知能が高いと言われるム板に似合わないんだよな。
ユーモアを交えて会話するべきだと思います。
0784デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:06:24.23ID:9F15TCk0
>>779
知ってる限りGAFAでもERP各社あたりでもやってないけどね。

試しに(ドイツだが)SAPあたりにカバレージどれだけですかって聞いてみれば?
何それ美味しいの?だよ。

まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は
おしまい。
0785デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:11:13.84ID:58eR5uXa
ではGoogleの事例

https://feb-acchan.hat
enablog.com/entry/2018/03/11/214344

現状について
Googleでは、420万ほどのテストが存在して、1日1億5千万テストケース
実行されていて(150million test execution/dayだからあってますよね?)、
1テストケースあたり35回実行されているらしいです。

そして、これらがすべて自動テストであり、手動テスト率が驚異の0%!
ただし、UX系のテストは手動だそうです。
UIのテストなどは自動化できるが、UXはさすがにまだ人手とのことで、
人の感覚などが関係するUXテストがAIによってテスト可能で人の仕事が無くなるといった日はまだ到来していません。

自動テストですが、毎テストごとに420万テストケースを実行しているわけではなく、
全テストケースを実行するのは一定の間隔で、普段は修正に対して依存があるテストだけを実行しているそうです。
0786デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:13:30.65ID:58eR5uXa
Googleの考え方

https://www.publickey1.jp/blog/11/post_144.html

テスターはデベロッパーがテストできるようにするのが仕事
このようにEngineering Productivityのメンバーのレポートラインと
所属を分けることのメリットを、Whittaker氏は次のように書いています。
ここにグーグルの品質管理の大事なポイントがあるようです。

一般にテストは製品開発の最後の段階で行われることが多く、製品チーム/開発チームの
中にテストチームを抱えても、テストフェーズ以外は手持ちぶさたになってしまうため、
多くの開発組織ではテストチームは製品チーム/開発チームとは別に存在し、
必要なときに登場してテストを行う、というケースがほとんどです。

====以下重要====

ところがグーグルではEngineering Productivityに属する、テストのノウハウを持ち支援を
行うエンジニアたちは、前述のように各製品チームに所属しています。

そう、グーグルではテストチームではなく、製品チームが自身で品質管理を負っている。
各デベロッパは自身でテストすることを期待されている。テスターの仕事は、自動テストの
インフラを確立することと、それによってデベロッパ自身がそれをプロセスの中で実行できるようにすること。
テスターはデベロッパーがテストできるようにするのだ。

各製品チームは、Engineering Productivityのメンバーの支援を受けつつ、自分たちの責任で
テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。
0787デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:14:26.63ID:58eR5uXa
https://www.publickey1.jp/blog/11/post_144.html

Whittaker氏はさらに次の記事「How Google Tests Software - Part Two」で、
エンジニアに与えられる3つの役割についても触れています。

Softweare Engineer in Test(SET)
テストのしやすさ(Testability)にフォーカスした役割。デザインレビューをし、
品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。
ユニットテストや、テストフレームワーク、自動テストも書く。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0788デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:16:28.52ID:58eR5uXa
「コードをテストしやすいようにリファクタリングする。」

っていうのがまさにprivateでテストしたいのに
public経由でテストできない

ならばテストしやすいようにリファクタリングしましょうって話になってる
0789デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:18:26.54ID:58eR5uXa
https://monoist.atmarkit.co.jp/mn/articles/1705/24/news008.html

C/C++かつxUnit系ツールは、数分調べるだけでも数種類見つかります。
今回はその中の1つ「Google C++ Testing Framework(以下、GoogleTest)」の
使い方を紹介します。

Google Testとは、IT業界の巨人、グーグル(Google)製の
単体テストフレームワーク(C/C++用)です。MinUnitと比べて高機能で、
さまざまな使い道があります。ただし、MinUnit同様、テストコードを記述するため、
C/C++をある程度知ってることが前提です。
0790デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:19:35.40ID:9F15TCk0
>>785
テスト件数が問題なのではない。オートメーションすればファンクショナルレベル
でのテストはいくらでも流せる。

新しいファンクション・メソッドを書くたびに、あるいは変更をするたびに
全ての条件を網羅して、それをテストケースにして、コード自体をモディファイして
テストした後、結果をドキュメント化してまたコードを元に戻すということはやらないという話。

プライベートのファンクション・メソッド単位でC2100%テストしていくというのは
そういうこと。
0791デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:22:02.73ID:58eR5uXa
米Google、JavaScriptユニットテストフレームワーク「JS Test」をオープンソースで公開
https://mag.osdn.jp/11/10/03/1012250

米Googleは9月29日、JavaScriptユニットテストフレームワーク「Google JS Test」を発表した。
元々はGoogle社内のプロジェクトで利用されていたもので、ライセンスはApache License 2.0。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0792デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:27:51.71ID:9F15TCk0
いや、だからそういうツールがあるのなんて常識だが、privateはテストしない。
上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、
そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを
全パターンするわけでは、当たり前だけど、無い。

クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは
当然ある。
0796デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:34:11.33ID:58eR5uXa
憶測に基づいた発言はいらないよ?
俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ
0797デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:34:11.73ID:LRfXHt7v
テストの専門家だからそう思うのでは。
0798デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:49:06.73ID:LRfXHt7v
完ぺきにテストしたからといって製品の完全性を保証することはできません。
したがってテストしないほうが良いのです。
0799デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:52:22.10ID:58eR5uXa
ほらなw

完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです

と言い始めた
事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。
ここから荒らしと変貌する前触れだな
0800デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:53:23.27ID:LRfXHt7v
食いついてきた。
嘘みたい。
0801デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:58:23.98ID:LRfXHt7v
privateもテストさせていただけるとありがたいけど、禁止するのが正しいことになってるからな。
0802デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:59:58.66ID:LRfXHt7v
Visualstudioのテストエクスプローラを使うと考えが変わるのでは。
道具の問題かもしれない。
0803デフォルトの名無しさん
垢版 |
2020/07/05(日) 05:53:15.48ID:9F15TCk0
ユニットテストというのはプロジェクトによってかなり幅があるわけで、
当たり前の話だがテストオートメーションのプログラムが勝手にコード
弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。
0804デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:05:37.56ID:58eR5uXa
↑みたいなことを言ってるやつがGAFAは〜と
なんのソースもなしに言ってるわけだよ
こんなやつの話を聞くやつがいると思うかね?
0805デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:06:03.12ID:9F15TCk0
ずれるかもしれないが下のような場合、privateにnullを突っ込んだらヌルポだが
privateをわざわざコード弄ってまで別にテストするようなことは少なくとも
ビジネスソフトでは知ってる限り無い。組み込みとかは知らんし必要ならやれば良いけど。

class ChinTester {
public void testChin(int[] len) {
if (len==null){System.out.println("You are a woman");
return;}
if (len.length<11){ uncS(len);}
else{funcB(len);}
return;}

private void funcS(int[] len){
if (len.length<9){System.out.println("Smallest");
}else{System.out.println("Smaller");}
return;}

private void funcB(int[] len){
if (len.length<14){System.out.println("Medium");}
else if (len.length<16){System.out.println("Bigger");
}else{ System.out.println("Wow!");}
return;}
}
0806デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:21:04.56ID:9F15TCk0
あと日本のNTTデータから降りてくるような大企業案件とかもやったことが無いので知らん。
アメリカのビジネス系一般の話。
0809デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:33:43.45ID:M+BkbwUs
1. 関数名が意味不明
2. インデントがめちゃくちゃ
3. スペースを入れる所が統一されていない
4. lenが配列なのはなんでだ?
5. nullを情報として扱うな
6. 戻り値なしなのに関数の最後でreturnを書くな
7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな
8. テストするなら、長さを入力し文字列を返す関数を作れ

なんでたったこれだけの関数で
こんなにレビューの指摘項目が存在するんだかw
0810デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:38:43.59ID:9F15TCk0
口調が気持ち悪い人は相手しても仕方ないからほっとくとして、上の例だと(に限らず)
funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
リクワイアメントとエッジケースは全てテストするんだから、無駄にテストが倍以上に
なるしそれも手動になる。

普通のケースだとtestChinに対するテストコード書いて、変更があればそれを流す形になる。
上にさんざコピペが貼られたテストツールはそういうのを自動で流すツール。

テストケース流したいからfuncSとfuncBをパブリックにするというのはカプセル化
できてないし、ましてコード弄ってまでテストするのを手順化するというのは普通はやらない。

書いてる最中にコードちょろっと入れて確認するようなことはあって、それもユニット
テストといえばユニットテストだが、手法としてプロジェクト単位で公式にやるような
ものでは普通は無い。

車のブレーキ制御とかならそこまでやって欲しいが、OOとかカプセル化とはちょっと
違う話。
0811デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:42:42.57ID:M+BkbwUs
> funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
public経由でテストできるだろw
0812デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:45:32.12ID:9F15TCk0
>public経由でテストできるだろw
と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
やっとご理解いただけたようですな。

>>768ではこんな事言ってましたが。
>当然ソースを書いて(書き換えて)テストするに決まってるじゃん
0813デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:47:04.12ID:M+BkbwUs
>>810
他の言語を勉強したほうがいいぞ
どうもお前は、絶対に来るはずがない値が引数に渡された時、
そのテストしろって言ってるようだからな

「絶対にありえない値」なんだから仕様なんて作らない
他の型がない言語だったら、引数に渡されるオブジェクトなんか
それこそ無限に値なんてありえるだから

privateでも、ソースコードを修正して引数渡せるなら
そのテストをかけって言ってるようなもん
0814デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:47:52.42ID:M+BkbwUs
>>812
> と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を

頭悪そうだなw

この場合publicメソッドを呼んだらprivateメソッドを呼び出すんだから
privateメソッドのテストになってるだろ
0815デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:47:57.37ID:9F15TCk0
少なくともグーグルの面接で絶対こないからテストしないとか言ったら
速攻落ちるよ。むしろ絶対こないのをやるものだからね。
0816デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:49:10.31ID:M+BkbwUs
>>768

> まさかpublic・privateメソッドのテストをテスト工程でやる、
> public・privateメソッドを書いた人と別の人がやるって思ってないか?
>
> public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
> public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
> 当然ソースを書いて(書き換えて)テストするに決まってるじゃん

と言ってますが、今の話と何の関係があるんですか?
「誰がテストするか」の話なんですが?
0817デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:50:26.40ID:M+BkbwUs
>>815
だからpublicメソッド経由でテストしてるじゃんw

お前は、内部でprivateメソッドを呼び出しているから
publicメソッドのテストには、privateメソッドがそんな値を返そうが
そのテストは書かないのか?
0818デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:53:15.16ID:M+BkbwUs
例えば>>805 の話だと
testChinがpublicメソッド、そのメソッドのテストとして
引数に1(なんで配列か知らんが)となるものを渡したら
Smallestが返ってくることというテストを書く

それは実際には内部でprivateメソッドを呼び出しているのだからfuncSのテストになってる
カバレッジを計測したら、privateメソッドであるfuncSの該当行は実行した(テストした)と計測される。
0819デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:54:07.51ID:9F15TCk0
え、コーディング中にちょろっとコード書いて動作確認とかを「テスト」って
呼んでたの?そりゃ噛み合わないわ。

開発手法の話をしてる時に「テストする」というからにはテストケースを書いて、
手動にしてもコードにしても実行したログくらいは残すものだが。

君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。
0820デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:56:15.75ID:M+BkbwUs
>>819
どれにレスしてるの?
ユニットテスト(かつ自動テスト)の話しかしてないんだが
お前がどこを呼んでそう思ったのか
具体的に指摘してみて
0821デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:56:44.73ID:9F15TCk0
publicをテストしたらprivateも呼ばれてるからprivate単位でテストしてる!って
ブレブレやなw

publicから呼ばれないprivateなんて一体誰がなんのために書くんだよw
0822デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:57:27.80ID:M+BkbwUs
>>819
> 君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
> 書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。

変更のたびって、お前変更のたびにメソッドの仕様が変わるのか?
いきあたりばったりで開発してるんだな
0823デフォルトの名無しさん
垢版 |
2020/07/05(日) 06:58:49.78ID:M+BkbwUs
>>821
最初からそう言ってるだろ?
ブレるも何も、最初からそう言ってる



> 私の回答
> 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
>
> ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
0824デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:00:51.32ID:M+BkbwUs
あ?まさかprivate関数の処理のテストをすればいいのに
private関数単独ででテストしなきゃだめだって思ってるのかw

あはは、関数単位でテストするのがユニットテストだって思ってるようだな
こりゃ、お・わ・ら・い・だw
0825デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:02:37.00ID:BTTSshKd
メソッド単位でテストしろって言うのが組み込みおじさんだから話にならんよ
0826デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:03:05.56ID:9F15TCk0
なんだこいつ気持ち悪い。
0827デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:07:17.25ID:9F15TCk0
日本語もjavaも通じないからどうにもならない。
突然噛み付いてくる気持ちの悪いのは100%の確率でおかしいな。
0828デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:08:18.45ID:M+BkbwUs
というふうに「技術」の話にレスができなくなったら
「人」(=俺)の話にすり替えるのが常套手段な
0829デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:13:21.25ID:9F15TCk0
というかお前は誰だよ。Private単位でコード書き換えてもやるって言ってる
人間がいたからPrivate単位では通常のビジネス系ではやらないという流れなのに
突然「お前は素人だあ!」とか噛み付いてきても知らんがな。

タブもスペースもトランケートされる2ちゃんでインデントがとかくだらない
ことでマウント取りにくる暇があったらまず日本語を学べ。

以上。
0830デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:21:09.73ID:BTTSshKd
「privateメソッド」を直接テストしろって言う人はどうするのがいいって言うの?

a 全てprivateメソッドに対しても外部にリフレクション等を使用したテストを書くべき
b privateメソッドにアクセスできるクラスなどにpublicなテストコードを書くべき
c もっと言い方法がある、こうだ!
0831デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:22:11.60ID:LRfXHt7v
>>830
王家秘伝の技がある。
0832デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:24:08.15ID:M+BkbwUs
>>830

>>798 じゃねーの?w

> 完ぺきにテストしたからといって製品の完全性を保証することはできません。
> したがってテストしないほうが良いのです。

つまり

privateにしたらテストできません。だからしないほうがいいのです。
完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです
0833デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:24:58.59ID:9F15TCk0
しかしよくチンコのサイズテストwにマジで噛みつけるもんだ。
0835デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:30:17.21ID:M+BkbwUs
Chinってちんこのことだったんだな
funcSとかfuncBとかfoo、barみたいに意味がない単語じゃん
コードがクソすぎて意味が伝わらないいい例だな
0836デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:34:08.81ID:9F15TCk0
無い場合You are a womanで9以下なら小さい、16越えりゃWow!で名前が
チンテスターなんだからわかってる人間は多いだろうな。
0837デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:36:44.58ID:M+BkbwUs
>>836
じゃあint型の配列のlen(長さ)ってどういうこと?
配列がnullなら女で配列が複数あれば男?
何が複数なの?
0838デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:36:59.87ID:9F15TCk0
ちなみにfuncなんとかというのは君の好きなグーグルあたりでも例ではよく使うわな。
BとSもbigとsmallだろうと英語得意なら当たりがつくけどね。なぜABじゃなくてBS
なのか。そもそもoutに出てんだし。
0839デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:38:39.33ID:9F15TCk0
>>837
行があればChinkoクラスを作るとこだがスペースいらないで
intじゃなくてヌルポが出るものがarrayだからそれの長さで表してるだけだよ。
0840デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:44:01.87ID:M+BkbwUs
> intじゃなくてヌルポが出るものがarrayだから
・・・

Java知らんのか?整数かつオブジェクトでも使えばいいじゃないか
具体的には教えてやらんよ。自分で勉強しな
0841デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:46:53.71ID:wXNAUX4A
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
0842デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:49:38.56ID:y7MN16M9
>>824
いや、やってもいいだろ
お前がやりたくないのは「たまたま」VisualStudioでやりにくいってだけの理由だろ
早く死んでね
0843デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:53:17.11ID:M+BkbwUs
こういう事やって、NULLチェックが4倍に増えたー、テストも増えたーって
言ってるやつがいるなんて驚き。馬鹿かとw 以下擬似コードな

public func(value) {
 // valueのNULLチェック
 処理
 処理
 処理
}

public func(value) {
 // valueのNULLチェック
 foo(value);
 bar(value);
 baz(value);
}
private foo(value) {
 // valueのNULLチェック
 処理1
}
private bar(value) {
 // valueのNULLチェック
 処理2
}
private baz(value) {
 // valueのNULLチェック
 処理3
}
0844デフォルトの名無しさん
垢版 |
2020/07/05(日) 07:56:16.74ID:LRfXHt7v
プロは俺だけだったか。
0845デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:03:19.96ID:FjEgCO9/
そもそもprivateメソッドだからテストしないとか言ってるキチガイにまともな返答なんかいらない

そんなのどこの職場でも認められるわけないから
publicメソッド通したprivateメソッドに自分が想定したケースの値が全部入る保証なんかない
ある特定のケースのみそのメソッドの処理が欲しいときにしか呼んでないことあるだろ
つまりメソッド自体のテストはできてないしその方法でコードカバレッジ100%は無理だし
そもそもpublicから呼び出したprivateのコードカバレッジを100%にするなんて
作業が狂気過ぎてまともな脳みそ持ってるやつならやる前に無駄って理解できる

バカは早く死んでね
0846デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:06:02.24ID:M+BkbwUs
そもそもprivateメソッドだからテストしないとか言ってるキチガイには
この言葉を授けよう

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つの考え方があります。

パブリックメソッド経由でテストする
別クラスのパブリックメソッドとする
テスト対象の可視性を(やや)上げる
プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
0848デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
0849デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:25:21.85ID:9F15TCk0
public通したprivateは単体としては怪しいというのはその通りだけど、
そもそも呼ばれないprivateを書くバカはいないわけで、条件があるから
書いてんだよね。で、条件をpublicの段階でテストするわけだから
ほぼ通ってるわけだよ。

上のチンコテストだとnullから16まで流せば全部通る。

違いは、上の例でprivateにnull突っ込んだらヌルポだわな。そこをテストするのは
コード変えなきゃいけないし、OOの大規模ビジネスソフトではそういうことは
やらない。それをやらなきゃいけない環境なら関数型でもいけるはず。
0850デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:31:48.84ID:ckfZDtdO
>>849
できない時点でこの話は終わりさ
やらないわけには行かないんだから
90%できてても残り10%をどうやってもやる方法がないんだから
その方法はどうやっても採用できないし
わざわざする理由もない
別の方法ではできるんだから
0851デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:33:02.53ID:9F15TCk0
>>840
君のがpublic privateに関しては言ってることは正しいんだが
底抜けのバカだなあ。

整数かつオブジェクトwこのレベルの人と話してたのかw

はあ。。。

なんかいやになっちゃった。
0852デフォルトの名無しさん
垢版 |
2020/07/05(日) 08:35:22.60ID:9F15TCk0
>>850
いやだから16まで流せば全部できてるけど。

ビジネス系ではやらないよ。組み込みで全部
テストしなきゃいけないというならわかるので
すれば良い。ただOOの手法とは違う。

デベロッパー千人のところでやってるの?
やってないでしょ?
0853デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:13:35.35ID:iCbhqS6F
通ってればいいっていうなら単体テスト全否定だろw
結合テストなりで全部やりゃいいって話になる。
0854デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:23:53.74ID:9F15TCk0
>>853
だからその線引きをどこでやるのかっていう事で、
privateまで全部テストケース書いてエッジケースもネガティブも
全部やるなら関数型で良いんだよ。

別にバカにする気は無いし、関数型のが難しい場面もたくさんあるが、
大規模(デベロッパーだけで数百人)のOOプロジェクトやった事ある?
0855デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:30:39.94ID:9F15TCk0
上のチンコの例で言えば、funcSとfuncBのテストをテストケース書いて
コードを書き換えた上でやってドキュメントなりログなりで残すの?

だったらpublicでやれば良いし、そうやってpublicにするなら関数型でも
おんなじ事でしょ。

チンコがnullなのか16以上そこそこでかいのかまでしか関係ないわけで
privateがnullをハンドリングしてないとか無駄なんだよ。もちろん
命に関わるようなところではそれくらいの厳格さが求められる場合も
あるだろうが、普通のビジネスソフトではそこまでやらない。

他のチームが関わる場所を少なくするためにカプセル化するわけで、
そんな全部publicにしたら意味ないんだよ。
0856デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:41:54.39ID:LRfXHt7v
弊社はC2カバレッジ100%未満は出荷できませんけどね。
0857デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:42:35.87ID:j0cUMVMZ
>>854
線引じゃねーよクソ野郎
publicでたまたま呼ばれた1パターンと
privateの網羅テストが同じになってたまるかアホかよ
クラスのなかにあるのでpublicから呼ばれたときだけ動けば
ルーチンとして不出来でもOKなんてあるわけないだろ
お前はクソだからもう死ねよ
0858デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:45:43.25ID:9F15TCk0
>>857
まあじゃあ君はprivateまでテストケース書いてやっとけば良いんじゃない?
誰も止めてないし。大規模ビジネスソフトでは世界的に言って普通ではないというだけで。

僕はあんまり関わることのないレベルの世界だけど、まあ多分一生関わらないので
君が良いならそれで良いと思うよ。
0860デフォルトの名無しさん
垢版 |
2020/07/05(日) 09:54:43.54ID:bzHIXl0a
>>858
落としどころとしてはそんなところで良いんじゃね?
問題なのは「privateはテストするべきではない」なんて変な教義を押しつける人の方なんで。
0861デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:02:55.49ID:9F15TCk0
>>856
正直QAやってたのは随分前の話だから最近のQAツールは知らんけど、
privateが全部通ってれば100%なわけで、そもそもprivateがある理由は
使われるためなんだから普通は誰も一回も使ってない場合なんかはないわな。
レベルが高くなると通らないケースも出るだろうが。だから線引きってこと。

チンコテストならnullから16までやれば100%通ってる。privateかpublicかって
のは関係ない。ただしprivateはnullをハンドリングしてない。それをどうするかって話。
0862デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:03:22.77ID:iCbhqS6F
>>854
お前こそ大規模プロジェクトやったことないだろw
それだけ大規模だと逆にテストコード書かんわ(nttデータとかアクセンチュアとかな)
そんなクソプロジェクトを引き合いに出されても知らんわw
0863デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:05:36.79ID:9F15TCk0
>>860
「べきでは無い」とは思わないけど、privateをデベロッパーの個人的な
チェックを超えてテストすることを求められるとしたら、何かプロジェクト的に
おかしいとは思う。
0864デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:08:05.85ID:9F15TCk0
>>862
だから僕もNTTデータとかは知らんと上に書いてるけれども。

アメリカの大規模ソフトは中の人だし、他の会社のデベロッパも何人も知ってるので、
実際にアメリカの業界は知ってる。

君の「クソブロジェクト」ではないプロジェクトは会社名は出す必要はないが
例えばアメリカのERPとかそのレベルでなんなの?
0865デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:09:56.64ID:9F15TCk0
だいたい質問を質問で返す人は答えるのに不都合がある人。

数百人のデベロッパーのプロジェクトをやったことなくても全く問題は
ないんだが(ロッキードのミサイルの制御の人とか数百人もいないし)、
「あるよ」とは帰ってこない。
0866デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:15:56.23ID:bzHIXl0a
>>863
だからそれは別の話なんだからさ。
「privateなら必ずしも単体テストする必要はないけどやりたいならやれば?」
これでいいじゃん。
0867デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:19:00.51ID:9F15TCk0
>>866
ちょっと弱いかな。「普通はやらんけどやりたかったりやる必要があるならやれば?」

くらい?privateを全部テストケース書いてエッジやネガティブやるとなると多くの場合
サグラダファミリアになるし、普通はやらない。

でもやりたいならやれば良いとは思うのでだいたいそういう感じか。
0868デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:31:49.01ID:BTTSshKd
組み込みおじさんはそこに義務感を感じ、他者に強要するのだろう
難儀なこった
0869デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:37:41.26ID:9F15TCk0
組み込みとかだと多くの場合そもそもOOあんまりいらんと思うのよね。

人工呼吸器の制御とかだときびしくやらないといけないのはわかるし、
やってない人工呼吸器とか俺も付けられたくないけどさw

OOのメソッドとかはちょっと違う話だわな。カプセル化とかは数百人になると
生きてくる。個人的には自分一人の個人プロジェクトでも使うけど。
数年後にまたやる羽目になったりした時に楽なので。
0870デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:45:19.20ID:MQ9nuMmc
>>847
それは僕も思ってた
机上の空論っぽいんだよね
0871デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:53:33.35ID:kFjTOHVy
>>867
どこに差があるのかよくわからんが、どちらにしても一行目は問題ないにしても
二行目はここに存在しない敵を攻撃している印象。
いちいち関係ない話を絡めなくてもいいじゃんと思うが、二度も書くということは
そっちが主張したい本音ということかな?
0872デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:55:30.48ID:sn+7aSX4
OOPは理解している人とOOPを理解していない人が単体テストについて不毛な争いをするスレかな?
0873デフォルトの名無しさん
垢版 |
2020/07/05(日) 10:58:45.46ID:9F15TCk0
>>871
いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。

publicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?

逆にprivateで一度も通ってない部分があっても良いじゃんとも言っていないような。
if文書くのに絶対通らない物を書く人いるわけないでしょw

ただ、公式なテストとして、privateのレベルでテストケース書いてログ残してコード
書き換えてコンパイルし直してやるというのは少なくとも普通のビジネスのソフトとしては
一般的なベストプラクティスではないし普通はアメリカの大手一流ではやらないということ。
例外はあるとしても。
0874デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:03:24.23ID:LRfXHt7v
土台が腐ってたら。
全部検査するほうが楽。
0875デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:04:34.60ID:9F15TCk0
幸いそういうのには当たったことはないw
上に書いたように例外は認める。
0876デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:09:23.64ID:MQ9nuMmc
アメリカの大手一流ってどこだろ?
0877デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:11:04.89ID:MQ9nuMmc
アメリカや大手や一流が正しいとは限らないけどね
ボーイングの飛行機があんなことになってるように
0879デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:13:19.35ID:9F15TCk0
>>877
だからボーイングの制御系とかはそもそも全然別の話。

もちろん正しいとは限らないけど標準なのは確かだわな。
日本初のOOより優れたこういうメソッドがある!というなら
もちろん喜んで聞くけどね。
0880デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:14:37.74ID:kFjTOHVy
>いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
>ublicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?

そう、それが一致しているならいちいち関係ない話を絡めなくてもいいんでは?
public経由のテストで十分網羅できるのにそれでもprivateメソッド単位のテストが
必要なんて主張している人いたかな?そこに誤解があるんじゃないの?
0883デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:17:47.72ID:MQ9nuMmc
アメリカの大手の一流がそうしてるから正しいのだという権威にすがった論理を
展開されておられたのでその会社ってどちらの会社なのって聞いてみたんだけど
そんな会社本当にあるの?
0884デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:18:34.49ID:MQ9nuMmc
t_wadaの次はアメリカの大手一流か、議論の根拠が権威ばっかりやな
0885デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:21:40.50ID:9F15TCk0
例えばこの方。

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?


メソッド全部ちゃんとエッジケースやネガティブまでやれって業界があるのは
わかるし、必要だとも思うけど、それはOOのビジネス系だでは普通やらないということを
言ってただけなんだけど、バカだアホだお前は素人だといろんな方面から変に噛みつく
やつばかりでもう僕はいやになっちゃった。この人が噛み付いてきたということではないよ。

もちろんまともな人のが多いんだろうけどおかしな人のが目立つからね。
0887デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:23:41.69ID:MQ9nuMmc
OOのビジネス系ってどんな仕事?
そんないい加減なことやっていい仕事ある?
トラブってもうちうちでなーなーで済むようなBtoBの仕事?
自社内でしか使わないシステムとか?
0888デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:24:18.36ID:9F15TCk0
アメリカの大手一流が不満なら自分の業界の実例をあげたらいかがだろうか?

privateをテストケース書いて全件やってるとこなんておそらくないぞ。あるというならあげれば良いだけの話。

テストツールどうやって動いてるねん。コード自動で書き換えてコンパイルし直しか。話がおかしいのすぐわかるだろ。
0889デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:24:52.69ID:/MeFbFCW
まず、このスレの連中は議論する前に論理学を学ぶことをお勧めするよ。
あと、詭弁について調べろ。
0890デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:25:24.17ID:MQ9nuMmc
>>888
アメリカの大手一流ってどこの会社なん?
0891デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:25:52.62ID:9F15TCk0
>>887
だからアメリカ製のパッケージとかコンサルとの間でよく揉めてるだろ。これは「バグ」じゃないとか。DBだってよくある話だわな。

君はどんな仕事なの?
0893デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:27:26.12ID:MQ9nuMmc
>>891
アメリカ製のパッケージとかコンサルとの間でよく揉めてる仕事なん?
なにそれ? 何言うてんの? 何の仕事してるんよ
0894デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:27:47.35ID:kFjTOHVy
>>885
それは網羅してないからダメという意見では?
そこに反論するならば「privateのテストを強制すべきではない」ではなく
「public経由でも網羅することは可能」ではないかね?(できるなら)
0895デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:27:51.75ID:9F15TCk0
>>882
>>848
デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
0896デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:28:29.72ID:MQ9nuMmc
>>892
アメリカの大手一流でこうしてるから、こうするのが正解なんやー
言うてたからアメリカの超一流ってどこなんよ? と聞いたんやけど
なんで言えへんの
0897デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:28:59.86ID:YdQ981ul
>>870
新しい理論や手法を提唱する人には良くあることだと思うけど、その理論はある前提、ある側面では正しいけど、常に無条件に適用することは正しくないと本人は分かっていて、敢えてそういうことはわざわざ詳しくは説明しない。自分の論が有用な物だと主張したいがため、嘘はつかない範囲で相手が勝手に誤解してすごいと思わせるような物言いをする。
で、その理論に感銘を受けた人の一部が、理論の表面的な効能だけをありがたく受け取って問題点や前提条件などは正しく理解しないまま、受け売りの知識を他所で披露する。
そこで議論になると、本質をちゃんと理解してないまま自説を擁護しようとするから、無理が生じたり話が噛み合わなかったりする。
という流れでイマココなのかなと思う。
0898デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:29:53.38ID:MQ9nuMmc
>>897
なるほどね、わかる気がする
0900デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:33:32.02ID:MQ9nuMmc
足ガクガクになってまうよー
0901デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:36:47.20ID:Ua1+WoRk
まぁ、単体テストでprivateを直接呼び出すのは変な話だけどな。
デバッグならともかく、単体テストでリフレクションによるprivate強制実行とか反則でしょ。
デバッグで許される理由は、バグを見つける可能性があるから。
単体テストで駄目な理由は、テストの合否判定が不当に変わる恐れがあるから。

というのが自分の見解だが、皆さんはどう?
スレが加速してからの途中参加だから、自分の発言に自信ないけど。
0902デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:37:26.26ID:9F15TCk0
>>894
そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

見せたくないからprivateなわけで。

もちろんデベロッパー個人でコード入れて確認することはあるだろうけれども、
開発手順としてテストケース書いてログ残してというのは違う。

public経由で内部を網羅してるかしてないかは知ったことではない、というのが正解。
上の例で言えばfuncBやfuncSがnullをチェックしてようがしていまいが他のチームには
関係ないわけです。入り口でnullチェックしてれば。

個人的にはサイズがでかければprivateでも入れるけども、それをテストケース書いて
ログ残してと要求されたことはないし、普通はされんはず。少なくともアメリカでは。
0903デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:38:33.09ID:MQ9nuMmc
GoogleであってもMicrosoftやOracleもバグのないソフトは作れないし
銀の弾丸的な手法があるわけもなく、アメリカ、大手、一流という箔付けに頼ってるだけでしかない
0904デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:41:45.16ID:Xwol7cCi
せっかく匿名で議論できるのに
「アメリカの大手一流」とか言い出しちゃうところが哀れやわ
>>805の下痢便コード出た時点でスレ終了やろ普通
0905デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:43:37.87ID:9F15TCk0
>>896
君の会社はどこなの?

アメリカ大手1流でブライベート単位でのテストケース書いたりした網羅的なテストは「していない」という証明は悪魔の証明だから無理だけど。全社で働いたわけじゃないし。

逆にアメリカ大手1流でやっているという証明は一件出すだけなのでGAFAのどこでも、マイクロソフトでもアドビでも簡単にできるのでぜひどうぞ。

ただ、なんかコピペで爆撃されたオートメーションツールでは、特にコンパイル必要な言語は、直接privateテスト出来ないよ。当たり前の話。
0906デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:45:23.06ID:MQ9nuMmc
>>905
アメリカの大手一流ってどこなんよ?
0907デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:45:48.03ID:MQ9nuMmc
その会社がやってるからすごいんでしょ、はよ教えてやー
0908デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:47:16.10ID:MQ9nuMmc
もう何でもええから言うて、そしたら僕がすごーいって言うから、もうそれでええやんか
0909デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:49:23.59ID:9F15TCk0
また別IDが下痢便とか発狂し始めた。

お前はほんとにウンコとかそのレベルのことが好きだな。
0911デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:51:58.59ID:MQ9nuMmc
>>910
アメリカの大手一流ってどこなんよ?
0912デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:52:54.88ID:MQ9nuMmc
たぶんアップルは単体テストやってない、SSLでアホなバグだしてたから、あの会社適当だわ、しらんけど
0914デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:55:12.71ID:MQ9nuMmc
>>913
アメリカの大手一流ではそれが普通なんやーおりゃーってイキっておられましたよね
だから聞いたのに、教えてくれないなんて酷いです、あんなにイキってたのに酷いです
0915デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:55:58.39ID:M+BkbwUs
>>902
> そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
> コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

誰がそんなこと言ってるの?

少なく遠も俺は
1. privateはpublic経由でテストすれば十分
2. もしpublic経由でテストできないほど複雑なら、そもそも設計がおかしい
3. 設計の問題を修正して、責務を分割すれば、自然にpublicになるはず
と言ってる。

テストするためにpublicにするのではなく
問題がある設計を直せばpublicになる。と言っている。
0916デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:55:59.42ID:9F15TCk0
>>914
劣等感がひどいな君は。まずはカウンセラーに
かかりなさい。OOの話はそれからしようか。
0917デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:58:34.47ID:9F15TCk0
>>915
いや だ か ら この人。

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
0918デフォルトの名無しさん
垢版 |
2020/07/05(日) 11:59:21.06ID:MQ9nuMmc
アップルのSSLのバグはこれね

Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚──原因はタイプミス?
https://appllio.com/20140223-4899-apple-ios-bug-ssl-goto-fail
0920デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:07:47.85ID:kFjTOHVy
>>902
ああつまり、重要度は関数仕様>ブラックボックステスト>ホワイトボックステストだから
テストのために仕様変更はすべきでないという主張か。
それはわからんでもない気はするけど、そういうウォーターフォールが絶対というわけでもないしな。

その是非はさておき、そこが論点なら例えばリフレクションのような形でテストできたり、あるいは
テスト仕様を書く本人が関数仕様も決定することができる条件なら全然問題ないわけだ。
0921デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:07:48.24ID:9F15TCk0
>>918
正直iOSは全然知らんけどこれは酷いなw
Public Private以前にStaticだからなんにしても直接テストする部分だな。
0922デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:08:47.51ID:MQ9nuMmc
>>921
せやろw
0923デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:13:26.38ID:9F15TCk0
>>919
横から狂犬が噛み付いてくるんだよ。

>>920
ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。

そもそも「テスト」と言ってもいろんな段階があるわけだし、「ユニットテスト」にしても
プロジェクトによって意味が違うわけで。

なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。
0924デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:16:58.82ID:kFjTOHVy
>なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
>OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。

全部やれなんて主張している人がいないから。
0925デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:19:09.22ID:9F15TCk0
>>924
だからいるだろうが。本人なの?

848デフォルトの名無しさん2020/07/05(日) 08:16:36.05ID:IUsMolpf
publicを通した範囲でしかできないprivateのテストは網羅されてなく
メソッドの単体テストとして十分なテストは行われていません
あなたの意見は採用できません
できれば実際のプロジェクトを5つぐらい経験されてはいかがでしょうか?
0927デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:21:30.51ID:MQ9nuMmc
privateメソッドが正しいことは確認する、その上でpublicのメソッドが正しいかテストするって感じ
0929デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:32:35.17ID:M+BkbwUs
>>923
> ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
> 普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。

テスト中に設計の問題が発覚しても
ソースコード書き換えないの?

ソースコード変えてまでテストするものではないというけど
なんでソースコードを作成&自分が書いたそのコードをテストしてるときに
自分が作成してるソースコードを変えたらだめなの?
0930デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:36:24.73ID:M+BkbwUs
普通の開発だったら

0. なにかの修正を行う必要が発生する
1. その修正のためにソースコードを修正する
2. 修正したコードが正しいかテストする
3. 1〜2を繰り返し修正したコードに問題がなければ開発完了
4. 統合テストとかより大きなテストを行う

でしょ?

public・privateメソッドをテストしたいっていうのは
この1〜2のフェーズで発生することなのに、
なんでテストがやりにくいなと思ったときに
ソースコードを修正したらだめなの?
0931デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:38:58.81ID:wqV8YbJ4
>>926
スマホでも見やすくなったな。
あー、なるほど。

でも、サンプルみたら少し混乱してきた。
自分はクラスの単体テストをイメージしてたけど、まさか、Mainクラスの中に定義されたprivateメソッドの単体テスト(?)の話をしていたとか?
もう単体テストの意味が少し崩壊してきたが...
0933デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:52:51.86ID:9F15TCk0
>>928
そもそも300くらいからそういう話だから。

privateはpublicからアクセスして全部網羅できるから問題ないなんて
誰も否定してないしそういうことならもともと荒れてない。

>>929
あのさ、例えばバグが発生したらコード書き換えるのは当たり前だよね?
そんな話では当然ないよね?

privateを直接テストするためには外部から呼べないのだから、呼ぶためには
クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
する?

普通はコード書いてる最中にテストコードを入れて確認するのは公式なテストの
メソッドでは無いし、それをドキュメント化したりするのは求められないと
思うが。

>>926
ワロタw

けどそうじゃ無い。privateで直接アクセスした時のみnullがでるということ。
intじゃ無いのは例のためにわざとそうなっている。あとchinTestが呼ばれてないし、
OptionalにisEmpty無いのでは。
0934デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:54:31.17ID:9F15TCk0
nullがでる->ヌルポがでる
0935デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:54:57.72ID:M+BkbwUs
>>933
> privateを直接テストするためには外部から呼べないのだから、呼ぶためには
> クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
> テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
> する?

誰がそんな事するって言ってんの?
お前が想像が間違ってる
0936デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:56:01.25ID:MQ9nuMmc
>>933
えっとごめんそのnullの問題は設計が下手なだけだと思ってて、設計を見直すべきかと
privateのテストをどうしますかの例として出したので問題ないっしょ
君はこのプログラムをどうやってテストするん?
0937デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:56:34.25ID:3WDjCjSx
よくもまあ粉薬をオブラートで包むような話でこれだけのレスで盛り上がれるなー
0938デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:57:28.17ID:M+BkbwUs
いやーびっくりだw

設計がおかしいから設計を修正するって話をしてるのに
設計を修正した後に修正前に戻すなんでやらないだろ!って言われちゃった(笑)

だーれも修正前に戻すなんて言ってないの
おかしい設計を修正して「開発完了」なの
0939デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:57:46.31ID:JiRnWiGC
たぶん、スレタイがスレタイだから、手続き型でプログラムを書く人のイメージする単体テストとオブジェクト指向プログラマーのイメージする単体テストで齟齬が生じているのでは?

そりゃ、サンプルみたいに関数が定義されていたらprivateだろうと関数はテストするべきって発想になるのは不思議じゃないし、オブジェクト指向に基づき設計されたクラスを単体テストする話であれば、privateをテストって、どういう意味なんだろって不思議がるだろうよ。

そして、たぶん、サンプルコードに対して真っ先に突っ込むべき点はOOPでも何でもないコードという点だと思うのだが、そこはいいのかな?
0940デフォルトの名無しさん
垢版 |
2020/07/05(日) 12:57:47.49ID:MQ9nuMmc
OptionalにisEmptyが無いというのは何言ってるのかわからない
本当になかったらコンパイルに失敗するよ
0941デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:00:08.78ID:M+BkbwUs
>>939
一人privateがテストしづらいからpublicに変更してテストして
"元に戻す" 話をしてるやつがいるみたいだが(笑)
0942デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:00:23.50ID:MQ9nuMmc
>>939
僕はOOPのコードだと思ってるよクラスが定義されてるからね
君が思うOOPのコードはこれだっていうのを君に出していただきたいかな
0943デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:00:34.24ID:9F15TCk0
>>935
もうお前は良いからスレを読め。

>>936
いやそうじゃなくて、publicで呼ばれるprivateを直接テストするのかという
話なので、そのためにわざわざヌルポになるように書いてるわけで、staticなら
そのままメソッド呼べば良い話。


もうこの板嫌。。。
0944デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:03:47.50ID:MQ9nuMmc
>>943
ヌルポになるような設計はおかしいのがそれはコーディング力の稚拙さゆえ。
だから、いまはそのヌルポの問題は置いておこう。
さて、君はこのプログラムをどうテストするのか教えて欲しいっていうのが僕の要望だよ。
0945デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:06:51.97ID:9F15TCk0
>>944
いやだから そ う じ ゃ な く て

privateでだけヌルポが出るように書いてるの。privateとpublicのテストの話だから。
出さないだけならnullチェック入れれば良いだけの話だが、そういうことじゃ無くて
わざと出るようになってるの。

そのプログラムならstaticなのだからそのまま呼べば良いし、
chinTestも呼ばれてないけどpublicなのだからテストしたければそのまま
呼べば良い話。
0946デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:10:29.02ID:JiRnWiGC
>>942
スマホだからインデントとか崩れは許してほしいが

class USBMemory : Storage{
private:
色々定義
public:
USBMemory(ポート設定)
void open(string file)
string read()
void write(テキスト)
void close()
}

文法適当だが勘弁して

組み込みおじさんにも分かりやすいように、
組み込みを例にするが、
OOPってこんな感じのコードでしょ。


で、ユーザーは

USBMemory usb;
usb.open(ファイル指定)
text = usb.read()
usb.close()

こんな風に内部実装を知らなくても呼べる。
0947デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:11:36.99ID:MQ9nuMmc
>>945
わざと出るように入れたのが現実の実装と乖離してるので、わざと入れる意味が無いので
気にする必要ないですよってこと

君はpublic経由でprivateをテストするんだって立場ですよね
君はどうテストを書きますかってことを教えて欲しいです
君の元のコードでもいいですよ、僕が変更したコードでも良いですよ
君はどうprivateをテストしますか?
0949デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:13:15.86ID:MQ9nuMmc
>>948
僕は君の認識が間違いだと思ってる、君の方が残念
0950デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:13:55.43ID:MQ9nuMmc
クラスの存在こそがOOPの本質
0952デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:14:57.78ID:JiRnWiGC
JavaScriptとかpythonとか、元々、クラスはサポートしていないのに?
プロトタイプベースはオブジェクト指向じゃないとでも?
0953デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:17:49.53ID:MQ9nuMmc
>>951
えじゃねえよ、なめんなよ
0954デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:18:05.20ID:9F15TCk0
>>947
意味がないどころか、そこにしか意味がないんだよ。
それ「だけ」を見せるためのコードなんだから。staticとか
なら話の流れとなんにも関係がないのでそれこそ意味がない。

でもあえていうなら、そもそもまず連打が好きじゃ無い。自分ならループにするけど、
それだけでもない。

まず壊すようにテストすんの。null入れたり、変なオブジェクト入れたり。

で、privateをテストするんじゃなくて、要件通り動くかどうか。nullからint maxまで
回して、要件通りの結果が全てでくるか。変なオブジェクト入れたらどうか。
そういう感じ。

でも最初に書いたように、publicとprivateの話なんだから、そこで
エラーが出るか出ないかがないとこのスレ的にはなんの意味もない。
0955デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:18:37.20ID:MQ9nuMmc
>>952
JavaScriptにもPythonにもクラスあるよ
クラスがオブジェクト指向の本質だと気づいたから追加されたんじゃないでしょうかねー
0956デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:19:41.30ID:9F15TCk0
クラスの存在はOOPの大事な部分だけど、OOPの言語を使ってもほとんどOOPでは
無いというのはよくある話。巨大クラス一個とかだと頭を抱える。
0957デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:22:07.34ID:MQ9nuMmc
>>954
現実にありえない実装見せて、ほらね、と言われても僕は戸惑うばかり
そんな現実にありえないことを想定するからまずいんじゃないですかね
現実にそういうコード書いてるんじゃないかと僕はちょっと君のコーディング力を
疑わしく思ってきたのだけれども

public経由で、標準出力に出力するようなprivateコードを一生懸命テストしますか?
がんばり屋さんだなとは思うけど、効率悪くないですかね
0958デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:22:29.69ID:MQ9nuMmc
>>956
そんな極端な話ちゃうやろボケ
0959デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:24:13.83ID:JiRnWiGC
そりゃ、クラスはオブジェクト指向を実現する上で便利だからね。大切な存在さ。でも、クラスなんて無くてもオブジェクト指向でコードは書けるし、逆に、クラスが合っても手続き型の記述をしたら、そりゃ、オブジェクト指向じゃねーわ。
つーか、クラスを使ったらオブジェクト指向ってマジで言ってる?
それってつまり、このスレで時々名前の出るstaticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?
0960デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:25:43.22ID:9F15TCk0
>>957
えーー、違うそうじゃ無い。多分君よくわかってない。
例なわけで実際にありえないとかありえる訳が無い。そんな話じゃ無いし
根本的な部分がわかってない。

publicでは問題がなく、private単体だと問題がでるコードなわけで。この意味はわかる?
0961デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:29:16.63ID:MQ9nuMmc
>>959
staticおじさんの元の話知ってる? 僕はリアルタイムであれを読んでたからよく知ってるんだけれども
staticおじさんは必要なところではオブジェクト作るよ、でもASP.NETのForm Applicationのフレームワークには
もともとリッチなオブジェクトが用意されてるから実務ではそれを組み合わせるだけで事足りることが多いよ
だからstaticメインで組み上げてオーケーさって話だったよ

オブジェクト指向信者がアホな前提置いて話を発散させただけでstaticおじさんが言ってることはわりあいまともだった
こういう議論の場で神クラスを引き合いに出して批判するという極端なことやって意味があるのかなと僕は疑問ですね
0962デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:30:55.04ID:JiRnWiGC
いや、そもそもstaticおじさんのコードはオブジェクト指向でも何でもねーよ!
話反らすな。
0963デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:32:41.77ID:MQ9nuMmc
>>962
staticおじさんの書いたコードもオブジェクト指向だと言い張るつもり?

と君が聞いたからstaticおじさんに対する僕の所見を述べたつもり
ASP.NETのオブジェクトを使ってるならオブジェクト指向でしょ
オブジェクト指向が為せる技だと思うよ
0964デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:33:02.71ID:MQ9nuMmc
オブジェクト指向便利だよね
0965デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:33:43.81ID:9F15TCk0
コードあげてくれるのは偉いと思うので気がひけるのだが、上のコードは
privateとpublicの違いを表すための部分がまるですっぽ抜けてるし、そもそも
staticだし結構それ自体staticおじさん感がある。すまんw
0966デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:33:52.51ID:JiRnWiGC
>>963
ちげーよ。ASPがオブジェクト指向であって、staticおじさんのコードはオブジェクト指向でも何でもねーよ。
0967デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:37:13.08ID:MQ9nuMmc
>>966
でもASP.NETのフレームワークがオブジェクト用意してなかったらstaticおじさんはコード書けなかったと思うし
staticおじさんのコードはオブジェクト指向を有効的に活用した非常に優れたコードだと思いますよ
必要もないのにオブジェクト作るのはアホですわ
0968デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:38:05.15ID:MQ9nuMmc
staticおじさんは必要な場面ではオブジェクト作るっていってるからねー
僕はstaticおじさんに詳しいんだ
0970デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:40:17.58ID:MQ9nuMmc
物事の本質を見誤ると道を踏み外すよ
状態に依存してないのにインスタンスメソッドにしたりとか
staticメソッドを定義したらstaticおじさんと言ったりとか
そういうバカのできあがりですよ
0971デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:40:37.05ID:JiRnWiGC
>>967

> >>966
> でもASP.NETのフレームワークがオブジェクト用意してなかったらstaticおじさんはコード書けなかったと思うし

そうだね。

> staticおじさんのコードはオブジェクト指向を有効的に活用した非常に優れたコードだと思いますよ

お前がそう思うのなら、そう思えば。そはどうでもいい。

で?
クラスを定義すればオブジェクト指向だとまだ主張するの?

論点ずらすなや
0972デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:42:50.97ID:MQ9nuMmc
>>971
何が気に入らなくて僕に絡んでるのかわからないですが
クラスがオブジェクト指向の本質であることには変わりないですよ
クラスとはデータと処理をセットにして持つことができるものです
クラスを定義することこそがオブジェクト指向の本質です
0973デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:44:43.62ID:MQ9nuMmc
責務ごとにオブジェクトをわけましょうなんていうのは
オブジェクト指向でプログラミングすることを前提にした設計論でしか無いです
クラスの存在こそがオブジェクト指向の本質です
0975デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:47:18.05ID:MQ9nuMmc
>>974
いいえ、君のほうが間違いです
Mainという名前にしてるのはpaizaではMainじゃないと動かないからですよ
その辺わかって絡んでますか? あまり僕を怒らせないほうが良いです
0976デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:47:27.85ID:JiRnWiGC
>>972
何が気にいらないかって?
オブジェクト指向でも何でもねぇコードをオブジェクト指向と認識して今まで長ったらしい口論を続けてきたことだ。

クソみたいな時間だったな、オイ。
0977デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:52:06.41ID:JiRnWiGC
>>975
まぁ、いいさ。これ以上は不毛だ。スレも終わるし。
俺は俺の思う正しいオブジェクト指向で今後も楽をさせてもらうよ。
そっちも、そっちの思うオブジェクト指向とやらを使い続けるがいい。

成果が出た方が正義だ。
0978デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:55:35.80ID:h7Qz+vpg
オブジェクト指向だから髪型は自由なのさ

彡 ⌒ ミ
(´・ω・`) 不毛とかいうな!
0979デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:56:22.57ID:MQ9nuMmc
ハゲに謝るべき
0980デフォルトの名無しさん
垢版 |
2020/07/05(日) 13:56:24.62ID:VS9zJ3bZ
よし
話を一度整理しよう

privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
0981デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:06:22.83ID:MQ9nuMmc
ナイスな整理と言わざるを得ない
議論もリファクタリング可能であることを如実に示した
0982デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:09:58.85ID:MQ9nuMmc
>>976
僕のコードはオブジェクト指向ですよ
そこんとこよろしくですよ

オブジェクトをどう分けるかって話はありますよ
しかし、それとは独立してオブジェクトは存在するので
オブジェクトを定義できるクラスの存在そのものがオブジェクト指向の本質なわけです
だからオブジェクト指向言語にはクラスが存在します

生物学の類、目のようなものです、どう分類するかは副次的な話であって
分類できることこそが最も重要な事柄です
0983デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:18:27.81ID:9F15TCk0
正直あの短さでOOかどうかと(スタティックでインスタンス化もないコードだが)言うのは
不毛だけどID:JiRnWiGCの組み込みおじさんのがOO感はあるよ。

で、staticで出されてもprivateのテストがどうかと言う話には全く寄与しないわけだが、
じゃあ逆に、>>805のチンコテストのfuncSとfuncBはどうやってテストするの?

パブリック経由で全パターンと言うことならこれでこの話はおしまい。
パブリック経由でやりましょう。

違うと言うなら具体的にコードでおながいします。

smallestを9じゃなくて8にしろとかいう苦情は受け付けますw
0984デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:23:34.49ID:MQ9nuMmc
>>983
僕ならテストしないですね、全部書き直します
メソッドを行数で分割するようなことしてるからそういう下痢便コードができあがるんじゃないかと思いますよ
0985デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:24:31.67ID:MQ9nuMmc
クラスにしてもメソッドにしても責務でわけないと
行数が50行超えたから分割しなければみたいなアホなことやってるのはアホですわ
0987デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:26:22.88ID:MQ9nuMmc
>>986
器用ですね、じゃあ僕との仲直りもすぐにできそうですね
0988デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:28:26.22ID:9F15TCk0
>>984
書き直して決め打ちコピペにstaticなんだw
結局publicとprivateの違いはよくわかってないな。
まあ頑張れ。君とはこれまでだ。

>>986
組み込みおじさんって言ってたやんけ(言ってなかったか?)
0989デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:30:37.73ID:MQ9nuMmc
>>988
staticにしたのは状態に依存してないからですね
0990デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:31:51.93ID:9F15TCk0
下痢便君は10代後半から20代前半というところかなあ。

ウンコチンコのレベルと絡んでてもおじさんあんまり面白く無いんだよね。
自分でチンコテストのコードあげたけどw

でもコードあげたのは偉いと思うので頑張ってね。
0991デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:33:06.78ID:JiRnWiGC
あー、組み込みおじさんにも解るように だよ。
俺自身、組み込みもやるからややこしいが、ずっと前に登場した組み込みおじさんとは別人だよ。

まぁ、慌てて書いたから余計な発言だったか。
もう、この際OOPの利点さえ感じていればなんでもいいことにするよ。
スレも少ないし、ヒートダウンしたし。
0992デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:33:34.85ID:MQ9nuMmc
>>990
僕まだ小学生でちゅ
0993デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:35:03.91ID:9F15TCk0
あー組み込みおじさん(固有名詞)が居たのね。一般名詞のつもりでした。
この板昨日からなので。
0995デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:37:40.20ID:MQ9nuMmc
参照透明なメソッドだとテストしやすいしバグの混入も減らせるのでおすすめ!
間違っても>>805こんな下痢便分割しちゃダメ
0996デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:38:27.28ID:9F15TCk0
しかし小学生の下痢便君とかと話ててもこっちは損するばかりだしなあ。
マジで。しかも下痢便君はましな方な可能性さえあるし。

予想以上だった、この板。マジやばい。ASP.NETのオブジェクトを使ってるなら
オブジェクト指向だし。
0997デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:38:41.11ID:MQ9nuMmc
>>993
マジで!? ID:gS37C1rZ これ絶対君だと思ってた、言ってること薄っぺらいしアホだし
0999デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:43:23.60ID:9F15TCk0
>>997
マジで某アメリカの誰でも知ってるとこの中の人だよ。
日本人あんまり居ないので、これ以上はやばいからどこだか
下痢便君に教えるわけが無いけど。

インデントとか言ってたの君だっけ?

そんなくだらない(しかも的外れな)揚げ足取りじゃなくて、
君のコード、根本的なとこに問題あるんだけど、わからない人に
わかれと言ってもわからないだろうからなあ。

ちゃんとOOをやったらわかるかも。頑張ってね。下痢便君w
1000デフォルトの名無しさん
垢版 |
2020/07/05(日) 14:43:28.02ID:MQ9nuMmc
>>998
ハゲて頑張っておられる方にお詫び申し上げます
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 16日 14時間 55分 52秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況