X



リファクタリングすると全部テストしろと言ってくるやつの矛盾
■ このスレッドは過去ログ倉庫に格納されています
0001仕様書無しさん垢版2018/04/15(日) 13:13:44.63
機能追加や変更した時に、全部テストしてるでしょ?
いつもやってることじゃん
0002仕様書無しさん垢版2018/04/15(日) 13:16:31.37
それなw

あと、リファクタリングするとお前責任取れるのかとか言ってくるが
機能修正でバグった時の責任はリファクタリングじゃないんだから
全部あんたがとれよって言うと顔真っ赤になるw
0006仕様書無しさん垢版2018/04/15(日) 14:07:43.60
そんなことない
なんでもかんでも一緒にするな
0007KAC垢版2018/04/15(日) 14:29:02.33
>>1
テスト粒度とかリスクとか理解できないの?
0008仕様書無しさん垢版2018/04/15(日) 14:43:15.84
リファクタリングはテスト必須で
論理的におかしくならないと判明している
決められたやり方でやるので
リスクは低いしテストは自動化されています。
その前提ぐらい知らないんですか?
0009仕様書無しさん垢版2018/04/15(日) 14:45:55.12
>>8
だからテストやらなくていいって?
そもそもクラスまで作り変えてるならテスト免除どころか設計書のレビューからだよね
0010仕様書無しさん垢版2018/04/15(日) 14:46:35.64
>>9
リファクタリングは「テストをやってる」ことが
前提なので、
あんたが言ってるのは別のものでは?
0011仕様書無しさん垢版2018/04/15(日) 14:47:26.22
> そもそもクラスまで作り変えてるならテスト免除どころか設計書のレビューからだよね

そうですね? なんでレビューせずに
リファクタリングするなんて思い込んでんの?
0012仕様書無しさん垢版2018/04/15(日) 15:05:33.14
> リファクタリングはテスト必須で

って書いてあるのに



9 返信:仕様書無しさん[sage] 投稿日:2018/04/15(日) 14:45:55.12
>>8
だからテストやらなくていいって?


これもう頭が悪いレベルだろw
0013仕様書無しさん垢版2018/04/15(日) 15:06:06.29
リファクタリングの存在を否定できないと
困る人がいるんですよw
0015仕様書無しさん垢版2018/04/15(日) 15:32:49.90
>>14

改修作業の中身の違い

 1. 無計画に適当に修正して手動でテストしてそれでもバグでて苦労するのと
 2. リファクタリングの手法を使ってテストコード書いて低リスクで修正するかの違い
0017仕様書無しさん垢版2018/04/15(日) 19:48:05.09
>>15
TDDでリファクタリングした場合、
1、初歩的なミスにすぐ気付ける
2、作業者が精神的に安心できる

なお、開発者目線の開発体制の優先順位は
バージョン管理 > コードレビュー > 自動テスト > リファクタリング
なので、必ずリファクタリングとTDDはセットになる
0018仕様書無しさん垢版2018/04/15(日) 19:48:54.60
>>16
リファクタリングの手法では先に自動化されたテストコードを書く
もしくはすでに存在していなければならない
だから、リファクタリングしたらテストしろよっていうのは意味不明。

リファクタリングの中にテストすることが条件として含まれており
修正前と修正後の両方、それどころか修正のたびにテストすると言ってるのに
なんでそんな当たり前ことを、それも最後だけテストするような質問をするんだ?と
疑問になる

