リファクタリングすると全部テストしろと言ってくるやつの矛盾

■ このスレッドは過去ログ倉庫に格納されています
2018/04/15(日) 13:13:44.63
機能追加や変更した時に、全部テストしてるでしょ?
いつもやってることじゃん
2018/04/22(日) 14:52:10.53
>>246
> 大規模リファクタリングなんてあってはならないと言っちゃった以上

お前意味分かってんのか?

大規模リファクタリングなんてあってはいけないっていうのは
許されるのは小規模(せいぜい中規模)リファクタリングまでで
リファクタリングだけを大規模にやってはいけないないってことなんだが?
2018/04/22(日) 14:56:24.55
なんで大規模リファクタリングがあってはならないのかというと
リファクタリングは、機能変更の中に含まれる、
通常のソースコード変更時に、こまめに行うものだから

大規模リファクタリングが必要になるのは、こまめにリファクタリングしてないで
ソースコードをどんどん劣化させ、限界がきたから作り直す
(それもリファクタリングではない手法で)となってる場合が多い。

大規模リファクタリングのほとんどは単なる改修という意味になっていて
リファクタリングとなってない事が多い
2018/04/22(日) 14:58:32.10
>>243
> 本来必要ないのに修正するという意味ではいかにもリファクタリングだ

何だその定義?
外部的振る舞いを変えずに理解や修正が簡単になるように
内部構造を改善することだけが「いかにもリファクタリング」って
言って良いんだよ。

必要ないのに修正するのがリファクタリングなんて定義初めて聞いたわw
どーこーの、定義ですか?ソースくださいw
2018/04/22(日) 15:01:25.15
>>243

> で、ほとんどはリビルドで済む話だけど
> どさくさにまぎれてちょっと不具合修正しましょうとか
それは不具合修正であってリファクタリングではない
(外部的振る舞いが変わっている)

> 機能追加して欲しいとなる
それは機能追加であってリファクタリングではない
(外部的振る舞いが変わっている)


リファクタリングというのは、不具合修正や機能追加を行う際に
行うもので、不具合修正や機能追加でやる内容の一部
リファクタリング or 不具合修正 or 機能追加 ではない

不具合修正(リファクタリング含む) or 機能追加(リファクタリング含む)
である
256仕様書無しさん
垢版 |
2018/04/22(日) 15:05:42.64
>>247
そんなことないと思うけど

>>248
そんなことないと思うけど
一社童貞のやつよりよっぽどマシ
2018/04/22(日) 15:14:25.01
>>249
俺自身は発言の中でリプレースとはどういうものかとはなにも規定してませんが
まぁ外部的振る舞いという面で考えると、変わる場合もあれば変わらない場合もあるよね当然
で、たまたま外部的振る舞いが変わらなかったとしても、それをリファクタリングとは呼ばないよね
2018/04/22(日) 15:15:34.88
>>252
中規模って具体的には?
2018/04/22(日) 15:20:59.81
>>256
なぜ?
2018/04/22(日) 15:21:57.33
> で、たまたま外部的振る舞いが変わらなかったとしても、それをリファクタリングとは呼ばないよね

そりゃそうだろうね。
リファクタリングは動きを変えないために、
特定の手順にしたがってソースコードを修正する

http://shop.ohmsha.co.jp/shopdetail/000000003881/
ここの詳細目次の、5章(は解説なので正確には6章)から
その手順がリファクタリング・カタログとしてまとめられてる。
これを読むと、このやり方なら動きが変わるわけないなってわかるはず。

そしてもう一つ重要なのはテスト。テストによって
外部的振る舞いが変わらないことを保証する
だから、たまたま外部的振る舞いが変わらないっていうのは
テストを実行してないんじゃないかと思われる

