カプセル化の有害性、オブジェクト指向は愚かな考え at TECH
[2ch|▼Menu]
[前50を表示]
700:デフォルトの名無しさん
20/07/04 13:12:24.10 M3d71N9d.net
> t_wadaのブログってリンク提示されてもなにそれとしか思わないから
はい、内容を呼んでないと自白しましたw
なんのために内容の一部まで引用したと思ってるんでしょうかね
読まずに誰それと「人」に文句をつけるための
質問しかしませんでした。

701:デフォルトの名無しさん
20/07/04 13:12:47.77 M3d71N9d.net
>>676
お前の希望を言われたもなぁw

702:575
20/07/04 13:13:09.28 sra5+07B.net
なんで今朝の575からこんなに進んでるの...

703:デフォルトの名無しさん
20/07/04 13:13:57.68 MJUVFEDB.net
子供の喧嘩ですw

704:デフォルトの名無しさん
20/07/04 13:13:59.57 pmIasW6W.net
>>677
どうしてその内容を引用したの?
君はそれが正しいと思ったの? その根拠は提示できる?
できないでしょ、君はt_wadaを専門家だと思ってて
専門家の言うことは正しいのだ、だから内容が正しいのだと思い込んでいる
だからその内容を引用して何かを示した気になってるだけ

705:デフォルトの名無しさん
20/07/04 13:14:24.44 M3d71N9d.net
>>679
根拠ない主張を繰り返すだけのやつが登場するとそうなるよw

706:デフォルトの名無しさん
20/07/04 13:14:41.46 pmIasW6W.net
>>678
外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん

707:デフォルトの名無しさん
20/07/04 13:15:16.84 pmIasW6W.net
>>682
専門家という肩書の権威にすがりつく君のことかな?

708:デフォルトの名無しさん
20/07/04 13:15:33.49 M3d71N9d.net
>>681
正しい根拠はすでに上の方で何度も言ってるじゃんw
それを補完するために専門家の意見を持ってきただけで
じゃあ反対にお前の言うことが正しいという根拠はなんだよ?

709:デフォルトの名無しさん
20/07/04 13:15:46.59 xAj06qrt.net
>>665
その辺は結局組織がどうコードを管理するかってだけの話だ。
バカみたいにがんじがらめにした結果誰もコードをいじらない(リファクタリングしない)
ってことにしかならん。

710:デフォルトの名無しさん
20/07/04 13:16:11.64 M3d71N9d.net
>>683
> 外人が書いた本を翻訳したら専門家なのか? そっちの方が希望じゃん
翻訳「も」してるだけだろw

711:デフォルトの名無しさん
20/07/04 13:17:04.15 pmIasW6W.net
>>668
t_wadaさんの文章はt_wadaさんの感想でしかないよ

712:デフォルトの名無しさん
20/07/04 13:17:18.71 M3d71N9d.net
どうやら翻訳は副業らしいなw

713:デフォルトの名無しさん
20/07/04 13:18:06.68 M3d71N9d.net
>>688
意見と感想の違いぐらいつけようよw
話は簡単じゃないか
t_wadaさんの意見と
お前の感想
説得力があるかどうかだよ

714:575
20/07/04 13:18:30.04 sra5+07B.net
とりあえず、落ち着け。
議題がよくわからんが、落ち着け...落ち着くのだ。

715:デフォルトの名無しさん
20/07/04 13:19:53.55 pmIasW6W.net
>>687
いやいや翻訳だけが全実績じゃん
t_wadaさんがprivateメソッドをテストせずにとても
すばらしいシステムを構築していま全世界で使われてますってことないじゃん
翻訳したからまるで本物の執筆者のように思われてあたかも専門家のように思い込まれてるだけで
専門家でもなんでもなくただの翻訳者だよ

716:デフォルトの名無しさん
20/07/04 13:20:32.65 MJUVFEDB.net
いいんだよ、元から不毛なネタのスレだw

717:デフォルトの名無しさん
20/07/04 13:21:46.90 pmIasW6W.net
>>690
君が説得力を


718:感じたら意見になり、 説得力を感じなかったら感想になるってだけじゃんそれ なにそのガバガバな日本語運用 わかりましたでは今から僕が君を説得してみせます、よく聞いてください privateメソッドはテストするべきです



719:575
20/07/04 13:21:53.40 sra5+07B.net
>>693
それもそうか(諦め)
内容は読んでないけど、まぁ、ROMるか。

