カプセル化の有害性、オブジェクト指向は愚かな考え at TECH
[2ch|▼Menu]
[前50を表示]
850:デフォルトの名無しさん
20/07/05 06:57:27.80 M+BkbwUs.net
>>819
> 君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
> 書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。
変更のたびって、お前変更のたびにメソッドの仕様が変わるのか?
いきあたりばったりで開発してるんだな

851:デフォルトの名無しさん
20/07/05 06:58:49.78 M+BkbwUs.net
>>821
最初からそう言ってるだろ?
ブレるも何も、最初からそう言ってる

> 私の


852:回答 > 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。 > > ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。



853:デフォルトの名無しさん
20/07/05 07:00:51.32 M+BkbwUs.net
あ?まさかprivate関数の処理のテストをすればいいのに
private関数単独ででテストしなきゃだめだって思ってるのかw
あはは、関数単位でテストするのがユニットテストだって思ってるようだな
こりゃ、お・わ・ら・い・だw

854:デフォルトの名無しさん
20/07/05 07:02:37.00 BTTSshKd.net
メソッド単位でテストしろって言うのが組み込みおじさんだから話にならんよ

855:デフォルトの名無しさん
20/07/05 07:03:05.56 9F15TCk0.net
なんだこいつ気持ち悪い。

856:デフォルトの名無しさん
20/07/05 07:07:17.25 9F15TCk0.net
日本語もjavaも通じないからどうにもならない。
突然噛み付いてくる気持ちの悪いのは100%の確率でおかしいな。

857:デフォルトの名無しさん
20/07/05 07:08:18.45 M+BkbwUs.net
というふうに「技術」の話にレスができなくなったら
「人」(=俺)の話にすり替えるのが常套手段な

858:デフォルトの名無しさん
20/07/05 07:13:21.25 9F15TCk0.net
というかお前は誰だよ。Private単位でコード書き換えてもやるって言ってる
人間がいたからPrivate単位では通常のビジネス系ではやらないという流れなのに
突然「お前は素人だあ!」とか噛み付いてきても知らんがな。
タブもスペースもトランケートされる2ちゃんでインデントがとかくだらない
ことでマウント取りにくる暇があったらまず日本語を学べ。
以上。

859:デフォルトの名無しさん
20/07/05 07:21:09 BTTSshKd.net
「privateメソッド」を直接テストしろって言う人はどうするのがいいって言うの?

a 全てprivateメソッドに対しても外部にリフレクション等を使用したテストを書くべき
b privateメソッドにアクセスできるクラスなどにpublicなテストコードを書くべき
c もっと言い方法がある、こうだ!

860:デフォルトの名無しさん
20/07/05 07:22:11 LRfXHt7v.net
>>830
王家秘伝の技がある。

861:デフォルトの名無しさん
20/07/05 07:24:08 M+BkbwUs.net
>>830

>>798 じゃねーの?w

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

つまり

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

862:デフォルトの名無しさん
20/07/05 07:24:58 9F15TCk0.net
しかしよくチンコのサイズテストwにマジで噛みつけるもんだ。

863:デフォルトの名無しさん
20/07/05 07:29:06 M+BkbwUs.net
>>833
あ、そういうテストだったの?w
コードしか見てないよw

864:デフォルトの名無しさん
20/07/05 07:30:17.21 M+BkbwUs.net
Chinってちんこのことだったんだな
funcSとかfuncBとかfoo、barみたいに意味がない単語じゃん
コードがクソすぎて意味が伝わらないいい例だな

865:デフォルトの名無しさん
20/07/05 07:34:08.81 9F15TCk0.net
無い場合You are a womanで9以下なら小さい、16越えりゃWow!で名前が
チンテスターなんだからわかってる人間は多いだろうな。

866:デフォルトの名無しさん
20/07/05 07:36:44.58 M+BkbwUs.net
>>836
じゃあint型の配列のlen(長さ)ってどういうこと?
配列がnullなら女で配列が複数あれば男?
何が複数なの?

867:デフォルトの名無しさん
20/07/05 07:36:59.87 9F15TCk0.net
ちなみにfuncなんとかというのは君の好きなグーグルあたりでも例ではよく使うわな。
BとSもbigとsmallだろうと英語得意なら当たりがつくけどね。なぜABじゃなくてBS
なのか。そもそもoutに出てんだし。

868:デフォルトの名無しさん
20/07/05 07:38:39.33 9F15TCk0.net
>>837
行があればChinkoクラスを作るとこだがスペースいらないで
intじゃなくてヌルポが出るものがarrayだからそれの長さで表してるだけだよ。

869:デフォルトの名無しさん
20/07/05 07:44:01.87 M+BkbwUs.net
> intじゃなくてヌルポが出るものがarrayだから
・・・
Java知らんのか?整数かつオブジェクトでも使えばいいじゃないか
具体的には教えてやらんよ。自分で勉強しな

