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

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

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

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

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

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

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

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

で?
2011/11/19(土) 22:15:38.43
>>238
> そうならないようにするためにリファクタリングがあります。

そうならないように設計を見直す方が先じゃないか?

小手先でどれだけいじっても, 汚い設計は汚いソースを
再生産するだけじゃないのか?

それだったら, 設計をリファクターすべきだ

ぶっちゃけ, ユーザーインターフェースが変わらなきゃ
仕様の範囲内だ
2011/11/19(土) 23:03:54.10
>>238
コピペはいらんよ。

汚い綺麗で語るとコードの可読性ばかりを問題にしてるように感じるって話。
だからリファクタリングがいらないとか言う奴がいるんじゃないの。

コードが綺麗であっても設計上の問題が存在することは当然あるよね。

コードの綺麗/汚いは設計の一部しか示していないと思うし、
その修正はリファクタリングの一部でしかないと思う。
2011/11/20(日) 07:43:51.29
>>240
したらただの仕様変更だよねそれって
まあ、名称にこだわる必要もないけど
2011/11/20(日) 08:21:15.92
関数、クラスの仕様は変わっても
システム全体の仕様は変わりません。

なので仕様変更にはあたりません。
2011/11/20(日) 08:21:59.02
設計変更と仕様変更は別の話といえばよかったか。
2011/11/20(日) 12:07:12.15
設計を仕様と見なしたら
仕様変更を伴わないコード変更って存在するのか?
2011/11/20(日) 12:08:20.66
aとかbとかわけのわからん変数名を
意味がある変数名に変更するとか。
2011/11/20(日) 13:09:50.85
I/F変更を伴うかどうかっていう観点じゃないの

ユーザに見える部分とか
担当者の異なるモジュール間とか
2011/11/20(日) 17:10:54.61
オリンパスコーディング
2011/11/20(日) 17:46:34.19
結局、
外から見た目の振る舞いが変わるか/変わらないかがポイントで、
外から見た目の振る舞い=仕様であって
内部構造≒設計は、リファクタリングの対象
って事でおk?
2011/11/20(日) 18:02:36.08
>>248
個人的にはソレが正しいと思うけど
そう思ってない人がいる予感。
241とか
2011/11/20(日) 18:50:26.97
>>249
じゃあ、リファクタリングってのは設計変更までを指すってことでいい?
何やんだかさっぱりわからないけど
2011/11/20(日) 18:53:49.64
>>250
設計の範囲を定義しろ。
話はそれからだ。
2011/11/20(日) 21:17:25.23
>>251
そっちにまかせる
>>248がえらそうに宣言してるから>>248に決めてもらうか
2011/11/21(月) 09:59:01.46
(この人たち、なんで今さらこんな議論をしてるんだろう)
2011/11/21(月) 22:35:10.04
最初からずっとこのスレにいるのは
お前だけだよw
2011/11/22(火) 10:39:05.00
そうか、リファクタリング本を読んでるのは俺だけだったか
2011/11/23(水) 00:32:21.88
>>255
本の受け売りじゃなくて中身をちゃんと理解しろよ
2011/11/23(水) 01:19:14.75
そういう手合いはおそらくよんですらいない
買っただけ
2012/02/07(火) 13:45:03.37
改修が必要になったときに初めて
その場で interface をでっちあげて、その後、クラスお取替え

これでいい気がしてきた
2012/02/07(火) 20:02:48.59
それでいい
260デフォルトの名無しさん
垢版 |
2012/03/24(土) 14:35:39.62
リファクタリングを身に付けるとコードレベルでの設計力が上がりますか?
2012/03/24(土) 16:05:22.68
設計力は下がります
でも組んだ後の問題に対する対応力は上がります
262デフォルトの名無しさん
垢版 |
2012/03/24(土) 17:35:34.20
>>261
何故、設計力は下がるのですか?
2012/03/24(土) 21:11:33.51
設計力あがるだろ

