リファクタリングをただのコード修正と思ってる人へ

■ このスレッドは過去ログ倉庫に格納されています
2010/05/29(土) 17:25:56
テストも書かないでリファクタリングとかうけるw

まずな、リファクタリングでは機能追加・修正は行わない。
動作はまったく同じでコードをきれいに書き換えること。

書き換えるといっても、これなら同じ動きだろ?って推測でやってはいけない。

まずテストを書く。ユニットテストをできるように、
単一のクラスでインスタンスを作る。

汚いコードなのだからたいていは依存関係のせいで単一ではクラスが生成できない
それを生成するために、クラスの動作を書き換える。
といっても元のコードは修正しない。継承やプリプロセッサを使って
依存関係を断ち切るために既存のコードを上書きする。
どうしてもそれが不可能な場合には、決められた手順で最小のコード修正を行う

そうやって既存のクラスのユニットテストを行う。
それでやっとリファクタリングが行える。
既存のクラスのユニットテストを通るように新たなコードに修正、
もしくは新規作成して置き換える。

この手順と考え方を守ってないのはリファクタリングではない。

で?
785デフォルトの名無しさん
垢版 |
2017/02/09(木) 21:39:19.62ID:lnTHGhne
とりあえずみんな
http://www.shoeisha.co.jp/book/detail/9784798116839
とか
https://estore.ohmsha.co.jp/titles/978427405019P
これ読んでる?
2017/02/09(木) 21:42:53.34ID:CNUBJX7I
>>777
> いやだから話の前提が>>749だから選択も糞もないくやらないといけない状況でそれをリファクタリングとはいわねーって

お前根本的に間違ってるんだわ。

まず先に最初の話のツッコミ漏れを補完しておくとだな
>>749で設計に問題があるときはどうするのか聞いた。
これは言い換えると「やり直し以外の選択の余地がない例」として上げたんだよ。

それなのに、>>750
> ただの上流への出戻り、やり直し、糞開発じゃないの
やり直しすればいいじゃんって、お前アスペか?

やり直し以外の選択肢の余地がないことにたいして、
「やり直ししろ」ってそれは反論になってない
俺が意図してる答えだ

でな、リファクタリングかどうかっていうのは、手段なの
「糞もないくやらないといけない状況」のときに、
リファクタリングを使って、修正を行うのか
リファクタリングを使わずに、修正を行うかの話

ここまで言えば、お前が根本的に間違ってることが理解できるだろ?
お前はリファクタリングが手段であることをわかってない。どんな状況かはどうでもいい。
修正をするときに、どうやって修正するかの話だ。

お前は、リファクタリングしないで、行き当たりばったりで修正してバグを入れ込むんだろう?
俺はリファクタリング(わかりやすく言えばリファクタリングの本に書いてあるテクニック)を使って修正するんだよ
2017/02/09(木) 21:45:29.54ID:CNUBJX7I
>>778
> プロジェクトの開始時にリファクタリングの見積も出してね

リファクタリングが手段であることを知れば、
「リファクタリング(手段)の見積もり」がおかしい言い方だとわかるだろう。

正しく言うならば「プロジェクトの開始時に修正の見積もだしてね」だ
修正にはバグだけじゃなくて仕様の追加や間違いによる修正も含まれる。


あとは修正するしかない状況で、行き当たりばったりで修正するか
リファクタリングで修正するかの違いなだけだ
2017/02/09(木) 21:46:27.58ID:CNUBJX7I
>>776
> リファクタリングのための工数なんて実際は取れないし、
リファクタリングのための工数が取れなくて
リファクタリングを使わない修正であれば
工数が取れるっておかしくね?w
789デフォルトの名無しさん
垢版 |
2017/02/09(木) 21:52:20.21ID:lnTHGhne
https://estore.ohmsha.co.jp/titles/978427405019P

リファクタリングに工数がーとか言ってる奴はこれ特に読んで欲しい
790762
垢版 |
2017/02/09(木) 21:55:31.20ID:VpXdxNl0
>>784
ほらな
きちんと書いてないと
こうやって誤解されるわけだ
言いたかったのは

「現状while文で処理されていて問題ないけど
このケースはfor文の方がわかりやすいから書き直そう!」
どこに機能追加される余地があんの?
2017/02/09(木) 21:57:10.56ID:CNUBJX7I
>>790
> どこに機能追加される余地があんの?
ないよ?

誰がそこに機能追加される余地があるって
言ってるの?