870:デフォルトの名無しさん
20/07/05 07:46:53.71 wXNAUX4A.net
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね

871:デフォルトの名無しさん
20/07/05 07:49:38.56 y7MN16M9.net
>>824
いや、やってもいいだろ
お前がやりたくないのは「たまたま」VisualStudioでやりにくいってだけの理由だろ
早く死んでね

872:デフォルトの名無しさん
20/07/05 07:53:17 M+BkbwUs.net
こういう事やって、NULLチェックが4倍に増


873:えたー、テストも増えたーって 言ってるやつがいるなんて驚き。馬鹿かと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 }



874:デフォルトの名無しさん
20/07/05 07:56:16 LRfXHt7v.net
プロは俺だけだったか。

875:デフォルトの名無しさん
20/07/05 08:03:19.96 FjEgCO9/.net
そもそもprivateメソッドだからテストしないとか言ってるキチガイにまともな返答なんかいらない
そんなのどこの職場でも認められるわけないから
publicメソッド通したprivateメソッドに自分が想定したケースの値が全部入る保証なんかない
ある特定のケースのみそのメソッドの処理が欲しいときにしか呼んでないことあるだろ
つまりメソッド自体のテストはできてないしその方法でコードカバレッジ100%は無理だし
そもそもpublicから呼び出したprivateのコードカバレッジを100%にするなんて
作業が狂気過ぎてまともな脳みそ持ってるやつならやる前に無駄って理解できる
バカは早く死んでね

876:デフォルトの名無しさん
20/07/05 08:06:02.24 M+BkbwUs.net
そもそもprivateメソッドだからテストしないとか言ってるキチガイには
この言葉を授けよう
t-wadaのブログ
URLリンク(t-wada.hatenablog.jp)

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

877:デフォルトの名無しさん
20/07/05 08:10:31.93 FjEgCO9/.net
>>846
そいつプロジェクトで仕事したことあるのか怪しい部類じゃね?

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

879:デフォルトの名無しさん
20/07/05 08:25:21.85 9F15TCk0.net
public通したprivateは単体としては怪しいというのはその通りだけど、
そもそも呼ばれないprivateを書くバカはいないわけで、条件があるから
書いてんだよね。で、条件をpublicの段階でテストするわけだから
ほぼ通ってるわけだよ。
上のチンコテストだとnullから16まで流せば全部通る。
違いは、上の例でprivateにnull突っ込んだらヌルポだわな。そこをテストするのは
コード変えなきゃいけないし、OOの大規模ビジネスソフトではそういうことは
やらない。それをやらなきゃいけない環境なら関数型でもいけるはず。

880:デフォルトの名無しさん
20/07/05 08:31:48.84 ckfZDtdO.net
>>849
できない時点でこの話は終わりさ
やらないわけには行かないんだから
90%できてても残り10%をどうやってもやる方法がないんだから
その方法はどうやっても採用できないし
わざわざする理由もない
別の方法ではできるんだから

881:デフォルトの名無しさん
20/07/05 08:33:02.53 9F15TCk0.net
>>840
君のがpublic privateに関しては言ってることは正しいんだが
底抜けのバカだなあ。
整数かつオブジェクトwこのレベルの人と話してたのかw
はあ。。。
なんかいやになっちゃった。

882:デフォルトの名無しさん
20/07/05 08:35:22 9F15TCk0.net
>>850
いやだから16まで流せば全部できてるけど。

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

デベロッパー千人のところでやってるの?
やってないでしょ?

883:デフォルトの名無しさん
20/07/05 09:13:35 iCbhqS6F.net
通ってればいいっていうなら単体テスト全否


884:閧セろw 結合テストなりで全部やりゃいいって話になる。



885:デフォルトの名無しさん
20/07/05 09:23:53.74 9F15TCk0.net
>>853
だからその線引きをどこでやるのかっていう事で、
privateまで全部テストケース書いてエッジケースもネガティブも
全部やるなら関数型で良いんだよ。
別にバカにする気は無いし、関数型のが難しい場面もたくさんあるが、
大規模(デベロッパーだけで数百人)のOOプロジェクトやった事ある?

886:デフォルトの名無しさん
20/07/05 09:30:39.94 9F15TCk0.net
上のチンコの例で言えば、funcSとfuncBのテストをテストケース書いて
コードを書き換えた上でやってドキュメントなりログなりで残すの?
だったらpublicでやれば良いし、そうやってpublicにするなら関数型でも
おんなじ事でしょ。
チンコがnullなのか16以上そこそこでかいのかまでしか関係ないわけで
privateがnullをハンドリングしてないとか無駄なんだよ。もちろん
命に関わるようなところではそれくらいの厳格さが求められる場合も
あるだろうが、普通のビジネスソフトではそこまでやらない。
他のチームが関わる場所を少なくするためにカプセル化するわけで、
そんな全部publicにしたら意味ないんだよ。