おそらく修正とテストが分離した考え方しか持って無くて
修正後に手動でテストを行うというやり方しか知らないのだろう
そんな再現性がなくてテスト回数もすくないんじゃ、
バグがなかなか取れずにデスマになるのは必死だろう
0020仕様書無しさん垢版2018/04/15(日) 21:17:10.48
なにをゆうちょるんじゃあ主は
0021仕様書無しさん垢版2018/04/15(日) 21:37:54.42
リファクタリング厨って受け売りでしか語らないから面白くない
0024仕様書無しさん垢版2018/04/16(月) 05:08:34.00
>>21
というか、責任あるポジションの経験がないやつが語ってるだけだからな
ちゃんと決定権を持つやつを納得させるだけの説明ができればいいだけだが、
それすらできていないっつーね
0026仕様書無しさん垢版2018/04/16(月) 12:37:10.95
>>19
そこらへんの話でいうと、
売上や品質が上がった客観的なデータが示せりゃ、どの会社でも自動テストやリファクタリングは採用されるんよ
そこまでしてないなら、その議論は語るに値しない
んで、殆どの会社はそこを検証していない
0027仕様書無しさん垢版2018/04/16(月) 12:45:59.35
>>26
そんなもん、やってみりゃ肌で感じ取れること
数値にしなきゃ理解できないよぉとかバカみたいなこと言ってると腕のいい職人にはなれませんよ??
0029仕様書無しさん垢版2018/04/16(月) 13:36:47.19
>>27
仕事を規定の時間内に許容できる品質のものを上げるのが実装者に求める要求で、それに付随する手段は手段でしかない。
で、手段は自由にやればいいし、基本介入しないし、結果しか見る気は無い。
だからやりたければやれば?としか自分は言わない
工数増えるのは論外
0030仕様書無しさん垢版2018/04/16(月) 14:37:58.22
>>26
> そこまでしてないなら、その議論は語るに値しない
> んで、殆どの会社はそこを検証していない

検証しろっていうのはわかるが、それは世間一般には
すでに検証されていてすでに品質が上がったというデータは出てるんだよな

それも検証するコストも出せないような会社がやるような中途半端な
方法じゃなくて、もっと大規模で信頼できる方法で検証した結果がすでにある。

で、それを参考にすりゃいいのに、参考にしないんだろう。
つまり他人を信用してない。だから他人がなにやってもどんなデータを出しても
そういう会社は信用しないんだろう。
0031仕様書無しさん垢版2018/04/16(月) 14:41:43.64
リファクタリングが有効かどうか?
検証してやるよ。コスト?そりゃ当然かかるよ

ここで嫌がる会社が多い

重要なのは、失敗するかもしれないがやってみよう
という考えが通じる会社かどうかなんだろうな
0032仕様書無しさん垢版2018/04/16(月) 14:52:53.46
体力がなくて単純工すらできないごみクズがIT技術者(笑)になる日本では
コストメリットどころかリスクしかない。
0033KAC垢版2018/04/16(月) 17:54:10.17
「リファクタリングしたら工数減ります」
「リファクタリングの為の工数ください」

うん。意味不明だね。
0034仕様書無しさん垢版2018/04/16(月) 18:19:38.72
> 「リファクタリングの為の工数ください」

誰もそんなこと言ってないけど?

>>31が言ってること勘違いした?
リファクタリングが有効かどうかの検証の話だよ。
検証するには、同じことをリファクタリグをするのと
しないので2回やらないといけない。
検証にはコストがかかる。
0036仕様書無しさん垢版2018/04/16(月) 19:33:16.67
>>34
いや、リファクタリングで総工数が減るなら勝手にやればいいだけじゃね?
リファクタリングで品質下がるなんて聞いた事無いわけだし。それとも単体テストレベルまでがっちり管理されてんの?
0037仕様書無しさん垢版2018/04/16(月) 19:50:39.52
リファクタリングで増減する工数って、内部設計クラスレベル〜クラステストまででしょ
詳細設計省かずやる巨大案件でも無い限り、実装者に委ねられる部分やん。
ともすれば、やりたきゃやれって回答にしかならん。
0038仕様書無しさん垢版2018/04/16(月) 20:03:20.01
>>36
> いや、リファクタリングで総工数が減るなら勝手にやればいいだけじゃね?

俺はやってるよ。リファクタリングで工数減るから
そもそも修正作業の中に自動的に組み込まれるものだから
あえて "リファクタリング単体で" 工数を取るなんてことはしない

だからリファクタリングのために工数くださいっていう発想が
そもそも間違ってるわけ。修正に伴う追加作業じゃない。
修正作業そのものなんだから
0039仕様書無しさん垢版2018/04/16(月) 20:08:32.88
仕組みが悪いからって正常に動いてる箇所まで手を入れるってねーな
0040仕様書無しさん垢版2018/04/16(月) 20:37:02.97
リファクタ自体は否定しないが、>>1は確実に技術に溺れて盲信してるアホだから許可出さない
0041仕様書無しさん垢版2018/04/16(月) 21:02:09.30
>>39
正常に動いていると証明するテストをしてないってこと?

