タグ付けされた質問 「refactoring」

リファクタリングは、既存のコード本体を再構築し、外部の動作を変更せずに内部構造を変更するための統制のとれた手法です。

15
より小さなクラス/メソッドを使用するようにチームを説得するにはどうすればよいですか?
免責事項:私は新参者であり(これが私の仕事の3日目です)、私のチームメートのほとんどは私よりも経験が豊富です。 私たちのコードを見ると、次のようなコードのにおいと悪いエンジニアリング手法が見られます。 多少矛盾した命名ガイドライン 可能な場合、読み取り専用としてマークされていないプロパティ 大規模なクラス-何百もの拡張メソッド(多くのタイプ)で構成されるユーティリティクラスに気付きました。2500行以上でした! 大規模メソッド-150行のメソッドをリファクタリングしようとしています。 後者の2つは本当の問題のようです。チームメイトに、より小さなクラスとメソッドを使用するよう説得したいと思います。しかし、私はそれをする必要がありますか?はいの場合、どのように? 私のチームは、メインチーム(私たちはサテライトチーム)からメンターを獲得しました。最初に彼に行くべきですか? 更新:いくつかの回答がプロジェクトについて尋ねたので、それが機能しているプロジェクトであることを知ってください。そして、私見、そのサイズの巨大なクラス/メソッドは常に悪いです。 とにかく、チームを怒らせたくありません。それが私が尋ねた理由です-私はそれをするべきですか? 更新:受け入れられた答えに基づいて何かをすることにしました:私は初心者なので、すべてを「新鮮な目」で見るので、見つけたすべてのコードの匂いに注意します(位置、それが悪い理由、どうすればできるかより良い、...)、しかし、現時点では、私はチームから敬意を集めるために一生懸命努力しています:「より良いコード」を書き、人々を知り、なぜそれをしたのかを知っています...新しいコードポリシー(命名ガイドライン、小規模なクラス、小規模なメソッドなど)についてチームに問い合わせ、可能であれば古いコードをリファクタリングします。動作するはずです、私見。 ありがとうございました。

5
オブジェクト指向プログラムを機能的なものにリファクタリングする方法は?
機能的なスタイルでプログラムを作成する方法に関するリソースを見つけるのが困難です。オンラインで議論された最も高度なトピックは、構造型付けを使用してクラス階層を削減することでした。ほとんどはmap / fold / reduce / etcを使用して命令型ループを置き換える方法を扱っています。 私が本当に見つけたいのは、自明ではないプログラムのOOP実装、その制限、およびそれを機能的なスタイルにリファクタリングする方法についての詳細な議論です。アルゴリズムやデータ構造だけでなく、いくつかの異なる役割と側面を持つもの-ビデオゲームかもしれません。ちなみに、私はTomas PetricekによるReal-World Functional Programmingを読みましたが、もっと欲しいと思っています。

4
リファクタリングでLOCが高くなるのは理にかなっていますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 去年閉鎖されました。 より簡潔なコードよりも詳細なコード(より論理的なステートメントのように)のほうがクリーンな場合がありますか?

12
「コーディングするだけなので」単体テストを使用したくない同僚
同僚は単体テストを使用することを嫌がり、代わりに簡単なテストを選択してユーザーに渡し、すべてがうまくいけばライブで公開されます。言うまでもなく、いくつかのバグは解決されます。 私はユニットテストの使用について考えるべきだと言いましたが、彼女はより多くのコードを書かなければならないことに気づいたら、それに対してすべて反対しました。これにより、特に彼女のコードがスパゲッティであり、機会があればリファクタリングしようとするので、何かを変更し、出力が同じであるかどうかを確認することができません。 それでは、私にとって最善の方法は何ですか?

5
すべての開発がブランチ上にあるときにリファクタリングする方法は?
私の会社では、すべての開発(バグ修正と新機能)は別々のブランチで行われています。完了したら、QAに送信し、QAがそのブランチでテストします。QAが青信号を出したら、メインブランチにマージします。これには、1日から1年かかることがあります。 ブランチでリファクタリングを絞り込もうとすると、どれくらいの期間「アウト」されるかわからないので、マージして元に戻すと多くの競合が発生する可能性があります。 たとえば、作業中の機能がこの関数を頻繁に使用しているため、関数の名前を変更したいとします。名前が実際には目的に合わないことがわかりました(これも単なる例です)。そこで、この関数のすべての使用法を見つけて、それらをすべて新しい名前に変更すると、すべてが完全に機能するため、QAに送信します。 その間、新しい開発が行われており、名前が変更された関数は、メインから分岐されているブランチのいずれにも存在しません。私の問題が再び統合されると、それらはすべて壊れてしまいます。 これに対処する方法はありますか? 経営陣がリファクタリングのみの問題を承認するようなことはないので、他の作業に絞り込まなければなりません。mainで直接開発することはできません。なぜなら、すべての変更はQAを通過する必要があり、mainを壊したジャークになりたくないので、彼は少しの非本質的なリファクタリングを行うことができるからです。