テストを実行して、外部的振る舞いが変わらないのを確認するのが
リファクタリングだから、修正のたびに何度も "意図的に" 外部的振る舞いが
変わってないことを確認してる(だからたまたまなんて思わない)
2018/04/22(日) 15:23:41.48
>>253
普段の改修の中でこまめに行うものだけがリファクタリングじゃないよ
プログラム全体に波及するような設計の変更は、ボーイスカウトルールに則ってるだけじゃやれないからね
2018/04/22(日) 15:24:49.90
意図的に外部的振る舞いが変わらない形で修正して
確認するのがリファクタリングだから、
たまたま動きが変わらないのは、単なるソースコードの変更ってことか
多いんだよな、単なるソースコードの変更をリファクタリングとか言ってるやつ
2018/04/22(日) 15:25:29.52
>>261
プログラム全体に波及するような設計の変更を
こまめにやるってだけですが?
2018/04/22(日) 15:29:59.37
プログラム全体に波及するような設計の変更を
こまめにやるためのテクニックも↓に書いてありますよ。

> http://shop.ohmsha.co.jp/shopdetail/000000003881/
> ここの詳細目次の、5章(は解説なので正確には6章)から
> その手順がリファクタリング・カタログとしてまとめられてる。
> これを読むと、このやり方なら動きが変わるわけないなってわかるはず。

えいやってやるしかないと思ってるのは
単にその力がないだけ
2018/04/22(日) 15:32:00.64
テストしないでコード整理するのも時には必要
あまりにも悲惨なコードに短時間で多数の機能を追加しなきゃならん時とかね
多少のミスは割り切ってリファクタリングして機能追加して全体を手動テストして納品する
俺はこれをエクストリームリファクタリングと呼んでる
厳密なリファクタリング信者からすると気持ちわるいかもしれないが生産性は高い
266仕様書無しさん
垢版 |
2018/04/22(日) 15:35:23.66
>>258
ド素人か?
この業界で中規模と言ったら1000行以上、1万行未満のことだ
2018/04/22(日) 15:35:46.27
経験が少ないと、大規模リファクタリングの必要性に直面する状況が想像できないかもしれない
そういう場面も多々あるもんだけどね
268仕様書無しさん
垢版 |
2018/04/22(日) 15:35:59.41
>>259
井の中の蛙と大海の大ウミガメの違いと言えばおわかりになるでしょうか
2018/04/22(日) 15:39:24.39
>>265
うん。だから動きが変わるかもしれないわけでしょ?
それは単なる修正って言えば良いんだよ。
リファクタリングと呼ばなければいい

>>267
> 経験が少ないと、大規模リファクタリングの必要性に直面する状況が想像できないかもしれない
想像してるぞ?

こまめにリファクタリングしなかったから、
ソースコードに限界が来てしまった場合に
大規模リファクタリングになるって言ってるじゃないか
(そういう自体になる前にこまめにリファクタリングしよう)
2018/04/22(日) 15:40:10.62
>>265
そんなのファウラーの本に書いてあるか?
あの基本書の内容を踏襲していない行為をリファクタリングとは呼びませんよ?
2018/04/22(日) 15:40:31.92
>>267
× 経験が少ないと、大規模リファクタリングの必要性に直面する状況が想像できないかもしれない
○ 経験が少ないと、大規模 改修 の必要性に直面する状況が想像できないかもしれない

なんでリファクタリングじゃないものを
リファクタリングって呼ぶんですか?

リファクタリングを単なる改修の意味で使わないでください
2018/04/22(日) 15:41:21.46
>>270
> あの基本書の内容を踏襲していない行為をリファクタリングとは呼びませんよ?

そうですね。基本書の内容を踏襲していない行為は
リファクタリングと呼んではいけません。
ただの改修と言いましょう
2018/04/22(日) 15:42:30.64
なんで改修をリファクタリングって言いたいんだろう?
かっこつけたいのかな?
2018/04/22(日) 15:43:40.96
言葉の定義とかつまらんからもっと益になる話しようぜぇ

グローバル変数(public static 変数も含む)を安全に排除するリファクタリングテクニックについて議論しよう
リファクタリングするときいつもこれだけはスマートに解決できない
リスクを背負って修正するしかなくなる
2018/04/22(日) 15:46:22.63
大勃起リファクタリングと聞いて
2018/04/22(日) 15:49:05.55
>> 271
> なんでリファクタリングじゃないものを
> リファクタリングって呼ぶんですか?

