2017年06月23日

なぜコードを流用してしまうのか


初めての方はこちらを「はじめに

今回はコードの流用についてですが話としては「設計における汎用性とは」の観点と関わりがあります。

コードの流用とは


ここで言うコードの流用とはあるプログラムのコードをコピーして利用する事を指します。
以下の様なイメージです。
53N026_001.jpg

プログラムAにPという処理があった時にBというプログラムを作ろうとしたら似たような処理があったので、コードをコピーしてきてP´に改変して組み込むという様な事です。

これをやるとあちこちに似たようなコードが出来てしまって、もしPに修正が必要になった時には場合によっては流用した全てのコードを修正して回らなければならなくなります。しかもどこに流用したコードがあるのかを見つけるのも容易ではありません。結果的に著しく保守性を低下させることになります。

この話がやっかいなのは流用しているのかどうかがコードを見ないとなかなか分からないという事です。なので自分自身はそういう事はしていないとしても誰かが見えない所でやっている可能性もあります。もし自分が推進しているプロジェクト内でこういうものが紛れ込んでしまっていたら見かけは順調でも将来に対してのダメージという事になります。

特に、新規で一から開発している時には目を光らせていたとしても、リリース後の問題点対応などで修正する時などには混入しやすくなります。

なぜ流用してしまうのか


ではなぜ流用してしまうのでしょうか。
ここではまず流用しない本来のあるべき姿を考えてみます。そうすると以下の様になります。
53N026_002.jpg

PはAとBで共通的な処理な訳ですからAとBから一段下の階層に降ろして汎用的にAからもBからも呼び出せる形(C)にするべきです。そうするとこの部分の検討で難しさが発生する事になります。つまりPはCという独立した新たなものとして検討して作る必要がありますし、AからPを抜いてCを呼び出すという修正も必要になります。
これこそが安易に流用に走ってしまう原因です。

PはAの中に居た時にはAの事だけを気にしていれば良かった訳ですが、外に出すと最低でもAとB二つの事を考えなければなりません。実際は一段下に下げるという事は今後も新たな似たようなプログラムから呼び出せる形にする必要がありますから、より抽象的な思考が必要になります。もしそうしないでAとBの二つだけしか考慮しないとすると、それは流用した場合とさほど差が無い事になりかねません。

防ぐためには


「設計における汎用性とは」で述べた様に汎用的にするかどうかは、個々人、各組織の能力とのバランスによって決定する必要があります。なので一概に流用するべきではないとは言えません。
ここでは仮に流用しないで汎用的にする能力があったとして、なのに流用してしまっているとしたらどうしたら防げるかを考えてみたいと思います。

まず一番重要なのがBを追加するという事が個人の裁量で行われるのではなく何かしらレビューされる必要があるという事です。ここを捕まえられないと最初に述べた様にコードを見て回らないと見つけられない事になります。具体的にはBを追加するという事は設計変更に他なりませんから設計のレビューという事になります。
その上でレビューする人がBにはAとの共通部分(P)があるという事が見いだせなければなりません。レビュー対象となる資料にはそういった事が分かる内容が記述されている必要があるという事になります。
更にレビューする人の資質としてPを昇格させてCにするべきだという事を主張できる人材の必要があります。
これだけの要素が揃って初めて流用を防げる様になるのだと思います。

もちろん全員が汎用的にする意識があればこういう事は考えなくても良いかもしれません。しかし人間は基本的に楽をしたがるものなので例え能力的に出来るとしても手を抜く可能性は否定できません。なのでやはり属人的ではなくなるべくシステマティックに実現するべきでしょう。

一覧


メニュー


記事を広める



posted by 善 at 17:52 | Comment(0) | TrackBack(0) | 設計 | このブログの読者になる | 更新情報をチェックする
スポンサーリンク
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック