アジャイル開発

snack
snack

近年では技術の進化や競争の激化などによって、より早く高品質なものを開発することが求められてるっす。

ボキタロー
ボキタロー

時代の変化に柔軟に対応していくことはビジネスの世界では大事だよね。

snack
snack

その通りっす。ソフトウェア開発においても、迅速かつ適応的に開発を行う軽量な開発手法であるアジャイル開発が注目されてるっすよ。

アジャイルとは

アジャイルとは

アジャイルとは、短いサイクルで、企画、設計、実装、テストを並列に行い迅速に開発を進める考え方のことをいいます。これにより、顧客の要求との不一致を短いサイクルで解消したり、要求の変化に柔軟に対応することができます。

また、アジャイルでは、企画、設計、実装、テストの活動の開発サイクルを繰り返して行うため、開発が終わった部分から順次提供することが可能になり、ユーザーニーズをフィードバックすることでシステムの改善に生かすこともできます。

ウォータフォールモデルでは1~2年かかっていた開発工程を、アジャイルでは数週間という短期間で開発し、小さいリリースサイクルを繰り返す開発手法となります。

snack
snack

ウォータフォールモデルは綿密な計画を立ててすべてが完成してからリリースするというものっすけど、アジャイルはとりあえず小さな機能を短期間でリリースして、要望の変更などがあれば改善していくっていうイメージっすね。

ウォータフォールモデルとアジャイル開発

ウォータフォールモデルとの比較

アジャイル開発は、後戻り不可能で変化に対応しにくいウォータフォールモデルと対比されることが多く、ウォータフォールモデルと比較した場合のアジャイルの利点としては次のようなものがあげられます。

  • 動くシステムをこまめにユーザーと確認するので、無駄・手戻りが少ない
  • 優先度の高い機能から実装するので、早い段階で動くシステムを確認できる。
  • 段階的に開発するので、ビジネスニーズに合わせて要件を変更できる。
さらっと学習【DevOpsとMLOps】

DevOps(デブオプス)

開発担当者は「新機能や高機能などの技術面を追求したい」のに対して、運用担当者は「運用管理のしやすさや安定稼働を優先したい」といった目的の相違によって両者が対立することがあります。

このようなトラブルを回避し、迅速な開発を実現するため、開発担当者と運用担当者が密接に連携して開発を進める取り組みのことをDevOps(デブオプス)といいます。

スパイラルモデルやアジャイル開発では頻繁な仕様の確認などが必要となるため、こうした開発手法の普及とともにDevOpsの考え方が広まりました。

DevOpsは、開発(Development)と運用(Operations) を組み合わせた造語です。

MLOps(エムエルオプス)

MLOpsはDevOpsから派生した用語で、機械学習(ML:Machine Learning)と、運用(Operations)を組み合わせた造語です。

機械学習は、データを収集・加工し、機械学習モデルを開発する「開発」のプロセスと、開発したモデルを実際のシステムに組み込み、予測を実行、必要に応じて再学習する「運用」のプロセスに分けられます。

DevOpsとMLOps

MLOpsではこれらを別々に切り離すのではなく、両プロセスの担当者が密に連携し、開発から運用へ、運用から開発へ、といったサイクルを回し続けて、継続的に開発・実装・品質保証をおこなう取り組みです。

なお、アジャイル開発にはXP(エクストリームプログラミング)スクラムなどの開発手法があります。

XP (エクストリームプログラミング)

XP(エクストリームプログラミング)は、要求の変化に対応した高品質のソフトウェアを短いサイクルでリリースするアジャイル開発の開発手法のうちの1つで、19のプラクティス(実践方法)を定義しています。このうち、ITパスポート試験で出題されるものを順番に見ていきましょう。

テスト駆動開発

テスト駆動開発(Test Driven Development:TDD)は、プログラムに必要な各機能について、最初にテストを書き、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返す手法です。

通常のプログラミング工程は、コーディングの後に単体テストを行いますが、この順番を逆にして最初にテストを書きます(テストファースト)。これにより、開発者のシステムの要件・仕様への理解が深まる、不具合の発見・修正が初期段階で可能となるといったメリットが得られます。

ペアプログラミング

ペアプログラミングは、2人のプログラマが1台のマシンを操作してプログラミングを行う手法です。2人のプログラマがペアとなり、その場で相談やレビューをしながら一つのプログラムの開発を行うことで、品質の向上や知識の共有、技術の向上などを図ることができます。

リファクタリング

完成したプログラムを随時書き直し、保守性の高いプログラムにすることをリファクタリングといいます。外部から見た動作を変えずに、プログラムの内部構造をより良く作り変えます。

ユーザーストーリー

ソフトウェアやシステムで「誰が」「なぜ」「何をしたいのか」といったことを短い文章にまとめたものです。ユーザーの要求を整理し、認識の差や誤解が生じないようにします。

さらっと学習【継続的インテグレーション(CI)】

継続的インテグレーション(Continuous Integration:CI)は、DevOps(デブオプス)の開発手法の1つで、コードの変更を頻繁に結合し、ビルド・テストを自動的かつ即座に実行する手法です。問題を早期に発見し、開発の効率化や省力化、納期の短縮などを図ることが可能となります。

スクラム

アジャイル開発におけるスクラムとは、アジャイル開発チームに適用するプロジェクト管理のフレームワークの1つです。

すべてのチームメンバーが物理的に同じ場所にいること、あるいは密なオンライン共同作業を通じ、全員が日々直接会ってお互いにコミュニケーションをとり、プロジェクトにおける規律を守ることによって自律的なチームを作り、さらにユーザーを巻き込みながら開発することで、顧客の価値を最大化しつつ、短期間で効率的な開発を実現します。

スクラムチーム