720:デフォルトの名無しさん
20/07/04 13:22:11.62 M3d71N9d.net
>>692
なんでググらないでウソ書くの?
そうやって他の人を騙そうとしてるでしょ
URLリンク(t-wada.hatenablog.jp)
職業はコンサルタントであり、プログラマです。最近では技術顧問としてもいくつかの会社を支援しています。
また、自分の自由になる時間には、オープンソースソフトウェアの開発を行っています。
本業はプログラマでありコンサルタントですが、副業としては技術書の出版、具体的には監訳や翻訳に関わっています。
JavaScript でテストを書く際のハードルを大幅に下げるために開発した power-assert は、
Mocha や Jest と組み合わせて使え、 AVA には既に内蔵されており、ありがたいことに世界中で使われるプロダクトまで育ちました。
ひとつ例を挙げるなら、アリババグループで採用頂き、アリペイやアリババクラウドのテストに使われているという話です。

んで、こういう人に比べて、お前はなにかすごいことしたの?

721:デフォルトの名無しさん
20/07/04 13:25:12.35 pmIasW6W.net
>>696
営業努力の賜物やろな、頑張ってるんやなt_wadaさん
僕がなにかしたのかという質問ですが僕はすごいことを発見しました
privateメソッドはテストした方が良いです

722:デフォルトの名無しさん
20/07/04 13:25:49.67 pmIasW6W.net
ほんまt_wadaさん好きやな

723:デフォルトの名無しさん
20/07/04 13:26:38 M3d71N9d.net
>>698
t_wadaさん以外にすごい人がいたら教えて下さいw

724:デフォルトの名無しさん
20/07/04 13:31:25 pmIasW6W.net
>>699
他人に憧れをいだいて必要以上に持ち上げるのが僕は気持ち悪く感じます
僕はすごい人ですが、君に憧れられるのは気持ち悪いです、なのでごめんなさい

725:デフォルトの名無しさん
20/07/04 13:31:55 pmIasW6W.net
振ってしまってなんかごめんなさい

726:デフォルトの名無しさん
20/07/04 13:33:19 pmIasW6W.net
他人を必要以上に持ち上げるのって自分に自信がない人がやりがちなので
アドバイスするとしたら色々経験したがいんじゃないかということですね

