パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

リファクタリングしてもコードの質は改善されないという実験結果」記事へのコメント

  • 今の一般的なソフトウェアの製作過程でみれば、何らかの問題があるからリファクタリングするのであって、問題の出ていないソースコードに集中的なリファクタリングしても効果が見られないのは当然だという気がする。

    もっとも、地道な研究というのも必要だとは思うし、将来的にはこういう技術の延長でプログラマがまだ気付いていない問題を顕在化する前に知らせるとか取り除いてくれるとかなら嬉しい。

    • by Anonymous Coward on 2015年03月05日 17時42分 (#2772495)

      いやあ、違うんじゃないですかね。
      リファクタリングは「動いているコードを触る」ということであって、基本的に挙動は変化しちゃいかんのですよ。
      挙動が変化するようなものはもはやリファクタリングじゃなく普通の修正です。
      なので、リファクタリングにパフォーマンス向上を求めることが筋違いではないかと。

      ついでに言えば、コンピューターサイエンスの学生に評価をさせたようですけど、学生に「保守性」が本当に認識できるのか、という疑問が……。

      親コメント
      • 問題というとやっぱり、ソフトウェアのバグみたいに聞こえてしまいますね。

        ここで言いたいのは、機能拡張をしたいけれど、既にやっつけの拡張が多数集積していて見通しが悪すぎるとか。そういう問題です。
        それから単純なものだと、ほぼ全ての変数や関数が英数字二文字以内というソースコードは、余程短くない限り問題ありです。
        一息にコーディングするとき余計なことに気を散らしたくないのは判るけれど、関数名がすべて f0 とか f4 とかだったりは受け取れません。

        親コメント
        • by Anonymous Coward

          ここに一票。

          つまり、更なる機能追加の土台均しだから、リファクタリングそのものでコードが複雑になったとしても、その後の機能追加と併せて整合性がとれるなら意味があるはず。

        • by Anonymous Coward

          最後のくだりだけについて反応。
          関数名については 全く同意しますが、
          最近 golang さんとかだと、変数名はなるべく短く、かつすぐ使い終わるように、
          というような方針が推奨されているようですよ。

          • >最近 golang さんとかだと、変数名はなるべく短く、かつすぐ使い終わるように、

            これは変数のスコープは最小にしろ。スコープが十分小さければ変数は短くてもOK。
            っていう、昔から言われていることを言い換えているだけでは。

            親コメント
            • by Anonymous Coward

              昔はスコープ長かったけどね。初期のCは関数の先頭に全部書かなきゃいけなかったし、互換性のために長い間その方式を踏襲してたから。

              むしろ名前の拒否反応は命名規則と習慣からくるんじゃないかな。以前、他人が書いたコードに

              for (int ii = 0; ii < LENGTH; ii++) {

              ってのに手を入れてた時にiiをiにしたくてしょうがなかったもの。頭でわかったつもりになってても、途中から

              「iiってなんだっけ?ああ、ループ回してるんだったな。…(ちょっと先)…ところで、このii*iiってどういう意味だ?あ、あー、ループカウントを2乗してるのか、i * iのことだな。…(さらに先)…あれ、ptrからii引くのはいいけど、このiiってどっから出てきたんだよ。あー、わかった!くそ、思い出した!」

              って感じになったから。jとかkとかnとかlだと全然気にならないんだけど、iiは生理的に受け付けないと自覚してしまった。

              • by Anonymous Coward

                へたくその典型的ないいわけですね。

                関数の先頭で宣言しないといけないからスコープが大きくなる? そもそもそんな長い関数書くなって話だ。

              • by Anonymous Coward

                > って感じになったから。jとかkとかnとかlだと全然気にならないんだけど、iiは生理的に受け付けないと自覚してしまった。

                iiは人が二人寄り添っているみたいで、リア充ばくはつしろ!みたいな?

              • by miww (14929) on 2015年03月06日 8時52分 (#2772799) 日記
                iiはおさるさんです。
                親コメント
            • by Anonymous Coward

              まぁそうなんですが、golangのライブラリ(の一例)
              http://golang.org/src/io/ioutil/ioutil.go?s=1464:1510#L39 [golang.org]
              を眺めていると、
              むしろ変数が短いほうを優先しているように感じますね。

              上記例では、ファイル情報(FileInfo)を fi と書いたりしていますが、
              なじみのAPIを使っているならともかく、
              コメントがないと 後で見返しても全く分からないと思うな。。

      • by Anonymous Coward

        パフのプロジェクトではデバッグと称してリファクタリングしていたパフ

        • by Anonymous Coward

          同じ部の他のプロジェクトで、リファクタリングの名の下に中身改変したあげくバグ出した奴がいたなぁ(遠い目)
          テストケースすら書いてなかったエセリファクタリングだったけど。

      • > いやあ、違うんじゃないですかね。
        > リファクタリングは「動いているコードを触る」ということであって、基本的に挙動は変化しちゃいかんのですよ。
        > 挙動が変化するようなものはもはやリファクタリングじゃなく普通の修正です。

        コードが仕様書の人はそうなりますね。
        仕様がきちんと規定されていれば、その範囲で実装を自由に変えられるはず。

        仕様書をちゃんと書かない人は、意図せずにそうなっているだけの実装が
        仕様になって、それに縛られて後々どうにもならなくなる。

        リファクタリングも「修正」の一種であって、変数名

        • by Anonymous Coward on 2015年03月06日 10時07分 (#2772840)

          リファクタリングの定義はマーティン・ファウラーによって明確に決められていると思っていたが。
          この件については、「挙動を変えないで、改善を図る」、という最低ラインについては共通認識として
          あるのではないか。
          立場によってリファクタリングが違う、とするのは我田引水に聞こえてしまう。

          リファクタリングは、仕様書云々とは全く別のフェーズの話でしょう。
          十分なユニットテスト・結合テストを準備すれば、根拠をもった改善が可能だ、とする
          話であって、ここからずれたらやはりそれはただの「根拠のない修正」「仕様変更」
          に過ぎません。

          親コメント
        • by Anonymous Coward

          > 仕様がきちんと規定されていれば、その範囲で実装を自由に変えられるはず。

          ふつうリファクタリングが行うのは設計とコードのブラッシュアップですね
          同一仕様でも再設計再実装はリファクタリングとは言わない

          > リファクタリングも「修正」の一種であって、

          わざわざリファクタリングという用語で「修正」と区別して考えるわけですが

          > 変数名だけの変更も、スコープを誤るとバグを作りこむことになる。

          変数名の変更なんてツールでしますからよほどマヌケでなければエンバグなんてしません

          > 広い意味でパフォーマンス向上させるようなリファクタリングも可能かもしれませんね。

          リファクタリングでは動作の最適化はしません

        • by Anonymous Coward

          単にリファクタリングを知らない人の言いぐさだなあ。

          やってみるといいですよ。

        • by Anonymous Coward

          リファクタリングツールを使うのがリファクタリングだろう。
          リファクタリングを知らない意見としか思わない。

          • by Anonymous Coward

            > リファクタリングツールを使うのがリファクタリングだろう。
            ツールの使い方を必死で覚えてる人とか、本気でそう思ってる人がいそう。

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

処理中...