エンジニアの開発手法、種類や特徴とは?(ウォーターフォール、アジャイル、DevOps等)
IT企業におけるシステム開発は、特定の開発手法に基づいておこなわれています。企業によって、またプロジェクトによって採用される開発手法は異なるため、エンジニアとして転職をお考えの方はシステム開発の手法について、ひと通り理解しておく必要があります。
今回は、システム開発手法のなかでも主流と言える「ウォーターフォール開発」「アジャイル開発」「DevOps開発」について、それぞれの特徴や工程の違い、メリット・デメリットなどを解説していきます。
ウォーターフォール開発とは
まずはソフトウェア工学では非常に古くから存在する、もっともポピュラーな開発手法の一つであるウォーターフォール開発について見ていきましょう。
ウォーターフォール開発の特徴
ウォーターフォール開発は、開発工程が事前に精緻に決定されており、その開発工程に沿って一つひとつ順を追って作業を進めていくシステム開発手法です。ウォーターフォール開発の最大の特徴は、一つの開発工程が完了したら、二度とその工程に戻ることはないことです。上流から下流へ水が流れるように順を追って作業をするのが基本であり、下流の水が上流に戻ることがないのと同じように、基本的に工程の後戻りができないシステム開発手法です。
ウォーターフォール開発の工程
ウォーターフォール開発の工程は、企業やプロジェクトによって若干の違いはありますが、基本的には以下の流れで進められます。上述のとおり、次の工程に進んでから前の工程に戻ることはありません。
01:要件定義
02:基本設計
03:詳細設計
04:開発(プログラミング)
05:テスト
各工程について簡単にご説明していきましょう。
01:要件定義
ヒアリングを通して、システム開発の目的やクライアントがシステムに求める機能を明確にしていく工程です。収集した情報をもとに開発するシステムの要件を定義し、その内容を要件定義書としてまとめます。
要件定義はウォーターフォール開発においてもっとも重要な工程だとされています。要件定義フェーズで「クライアントが求めるシステム」と「開発側が実現できるシステム」をいかに近いものにできるかが肝要であり、要件定義の精度によってその後の工程の負担や進み具合が大きく変わってきます。
クライアントの口から出た要望をそのまま要件とするのではなく、その裏に隠れている潜在的なニーズを把握したうえで要件定義をしないとクライアントに満足してもらえるシステムは作れません。また、クライアントが望むことでも、開発側から見て適切でないことは「難しい」「やるべきではない」と伝えることも重要です。無理な要求を飲んだり、安請け合いをしたりすると、後にトラブルに発展するリスクが高くなります。
02:基本設計
要件定義で決定した内容をもとにシステムの基本設計をおこなう工程です。インターフェースをはじめ、主にユーザーから見える部分の設計をおこないます。具体的には、操作画面や操作方法、データの出力方法などの仕様を決定していきます。
また、ソフトウェア・ハードウェアの構成や開発言語、開発費用や納期などを決定するのも基本設計のフェーズです。基本設計が完了したら基本設計書を作成してクライアントに共有し、イメージに齟齬がないかを確認します。
03:詳細設計
外部からは見えないシステム内部の動作や、データベースの設計をおこなうのが詳細設計の工程です。基本設計がユーザーやクライアントに向けた設計であるのに対し、詳細設計は実際にシステムを実装する開発者向けの設計であり、成果物として詳細設計書を作成します。
システム開発における上流工程は詳細設計までであり、詳細設計が完了したら、実際にプログラミングをおこなう下流工程に入っていきます。
04:開発(プログラミング)
実際にシステム開発を進める工程です。開発者・プログラマーは詳細設計書をもとにプログラミングをおこないます。
05:テスト
実装が完了したシステムのテストをおこなう工程です。テストは一般的に「単体テスト」「結合テスト」「総合テスト」「受入テスト」に4つがあり、それぞれ以下のような役割があります。
・単体テスト:プログラミングをした機能が、単体として問題なく作動するかどうかを確認します。
・結合テスト:単体テストで確認した機能同士を連携させて、問題なく作動するかどうかを確認します。
・総合テスト:システム全体を連結させて問題なく作動するかどうかを確認します。
・受入テスト:ユーザー側の本番環境でシステムを動かしてみて、問題なく作動するかどうかを確認します。
すべてのテストが完了し、問題ないことが確認されたらシステムの納品・導入という流れになります。
ウォーターフォール開発のメリット
ウォーターフォール開発は、開発工程が明確なのでスケジュールが立てやすく、進捗状況を確認しやすいのがメリットだとされています。また、各工程が終了するごとに成果がテキスト化されるので、情報を管理しやすいのも利点です。
ウォーターフォール開発は極めて計画的な開発手法なので、予算の見積もり、エンジニアの配置など、事前の準備・計画を明確かつスムーズに進めていくことが可能です。全体像が見えやすく、作業に関わる人員規模を把握しやすいのもメリットだと言えるでしょう。
ウォーターフォール開発のデメリット
ウォーターフォール開発は基本的に後戻りできない開発手法なので、後に修正や仕様変更が必要になった場合に時間がかかるのが大きなデメリットです。また、後戻りできない開発手法だからこそ、各工程における作業には常に完璧さが求められます。一つでも漏れやミスがあると、全工程に影響を及ぼしてしまうリスクがあります。
ウォーターフォール開発において、成果物(完成形)が実際に動き出すのは工程の最終段階です。途中の段階で完成形が目に見える形で出てこないのもデメリットだと言えるでしょう。
アジャイル開発とは?
クライアントの要望を可能な限り素早く提供する開発手法である、アジャイル開発について見ていきましょう。
アジャイル開発の特徴
アジャイル(Agile)という言葉には、「機敏な」「素早い」「活発」といった意味があります。アジャイル開発の大きな特徴は、開発工程が機能単位で分かれていることです。ウォーターフォール開発はプロジェクト全体の開発工程が精緻に決まっており、段階的に作業を進めていくのに対し、アジャイル開発は実装したい機能ごとに開発工程を繰り返しおこなうのが特徴です。
アジャイル開発の工程
アジャイル開発はウォーターフォール開発のような精緻な仕様や要件を定めず、大枠を決めたら開発をスタートします。「システム開発に修正や仕様変更はつきものである」という前提で開発を進めるため、リリース計画も流動的になるのが特徴です。
大まかなリリース計画を立てたら、実装したい機能ごとに「インテレーション」と呼ばれる作業を繰り返しおこないます。インテレーションは「繰り返し・反復」という意味であり、「企画→設計→プログラミング→テスト」という一連の開発工程を機能(小単位)ごとに何度も繰り返しおこないます。
インテレーションの期間は1~2週間が一般的です。機能ごとに「インテレーションA」「インテレーションB」「インテレーションC」というように分割して開発を進め、そのたびにリリースをおこなう仕組みです。
アジャイル開発のメリット
アジャイル開発では、機能ごとに小単位でテスト&実装を繰り返して開発を進めていくため、従来のウォーターフォール開発に比べ開発期間が短くなります。開発途中で発生した仕様変更や修正に柔軟に対応できるのもアジャイル開発の大きなメリットです。仕様変更が発生しやすいWebサービスや、近年増加しているアプリ開発に適した開発手法だと言えるでしょう。仕様変更や修正に比較的短期間で対応できるため、コストも抑えられます。
また、アジャイル開発は小単位ごとにその都度リリースをおこなうため、実際にユーザーが使用した際の評価や意見を素早く取り入れることができます。
アジャイル開発のデメリット
アジャイル開発は企画段階で明確な仕様を決めずに開発を進めるため、進捗状況の把握が難しく、予算管理の面でもコントロールが難しくなることがあります。また、修正や仕様変更が発生することを前提としているため、当初の計画から方向性が大きくずれてしまうケースもあります。
DevOps開発とは?
上述したアジャイル開発で取り入れられる手法の一つであるDevOps(デブオプス)開発について見ていきましょう。
DevOps開発の特徴
DevOpsという言葉は、「Development(開発チーム)」と「Operations(運用チーム)」の2つの言葉を組み合わせた造語です。DevOps開発は、開発チームと運用チームがお互いに協力して開発を進めることで、より価値の高いシステムを提供することを目的としています。
本来、システム開発においてはチーム間の協力が不可欠ですが、新しい機能の実装・リリースを重視する開発チームと、サービスの安定性・利便性を重視する運用チームの間で対立が生まれることも珍しくありません。このような対立をなくし、協力体制を確立して開発を推進していくのがDevOps開発の特徴です。
DevOps開発のメリット
DevOps開発の大きなメリットとして、開発スピードの速さが挙げられます。DevOps開発ではアジャイル開発の手法を用いることが多く、機能単位でスピーディーにリリースしていきます。そのため、早期の段階でユーザーからのフィードバックを得て、システムの改善・ブラッシュアップを図ることができるので、結果的にシステムそのものの満足度向上につながります。
DevOps開発はバグや不具合が起きた場合にも迅速な対応が可能です。開発チームと運用チームが連携して改善を繰り返すことで、信頼性の高いシステムを提供できます。
DevOps開発のデメリット
DevOps開発は細かい単位で開発&改善を繰り返し、工程ごとのスケジュールを管理しないため、全体の開発規模や詳細なスケジュールを管理しにくくなります。また、同時並行で多くの機能を開発する大規模開発には不向きで、プロトタイプの作成や小規模なシステム開発に向いている手法だと言えます。
DevOps開発に必要な組織文化
DevOps開発においては、対立を生み出さないための組織文化の構築が何よりも重要です。この組織文化を構築するうえで4つの重要な要素が挙げられます。
・お互いを尊重すること
一緒に働いている社員を尊重すること、敬意を表すこと、思いやりを持つことが大切です。能力や功績、頑張りを評価するようにします。
・お互いを信頼すること
開発に関わるすべてのスタッフを信頼するようにします。「自分だけでなく他のスタッフもみな優秀」という気持ちを持ち、信頼して仕事を任せることが大切です。「自分だけが優秀」「この仕事は自分にしかできない」という考えは不要です。
・失敗を非難しないこと
どんなプロジェクトにも失敗やミスはつきもので、誰かの失敗を非難すれば対立が生じます。失敗を責めるのではなく、健全な態度をとることが大切です。ミスのなかにも隠れたチャレンジ精神があるのであれば、むしろ評価すべきです。
・一緒に解決策を考える
失敗やミスが起こった場合、責めたり非難したりするのではなく、一緒になって解決策を考え、問題に対処することが大切です。
このような意識をチーム全員が共有できれば、対立や軋轢が生まれず、常に良いチームワークと確かな協調性のなかで、クオリティの高いシステム開発を進めていくことができます。
エンジニアの開発とは?ウォーターフォール、アジャイル、DevOpsなどの【まとめ】
エンジニアとして転職をお考えの方は、ウォーターフォール開発、アジャイル開発、DevOps開発の特徴を押さえたうえで、転職先企業が基本的にどの手法を採用しているかを確認しておくのが良いでしょう。
開発手法以外にも、転職先のチェックポイントは多々ありますが、転職サイトに載っていない情報も少なくありません。転職活動を有利に進める情報を得たいのであれば、転職エージェントを活用するのがおすすめです。転職エージェントには各企業と直接やり取りしている担当者がいるため、転職サイトには載っていないリアルな企業情報を手に入れることができます。
R-StoneはIT業界に特化した転職エージェント。業界を熟知したコンサルタントが、あなたの転職を成功へと導きます。エンジニアとして満足度の高い転職をしたい方は、お気軽にご相談ください。
前職は、専門商社の営業職をしておりました。 全国に支店がある企業でしたが、人事専門の部署がない組織体系で 中途採用は各拠点ごとに行っておりました。 戦略的な採用ではないこともあり、ミスマッチも起きやすく 人材が定着しないことに大きな課題感を持ちました。 売上を伸ばしていき会社を成長させていくのは、働く社員一人ひとりであると感じ、 企業に最も重要なのは「人」であると強く実感しました。 人と企業のマッチングの重要性を考える中で人材業界へ興味を持ち、 サービスの質を追求するアールストーンへ入社しました。