正しい設計のコードに
変化させるのがリファクタリングだ。
2012/03/24(土) 21:36:47.86
>>49-52で結論は出てる
リファクタリングはオナニー
好きにやればいい
公開オナニー好きでも床オナ好きでもその方法を誰も咎めることはできない
2012/03/24(土) 21:51:30.52
オナニー? 自己満足と言いたいのかもしれないが。
仕事でやるのなら自己満足じゃないぞ。
みんなの満足。

2012/03/24(土) 22:21:58.07
みんなでオナニー
2012/03/25(日) 12:10:02.63
分散マスタベーション
2012/04/22(日) 22:43:46.10
密に結合した処理を処理を疎になるようにするとか
処理が対象になるようにシーケンス直すとか
って意味があるリファクタリングだと思うけど
こういうのはリファクタリングっていわんの?
2012/08/05(日) 00:31:39.26
>クラス内部で別のクラスを生成しない
>>4のこの話って完全にはDIでも使わなきゃ無理だけど、
FactoryMethodで解決できるよね。

>publicメソッドの引数には、なるべくクラスを使わない。
完全抽象化クラスに類するもの限定ってなら正しいけど、
intや文字列型だけってのは無いよね。スタブ渡せば済む話だし。
2012/08/05(日) 01:11:40.91
言葉の揚げ足取りに終始しててウザいだけのスレになっちゃってるなw
271デフォルトの名無しさん
垢版 |
2012/10/14(日) 16:17:10.72
大規模アプリには
必ずリファクタリングが必要。
開発工程の一つに加えていいレベル。
272デフォルトの名無しさん
垢版 |
2012/10/15(月) 15:52:21.57
VB6で幾度となく機能追加が行われたコードをぼんやり眺めてると
リファクタリング?何それおいしいの?
という気分になってくる。
2012/10/16(火) 18:14:20.05
>>272
そういうコードこそ、リファクタリングが楽しいんじゃないの?
274272
垢版 |
2012/10/16(火) 18:35:14.51
趣味でやるならすごく楽しい。一人でやるのなら絶対リファクタリングしてる。
けど仕事となると時間が取れない。
さらなる機能追加と他言語への移植作業用のドキュメントが優先になってまつorz
移植作業前にリファクタリングできたら解読も楽だろうになあ。
そんなことより成果物(ドキュメント)が優先だってさ。しゃーねーや。
2013/07/11(木) NY:AN:NY.AN
refakuta
2013/07/11(木) NY:AN:NY.AN
リファク太
2014/01/10(金) 07:46:54.18
リファクトスタンダード
2014/01/21(火) 23:03:30.89
リファクタリング本はかなり勉強になったな。
ぐちゃぐちゃなコードしか書けなかったのが、リファクタリングしまくってたら
最初からオブジェクト指向やらデザインパターンやらを考慮したコードが書けるようになってた。
279デフォルトの名無しさん
垢版 |
2014/07/25(金) 01:44:17.80ID:S+8bjftN
リファクタリング中にバグが見つかっても修正しちゃいけないんですか?
振る舞いが変わるわけだし。
リファクタリング原理主義者の方の意見が聞きたいです。
2014/07/25(金) 07:34:43.94ID:FDyePLlK
好きにすれば?どうせ個人でやってんだろ
一人ならほんと楽しいよねリファクタ。

業務でリファクタなんかできねーよ
リリースしてから何年も動いてるパッケージに手入れられるわけないだろ!
2014/07/25(金) 10:51:25.65ID:nHudeAGx
業務でリファクタリングの時は、バグの種類にもよるけど基本的にはそのまま。
勿論、リファクタリング後に修正することを見越してリファクタリングすることになる。
実は、バグを見つける為にリファクタリングすることもあるので、「できねーよ」で済まない場合もあるのよ。
2014/07/25(金) 11:26:11.42ID:PjU5XzSY
バグを見つけるためにリファクタリングをすることはあるが
改修はリファクタリング前のコードに対して行うことになるなぁ
283デフォルトの名無しさん
垢版 |
2014/07/25(金) 12:21:15.76ID:CQdwbNpj
リファクタリングとは
テストの合格を維持したままの
コードの修正でしょ
2014/07/25(金) 12:41:48.16ID:mmV7Js8i
上を納得というか安心させるための無駄検証にコストを掛けた後だと
いじくれないというのはわかる