お前にとっての「僕のリファクタリング」なんて知らんがな
2018/04/22(日) 15:54:49.49
動脈から直接リファクタリングを投与した
2018/04/22(日) 15:56:28.91
>>276
俺にとってのとかじゃなくて
リファクタリングの正しい定義だ
ちゃんと調べてこいよ。
単なる改修の意味で使うな
2018/04/22(日) 15:59:46.87
最初に書いたテストがリファクタリングの前後で同様に動くとは限らない
壊れたテストを書き直すのもリファクタリングの一部
2018/04/22(日) 16:02:17.79
>>268
意味不明
2018/04/22(日) 16:06:43.03
>>278
大規模なものは改修で、小規模なものはリファクタリング?
2018/04/22(日) 16:09:52.55
ここまで技術的な話題ゼロwwwマ板は素人しかいないってホントだったのか
2018/04/22(日) 16:10:33.85
>>281
なんでまた曲解するの?
2つの別々の話を混ぜないように

1. 大規模なものも小規模なものも外部的振る舞いが
変わらないようにちゃんとした手順で行って
テストで確認してるならリファクタリング
そうでないなら、単なる改修

2. 大規模リファクタリングが必要になるのは
普段からこまめにリファクタリングしてないから。
普段の改修の中でこまめにリファクタリングしていれば大規模なんて必要ない。
必要になるのは普段からリファクタリングしてなくて、
手遅れ状態になってる証拠。そういうのはあってはだめ
2018/04/22(日) 16:37:26.44
リファクタリングは小まめに行うべきか?
ある程度たまってから行うべきか?

結論:リファクタリングが不要になるように書け!
2018/04/22(日) 16:38:45.75
将来の改修や拡張の方向性がわからないのにんあことできるわけないだろ!
2018/04/22(日) 16:55:29.35
リファクタリングはソースの修正が必要だから行う
つまりソースの修正が必要なくなればいい
データベースでいうところの、UPDATEではなくINSERTになるようにすればいい
つまり、適切な粒度で関数(メソッド)を適切に作成すれば
リファクタリングは不要なのではないか?
例えば、1関数20行という教えはそういう意味も内包しているのではないか?

今までリファクタリングが必要になった場面を思い出して欲しい
やたら長い関数、スコープが不適切な変数、マジックナンバーやあり得ないelseの使い方などがほとんどではないだろうか?
本当にリファクタリングが必要な場面などほぼ無いはずである

もしリファクタリングが必要だというのであれば、それは清書を後回しにして適当に書きなぐることを優先した結果であり
そもそも「ソースを書いていない」わけである
漫画であればペン入れをしていない下書きやネームの状態、ガンプラでいえば接着剤を使わず仮組をした状態だ
もちろん、「正しく作る」ことよりも「とりあえず動く」ものを何よりも時間を優先して作ることが至上命題であることもあるだろう

それでも書道の名家は一発で何度でも美しい書体を生み出す
プログラマであっても一発で完全に美しいソースコードを生み出すスキルは必要なのではないだろうか?

以上のことから、「リファクタリングが不要になるように書け!」というのは正しいと言える
287仕様書無しさん
垢版 |
2018/04/22(日) 16:58:10.99
>>280
意味明瞭
2018/04/22(日) 16:58:35.06
>>286
あー、いや、テストファーストでは
最初にテストコードを書いて、
テストに通る最低限のコードを書いて
そのあとリファクタリングして
完成だから

つまりあんたの言う「ソースを書いている」状態にするまでに
リファクタリングをする。

