開発プロセスの改善について

<h1>開発プロセスの改善について</h1>

<h2>目次</h2>
<ul>
<li>よくある開発プロセス</li>
<li>改善後の開発プロセス</li>
<li>よくある開発プロセスから改善後の開発プロセスにするメリット・デメリット</li>
<li>よくある開発プロセスから改善後の開発プロセスにするには</li>
<li>よくある開発プロセスから改善後の開発プロセスにする際の段階ごとの変更</li>
<li>結論</li>
</ul>

<h2>よくある開発プロセス</h2>

<p>以下は、よくある開発プロセスだと思う。今回はこれに一石を投じてみたい。</p>

<p>要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>実装</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト試験項目書作成</p>
<p>↓</p>
<p>単体テストレビュー</p>
<p>↓</p>
<p>単体テスト</p>
<p>↓</p>
<p>結合テスト試験項目書作成</p>
<p>↓</p>
<p>結合テストレビュー</p>
<p>↓</p>
<p>結合テスト</p>
<p>↓</p>
<p>総合テスト試験項目書作成</p>
<p>↓</p>
<p>総合テストレビュー</p>
<p>↓</p>
<p>総合テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h2>改善後の開発プロセス</h2>

<p>以下は、改善後の開発プロセスである。</p>
<p>以下のことが実現されている。</p>
<ul>
<li>テストファーストの実現</ll>
<li>自動テストの導入</li>
<li>テスト駆動開発の導入</li>
<li>ペアプログラミングの導入</li>
<li>ペア要件定義、ペア設計の導入</li>
<li>リファクタリングの導入</li>
<li>継続的ビルドの導入</li>
<li>ストーリーの導入</li>
<li>CLEANコードの導入</li>
</ul>

<p>ペアストーリー作成</p>
<p>↓</p>
<p>ストーリーレビュー</p>
<p>↓</p>
<p>ペア総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>ストーリー削除</p>
<p>↓</p>
<p>ペア結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>[繰り返し]</p>
<p>ペア単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング(Clean Codeを教える)</p>
<p>↓</p>
<p>リファクタリング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>継続的ビルド</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h2>よくある開発プロセスから改善後の開発プロセスにするメリット・デメリット</h2>

<p>メリットは以下である</p>
<ul>
<li>デグレが減る</li>
<li>開発者が自動テストというセーフティネットの中で開発できる。つまり、バグが減るし、開発者の心理的安全性が上がる。</li>
<li>開発速度が上がる</li>
<li>早期にバグを発見できる</li>
<li>作りの共有が開発者間で出来る</li>
<li>仕様の共有が開発者間で出来る</li>
<li>認識不足によるバグが減る</li>
<li>要件定義の段階でミスが減る</li>
<li>設計の段階でミスが減る</li>
<li>ソースコードの保守性が高いままになる</li>
<li>ブランチの管理をしなくていい</li>
<li>要件がより明確になる</li>
<li>ソースコードの保守性が更に高い物になる</li>
</ul>

<デメリットは、以下である>
<ul>
<li>これまでと同じ方法で開発できない</li>
<li>一時的に開発ペースが落ちる可能性がある</li>
<li>マネージャーや経営層を納得させるのが大変</li>
</ul>

<p>メリット・デメリットだけ見るとメリットの方が大きいように見えますが、最後のデメリットがとても大きいのが分かります。</p>

<h2>よくある開発プロセスから改善後の開発プロセスにするには</h2>

<p>技術的にはそれほど問題にはならない。</p>
<p>せいぜい、自動テストの箇所くらいが問題となるくらいである。</p>
<p>それ以上に、マネージャーや経営層への調整が大変になる</p>
<p>なぜ、自動テストやペアプログラミングが必要になるか、説明しないといけない。</p>
<p>また、なぜ今の商品でそれを行う必要があるか説明が必要になる。</p>
<p>残念ながら、私はこの説明責任を為せなかった。納得させられなかった。</p>
<p>そのため、他の人はこの調整業務に気を付けて実施してほしい。</p>

<h2>よくある開発プロセスから改善後の開発プロセスにする際の段階ごとの変更</h2>

<h3>【Before】<h3>