正常に動いていることを証明するテストを修正後にもやれば、
正常に動くと証明できるでしょう?
0042仕様書無しさん垢版2018/04/16(月) 21:03:03.43
>>40
修正許可与えてるなら、どんな修正をしたとしても
許されるはずだけど?
0044仕様書無しさん垢版2018/04/16(月) 21:24:48.73
修正ってなんだよ、バグってんのか
機能追加だろうがなんでも修正って言う奴は素人でしょ
0045仕様書無しさん垢版2018/04/16(月) 21:26:39.53
ただのレッテル張りじゃねえかw
0046仕様書無しさん垢版2018/04/16(月) 21:27:14.47
素人というやつは童貞だ
イカ臭いプログラム書いてろ
と言ってるようなもの
0047仕様書無しさん垢版2018/04/16(月) 21:30:14.08
>>43
なんどもリファクタリングは修正の一部だって言ってるじゃん
一部ってことはそれ以外も有るってことだよ

複雑なコードを読み解いて、リファクタリングしないで複雑なまま修正するのと
複雑なコードを読み解いて、リファクタリングしてから修正するのと
どっちがリスクが少ないかって話だ

前者だと、複雑なコードを読み解いた人(修正担当者)がいるにもかかわらず
別の人が、また大変な思いをして読み解いてレビューしなければいけない
そして、次同じところを修正する時、また複雑なコード読み解かなければいけない
0049仕様書無しさん垢版2018/04/16(月) 21:33:31.81
リファクタリングは神の領域に達するものにのみ許される技。
素人はおとなしくExcel方眼紙でセル結合の練習でもしておけ。
0050仕様書無しさん垢版2018/04/16(月) 21:36:56.37
>>47
そんな入門書の1章に書いてあるような話はいいよ、面白くないから
0052仕様書無しさん垢版2018/04/16(月) 21:48:55.54
入門レベルの奴でも上から目線になれるから張り切ってんのか
0054仕様書無しさん垢版2018/04/16(月) 21:58:29.27
>>37
テストの品質が後工程に無関係ならな。
まあそんな現場が多いのは事実だが。
0055仕様書無しさん垢版2018/04/16(月) 22:14:39.29
>>51
リファクタリングするときのレビューとかどうしてる?
設計レビューもだし、コードレビューもだけど
0057KAC垢版2018/04/16(月) 22:42:11.58
>>47
お前さん、理想通りに開発が進めば
自動試験だけで完璧なものができるとか信じてる?
0058仕様書無しさん垢版2018/04/16(月) 23:48:14.82
テストしづらいとか、クラスが肥大化しすぎて開発に支障があるとかならまだしも
見通しが悪いなんて理由でうごいてるもんをほいほい変えていいもんじゃろか
0059仕様書無しさん垢版2018/04/17(火) 01:28:22.88
リファクタリングは超プロの領域
このスレには本当のリファクタリングが出来る奴はいない

elseなしに書き換えるのが精一杯のFラン説教野郎みたいなのがいるだけ
0060仕様書無しさん垢版2018/04/17(火) 01:37:33.43
大規模リファクタリングの秘孔をついた
お前のプロジェクトはもう死んでいる
0061仕様書無しさん垢版2018/04/17(火) 02:47:02.14
>>55
> リファクタリングするときのレビューとかどうしてる?
リファクタリングではないときはどうしてる?
それと同じなんだが。

まあそういう質問するってことはリファクタリングに限らず
そもそも設計もコードもレビューしてないってことなんだろうけど
まずはそこからやねw
0062仕様書無しさん垢版2018/04/17(火) 02:49:20.05
>>57
> 自動試験だけで完璧なものができるとか信じてる?

だからレビューするんでしょ?

自動試験はバグがないことを証明する手段
その手段が正しいかどうかはレビューでみる。

