[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2ch.scのread.cgiへ]
Update time : 05/17 11:04 / Filesize : 199 KB / Number-of Response : 672
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 17:25:56 .net]
テストも書かないでリファクタリングとかうけるw

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

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

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

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

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

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

で?

622 名前:デフォルトの名無しさん mailto:sage [2014/09/24(水) 17:32:35.84 ID:iVFJW3Cg.net]
いやぁ馬鹿スレを止めてくれてありがたい

完全に自爆だけどな(笑

623 名前:デフォルトの名無しさん mailto:sage [2014/09/25(木) 08:00:06.24 ID:2gwTj0ip.net]
え?
マジで!?いろいろ見て回ってきたけど
ゲーム作りたくてプログラマになったけど、就職できず、Windowsしか扱えないので、派遣でコボルやるもクビになって無職
なの?!( ;´Д`)

そんな身分で、現役のプロのプログラマにプログラム、プログラミングにたついて講釈たれてたの?
ε-(´∀`; )

どんだけ、恥知らずというか、身の程知らずというか、小保方というか。
空いた口が塞がらないわ(^◇^;)

マジでお前自信をリファクタしろよ(・Д・)ノ

624 名前:デフォルトの名無しさん mailto:sage [2014/09/25(木) 12:50:36.36 ID:fB0UYRRr.net]
という妄想を書く人って、
実社会では自分が落ちこぼれなのかな。

625 名前:デフォルトの名無しさん mailto:sage [2014/09/25(木) 17:28:15.70 ID:oxMb9EZk.net]
不用意に自供しといて妄想とかw

626 名前:デフォルトの名無しさん mailto:sage [2014/10/05(日) 23:35:12.83 ID:gYmu4Dn/.net]
リファクタリング良さそうなんだけど、いろいろ疑問点があります

上で内部的インターフェイスの変更もリファクタリングに含まれるという話がありましたが
インターフェイスを作り変えたら対応するテストケースも作り変える必要がありますよね?

その場合、リファクタリング内でテストケースに手を付けて
インターフェイスとテストケースを同時に作ってしまっていいものでしょうか?

外部的インターフェイスに指定したテストケースのみパスすれば
問題ないと考えるのでしょうか?

627 名前:デフォルトの名無しさん mailto:sage [2014/10/07(火) 01:36:41.20 ID:0pCKu6Fp.net]
テストケースは全部通さないと駄目だよ
人間の書くテストが全部網羅してるとも限らないから
テストの穴を突いた部分が他所で影響してるかもしれない
原則としてよほどの事でもない限り一度リリースしたら手をつけないがベスト
リファクタリングなんて幻想だからやめなさい

628 名前:デフォルトの名無しさん mailto:sage [2014/10/07(火) 09:53:16.20 ID:pP8u07NL.net]
インタフェースを作り替えたらテストも必要
というかテストできない・しづらいインタフェースを作ったらあかん

629 名前:627 mailto:sage [2014/10/07(火) 20:19:23.95 ID:J1sG3mPW.net]
>>627
> テストケースは全部通さないと駄目だよ

内部動作をリファクタリングする場合はそうだと思います。

> 人間の書くテストが全部網羅してるとも限らないから
> テストの穴を突いた部分が他所で影響してるかもしれない

100%のテストはないけど、十分捕捉率の高いテストと
十分機能変更の余地が低いリファクタリング手法の組み合わせで
実用になるというのがリファクタリングの主張ですよね。

内部動作のリファクタリグだけならそれでいいんですけど、
ただやっぱりインターフェイスの拡張・取捨選択も
やりたくて、そういう場合どうすればいいのかなと。

> 原則としてよほどの事でもない限り一度リリースしたら手をつけないがベスト

一度リリースしたっきりでソースのことを忘れ去っても
大丈夫なプロジェクトならそうかもしれませんが、
リファクタリングがターゲットにするプロジェクトは
リリースした後に(リファクタリングするしないに関わらず)
何度も手を付けてメンテナンスすることが要求されるような
継続性のあるプロジェクトではないでしょうか?

> リファクタリングなんて幻想だからやめなさい

上手くいくと言っている人も多いので、
安易に幻想だと断定もできないように思います。
幻想だとはっきり納得出来たらやめます。

630 名前:627 mailto:sage [2014/10/07(火) 20:20:02.46 ID:J1sG3mPW.net]
>>628
> インタフェースを作り替えたらテストも必要
> というかテストできない・しづらいインタフェースを作ったらあかん

テストしづらくはないのですが、
例えば1つ1つの public メソッドにテストを書いていたら
とても作業が時間内に終わらないというような、
時間がかかってしまう的な問題です。

でも public メソッドはクラスの持つインターフェイスだから
テストは必要ってことですか?



631 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 15:43:43.04 ID:AP5j0Y8f.net]
ただ、そのテストのメンテナンス、テストを減らしたり、改善したり、
そういう話はまだ多くないんですね。(例えば)テストが増えてくると、
全部のテスト通すのに 3 時間かかったりとか、 テストの量自体が問題になってくる。
またテストが実装に深く依存してて、リファクタリングしたらテストが
ばーっと真っ赤*49になっちゃうからやめようみたいな話とか。

