watermint.org

Takayuki Okazaki's blog

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - 開発プロセスについて思うこと、その2

今度はドキュメントに関する話題です。佐藤さんのブログによると、ドキュメントは不要、最小限に。とのことで、これは同じくそう思います。というか、そうあってほしいと願っていますが、なかなかそういう訳にも行きません。

佐藤さんは今回のブログ・エントリでは触れられていませんが、 今後の潮流としては開発の現場にも内部統制がはいってくるということがこのドキュメントを残すという、エンジニアのあまりやりたがらない作業を法令等によって強いられることになります。

今回、佐藤さんはドキュメントの役割は「人に伝えること」 をドキュメントの主な使命とされていますが、内部統制という視点から見れば「監査あるいは内部統制の証拠」としての使命を負うことになります。内部統制がどの程度開発の現場にはいってくるのかは不勉強のため今はわかりませんが、少なくとも開発から本番への移行は必ず別の担当者が行わなければならないとか、そういったルールがはいってくるでしょうし、勘定系や基幹系のシステムであればそのシステム仕様書と実装に矛盾が無いかなどの監査を受けることになるかもしれません。

ところで近年、開発の現場ではウォータフォールの反省あるいは、様々な開発支援ツールを導入することによって積極的にドキュメントを作成する工数を減らそうという動きがありました。たとえばJavaであればそのAPI仕様をソースコード中に記述し、javadocという形式のドキュメントが自動生成できるようになりました。また、JavaのソースコードからUML表現を相互に同期をとれるような、たとえばNetBeans Enterprise Packとか、ツールも安価あるいは無償で手に入るようになりました。

また、あるいはその逆にWordやExcelで作ったドキュメントをもとにJavaソースコードや設定ファイルを生成するようなソフトウエア、たとえばキヤノンソフトウエアのWeb Performerなど、も数多く存在するようになりました。

この二つのアプローチは「ドキュメントを作成する」という工数を確実に自動/半自動化することを可能にしました。 佐藤さんの言うような「実装者の意思を設計者に伝える」という種類のものは前者の「プログラムからドキュメントを生成」というアプローチ、また「顧客の意思を設計者に伝える」という種類の物は後者の「ドキュメントからプログラムを生成」というタイプのアプローチによって自動/半自動化することが可能になってきました。

ところが、たしかにこのような潮流によって主としてメンテナンスしなければならないドキュメントが減ってくれることを期待していましたが、現実をみれば実際には重複した内容のドキュメント、冗長あるいは不必要なドキュメントは未だに氾濫しており、ドキュメントを作成し、探し出し、利用するための工数は実質的ほとんど減っていません。

この問題の原因と考えているのはドキュメントがどういう目的で、誰に読ませようとしているのかが不明瞭である状態のまま作成され続けているというところです。この傾向は知る限り日本においては顕著です(せいぜい英語がぎりぎり読めるぐらいなのでそれほど多くの国の事情を知っている訳ではありませんが・・・)。

たとえば日本でよく見かけるドキュメントの「はじめに」の章は形式的な挨拶が書かれている程度でそれ自体無くても不都合のない場合がほとんどです。このため、たとえば対象読者をプロジェクト全員に広げてしまい、実際に読むのはJavaに詳しいエンジニアであるのにも関わらずJavaの基礎を延々と説いているというような無意味なドキュメントが作成されてしまっています。一方、欧米のドキュメントでは最初の章に「ドキュメントの利用目的」「ドキュメントの対象読者」「ドキュメントの前提としている事柄」といったことが記述されており、それに続く内容も整合性がとれた物になっています。

そういった意味で、実際のところ開発プロセス云々の前にドキュメントの作り方自体が間違っていると言わざるを得ないと思っています。ぜひとも、開発プロセス云々の前に「理科系の作文技術」でも読んでもらいたいと思うシーン幾度か経験したことがあります。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - 開発プロセスについて思うこと

オープトーンの佐藤さんのところでオープンソースで開発プロセスを作られているそうです。でもちょっと違うな、と感じるというか、もはや口出しできる状態ではないような気がするのでこちらからコメントさせていただこうと思います。

アジャイルは「変化に強い」という幻想

「変化に強いプロセス」というのは存在しないと思っています。アジャイルも、RUPも決してその性質として「変化に強い」ということは無くて、偶発的に「変化に強く見えている」ということにすぎないというのがその考えの根拠です。
本来、プロセスはその意味通り、一連の決まったやり方によって作業なりをこなすことであって、そもそもプロセス化可能であるというのは既にその作業について一定の経験の蓄積があってこそできるのであって、「変化に強い」というのはそもそもプロセス化されていないということにほかならないためです。

アジャイルやRUPが「変化に強いように錯覚されている」のは、ウォーターフォールのような旧来のプロセスに比べて最終コストが低く抑えられたためだと思うし、「最終コストが低く抑えられた」ことを「変化に強い」という解釈をするのは生兵法は怪我のもと、なんて言いたくなるぐらい。

足して二で割るという危険さ

プロセスは、消しゴムと鉛筆をくっつけたら便利になった!というような、成果物を作る過程において素材を足して二で割るのと違い、その作業過程には大きなリスクが混じり込むように思います。

たとえばソフトウエア製品を思い出していただければわかりやすいと思うけれど、ソフトウエアというのは、それ自体一連のプロセスとなっていて、あるソフトウエア2つをくっつけて一緒にするという作業を想像したとき、例えばWordとExcelを完全に一つのソフトウエアとして統合する、という作業を想像してみると、たとえばWordとExcelはそれぞれ成熟したソフトウエアであって、巨大なプロセスの集合体です。それらを統合しようとするのであればファイル形式から利用形態まですべてを抽象化した上で統合しなければ、上っ面だけ統合された(例えば昔ならMS Worksなんてのがありましたが)ソフトウエアになるだけであって、それは統合された、というよりは集約された、というだけに他ならないように思うからです。

プロセスを集約する、という作業自体が無意味であるという訳ではないけれども、そのアプローチは潜在的に分裂も容易である、と思えるし、そう陥ればこのプロジェクトは求心力を失いかねないし、一枚岩ではないものでは訴求力も分散する危険性を感じるためです。

権利関係について

この開発プロセスはオープンソースを謳っているものの、仮に深意は無いとしても制約が大きすぎるように思います。たとえば権利関係についてのページの次の項目(2006年8月22日時点)。

本プロセスならびにプロセス内の雛形集は商用・非商用に関わらず
自由に使用することができます。ただし、本プロセス自体ないし、
改変を加えたものを商品として販売することはできません。

とのことですが、プロセスの販売を禁じるのは結構厳しいかと。最悪、GPL汚染呼ばわりされかねない危険性があるように思いますがいかがでしょう。たとえば、SIであるA社が顧客であるB社に対しこのプロセスにA社のノウハウを詰め込んだ上で提供しようとしてもできない可能性があるのでは?