887:デフォルトの名無しさん
20/07/05 09:41:54.39 LRfXHt7v.net
弊社はC2カバレッジ100%未満は出荷できませんけどね。

888:デフォルトの名無しさん
20/07/05 09:42:35.87 j0cUMVMZ.net
>>854
線引じゃねーよクソ野郎
publicでたまたま呼ばれた1パターンと
privateの網羅テストが同じになってたまるかアホかよ
クラスのなかにあるのでpublicから呼ばれたときだけ動けば
ルーチンとして不出来でもOKなんてあるわけないだろ
お前はクソだからもう死ねよ

889:デフォルトの名無しさん
20/07/05 09:45:43.25 9F15TCk0.net
>>857
まあじゃあ君はprivateまでテストケース書いてやっとけば良いんじゃない?
誰も止めてないし。大規模ビジネスソフトでは世界的に言って普通ではないというだけで。
僕はあんまり関わることのないレベルの世界だけど、まあ多分一生関わらないので
君が良いならそれで良いと思うよ。

890:デフォルトの名無しさん
20/07/05 09:51:39.34 BTTSshKd.net
>>857
君は大変なんだねwテストがんばれーwww

891:デフォルトの名無しさん
20/07/05 09:54:43 bzHIXl0a.net
>>858
落としどころとしてはそんなところで良いんじゃね?
問題なのは「privateはテストするべきではない」なんて変な教義を押しつける人の方なんで。

892:デフォルトの名無しさん
20/07/05 10:02:55.49 9F15TCk0.net
>>856
正直QAやってたのは随分前の話だから最近のQAツールは知らんけど、
privateが全部通ってれば100%なわけで、そもそもprivateがある理由は
使われるためなんだから普通は誰も一回も使ってない場合なんかはないわな。
レベルが高くなると通らないケースも出るだろうが。だから線引きってこと。
チンコテストならnullから16までやれば100%通ってる。privateかpublicかって
のは関係ない。ただしprivateはnullをハンドリングしてない。それをどうするかって話。

893:デフォルトの名無しさん
20/07/05 10:03:22.77 iCbhqS6F.net
>>854
お前こそ大規模プロジェクトやったことないだろw
それだけ大規模だと逆にテストコード書かんわ(nttデータとかアクセンチュアとかな)
そんなクソプロジェクトを引き合いに出されても知らんわw

894:デフォルトの名無しさん
20/07/05 10:05:36.79 9F15TCk0.net
>>860
「べきでは無い」とは思わないけど、privateをデベロッパーの個人的な
チェックを超えてテストすることを求められるとしたら、何かプロジェクト的に
おかしいとは思う。

895:デフォルトの名無しさん
20/07/05 10:08:05.85 9F15TCk0.net
>>862
だから僕もNTTデータとかは知らんと上に書いてるけれども。
アメリカの大規模ソフトは中の人だし、他の会社のデベロッパも何人も知ってるので、
実際にアメリカの業界は知ってる。
君の「クソブロジェクト」ではないプロジェクトは会社名は出す必要はないが
例えばアメリカのERPとかそのレベルでなんなの?

896:デフォルトの名無しさん
20/07/05 10:09:56.64 9F15TCk0.net
だいたい質問を質問で返す人は答えるのに不都合がある人。
数百人のデベロッパーのプロジェクトをやったことなくても全く問題は
ないんだが(ロッキードのミサイルの制御の人とか数百人もいないし


897:)、 「あるよ」とは帰ってこない。



898:デフォルトの名無しさん
20/07/05 10:15:56.23 bzHIXl0a.net
>>863
だからそれは別の話なんだからさ。
「privateなら必ずしも単体テストする必要はないけどやりたいならやれば?」
これでいいじゃん。

899:デフォルトの名無しさん
20/07/05 10:19:00.51 9F15TCk0.net
>>866
ちょっと弱いかな。「普通はやらんけどやりたかったりやる必要があるならやれば?」
くらい?privateを全部テストケース書いてエッジやネガティブやるとなると多くの場合
サグラダファミリアになるし、普通はやらない。
でもやりたいならやれば良いとは思うのでだいたいそういう感じか。

900:デフォルトの名無しさん
20/07/05 10:31:49.01 BTTSshKd.net
組み込みおじさんはそこに義務感を感じ、他者に強要するのだろう
難儀なこった

901:デフォルトの名無しさん
20/07/05 10:37:41 9F15TCk0.net
組み込みとかだと多くの場合そもそもOOあんまりいらんと思うのよね。

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

OOのメソッドとかはちょっと違う話だわな。カプセル化とかは数百人になると
生きてくる。個人的には自分一人の個人プロジェクトでも使うけど。
数年後にまたやる羽目になったりした時に楽なので。

