問題タブ [code-duplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1484 参照

asp.net - 動的 UI と静的 UI

多くのコードの重複を削除する動的 UI のデザイナー サポートを備えた静的データ入力フォームの利便性をどの時点で放棄する必要があるのでしょうか?

プログラミングの世界では、保守性を向上させるために常にコードの繰り返しを削除しようとする一方で、フォームに関しては、すべてが窓の外に出て、すべてがフォームに明示的に追加されるという対立があるようです。

デザイナーを置き去りにして動的 UI を作成する時期を知るには、どのような兆候を探す必要がありますか?

0 投票する
11 に答える
2226 参照

unit-testing - モックでロジックの重複を避ける方法

次の課題がありますが、良い答えが見つかりません。モッキング フレームワーク (この場合は JMock) を使用して、単体テストをデータベース コードから分離できるようにしています。データベース ロジックを含むクラスへのアクセスをモックし、DBUnit を使用してデータベース クラスを個別にテストしています。

私が抱えている問題は、ロジックが概念的に複数の場所で複製されているパターンに気付いていることです。たとえば、データベースに値が存在しないことを検出する必要があるため、その場合、メソッドから null を返すことがあります。したがって、データベースとの対話を行い、null を適切に返すデータベース アクセス クラスがあります。次に、モックからnullを受け取り、値がnullの場合に適切に動作するようにテストされるビジネスロジッククラスがあります。

将来、動作を変更する必要があり、状態がより複雑になったために null を返すことが適切でなくなったとしたら、値が存在しないことを報告するオブジェクトと、からの追加の事実を返す必要があります。データベース。

ここで、データベース クラスの動作を変更してその場合に null を返さないようにすると、ビジネス ロジック クラスは引き続き機能しているように見え、バグは QA でのみ検出されます。メソッドの使用法。

私は何かが欠けているように感じました。この概念の重複を回避するためのより良い方法が必要です。または、変更された場合に変更が反映されないという事実が単体テストに失敗するように、少なくともテストを実施する必要があります。

助言がありますか?

アップデート:

私の質問を明確にしてみましょう。コードが時間の経過とともに進化するとき、モックを介してテストされたクラスとモックが表すクラスの実際の実装との間で統合が壊れないようにする方法を考えています。

たとえば、最初に作成されたメソッドがあり、null 値を想定していない場合があったため、これは実際のオブジェクトのテストではありませんでした。その後、(モックを介してテストされた) クラスのユーザーは、特定の状況下でパラメーターとして null を渡すように拡張されました。実際のクラスがnullについてテストされていなかったため、統合が壊れました。最初にこれらのクラスを構築するとき、構築しながら両端をテストするので、これは大したことではありませんが、詳細を忘れがちな 2 か月後に設計を進化させる必要がある場合、間の相互作用をどのようにテストしますか?これらの 2 つのオブジェクトのセット (モックと実際の実装を介してテストされたもの)?

根底にある問題は重複 (DRY 原則に違反している) の 1 つであると思われます。関係は概念的なものですが、実際の重複コードはありません。

[Aaron Digulla の回答に対する 2 回目の編集後に編集]:

そうです、それはまさに私がやっていることです(DBUnitを介してテストされ、テスト中にデータベースと対話するクラスでDBとのさらなる対話があることを除いて、それは同じ考えです)。ここで、結果が異なるようにデータベースの動作を変更する必要があるとします。モックを使用したテストは、1) 誰かが覚えているか、2) 統合で壊れない限り合格し続けます。したがって、データベースのストアド プロシージャの戻り値 (たとえば) は、モックのテスト データで本質的に複製されます。重複について気になるのは、ロジックが重複していることです。これは、DRY の微妙な違反です。その通りなのかもしれませんが (結局のところ、統合テストには理由があります)、代わりに何かが足りないと感じていました。

[バウンティ開始時の編集]

アーロンとのやり取りを読むと、問題の要点に到達しますが、私が本当に探しているのは、明らかな重複を回避または管理する方法についての洞察であり、実際のクラスの動作の変化が壊れたものとしてモックと相互作用する単体テスト。明らかにそれは自動的には起こりませんが、シナリオを正しく設計する方法があるかもしれません。

[バウンティの授与に関する編集]

時間を割いて質問に答えてくれたすべての人に感謝します。勝者は、2 つのレイヤー間でデータを渡す方法について新しいことを教えてくれ、最初に答えにたどり着きました。

0 投票する
3 に答える
4958 参照

language-agnostic - 同様のコードフラグメントを見つける方法は?

他のコードに似たコードを見つける方法を知っている人はいますか?

関数やコードフラグメントを書くことがよくありますが、以前にそのようなものを書いたことがあるので、以前の実装を再利用したいと思いますが、プレーンテキスト検索を使用しても、変数名を使用しなかったため、何も表示されません。まったく同じである。

