ここでは、ソフトウェア開発者の開発の負担を減らすことを目的にソフトウェアの開発手順をまとめていきます。ちなみに、お仕事を探している方に向けて、「フリーランスエンジニアのエージェントにおすすめのプラットフォーム」を紹介しています。よろしければご覧ください。
ソフトウェア開発手順1.開発手法を選択する
まず、ソフトウェア開発を始める際にはソフトウェアの開発手法を選択するのですが、開発手法にはいくつかの種類があります。
例えばスクラム開発などの短期間でソフトウェアを開発して定期的にリリースをするアジャイル開発や上流から下流工程まで一直線で後戻りはしないウォータフォール開発などがあります。
企画をする
企画をします。例えば、以下です。
パソコンを利用していて欲しいと思ったサービス
特に作りたいソフトウェアがない方は、パソコンを利用していて自分があったら便利や面白いと思ったサービスなどを作ってみるといいでしょう。
なぜかというと、ソフトウェア開発に対してモチベーションが上がるからです。あったら便利ということは、現在そのようなサービスが無いということで、自分の欲求が不満ということです。
それを作れば自分の欲求が満たさせるので容易に期待を想像可能でモチベーションが上がります。
要件定義をする
続いて、要件定義をします。この工程は顧客の要件を明確にするために必要なもので個人開発ではあまりやりません。個人開発の方は下の【設計する】まで読み飛ばしてください。
要件定義の手順
要件定義の手順です。
- 要望を聞く
- 現状の課題
- ゴール
- 現状とゴールのギャップ
- 要求を聞く
- 企画の背景
- 課題解決に必要なシステムの概要
- 具体的に実装したい機能一覧
- 検討する
- 技術的に開発可能か
- 予算はどの程度必要か
- 納期はいつ頃になるか
- 提案する
- 実装できる機能
- 請求する金額
- 納品できる期日
- 要件
- システムに実装する機能一覧
- 納期、請求
設計する
続いて、設計します。
設計の手順
- 要件定義で作成した機能一覧を閲覧できる状態にしておく
- 基本設計書(外部設計書)
- 画面設計(ノンデザイナーズ・デザインブックの「近接」「整列」「反復」「コントラスト」)
- 画面遷移図
- Excelを開く
- 画面レイアウト図
- アクション明細
- 入出力項目
- 画面一覧図
- 画面遷移図
- 機能設計
- 機能一覧表(コード一覧)
- 見積
- 契約
- 詳細設計
- 各画面レイアウトに対応する機能を記述
- 裏側の処理
- 機能名
- 処理内容
- 処理に必要なデータとデータの取得元
- 画面から入力
- DBから取得
- システムインターフェイス
- 処理したデータの受け渡し先
- 画面表示
- DBへ保存
- 裏側の処理
- 機能設計と画面遷移図を関連づける
- 機能一覧表(コード一覧)
- データ設計
- エンティティを抽出
- 物理的なもの
- 概念的なもの
- エンティティの定義(テーブル定義書)
- キーの決定
- 属性の決定
- 正規化
- 第一正規化
- 第二正規化
- 第三正規化
- ER図の作成
- 設計書記述様式を書く
- マスターテーブル
- CRUD図の作成
- データの流れ
- データベースと画面遷移図の関係(画面設計・機能設計・データ設計)
- 詳細設計
- サーバーサイド言語の実装手段書
- フロントエンド言語の実装手段書
- エンティティを抽出
- セキュリティ設計
- インフラ設計
- 業務フロー(業務の場合)
- 業務フロー図の定義を決める
- 業務に必要な部門を設定する
- 業務に必要な処理をおおまかに決める
- 処理を線でつなぐ
- 詳細が必要な部分を増やす
- 画面設計(ノンデザイナーズ・デザインブックの「近接」「整列」「反復」「コントラスト」)
プログラミング
続いて、プログラミングします。
知っているとプログラミングの効率化になること
- プログラミング界隈の悪習
- プログラムのアンチパターン
- コーディング規則
- Gitを利用してバージョン管理する
プログラミング界隈の悪習
プログラミング界隈の悪習には、カーゴ・カルト・プログラミングなどがあります。
カーゴ・カルト・プログラミングとはWikipediaでは以下のように定義されています。
実際の目的には必要のないコードやプログラム構造を儀式的に含めるという行動
カーゴ・カルト・プログラミング(Wikipedia)
プログラミングの手順
プログラミングの手順1.プログラミング言語の選択
まず、ソフトウェアの要件に適しているプログラミング言語を選びます。WEBソフトウェア開発界隈においてはプログラミング言語は、フロントエンドとバックエンドに分けて選択します。
フロントエンドの効率的な制作手順
- フロントエンドに使用する言語の仕様を理解する
- HTML
- CSS
- Javascript
- ワイヤーフレームを利用する
バックエンドの効率的な制作手順
- 使用する言語の仕様を理解する
- 関心の分離をする
その他の手順
- プログラミング技法を選択
- プログラミングで大切なこと
- アルゴリズムを考える
- 移植性を保つ
- 依存性の注入をする
- オブジェクト指向言語
- クラスをインスタンス化する。それをインスタンス変数に格納する。
- インスタンスメソッドはインスタンス化しないと使用できない
- 委譲する
- アクセサ
- インデクサ
- 継承したクラスのメソッドを上書きしてオーバーライドする
- オブジェクト型
- プログラミングで大切なこと
- コーディング
- テキストエディタでコードを書く
- オーサリングツールでコードを書く
- フレームワークを選択
- VIEWの作成手順
- サイトの方向性を決める
- サイト構造を決める
- メイン
- ヘッダー
- フッター
- マークアップ言語
- HTML
- XML
- スタイルシート
- CSS
- クライアントサイド言語
- javascript
- アルゴリズムを組む
- 構文を使用する
- 演算子
- 型システム
- 型変換
- 変数
- 配列
- 関数(引数:入力)
- 入力データの取得元
- ユーザー
- データベース
- API
- 順次
- 選択
- 反復
- 配列をイテレータで繰り返し処理をする
- 戻り値(出力)
- Api作成
- json
- 入力データの取得元
- 構文を使用する
- コンパイラやインタプリタでソースコードを機械語に変換する

テスト
続いて、テストします。
実働とともにソフトウェアインスペクションする
実働とともにソフトウェアインスペクションします。
運用(リリース)する
運用します。運用は現在は主にクラウドで行います。例えば、Amazonが提供しているAWSやGoogleが提供しているGCP、Microsoftが提供しているAzureなどがあります。
保守する
保守します。保守は自分で利用していて追加したくなった機能や自分以外のユーザーの需要が多い機能などを追加してアプリケーションをより便利にする工程です。
例えば、使いづらい見づらいのUIを変更したり、アプリケーションにおける作業の短縮が出来るツールなどを追加していきます。
顧客のニーズに対応する
顧客のニーズに対応します。
最後に
今回はソフトウェアの開発手順を解説しました。最後までご覧頂きありがとうございました。