902:デフォルトの名無しさん
20/07/05 10:45:19 MQ9nuMmc.net
>>847
それは僕も思ってた
机上の空論っぽいんだよね

903:デフォルトの名無しさん
20/07/05 10:53:33 kFjTOHVy.net
>>867
どこに差があるのかよくわからんが、どちらにしても一行目は問題ないにしても
二行目はここに存在しない敵を攻撃している印象。
いちいち関係ない話を絡めなくてもいいじゃんと思うが、二度も書くということは
そっちが主張したい本音ということかな?

904:デフォルトの名無しさん
20/07/05 10:55:30 sn+7aSX4.net
OOPは理解している人とOOPを理解していない人が単体テストについて不毛な争いをするスレかな?

905:デフォルトの名無しさん
20/07/05 10:58:45.46 9F15TCk0.net
>>871
いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
publicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?
逆にprivateで一度も通ってない部分があっても良いじゃんとも言っていないような。
if文書くのに絶対通らない物を書く人いるわけないでしょw
ただ、公式なテストとして、privateのレベルでテストケース書いてログ残してコード
書き換えてコンパイルし直してやるというのは少なくとも普通のビジネスのソフトとしては
一般的なベストプラクティスではないし普通はアメリカの大手一流ではやらないということ。
例外はあるとしても。

906:デフォルトの名無しさん
20/07/05 11:03:24.23 LRfXHt7v.net
土台が腐ってたら。
全部検査するほうが楽。

907:デフォルトの名無しさん
20/07/05 11:04:34.60 9F15TCk0.net
幸いそういうのには当たったことはないw
上に書いたように例外は認める。

908:デフォルトの名無しさん
20/07/05 11:09:23.64 MQ9nuMmc.net
アメリカの大手一流ってどこだろ?

909:デフォルトの名無しさん
20/07/05 11:11:04.89 MQ9nuMmc.net
アメリカや大手や一流が正しいとは限らないけどね
ボーイングの飛行機があんなことになってるように

910:デフォルトの名無しさん
20/07/05 11:11:13.65 9F15TCk0.net
まあ会社的にはプログラマなら全員知ってるとこ。それ以上は言わん。

911:デフォルトの名無しさん
20/07/05 11:13:19.35 9F15TCk0.net
>>877
だからボーイングの制御系とかはそもそも全然別の話。
もちろん正しいとは限らないけど標準なのは確かだわな。
日本初のOOより優れたこういうメソッドがある!というなら
もちろん喜んで聞くけどね。

912:デフォルトの名無しさん
20/07/05 11:14:37.74 kFjTOHVy.net
>いや、元々がpublicじゃなくてprivate単位でやれという話からなんだからその話だよ。
>ublicでprivateの分岐通ってるなら良いじゃんといなら誰も否定していないのでは?
そう、それが一致しているならいちいち関係ない話を絡めなくてもいいんでは?
public経由のテストで十分網羅できるのにそれでもprivateメソッド単位のテストが
必要なんて主張している人いたかな?そこに誤解があるんじゃないの?

913:デフォルトの名無しさん
20/07/05 11:15:16.65 9F15TCk0.net
>>880
いるから揉めてるんすよ。

914:デフォルトの名無しさん
20/07/05 11:16:31.89 M+BkbwUs.net
>>881
それはどれ?レスを教えて

915:デフォルトの名無しさん
20/07/05 11:17:47.72 MQ9nuMmc.net
アメリカの大手の一流がそうしてるから正しいのだという権威にすがった論理を
展開されておられたのでその会社ってど


916:ソらの会社なのって聞いてみたんだけど そんな会社本当にあるの?



917:デフォルトの名無しさん
20/07/05 11:18:34.49 MQ9nuMmc.net
t_wadaの次はアメリカの大手一流か、議論の根拠が権威ばっかりやな

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

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

919:デフォルトの名無しさん
20/07/05 11:22:22.08 /MeFbFCW.net
いちいち論点ずらすな。
お前ら、何で争ってるんだよ。

920:デフォルトの名無しさん
20/07/05 11:23:41.69 MQ9nuMmc.net
OOのビジネス系ってどんな仕事?
そんないい加減なことやっていい仕事ある?
トラブってもうちうちでなーなーで済むようなBtoBの仕事?
自社内でしか使わないシステムとか?

921:デフォルトの名無しさん
20/07/05 11:24:18.36 9F15TCk0.net
アメリカの大手一流が不満なら自分の業界の実例をあげたらいかがだろうか?
privateをテストケース書いて全件やってるとこなんておそらくないぞ。あるというならあげれば良いだけの話。
テストツールどうやって動いてるねん。コード自動で書き換えてコンパイルし直しか。話がおかしいのすぐわかるだろ。

922:デフォルトの名無しさん
20/07/05 11:24:52.69 /MeFbFCW.net
まず、このスレの連中は議論する前に論理学を学ぶことをお勧めするよ。
あと、詭弁について調べろ。

