開発の進め方について考える

Tag:

Laravelによるアプリケーション開発をアジャイル的にするには、どういった流れで開発を進めたらよいか考えてみました。

※Laravelに特化した内容は少ないです。

ユーザーストーリーを集める

例). 
ユーザーアカウントを作成する。

アジャイルサムライ−達人開発者への道−』では、ユーザーストーリー作成するためのテンプレートが紹介されています。

<ユーザーの種類>として
<達成したいゴール>をしたい
なぜなら<理由>だからだ

アジャイルサムライ−達人開発者への道− p.116

取り組むユーザーストーリーを決める

価値の高い順に優先順位を立て、取り組むユーザーストーリーを決めます。

ユーザーストーリーを実現するためのタスク一覧とテスト一覧を書き出す

例). ユーザーアカウントを作成する。
タスク
・ユーザー登録画面を作る。
・ユーザーをDBに保存する。
・入力値の妥当性を検査する。

テスト
・ユーザー登録できること。
・ユーザー情報はDBに保存されること。
・入力値に不備があれば登録できないこと。

設計する

今回取り組むユーザーストーリーに必要最低限な設計をします。個人的には、下記4つの設計を重要視していて、必要に応じてプラスαで設計するといった方針です。

・ER図の作成

・URL設計
(リクエストを投げると、サーバ内でどんな処理が行われ、どういったレスポンスが戻ってくるか考える。)

・システム構成図

・ペーパープロトタイプ or 
Excelによるプロトタイプ作成(他のサイトからパーツ切り取って貼り付け)

URLごとにどういった振る舞いをするかテストを作成する

ブラックボックスなテストですね。

テスト駆動開発をする

まず、システム内部で必要な「タスク一覧」と対応する「テスト一覧」を書きだします。

この時、システム内部の上のレイヤから徐々にタスクを抽出していくやり方がやりやすいと感じています。例えば、私は、Laravelで以下の設計を採用しています。

レイヤ メソッド例
(動詞、または動詞+名詞となるように命名)
Middleware グローバルミドルウェア
ルート定義ミドルウェア
コントローラのコンストラクタ定義ミドルウェア
Requests rules
Controllers index
show
create
store
edit
update
destroy
など
Services getXxxByXxx
store
updateXxx
save
find
count
destroy
confirm
など
Repositories
Eloquent リレーションメソッド、scopeXxx、setXxxなど

個人的には、上のレイヤからタスクを考えていくやり方がやりやすいです。

その後、1つのタスクを選び、以下の手順でテスト駆動開発していきます。

1. テストを書く

1. 事前条件を満たすための準備
 1-1. 事前状態を作る(※1)
 1-2. 操作に必要な引数の準備

2. 操作をする

3. 事後条件を評価する
 3-1. 戻り値、例外といった出力を評価
 3-2. 副作用がある場合、事後状態を評価(※1)

※1
DB、セッション、キャッシュ、ファイル、グローバル変数などの状態

2. ユーザの言葉を意識してコードを書く

変数やメソッドの命名で気を付けること

ループカウンターはiから($i, $j, $k)
抽象的より具体的な名前にする。
生存期間が長いほど、名前に情報を詰め込む。
定数の場合は大文字にする。
品詞を意識(自動詞と他動詞の違いも意識)。

3. テストを実行する

スポンサーリンク