システムを開発するということ
皆さんはこれまでにプログラミングに触れた経験はありますか?文系学生の皆様は全く触れたことがない方が多いでしょう。また理系学生であってもプログラミングに触れた方はそう多くないと思います。
しかし実際に少し勉強してみると分かると思いますが、実は皆さんが思っているよりもプログラミングというものは簡単です。プログラミング言語ごとにルールはありますが、いくつかの文法を覚えればある程度の機能は実現できます。
そのため、個々人で生産性のバラつきこそはありますが、システムエンジニアとして働いている人たちは、保守性(拡張・修正などのメンテナンスしやすいか)・可読性(読みやすいコードか)などを考えなければ、目的のシステムを問題なく開発できるでしょう。
では、システム開発とは何が難しいのでしょうか?私自身が常日頃から感じているのはプログラミング自体よりも、いかにお客様が欲しいシステムを「チーム」として、「高品質」で「期間内」に作り上げるかという点が最も難しいのだと思います。
この点を解決するために、古くから様々な検討が繰り返され、開発手法というものが生まれました。現在、主流となっている開発手法はいくつかありますが、今回は「ウォーターフォール」と「アジャイル」という開発手法についてご紹介しようと思います。
就活生のみなさんは、自分が志望する企業がどういう開発手法を取り入れているかを知ることで、業務内容をイメージする参考にしてください。
ウォーターフォールとは
まずは「ウォーターフォール」についてご紹介します。ウォーターフォールは1970年頃から始まった歴史がある開発手法です。直訳すると「水が落ちる」となりますが、その名の通り作業工程(水)が上から下に進んでいく(落ちていく)イメージで作業は進みます。
ウォーターフォールは、開発作業を以下のような工程に分けます。
要件定義…お客様にヒヤリングを行ったものをベースに分析などを行い、システムに要求される機能を洗い出し、決定します。
基本設計…外部設計とも呼ばれます。システムの操作画面や操作方法や、帳票類のフォーマットなど、DBのレイアウトなどを決定します。
詳細設計…内部設計とも呼ばれます。基本設計で決定した内容について、どういった構成や内容でプログラムに落とし込むかを決定します。
実装…詳細設計までの内容を元にして、プログラミングを行いシステムをつくります。
単体テスト…システムについて、主に詳細設計の内容をテストする。
結合テスト…システムについて、主に基本設計の内容をテストする。
システムテスト…システムについて、主に要件定義の内容をテストする。
この工程について、要件定義が完了したら基本設計。基本設計が完了したら詳細設計…と工程を1つずつ進んでいく手法を、ウォーターフォールと言います。
それぞれの工程の期間については、開発を行う前に必要なコストと作業量から予測して算出します。そのため、大規模なプロジェクトであれば、要件定義〜システムテストまでに数百人・数千人のチームで数年単位を要するものもありますし、小規模なプロジェクトであれば、1人で1か月といったものもあります。
ウォーターフォールのメリット
大きなメリットとしては2つあります。
1つ目はスケジュールの見通しを立てやすいため、リリースまでの人員調整やプロジェクトの管理が比較的容易であることです。
昨今はエンジニアの人材不足が問題となっていますが、ウォーターフォールの場合は全体のスケジュールを予測しているため、いつごろにどれくらいの人材を確保すればよいというのが明確ですし、作業の遅れも比較的把握しやすいです。
2つ目は、開発側としては各工程ごとにバッファ(何か問題があった場合の予備的な工数)を積みやすいため、ある程度スケジュールに余裕をもって進めることができます。
※ただし、当然ですがお客様に見積を提示する際の金額にバッファ分も含まれるため、過度なバッファの確保は受注自体に影響します。
ウォーターフォールのデメリット
デメリットとしては大きいものとして2つあります。
1つ目は工程を跨ぐような問題が発生した場合の影響が甚大であることです。
例えば結合テストでバグが発生した場合、その根本原因が基本設計にあったとすると、作業のやり直し範囲が広範囲になりがちです。また、開発中に仕様の変更が入った場合も、同様の問題が起こるリスクがあります。
2つ目は、完成したシステムがお客様が欲していたものではないという点に気づきにくいという点です。
ウォーターフォールの場合、動作するものについては最終段階近くにならないと確認することができません。そのため、実際に動かしてみると「使い物にならない」「ほしいものと違う」という問題が発生することがあります。
アジャイルとは
次に「アジャイル」についてご紹介します。
なお、厳密にはアジャイルにもいくつかの手法があるのですが、今回は「スクラム開発」という手法をアジャイル開発としてご紹介します。
アジャイルは2000年頃に生まれた比較的若い開発手法です。直訳すると「早い」「機敏」ですが、これは当時の主流であったウォータフォールと比較して、小回りが利く開発手法という意味が込められています。
アジャイル開発は「スプリント」というある一定のサイクルを繰り返しながら開発作業を進めます。「スプリント」の間隔については、プロジェクトにもよりますが、基本的には1週間〜2週間とされることが多いです。
1つのチームにおける1スプリントでの作業可能量については、「このチームであれば1つのスプリントにおいて、これくらいの作業ができる」といった具合にあらかじめ決めておきます。
この1チームでの作業量を「ベロシティポイント」といいます。
つぎに各スプリントで行う作業についてですが、これはタスクといわれる単位で作業を行います。このタスクとはは開発対象の機能を可能な限り細分化したものを指します。
例えば「登録機能の追加」という作業があった場合、「仕様検討」「UI変更」「UI実装」「DB部分実装」「テスト」…といった具合に、1つの機能について細かい単位にまで作業を落としこみます。(現場ではタスクをちぎるという表現をすることもあります。)
さらにその1つ1つの機能に対して、どれくらいの作業負荷であるのかをポイントを付けていきます。このポイントは誰かが決めるのではなく、チーム全員で懸念事項などを出した上で決定します。
これにより、「1チームでの1スプリントの作業量」と「各機能の作業量」を把握できます。
実際の作業については、お客様と開発側が協議しながら「このスプリントではこのタスクをやる」といった具合に、ベロシティポイントと各タスクのポイントを考慮しながら作業内容を決定するのです。
アジャイルのメリット
アジャイル開発のメリットとしては、やはり仕様変更などへの対応が柔軟に可能な点だと思います。
作業は1スプリントで完結する事が基本なので、仕様変更などを取り入れやすくなります。また、お客様のご意見を取り入れやすく、完成したシステムとのギャップがあった場合も比較的傷は浅くて済みます。
アジャイルのデメリット
デメリットとしては、仕様変更が頻繁に発生する可能性があることです。
特にゴールが決まった開発でなければあまり影響はありませんが、リリース日が決定しているようなシステムでは、要求されるものを全て対応していると全体のスケジュールに影響を及ぼします。
もちろんリクエストを断ればよいのですが、アジャイル手法自体の正しい理解がまだ浸透しておらず、アジャイルは万能というイメージがあるので、お客様も「アジャイルならできるでしょ」と思いがちです。
また、基本的にはスプリントごとの作業しか把握できないため、ウォーターフォールと比較すると最終的なスケジュールを計画しづらい点もデメリットの1つだといえます。
ウォーターフォール・アジャイルの使いどころ
こちらについては各方面で様々な議論があります。ウォーターフォールは過去のやり方だという方もいますし、アジャイルでやるといつまでたってもプロジェクトが終わらないという方もいます。
おそらく今後も白黒はつかないので、完全に個人的な見解となりますが、私自身は以下のように考えています。
一般的にウォーターフォールは大規模案件向きであるといわれていますが、こちらについては私自身も同意です。ただし、開発手法が大規模案件に向いているというよりも、問題があった場合のリスクを低減させることができるためだと思います。
大規模案件において、開発側のミスにより手戻りを起こすと、金銭的な補償を行う必要があったり、最悪の場合訴訟を起こされたりすることもあります。
ウォーターフォールは、各工程の成果物がきちんとアウトプットされるので、その成果物についてお客様に確認・了承を頂くことで、お客様と責任の共有が可能です。
一方、アジャイル開発は、比較的小規模案件を複数行う場合などに向いていると感じています。
お客様にご確認をいただくスパンはアジャイル開発の方が圧倒的に短いので、実際にお客様の意見を取り入れやすく最終的な満足度も高い印象があります。
まとめ
今回はシステム開発の手法をご紹介しましたがいかがでしたか?
どういった手法を採用するかはプロジェクト毎に異なりますし、これが正解というものはありません。日本ではアジャイルがまだ浸透していないですが、肌感覚でいうとアジャイルを採用する案件は少しずつ増えつつあります。
今後も当分の間、日本国内において「ウォーターフォール」と「アジャイル」という手法はスタンダードであり、どの現場に行っても必ず使う手法となるでしょう。ぜひ、基本的な内容は押さえておきましょう。
IT業界を目指すならエージェントを活用しよう
エンジニア就活には、IT業界・SEに強いエージェントがいます。彼らに話を聞いてもらうことで、自分が何をやりたいのか、自分が大切にしているのが何なのか、就活するうえでの軸が見えてきます。さらに、各人に合った未公開の求人情報も紹介してもらえるので、まずは気軽に相談してみましょう。会員登録や相談・セミナーなど、すべて無料で活用できます。