923:デフォルトの名無しさん
20/07/05 11:25:24.17 MQ9nuMmc.net
>>888
アメリカの大手一流ってどこの会社なん?

924:デフォルトの名無しさん
20/07/05 11:25:52.62 9F15TCk0.net
>>887
だからアメリカ製のパッケージとかコンサルとの間でよく揉めてるだろ。これは「バグ」じゃないとか。DBだってよくある話だわな。
君はどんな仕事なの?

925:デフォルトの名無しさん
20/07/05 11:26:35.07 9F15TCk0.net
>>890
君の会社はどこなん?

926:デフォルトの名無しさん
20/07/05 11:27:26.12 MQ9nuMmc.net
>>891
アメリカ製のパッケージとかコンサルとの間でよく揉めてる仕事なん?
なにそれ? 何言うてんの? 何の仕事してるんよ

927:デフォルトの名無しさん
20/07/05 11:27:47.35 kFjTOHVy.net
>>885
それは網羅してないからダメという意見では?
そこに反論するならば「privateのテストを強制すべきではない」ではなく
「public経由でも網羅することは可能」ではないかね?(できるなら)

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

929:デフォルトの名無しさん
20/07/05 11:28:29.72 MQ9nuMmc.net
>>892
アメリカの大手一流でこうしてるから、こうするのが正解なんやー
言うてたからアメリカの超一流ってどこなんよ? と聞いたんやけど
なんで言えへんの

930:デフォルトの名無しさん
20/07/05 11:28:59.86 YdQ981ul.net
>>870
新しい理論や手法を提唱する人には良くあることだと思うけど、その理論はある前提、ある側面では正しいけど、常に無条件に適用することは正しくないと本人は分かっていて、敢えてそういうことはわざわざ詳しくは説明しない。自分の論が有用な物だと主張したいがため、嘘はつかない範囲で相手が勝手に誤解してすごいと思わせるような物言いをする。
で、その理論に感銘を受けた人の一部が、理論の表面的な効能だけをありがたく受け取って問題点や前提条件などは正しく理解しないまま、受け売りの知識を他所で披露する。
そこで議論になると、本質をちゃんと理解してないまま自説を擁護しようとするから、無理が生じたり話が噛み合わなかったりする。
という流れでイマココなのかなと思う。

931:デフォルトの名無しさん
20/07/05 11:29:53.38 MQ9nuMmc.net
>>897
なるほどね、わかる気がする

932:デフォルトの名無しさん
20/07/05 11:29:56.16 M+BkbwUs.net
大手一流の名前を言うだけで逃げそう(笑)

933:デフォルトの名無しさん
20/07/05 11:33:32.02 MQ9nuMmc.net
足ガクガクになってまうよー

934:デフォルトの名無しさん
20/07/05 11:36:47.20 Ua1+WoRk.net
まぁ、単体テストでprivateを直接呼び出すのは変な話だけどな。
デバッグならともかく、単体テストでリフレクションによるprivate強制実行とか反則でしょ。
デバッグで許される理由は、バグを見つける可能性があるから。
単体テストで駄目な理由は、テストの合否判定が不当に変わる恐れがあるから。
というのが自分の見解だが、皆さんはどう?
スレが加速してからの途中参加だから、自分の発言に自信ないけど。

935:デフォルトの名無しさん
20/07/05 11:37:26.26 9F15TCk0.net
>>894
そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。
見せたくないからprivateなわけで。
もちろんデベロッパー個人でコード入れて確認することはあるだろうけれども、
開発手順としてテストケース書いてログ残してというのは違う。
public経由で内部を網羅してるかしてないかは知ったことではない、というのが正解。
上の例で言えばfuncBやfuncSがnullをチェックしてようがしていまいが他のチームには
関係ないわけです。入り口でnullチェックしてれば。
個人的にはサイズがでかければprivateでも入れるけども、それをテストケース書いて
ログ残してと要求されたことはないし、普通はされんはず。少なくともアメリカでは。

936:デフォルトの名無しさん
20/07/05 11:38:33.09 MQ9nuMmc.net
GoogleであってもMicrosoftやOracleもバグのないソフトは作れないし
銀の弾丸的な手法があるわけもなく、アメリカ、大手、一流という箔付けに頼ってるだけでしかない

937:デフォルトの名無しさん
20/07/05 11:41:45.16 Xwol7cCi.net
せっかく匿名で議論できるのに
「アメリカの大手一流」とか言い出しちゃうところが哀れやわ
>>805の下痢便コード出た時点でスレ終了やろ普通