テストをたくさん書けば良いってものじゃないんですよ。
設計の改善を前後で担保するためのテストだったはずなのに、
設計改善の邪魔をしてるんじゃないか? と。
テストが変更のコストを一定にするという夢を俺たちは見てやってきたのに、
テストが増えると変更コストが上がっていないかい? という問題に対してどう戦うか、
それが今の TDD の主戦場だと思っています。

www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview43.html

632 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 17:47:03.08 ID:No3WRPQd.net]
>>631
下手なテストを書くとそうなるって話ですね。

633 名前:デフォルトの名無しさん mailto:sage [2014/10/08(水) 23:56:17.82 ID:UFd7lKdk.net]
よくわからんが何かの言い訳に使えそうな

634 名前:デフォルトの名無しさん mailto:sage [2014/10/09(木) 10:21:37.01 ID:IFg54I5e.net]
テストできない・しづらいインタフェースを作ったらあかん

635 名前:デフォルトの名無しさん mailto:sage [2014/10/09(木) 20:44:29.80 ID:zf/NUEdS.net]
ボタン一個一発こそ至高

636 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 07:13:20.02 ID:jwvcB2bY.net]
>>626
有能な人材だけで構成されているなら可能
でも有能な人材はそもそもそんなコードを書かない
つまり、現実では実現不能ということ。


よく考えてよ。
ゲーム会社への就職も面接すらいけずに終わり、他の会社も全滅、登録派遣しかなく
ようやく派遣されたCOBOLでクビになり、
自分は有能だと思い込んでいるケドWindowsしか使えない
無職の人の立てたスレだよ?

637 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 13:23:31.01 ID:08qsWg0a.net]
>>636
返信ありがとうございます

> よく考えてよ。
誰が立てたかでなく、何を言っているかで判断しています

> 有能な人材だけで構成されているなら可能
627 では可能かどうかという聞き方はしていないのですが、
627 のどの部分を指して可能と言われているのでしょうか?

> でも有能な人材はそもそもそんなコードを書かない
これも、627 ではどんなコードかに関して言及していないと
思うのですが、そんなコードというのは何を指しているのでしょうか?

638 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 14:51:47.69 ID:jjrAIsW+.net]
世の中に汚いコードが溢れてるってことだなw

リファクタリングは汚いコードを直すことじゃないよ。
コードは修正するたびに(≒機能追加)
どんどんコードが増えていく。

素人集団は、コードの既存部分を直さずに追加するだけで終わらせる。

有能な人材はそもそも汚いコードを書かないというが、
それは、有能な人材は、リファクタリングをしながら機能追加していくから
汚いコードに"成長しない" ということを意味する。

639 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 15:32:46.02 ID:08qsWg0a.net]
設計がまずかったり場当たり的に組んでしまったりして
いったん汚いコードになってしまったらもう手遅れですか?

汚いコードをインターフェイスを変えつつ
改善していきたいと思っているのですが

640 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 16:01:06.81 ID:jjrAIsW+.net]
>>648
「汚いコード」のうちは未完成と考えるよ。

設計書だってレポートだって小説だって
書いた最初は下書きでそれから清書するもんだろ?



641 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 12:31:48.66 ID:dRUWRUgv.net]
コードが汚いとか騒ぐやつは総じて低スキル

642 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 17:48:27.91 ID:qVWnI3+v.net]
>>639
汚いのを綺麗にする行為をリファクタリングとは"呼ばない"


これが原理主義者の主張するところである

643 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 21:27:10.38 ID:mV3fqIh9.net]
>>642
ではリファクタリグしたとしても汚いコードは汚いままなのですね

644 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 22:25:07.42 ID:0J6BIdC+.net]
>>643
汚いコードはリファクタリング前に綺麗にしてから
リファクタリングするから、
リファクタリング後は当然綺麗になってるよ。

