見出し画像

詳細設計はコードの翻訳である

システム開発の工程は
要件定義⇒基本設計⇒詳細設計⇒製造⇒単体テスト⇒結合テスト⇒ユーザーテスト⇒リリース
という順序を辿ることが一般的です。
詳細設計についてお話ししましょう。

コードの翻訳って何のことなの

詳細設計は設計というよりコーディングに近いことをします。
例えばこういうプログラムを作るとします。

・個人情報を登録する関数を呼び出し、個人モデルを渡してDBに登録する。
・次画面の情報を取得する関数に個人モデルを渡して、次画面モデルを取得する。

プログラムではこんな感じになると思います。

// 個人情報モデルを渡して個人情報を登録する。
personDao.insertData(personModel);
// 個人情報モデルを渡して次画面情報を取得する。
NextPageInfo nextPageInfo = nextPageDao.getNextPage(personModel);

詳細設計はこのコードを省いたコメントの部分です。

個人情報モデルを渡して個人情報を登録する。
個人情報モデルを渡して次画面情報を取得する。

わたしが以前いたところで、Excelの1シートが1ファイル分の仕様書となっていて、そのシートにあるボタンを押すと、記述した部分が書かれたファイルが出力され、後は記述した部分をコメントにして、コードを入れるだけでした。

コメントだけで流れを記述して、後にコメントに合わせてコーディングする。詳細設計がコードの翻訳としているところです。
もちろんコーディングだけでなく、ファイル名や関数名、定数、コード値など決めるべきところもあります。

最近はオフショアなど、設計とコーディングの現場が別々となる場面が増えてきました。コーディングができる資料こそが詳細設計なのです。

詳細設計なんてわざわざするより、すぐコーディングしてしまえば?

実際に詳細設計をしないでコーディングを行う現場もありました。
確かに詳細設計の工程分スケジュールを前倒しにできます。

それはよほどの経験者が揃っている場合であって、経験の浅いメンバーがいる場合は一度全体を俯瞰するために詳細設計をしたほうが早かったのではないかと思う現場はいくつもあります。
詳細設計は提出物を作るためにする工程ではないのです。

では詳細設計の効果とは何でしょう。

データの出所をはっきりする

DBに登録するデータや画面に表示するデータはもちろんどこからか持って来なければなりません。
”年齢を表示”と書けば勝手に年齢が出る訳ではなく、”前画面で入力した生年月日を基に年齢を算出して表示する”としないとコーディングできないのです。

更に「Aというデータを作るためにBというデータが必要だが、Bを作るためにはCが必要。」とか、「Dというデータは前画面のデータから作り出せるので、DBから取得する必要はない。」ような、いくつかのデータが絡み合う場合、適切な処理を選び出す必要があります。

基本設計でもデータの流れは注意しましたが、詳細設計でのデータの入出力の整合性が取れないことは、すなわち動かないということなのです。

共通の処理はまとめよう

プログラムは小さく作って積み上げろ」でも書きましたが、同じ処理を別々に書くことは好ましいことではありません。
詳細設計の工数より初期のコーディングやテストで別々にする工数が小さいので軽視しがちですが、片方だけ直って片方そのままというバグのリスクはそれだけの工数を吹き飛ばすインパクトがあるので、リスク回避の意味で詳細設計は重要になります。

別々にコーディングした場合、なかなか他の人が作る処理を見ることはあまりありません。
処理をすべて書き出したうえでどの処理とどの処理が同じなのかを見ないと、共通処理を抜き出すのはなかなか難しいです。

要件以外のことも取り決める

システム開発は要件をカバーすればよいというものではありません。利用者の操作やプログラムのバグなどでイレギュラーな動作をすることになります。

イレギュラーな動作をしたとき、どう被害を抑え、以降起きないように救っていくかを考えなければなりません。そのために、プログラムに様々な仕掛けを散りばめておきます。

例外処理やログ出力、排他処理やセキュリティ対応です。これらをどう仕掛けていくかを詳細設計で取り決めます。
特に複数人が開発する場合、これらの仕掛けは全体的に共通の方針が必要です。共通の認識下において設置されているかを確認するためにも、詳細設計が必要なのです。

詳細設計の役目

詳細設計の効果と必要性を感じてもらえたでしょうか。詳細設計の役目とはつまり「完成させた後に作る。」というところにあるのだと思います。コーディングが始まってから方針を修正するのは、実はとても大変なのです。

開発者の分かる文章に書きだして、細かい流れや全体の構成を見直して、理論上は動く。ただまだ作っていないだけ。そういう状態に持っていくのが詳細設計なのだと思うのです。

この記事が気に入ったらサポートをしてみませんか?