938:デフォルトの名無しさん
20/07/05 11:43:37.87 9F15TCk0.net
>>896
君の会社はどこなの?
アメリカ大手1流でブライベート単位でのテストケース書いたりした網羅的なテストは「していない」という証明は悪魔の証明だから無理だけど。全社で働いたわけじゃないし。
逆にアメリカ大手1流でやっているという証明は一件出すだけなのでGAFAのどこでも、マイクロソフトでもアドビでも簡単にできるのでぜひどうぞ。
ただ、なんかコピペで爆撃されたオートメーションツールでは、特にコンパイル必要な言語は、直接privateテスト出来ないよ。当たり前の話。

939:デフォルトの名無しさん
20/07/05 11:45:23 MQ9nuMmc.net
>>905
アメリカの大手一流ってどこなんよ?

940:デフォルトの名無しさん
20/07/05 11:45:48 MQ9nuMmc.net
その会社がやってるからすごいんでしょ、はよ教えてやー

941:デフォルトの名無しさん
20/07/05 11:47:16 MQ9nuMmc.net
もう何でもええから言うて、そしたら僕がすごーいって言うから、もうそれでええやんか

942:デフォルトの名無しさん
20/07/05 11:49:23 9F15TCk0.net
また別IDが下痢便とか発狂し始めた。

お前はほんとにウンコとかそのレベルのことが好きだな。

943:デフォルトの名無しさん
20/07/05 11:51:02 9F15TCk0.net
>>907
やって「ない」という話だけど。
まず日本語学んでやー よろしくなー

944:デフォルトの名無しさん
20/07/05 11:51:58 MQ9nuMmc.net
>>910
アメリカの大手一流ってどこなんよ?

945:デフォルトの名無しさん
20/07/05 11:52:54.88 MQ9nuMmc.net
たぶんアップルは単体テストやってない、SSLでアホなバグだしてたから、あの会社適当だわ、しらんけど

946:デフォルトの名無しさん
20/07/05 11:53:26.19 9F15TCk0.net
>>911
君が自分の名刺でもあげたら考えとくわー

947:デフォルトの名無しさん
20/07/05 11:55:12.71 MQ9nuMmc.net
>>913
アメリカの大手一流ではそれが普通なんやーおりゃーってイキっておられましたよね
だから聞いたのに、教えてくれないなんて酷いです、あんなにイキってたのに酷いです

948:デフォルトの名無しさん
20/07/05 11:55:58 M+BkbwUs.net
>>902
> そもそもpublicを経由するのが網羅してないから、経由せずにprivate単位で
> コード書き換えてテストやるべきという主張自体がOO的にはおかしいわけです。

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

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

テストするためにpublicにするのではなく
問題がある設計を直せばpublicになる。と言っている。

949:デフォルトの名無しさん
20/07/05 11:55:59 9F15TCk0.net
>>914
劣等感がひどいな君は。まずはカウンセラーに
かかりなさい。OOの話はそれからしようか。

950:デフォルトの名無しさん
20/07/05 11:58:34 9F15TCk0.net
>>915
いや だ か ら この人。

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

951:デフォルトの名無しさん
20/07/05 11:59:21 MQ9nuMmc.net
アップルのSSLのバグはこれね

Apple史上最悪のセキュリティバグか、iOSとOS XのSSL接続に危険すぎる脆弱性が発覚─原因はタイプミス?
URLリンク(appllio.com)

952:デフォルトの名無しさん
20/07/05 12:06:18.88 wqV8YbJ4.net
IUsMolpfに文句言えばいいのに。

953:デフォルトの名無しさん
20/07/05 12:07:47.85 kFjTOHVy.net
>>902
ああつまり、重要度は関数仕様>ブラックボックステスト>ホワイトボックステストだから
テストのために仕様変更はすべきでないという主張か。
それはわからんでもない気はするけど、そういうウォーターフォールが絶対というわけでもないしな。
その是非はさておき、そこが論点なら例えばリフレクションのような形でテストできたり、あるいは
テスト仕様を書く本人が関数仕様も決定することができる条件なら全然問題ないわけだ。

954:デフォルトの名無しさん
20/07/05 12:07:48.24 9F15TCk0.net
>>918
正直iOSは全然知らんけどこれは酷いなw
Public Private以前にStaticだからなんにしても直接テストする部分だな。

955:デフォルトの名無しさん
20/07/05 12:08:47.51 MQ9nuMmc.net
>>921
せやろw

956:デフォルトの名無しさん
20/07/05 12:13:26.38 9F15TCk0.net
>>919
横から狂犬が噛み付いてくるんだよ。
>>920
ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。
そもそも「テスト」と言ってもいろんな段階があるわけだし、「ユニットテスト」にしても
プロジェクトによって意味が違うわけで。
なんにしてもprivateを(例外はあるにせよ)全部公式な形でテストしろというのは
OOの手法のプロジェクトでは「普通は」やらんというだけなのになんでこんな揉めるのか。

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

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

959:デフォルトの名無しさん
20/07/05 12:20:23.64 MQ9nuMmc.net
>>805
こう書いた方が良いと思うの
URLリンク(paiza.io)