同様のコードフラグメントがあると、不要なコードの重複が発生しますが、コードベースが大きい場合、すべてのコードをメモリに保持することは不可能です。機能の点で「類似」しているコードとマークされたフラグメントまたは関数の分析を実行するツールはありますか?

次の例を検討してください。


私には、これはすでに何度か質問され、回答されているようです。

https://stackoverflow.com/questions/204177/what-tool-to-find-code-duplicates-in-c-projects

開発中にコードの重複を検出する方法は?

ここで複製として閉じることをお勧めします。


実際、これはより一般的な検索の問題だと思います。たとえば、StackOverflowで質問が既に行われている場合、どうすれば検索できますか?

0 投票する
2 に答える
394 参照

c# - 複数のプロジェクト間での機能の重複

私は現在、多くの共通点を持ちながら明確に異なる 2 つのソーシャル ネットワーキング サイトに取り組んでいます。両方 (UI を含む) に同じコードをたくさん書いていることに気づき、コードの重複を制限するベスト プラクティスがあるかどうか疑問に思っていました。

主な問題の 1 つは、これらのプロジェクトが互いに非常に独立しており、近いうちに類似点よりも相違点の方が多くなる可能性が高いことです。また、最初の作業が完了すると、他のプログラマーに引き継がれる可能性があるため、コード ライブラリを共有することが大きな問題になる可能性があります。

同様の状況に対処しなければならなかった可能性のある人々からの提案はありますか?

PS: 両方のプロジェクトの開発者は私だけで、しばらくはそのままの状態が続くようです。

0 投票する
6 に答える
991 参照

code-analysis - どの重複検出しきい値を使用していますか?

重複は悪であり、避けるべきであることに全員が同意します (同じことを繰り返すなという原則)。そのためには、Simian (多言語) やClone Detective (Visual Studio アドイン) などの静的解析コードを使用する必要があります。

Ayende の神戸に関する投稿を読んだところ、彼は次のように言っています。

神戸の8.5%はコピペコード。これは、感度を高く設定した場合です。しきい値を 3 に設定すると、私がよく行うように、12.5% まで上がります。

閾値としての 3 は非常に低いと思います。私の会社では、高品質のコード分析をサービスとして提供しています。重複のデフォルトのしきい値は 20 に設定されており、多くの重複があります。3にしてしまうと、お客様が修正など考えられないなんて想像もできません。

Kobe に関する Ayende の意見は理解できます。これは公式のサンプルであり、「Web 2.0 アプリケーションおよびサービスの計画、設計、および実装をガイドすることを目的としている」として販売されています。そのため、品質への期待は高いです。

しかし、あなたのプロジェクトでは、重複のためにどのような最小しきい値を使用していますか?

関連する質問 :コードの重複をどれだけ熱心に排除しますか?

0 投票する
15 に答える
713 参照

open-source - 「オープンソース」とは、「誰でも私の作品を持ち出し、好きな場所で好きなようにホストできる」という意味ですか?

「プログラマーに関連する」と「明白に答えられる」の境界線を引くとき、私は通常後者に傾倒しますが、コミュニティがこれについて何を言わなければならないかを聞くのは本当に興味があります. これは CW であるべきだと感じています (私は CW トピックを作成したことがありません) が、SO の経験が豊富な人にその電話をかけてもらいます。

概要:

「オープンソース」とは、「誰でも私の作品を持ち出し、好きな場所で好きなようにホストできる」という意味ですか?

編集:質問者のために、ライセンスはLGPLです。

詳細:

私のオープン ソース タイトルは Codeplex でホストされており、しばらく前からホストされています。今日、それはSoftpediaにもホストされていることがわかりましたが、元の作者の実際のサイトへの明確な参照はありません (リンクはそこにあり、1 層または 2 層の深さですが、本来あるべきほど目立つものではありません)。彼らは、関連するすべての Codeplex から作成されたコンテンツを複製し、それを自分自身でホストしました... ミラーのように、元の作成者の知らないうちに。

私はこれについてまったく言われなかった/尋ねられなかった/など。「オープンソース」とは、「誰でも私の作品を持ち出し、好きな場所で好きなようにホストできる」という意味ですか?

私はこのプロジェクトに金銭的関心を持っていません。ユーザーのニーズに応え、開発者としての私の弱点に対処するのを手伝う (理想的には協力して)、そしておそらく「恩返し」をするのは楽しい趣味です。もし私がこのプロジェクトからお金を稼ごうとしているのなら、もっとイライラするだろう... たとえば、ダウンロード サイトから広告収入を得ていたら (ソフトウェアの名前で検索すると、Softpedia が保持していることがわかります)。 Google の検索結果では、プロジェクトの Codeplex ページが保持していた位置)。