7
スクラムでコードをランダムにリファクタリングできますか
バックグラウンド 私のチームはスクラムを使用しています 現在、タスクが割り当てられていません バックログに保留中のタスクはありません 今日は私のクライアントの労働者の日です。 今日やるべきことがあまりないので、作業中のプロジェクトで見続けるコードのリファクタリングを開始したかったのですが、現在、大規模なリファクタリングを行うためのスプリントタスクは割り当てられていません。 それはでOKですスクラム私はランダムに私が持っていると書かれていないいつも私を気にすることをが、理由は他の日の割り当てのそれを修正するために、他の日の時間を持っていないこと、コードをリファクタリング開始した場合? スプリントの間に余暇がある他の日はどうですか。 私は実際に継続的なリファクタリングを行い、それを信じています。私は常にストーリーを割り当てたときに作業しているコードの一部でそれを行いますが、それが現時点で作業しているものに現在関連していない他のコードはどうですか?

7
複雑すぎる方法を避ける-循環的な複雑さ
Cyclomatic Complexityを削減するためにこの方法をどのように実行するかわからない。ソナーは13を報告しますが、10が予想されます。しかし、この方法をそのままにしておいても、ソナーのルールに従う方法に挑戦するだけでは何の害もありません。どんな考えでも大歓迎です。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { …

4
進行中のリファクタリングをコミットする方法は?
それで、私はこの大きなプロジェクトを持っています。それは私によってリファクタリングされるプロセスにあります。私は多くのものを変更しているので、すぐにコンパイルする機会はありません。私は名前を付けた特別なgitブランチに住んでいますcleanup(masterもちろん、最終的にはマージされます)。 問題は、非コンパイルコードをコミットしないというポリシーがあることです(理想的には動作するはずですが、少なくともコンパイルしてリンクする必要があります)。そのため、この巨大なタスクを完了するまで、何もコミットできません(レビューまたは簿記のため)。 これは私が仕事をするのが好きな方法ではありません(ほとんどの人が少なくとも1日に1回程度コミットしていると思います)。 どう思いますか?私が見落としている解決策はありますか? 後でコミットなどを集約するようにgitに指示できますか?ブランチに留まっている限り、コンパイルしないコミットで生きることができcleanupます。 編集 プッシュ/コミットの件名:私はそれが大きな違いであることを知っていますが、後で、私のものをにマージすると壊れたリビジョンがありますmaster。したがって、履歴を参照する(またはgit bisect...)場合、「ローカル」リビジョンは世界中からアクセス可能になります。したがって、ローカルでコミットするだけでプッシュするのは最善の解決策ではありません。それは後で問題が発生するからです(サブジェクトが閉じられ、しばらく忘れられた場合)。 要するに、ローカルコミットは最終的にプッシュされます。グローバル履歴には、コンパイルされていないコミットは表示されません。
23 git  refactoring 

11
アプリの完成にリファクタリングまたは集中
進行中にアプリをリファクタリングしますか、それとも最初にアプリを完成させることに集中しますか?リファクタリングは、アプリappの進行が遅くなることを意味します。 アプリを完了すると、後でアプリのメンテナンスが非常に難しくなる可能性がありますか? このアプリは個人的なプロジェクトです。「機能と設計を推進するもの」にどのように答えればよいのか本当に分かりませんが、現在のソフトウェアの非効率性を解決することだと思います。私も最小限の使いやすいソフトウェアが好きです。そのため、いくつかの機能を削除し、役立つと思う機能を追加しています。

1
コードのリファクタリングにどれくらいの時間を費やすべきですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 それが私だけのものかどうかはわかりませんが、コードのリファクタリングを開始すると、それを行うのに多くの時間を無駄にし、終わりません。 コードを再度読むたびに、改善できるものを見つけます。コードのリファクタリングは、私の脳が無限ループに陥り、満足のいくものではなくランダムに終了条件に到達するようなものです。 それでは、コードのリファクタリングにどれくらいの時間を費やすべきでしょうか?

1
リファクタリングはGitFlowブランチネーミングモデルのどこに属しますか?
私は最近、bitbucketで実装されたGitFlowモデルの使用を開始しました。そして、私には完全に明確ではないことが一つあります。 リファクタリングタスクをバックログ、計画、および実装することにより、技術的な負債に定期的に対処しようとしています。そのようなリファクタリングブランチは、でマージされたプルリクエストで終わりますdevelop。私の質問は、リファクタリングブランチはGitFlowのどこに属しますか? featureプレフィックスを使用することは最も論理的ですが、リファクタリングによって新しい機能が追加されることはないため、完全に正しいとは限りません。 しかしbugfix、実際のバグリファクタリングの修正がないため、プレフィックスの使用は適切ではないようです。 一方で、カスタムプレフィックスを作成することは、物事を過剰に設計しない限り複雑化するように思えます。 そのような状況はありましたか?これに対処するためにどのプラクティスを使用しますか?理由を説明してください。

13
壊れたウィンドウを修正しないことはいつ受け入れられますか?
壊れたウィンドウを参照して、将来のアクティビティのためにリファクタリングを残すのが最適な場合はありますか? たとえば、既存の内部システムにいくつかの新機能を追加するプロジェクトが、これまでシステムで動作していなかったチームに割り当てられ、動作するための短いタイムラインが与えられた場合、それを正当化することができますか?このシナリオで期限を設定するために、主要なリファクタリングを既存のコードに延期しますか?

7
チームの新人でありながら、既存の統合と単体テストの品質について何ができますか?
私がキャリアで出くわした繰り返しのテーマは、チームに到着する新しい開発者であること、そして既存のユニットと統合テストスイートに対する固有の不信をすぐに持つことです。 面接中に、経営陣から「ユニットテストを強力にサポートしている」ことと、それを公然と奨励していることが伝えられます。彼らはそうしますが、テスト自体についてのすべては単に間違っています。100%の統合テストカバレッジがあり、10%未満の反復可能な単体テストカバレッジがある場合、100%のカバレッジを主張しているという事実と同様です。私が見つけた他のいくつかの問題: 単体テストと統合テストの間に明確な兆候はありません。単体テストと統合テストは、同じクラスに混在しています。 特定の環境のデータベース上の非常に特定の動的データに対する未宣言の明示的な依存関係がある統合テスト。 非トランザクション統合テスト。基本的には、後からクリーンアップするかどうかわからないテストであり、テストを再現可能にするために手動のデータベース「スクラビング」が必要になる場合があります。 モッキングは一切行われません。アプリケーションコードでは、モッキングを可能にするためだけに大幅な見直しが必要です。つまり、テストを考慮せずに設計します。 テスト名をすばやく確認して、実行中のテストを大まかに判断するための明確な命名規則はありません。 これは、すべてのテストが役に立たないか悪いというわけではなく、かなりの数のテストが非常に良く、維持する価値があると言っているわけではありませんが、金のためにパンするような気がします。ブラックボックステストケースのデータベースを台無しにするのが怖かったからといって、意図的にテストを実行することは避けました。 これは本質的に、私が個人的に何らかの方法で書いたりレビューしたりしていないユニットおよび統合テストの固有の不信感を与えました。あるレベルでは、テストスイートの品質を信頼していない場合、チームやプロジェクトにはまったく価値がありません。 この状況に陥ったとき、あなたはどうしますか?攻撃の最善の計画は、このようなものに取り組むことだと思いますか? すべてのテストをリリース間で途方もない努力でリファクタリングする必要がありますか?このレガシープロジェクトが1日の強固な単体テストの対象となる可能性があるという考えを捨てる必要がありますか?

15
リファクタリング:コードをクリーンアップするための単なる凝った言葉ではありませんか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Martin Fowlerの本「Refactoring:Improving the Design of Existing Code」が出てくる前は、コードの大きな変更を「再構築」、小さな変更を「クリーンアップ」と呼んでいました。IMO、リファクタリング技術はすべて常識であり、私たちがこれまでずっとやってきたことです。 リファクタリングは新しいものだと思いますか?おそらく、管理をtrickしてコードをクリーンアップする時間を割り当てる方法でしょうか?

4
コードカバレッジを劇的に改善する方法は?
ユニットテストの下でレガシーアプリケーションを取得することを任されています。アプリケーションに関する最初の背景:これらの主要な問題を伴う600k LOC Java RCPコードベースです。 大規模なコードの複製 カプセル化なし、ほとんどのプライベートデータは外部からアクセスできます。ビジネスデータの一部はシングルトンにもなっているため、外部からだけでなくどこからでも変更できます。 抽象化なし(たとえば、ビジネスモデルなし、ビジネスデータはObject []およびdouble [] []に格納されます)。したがって、OOはありません。 優れた回帰テストスイートがあり、効率的なQAチームがバグのテストと発見を行っています。マイケル・フェザーズなどの古典的な本からテストする方法を知っていますが、それは遅すぎます。実用的なリグレッションテストシステムがあるので、ユニットテストを作成できるようにシステムを積極的にリファクタリングすることを恐れていません。 迅速にカバレッジを得るために、どのように問題を攻撃し始める必要がありますか?そうすれば、経営陣に進捗を示すことができます(実際には、JUnitテストのセーフティネットから収益を上げることができます)?AgitarOneなどの回帰テストスイートを生成するツールを使用したくないのは、これらのテストは何かが正しいかどうかをテストしないためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.