645 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 22:41:00.86 ID:mV3fqIh9.net]
>>644
リファクタリグとは別に、汚いコードを綺麗にする方法があるのですね
どうやるんでしょう?

646 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 22:43:13.35 ID:zulUt3IX.net]
>>645
まず何が綺麗で何が汚いかを勉強することだね。
それを知らないことにはどうしようもない。

逆に知ってしまえば、具体的な質問ができるようになるよ
汚い××というコードを、綺麗な○○に変化させるには
どうしたらいいでしょうか?って

そういう質問なら答えがちゃんと言える。
君の今のレベルの質問は曖昧すぎて答えがない。

647 名前:デフォルトの名無しさん mailto:sage [2014/11/22(土) 11:07:28.63 ID:jhiCG8Ku.net]
>>641
その高スキルに限って自分のソースが保守できずに早々に放棄する
書きなぐり続けるのはその繰り返しのため

648 名前:デフォルトの名無しさん mailto:sage [2014/11/22(土) 16:04:31.14 ID:6qlI/h48.net]
>>641
俺様のコードは凡人には分からない
協調作業が出来ないタイプの典型
困ります、俺のプロジェクトから即刻リジェクト
してほしいです
田中お前だよ

649 名前:デフォルトの名無しさん mailto:sage [2014/11/25(火) 12:34:50.30 ID:aVHf4ing.net]
世の中なんでも使い捨てで楽な方に向かってるのに
プログラミングの世界は古いものを大事に使いたがる不思議
怠惰なフログラマこそ率先してコードを使い捨てにすべきじゃね?

650 名前:デフォルトの名無しさん mailto:sage [2014/11/25(火) 23:55:42.35 ID:n1duvf0w.net]
>>649
使い捨てる理由の大半はどんなにうまく保存しようとしても劣化し続けるから。
ソフトウェアはそういう物理的制約から書いたものはずっと同じまま残り続ける。
うまくバックアップや環境が残りさえすれば半永久的に使い続けることが出来る
わけだから、怠惰であればあるほどそういう資産を積み上げていくんだよ。



651 名前:デフォルトの名無しさん mailto:sage [2014/11/26(水) 12:34:55.88 ID:1UftDcOY.net]
>>650
バカだな劣化するからリファクタリングとかいう下らない事が流行るんだぞ

652 名前:デフォルトの名無しさん mailto:sage [2014/11/26(水) 19:48:43.25 ID:0BkZoqqN.net]
再利用って考え方がそもそもコストが高いんだよ
もんじゅとか例に挙げなくてもリサイクルって金掛かるだけで
利権で儲けるしかない仕組みだって判るよね

653 名前:デフォルトの名無しさん mailto:sage [2014/11/27(木) 00:55:26.29 ID:dibuY+0s.net]
再利用のコストに関しては単純に何回再利用するかで変わってくるから、
コストの高い再利用をしているお前が悪いんじゃないのとしか言えない。

リファクタリングも同じで、2度と手を入れないような部分や新規プロジェクトを
渡り歩くような人には不要なもの。 ただ昨今のアジャイル開発とか呼ばれている
ものだと、ある程度の期間は修正や追加が必要になってくる。 無計画に接ぎ木を
してわけの分からないキメラを作るより、ある程度剪定して理解できる範疇に
修める必要があるよねっていうのがリファクタリング。

654 名前:デフォルトの名無しさん mailto:sage [2014/11/27(木) 12:34:12.35 ID:jH/Xs+Kz.net]
>>653
ソフトウェアの再利用もその都度コストがかかるんだが?
普通は回数に比例してコストが増加するぞ

655 名前:デフォルトの名無しさん mailto:sage [2014/11/27(木) 12:41:38.96 ID:r+bsdp9/.net]
>>654
> ソフトウェアの再利用もその都度コストがかかるんだが?
> 普通は回数に比例してコストが増加するぞ
再利用するために何らかの変更が必要なら、そのときだけコストがかかるが、
以降はコストかからんだろ。

656 名前:デフォルトの名無しさん mailto:sage [2014/11/27(木) 23:29:56.27 ID:kUiumU8R.net]
再利用前提で作ろうとしてる時点で余計なコトスがかかっとるわい

657 名前:デフォルトの名無しさん [2014/11/28(金) 02:38:41.57 ID:LrjKc3Ws.net]
古くなった原発の再利用

658 名前:デフォルトの名無しさん mailto:sage [2014/11/28(金) 04:18:59.87 ID:MN0ISYZx.net]
再利用性や拡張性というのは、将来のことだから仕様外。
仕様外だからプログラミングの対象外。