お前?
792デフォルトの名無しさん
垢版 |
2017/02/09(木) 21:58:18.00ID:lnTHGhne
>>791
>>753 こいつ
2017/02/09(木) 21:58:44.70ID:CNUBJX7I
>>753には while とか for の話は
明らかに書いてないけど?
794デフォルトの名無しさん
垢版 |
2017/02/09(木) 21:59:52.90ID:VpXdxNl0
>>791
あのさー
YAGNIに反するって言ったのは誰なんですかね?
余計な機能はつけるなってことでしょ?
whileからforに書き換えるのに何か機能追加されんの?
2017/02/09(木) 22:01:15.92ID:CNUBJX7I
YAGNIの話?

753 自分:デフォルトの名無しさん[sage] 投稿日:2017/02/08(水) 23:18:57.65 ID:EqksEKaR [3/7]
> 将来性を考慮しての改善するのがリファクタリングでしょ
YAGNIに反するからそれは違う。


これがどうfor やwhileと関係すんの?
796デフォルトの名無しさん
垢版 |
2017/02/09(木) 22:02:47.10ID:lnTHGhne
ほんまやね。レス辿って明らかにおかしいのを見つけたがら言ったけどそれforのレスにかすりもしなかったわ。すまん。
2017/02/09(木) 22:06:33.30ID:Lyr2GEHi
>>786
おまえ日本人か?w
2017/02/09(木) 22:08:07.52ID:CNUBJX7I
下手に勘違いされると困るから補足しておくと、

汚いから修正するってだけならYAGNIでやるべきではないが、

その部分を修正していたり読む必要があるならば、
いつ必要しているの?今でしょ?ってことで
今すぐ必要としていることなわけだから、
そこを修正するのはYAGNIではない
799デフォルトの名無しさん
垢版 |
2017/02/09(木) 22:25:26.99ID:lnTHGhne
読まなきゃ汚いと思わないんだから、矛盾してるような気がするけど。
必要ないのに汚いコードを読み始める酔狂な奴が居るとしたら別だけど。
2017/02/09(木) 22:29:02.28ID:CNUBJX7I
> 読まなきゃ汚いと思わないんだから
いや、コードメトリクスツールなどをつかえば
読まなくても、客観的に汚いとわかる
2017/02/09(木) 22:29:15.76ID:Ra4XvV1b
>>797
いつになったら何のことをリファクタリングと呼んでるか書いてくれるの?
2017/02/09(木) 22:34:05.44ID:Ra4XvV1b
汚いから直すってのもリファクタリングと呼ぶと思うけど、
汚いから直すってのは実際の開発現場じゃなかなか難しいと思うよ

その汚さが原因で性能が出ないとか、機能追加できない、し辛いって明確な理由があれば別だけどね
2017/02/09(木) 22:41:25.83ID:CNUBJX7I
>>802
> その汚さが原因で性能が出ないとか、機能追加できない、し辛いって明確な理由があれば別だけどね

だから俺は聞いたんだよ?

そういうどうしても直さなければいけないときに
リファクタリングで安全に修正するのか?
それとも行き当たりばったりに修正してバグを入れるのか?って
2017/02/09(木) 22:43:53.46ID:Ra4XvV1b
いや、俺に噛みつかれましても
2017/02/09(木) 22:45:29.16ID:Lyr2GEHi
>>801
理解できる頭がないのに質問するなよw
何度も言ってるだろうがww
2017/02/09(木) 22:47:35.42ID:CNUBJX7I
リファクタリングを行うタイミングを間違ってるんだよね

俺は何らかの機能修正とかでコードをいじるときに
関連するところを少しづつなおす
大抵が数行程度で10分もかからずに終わる


こまめに修正しないで、手遅れになってからやろうとするから
大規模になってしまって、別途工数が〜とかいう話になるんだよ。

手遅れになってしまったものを修正する工数がないからと
手遅れなコードのままさらにコードを追加するから
さらに手遅れになっていくんだろうが
807デフォルトの名無しさん
垢版 |
2017/02/09(木) 22:59:39.83ID:lnTHGhne
>>806
多分解ってると思うけどその言い方は誤解を生むと思うぞ。
リファクタリングと機能追加は明確に分けるべきで、リファクタリングして、テスト走らせて振る舞いが変わってない事を確認してから機能追加に入るべき
2017/02/09(木) 23:07:28.39ID:Ra4XvV1b
>>805
他人の否定はしてるけど、自分では何も言ってないよ君
2017/02/09(木) 23:07:33.91ID:2NAFiD3Z
リファクタリング=上腕二頭筋
2017/02/09(木) 23:12:13.46ID:CNUBJX7I
>>807
うん。わかってる