960:デフォルトの名無しさん
20/07/05 12:21:30.51 MQ9nuMmc.net
privateメソッドが正しいことは確認する、その上でpublicのメソッドが正しいかテストするって感じ

961:デフォルトの名無しさん
20/07/05 12:30:30.98 kFjTOHVy.net
>>925
これが「privateのテストを全部やれ」に読めてしまうのか。そこが原因だな。

962:デフォルトの名無しさん
20/07/05 12:32:35.17 M+BkbwUs.net
>>923
> ウォーターフォールは関係ないし、重要度をつけてるわけでもないけれども、
> 普通はprivateはソースコード変えてまでテストするものではないというだけの単純な話。
テスト中に設計の問題が発覚しても
ソースコード書き換えないの?
ソースコード変えてまでテストするものではないというけど
なんでソースコードを作成&自分が書いたそのコードをテストしてるときに
自分が作成してるソースコードを変えたらだめなの?

963:デフォルトの名無しさん
20/07/05 12:36:24.73 M+BkbwUs.net
普通の開発だったら
0. なにかの修正を行う必要が発生する
1. その修正のためにソースコードを修正する
2. 修正したコードが正しいかテストする
3. 1〜2を繰り返し修正したコードに問題がなければ開発完了
4. 統合テストとかより大きなテストを行う
でしょ?
public・privateメソッドをテストしたいっていうのは
この1〜2のフェーズで発生することなのに、
なんでテストがやりにくいなと思ったときに
ソースコードを修正したらだめなの?

964:デフォルトの名無しさん
20/07/05 12:38:58.81 wqV8YbJ4.net
>>926
スマホでも見やすくなったな。
あー、なるほど。
でも、サンプルみたら少し混乱してきた。
自分はクラスの単体テストをイメージしてたけど、まさか、Mainクラスの中に定義されたprivateメソッドの単体テスト(?)の話をしていたとか?
もう単体テストの意味が少し崩壊してきたが...

965:デフォルトの名無しさん
20/07/05 12:46:16.73 BTTSshKd.net
どういう流れなのか追うのもめんどいなw

966:デフォルトの名無しさん
20/07/05 12:52:51.86 9F15TCk0.net
>>928
そもそも300くらいからそういう話だから。
privateはpublicからアクセスして全部網羅できるから問題ないなんて
誰も否定してないしそういうことならもともと荒れてない。
>>929
あのさ、例えばバグが発生したらコード書き換えるのは当たり前だよね?
そんな話では当然ないよね?
privateを直接テストするためには外部から呼べないのだから、呼ぶためには
クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
する?
普通はコード書いてる最中にテストコードを入れて確認するのは公式なテストの
メソッドでは無いし、それをドキュメント化したりするのは求められないと
思うが。
>>926
ワロタw
けどそうじゃ無い。privateで直接アクセスした時のみnullがでるということ。
intじゃ無いのは例のためにわざとそうなっている。あとchinTestが呼ばれてないし、
OptionalにisEmpty無いのでは。

967:デフォルトの名無しさん
20/07/05 12:54:31.17 9F15TCk0.net
nullがでる->ヌルポがでる

968:デフォルトの名無しさん
20/07/05 12:54:57.72 M+BkbwUs.net
>>933
> privateを直接テストするためには外部から呼べないのだから、呼ぶためには
> クラス内に書くしかないわけだよ。で、ソースに書き込んでクラス内に書いて
> テストしたあとまたそのコードを取り除いてとかするの?それをドキュメント化
> する?
誰がそんな事するって言ってんの?
お前が想像が間違ってる

969:デフォルトの名無しさん
20/07/05 12:56:01.25 MQ9nuMmc.net
>>933
えっとごめんそのnullの問題は設計が下手なだけだと思ってて、設計を見直すべきかと
privateのテストをどうしますかの例として出したので問題ないっしょ
君はこのプログラムをどうやってテストするん?

970:デフォルトの名無しさん
20/07/05 12:56:34.25 3WDjCjSx.net
よくもまあ粉薬をオブラートで包むような話でこれだけのレスで盛り上がれるなー

971:デフォルトの名無しさん
20/07/05 12:57:28.17 M+BkbwUs.net
いやーびっくりだw
設計がおかしいから設計を修正するって話をしてるのに
設計を修正した後に修正前に戻すなんでやらないだろ!って言われちゃった(笑)
だーれも修正前に戻すなんて言ってないの
おかしい設計を修正して「開発完了」なの