スクラムチームには、プロダクトオーナースクラムマスター 、開発チーム、といったアクターが存在し、およそ7~10名程度の規模であることが多くなっています。それぞれの概要やロール(役割)は次の通りです。

プロダクトオーナー

開発中のプロダクトの責任者としての役割を担います。スクラムチームから生み出されるプロダクトの価値を最大化し、プロダクトバックログ管理において優先順位決定を行う責任をもちます。メンバーから上がってきた判断の難しい事象に対しても責任をもって決定する存在であり、スクラム開発をサポートします。 

プロダクトバックログとはスクラムにおける作成物の1つで、ユーザーからの要望を抽出し、開発する製品の機能や技術的な改善要素に優先順位を付けたリストのことを指します。

スクラムマスター

スクラムチームの管理責任者です。グループがより協力し、共通の目的を理解するための支援や、プロダクトバックログを実現するための計画の立案、会議進行の先導、などといったファシリテーターの役割を持ちます。

開発者(開発チーム)

実際に開発を行うメンバーです。設計、コーディング、テスト、運用など、各自が開発に必要な役割を果たします。メンバー全員が平等であり、優劣や上下関係はないというのが大前提です。

スクラムチーム

スクラム開発の流れ

スクラム開発では、1~4週間程度の短いサイクル(スプリント)を繰り返してプロジェクトを進めていきます。具体的な流れは以下の通りです。 

①スプリントプランニング(スプリント計画)

プロダクトバックログの中から、スプリントで実装する機能をスプリントバックログとして選定します。成果物を作成するための具体的な作業計画となるものです。こうして決まったそれぞれの作業を開発メンバーに割り当て、実作業に移ります。 

②デイリースクラム

決まった時刻に開発の進行状況や課題などを共有するミーティングのことです。開発チームの進捗や課題を把握するために行われ、各メンバーが担当する作業の進捗状況や、昨日終えたこと、今日取り組むこと、現在起きている問題や課題といったことをチーム内で共有します。

snack
snack

毎日約5~15分程度で行われることが多いっすね。コミュニケーションの改善や課題の特定に役立つっす。

③スプリントレビュー

プロダクトオーナーや主要なステークホルダーも参加し、ここまでのスプリントの成果のレビューを実施します。開発した機能をデモンストレーションし、フィードバックを受け、レビューの結果がOKの機能はリリースされ、NGの機能は次回以降のスプリントに持ち越されます。

④スプリントレトロスペクティブ

チームでの活動において、チーム自体や活動のプロセスを振り返ることをレトロスペクティブ(ふりかえり)といいます。スプリントレビューの終了後、スクラムチームは今回のスプリントのふりかえりを実施して、スプリントのよかった点や課題点を洗い出し、次回のスプリントに活かします。

スクラム開発の流れ

確認○×問題

問1

開発する機能を小さい単位に分割して、優先度の高いものから短期間で開発とリリースを繰り返すソフトウェア開発モデルをウォーターフォールモデルという。

答え:×

設問はアジャイル開発の説明です。ウォーターフォールモデルは、システム開発を上流工程から下流工程まで順番に進めて、すべての開発工程が終了してからリリースする開発モデルです。

問2

開発側と運用側が密接に連携し、自動化ツールなどを取り入れることによって、仕様変更要求などに対して迅速かつ柔軟に対応する取り組みをDevOpsという。

答え:〇

DevOps(デブオプス)は、迅速な開発を実現するため、開発担当者と運用担当者が密接に連携して開発を進める取り組みのことをいいます。

問3

プロダクトオーナなどの役割、スプリントレビューなどのイベント、プロダクトバックログなどの作成物、及びルールから成るソフトウェア開発のフレームワークをXP(エクストリームプログラミング)という。

答え:×

設問はスクラムの説明となります。なお、XP(エクストリームプログラミング)とは、要求の変化に対応した高品質のソフトウェアを短いサイクルでリリースする、アジャイル開発の開発手法のうちの1つです。テスト駆動型開発、ペアプログラミング、リファクタリングなどのプラクティスを提唱しています。

問4

XP(エクストリームプログラミング)における、テスト駆動開発の特徴は「最初のテストで、なるべく多くのバグを摘出する」ことにある。

答え:×

XP(エクストリームプログラミング)におけるテスト駆動開発の特徴は「プログラムを書く前にテストケースを記述する」ことにあります。

問5

既存のプログラムを、外側から見たソフトウェアの動きを変えずに内部構造を改善する活動のことをペアプログラミングという。

答え:×

設問はリファクタリングの説明です。なお、ペアプログラミングとは、2人のプログラマが1台のマシンを操作してプログラミングを行う手法です。2人のプログラマがペアとなり、その場で相談やレビューをしながら一つのプログラムの開発を行うことで、品質の向上や知識の共有、技術の向上などを図ることができます。

問6

スクラムチームにおけるプロダクトオーナーの役割はaである。

役割名内容
aゴールとミッションが達成できるように、プロダクトバックログのアイテムの優先順位を決定する。
bチームのコーチやファシリテータとして、スクラムが円滑に進むように支援する。
cプロダクトを完成させるための具体的な作り方を決定する。

答え:〇

役割名内容
a.プロダクトオーナーゴールとミッションが達成できるように、プロダクトバックログのアイテムの優先順位を決定する。
b.スクラムマスターチームのコーチやファシリテータとして、スクラムが円滑に進むように支援する。
c.開発チームプロダクトを完成させるための具体的な作り方を決定する。

問7

スクラムチームでの活動において、チーム自体や活動のプロセスを振り返ることをデイリースクラムという。

答え:×

設問はレトロスペクティブ(ふりかえり)の説明です。なお、デイリースクラムとは、決まった時刻に開発の進行状況や課題などを共有するミーティングのことです。