人手でレビューして、テストした内容も記録されて
後なにがあれば完璧なものができると思います?
0063仕様書無しさん垢版2018/04/17(火) 02:51:40.76
>>58
> テストしづらいとか、クラスが肥大化しすぎて開発に支障があるとかならまだしも
> 見通しが悪いなんて理由でうごいてるもんをほいほい変えていいもんじゃろか

機能追加とか修正するという前提なんだから、どちらにしろ変更するしかないでしょw
0064KAC垢版2018/04/17(火) 08:07:55.30
>>62
自動試験してレビュー通ったらシステムインしてサービス開始すんの?
0065仕様書無しさん垢版2018/04/17(火) 08:35:24.00
入門書第1章に書いてあることの受け売りなら長文で語るけど、具体的な話からは煽りで逃げるし、
体験から語ってると思えるような発言もないし、こいつ多分そんなにノウハウないよ
0066仕様書無しさん垢版2018/04/17(火) 10:12:11.71
>>64
レビューもするし自動以外のテストもする
そこは普通の機能変更のときとなにも変わらない

ただその時のやり方が、複雑なコードを頑張って解析して
無理やりパッチを当てるような、あとから見た時に
なんでこんな面倒なことしてんの?と思われるような変更をするやり方から、

次回は複雑なコードを読まなくて良いように、複雑なコードを
シンプルに修正しつつ、まるで0からコードを書いた時のように
こういう機能を実現するなら、普通こう書くよねという
当たり前の形にするやり方に変わるだけ

変更するたびに複雑になっていくやり方をやめて
変更しても複雑にならない、むしろシンプルになるような
やり方をしましょうってこと

その後にやるテストうんぬんは、もともと機能変更でやる予定だったんだろ?
なら最初からやるって決まってることじゃないか
0069仕様書無しさん垢版2018/04/17(火) 10:16:36.37
TDDってさ
組織的にガチガチにやるもんじゃなくて
設計者の間で守るべき密やかな秘密程度で
やったほうが良い気がすんのね。
0070仕様書無しさん垢版2018/04/17(火) 11:00:00.11
>>68
それはどんなコード変更のときでもやるべきことだから
リファクタリングの話とは関係ないという注意だけしておくね
0071仕様書無しさん垢版2018/04/17(火) 11:05:57.21
>>69
ようは、リファクタリング前に存在するテストコードが
リファクタリング後でも通ることで動きを変えてないことが
証明できれば良いのでTDDである必要はないよ。

具体的にはgit使えば歴史変えられるんで、
コード変更しつつテストコード書いて、
コード変更とテストコードでコミット分けて
あとでrebaseしてテストコードのコミットをコード変更の
コミットより前に持ってくれば良い
0074仕様書無しさん垢版2018/04/17(火) 12:26:04.15
>>72
> TDDは保護するためのテストじゃないから

TDDはテストではなく開発手法ですよ?

TDDという開発手法ではリファクタリングの前にテストを書き
書いたテストが、その後に行うリファクタリングが問題ないことを証明するんですよ

つまり
× TDD = 保護するためのテスト
○ TDD =「保護するためのテスト」を用いた開発手法

(あんたの言った「保護」がリファクタリングで壊さないように守るという意味である前提)

俺が>>71で言ったことは、TDDでやらなくてもテストで保護できると言ったんです。

https://postd.cc/test-driven-development/

> 簡単に言うと、TDDは機能を記述する前に自動テストを書く行為です。
> 例えば、Bobが素晴らしい新たなソーシャルネットワークのアイデアの
> ために新しい機能を開発する必要があるとしましょう。
>
> Bobは自動テストを書くことから始めますが、機能を正しく実装せずに、
> テストを失敗(赤色表示)させます。次に、Bobはテストを成功(緑色表示)
> させるための最小限のコードを記述します。緑色表示になったら、
> Bobはコードをきれいにし、テストを実行して機能が正しく
> 実装されたままであることを確認します(コードのリファクタリング)。
> 重複することなく、コードと自動テストは他の人も簡単に保守できます。
0075KAC垢版2018/04/17(火) 13:27:11.82
>>66
えーと、まずはスレタイの
「リファクタリングすると全部テスト」については、
「全部テストするのは当たり前」という理解でOK?