972:デフォルトの名無しさん
20/07/05 12:57:46.31 JiRnWiGC.net
たぶん、スレタイがスレタイだから、手続き型でプログラムを書く人のイメージする単体テストとオブジェクト指向プログラマーのイメージする単体テストで齟齬が生じているのでは?
そりゃ、サンプルみたいに関数が定義されていたらprivateだろうと関数はテストするべきって発想になるのは不思議じゃないし、オブジェクト指向に基づき設計されたクラスを単体テストする話であれば、privateをテストって、どういう意味なんだろって不思議がるだろうよ。
そして、たぶん、サンプルコードに対して真っ先に突っ込むべき点はOOPでも何でもないコードという点だと思うのだが、そこはいいのかな?

973:デフォルトの名無しさん
20/07/05 12:57:47.49 MQ9nuMmc.net
OptionalにisEmptyが無いというのは何言ってるのかわからない
本当になかったらコンパイルに失敗するよ

974:デフォルトの名無しさん
20/07/05 13:00:08.78 M+BkbwUs.net
>>939
一人privateがテストしづらいからpublicに変更してテストして
"元に戻す" 話をしてるやつがいるみたいだが(笑)

975:デフォルトの名無しさん
20/07/05 13:00:23.50 MQ9nuMmc.net
>>939
僕はOOPのコードだと思ってるよクラスが定義されてるからね
君が思うOOPのコードはこれだっていうのを君に出していただきたいかな

976:デフォルトの名無しさん
20/07/05 13:00:34.24 9F15TCk0.net
>>935
もうお前は良いからスレを読め。
>>936
いやそうじゃなくて、publicで呼ばれるprivateを直接テストするのかという
話なので、そのためにわざわざヌルポになるように書いてるわけで、staticなら
そのままメソッド呼べば良い話。

もうこの板嫌。。。

977:デフォルトの名無しさん
20/07/05 13:03:47.50 MQ9nuMmc.net
>>943
ヌルポになるような設計はおかしいのがそれはコーディング力の稚拙さゆえ。
だから、いまはそのヌルポの問題は置いておこう。
さて、君はこのプログラムをどうテストするのか教えて欲しいっていうのが僕の要望だよ。

978:デフォルトの名無しさん
20/07/05 13:06:51.97 9F15TCk0.net
>>944
いやだから そ う じ ゃ な く て
privateでだけヌルポが出るように書いてるの。privateとpublicのテストの話だから。
出さないだけならnullチェック入れれば良いだけの話だが、そういうことじゃ無くて
わざと出るようになってるの。
そのプログラムならstaticなのだからそのまま呼べば良いし、
chinTestも呼ばれてないけどpublicなのだからテストしたければそのまま
呼べば良い話。

979:デフォルトの名無しさん
20/07/05 13:10:29.02 JiRnWiGC.net
>>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()
こんな風に内部実装を知らなくても呼べる。

980:デフォルトの名無しさん
20/07/05 13:11:36.99 MQ9nuMmc.net
>>945
わざと出るように入れたのが現実の実装と乖離してるので、わざと入れる意味が無いので
気にする必要ないですよってこと
君はpublic経由でprivateをテストするんだって立場ですよね
君はどうテストを書きますかってことを教えて欲しいです
君の元のコードでもいいですよ、僕が変更したコードでも良いですよ
君はどうprivateをテストしますか?

981:デフォルトの名無しさん
20/07/05 13:12:18.35 JiRnWiGC.net
残念ながら、クラスを使えばOOPという認識は間違い。

982:デフォルトの名無しさん
20/07/05 13:13:15.86 MQ9nuMmc.net
>>948
僕は君の認識が間違いだと思ってる、君の方が残念

983:デフォルトの名無しさん
20/07/05 13:13:55.43 MQ9nuMmc.net
クラスの存在こそがOOPの本質

984:デフォルトの名無しさん
20/07/05 13:13:59.63 JiRnWiGC.net
え、そこに反論されるの?
何このスレ。

985:デフォルトの名無しさん
20/07/05 13:14:57.78 JiRnWiGC.net
JavaScriptとかpythonとか、元々、クラスはサポートしていないのに?
プロトタイプベースはオブジェクト指向じゃないとでも?

986:デフォルトの名無しさん
20/07/05 13:17:49.53 MQ9nuMmc.net
>>951
えじゃねえよ、なめんなよ

987:デフォルトの名無しさん
20/07/05 13:18:05.20 9F15TCk0.net
>>947
意味がないどころか、そこにしか意味がないんだよ。
それ「だけ」を見せるためのコードなんだから。staticとか
なら話の流れとなんにも関係がないのでそれこそ意味がない。
でもあえていうなら、そもそもまず連打が好きじゃ無い。自分ならループにするけど、
それだけでもない。
まず壊すようにテストすんの。null入れたり、変なオブジェクト入れたり。
で、privateをテストするんじゃなくて、要件通り動くかどうか。nullからint maxまで
回して、要件通りの結果が全てでくるか。変なオブジェクト入れたらどうか。
そういう感じ。
でも最初に書いたように、publicとprivateの話なんだから、そこで
エラーが出るか出ないかがないとこのスレ的にはなんの意味もない。


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

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