とにかく、ダウンロード可能なインストーラーだけでなく、逐語的な製品説明、スクリーンショット、変更ログなどを、私の協力や許可なしに突然ホストする別のサイトの匂いが好きではありません.

はい、彼らは私の名前を表示しましたが、私に連絡する方法がありません。率直に言って、彼らが自分の知らないうちに「私の名前」を使っていることに私が最も腹を立てているのは.

わかった。私はオンラインです。私は何かを作りました。人々は私にリンクしようとしています - 繰り返しますが、これは技術的には (リンクを見つけることができれば) ですが、このサイトは間違っているように感じます.

繰り返しますが、このサイトが製品のレビュー/解説の最も基本的な種類であっても、それは異なります. しかし、これは私が彼らと関連付けられているように見えます-そこでアカウントを作成したか何か-そして私はしていません。

彼らは、ライセンスを単に「フリーウェア」としてリストしています。これは、Codeplex サイトですぐに提示されるライセンスに比べて (控えめに言っても) あいまいです。Codeplex へのおそらく隠されたリンクのように、彼らの「フリーウェア」の定義は、彼らのサイトの他の場所でより詳細に説明されていますが、Codeplex ほど明白ではありません。そして、彼らの「フリーウェア」の定義が、LGPL を選択する際の「私の」意図とどのように異なるか、またはどのように異なるかについては、まだ検討していません。

私はまだこれらの人々に連絡を取ろうとはしていませんが、他の人のコンテンツを複製する人々を巻き込み始めているので、私の楽観主義は高くありません (ここでも、コンテンツの「提出」は行われず、彼らのサイトでは何も提供されていません)。ユニークな解説/私の作品への補足)。

誰かが提供するのに役立つ/役立つ何かを持っていることを願っていますか? 私はこのプロジェクトを楽しんでいます (これは私の最初のオープンソースの試みです)。私や私のユーザーにとって、それが頭痛の種になりたくないのですか?

これは、フリー ソフトウェアを配布するオープン ソース ソフトウェアの作成者であることの一部にすぎませんか? あなたの作品が別の場所で複製されてしまい (そして別の場所ではまだ-- へー)、それに対してできることは何もありませんか? これは正当な「へのリンク」だと思いますか? まったくイライラするという点で、私はマークを逃していますか?

0 投票する
1 に答える
144 参照

code-duplication - プラットフォーム/階層間で重複するコードを処理するにはどうすればよいですか?

複数のプラットフォーム/層でのコードの重複を誰もがどのように処理しているかに興味があります。

例として、このアプリケーションにはクレームを表示する画面があります。クレームが特定の基準を満たし、ユーザーがどのクレームが未解決であるかをリストで確認したい場合、そのクレームは未解決であると見なされます。そのため、アプリケーションにはこれを行うコードが 1 つあります。

また、アプリケーションとは完全に別のレポートもあり、ユーザーはすべての未解決の請求のレポートを必要としています。クレーム エンティティを作成し、それが未処理であるかどうかをレポートから確認する方法がないため、必然的にコードの重複が必要になるようです。

この情報と単一のコードを提供する関数または何かをデータベースに含めることができますが、その場合、ビジネス ロジックをデータベースにのみ依存しており、クレームごとにデータベースへのラウンド トリップを行う必要があります。アプリでチェックインしたいのですが、理想的ではありません。

では、誰もがこのような状況にどのように対処しているのでしょうか? また、知っておくべきベスト プラクティスはありますか?

0 投票する
20 に答える
4493 参照

c++ - コードが重複する正当な理由はありますか?

現在、非常に古い C++ プロジェクトをレビューしていて、コードの重複がたくさんあります。

たとえば、それぞれが 10 行の同一のコードを保持する 5 つの MFC メッセージ ハンドラーを持つクラスがあります。または、非常に具体的な文字列変換のための 5 行のスニペットがあちこちにあります。このような場合、コードの重複を減らすことはまったく問題になりません。

でも、何かを誤解しているのかもしれないし、元々この重複には理由があったのかもしれないという不思議な感覚があります。

コードを複製する正当な理由は何ですか?

0 投票する
1 に答える
255 参照

.net - Reflector の Linq で多くのコードの重複が見られるのはなぜですか?

編集:元の質問を間違えました。メソッドLastおよびLastOrDefault (またはSingleおよびSingleOrDefault、またはFirstおよびFirstOrDefault - それらの多く!) に関するものである必要があります。

この質問に触発されて、私はReflectorを開いてコードを見ました

それから私はのコードにジャンプしました

そして、最後の1行だけが異なるまったく同じコード(約20行)を見ました(最初のメソッドはデフォルト(T)を返し、2番目のメソッドは例外をスローします)。

私の質問は、なぜそうなのかということです。Microsoft の担当者が、.Net フレームワーク内の重要なコードの複製を許可するのはなぜですか? コードレビューはありませんか?