1

Duplicate codeとも呼ばれるコードクローンは、しばしばシステムの品質に有害であると考えられています。C、Java、Pythonのコードクローンは一般的なプラクティスですか?

  1. これらの重複したコードが標準APIや他の成熟したツールに見られるかどうかは疑問です。
  2. 実際にそうであれば、どの言語(C、Java、Python、一般的なlispなど)は、より高い確率でcode cloneの練習を導入すべきだと思いますか?
+1

多分私は高密度ですが、私はあなたが尋ねていることを正確に理解するのに苦労しています。明確にすることはできますか? – chesles

+0

@cheslesあなたの助言に感謝し、私は少し変更しました。 –

答えて

3

コードクローンは、プログラミング言語が使用されていても、C、Python、Javaであっても非常に一般的です。

人々は短期間で効率的になるため、人はそれを行います。彼らはコードの再利用を行っています。クローンはコードのバグや仮定を再利用し、それらが発見され、修正が必要なときには、すべてのコードクローンを修正する必要があり、修正を行うプログラマーは、クローンがどこにあるのか、何かがある場合でも知っている。

私はコードの再利用の効果のためにクローンが悪いとは思わない。私は悪いのはそれらを管理していないと思う。

プログラミング言語の構造を使用して、検索を誘導するために、正確に、そしてニアミスの重複コードを自動的に見つける、後者の問題を解決するために、私はclone detectors (see our CloneDRをビルドします。 CloneDRは、さまざまなプログラミング言語(OPのセットを含む)で動作します。

100K SLOC以上のソフトウェアシステムでは、コードの少なくとも10%がクローンされます。 (OK、OK、SunのJDKは非常に優れたチームによって構築されており、約9.5%しかありません)。古い従来のアプリケーションでは悪化する傾向があります。私は、プログラマが自己防衛からより多くのコードをクローンするので、疑いがある。 (私はクローンがコードの50%以上を占めるアプリケーションを見てきました、はい、それらのプログラムはクローニングだけでなく多くの理由でひどい傾向があります)。

複数のランゲージのアプリケーションのリンクからクローンレポートを確認したり、統計を調べたり、クローンの外観を確認したりすることができます。

3

すべてのコードは、誰が書き込んでいるかにかかわらず同じです。あなたが引用したAPIは、途中で意思決定をした人間によって書かれたものです。私は完璧なAPIをまだ見ていません - 彼らはすべて、事後的に物事をやり直すことになります。

クローニングコードはDRYの面で飛んでいますので、しないことをお勧めします。より多くのコードがより多くのバグを意味するので、それは有害であり、複製はすべてのクローンでそれらを修正することを覚えなければならないことを意味します。

しかし、すべてのルールには例外があります。誰もが「ベスト・プラクティス」やドグマがそうすべきではないと言っているようなことをした状況を考えることができると確信していますが、とにかくやりました。時間と他の制約が必ずしも完璧になるとは限りません。

このようなことを許可するために許可を与える必要があることを示唆するのは私にとっては馬鹿馬鹿しいことです。できるだけドライな状態にしてください。あなたがそれを違反してしまったら、なぜそれをやったのか理解し、チャンスがあれば戻って修正することを忘れないでください。

+0

+1ガイドラインに反して行かなければならないことを理解していて、そうしたときにガイドラインに違反した理由を知っておく必要があります。しかし、ガイドラインに反している理由が一定であるため(つまり、同じコードをタイトなループで2回複製することを選択すると、メソッドはオーバーヘッドを導入し、問題のタイトループがすでにパフォーマンス上の問題であることを知っている(測定済み))。 – RHSeeger

関連する問題