わたしのソフトウエアの作り方
わたしのソフトウエア開発の方法についてご紹介したいと思います。
多少なりとも皆さんの参考になれば幸いです。
1.要求事項を認識する
見出しの様に書くと大層なことのようですが、実は大したことではなく、ソフトウエアで解決したい問題は何かを明確にすれば良いのです。
ガッチリとした定義書みたいにしなくて構いません。関係者間で大きな食い違いがなければOKです。
ただ1つだけお約束があります。
問題が解決したか/しないかを判定する基準を決めたおく事です。
注意 決めた事はメモで良いので書き残しておきましょう。人の記憶は時間と共に変質してしまうので。
2.問題の解決方法を考える
次の作業は、問題の解決方法を考えることです。
何をどの様にすれば問題が解消できるかを考えます。
この時に注意する点があります。
あくまで方法を考える事に注力することです。
どんなコードを書くかとか、クラス構成だとか、データ構造とか。
特にソフトウエアに関わる内容には触れないように注意してください。
プログラマは無意識にプログラムで物を考えてしまいがちです。
この段階でソフトウエアに触れないのには理由があります。
問題解決の方法(仕組み、あるいは、段取り)と方法の実装方法を考えることを分けるためです。
この2つは脳の使い方が異なるので、同時にやると脳のパフォーマンスが落ちてしまいます。
脳のパワーを一つことに100%集中させましょう。慣れないうちや若手エンジニアは意識的にチェックしないと方法を考えているつもりがコーディングしていたなんてこともあるあるです。
ここでも検討した結果は書き残しておきましょう。
3.機能をソフトウエアの処理に分解する
さて、いよいよソフトウエアの設計に入ります。ここは、さらに細い作業に分かれますので、小項目に分けて書いていきます。
3.1.コンポーネントを見つける
まずは検討した解決方法に必要なコンポーネントを見つけます。
慣れてくると感覚的に見つけられるようになるので、うまく言語化するのが難しいのですが。。。
私の場合は、大体こんな風に考えているらしいです。
問題の解決方法に出てくる重要な"情報の塊"を見つける。大体、4-5個くらいでしょうか。
見つけた"情報の塊"を保持するモノをコンポーネント(クラス)として仮置きする。
仮置きしたコンポーネントを繋いで問題の解決方法を表現する。
うまく解決方法を表現できない場合は、コンポーネントのつながりを変えたり、情報を処理用のコンポーネントを作ったりして調整を行います。
※文章だけではうまく表現できないので、別の記事としてまとめていと思います。
すごく曖昧な表現となってしまいましたが、こんな感じでやっています。この時、頭の中だけでやると混乱の極みとなるので沢山の図を描いています。
図を描いたり消したりしているので、ホワイトボードにマーカーで書いたり、紙と鉛筆(シャーペンやフリクションボールペンなど)で、すぐに消せる筆記具を使っています。
汚い字でかいているので他人には判別できないと思いますが、自分の脳内を見える化して考えているのでOKです。
一通り、納得できる形になったら、綺麗(他人が読める程度という意味です。)に書き残しておきます。
3.2.コンポーネントの役割を決める
検討したコンポーネントの内容を見て、適切な役割を決めます。決め方としては「○○するコンポーネント」のように一言で言い表せるのが良いです。前の作業で上手くコンポーネントができていれば直ぐに良い表現ができるはずです。
もし、「○○と○○をする」とか「○○計算処理」とか曖昧な説明しかできないとしたらコンポーネントが適切ではないので3.1.に戻って検討し直します。
上手くまとめられたら3.1.で書き残した資料に追記しましょう。
4.決まった内容をプログラミング言語で表現する
ここまで来れば、後は所謂、コーディングです。
前の工程でできた資料をプログラミング言語に翻訳します。
そうです。ここでは翻訳作業に集中します。
これまでに検討した内容を変えてはいけません。
所謂、設計は3.までで終わりです。建築に例えるとできている図面を現実のモノとして実現するのがこの工程です。
設計士が書いた図面と異なる建物を大工さんが作ってはいけませんよね。
もし、設計上の問題が見つかったら、3.の工程または、それ以前からやり直すべきです。
ソフトウエアの場合は、つい図面と異なる建物を作っちゃって、大失敗を起こしてしまいます。
(デスマーチの開始です。)
5.まとめ
以上、大雑把ですがソフトウエア開発の流れを書いて見ました。具体的な作業手順レベルでの記述ではないのでぼんやりとしかイメージできないと思いますが参考になれば幸いです。
どこかで具体的なノウハウとしてまとめたいと思います。
この記事が気に入ったらサポートをしてみませんか?