ちょっと勉強し直してきて
2018/04/22(日) 17:02:47.45
もちろんテストファーストをしないならリファクタリングはしないってことじゃないよ。
先に実装しても、その後テストコードを書いて、それが通るのを維持しながら
ソースコードを読みやすくする。これもリファクタリング
290仕様書無しさん
垢版 |
2018/04/22(日) 17:07:13.80
テストファーストはリファクタリングじゃないですよ
291仕様書無しさん
垢版 |
2018/04/22(日) 17:08:24.89
テストファーストはテストを先に書くってだけで
リファクタリングを内包するわけじゃないですよ
292仕様書無しさん
垢版 |
2018/04/22(日) 17:08:52.51
テストファーストとリファクタリングは独立した概念です
2018/04/22(日) 17:08:57.78
>>290
テストファーストの手順の中に含まれるものだって話をしてるんだから
テストファースト=リファクタリングなわけないでしょw
お前の日本語の理解力の問題だ
2018/04/22(日) 17:10:15.59
http://www.itmedia.co.jp/im/articles/0602/24/news137.html

>  実行したテストコードが通らなければ『レッド』という状態になり、
> 実装コードを修正する。一方、テストが通った状態は『グリーン』と呼ぶ。
> ただしテストが通っても、可読性を考えてコードをきれいに整えることも多い。
> テストファーストではこの修正作業を『リファクタリング』と呼んでいる。

へー、このスレ勉強になるな
295仕様書無しさん
垢版 |
2018/04/22(日) 17:11:11.12
個人的にそういうやり方をやってるってだけで
テストファーストとリファクタリングは根本的に異なり
完全に独立して成り立つものですよ
296仕様書無しさん
垢版 |
2018/04/22(日) 17:12:42.21
テストファーストにリファクタリングは必要ありません
むしろテストファーストの目的を没却する悪手と言っていいでしょう
2018/04/22(日) 17:14:01.77
>>287
意味不明
298仕様書無しさん
垢版 |
2018/04/22(日) 17:14:35.76
テストファーストでリファクタリングが必要になるなら
テストの粒度が間違っている証拠です、にわかがよくやります
2018/04/22(日) 17:14:49.44
>>295
そりゃそうだろw
だからこそ、テストファーストしてから
リファクタリングするって話になる
2018/04/22(日) 17:14:49.71
>>297
意味明瞭
2018/04/22(日) 17:15:28.25
>>299
ではテストファーストとリファクタリングを一緒に語るのをやめるべきです
2018/04/22(日) 17:15:31.11
>>298
でも、ぐぐったけど、そんな事ないてないよ
ニワカはお前では?
2018/04/22(日) 17:15:38.76
テストしないでリファクタリングおっかない
304仕様書無しさん
垢版 |
2018/04/22(日) 17:16:22.76
>>302
ググらないとわからないならお前がにわかです
2018/04/22(日) 17:16:56.81
>>300
意味不明
306仕様書無しさん
垢版 |
2018/04/22(日) 17:17:37.22
>>305
意味明瞭
2018/04/22(日) 17:18:09.05
>>301
はい。だからリファクタリングだけでも話をしています。

>>289でもそう書いたでしょう?
> もちろんテストファーストをしないならリファクタリングはしないってことじゃないよ。

テストファースト(開発の前にテストを書く)をしなくても、
リファクタリングは独立したものなので、
開発→テストコードを書く→リファクタリングという手順で、
リファクタリングをすることがあります。

開発の前にテストコードを書いてないのでこれはテストファーストではありません。
2018/04/22(日) 17:18:46.64
>>304
でもお前はググってないで、自分の意見を主張しているわけだよね?
そしてそれが世間で言われてないことがバレたよね?
2018/04/22(日) 17:18:56.98
>>307
はいじゃないが
2018/04/22(日) 17:19:25.47
>>308
バレてません、グーグルがなんでも知ってると思うな
2018/04/22(日) 17:19:51.01
グーグルを神か何かだと思ってるんじゃなかろうかね
2018/04/22(日) 17:20:34.82
グーグルは知らないが、俺は知ってる。
情報の出どころは教えられないが
俺を信じてくれるよね?
2018/04/22(日) 17:20:52.25
>>312
はい
2018/04/22(日) 17:22:08.32
ママぐらいは信じてくれるんじゃねーの?w
2018/04/22(日) 17:26:27.77
>>306
意味不明
316仕様書無しさん
垢版 |
2018/04/22(日) 17:29:39.31
>>315
意味明瞭
2018/04/22(日) 17:30:08.17
>>316
意味不明
318仕様書無しさん
垢版 |
2018/04/22(日) 17:30:32.03
>>317
意味明瞭
319仕様書無しさん
垢版 |
2018/04/22(日) 17:31:10.19
リファクタリングの定義がないから仕方ない。