だがサブシステムを小分けして
その範囲内で裁量をもたせられるようにしてないのはアカン
2014/07/25(金) 13:58:36.59ID:fPj1ZcPi
>>282
> 改修はリファクタリング前のコードに対して行うことになるなぁ

それって人件費を無駄に捨ててるじゃないか?
会社に損害与えてるよ。
プロ意識無いのかね?
2014/07/25(金) 20:12:11.75ID:zPq/iOJh
リファクタリングしたがる人とは仕事したくないよね
287デフォルトの名無しさん
垢版 |
2014/07/25(金) 20:12:41.10ID:Fz0v1PBn
でも実は一発目無計画で作ってリファクタリングするのが一番品質がいい
2014/07/25(金) 21:18:52.98ID:JraUdqnP
一発目無計画っていうのがありえなさすぎ。
趣味のプログラミングだろそれは。
2014/07/25(金) 22:15:52.25ID:Xbv85is1
>>287
それは全然不思議じゃないね。
下書きだと思えばいい。

一発で書くよりも、下書きして全体を理解してから
清書する。
2014/07/25(金) 23:03:10.49ID:mmV7Js8i
神ならざる身で限界を知りつつも最善を目指す手法ではないか
2014/07/25(金) 23:24:21.34ID:oKdTZN9u
考え方の違いなんだよね。この業界に「ボーイスカウトの規則」っていう言葉があるらしい。

http://qiita.com/hirokidaichi/items/d6c473d8011bd9330e63
> ボーイスカウトが、来る前よりも帰った後の方が山をきれいにしておくことにちなんだ規則。
> ソフトウェア開発においては「モジュールをチェックインする際には、必ずチェックアウト時よりも美しくする」ことを意味する。


リファクタリングしない人って、ただ動けばいい、コードが怖くて触れない。
他の部分はいじらないですませようとしちゃう。

修正しない部分なら見て見ぬふりもいいが、修正するなら、
そのまわりを綺麗にしろと。

それが出来ない人は、バグも多いんだよ。してシンプルにしてないから。
複雑なものはバグが多い。複雑だからコードを理解していない。
理解してないからバグが出る。当たり前の話。
2014/07/25(金) 23:31:13.15ID:zPq/iOJh
そういう自己満足だけの身勝手な修正が一番たちが悪いんだよ
2014/07/25(金) 23:33:03.76ID:oKdTZN9u
>>292
なんでですか?

まずきれいなコードのほうが、メンテナンス性が高くなり
バグが減り、開発コストも下がります。

ここは、否定しませんよね?

じゃあ、最終目標は「修正」するべきであってます。