おわり。

659 名前:デフォルトの名無しさん mailto:sage [2014/11/28(金) 07:48:17.97 ID:IEXuWLi+.net]
再利用と考えるからいけない。
モジュール化。

適切なモジュール化は、再利用出来るだけじゃなく、
複雑度も減ってバグも少なくなる。

適切なモジュール化が出来ない奴が
再利用にコストがかかるとか
コードが再利用できないとか言う。

660 名前:デフォルトの名無しさん mailto:sage [2014/11/28(金) 12:44:59.78 ID:X4M4SbHd.net]
>>659
それは再利用じゃないよ
機能を小さく保つ事で、本来の目的である一次利用出来る範囲が広がるだけだ
それを便宜的に「再利用しやすい」などと表現してる訳だ
ソフトウェア本来の目的とは異なる本当の意味での再利用にはコストがかかるんだよ



661 名前:デフォルトの名無しさん mailto:sage [2014/11/28(金) 17:41:36.95 ID:03S1h8mH.net]
本当の意味での再利用?
そんなもんに興味持つ必要はなさそうだが?

>>659
それな。
本当にそれ。

662 名前:デフォルトの名無しさん mailto:sage [2014/11/29(土) 01:59:23.82 ID:TbFyYdBX.net]
>>660
> 機能を小さく保つ事で、本来の目的である一次利用出来る範囲が広がるだけだ
一次利用が出来る範囲が広がる=再利用だろw

663 名前:デフォルトの名無しさん mailto:sage [2014/11/29(土) 13:13:20.77 ID:U5ivpV2C.net]
再利用じゃなくて流用と言えばいいのに

664 名前:デフォルトの名無しさん mailto:sage [2014/11/29(土) 14:17:24.97 ID:v2v5Wnkr.net]
全く修正しないで使うのが再利用。
コピーして修正して使うのが流用

流用をすると、AとA'というコードが生まれなんで二つに分かれてるの?
違いはなんんあの?と結局両方を読まないといけなくなる。
流用するたびに読むべきコードがどんどん増えていく。
はてに一つを修正するともう片方の修正を忘れるとか。

なので全く修正しないで使う「再利用」でないと意味が無い。
全く修正しないで使えるのだからコピーする必要はなくなる

665 名前:デフォルトの名無しさん mailto:sage [2014/11/29(土) 14:46:23.56 ID:A4nuaoXO.net]
流用元から流用先がどこにどれだけあるかは基本的に分からない。
流用元に何かバグがあって修正する必要があった場合に論理的に考えると
流用先も直しておいた方がいいor直す必要がある。 ただ流用先を全て特定
することは難しく、特に流用先で動くように変数名とか変えてあると確実に
漏れる。バグじゃなくても何か修正追加したいと思った時の事を考えると
コピペをばらまくより関数で再利用するほうがいいよねってなる。

ただ人間は欲深いもので1つの関数にあれもこれも詰め込んで破綻させる
奴が出てきたりする。こういうのを見て、関数なんて作らなくてコピペでいい
だろって奴が出てきて無限ループする。

666 名前:デフォルトの名無しさん mailto:sage [2014/11/29(土) 22:16:12.25 ID:UEas1JmU.net]
頑張って同じ機能がすでにあるか探して、
あったらあまりいいコードじゃなくても正しく仕様を満たすからそれ使って
散々気をつけてんのに誰かが変更しやがる

667 名前:デフォルトの名無しさん mailto:sage [2014/11/30(日) 12:24:33.02 ID:NxMP0P1A.net]
リファクタリングと言う名の正義

668 名前:デフォルトの名無しさん mailto:sage [2014/12/05(金) 19:01:54.53 ID:cszTTiF/.net]
>>667
同意、正義を振りかざす曲者

669 名前:デフォルトの名無しさん mailto:sage [2014/12/21(日) 11:54:37.04 ID:LOCxTeYe.net]
>>660,660
>ソフトウェア本来の目的とは異なる本当の意味での再利用にはコストがかかるんだよ
 
 アプリ内でのモジュールの共通化(=アプリに特化したフレームワーク、ライブラリ
の抽出)と、どんなプロジェクトでも使えるようにフレームワークやライブラリーを
汎用化するのは似て非なるものだと思う。

670 名前:デフォルトの名無しさん mailto:sage [2015/02/15(日) 22:12:39.01 ID:wyXhgSeE.net]
>>1-1000
テスト



671 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 21:55:32.43 ID:N7IGtcj3.net]
どのタイミングでやったら工数に影響を与えずにできるの?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef