1 名前:デフォルトの名無しさん [2020/06/18(木) 23:47:36.69 ID:l/2SQUll.net] カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。 かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。 一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。 https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
745 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 14:56:58.97 ID:M3d71N9d.net] >>708 > privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか? privateとかpublicとか関係なく、複雑なことをやらせるなよ 関数はせいぜい一画面程度(50行)ぐらい、大半は20行以下にするもんだ
746 名前:デフォルトの名無しさん [2020/07/04(土) 15:00:38 ID:pmIasW6W.net] はいはいどうせt_wadaがそう言ってたんだろ
747 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:01:31 ID:M3d71N9d.net] >>722 また「人」の話かよw
748 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:02:35 ID:M3d71N9d.net] 権威ある専門家が言ってることだから間違ってます 俺は認めませーんって。どういう気持で言ってるんだろうねw
749 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:04:45.61 ID:M3d71N9d.net] 俺は「そいつは権威ある専門家
750 名前:セ!」って指摘しただけで 勝ったつもりにはなれないなぁ(笑) [] [ここ壊れてます]
751 名前:デフォルトの名無しさん [2020/07/04(土) 15:05:05.57 ID:pmIasW6W.net] t_wadaはなんて言ってるんだよ!
752 名前:デフォルトの名無しさん [2020/07/04(土) 15:05:39.57 ID:pmIasW6W.net] t_wada原理主義
753 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:06:52.47 ID:iuca8iKQ.net] 必死だなw
754 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:07:21.60 ID:gUMCer1d.net] 今までたくさんのキチガイPGを見たが privateメソッドだからテストしないとか言ってるやつだけは許さない テメーの金玉はここで潰す
755 名前:デフォルトの名無しさん [2020/07/04(土) 15:10:41.07 ID:pmIasW6W.net] ごりごりーごりごりー そうだ!すりつぶした粉で大根餅作ろうよ!
756 名前:575 mailto:sage [2020/07/04(土) 15:11:12.87 ID:sra5+07B.net] >>729 問題なのは、そのprivateの挙動をどうやって確認するのかって話なのかな? 単体テスト?総合テスト?それとも実装中しながらのデバッグ作業の話? 正直、未だにどこで揉めているのかわかりません。 誰か議題教えて。
757 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:13:12.65 ID:iuca8iKQ.net] >>731 > 正直、未だにどこで揉めているのかわかりません。 自転車置き場
758 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:14:01.93 ID:M3d71N9d.net] >>731 1. public、privateに限らずコードはシンプルにするべき 2. シンプルであるなら、privateはpublicメソッド経由でテストできる 3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる 4. 設計上の問題はバグと言ってもいい。バグなんだから直せ ここまではあってる
759 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:17:09 ID:gUMCer1d.net] >>731 設計書見ろよゴミカス 書いてないなら死にまくれ
760 名前:575 mailto:sage [2020/07/04(土) 15:21:35 ID:sra5+07B.net] >>734 なんで、スレの流れに沿って説明しただけの俺がゴミカス呼ばわりされるのかもわからん。何このスレ。 >>576 >>578でも俺の意見ですらない部分に的外れな回答がつくし。
761 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:24:14 ID:M3d71N9d.net] 動けばOKって考えてる人がどれだけ多いかだな テストを自動化するという考えがない シンプルな設計をするという発想がない 動けば設計に問題はないと考えている
762 名前:デフォルトの名無しさん [2020/07/04(土) 15:29:27 ID:pmIasW6W.net] >>735 Welcome to Underground
763 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:32:02.34 ID:NXT3QGLz.net] >>733 あってるの1だけじゃないかw
764 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:34:57 ID:iuca8iKQ.net] 叩き台つくった(´・ω・`) https://ideone.com/1XhPwl
765 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 15:39:15 ID:e19OrKR5.net] なんかやべえ流れになってるな とりあえずつっこんどくと 1. unitテストの定義に世界共通の定義など存在しない 2. unitテストという単語はプロジェクト用語であり、プログラム用語ではない 3. マーティンはunitテストという単語と自動テストの単語わけたらいいんじゃない?と提案してる。xunit 4. publicとprivateはクラス設計のため、もっと言えばクラス間の責任範囲のために存在している 5. xunitテストのためだけにprivateをpublicにするのは誤り。本当にやりたければリフレクションでもすればいい 6. c2カバレッジ100%するかどうかは分野次第 7. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある
766 名前:575 mailto:sage [2020/07/04(土) 15:57:07.88 ID:sra5+07B.net] ちなみに、的はずれって100%君のことね。まぁ、そんなの今更どうでもいいか。 実際、クラスをどんな風にテストするのか興味あるね。
767 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:03:21.65 ID:e19OrKR5.net] やだよ組み込みが普通だと思ってる人との会話なんかしたくない
768 名前:575 mailto:sage [2020/07/04(土) 16:32:24 ID:sra5+07B.net] そんなー。
769 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:32:41 ID:IaMjsjOG.net] >>735 なんだ早く死ねよ
770 名前:575 mailto:sage [2020/07/04(土) 16:36:24 ID:sra5+07B.net] まぁ、Android開発(アセンブラレベルからJavaアプリレベル)をやってるから、たぶん、大丈夫なはず。 組み込み=staticおじさんのレッテルが貼られがちだけど、 私はstaticおじさんじゃないんだけどなー...
771 名前:。 まぁ、アセンブラレベルの階層になると、オブジェクト指向要素なんて微塵もないけど。 [] [ここ壊れてます]
772 名前:575 mailto:sage [2020/07/04(土) 16:37:37.70 ID:sra5+07B.net] >>744 みたいな知的障害者が時々沸くのはなんで?
773 名前:575 mailto:sage [2020/07/04(土) 16:46:14.68 ID:sra5+07B.net] もういいや。アホくさ。こんなスレ覗いたのが間違いだったな。 人生を無駄にした気分だ。 このスレを覗く時間を使って別して作業してた方が有意義だったよ。 >>744 君はID変えながら死ね死ね連呼しているみたいだけど、気を付けた方がいいよ。あばよ、中身がない死ぬべき技術者さん。
774 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 16:53:03.01 ID:4XE5L1k5.net] プ板、と言うか専門板なんてそれぞれの話題を餌にマウント取り合ったり罵り合ったりする所だから。 相手にしたら負け。
775 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 17:09:48.00 ID:O/jhkl6h.net] 言語の制約によって思考が制約されてる典型例 カマッてくれる人が量産されて>>1 が喜んでる
776 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 18:16:38.54 ID:sCZUG34Z.net] privateメソッドのテストしないとか言ってるカスとまともに会話するメリットないだろ
777 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 18:35:31.64 ID:gmurOIZf.net] まあテストやるって言ってもこれくらい意見が違って揉め事になるってのは 結構普通だったりするからそういう勉強にはなってるんでないの。
778 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 20:02:50.07 ID:M3d71N9d.net] このスレの結論 短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。 パブリックメソッド経由でテストする 多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。 テストできているか不安があるならテストカバレッジを確認しましょう。 別クラスのパブリックメソッドとする プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを 示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。 テスト対象の可視性を(やや)上げる 例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが 「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません) プライベートのまま、リフレクションでアクセスしてテストを書く リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を 書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。 (ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です) まとめ 繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
779 名前:デフォルトの名無しさん [2020/07/04(土) 21:00:07.43 ID:42LT/T3f.net] >>752 三行以上は読んでもらえないから工夫が必要。
780 名前:デフォルトの名無しさん [2020/07/04(土) 21:07:29.85 ID:n1PM9L+Z.net] ガワだけのクラスが出来上がるな #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開発と名付けよう 相手側に技術が流出することがない
781 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 2
] [ここ壊れてます]
782 名前:1:08:27.02 ID:NXT3QGLz.net mailto: >>752 ×このスレの結論 ◯ぼくの主張の結論 [] [ここ壊れてます]
783 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 21:10:05.29 ID:NXT3QGLz.net] >>755 間違えた ×ぼくの主張の結論 ◯ぼくがまとめた、偉い人が書いた本の受け売り情報
784 名前:デフォルトの名無しさん mailto:age [2020/07/04(土) 21:41:09.24 ID:pmIasW6W.net] 本人の経験が感じられなくて薄っぺらいんだよなあ
785 名前:デフォルトの名無しさん mailto:age [2020/07/04(土) 21:43:15 ID:pmIasW6W.net] 僕の高い知性と豊富な経験に基づく主張を聞いて欲しい privateメソッドはテストした方がいい
786 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 21:56:15 ID:gmurOIZf.net] >別クラスのパブリックメソッドとする >プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを >示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の >プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の >プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の >コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。 これだけは意味ある意見ではあるな。他はカスみたいな理由だが。
787 名前:デフォルトの名無しさん [2020/07/04(土) 22:11:41 ID:42LT/T3f.net] カバレッジ測定ツール高いし持ってないので、private直接テストしたい。
788 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 22:19:33 ID:O/jhkl6h.net] >>759 >>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを >>示唆している場合があります わかる >>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。 これは選択肢の一つであって常にそうすべきなわけではないんだよね クラスの分割基準とテストを書く書かないの基準は別だから
789 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 22:19:58 ID:O/jhkl6h.net] プライベートだとテストしにくいので、パブリックメソッドとして抽出し、普通にテストしましょう これが本音
790 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 22:47:43.56 ID:1l6Tw/KB.net] https://i.imgur.com/FG4MVEW.jpg
791 名前:デフォルトの名無しさん [2020/07/05(日) 00:43:13.75 ID:9F15TCk0.net] プライベートがテストできるということはホワイトボックスなわけでユニットテスト段階でしょ。 そもそもプライベートをテストするにはソース自体書き換えないと呼べないじゃん。 ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと なったらブラックボックスが普通。 てかもはやテストの話でカプセル化やOO関係ないな。
792 名前:デフォルトの名無しさん [2020/07/05(日) 01:18:10.47 ID:LRfXHt7v.net] ホワイトやブラックについて語るのは時期が悪いというか、国家を危険にさらす可能性さえあるからね。 もう少し社会情勢に気を配ろうよ。
793 名前:デフォルトの名無しさん [2020/07/05(日) 01:32:28.51 ID:LRfXHt7v.net] 昔のホームページにはサイタマップというものがあった。
794 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:04:25.24 ID:9F15TCk0.net] 埼玉県民にはそこらへんの草でも食わせておけ
795 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:11:14.07 ID:58eR5uXa.net] >>764 > ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと まさかpublic・privateメソッドのテストをテスト工程でやる、 public・privateメソッドを書いた人と別の人がやるって思ってないか? public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから 当然ソースを書いて(書き換えて)テストするに決まってるじゃん お前は、その後の(統合)テスト工程でソースコードを変えてテストとか言ってるだろw
796 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:46:27.47 ID:9F15TCk0.net] >>768 なんなのその口調気持ち悪い。 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。 デベロッパ個人のテストはコーディングの範疇なのでもちろん個人ではやるが それほど大事ではない。 組み込みで車のブレーキ制御とかは全く別の話だろうがOOとかカプセル化とは 基本かけ離れた分野。
797 名前:デフォルトの名無しさん [2020/07/05(日) 02:48:43.07 ID:LRfXHt7v.net] テストしない理由を考えるのは。
798 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:50:28.66 ID:58eR5uXa.net] >>769 > 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。 大規模開発だとpublicやprivateメソッドのテストを別の人がやるって? テストコード専用に書く人でもいるのかよw それはどこの話だ?事例の一つぐらい持ってきてから言え
799 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:51:54.42 ID:9F15TCk0.net] >>771 某アメリカ製のパッケージとかだな。 むしろテストコード専門に書く人いないのかよ。じゃあOOとかカプセル化とか 必要なほどの規模じゃないか体制がおかしいな。
800 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:53:01.58 ID:58eR5uXa.net] > 某アメリカ製のパッケージとかだな。 だから事例は?
801 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:54:30.54 ID:58eR5uXa.net] ユニットテストのコードを他の人が書いて、どうやってTDDをやるのか不思議なんだがw 先にテストコード書く人がテストコードだけ書いて、 これに通るように実装しろ! これがTDD(テスト駆動開発)だ! とか言ってる所とかでもあるんか? 事例を持ってきてくれ
802 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 02:56:40.99 ID:9F15TCk0.net] だからユニットテスト自体が少なくともビジネス分野では大事じゃないと 上にも書いてあるが。 事例なんか出せるわけないだろ。中の人なんだから。
803 名前:デフォルトの名無しさん [2020/07/05(日) 02:58:40 ID:LRfXHt7v.net] 製品についてネットに書き込むときは、法務と企画のハンコ必要なので。
804 名前:デフォルトの名無しさん [2020/07/05(日) 02:59:12 ID:LRfXHt7v.net] ちなみに法務俺、規格俺だけど。
805 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:03:18.34 ID:9F15TCk0.net] 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら 億の分岐を全部全パターンテストするの? テストなんてそのあとファンクショナルやってリグレッションやってアクセプタンスやって ってあるのに、ユニットテスト「だけ」でそれでしょ? サグラダ・ファミリアかな?
806 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:03:49.83 ID:58eR5uXa.net] >>775 中の人だから事例が事例を出せないってことは、 お前の会社以外でやってないってことだろw
807 名前:デフォルトの名無しさん [2020/07/05(日) 03:04:01.72 ID:LRfXHt7v.net] 正しいとか正しくないとかどうでも良いので、privateのテストをさせてほしいものですね。
808 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:05:23.08 ID:58eR5uXa.net] >>778 > 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに > 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら > 億の分岐を全部全パターンテストするの? それユニットテスト関係ないよね? 手動で全パターンをテストするの? 答えはお前自身が言えるはずだよね?
809 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 03:06:25.42 ID:58eR5uXa.net] ユニットテストなんかしてねーよ ソース修正するたびに、 億の分岐全パターン手動テストしてるんだよ! って言ってほしいな? まだかな?
810 名前:デフォルトの名無しさん [2020/07/05(日) 03:13:56.54 ID:LRfXHt7v.net] けんか腰は知能が高いと言われるム板に似合わないんだよな。 ユーモアを交えて会話するべきだと思います。
811 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:06:24 ID:9F15TCk0.net] >>779 知ってる限りGAFAでもERP各社あたりでもやってないけどね。 試しに(ドイツだが)SAPあたりにカバレージどれだけですかって聞いてみれば? 何それ美味しいの?だよ。 まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は おしまい。
812 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:11:13.84 ID:58eR5uXa.net] では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万テストケースを実行しているわけではなく、 全テストケースを実行するのは一定の間隔で、普段は修正に対して依存があるテストだけを実行しているそうです。
813 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:13:30.65 ID:58eR5uXa.net] Googleの考え方 https://www.publickey1.jp/blog/11/post_144.html テスターはデベロッパーがテストできるようにするのが仕事 このようにEngineering Productivityのメンバーのレポートラインと 所属を分けることのメリットを、Whittaker氏は次のように書いています。 ここにグーグルの品質管理の大事なポイントがあるようです。 一般にテストは製品開発の最後の段階で行われることが多く、製品チーム/開発チームの 中にテストチームを抱えても、テストフェーズ以外は手持ちぶさたになってしまうため、 多くの開発組織ではテストチームは製品チーム/開発チームとは別に存在し、 必要なときに登場してテストを行う、というケースがほとんどです。 ====以下重要==== ところがグーグルではEngineering Productivityに属する、テストのノウハウを持ち支援を 行うエンジニアたちは、前述のように各製品チームに所属しています。 そう、グーグルではテストチームではなく、製品チームが自身で品質管理を負っている。 各デベロッパは自身でテストすることを期待されている。テスターの仕事は、自動テストの インフラを確立することと、それによってデベロッパ自身がそれをプロセスの中で実行できるようにすること。 テスターはデベロッパーがテストできるようにするのだ。 各製品チームは、Engineering Productivityのメンバーの支援を受けつつ、自分たちの責任で テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。
814 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:14:26.63 ID:58eR5uXa.net] https://www.publickey1.jp/blog/11/post_144.html Whittaker氏はさらに次の記事「How Google Tests Software - Part Two」で、 エンジニアに与えられる3つの役割についても触れています。 Softweare Engineer in Test(SET) テストのしやすさ(Testability)にフォーカスした役割。デザインレビューをし、 品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。 ユニットテストや、テストフレームワーク、自動テストも書く。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
815 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:16:28 ID:58eR5uXa.net] 「コードをテストしやすいようにリファクタリングする。」 っていうのがまさにprivateでテストしたいのに public経由でテストできない ならばテストしやすいようにリファクタリングしましょうって話になってる
816 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:18:26 ID:58eR5uXa.net] 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++をある程度知ってることが前提です。
817 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:19:35 ID:9F15TCk0.net] >>785 テスト件数が問題なのではない。オートメーションすればファンクショナルレベル でのテストはいくらでも流せる。 新しいファンクション・メソッドを書くたびに、あるいは変更をするたびに 全ての条件を網羅して、それをテストケースにして、コード自体をモディファイして テストした後、結果をドキュメント化してまたコードを元に戻すということはやらないという話。 プライベートのファンクション・メソッド単位でC2100%テストしていくというのは そういうこと。
818 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:22:02 ID:58eR5uXa.net] 米Google、JavaScriptユニットテストフレームワーク「JS Test」をオープンソースで公開 https://mag.osdn.jp/11/10/03/1012250 米Googleは9月29日、JavaScriptユニットテストフレームワーク「Google JS Test」を発表した。 元々はGoogle社内のプロジェクトで利用されていたもので、ライセンスはApache License 2.0。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
819 名前:デフォルトの名無しさん [2020/07/05(日) 04:27:51 ID:9F15TCk0.net] いや、だからそういうツールがあるのなんて常識だが、privateはテストしない。 上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、 そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを 全パターンするわけでは、当たり前だけど、無い。 クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは 当然ある。
820 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:29:16 ID:58eR5uXa.net] facebook / j
821 名前:est https://github.com/facebook/jest https://jestjs.io/ja/ Jest はシンプルさを重視した、快適な JavaScript テスティングフレームワークです。 [] [ここ壊れてます]
822 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:31:02 ID:9F15TCk0.net] 全くわかってないなこりゃ。
823 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:33:27 ID:58eR5uXa.net] 反論すりゃいいのにw
824 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:34:11 ID:58eR5uXa.net] 憶測に基づいた発言はいらないよ? 俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ
825 名前:デフォルトの名無しさん [2020/07/05(日) 04:34:11 ID:LRfXHt7v.net] テストの専門家だからそう思うのでは。
826 名前:デフォルトの名無しさん [2020/07/05(日) 04:49:06.73 ID:LRfXHt7v.net] 完ぺきにテストしたからといって製品の完全性を保証することはできません。 したがってテストしないほうが良いのです。
827 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:52:22.10 ID:58eR5uXa.net] ほらなw 完璧にテストした所で落ちない飛行機はありません したがってテストしないほうがいいのです と言い始めた 事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。 ここから荒らしと変貌する前触れだな
828 名前:デフォルトの名無しさん [2020/07/05(日) 04:53:23.27 ID:LRfXHt7v.net] 食いついてきた。 嘘みたい。
829 名前:デフォルトの名無しさん [2020/07/05(日) 04:58:23.98 ID:LRfXHt7v.net] privateもテストさせていただけるとありがたいけど、禁止するのが正しいことになってるからな。
830 名前:デフォルトの名無しさん [2020/07/05(日) 04:59:58.66 ID:LRfXHt7v.net] Visualstudioのテストエクスプローラを使うと考えが変わるのでは。 道具の問題かもしれない。
831 名前:デフォルトの名無しさん [2020/07/05(日) 05:53:15.48 ID:9F15TCk0.net] ユニットテストというのはプロジェクトによってかなり幅があるわけで、 当たり前の話だがテストオートメーションのプログラムが勝手にコード 弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。
832 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:05:37.56 ID:58eR5uXa.net] ↑みたいなことを言ってるやつがGAFAは〜と なんのソースもなしに言ってるわけだよ こんなやつの話を聞くやつがいると思うかね?
833 名前:デフォルトの名無しさん [2020/07/05(日) 06:06:03.12 ID:9F15TCk0.net] ずれるかもしれないが下のような場合、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;} }
834 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:21:04.56 ID:9F15TCk0.net] あと日本のNTTデータから降りてくるような大企業案件とかもやったことが無いので知らん。 アメリカのビジネス系一般の話。
835 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:25:10.48 ID:M+BkbwUs.net] >>805 そのコードを見ただけで素人ってわかるよw
836 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:27:32.73 ID:9F15TCk0.net] はいはいそうですね。
837 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:33:43.45 ID:M+BkbwUs.net] 1. 関数名が意味不明 2. インデントがめちゃくちゃ 3. スペースを入れる所が統一されていない 4. lenが配列なのはなんでだ? 5. nullを情報として扱うな 6. 戻り値なしなのに関数の最後でreturnを書くな 7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな 8. テストするなら、長さを入力し文字列を返す関数を作れ なんでたったこれだけの関数で こんなにレビューの指摘項目が存在するんだかw
838 名前:デフォルトの名無しさん [2020/07/05(日) 06:38:43.59 ID:9F15TCk0.net] 口調が気持ち悪い人は相手しても仕方ないからほっとくとして、上の例だと(に限らず) funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で リクワイアメントとエッジケースは全てテストするんだから、無駄にテストが倍以上に なるしそれも手動になる。 普通のケースだとtestChinに対するテストコード書いて、変更があればそれを流す形になる。 上にさんざコピペが貼られたテストツールはそういうのを自動で流すツール。 テストケース流したいからfuncSとfuncBをパブリックにするというのはカプセル化 できてないし、ましてコード弄ってまでテストするのを手順化するというのは普通はやらない。 書いてる最中にコードちょろっと入れて確認するようなことはあって、それもユニット テストといえばユニットテストだが、手法としてプロジェクト単位で公式にやるような ものでは普通は無い。 車のブレーキ制御とかならそこまでやって欲しいが、OOとかカプセル化とはちょっと 違う話。
839 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:42:42.57 ID:M+BkbwUs.net] > funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で public経由でテストできるだろw
840 名前:デフォルトの名無しさん [2020/07/05(日) 06:45:32.12 ID:9F15TCk0.net] >public経由でテストできるだろw と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を やっとご理解いただけたようですな。 >>768 ではこんな事言ってましたが。 >当然ソースを書いて(書き換えて)テストするに決まってるじゃん
841 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:47:04.12 ID:M+BkbwUs.net] >>810 他の言語を勉強したほうがいいぞ どうもお前は、絶対に来るはずがない値が引数に渡された時、 そのテストしろって言ってるようだからな 「絶対にありえない値」なんだから仕様なんて作らない 他の型がない言語だったら、引数に渡されるオブジェクトなんか それこそ無限に値なんてありえるだから privateでも、ソースコードを修正して引数渡せるなら そのテストをかけって言ってるようなもん
842 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:47:52.42 ID:M+BkbwUs.net] >>812 > と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を 頭悪そうだなw この場合publicメソッドを呼んだらprivateメソッドを呼び出すんだから privateメソッドのテストになってるだろ
843 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:47:57.37 ID:9F15TCk0.net] 少なくともグーグルの面接で絶対こないからテストしないとか言ったら 速攻落ちるよ。むしろ絶対こないのをやるものだからね。
844 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:49:10.31 ID:M+BkbwUs.net] >>768 で > まさかpublic・privateメソッドのテストをテスト工程でやる、 > public・privateメソッドを書いた人と別の人がやるって思ってないか? > > public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか > public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから > 当然ソースを書いて(書き換えて)テストするに決まってるじゃん と言ってますが、今の話と何の関係があるんですか? 「誰がテストするか」の話なんですが?
845 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 06:50:26.40 ID:M+BkbwUs.net] >>815 だからpublicメソッド経由でテストしてるじゃんw お前は、内部でprivateメソッドを呼び出しているから publicメソッドのテストには、privateメソッドがそんな値を返そうが そのテストは書かないのか?