・はじめに
この記事は最近プロダクトを作る機会があり、最終的には完成までにはいきついたのですが、あまりうまく作れませんでした。そこでなぜうまくいかなかったのかという理由を考えたところ、設計の部分が曖昧で明確にどのようなアプリを作るのかを設計の時点で決め切れていなかったことがうまくいかなかった理由ではないかと考え着いたので、この記事で「設計とはなにか」から設計はどのようにすればいいのかについて書いていきます。・設計とは何か
プログラミングにおける設計とは「どのようなプロダクトを作るのかを計画すること」だと考えています。そしてその設計にはウォーターフォール型であると、「要件定義」、「基本設計」、「詳細設計」に分かれています。・要件定義とは
要件定義とはあるアプリを作る中での機能を決めることです。例えば、ToDoリストのアプリを作成したい時なら、やることをリストに追加する機能、終わったものをリストから削除する機能、やることリストの編集画面の機能やその他クライアントや自分自身が欲しい機能を決めていくことを要件定義といいます。ここの要件定義でどのようなプロダクトを作るのかというゴールを決めることになります。・基本設計とは
基本設計とは機能をどのように搭載するのかを決めることです。ToDoリストで例えるなら、このような画面でここにボタンがあり、このボタンを押すとTodoの追加画面が出てきて、ここから追加できるなどの機能を決めていく段階になります。この段階ではまだプログラミングの知識が無い人や浅い人でも理解できるように作ります。・詳細設計とは
詳細設計とは、機能を具体的にどのように実装していくのかを決めていきます。ここでは設計図の「クラス図」や「シーケンス図」などの設計図を使ってプログラマが実際にそれを見てプログラミングできるレベルに落とし込みます。・設計の重要性
次に設計がどのような点で役に立つ物なのかについてみていきます。・設計の重要な点
①バグを未然に防げる設計をするメリットの1つ目としてバグを未然に防ぐことができることが挙げられます。設計は要件定義を行い、それに基づき基本設計をし、要件定義と基本設計に基づいて詳細設計を行うので機能の搭載のし忘れや設計をしっかりすることによって機能のプログラム同士がぶつかることなどを未然に防ぐことができます。
②プログラミングの保守性を高められる
設計をするメリットの2つ目は保守性を高められる点です。設計の時点でDRY原則や疎結合にすることに気を付けることによって、コードの再利用性が向上し、さらに詳細設計によってどのようなクラスやデータベースを作るのかを決めるので、ロジックを全員の共通認識で実装でき可読性を上げることができます。
・詳細設計を詳しく見る
次にプログラマにとって重要になる詳細設計について詳しく見ていきます。・詳細設計ですること
詳細設計では5つのことを行います。- 基本設計で決めたプログラムの流れをさらに詳細化し、実際にどのように実装していくのかを決める ⇒データの流れや加工の方法を決める。
- データ構造の定義 ⇒データをどのように、例えば配列を使うのか、ハッシュを使うのかなどを決めていく。
- アルゴリズムの設計 ⇒データをどのように流すのか、どのように加工していくのかを具体的に決める。ここではソート、検索、最短経路処理などを行う。
- クラスやメソッドの設計 アルゴリズムを考えてどのようなクラスやメソッドを実装していくかを考える。
- テスト仕様書の作成 このプロダクトだとこのテストが必要などを考えてテストの仕様書を作っていく。
※データ構造の定義の方法
どのようなデータなのかを把握する(データの種類やファイルの大きさなど)
・まとめ
このように設計とは「要件定義」、「基本設計」、「詳細設計」の大きく3段階に分けられ、要件定義ではプロダクトのゴールを、基本設計では「機能の搭載」を、詳細設計では「機能の具体的な実装」を決めていきます。そして設計をすることのメリットとしては①「バグを未然に防げる」、②「プログラミングの保守性を高められる」という大きく2点あります。
最後に詳細設計では①「基本設計の詳細化」、②「データ構造の定義」、③「アルゴリズムの設計」、④「クラスとメソッドの定義」、⑤「テスト仕様書の作成」のこの5つを行います。