> リファクタリングして、テスト走らせて振る舞いが変わってない事を確認してから機能追加に入るべき

どちらもあるよ。

機能追加してからリファクタリングする物の典型的な例がTDD
Red/Green/Refactor 通りの順番
811デフォルトの名無しさん
垢版 |
2017/02/10(金) 00:46:58.66ID:/WxwB06L
どんどん別の手法がまざっていく洗脳馬鹿
2017/02/10(金) 01:18:18.70ID:+KYQgfiL
別の手法ってなんの話だ?
813デフォルトの名無しさん
垢版 |
2017/02/10(金) 02:12:34.39ID:/WxwB06L
>>810 のことだよ。
2017/02/10(金) 02:25:45.27ID:+KYQgfiL
> Red/Green/Refactor 通りの順番

これのことか?

Refactorはリファクタリングのことだよ
別の手法じゃなくて全く同じもの
2017/02/10(金) 12:06:41.01ID:QRGeJWes
1.機能追加前にテスト書く
2.追加コード書く
3.テスト
4.ダメならテストに通るまでコードいじる

もしかしてこれもリファクタリング扱いしてるの?
2017/02/10(金) 12:38:04.04ID:+HewTgrG
>>815
それはRed→Greenのところでしょ…
2017/02/10(金) 21:26:25.38ID:1oBD+cZp
 最近、特定のフラグ変数に関するif文の山をswitch構文に清書し直したんだけど、これってリファクタリング?
818デフォルトの名無しさん
垢版 |
2017/02/10(金) 21:34:25.32ID:/WxwB06L
>>816
それさ、リファクタリングのいち定義であってリファクタリングではないから。
819デフォルトの名無しさん
垢版 |
2017/02/10(金) 21:35:50.89ID:/WxwB06L
>>817
そのif文が変ならな。まともなif文なら書き換える必要がない。
820デフォルトの名無しさん
垢版 |
2017/02/10(金) 21:37:35.22ID:/WxwB06L
>>817
ただswitch文にすると仕様変更時にswitch文では対応できなくなる可能性があるので逆かもしれない。
2017/02/10(金) 21:42:51.54ID:+KYQgfiL
>>817
確かにswitchでかけるならばifよりswitchの方が少しだけ見やすくなるけど、
大抵はリファクタリングにはならないよ
巨大なswitchもリファクタリングすべき対象となる

何がダメなのかというと比較の回数がifのときと変わってないから。
比較が多い=複雑なので、これは単なる書き方の違いでしかなくて
リファクタリングとまではいかない。重要なのは比較回数

じゃあどうすべきかというと、一番簡単な方法は
関数テーブル(ルックアップテーブル)を使う方法
大量のswitchでの比較が条件が揃えば0個にまで減る
2017/02/10(金) 21:46:49.78ID:+KYQgfiL
>>818
> それさ、リファクタリングのいち定義であって


> Red/Green/Refactor 通りの順番
がリファクタリングの定義に見えるんだ・・・

ここにはどこにもリファクタリングの定義なんてものは
書いてないんだが

>>816が言ってるのは、Red→Greenでやる内容は
リファクタリングじゃないよって言ってるだけでしょ

俺からも補足するが、リファクタリングは
動いているコードを、動いているコードに置き換えることだよ。

修正前と修正後のどちらかが動いていなければ
それはリファクタリングではない
2017/02/10(金) 21:57:11.80ID:+KYQgfiL
* Green
  1.機能追加前にテスト書く
* Red
  2.追加コード書く
  3.テスト
  4.ダメならテストに通るまでコードいじる
  5.テストに通った。やったー完成だ! ←ふざけんじゃないよ。なんだこのコピペだらけで無駄がばかりのクソコードは
* Green
  6.リファクタリングする
  7. 読みやすくなりました。←このコードならレビューする気になる。シンプルあとで読んだ人も理解しやすいだろう
  8. 完成、1に戻る
2017/02/10(金) 22:00:06.48ID:+KYQgfiL
現実にはこの5. テストに通っただけの状態で
完成としてしまうやつが多いんだよな。

そういうコードで許される環境っていうのは
コードレビューが行われていない。
コードを見ずにテストに通ればOKとしてしまう環境