コードをいじってばかりのやつは、手段と目的が逆転している。
2018/04/22(日) 17:31:43.76
>>318
意味不明
321仕様書無しさん
垢版 |
2018/04/22(日) 17:32:16.13
>>320
意味明瞭
2018/04/22(日) 17:32:34.25
>>318
お前「意味明瞭」でググってみろwww
2018/04/22(日) 17:32:48.05
>>321
意味不明
2018/04/22(日) 17:33:03.99
意味明瞭ってなんだよ
2018/04/22(日) 17:33:33.32
>>324
日本人じゃないんだろ
326仕様書無しさん
垢版 |
2018/04/22(日) 17:33:40.70
>>323
意味明瞭
2018/04/22(日) 17:34:51.48
>>319
> コードをいじってばかりのやつは、手段と目的が逆転している。

いや、だからリファクタリングだけやるのは論外って言ってるんだが?
目的は機能追加などの改修で、その手段(の一つ)がリファクタリング

目的を実行する時にこまめにやる手段で、手段そのものが目的になってるような
リファクタリングだけの作業とか大規模リファクタリングはおかしいって
言ってるんだが?
328仕様書無しさん
垢版 |
2018/04/22(日) 17:35:16.48
>>325
意味明瞭をわからない人間の方がブラジル人じゃないだろ
329仕様書無しさん
垢版 |
2018/04/22(日) 17:35:49.03
>>324
意味がはっきりわかること
2018/04/22(日) 17:35:50.61
>>326
意味不明
2018/04/22(日) 17:36:29.45
>>329
日本人なら普通そんな使い方しない
2018/04/22(日) 17:36:45.31
>>328
ブラジル人ではないだろうな
2018/04/22(日) 17:38:05.31
意味明瞭ワロタwww
2018/04/22(日) 17:38:29.33
>>256
で、これの理由は?
335仕様書無しさん
垢版 |
2018/04/22(日) 17:38:31.57
>>331
お前は普通じゃないし日本人のこと1ミリも理解してない
史実に登場する最初の天皇の名前を言ってみろ
2018/04/22(日) 17:38:58.60
>>335
ググってみろ
337仕様書無しさん
垢版 |
2018/04/22(日) 17:39:18.98
>>334
>>268
338仕様書無しさん
垢版 |
2018/04/22(日) 17:39:54.17
>>336
はい知らないのな、お前日本人のこと1ミリも理解できてない
2018/04/22(日) 17:40:09.54
>>335
「意味不明」と「意味明瞭」がちゃんと対照的に使われている例を教えてよ先生
2018/04/22(日) 17:40:23.74
>>338
キチガイおつ
2018/04/22(日) 17:40:42.04
>>337
それ理由になってねーよ
2018/04/22(日) 17:40:56.42
>>338
ググってみろ
2018/04/22(日) 17:41:12.26
>>338
在日おつ
2018/04/22(日) 17:41:18.43
荒らしが飽きたら続きのレスをお願いしますよ
2018/04/22(日) 17:42:42.76
>>335
うっわ
2018/04/22(日) 17:43:39.06
ただ、普段からリファクタリングしてたら依頼がきたときに素早く対応できるよね
2018/04/22(日) 17:43:59.08
>>335
キチガイ
348仕様書無しさん
垢版 |
2018/04/22(日) 17:44:11.09
>>339
「意味不明」とは意味がはっきりしないという意味です
「意味明瞭」とは意味がはっきりしてるという意味です
ゆえにこれらの言葉は対称の関係にあるわけです
2018/04/22(日) 17:44:39.53
>>335
統合失調症ですねわかります
2018/04/22(日) 17:44:56.13
>>348
ソース
2018/04/22(日) 17:45:59.20
>>348
対称と対照の違いもわからないカスがこちら
2018/04/22(日) 17:47:23.36
>>348
世の中一般の使用例あげろよ、あるんならな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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