あなたは、まったく筋違いの否定をしているのでは?
2014/07/25(金) 23:42:25.29ID:zPq/iOJh
>>293
そもそも前提が間違ってる。
きれいなコードって何だ?お前のオナニーだろ?
コード修正したいなら、きちんと設計のレビューを受けてチームの了承得てからにしろ。
2014/07/26(土) 00:11:53.24ID:NIQWGSzg
コードがスパゲティになってしまって、
簡単な機能追加ですら2週間もかかるようになってしまってた
(しかも、テストを繰り返しても正しさに自身が持てなかった)のが、
3週間ほど時間をかけてリファクタリングした結果
簡単な機能追加なら1時間もかからず行えるようになりました
2014/07/26(土) 01:29:58.80ID:b/ARCjIF
今どきスパゲティコードなど、そうそうお目にかかるもんじゃない
297デフォルトの名無しさん
垢版 |
2014/07/26(土) 02:28:53.78ID:+7Kb6odc
リファクタリングするもしないも、そのソフトの特性や現場事情があんだから、
まずそういう情報がないとなんとも言えねーだろ。
共通して言えるのは独断で判断するなってことだよ。
2014/07/26(土) 08:38:26.34ID:NIQWGSzg
>>296
ちゃんとリファクタリングするようになったからね
2014/07/26(土) 09:05:17.83ID:EislOxX9
設計の手法が確立してきたからだろw
300デフォルトの名無しさん
垢版 |
2014/07/26(土) 09:15:20.20ID:HnYXSVS2
リファクタリングする前のコードを保存しておいて
リファクタリングしてテストに合格したら
前のコードを消去すれば安全だよ
2014/07/26(土) 09:33:49.93ID:NIQWGSzg
>>300
マトモなバージョン管理システムとBTSは導入済み前提でしょうよ
でなきゃリファクタリングなんて無理
302デフォルトの名無しさん
垢版 |
2014/07/26(土) 11:28:39.87ID:lCiymgo1
>>288
神が降りてきて、わぁぁぁぁぁってプログラム書く手が動くような事あるだろ?
2014/07/26(土) 11:34:58.07ID:EislOxX9
業務ではないなw
2014/07/26(土) 13:52:30.19ID:F6Vf17wA
最近ソフトウェアが壊れていくプロセスってのが
わかりだしてきたよ。

いくつかパターンがあってね、名前でもつけて
近いうちに何処かで発表したいかなって思ってる。

たとえばモノマネパターン。
周りにあるコードを真似て書こうとするパターン。

このような関数があったとする。
function foo(name) {
 var funcTable = {
  func1: functioni() {・・・},
  func2: functioni() {・・・},
  func3: functioni() {・・・},
 };
 funcTable[name]();
}

それを真似してこんなコードを書く
function bar() {
 var name = 'func1';

 var funcTable = {
  func1: functioni() {・・・},
 };
 funcTable[name]();
}

もし0からコードを書かせたらこんなアホなコードを書くわけがないのに、
なぜか周りにあるコードを真似して書こうとする。
2014/07/26(土) 15:29:59.33ID:EislOxX9
クソコード書いて、次は誰かがもっといいコード書くだろうからそれマネしようとか思ってたら
俺のクソがプロジェクト中にコピペされて救いようがなくなってたことならある
2014/07/26(土) 23:32:58.38ID:F6Vf17wA
>>305
それそれ、誰もが知ってるコピペパターンw

できれば最初からクソコード書くなって話でもあるが、
それは仕方ない。誰でも成長するものなのだから=後の自分はもっと綺麗に書ける。
なのに、昔の初心者のコードを真似る奴が多い多い。

それやってると、初心者のコードをありがたがって参考にしてどうするの?w

話それたけど、本来はコピペするなら再利用できる形にリファクタリングして
それを呼び出さないといけない。そしてこれは絶対にやるべきリファクタリングの一つ。

ただし、無関係な処理なのに形が似ている(しかしわずかに違う)のを
無理やり共通化して複雑化させるパターンもあるので注意。

そういう場合でもコードはなるべくシンプルになるようにしなくちゃいけないのだが、
モノマネパターンの通り、なぜか同じ形を真似ようとする。
できないわけじゃないのに真似をする。何も考えてないのかねって思う。
2014/07/27(日) 02:21:16.13ID:xgsJlmZ9
仕様書が別になってたらどんなに処理が似てても別にするなあ
2014/07/27(日) 09:42:53.89ID:r3KMo0jq
似てる処理を共通化できないのは設計がきちんと出来てない証拠
仕樣的に別物とか関係ない
2014/07/27(日) 09:55:49.81ID:xgsJlmZ9
いやあるよ。
だいたい仕様変更が入ったときって、仕様書の画面毎とかだかし、
テストも仕様書毎につくるから、共通化してもテストの工数あんま減らんし。
修正になった仕様書の枚数と、手をいれる工数が一致してるとすごく客に説明しやすい。