そして向かうはデスマーチw
825デフォルトの名無しさん
垢版 |
2017/02/10(金) 22:14:40.62ID:/WxwB06L
駄目だこりゃ。なんでそういう手順がリファクタリングなのか?
2017/02/10(金) 22:20:09.64ID:+KYQgfiL
>>825
お前が理解してないだけだよw
2017/02/10(金) 22:33:35.95ID:+HewTgrG
Refactorとリファクタリングが同じ意味の言葉だってのが伝わってないのかも知れないな
2017/02/10(金) 22:38:11.34ID:+KYQgfiL
あ、はい間違えました

> 6.リファクタリングする

これじゃ リファクタリンギング ですねw
829デフォルトの名無しさん
垢版 |
2017/02/10(金) 22:59:58.18ID:/WxwB06L
このスレってそもそも特定のリファクタリング作業のスレッドか。話がかみ合わないわけだ。
2017/02/10(金) 23:48:55.17ID:+KYQgfiL
誰が特定のリファクタリング作業の話をしてるんだ?
誰がはどうでもいいや「特定の」ってどれのことだよ?
2017/02/11(土) 00:00:12.78ID:o1zrWG0U
TDDの例出したからTDDに限定した話だって勘違いしてるんでしょ
2017/02/11(土) 00:04:14.10ID:p/3UeWk3
>>829
「特定の」がなにか言うだけだよ。
お前がちゃんと考えて発言しているなら
簡単な質問なはずだが?

もっとも俺はお前が何も考えてないってことを
あぶり出すために「特定の」が何か聞いたんだけどなw
833デフォルトの名無しさん
垢版 |
2017/02/21(火) 23:44:51.93ID:8I0Tfvzv
お、あぶり出してるねえ
2017/02/22(水) 01:09:25.60ID:TiP/fttU
このスレの存在忘れてたわw
なんだ逃げたのかw
2017/02/22(水) 12:59:43.56ID:zJ9IFSdf
>>423 >>426 のやつNot Foundになってた

リファクタリングの誤用
https://bliki-ja.github.io/RefactoringMalapropism/

リファクタリングの境界線
[見当たらない]

インタフェースの変更はリファクタリングか
https://bliki-ja.github.io/IsChangingInterfacesRefactoring/

未知のバグフィックスはリファクタリングか?
https://bliki-ja.github.io/IsFixingAnUnknownBugRefactoring/

最適化はリファクタリングか?
https://bliki-ja.github.io/IsOptimizationRefactoring/

宣言の順序変更はリファクタリングか?
https://bliki-ja.github.io/IsDeclarationOrderingRefactoring/
2017/02/23(木) 18:03:32.56ID:G3lxPXWh
定義から定まってないからなリファクタリングって
いや、実在するのか?
2017/02/23(木) 22:07:14.34ID:Ka1UMSVA
殆どの用語は定義なんか定まってないよ
数学でさえ、ある用語に対して数学ではこういう定義で
使いましょうと決めているだけ
2017/02/26(日) 20:54:48.09ID:wNjUkQs3
ソースを組んだときと今とでチンコのポジションを若干変更した
これがリファクタリングである
839デフォルトの名無しさん
垢版 |
2017/02/26(日) 22:44:41.65ID:zOBszuQK
特定の統合開発環境のリファクタリング機能をリファクタリングだと言ってるやつはいなくなったなw
2017/02/27(月) 01:14:12.49ID:IXzsv4Rb
俺の中では変数名の変更=リファクタリング

Visual Studioの機能名がそうだったから
2017/02/27(月) 01:49:20.76ID:j4xHFZFw
俺の中では、マーチン ファウラーのリファクタリング本(古い方)に
のっているのがリファクタリング
変数名の変更ももちろんのってる

後はそのリファクタリングをどれだけ簡単に
正確に行えるかの違い。

ローカルスコープ程度で済むものなら良いけど
スコープが広い部分のリファクタリングは手動でやるのは大変
それを自動的に間違いなく行える、静的型付け言語+IDEの力は偉大
2017/02/27(月) 02:49:09.61ID:Ydy+ZWkb
あるスコープの中で外部から見た仕様を変えずに内部の設計を変えるのがリファクタリング
2017/02/27(月) 17:22:25.25ID:IXzsv4Rb
>>842
それではチンコのポジションも
2017/02/27(月) 22:10:17.46ID:Ydy+ZWkb
チンポジ設計
845デフォルトの名無しさん
垢版 |
2018/05/23(水) 23:04:38.11ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

K2FKH
846デフォルトの名無しさん
垢版 |
2018/07/04(水) 23:04:33.21ID:gFgZc5FG
GKH
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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