<p>要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>実装</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト試験項目書作成</p>
<p>↓</p>
<p>単体テストレビュー</p>
<p>↓</p>
<p>単体テスト</p>
<p>↓</p>
<p>結合テスト試験項目書作成</p>
<p>↓</p>
<p>結合テストレビュー</p>
<p>↓</p>
<p>結合テスト</p>
<p>↓</p>
<p>総合テスト試験項目書作成</p>
<p>↓</p>
<p>総合テストレビュー</p>
<p>↓</p>
<p>総合テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 1度目 テストファーストの導入】<h3>

<p>要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>総合テスト試験項目書作成</p>
<p>↓</p>
<p>総合テストレビュー</p>
<p>↓</p>
<p>結合テスト試験項目書作成</p>
<p>↓</p>
<p>結合テストレビュー</p>
<p>↓</p>
<p>単体テスト試験項目書作成</p>
<p>↓</p>
<p>単体テストレビュー</p>
<p>↓</p>
<p>実装</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト</p>
<p>↓</p>
<p>結合テスト</p>
<p>↓</p>
<p>総合テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>


<h3>【After 2度目 自動テストの導入】<h3>

<p>要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>要件定義書削除</p>
<p>↓</p>
<p>結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>単体テスト自動テスト作成</p>
<p>↓</p>
<p>単体テスト自動テストレビュー</p>
<p>↓</p>
<p>実装</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 3度目 テスト駆動開発の導入】<h3>

<p>要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>要件定義書削除</p>
<p>↓</p>
<p>結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>単体テスト自動テスト作成</p>
<p>↓</p>
<p>実装</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 4度目 ペアプログラミングの導入】<h3>

<p>要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>要件定義書削除</p>
<p>↓</p>
<p>結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 5度目 ペアプログラミングの発展】<h3>

<p>ペア要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>ペア総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>要件定義書削除</p>
<p>↓</p>
<p>ペア結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>ペア単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 6度目 リファクタリングの導入】<h3>

<p>ペア要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>ペア総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>要件定義書削除</p>
<p>↓</p>
<p>ペア結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>ペア単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング</p>
<p>↓</p>
<p>リファクタリング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 7度目 継続的ビルドの導入】<h3>

<p>ペア要件定義書作成</p>
<p>↓</p>
<p>要件定義書レビュー</p>
<p>↓</p>
<p>ペア総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>要件定義書削除</p>
<p>↓</p>
<p>ペア結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>ペア単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング</p>
<p>↓</p>
<p>リファクタリング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>継続的ビルド</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 8度目 ストーリーの作成】<h3>

<p>ペアストーリー作成</p>
<p>↓</p>
<p>ストーリーレビュー</p>
<p>↓</p>
<p>ペア総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>ストーリー削除</p>
<p>↓</p>
<p>ペア結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>ペア単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング</p>
<p>↓</p>
<p>リファクタリング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>継続的ビルド</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h3>【After 9度目 Clean Codeの教授】<h3>

<p>ペアストーリー作成</p>
<p>↓</p>
<p>ストーリーレビュー</p>
<p>↓</p>
<p>ペア総合テスト自動テスト作成</p>
<p>↓</p>
<p>総合テスト自動テストレビュー</p>
<p>↓</p>
<p>ストーリー削除</p>
<p>↓</p>
<p>ペア結合テスト自動テスト作成</p>
<p>↓</p>
<p>結合テスト自動テストレビュー</p>
<p>↓</p>
<p>【繰り返し】</p>
<p>ペア単体テスト自動テスト作成</p>
<p>↓</p>
<p>ペアプログラミング(Clean Codeを教える)</p>
<p>↓</p>
<p>リファクタリング</p>
<p>【繰り返し終わり】</p>
<p>↓</p>
<p>実装レビュー</p>
<p>↓</p>
<p>単体テスト自動テスト</p>
<p>↓</p>
<p>結合テスト自動テスト</p>
<p>↓</p>
<p>総合テスト自動テスト</p>
<p>↓</p>
<p>継続的ビルド</p>
<p>↓</p>
<p>顧客受け入れテスト</p>
<p>↓</p>
<p>リリース</p>

<h2>結論</h2>

<p>よくある開発プロセスから改善後の開発プロセスにするには技術的には正しい方向だと思う。</p>
<p>ただし、マネージャーや経営層がそれで納得するかと言うと別問題なので、調整の必要がある。</p>