>似てる処理を共通化できないのは
断じて違う。「似てる処理」を共通化するんじゃない。部品を共通化するんだ。
このへん誤解してなんど泣いたことか。
おまえのその考え方はスパゲッティまっしぐら。
2014/07/27(日) 09:59:56.78ID:EfhXqtXt
>>309
どんな考えでもいいけど何かしらの共通化がされてたら
> 修正になった仕様書の枚数と、手をいれる工数が一致
これは成立しないぞ
まず自分の矛盾に気付くのが先のようだ。
2014/07/27(日) 10:34:57.72ID:xgsJlmZ9
>>310
青いのう
部品を共通化するって考え方が徹底してれば、だいたいの場合は一致するもんだ。

もちろん客に説明するより少ない工数で済むならそれでいいよ?
問題は、「似てる処理」を共通化してると、工数が仕様書の改修量よりずっと膨らむことがあるってことなんだ。
ささいな修正が全体に影響してテストが膨らんだり、結局コピペで新たにクラス作らなくちゃいけなくなったりな

うん、これも共通化してるなら何でも同じとか言われそうだな
現実のブツ無しだと説明が難しいが…
2014/07/27(日) 10:58:40.58ID:EfhXqtXt
>>311
説明が難しいのはお前が「部品」とかいうオレオレ言語使って自己満足してるからだ。
ワケの分からん独自理論開発するまえに基本をしっかり勉強しろ。
2014/07/27(日) 11:02:04.82ID:M1h0x0Bb
>>311
甘いのう
残念ながら今時の設計者の中にはコードを全く書けないやつが少なからず居る
よって、共通化なんて幻想に過ぎぬわwww
2014/07/27(日) 11:19:32.95ID:aZ1TYiI9
func1(){
a b c d
}

func0{
a b
}

func11(){
func0() c d
}

func12()
func0() e f
}
上のような共通化は似てる処理と部品どっちが主張しているんだ?
2014/07/27(日) 11:22:29.85ID:xgsJlmZ9
>>312
独自理論じゃないよ!みんなそう言ってるよ!
お前こそ本読んで知った気になってるだけだろ!頭でっかちめ

確かに、だいたい初心者向けの本には同じ処理を共通化すべしとか適当に書いてあるから、
実際の経験がないと理解しづらい部分ではある。
2014/07/27(日) 13:06:38.84ID:oB6jVO7Z
>>315
「部品」で意味してるのは何なんですか?
2014/07/27(日) 14:19:58.36ID:xgsJlmZ9
>>316
ごめん。一般的じゃなかった。
「機能」って読み替えて。
318デフォルトの名無しさん
垢版 |
2014/07/27(日) 14:22:31.05ID:5m0dj4Xz
人間は細胞でできているだろ
プログラムも細胞で作れば上手くいく
俺の独自理論だけど
2014/07/27(日) 14:35:22.28ID:b6NTPR2W
うだうだ言わずに 60兆個の細胞を持ってこい
2014/07/27(日) 15:03:56.50ID:kK8gelhu
共通化するときの決まりの一つとして、
全く同じコードの時に共通化するのであって
似ているコードを共通化してはいけない。

似ているコードをむりゃリ共通化しようとすると、
引数で処理を分岐することになる。
aが渡されればAの処理を、
bが渡されればBの処理をみたいに。

