カプセル化の有害性、オブジェクト指向は愚かな考え

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
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)
710デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:20:14.26ID:pmIasW6W
>>709
でも僕無能だからコードないよ
君有能だからコードあるよ
早く出すよ
2020/07/04(土) 14:22:23.00ID:xhESn47n
>>710
俺は別にプログラムのこのスレタイについて主張したいことないからなあw
君はプログラマでプログラムについて何か主張したいんだろ?
2020/07/04(土) 14:23:09.56ID:kiJuYkd6
privateメソッドだからテストしないとか言ってるやつはキチガイ
早く死んでね
713デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:23:22.38ID:pmIasW6W
>>711
関係ないよ、早くコード出すよ
714デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:23:44.26ID:pmIasW6W
早くコードだすよ!
2020/07/04(土) 14:27:56.17ID:xhESn47n
>>714
あーこっちがきちがいだったかw
触れないようにするわ
716デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:28:29.45ID:pmIasW6W
www
2020/07/04(土) 14:33:12.47ID:xhESn47n
このように、コードを使わず偏った主張するやつはだいたい頭がおかしい
この板ではこうやって簡単にこういう奴をあぶり出しできるんよな
718デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:34:10.41ID:pmIasW6W
>>717
君、コード出してないよ
コード出すよ
719デフォルトの名無しさん
垢版 |
2020/07/04(土) 14:34:57.85ID:pmIasW6W
早 く コ ー ド 出 す よ !
2020/07/04(土) 14:51:30.64ID:xhESn47n
>>719
^^
2020/07/04(土) 14:56:58.97ID:M3d71N9d
>>708
> privateメソッドとしてどの程度複雑なことをやらせるか、privateメソッドをどの程度使うかについて、感覚の違う2つのスタイルがあるんじゃないか?

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

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

正直、未だにどこで揉めているのかわかりません。
誰か議題教えて。
2020/07/04(土) 15:13:12.65ID:iuca8iKQ
>>731
> 正直、未だにどこで揉めているのかわかりません。

自転車置き場
2020/07/04(土) 15:14:01.93ID:M3d71N9d
>>731
1. public、privateに限らずコードはシンプルにするべき
2. シンプルであるなら、privateはpublicメソッド経由でテストできる
3. publicメソッド経由でやったらprivateがろくにテストできないというなら設計が間違ってる
4. 設計上の問題はバグと言ってもいい。バグなんだから直せ

