「コードスキュー」とは何ですか?


11

ScalaのO'Reillyの本で、コードのコピーアンドペーストが作成することを読みました。

...コードの肥大化、保守性、スキューの問題が発生し、

文脈の中で歪曲という言葉の明確な定義を見ることができません。コピーペーストの問題は認識していますが、「スキュー」という言葉に当てはめることはできません。これはO'Reillyの本で使用されているため、実際のプログラミング用語が流通していると推測しています。

ポインタはありますか?

回答:


19

最も伝統的な定義でのスキューとは、アライメントがずれている(平行ではない)ことを意味します。明らかに、コードをコピーして貼り付けると、2つのコピーは同一かつ並行します。これは不変ではありません。1つのコピーに加えられた変更は、(不注意または無知のために)他のコピーに加えられるとは限りません。現在、2つの異なる場所に存在する2つのバージョンのコードが歪んでいます(同じではありません)。これは、ある場所では動作し、別の場所では動作しないように見える場合、奇妙なバグにつながる可能性があります。コードを乾いた状態に保ちます(繰り返しはしないでください)。

編集/追加:コピーアンドペーストが必要な場合は、共有スーパークラス(オブジェクト指向)または何らかの組み込みユーティリティ関数(機能)にコピーするコードを抽象化することをお勧めします。


良い説明のために+1。いくつかのカタルシスについても-修正が必要なまさにこの種の問題を伴う数百および数百行のコピーアンドペーストコードで構成されるコードベースに対処する必要があります。
KChaloux

2

子供の頃に電話ゲームをプレイしたことがありますか?各人がフレーズを次の人に順番にささやき、最後に最後の人がフレーズを大声で言って、みんながオリジナルとどれだけ違うのか笑うのはご存知ですか?それはスキューです。コードをコピーして貼り付けると、必然的に1つ以上のコピーに小さな変更が加えられます。また、同じコードを頻繁にコピーして貼り付けると、より多くの変更が蓄積され、コードが元のコードからずれてしまいます。私は数百のコピーと貼り付けられたブロックを備えたコードを見てきました。各ブロックは数文字だけ異なるため、維持するのはほぼ不可能です。コードの一部をカットアンドペーストしたい場合は、少なくとも独自の機能に入れることを検討する必要があります。


3
違いはされていない原因コピー&ペーストで。これらは、コピーアンドペースト後に発生するものです。
スティーブンC

1
非常に真実ですが、コードをコピーして貼り付けていなければ、違いは生じませんでした。
ジムナット

これは良い例ですが、類似性は概念とは異なります。同様に、ペーストは異なるコピーを作成しますが、実際の概念では、コピーは同じですが、同期されていないため、スキューが発生します。
サンディープ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.