引数で分岐しだすとアウトだな。
2014/07/27(日) 15:10:03.90ID:oB6jVO7Z
>>317
あーなるほど
わざわざありがとうございます
2014/07/27(日) 18:36:01.67ID:b6NTPR2W
経験的にforの内部、ifの内部は関数にまとめると都合よいことが多い
そして気が付くと xxhelper, xximpl, xxsub といった関数であふれるw
2014/07/27(日) 22:38:54.70ID:j6qWMrth
>>320
似ている理由を吟味するのがリファクタリングだろ。
似ている理由を吟味した結果、同じことをちょっと違った実装しているだけと気付けば問題なく共通化できる。
2014/07/28(月) 00:24:14.35ID:PUM3vemV
>>323
設計段階で、最初から同じものだと分かってるものでさえのちのち弊害出てくるのに。
後付けでコード眺めて似てるじゃんとか思っただけのもんがまともに共通化できるわけないだろうが
2014/07/28(月) 09:35:31.93ID:DND3Jclf
それを吟味するってことだろ。JK
2014/07/28(月) 19:34:15.48ID:dU5jf/g6
コードの字面で共通化とか言ってたらそら失敗するわ
2014/07/28(月) 22:31:59.96ID:ZMdkhV+Q
共有化するには物事を抽象化するセンスが問われるから、
低能が共有化しようとして失敗するのは良く分かるよ

それに、言語によってはクロージャやメタプログラミングが無かったり
有っても扱い難かったりして、実現可能な抽象化が限られるケースもある
2014/07/28(月) 23:39:29.31ID:PUM3vemV
クロージャwメタプログラミングw
どんだけ狭い視点で話してんだよ
それかなにか、お前は世界中で使われるライブラリの設計者かなにかか?w

お前のコードとか会社に出たら即ゴミ箱行きだよww
ただの帳票出力で得意げにtemplate使ってんじゃねえwwww後引き継ぐ奴の身になれ
死ね。くさかどああkjsdふぁj;fじゃ死ねええええ
2014/07/29(火) 00:32:02.60ID:A/TMSH0w
トラウマだったのね。
2014/07/29(火) 09:33:14.47ID:Rzs2MIMk
自分の経験上、>>328みたいにプログラミング言語の機能の話を
狭い視点とか言い出す奴って
コードをロクに書けないSEモドキに多くて、
そういう奴に限ってリファクタリングにも否定的なんだよね

コード読めないからリファクタリングの価値を実感出来ないのかな?
331デフォルトの名無しさん
垢版 |
2014/07/29(火) 13:10:26.45ID:DxicYUyC
夏休みの学生が妄想で書き込むスレ
2014/07/29(火) 18:26:00.62ID:Wf2KiU9x
自分と同じドカタ仕事してる奴以外は
全て学生に見えてしまう様になったら病気です
2014/07/29(火) 20:26:27.73ID:vPKzHxKl
自分の経験上、リファクタリングしたがる奴は例外なく低スキル。
2014/07/29(火) 20:36:44.73ID:ahLU5tbJ
アホに効果を実感させるところまでが能力の内です
2014/07/29(火) 21:31:45.45ID:X6c6OHYr
アホSEがExcel仕様書の罫線を二重罫線に書き換えて
仕事したつもりになってるのに比べたら
比較にならないレベルの価値があるよ > リファクタリング
336デフォルトの名無しさん
垢版 |
2014/07/29(火) 21:41:52.70ID:jt6qgrVo
2重罫線を大事にする客だって多いわ。
客はコードの中じゃなくて、資料とか見るんだわ。

リファクタリングなんかしたらね、
なんかちょっと挙動変わってるんだけど?
障害じゃないけど勝手に変えちゃ駄目でしょ。
うん?次からは言います?いや、そもそも動いてるもん変えなくていいよ
って話になる。

なんでもかんでもリファクタリングだのオブジェクト指向だの、
時と状況関係なしにやろうとするアホが多いんだよな。
2014/07/29(火) 22:05:08.74ID:Lzz8ZlFD
工数改善の見通しが数字で説明できるならともかく
実感とかで勝手にリファクタされたらたまらんわw
2014/07/29(火) 22:24:39.47ID:7mGq5kmY
受託開発やってるところと
自社サービスの開発やってるところは
何もかもが全然違うんだから、
分けて議論しないと平行線のまま
339デフォルトの名無しさん
垢版 |
2014/07/29(火) 22:32:24.06ID:jt6qgrVo
SEがどーのこーの言ってるんだから受託だろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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