質的難しさと量的難しさ

ソフトウェア開発の難しさはいろいろ有るけれど、その観点の一つに質的難しさと量的難しさが有ると思う。質的難しさとは、開発対象や言語、ドメインの差異を指しており、量的難しさとは、開発が進んで数十万行規模のソースコードに成長したプロジェクトの開発(保守、派生開発など)を指す。

例えば、今までJavaでWebアプリケーションを作っていたのに新規プロジェクトではJavaではなくRubyを使うことになったとか、Javaを知っているからという理由だけでWebアプリケーションの開発からAndroidの開発にアサインされた場合、これは量の問題よりも質的な違いのほうが課題になるはずだ。一昔前なら一つの言語、環境にさえ対応できていれば充分食べていけたのだけど、今では次々と新しい技術、製品が出てくるので開発者としてもそれに追随していかなければならない。

この時の最大の課題は、必要な作業量の見積もりが難しく、工程が立てにくくなる点だと思う。確かに、仕組みや構成が似ていれば経験を元に類推は効くのだけど、今までと同じようにスイスイと作業が進むとは限らないし、事前準備や慣れにも時間が必要で、そもそも「知らなければならないことがどれだけ有るか?」という根本的なところすら分かっていなかったりする。

そんな質的難しさから始まった開発プロジェクトも、ソースコードの規模拡大と共に量的難しさの比率が高まったいくはずだ。規模が小さいうちはどのような形のコードを書いていても、それなりに動いてしまうものだけど、規模が大きくなるにつれてアーキテクチャ回帰テストの重要性が高まり、そのような支援無しでは小さな仕様変更が直ぐに予期せぬ障害発生につながってしまうことが多い。また、多くの開発者を巻き込んだプロジェクト運営もソースコードの量に比例する形で難しくなってしまうので、何らかの形で改善することが必要となるだろう。

一口に技術的難しさと言ってもいろいろ有るし、他の切り口では別の難しさを表現できるはずだ。自分が、どのような難しさに対処しなければならないのか考える意味で、難しさの本質を理解しておくことは必要だし、開発者間で建設的な議論を進める上では不可欠のはずだと思う。



関連