ここまではあってる
2020/07/04(土) 15:17:09.02ID:gUMCer1d
>>731
設計書見ろよゴミカス
書いてないなら死にまくれ
735575
垢版 |
2020/07/04(土) 15:21:35.25ID:sra5+07B
>>734
なんで、スレの流れに沿って説明しただけの俺がゴミカス呼ばわりされるのかもわからん。何このスレ。
>>576 >>578でも俺の意見ですらない部分に的外れな回答がつくし。
2020/07/04(土) 15:24:14.77ID:M3d71N9d
動けばOKって考えてる人がどれだけ多いかだな
テストを自動化するという考えがない
シンプルな設計をするという発想がない
動けば設計に問題はないと考えている
737デフォルトの名無しさん
垢版 |
2020/07/04(土) 15:29:27.53ID:pmIasW6W
>>735
Welcome to Underground
2020/07/04(土) 15:32:02.34ID:NXT3QGLz
>>733
あってるの1だけじゃないかw
2020/07/04(土) 15:34:57.08ID:iuca8iKQ
叩き台つくった(´・ω・`)
https://ideone.com/1XhPwl
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. 我々は十分なシステムを作るのが目的である。完璧なプログラムを作ることが目的ではない。そして十分な利益を獲得することが目的でもある
741575
垢版 |
2020/07/04(土) 15:57:07.88ID:sra5+07B
ちなみに、的はずれって100%君のことね。まぁ、そんなの今更どうでもいいか。

実際、クラスをどんな風にテストするのか興味あるね。
2020/07/04(土) 16:03:21.65ID:e19OrKR5
やだよ組み込みが普通だと思ってる人との会話なんかしたくない
743575
垢版 |
2020/07/04(土) 16:32:24.22ID:sra5+07B
そんなー。
2020/07/04(土) 16:32:41.68ID:IaMjsjOG
>>735
なんだ早く死ねよ
745575
垢版 |
2020/07/04(土) 16:36:24.03ID:sra5+07B
まぁ、Android開発(アセンブラレベルからJavaアプリレベル)をやってるから、たぶん、大丈夫なはず。

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

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

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

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

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

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

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

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

まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
753デフォルトの名無しさん
垢版 |
2020/07/04(土) 21:00:07.43ID:42LT/T3f
>>752
三行以上は読んでもらえないから工夫が必要。
754デフォルトの名無しさん
垢版 |
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開発と名付けよう
相手側に技術が流出することがない
2020/07/04(土) 21:08:27.02ID:NXT3QGLz
>>752
×このスレの結論
◯ぼくの主張の結論
2020/07/04(土) 21:10:05.29ID:NXT3QGLz
>>755
間違えた
×ぼくの主張の結論
◯ぼくがまとめた、偉い人が書いた本の受け売り情報
2020/07/04(土) 21:41:09.24ID:pmIasW6W
本人の経験が感じられなくて薄っぺらいんだよなあ
2020/07/04(土) 21:43:15.97ID:pmIasW6W
僕の高い知性と豊富な経験に基づく主張を聞いて欲しい
privateメソッドはテストした方がいい
2020/07/04(土) 21:56:15.32ID:gmurOIZf
>別クラスのパブリックメソッドとする
>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
>プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
>プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
>コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
これだけは意味ある意見ではあるな。他はカスみたいな理由だが。
760デフォルトの名無しさん
垢版 |
2020/07/04(土) 22:11:41.53ID:42LT/T3f
カバレッジ測定ツール高いし持ってないので、private直接テストしたい。
2020/07/04(土) 22:19:33.61ID:O/jhkl6h
>>759
>>プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
>>示唆している場合があります
わかる

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

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

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

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

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

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

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

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

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

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

むしろテストコード専門に書く人いないのかよ。じゃあOOとかカプセル化とか
必要なほどの規模じゃないか体制がおかしいな。
2020/07/05(日) 02:53:01.58ID:58eR5uXa
> 某アメリカ製のパッケージとかだな。

だから事例は?
2020/07/05(日) 02:54:30.54ID:58eR5uXa
ユニットテストのコードを他の人が書いて、どうやってTDDをやるのか不思議なんだがw

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

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

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

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

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

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

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

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

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

まあこういう人は何言っても無駄だし下手に事実いうと発狂するからもう相手は
おしまい。
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万テストケースを実行しているわけではなく、
全テストケースを実行するのは一定の間隔で、普段は修正に対して依存があるテストだけを実行しているそうです。
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のメンバーの支援を受けつつ、自分たちの責任で
テストを行わなければならない、ということがグーグルのテストを行う際のポリシーのようです。
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)にフォーカスした役割。デザインレビューをし、
品質やリスクをチェック。コードをテストしやすいようにリファクタリングする。
ユニットテストや、テストフレームワーク、自動テストも書く。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2020/07/05(日) 04:16:28.52ID:58eR5uXa
「コードをテストしやすいようにリファクタリングする。」

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

ならばテストしやすいようにリファクタリングしましょうって話になってる
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++をある程度知ってることが前提です。
2020/07/05(日) 04:19:35.40ID:9F15TCk0
>>785
テスト件数が問題なのではない。オートメーションすればファンクショナルレベル
でのテストはいくらでも流せる。

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

プライベートのファンクション・メソッド単位でC2100%テストしていくというのは
そういうこと。
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。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
792デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:27:51.71ID:9F15TCk0
いや、だからそういうツールがあるのなんて常識だが、privateはテストしない。
上にも書いてるがprivateはソース自体弄らないとテスト自体できないわけで、
そういうツールが自動でソースを弄ってコンパイルし直してprivateのメンバーを
全パターンするわけでは、当たり前だけど、無い。

クラス単位でパブリックのメソッドに対してテストコードもセットで書くということは
当然ある。
2020/07/05(日) 04:29:16.12ID:58eR5uXa
facebook / jest
https://github.com/facebook/jest

https://jestjs.io/ja/
Jest はシンプルさを重視した、快適な JavaScript テスティングフレームワークです。
2020/07/05(日) 04:31:02.86ID:9F15TCk0
全くわかってないなこりゃ。
2020/07/05(日) 04:33:27.78ID:58eR5uXa
反論すりゃいいのにw
2020/07/05(日) 04:34:11.33ID:58eR5uXa
憶測に基づいた発言はいらないよ?
俺はGoogleやFacebookとユニットテストに関連する事例を上げただけ
797デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:34:11.73ID:LRfXHt7v
テストの専門家だからそう思うのでは。
798デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:49:06.73ID:LRfXHt7v
完ぺきにテストしたからといって製品の完全性を保証することはできません。
したがってテストしないほうが良いのです。
2020/07/05(日) 04:52:22.10ID:58eR5uXa
ほらなw

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

と言い始めた
事例と自分の考えの矛盾を正せず、頭が狂い始めた証拠。
ここから荒らしと変貌する前触れだな
800デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:53:23.27ID:LRfXHt7v
食いついてきた。
嘘みたい。
801デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:58:23.98ID:LRfXHt7v
privateもテストさせていただけるとありがたいけど、禁止するのが正しいことになってるからな。
802デフォルトの名無しさん
垢版 |
2020/07/05(日) 04:59:58.66ID:LRfXHt7v
Visualstudioのテストエクスプローラを使うと考えが変わるのでは。
道具の問題かもしれない。
803デフォルトの名無しさん
垢版 |
2020/07/05(日) 05:53:15.48ID:9F15TCk0
ユニットテストというのはプロジェクトによってかなり幅があるわけで、
当たり前の話だがテストオートメーションのプログラムが勝手にコード
弄ってコンパイルしなおしてPrivateをテストするわけが無いのだよ。
2020/07/05(日) 06:05:37.56ID:58eR5uXa
↑みたいなことを言ってるやつがGAFAは〜と
なんのソースもなしに言ってるわけだよ
こんなやつの話を聞くやつがいると思うかね?
805デフォルトの名無しさん
垢版 |
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;}
}
2020/07/05(日) 06:21:04.56ID:9F15TCk0
あと日本のNTTデータから降りてくるような大企業案件とかもやったことが無いので知らん。
アメリカのビジネス系一般の話。
2020/07/05(日) 06:25:10.48ID:M+BkbwUs
>>805
そのコードを見ただけで素人ってわかるよw
2020/07/05(日) 06:27:32.73ID:9F15TCk0
はいはいそうですね。
2020/07/05(日) 06:33:43.45ID:M+BkbwUs
1. 関数名が意味不明
2. インデントがめちゃくちゃ
3. スペースを入れる所が統一されていない
4. lenが配列なのはなんでだ?
5. nullを情報として扱うな
6. 戻り値なしなのに関数の最後でreturnを書くな
7. 数値(長さ?)判定と文字出力を同じ関数に同居させるな
8. テストするなら、長さを入力し文字列を返す関数を作れ

なんでたったこれだけの関数で
こんなにレビューの指摘項目が存在するんだかw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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