それなら、大筋では意見に違いは無い。
0076仕様書無しさん垢版2018/04/17(火) 13:49:22.47
>>75

before(リファクタリングしない場合)
 1. 機能追加やバグ修正などの変更依頼が来る
 2. 変更する
 3. 変更したので全部テストをする

after(リファクタリングする場合)
 1. 機能追加やバグ修正などの変更依頼が来る
 2. 変更する(リファクタリングもする)
 3. 変更したので全部テストをする


afterに対して、余計なことするな!
リファクタリングしたなら全部テストしろ!
と言われましても、beforeでも全部テストしてますよね?という話です。
0077仕様書無しさん垢版2018/04/17(火) 15:18:23.57
リファクタリングしたら(その時点で、機能改修する前に)(単体)テストしろって要求なんじゃね?

まあ普通やるけど。
0078仕様書無しさん垢版2018/04/17(火) 15:55:33.65
>>77
いやぁ、違うなぁ
リファクタリングさせないための方便として使ってるので
お前がリファクタリングするとテストする人が迷惑するんだぞ
だから余計なことするなという意味だろう。

だがもともとテストするわけで矛盾になるんだよな
0081仕様書無しさん垢版2018/04/17(火) 16:59:00.97
>>79
じゃあどういうことか書けよw

>>80
でもどっちみちコード変更するんでしょ?
リファクタリングしない方がデグレさせる可能性高いし
0082仕様書無しさん垢版2018/04/17(火) 17:34:58.09
リリースしたらあとはそのシステムのことは知らん
だからリファクタリングする気もない
0083仕様書無しさん垢版2018/04/17(火) 18:30:58.65
>>81
いやリファクタリングすると触らなくていいとこまで変更するじゃん
既存コードを変更するって時点でまずい
0084仕様書無しさん垢版2018/04/17(火) 18:52:07.21
>>83
触らなくていいかどうかが重要なんですか?

重要なのはテストする所かどうかでしょう?
触った所でテストするなら、なにも問題ないはずですが?
0085仕様書無しさん垢版2018/04/17(火) 18:54:58.04
>>84
そうはいかねぇだろ
文章化されてないけど
クリアしてるいろんな仕様があんだからよ
長い間運用してるとそういうのあるわけよ
0086仕様書無しさん垢版2018/04/17(火) 19:09:26.69
>>84
触らなければテストもしなくていい
プロは余計なコードも書かないし、余計なテストもしない
0087KAC垢版2018/04/17(火) 19:26:39.52
>>76
イメージはあってそう(スレ建てた奴とは違う意見)に読めたので、
具体的な内容を書いてみる。

大規模で難解なプロジェクトの一部機能で、
一カ所の編集バッファの数が足りず、
長い氏名の編集に失敗する仕様となっていた。
メモリの使用率なども調査済みで、編集文字数を増やすという仕様変更案件の場合。

バッファサイズを増やして関連箇所の試験して完了。

リファクタリングしたら、統べての試験をやり直し。

リファクタリングの有無でどちらが安いのか、
時と場合によるって認識はあってる?
0088仕様書無しさん垢版2018/04/17(火) 20:51:10.01
WFとアジャイルとでも違うし
リファクタリングできる設計になってるの?
も大きな要素だが

動いているなら弄るなよは永遠の真理
0090仕様書無しさん垢版2018/04/17(火) 22:21:50.39
バッファサイズの変更でなにをリファクタするというんだ

文字編集がややこしいから途中量の計算が難しいから処理変更とか?
0091仕様書無しさん垢版2018/04/17(火) 23:28:38.99
>>85

リファクタリングの話は一旦おいておきましょう。


> そうはいかねぇだろ
> 文章化されてないけど
> クリアしてるいろんな仕様があんだからよ

それでどうやってコードを正しく変更できるんですか?
コードを変更する時に文書化されてない仕様を
間違って変えてしまうことがありますよね?

文書化されてない仕様をテストでどうやって
見つけるんですか?
0092仕様書無しさん垢版2018/04/17(火) 23:36:25.31
>>87

> バッファサイズを増やして関連箇所の試験して完了。
>
> リファクタリングしたら、統べての試験をやり直し。