727:デフォルトの名無しさん
20/07/04 13:34:54.50 KKcCItOc.net
IT掲示板群 URLリンク(x0000.net)
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)
UIライブラリ (C#, 2D) を作ったよ
URLリンク(x0000.net)
連続と離散を統一した!
URLリンク(x0000.net)
4Dエンジン(画像有り)
URLリンク(x0000.net)
matrixのライブラリ
URLリンク(x0000.net)
ある強力なFor関数
URLリンク(x0000.net)
SQLライブラリ
URLリンク(x0000.net)
☆ VMを書いた(C#) * x86ではない!
URLリンク(up.x0000.net)
☆ malloc / free を実装してみた (C#)
URLリンク(up.x0000.net)

728:デフォルトの名無しさん
20/07/04 13:48:28.05 iuca8iKQ.net
根拠が聞けるかなと思ったターンで
他人の引用を持ってきて権威に頼っただけである場合
議論は終了である
続ける価値がないから

729:デフォルトの名無しさん
20/07/04 13:50:52.32 M3d71N9d.net
いえ、自分と同じ意見を言ってる人を持ってきただけなので
話は続いてますよ?
でもなぜか、話の続きをやめてしまっているのです。
なぜでしょうね(笑)

730:デフォルトの名無しさん
20/07/04 14:09:00.83 xhESn47n.net
プログラム板でコード使って語りもしない時点で両者どちらも無能
プログラマならコードで主張

731:デフォルトの名無しさん
20/07/04 14:17:35.76 pmIasW6W.net
>>706
有能さんあざーす!コードどこ?

732:デフォルトの名無しさん
20/07/04 14:19:05.65 JeoapmHS.net
privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?
一方の極は、privateメソッドには極めて単純なことしかさせず、少しでも複雑な内容なら(他のヘルパークラス等の)publicメソッドに切り出すスタイル。
「privateはpublic経由でのみテストする(直接はテストしない)」という方針を採る場合には、privateメソッドの内容は非常にシンプルな内容に限らざるを得ないし、逆にそうしないと>>555指摘の組み合わせ爆発の問題を回避できない。
>>624>>649で紹介されている議論や、>>588はこの立場なんだろう。
このスタイルでは、下記のスタイルでは1つのprivateメソッドで処理できる内容を、複数のクラスに属するメソッドの協調関係で処理することになる。
これを適切な機能分化がされていると肯定的に捉えるか、必ずしも汎用性があるわけではない小さなヘルパークラスが増えることになり、見通しが悪くなると否定的に捉えるかは考え方によるだろう。
もう一方の極は、privateメソッドだからといって、内容をシンプルに限らなければいけない必然性はないというスタイル。>>589は、こちらの立場なんだろう。
このスタイルでは、public経由でprivateのテストをするというのは現実的ではないから、privateメソッドでも直接テストの対象とすることが必要になる。言語機能の関係でprivateを直接テストすることが難しい場合には、テストのやり方に工夫が必要になる。
メリット・デメリットは前記のスタイルの反対。
こんなふうに整理できるんじゃないかと思うが、どうだろう。

733:デフォルトの名無しさん
20/07/04 14:19:16.92 xhESn47n.net
>>707
主張したいことがあるんでないの?
それを示すコードもあるやろ?

734:デフォルトの名無しさん
20/07/04 14:20:14.26 pmIasW6W.net
>>709
でも僕無能だからコードないよ
君有能だからコードあるよ
早く出すよ

735:デフォルトの名無しさん
20/07/04 14:22:23.00 xhESn47n.net
>>710
俺は別にプログラムのこのスレタイについて主張したいことないからなあw
君はプログラマでプログラムについて何か主張したいんだろ?

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

737:デフォルトの名無しさん
20/07/04 14:23:22.38 pmIasW6W.net
>>711
関係ないよ、早くコード出すよ

738:デフォルトの名無しさん
20/07/04 14:23:44.26 pmIasW6W.net
早くコードだすよ!

739:デフォルトの名無しさん
20/07/04 14:27:56.17 xhESn47n.net
>>714
あーこっちがきちがいだったかw
触れないようにするわ

740:デフォルトの名無しさん
20/07/04 14:28:29.45 pmIasW6W.net
www

741:デフォルトの名無しさん
20/07/04 14:33:12.47 xhESn47n.net
このように、コードを使わず偏った主張するやつはだいたい頭がおかしい
この板ではこうやって簡単にこういう奴をあぶり出しできるんよな

742:デフォルトの名無しさん
20/07/04 14:34:10.41 pmIasW6W.net
>>717
君、コード出してないよ
コード出すよ

743:デフォルトの名無しさん
20/07/04 14:34:57.85 pmIasW6W.net
早 く コ ー ド 出 す よ !

744:デフォルトの名無しさん
20/07/04 14:51:30.64 xhESn47n.net
>>719
^^

745:デフォルトの名無しさん
20/07/04 14:56:58.97 M3d71N9d.net
>>708
> privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?
privateとかpublicとか関係なく、複雑なことをやらせるなよ
関数はせいぜい一画面程度(50行)ぐらい、大半は20行以下にするもんだ

746:デフォルトの名無しさん
20/07/04 15:00:38 pmIasW6W.net
はいはいどうせt_wadaがそう言ってたんだろ

747:デフォルトの名無しさん
20/07/04 15:01:31 M3d71N9d.net
>>722
また「人」の話かよw

748:デフォルトの名無しさん
20/07/04 15:02:35 M3d71N9d.net
権威ある専門家が言ってることだから間違ってます
俺は認めませーんって。どういう気持で言ってるんだろうねw

749:デフォルトの名無しさん
20/07/04 15:04:45.61 M3d71N9d.net
俺は「そいつは権威ある専門家


750:セ!」って指摘しただけで 勝ったつもりにはなれないなぁ(笑)



751:デフォルトの名無しさん
20/07/04 15:05:05.57 pmIasW6W.net
t_wadaはなんて言ってるんだよ!

752:デフォルトの名無しさん
20/07/04 15:05:39.57 pmIasW6W.net
t_wada原理主義

753:デフォルトの名無しさん
20/07/04 15:06:52.47 iuca8iKQ.net
必死だなw

754:デフォルトの名無しさん
20/07/04 15:07:21.60 gUMCer1d.net
今までたくさんのキチガイPGを見たが
privateメソッドだからテストしないとか言ってるやつだけは許さない
テメーの金玉はここで潰す

755:デフォルトの名無しさん
20/07/04 15:10:41.07 pmIasW6W.net
ごりごりーごりごりー
そうだ!すりつぶした粉で大根餅作ろうよ!

756:575
20/07/04 15:11:12.87 sra5+07B.net
>>729
問題なのは、そのprivateの挙動をどうやって確認するのかって話なのかな?
単体テスト?総合テスト?それとも実装中しながらのデバッグ作業の話?
正直、未だにどこで揉めているのかわかりません。
誰か議題教えて。

757:デフォルトの名無しさん
20/07/04 15:13:12.65 iuca8iKQ.net
>>731
> 正直、未だにどこで揉めているのかわかりません。
自転車置き場

758:デフォルトの名無しさん
20/07/04 15:14:01.93 M3d71N9d.net
>>731
1. public、privateに限らずコードはシンプルにするべき
2. シンプルであるなら、privateはpublicメソッド経由でテストできる
3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる
4. 設計上の問題はバグと言ってもいい。バグなんだから直せ
ここまではあってる

759:デフォルトの名無しさん
20/07/04 15:17:09 gUMCer1d.net
>>731
設計書見ろよゴミカス
書いてないなら死にまくれ

760:575
20/07/04 15:21:35 sra5+07B.net
>>734
なんで、スレの流れに沿って説明しただけの俺がゴミカス呼ばわりされるのかもわからん。何このスレ。
>>576 >>578でも俺の意見ですらない部分に的外れな回答がつくし。

761:デフォルトの名無しさん
20/07/04 15:24:14 M3d71N9d.net
動けばOKって考えてる人がどれだけ多いかだな
テストを自動化するという考えがない
シンプルな設計をするという発想がない
動けば設計に問題はないと考えている

762:デフォルトの名無しさん
20/07/04 15:29:27 pmIasW6W.net
>>735
Welcome to Underground

763:デフォルトの名無しさん
20/07/04 15:32:02.34 NXT3QGLz.net
>>733
あってるの1だけじゃないかw

764:デフォルトの名無しさん
20/07/04 15:34:57 iuca8iKQ.net
叩き台つくった(´・ω・`)
URLリンク(ideone.com)

765:デフォルトの名無しさん
20/07/04 15:39:15 e19OrKR5.net
なんかやべえ流れになってるな
とりあえずつっこんどくと
1. unitテストの定義に世界共通の定義など存在しない
2. unitテストという単語はプロジェクト用語であり、プログラム用語ではない
3. マーティンはunitテストという単語と自動テストの単語わけたらいいんじゃない?と提案してる。xunit
4. publicとprivateはクラス設計のため、もっと言えばクラス間の責任範囲のために存在している
5. xunitテストのためだけにprivateをpublicにするのは誤り。本当にやりたければリフレクションでもすればいい
6. c2カバレッジ100%するかどうかは分野次第
7. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある

766:575
20/07/04 15:57:07.88 sra5+07B.net
ちなみに、的はずれって100%君のことね。まぁ、そんなの今更どうでもいいか。
実際、クラスをどんな風にテストするのか興味あるね。

767:デフォルトの名無しさん
20/07/04 16:03:21.65 e19OrKR5.net
やだよ組み込みが普通だと思ってる人との会話なんかしたくない

768:575
20/07/04 16:32:24 sra5+07B.net
そんなー。

769:デフォルトの名無しさん
20/07/04 16:32:41 IaMjsjOG.net
>>735
なんだ早く死ねよ

770:575
20/07/04 16:36:24 sra5+07B.net
まぁ、Android開発(アセンブラレベルからJavaアプリレベル)をやってるから、たぶん、大丈夫なはず。

組み込み=staticおじさんのレッテルが貼られがちだけど、
私はstaticおじさんじゃないんだけどなー...


771:。 まぁ、アセンブラレベルの階層になると、オブジェクト指向要素なんて微塵もないけど。



772:575
20/07/04 16:37:37.70 sra5+07B.net
>>744みたいな知的障害者が時々沸くのはなんで?

773:575
20/07/04 16:46:14.68 sra5+07B.net
もういいや。アホくさ。こんなスレ覗いたのが間違いだったな。
人生を無駄にした気分だ。
このスレを覗く時間を使って別して作業してた方が有意義だったよ。
>>744
君はID変えながら死ね死ね連呼しているみたいだけど、気を付けた方がいいよ。あばよ、中身がない死ぬべき技術者さん。

774:デフォルトの名無しさん
20/07/04 16:53:03.01 4XE5L1k5.net
プ板、と言うか専門板なんてそれぞれの話題を餌にマウント取り合ったり罵り合ったりする所だから。
相手にしたら負け。

775:デフォルトの名無しさん
20/07/04 17:09:48.00 O/jhkl6h.net
言語の制約によって思考が制約されてる典型例
カマッてくれる人が量産されて>>1が喜んでる

776:デフォルトの名無しさん
20/07/04 18:16:38.54 sCZUG34Z.net
privateメソッドのテストしないとか言ってるカスとまともに会話するメリットないだろ

777:デフォルトの名無しさん
20/07/04 18:35:31.64 gmurOIZf.net
まあテストやるって言ってもこれくらい意見が違って揉め事になるってのは
結構普通だったりするからそういう勉強にはなってるんでないの。

778:デフォルトの名無しさん
20/07/04 20:02:50.07 M3d71N9d.net
このスレの結論
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。

779:デフォルトの名無しさん
20/07/04 21:00:07.43 42LT/T3f.net
>>752
三行以上は読んでもらえないから工夫が必要。

780:デフォルトの名無しさん
20/07/04 21:07:29.85 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:デフォルトの名無しさん
20/07/04 2


782:1:08:27.02 ID:NXT3QGLz.net



783:デフォルトの名無しさん
20/07/04 21:10:05.29 NXT3QGLz.net
>>755
間違えた
×ぼくの主張の結論
◯ぼくがまとめた、偉い人が書いた本の受け売り情報

784:デフォルトの名無しさん
20/07/04 21:41:09.24 pmIasW6W.net
本人の経験が感じられなくて薄っぺらいんだよなあ

785:デフォルトの名無しさん
20/07/04 21:43:15 pmIasW6W.net
僕の高い知性と豊富な経験に基づく主張を聞いて欲しい
privateメソッドはテストした方がいい

786:デフォルトの名無しさん
20/07/04 21:56:15 gmurOIZf.net
>別クラスのパブリックメソッドとする
>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
>プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
>プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これだけは意味ある意見ではあるな。他はカスみたいな理由だが。

787:デフォルトの名無しさん
20/07/04 22:11:41 42LT/T3f.net
カバレッジ測定ツール高いし持ってないので、private直接テストしたい。

788:デフォルトの名無しさん
20/07/04 22:19:33 O/jhkl6h.net
>>759
>>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>>示唆している場合があります
わかる

>>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これは選択肢の一つであって常にそうすべきなわけではないんだよね
クラスの分割基準とテストを書く書かないの基準は別だから

789:デフォルトの名無しさん
20/07/04 22:19:58 O/jhkl6h.net
プライベートだとテストしにくいので、パブリックメソッドとして抽出し、普通にテストしましょう
これが本音

790:デフォルトの名無しさん
20/07/04 22:47:43.56 1l6Tw/KB.net
URLリンク(i.imgur.com)

791:デフォルトの名無しさん
20/07/05 00:43:13.75 9F15TCk0.net
プライベートがテストできるということはホワイトボックスなわけでユニットテスト段階でしょ。
そもそもプライベートをテストするにはソース自体書き換えないと呼べないじゃん。
ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
なったらブラックボックスが普通。
てかもはやテストの話でカプセル化やOO関係ないな。

792:デフォルトの名無しさん
20/07/05 01:18:10.47 LRfXHt7v.net
ホワイトやブラックについて語るのは時期が悪いというか、国家を危険にさらす可能性さえあるからね。
もう少し社会情勢に気を配ろうよ。

793:デフォルトの名無しさん
20/07/05 01:32:28.51 LRfXHt7v.net
昔のホームページにはサイタマップというものがあった。

794:デフォルトの名無しさん
20/07/05 02:04:25.24 9F15TCk0.net
埼玉県民にはそこらへんの草でも食わせておけ

795:デフォルトの名無しさん
20/07/05 02:11:14.07 58eR5uXa.net
>>764
> ソース自体書き換えてテストするようなことはビジネスの世界ではあんまり無いしテストと
まさかpublic・privateメソッドのテストをテスト工程でやる、
public・privateメソッドを書いた人と別の人がやるって思ってないか?
public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
当然ソースを書いて(書き換えて)テストするに決まってるじゃん
お前は、その後の(統合)テスト工程でソースコードを変えてテストとか言ってるだろw

796:デフォルトの名無しさん
20/07/05 02:46:27.47 9F15TCk0.net
>>768
なんなのその口調気持ち悪い。
大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
デベロッパ個人のテストはコーディングの範疇なのでもちろん個人ではやるが
それほど大事ではない。
組み込みで車のブレーキ制御とかは全く別の話だろうがOOとかカプセル化とは
基本かけ離れた分野。

797:デフォルトの名無しさん
20/07/05 02:48:43.07 LRfXHt7v.net
テストしない理由を考えるのは。

798:デフォルトの名無しさん
20/07/05 02:50:28.66 58eR5uXa.net
>>769
> 大規模開発だとテスト工程を別の人間が何度もやるのは当たり前だよ。
大規模開発だとpublicやprivateメソッドのテストを別の人がやるって?
テストコード専用に書く人でもいるのかよw
それはどこの話だ?事例の一つぐらい持ってきてから言え

799:デフォルトの名無しさん
20/07/05 02:51:54.42 9F15TCk0.net
>>771
某アメリカ製のパッケージとかだな。
むしろテストコード専門に書く人いないのかよ。じゃあOOとかカプセル化とか
必要なほどの規模じゃないか体制がおかしいな。

800:デフォルトの名無しさん
20/07/05 02:53:01.58 58eR5uXa.net
> 某アメリカ製のパッケージとかだな。
だから事例は?

801:デフォルトの名無しさん
20/07/05 02:54:30.54 58eR5uXa.net
ユニットテストのコードを他の人が書いて、どうやってTDDをやるのか不思議なんだがw
先にテストコード書く人がテストコードだけ書いて、
これに通るように実装しろ!
これがTDD(テスト駆動開発)だ!
とか言ってる所とかでもあるんか?
事例を持ってきてくれ

802:デフォルトの名無しさん
20/07/05 02:56:40.99 9F15TCk0.net
だからユニットテスト自体が少なくともビジネス分野では大事じゃないと
上にも書いてあるが。
事例なんか出せるわけないだろ。中の人なんだから。

803:デフォルトの名無しさん
20/07/05 02:58:40 LRfXHt7v.net
製品についてネットに書き込むときは、法務と企画のハンコ必要なので。

804:デフォルトの名無しさん
20/07/05 02:59:12 LRfXHt7v.net
ちなみに法務俺、規格俺だけど。

805:デフォルトの名無しさん
20/07/05 03:03:18.34 9F15TCk0.net
今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
億の分岐を全部全パターンテストするの?
テストなんてそのあとファンクショナルやってリグレッションやってアクセプタンスやって
ってあるのに、ユニットテスト「だけ」でそれでしょ?
サグラダ・ファミリアかな?

806:デフォルトの名無しさん
20/07/05 03:03:49.83 58eR5uXa.net
>>775
中の人だから事例が事例を出せないってことは、
お前の会社以外でやってないってことだろw

807:デフォルトの名無しさん
20/07/05 03:04:01.72 LRfXHt7v.net
正しいとか正しくないとかどうでも良いので、privateのテストをさせてほしいものですね。

808:デフォルトの名無しさん
20/07/05 03:05:23.08 58eR5uXa.net
>>778
> 今関わってる製品とかソース10万ファイルくらいあってそれぞれのファイルに
> 分岐なんか少なくとも数十から数百はあると思うが、その数百万から数千万、下手したら
> 億の分岐を全部全パターンテストするの?
それユニットテスト関係ないよね?
手動で全パターンをテストするの?
答えはお前自身が言えるはずだよね?

809:デフォルトの名無しさん
20/07/05 03:06:25.42 58eR5uXa.net
ユニットテストなんかしてねーよ
ソース修正するたびに、
億の分岐全パターン手動テストしてるんだよ!
って言ってほしいな?
まだかな?

810:デフォルトの名無しさん
20/07/05 03:13:56.54 LRfXHt7v.net
けんか腰は知能が高いと言われるム板に似合わないんだよな。
ユーモアを交えて会話するべきだと思います。

811:デフォルトの名無しさん
20/07/05 04:06:24 9F15TCk0.net
>>779
知ってる限りGAFAでもERP各社あたりでもやってないけどね。

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

まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は
おしまい。

812:デフォルトの名無しさん
20/07/05 04:11:13.84 58eR5uXa.net
ではGoogleの事例
URLリンク(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:デフォルトの名無しさん
20/07/05 04:13:30.65 58eR5uXa.net
Googleの考え方
URLリンク(www.publickey1.jp)
テスターはデベロッパーがテストできるようにするのが仕事
このようにEngineering Productivityのメンバーのレポートラインと
所属を分けることのメリットを、Whittaker氏は次のように書いています。
ここにグーグルの品質管理の大事なポイントがあるようです。
一般にテストは製品開発の最後の段階で行われることが多く、製品チーム/開発チームの
中にテストチームを抱えても、テストフェーズ以外は手持ちぶさたになってしまうため、
多くの開発組織ではテストチームは製品チーム/開発チームとは別に存在し、
必要なときに登場してテストを行う、というケースがほとんどです。
====以下重要====
ところがグーグルではEngineering Productivityに属する、テストのノウハウを持ち支援を
行うエンジニアたちは、前述のように各製品チームに所属しています。
そう、グーグルではテストチームではなく、製品チームが自身で品質管理を負っている。
各デベロッパは自身でテストすることを期待されている。テスターの仕事は、自動テストの
インフラを確立することと、それによってデベロッパ自身がそれをプロセスの中で実行できるようにすること。
テスターはデベロッパーがテストできるようにするのだ。
各製品チームは、Engineering Productivityのメンバーの支援を受けつつ、自分たちの責任で
テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。

814:デフォルトの名無しさん
20/07/05 04:14:26.63 58eR5uXa.net
URLリンク(www.publickey1.jp)
Whittaker氏はさらに次の記事「How Google Tests Software - Part Two」で、
エンジニアに与えられる3つの役割についても触れています。
Softweare Engineer in Test(SET)
テストのしやすさ(Testability)にフォーカスした役割。デザインレビューをし、
品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。
ユニットテストや、テストフレームワーク、自動テストも書く。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

815:デフォルトの名無しさん
20/07/05 04:16:28 58eR5uXa.net
「コードをテストしやすいようにリファクタリングする。」

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

ならばテストしやすいようにリファクタリングしましょうって話になってる

816:デフォルトの名無しさん
20/07/05 04:18:26 58eR5uXa.net
URLリンク(monoist.atmarkit.co.jp)

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

Google Testとは、IT業界の巨人、グーグル(Google)製の
単体テストフレームワーク(C/C++用)です。MinUnitと比べて高機能で、
さまざまな使い道があります。ただし、MinUnit同様、テストコードを記述するため、
C/C++をある程度知ってることが前提です。

817:デフォルトの名無しさん
20/07/05 04:19:35 9F15TCk0.net
>>785
テスト件数が問題なのではない。オートメーションすればファンクショナルレベル
でのテストはいくらでも流せる。

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

プライベートのファンクション・メソッド単位でC2100%テストしていくというのは
そういうこと。

818:デフォルトの名無しさん
20/07/05 04:22:02 58eR5uXa.net
米Google、JavaScriptユニットテストフレームワーク「JS Test」をオープンソースで公開
URLリンク(mag.osdn.jp)

米Googleは9月29日、JavaScriptユニットテストフレームワーク「Google JS Test」を発表した。
元々はGoogle社内のプロジェクトで利用されていたもので、ライセンスはApache License 2.0。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

819:デフォルトの名無しさん
20/07/05 04:27:51 9F15TCk0.net
いや、だからそういうツールがあるのなんて常識だが、privateはテストしない。
上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、
そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを
全パターンするわけでは、当たり前だけど、無い。

クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは
当然ある。

820:デフォルトの名無しさん
20/07/05 04:29:16 58eR5uXa.net
facebook / j


821:est https://github.com/facebook/jest https://jestjs.io/ja/ Jest はシンプルさを重視した、快適な JavaScript テスティングフレームワークです。



822:デフォルトの名無しさん
20/07/05 04:31:02 9F15TCk0.net
全くわかってないなこりゃ。

823:デフォルトの名無しさん
20/07/05 04:33:27 58eR5uXa.net
反論すりゃいいのにw

824:デフォルトの名無しさん
20/07/05 04:34:11 58eR5uXa.net
憶測に基づいた発言はいらないよ?
俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ

825:デフォルトの名無しさん
20/07/05 04:34:11 LRfXHt7v.net
テストの専門家だからそう思うのでは。

826:デフォルトの名無しさん
20/07/05 04:49:06.73 LRfXHt7v.net
完ぺきにテストしたからといって製品の完全性を保証することはできません。
したがってテストしないほうが良いのです。

827:デフォルトの名無しさん
20/07/05 04:52:22.10 58eR5uXa.net
ほらなw
完璧にテストした所で落ちない飛行機はありません
したがってテストしないほうがいいのです
と言い始めた
事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。
ここから荒らしと変貌する前触れだな

828:デフォルトの名無しさん
20/07/05 04:53:23.27 LRfXHt7v.net
食いついてきた。
嘘みたい。

829:デフォルトの名無しさん
20/07/05 04:58:23.98 LRfXHt7v.net
privateもテストさせていただけるとありがたいけど、禁止するのが正しいことになってるからな。

830:デフォルトの名無しさん
20/07/05 04:59:58.66 LRfXHt7v.net
Visualstudioのテストエクスプローラを使うと考えが変わるのでは。
道具の問題かもしれない。

831:デフォルトの名無しさん
20/07/05 05:53:15.48 9F15TCk0.net
ユニットテストというのはプロジェクトによってかなり幅があるわけで、
当たり前の話だがテストオートメーションのプログラムが勝手にコード
弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。

832:デフォルトの名無しさん
20/07/05 06:05:37.56 58eR5uXa.net
↑みたいなことを言ってるやつがGAFAは〜と
なんのソースもなしに言ってるわけだよ
こんなやつの話を聞くやつがいると思うかね?

833:デフォルトの名無しさん
20/07/05 06:06:03.12 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:デフォルトの名無しさん
20/07/05 06:21:04.56 9F15TCk0.net
あと日本のNTTデータから降りてくるような大企業案件とかもやったことが無いので知らん。
アメリカのビジネス系一般の話。

835:デフォルトの名無しさん
20/07/05 06:25:10.48 M+BkbwUs.net
>>805
そのコードを見ただけで素人ってわかるよw

836:デフォルトの名無しさん
20/07/05 06:27:32.73 9F15TCk0.net
はいはいそうですね。

837:デフォルトの名無しさん
20/07/05 06:33:43.45 M+BkbwUs.net
1. 関数名が意味不明
2. インデントがめちゃくちゃ
3. スペースを入れる所が統一されていない
4. lenが配列なのはなんでだ?
5. nullを情報として扱うな
6. 戻り値なしなのに関数の最後でreturnを書くな
7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな
8. テストするなら、長さを入力し文字列を返す関数を作れ
なんでたったこれだけの関数で
こんなにレビューの指摘項目が存在するんだかw

838:デフォルトの名無しさん
20/07/05 06:38:43.59 9F15TCk0.net
口調が気持ち悪い人は相手しても仕方ないからほっとくとして、上の例だと(に限らず)
funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
リクワイアメントとエッジケースは全てテストするんだから、無駄にテストが倍以上に
なるしそれも手動になる。
普通のケースだとtestChinに対するテストコード書いて、変更があればそれを流す形になる。
上にさんざコピペが貼られたテストツールはそういうのを自動で流すツール。
テストケース流したいからfuncSとfuncBをパブリックにするというのはカプセル化
できてないし、ましてコード弄ってまでテストするのを手順化するというのは普通はやらない。
書いてる最中にコードちょろっと入れて確認するようなことはあって、それもユニット
テストといえばユニットテストだが、手法としてプロジェクト単位で公式にやるような
ものでは普通は無い。
車のブレーキ制御とかならそこまでやって欲しいが、OOとかカプセル化とはちょっと
違う話。

839:デフォルトの名無しさん
20/07/05 06:42:42.57 M+BkbwUs.net
> funcSとfuncBをテストするためにはコード弄らなきゃいけないし、そもそもtestChin()で
public経由でテストできるだろw

840:デフォルトの名無しさん
20/07/05 06:45:32.12 9F15TCk0.net
>public経由でテストできるだろw
と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
やっとご理解いただけたようですな。
>>768ではこんな事言ってましたが。
>当然ソースを書いて(書き換えて)テストするに決まってるじゃん

841:デフォルトの名無しさん
20/07/05 06:47:04.12 M+BkbwUs.net
>>810
他の言語を勉強したほうがいいぞ
どうもお前は、絶対に来るはずがない値が引数に渡された時、
そのテストしろって言ってるようだからな
「絶対にありえない値」なんだから仕様なんて作らない
他の型がない言語だったら、引数に渡されるオブジェクトなんか
それこそ無限に値なんてありえるだから
privateでも、ソースコードを修正して引数渡せるなら
そのテストをかけって言ってるようなもん

842:デフォルトの名無しさん
20/07/05 06:47:52.42 M+BkbwUs.net
>>812
> と、いうわけでPublicをテストすれば十分だしPrivateは(普通は)やらないという事を
頭悪そうだなw
この場合publicメソッドを呼んだらprivateメソッドを呼び出すんだから
privateメソッドのテストになってるだろ

843:デフォルトの名無しさん
20/07/05 06:47:57.37 9F15TCk0.net
少なくともグーグルの面接で絶対こないからテストしないとか言ったら
速攻落ちるよ。むしろ絶対こないのをやるものだからね。

844:デフォルトの名無しさん
20/07/05 06:49:10.31 M+BkbwUs.net
>>768
> まさかpublic・privateメソッドのテストをテスト工程でやる、
> public・privateメソッドを書いた人と別の人がやるって思ってないか?
>
> public・privateメソッドを実装中に、その作ったもののが正しく動くかどうか
> public・privateメソッドのソースを書いた人が、書いてる段階でテストするんだから
> 当然ソースを書いて(書き換えて)テストするに決まってるじゃん
と言ってますが、今の話と何の関係があるんですか?
「誰がテストするか」の話なんですが?

845:デフォルトの名無しさん
20/07/05 06:50:26.40 M+BkbwUs.net
>>815
だからpublicメソッド経由でテストしてるじゃんw
お前は、内部でprivateメソッドを呼び出しているから
publicメソッドのテストには、privateメソッドがそんな値を返そうが
そのテストは書かないのか?

846:デフォルトの名無しさん
20/07/05 06:53:15.16 M+BkbwUs.net
例えば>>805 の話だと
testChinがpublicメソッド、そのメソッドのテストとして
引数に1(なんで配列か知らんが)となるものを渡したら
Smallestが返ってくることというテストを書く
それは実際には内部でprivateメソッドを呼び出しているのだからfuncSのテストになってる
カバレッジを計測したら、privateメソッドであるfuncSの該当行は実行した(テストした)と計測される。

847:デフォルトの名無しさん
20/07/05 06:54:07.51 9F15TCk0.net
え、コーディング中にちょろっとコード書いて動作確認とかを「テスト」って
呼んでたの?そりゃ噛み合わないわ。
開発手法の話をしてる時に「テストする」というからにはテストケースを書いて、
手動にしてもコードにしても実行したログくらいは残すものだが。
君はメソッド作る時エッジケースやらネガティブテストやら考慮に入れつつケースを
書いて実行したログも残してるの?変更のたびにやるの?やらんだろ。

848:デフォルトの名無しさん
20/07/05 06:56:15.75 M+BkbwUs.net
>>819
どれにレスしてるの?
ユニットテスト(かつ自動テスト)の話しかしてないんだが
お前がどこを呼んでそう思ったのか
具体的に指摘してみて


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

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