製造(プログラミング・コーディング・実装)
製造では、詳細設計で設計したプログラム仕様を元に、実際にプログラムを作る。製造のほかに、プログラミング、コーディング、実装と呼ぶこともある。狭義ではそれぞれの意味が異なるが、プログラムを作成する、という意味では同じと考えてよい。
インプット | アウトプット |
|
|
プログラマは詳細設計書や、データベース定義を元にプログラムを作成することになるが、仕様の通りに製造することが求められる。仕様の通りに作らずに、自分の好みや解釈で作ることは論外である。また、詳細設計やデーターベース定義の矛盾に気付いたら、その問題を解決した後にプログラムの作成を再開するべきである。
なお、プログラマの自由度が高く、プログラマの裁量で製造を進めていく状況は往々にしてある。しかし、このような状況は、上流フェーズからのインプットに基づいた作業に反している。単体テストでバグが見つかった場合、設計バグなのか製造バグなのか、きちんとした分析がしにくい。責任分解点を明確にする意味でも、詳細設計に基づいた製造を徹底しなければならない。 こういった状況は、詳細設計者と製造者が同一である場合が非常に多い。それゆえ、詳細設計フェーズと製造フェーズを分けずに一つの開発フェーズとして扱い、あるプログラムの詳細設計から製造までを一貫して担当する風潮がオンサイトでは多く見受けられる。そして、製造者と単体テスト担当者も同一であることが多く、バグを見落とす原因となっている。
システム開発の本質=顧客の要望の具現化
要件定義書には、顧客がシステム化したいビジネスモデルの全体像を記述する。システム的な仕様は抽象的で良いが、顧客のビジネスモデルは具体的なイメージにしておく必要がある。システム開発全体の根本的な仕様は、要件定義フェーズで決定され、以降の開発フェーズでも、元を辿ればこの要件定義に基づいた開発を行うからである。したがって、要件定義で顧客企業が求める内容とは真逆の要件を定義してしまった場合、要件定義をゼロからやり直さなければならない。そして、そのようなミスを許す顧客企業は存在しないだろう。
プログラム
プログラムというとJavaやC言語などで作成し、コンパイルした結果、生成される実行ファイルやライブラリをイメージする方が多いかもしれない。しかし、プログラムはコンパイルの如何に限らず、 PHPやシェルスクリプト、JavaScriptなどのスクリプト言語によるコードもプログラムと言える。さらには、HTMLやXMLで記述されたコードも、プログラムである。
システム開発の本質=顧客の要望の具現化
プログラマは経験と知識がものを言う、と聞くことがあるが、そうではない。前述と重なるが、プログラマに必要なのは、プログラムの文法などの基礎知識である。基礎知識以外の能力でプログラムに差が出るのは、その詳細設計の品質によるものである。 もっと言うならば、経験によって差がつく業務などは、存在してはいけない。業務内容は全て標準化されていることが必要で、誰が担当しても同じ水準の成果が出るような、開発プロセスの確立が最も重要なのである。 例えばJavaプログラムを書くとき、メモ帳で一から記述していくプログラマなどはいない。それは、 Microsoft Visual Studio や Eclipse などの、開発統合環境が存在し、これらのツールを使うことによってプログラマの技術の差を補完してくれるからである。これはプログラミングに限った話ではなく、上流工程でも業務の標準化が進んでいる。個人的には、将来はプログラマという職業そのものの需要が激減するのではないかと予想している(それはつまり、IT業界が下火になるという意味でもある)。