え?なんで?先に修正して試験するのがいけないんじゃん


1. リファクタリングをする
2. バッファサイズを増やす
3. 関連箇所の試験して完了

基本はこうですよ?
実際にはこんな大雑把作業じゃなくもう少し細かく
(ユニットテストと)リファクタリングと修正を何回か繰り返しますが

コードの変更とリファクタリングは切り離せません

コードの変更とリファクタリングの間に「関連箇所の試験して完了」
なんてものは入らないし入れたらダメです。
0093仕様書無しさん垢版2018/04/17(火) 23:41:10.11
ちゃんと設計できてないから改修する度にいちいち事前のリファクタリングが必要になるんだろうな
0094仕様書無しさん垢版2018/04/17(火) 23:41:50.05
>>91
まさにそのスレでその話してるんだからおいとくなよ…

現に存在するものに文句言ったってしょうがないだろ
あるんだから
非機能要件のないソフトなんてない

改修部分が少なければ少ないほど踏んじゃうリスクは減るだろう
0095仕様書無しさん垢版2018/04/17(火) 23:48:58.45
> ちゃんと設計できてないから改修する度にいちいち事前のリファクタリングが必要になるんだろうな

そりゃリファクタリングの必要がない場合にはリファクタリングしませんよw

前提として、リファクタリングの必要があるコードだって
ちゃんと書きましょうか? そうすればもっとわかりやすくなりますね。

・リファクタリングをしない場合
1. ちゃんとした設計になっていない
2. そのままで無理やりバッファサイズを増やす
3. やってることが意味不明。変更に自信が持てない。コードレビューも大変。
4. 変更で問題が出やすい。そのたびに意味不明なコードと格闘する。
5. 関連箇所の試験して完了。


・リファクタリングをする場合
1. ちゃんとした設計になっていない
2. 設計を修正する(リファクタリング)
3. ちゃんとした設計に自然な形でバッファサイズを増やす
4. やってることが明確。変更に自信が持てる。コードレビューも簡単。
5. 変更に問題が出にくい。仮に出たとしてもちゃんとした設計になってるのですぐに修正できる
6. 関連箇所の試験して完了。

リファクタリングしたことで1工程増えたように見えますが、
ちゃんとした設計になってないものを無理やり修正した複雑なコードは
バグが出やすく、修正も大変になって時間がかかります。
それはわかるでしょう?
0096仕様書無しさん垢版2018/04/17(火) 23:50:34.78
>>94
> 改修部分が少なければ少ないほど踏んじゃうリスクは減るだろう

改修部分をリファクタリングするんだから、
改修部分の量は同じですが?
0097仕様書無しさん垢版2018/04/17(火) 23:55:28.57
>>96
具体的なイメージがわからない

本当に改修部分だけ改修だったらリファクタ部分消えちゃうじゃない
それってただの改修では
0098仕様書無しさん垢版2018/04/18(水) 00:26:44.21
>>97
ちょっとなにかいいサンプルないか探したんだが
見つからなかったので、軽く例を書くわ


ある関数を改修部分することになった。これが100行を超える複雑なコード。
これをリファクタリングすると10行にできるとする
(ライブラリ使用の有無とかで、これぐらいざらにあるからw)

リファクタリングしない場合は無駄なコードで処理が入り組んでおり
入り組んだコードを時間をかけて頑張って解析し
そのまま修正するとなると数箇所を変更しなければいけなくなることが判明した
だが本当にその数箇所の変更で問題ないのか? コードが複雑なのでよくわからない
レビュー依頼した所で時間をかけて解析したものを他の人がすぐに分かるはずもない
多くの時間を費やすることになった。

リファクタリングして10行にまで減らすと、コードはシンプルになりなにやってるのか一目瞭然になった。
テストコードがあるのでリファクタリングの前後でコードが壊れてないことはわかる。
リファクタリングしたため修正箇所もたったの一行になった。
他の人も何の修正をしたのかすぐに分かる
0099仕様書無しさん垢版2018/04/18(水) 01:15:38.23
>>98
おまいのレスが長すぎてリファクタリングしないと読めない
■ このスレッドは過去ログ倉庫に格納されています

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