システム開発で使われる開発手法について

2020.05.22

2021.08.12

Fabeee社員ブログ

はじめまして、コージです。
 
パソコンの電源ボタンの位置すら知らない新卒プログラマーからシステムエンジニアになり、現在はプロジェクトマネージャーとして開発プロジェクトの管理やプロダクト開発の管理をしております。
 
今回は今までに経験してきた、いくつかの開発手法について書いていきたいと思います。
開発プロジェクトの起ち上げの際に、やらなければならないことはたくさんあります。
期間、予算、リソースの調整、準備などなど。
そういった外部要因を加味したうえで、どのような開発手法を取り入れるか判断するのもプロジェクトマネージャーの仕事でもあります。
 
実際に選択肢として良く名前の出てくる開発手法(ウォーターフォール型開発、アジャイル型開発)を紹介していきたいと思います。
 

■ウォーターフォール型開発


最近でも根強く使われる開発手法で、大規模プロジェクト、かつ信頼性を担保する必要がある場合に導入されることが多いですね。
基本的には以下のように作業タスクの順序が決まっており、左から右に五月雨式に進めていく手法です。
 
「要件定義」 > 「基本設計」 > 「詳細設計」 > 「実装」 > 「単体試験」 > 「結合試験」
 
要件定義や基本設計を上流工程と呼ぶこともあり、この工程で課題に気付かずに最終工程まで行ってしまうと、課題解決にかなりの神経を使う必要があります。
安易に実装工程だけで解決しようとすると、他の個所に影響が出てしまうことも。
私自身もそういったプロジェクトにいたことがありますが、モグラ叩きのようにバグが溢れ出てメンバーが疲弊してしまうような事態に…
 
ウォーターフォール型開発の場合、各工程ごとにレビューを実施し、可能な限り設計バグを除去しておきましょう。
経験上、バグ件数が0件でプロジェクトが終わるということは無いと思っているので、上流工程まで影響するような致命的なバグを極力減らすという心掛けが大事です。
 
ここで私がウォーターフォール型開発のプロジェクト管理で良く使っていたツールを紹介します。
プロジェクトにより使用するツールが決まっている場合もありますが、予算の都合で費用の掛かるツールは使用できないなど状況に応じて使い分けるようにしています。
 
・進捗管理(タスク、プライオリティ)
Redmine、GanttProject、Excel
 
・バグ管理(チケット)
Redmine、Backlog
 
この辺のツールは見栄えも大事ですが、如何に効率よく時間をかけずに管理できるかが大事です。
複雑な管理ツールを利用することでツールの操作に時間を取られ、効率が落ちてしまうこともありますので、自身が使いやすいツールを選択し、利用するのが良いと思います。
 

■アジャイル型開発(アジャイルソフトウェア開発)


 
アジャイルソフトウェア開発とは、スピード感があり短期間で要望された機能を実現出来る応用性に長けたソフトウェア開発手法を一括りにした呼び名です。
その中から実務で実際に使用した「エクストリーム・プログラミング(XP)」、「スクラム」の2種類について書きたいと思います。
 
エクストリーム・プログラミング開発手法(XP開発手法)とは、アジャイルソフトウェア開発手法の中で一番馴染みのある開発手法かと思います。
 
要求が変化することが多いサービス、プロダクト、アプリケーション開発に適しており、開発リソースが少ない状況で、継続的な開発を求められる場合、設計、開発、テストを短期間の周期で行う必要があり、ウォーターフォール型開発のようにじっくりと工程を進めるやり方では短期間で回していくことが出来ないため、この手法が用いられることが多くあります。
私の担当したプロジェクトは小規模であったため、デザインナー、フロントエンジニア、サーバサイドエンジニア、インフラエンジニアのチームで実施していました。
 
スクラム開発に通じる点もありますが、リリースが止まることはなく、営業やマーケティング担当からのフィードバックを受けて、次のリリースでどのような機能を用意するか、もしくはクォーター単位でリリース計画を立てて開発を進めていきます。
また、その度に設計書を変更していくような運用も、この開発手法のメリットを潰すことになります。
 
設計は最低限の内容をチームで共有できるところに残す(Wikiなど)、テストもテストコードを用意し、基本的にはそのテストコードの実行で完結するようにする。
テストコードは都度新規で作る必要はなく、拡張した機能分のテストコードを追記し、元からあるテストコードも含めて実行します。
テストコードの実行により、NGとなった個所があれば、それはデグレードを起こしている可能性が高く、追加したコードが影響を与えているので、その箇所をターゲットにしてチェックすることになります。
 
今はGithubを使えば、ソースのマージ、デプロイのチェックまでしてくれるので、マージ漏れ、マージミスによるバグ混入のリスクが格段に減り、開発者としては嬉しい時代となりました。
 
スクラム開発手法とは、前述した要求が変化することが多い開発でも、より大規模な開発時に用いられる開発手法になります。
 
例えば、大規模なサイトでは、サイトデザイン、フロントサイドプログラミング、サーバサイドプログラミング、API、インフラ(サーバ、DB、CDN)のように各担当ごとにチーム分けして開発を行います。
フロントサイドやサーバサイド内でさらにチームが細分化されていたりすることもあります。
 
このような開発手法を取る場合、必ずプロジェクトマネージャー(プロダクトマネージャー)の下にリードエンジニアを配置します。
各チームにリーダーを置き、ソースコードレビューやチーム内の進捗状況を管理します。
そしてプロジェクトマネージャー(プロダクトマネージャー)は、各リーダーからの報告をもとに全体のバランスを見て、タスク優先度、リリース判定、次フェーズのタスク検討などを行います。
更に大きいプロジェクトでは、品質保証チームがおり、コードレビューやリリース判定をすることもあります。
 
スクラム開発手法のイメージとしてはXP開発手法をさらに規模感を大きくした開発手法と言えるかもしれません。
要求の変化に対してスピード感を持って対応していき、品質は維持しつつ無駄を省いていくという基本的なアプローチは変わりません。
設計フェーズやテストフェーズの考え方、進め方も基本は同じ形で進めていけると思います。
前述したXP開発と異なる点としては、規模が大きいためチーム分けの基準が各担当ごとになり、専門性に特化したチームになるという点でしょうか。
 
ここでアジャイル型開発のプロジェクト管理で良く使っていたツールを紹介しようと思ったのですが、Githubひとつで全てまかなえるので個人的にはGithub一択です。
ソース管理とプロジェクト管理の両方をこなせて、ソースのマージからデプロイまでやってくれて至れり尽くせりです。
 
・進捗管理(タスク、プライオリティ)
Github(Projects(Sprint Board)
 
・バグ管理(チケット)
Github(issues)

■最後に

これらの開発手法はメリット、デメリットが相応にありますので、状況に応じて、よりメリットが生かせる適した開発手法を導入することをお勧めします。
 
今回、ブログを書く上で、改めて勉強出来た部分、初めて知った開発手法もありました。
また機会がありましたら、他の開発手法の話やプロジェクトマネージメントについて別視点の話をしてみたいなと思いました。
 
長々とお付き合い頂き、ありがとうございました。
 
AIコンサル/SES/受託開発のご依頼についてはこちら

Fabeee編集部

Fabeee編集部

こちらの記事はFabeee編集部が執筆しております。