筆者には,現役でソフトウエア開発をしていたころから抱いている疑問がある。それは「ソフトウエア開発にとって,どこまでが設計なのか?」ということだ。その疑問は,エンジニアから記者に転職し,さまざまなSEやプログラマを取材するようになって,ますます深まるようになった。

 一般にビジネス・アプリケーションのソフトウエア開発は,設計工程と製造(コーディング)工程に分かれる。ソフトウエア開発者は,設計者(主にSE)とプログラマとに分類され,設計者が書いた「仕様書(設計書)」にしたがってプログラマがコーディングする。仕様書にはさまざまな様式がある。オリジナルなものから,DFD(data flow diagram),ERD(entity-relationship diagram),最近ではUML(unified modeling language)を使う場合もあるだろう。つまり設計とは「設計者が仕様書を書き上げ,プログラマに渡すまで」ということになる。

 確かに,複雑なソフトウエアの仕様を,できるだけ単純なモデルで表現することの重要性は認める。しかし,本当に仕様書だけで,ソフトウエアを作ることができるだろうか。少なくとも筆者は,「仕様書だけですべてのコードが自動生成できた」という話を聞いたことがない。そんなことが可能なCASE(computer aided software engineering)ツールもまだ開発されてはいない。

 プログラマは仕様書を読んで,その“行間”を読みとり,設計工程では予見できなかったコーディング上の問題を解決する必要がある。それが現実だ。特に最近のように技術革新のスピードが速いと,自動コード生成技術より人間のほうが変化に対応しやすい。しかしその分,仕様書がいい加減だったり,あるいはプログラマの能力が未熟だったりすると,必要な機能やパフォーマンスを備えていないソフトウエアができてしまう。

 これは,他のエンジニアリングの世界とソフトウエア開発が大きく違う点だ。例えば工業製品であれば仕様書(設計図)は絶対であり,それさえあれば,同じような製造設備を持ったメーカーなら同じモノを作り上げることができる(もちろん例外はある)。これに対しソフトウエア開発の製造工程はプログラマの能力に依存する。仕様書の内容と完成したソフトウエアが違っている,ということも少なくない。つまり仕様書というのは,設計図としての役割を果たしていない,ということになる。

 仕様書の完成度が低い原因はどこにあるのだろうか。たんに,ソフトウエア開発における要件定義や仕様書作成のノウハウがまだ成熟していないためなのだろうか。

 筆者は最近,問題は仕様書の中身ではなく,むしろ,設計工程の捉え方そのものが間違っているせいではないか,と考え始めている。そのキッカケになったのが,米国のソフトウエア技術者Martin Fowler氏の論文「The New Methodology」(http://www.martinfowler.com/articles/newMethodology.html)だ。氏はこの中で「ソフトウエア開発はすべてがデザイン(設計)であり,製造工程に相当するのはコンパイラとリンカーを動かしているときだけ」と述べている。また「ソースコードこそ仕様書(設計図)。コーディング作業までを設計ととらえるべき」と主張している。

 この考え方は,従来の,設計者/プログラマという関係を根底から見直す視点のように筆者には思える。というのも,多くのプログラマは単純労働者として扱われ,どんなに苦労してコーディングしても正当な評価を受けにくいからだ。実際,「プログラマより設計者のほうが優秀」というイメージが,ソフトウエア業界にはある。かつて筆者は上司に「上流設計だけやれ。もうプログラムは作るな」と言われたことがある。設計者になるのがキャリアパスであり,プログラマは外注すればいいという発想からだ。

 プログラマが設計者になるための通過点に過ぎないのであれば,真剣に仕事をする気にはなれない。優秀なプログラマは育ちにくいだろう。設計者とプログラマの力関係もプログラマが不利なままだろう。モラルハザードやソフトウエア品質の低下という最近話題にされる問題は,実はこのあたりにも原因があるように筆者には思える。

 コーディングまでを設計ととらえ直すことは,硬直した現在のソフトウエア開発を変えるキッカケになるかもしれない。ち密な仕様書を作ることよりも,いかに優れたコードを作るかに視点が変わるからだ。

 プログラマが単純労働者なんてとんでもない。プログラマこそ,ソフトウエアを完成させる“真の設計者”と考えるべきだ。これからは,この視点に立って,人材育成や開発スタイル,プロジェクト管理など,ソフトウエア開発のさまざまな問題に取り組むべきではないだろうか。

(真島 馨=日経ソフトウエア編集)