業務システム開発でドキュメントを作ることについて

by tanabe on May 15, 2008

職場でここ3〜4ヶ月の間、システム再構成のためのドキュメント化プロジェクトというのを進めてきた。その中で『ドキュメントを書く』ということに対する意識が随分自分の中で変化したので、メモしておく。

まずは経緯から。

そのシステムは、いわゆるレガシーなシステムで、十数年来の歴史を持つ。これまで基盤が多少変わることがあっても基本的にソフトウェアアーキテクチャ(どのような単位で機能をモジュール化するか、どのように機能を抽象化し変化に対して柔軟にするか)に変わりはなく、作った当初の設計にツギハギしてメンテナンスを続けていた。

元々は、一体何をすれば増員以外の手段で開発量を上げられるかということを議論していた。現行のアーキテクチャのままでは求められる開発期間とバージョンアップのサイクルに対して近い将来限界を迎えることが明白であったためだ。

今のアーキテクチャや設計に問題があり、メンテナンス性を大いに損ねているという点では全員の意見が一致していたが、はたしてそれをどうするべきかという話になると、「そうは言っても、全体の仕様がわからない」「正解となる姿がアプリケーション自身しかないので困る」といった意見が出て先へ進まない。

そこで、それならその全体仕様がわかるドキュメントを作ろう、ということでドキュメント化プロジェクトが始まった。

次にプロジェクト開始時点でのぼくのドキュメントに対する考え方。

けっきょくへたくそな設計書こそが諸悪の根源なんだよ。仕様を失いそうなら、失わないようなコードを書く。仕様書としてまとめて管理したいようなものはコードをまとめる。だって、それこそがメンテのネックとなるようなルールやデータなんだから。

プログラマが自分のためにやっている実践的な工夫(内部用のメモ・ドキュメント)っていうのは、まさにもっとも貴重なノウハウの塊みたいなものなんだから、それこそがコードやデータ、データ構造で表現されている必要があるんだよ。

あとは適切な名前をつけることに注力したり、コメントでサポートしたりしていくべきなんじゃない?

というようなとにかく大事なものはプログラムで表現してしまえ、というものだった。

そして、約90日間ほどコードを書く人や書かない人や書けるけど不得意な人とほぼ毎日一時間の議論をした結果、今ドキュメントについて理解していること。

  • ドキュメントを作る目的は、書くことでも読むことでもない。レビューすることを通じて、互いの理解の差を埋めることが目的である。
  • ドキュメントに必要な内容はチームの成熟度、メンバーのスキルによって異なる。
  • ドキュメントを作るというのはプロジェクトの文化を作ることの一面であり、ドキュメント作成というツールを使って、文化やスキルレベルの違う後続のチームメンバーをトレーニングしていく活動である。(その意味ではスキルが上位の人もトレーニングの対象となる。)

だから、この視点から考えると、

  • コードがドキュメントかどうかは関係ない。「コードがドキュメント」というときのコードはドキュメントの一つの形といえる。(たまたまコンパイルも可能であり、情報が DRY に管理できるというメリットを持っている)だから、コードがドキュメントと言える環境が整えば、それは真になるし、整わなければそれは単に独りよがりなドキュメント不足のプロジェクトだ。
  • ドキュメントを作るとは、標準化することではない。マニュアル化することでもない。
  • ドキュメントを書くことと人に説明すること、フィードバックを受けることはワンセット。

この考えに立ったときの難点は、「ドキュメントとはこうあるべきだ!」という絶対的な指標を示せない点。その代わりに薦める考え方は「まずは何か書いてみて、隣りの人に説明をして意見を聞いてみたら?」というもの。レビューを通じて受けたフィードバックは、「ドキュメントに盛り込む内容のスコープ(広さと深さ)」と「ドキュメント自体の内容」、さらに「システム開発に対する考え方」を常に更新し共有していく。

書いていると当たり前すぎる内容だし、もちろんこれだけで良いドキュメントが書けるかというとまったくそんなことはないのだけど、考え方の基本として自分の中で大きな転換だったのでメモしておく。

業務システムの開発の中で、ドキュメントほど一般的な問題でありながら適切な解が出ていないものはないと思うのだけど、他の人たちはどんな風に考えながら、どういうドキュメントを書いているのかなぁ。(SOX だとか、プライムからの強制フォーマットだとか、いろいろな視点があるとは思うけどさ。)



この記事へのトラックバック
これはすごい。よくここまで言葉で説明しきったなあ。 ・ ドキュメントを作る目的は、書くことでも読むことでもない。レビューすることを通じて、互いの理解の差を埋めることが目的である。 ・ ドキュメントに必要な内容はチームの成熟度、メンバーのスキルによって異なる。
業務システムのドキュメントは誰のために書くか【aikeの日記】at May 16, 2008 02:59
「「プログラム設計書」って必要?:おごちゃんの雑文」とか 「業務システム開発でドキュメントを作ることについて:満足せる豚。眠たげなポチ。」とか読んでいろいろ思い出しつつ纏めてみようかと思い立ちました。自分の中でこの辺りのことを考え出すきっかけになったのは
表現の手段と交換の手段【淀みに浮かぶうたかた】at May 18, 2008 09:57
この記事へのコメント
http://www.jsa.or.jp/stdz/edu/pdf/b1/1_06.pdf
を読んでみてはいかがでしょうか?
Posted by っき at May 15, 2008 11:39
うーん、おもしろいですね。枝葉の話だといろいろありますが、P7〜あたりの意図の部分ではなるほどと思います。あと P13 も興味深い。その意味では、ぼくの書いている「ドキュメントを作るとは、標準化することではない。」は必ずしも正しくないですね。

ぼくがアホだということもあるんですが、このようなある程度の量の文章をまとめて眺めたときに、字面上の直接の意味はわかるのですがその背景の意図をしっかり咀嚼できていない部分があります。そして、ぼくの場合はその咀嚼できない分をチームの他のメンバーと意見をぶつけることで埋めているんでしょうね。

Posted by tanabe at May 15, 2008 18:21
この PDF のようにまとめて意見を言う人はさすがにいないですが、話の中で断片的にはここに書かれているような意見も挙がるのですね。そうすると、

『っきさんは、社内標準化と TQM をおそらく一つの目指すべき形として提示してくださったのだと思うんですが、どういう点が役に立つと思います?

組織として競争力を高め、業績を維持・向上させるために、果たしてどれほどの「文書化」が必要・十分か、原点にかえって何のための「文書化」であるかを考えることが重要。

って書いています。これはもちろん賛成なんですけども、じゃあ、実際うちにとっての「必要十分」って何でしょうね?』

みたいな話を延々として、結果として次に書くドキュメントの質が少し変わっていたりするんです。


一読してみて、また視点が増えました。やっぱり色々な方の意見を聞くのはおもしろいです。ご紹介どうもありがとうございました。

Posted by tanabe at May 15, 2008 18:22