1.アジャイルagile)開発

アジャイル開発とは、以下のアジャイルソフトウェア開発宣言に基づく開発のことです。

agilemanifesto.org


この開発を実現する代表的な手法に、XP(エクストリームプログラミング)開発やスクラム開発などがあります。

アジャイルagile)開発に関して、応用情報技術者試験シラバスでは、次のように述べられています。

アジャイル
迅速かつ適応的にソフトウェア開発を行う軽量な開発手法であるアジャイルの特徴を理解する。

用語例 アジャイルソフトウェアの原則,XP(エクストリームプログラミング),テスト駆動開発ペアプログラミングリファクタリング継続的インテグレーション

少し補足します。
agile=俊敏な という意味である。
・「とりあえず作ってしまい、後から直す」
・反復型開発といって機能を分割し、短いサイクルで開発
ウォーターフォールでは開発規模が大きくなりすぎる。
・プロトタイプは模型だが、アジャイルは乱雑であっても作り上げる。
・過去問では、アジャイル開発の特徴として「開発の初期段階の設計よりもコーディングとテストを重視しており、常にフィードバックを行って修正・再設計していく(H18AM問13)」と述べられている。

過去問(H25春AU午後1問1)を見てみましょう。

S社では,これまで自社の開発標準に従って,ウォータフォール型の開発を行ってきた。今後は,介護ビジネスなど,新たな事業分野への進出に柔軟に対応するために,“アジャイル開発”を採用することにし,今回,短期間で営業支援システムを開発することにした。
アジャイル開発を採用した経緯〕
 営業支援システムの開発に当たって,介護ビジネスを推進する営業企画部とシステム部が,開発予算と稼働時期について相談した。システム部は,要件定義から本番稼働までに約1年掛かるという見通しであった。一方,営業企画部は,これから新しいビジネスを立ち上げるので,要件定義で全ての要件を確定するのは難しいと主張した。
 そこで,システム部長は,開発を進めながら要件を柔軟に追加・変更して,ビジネスの変化に対応できるアジャイル開発の採用を提案した。その際,アジャイル開発の特徴について,営業企画部に対して次のように説明した。
(1)開発方法論よりも,関係者間の対話を重視して,開発を進める。
(2)ドキュメントの作成よりも,動作するプログラムの開発を優先する。
(3)計画に従うことよりも,ビジネスの変化への柔軟な対応を重視する。
 システム部長は,営業企画部の了解を取り付けた上で,経営陣の承認を得た。 

 後半にあるアジャイルの開発の特徴に関しては、アジャイルソフトウェア開発宣言(http://agilemanifesto.org/iso/ja/manifesto.html )として4つ掲載されている中の一つです。

過去問(H29春AP午後問8)を見てみましょう。

〔採用するプラクティスの検討〕
アジャイル型開発で用いられるチーム運営や開発プロセス,プログラミングなどの実践手法をプラクティスと呼ぶ。本システム開発における,システム要件や開発体制の特徴は次のとおりである。これに基づいて,採用するプラクティスを検討する。
・スコープの変動が激しい
テレビやコマーシャルなどの影響によって,要求の変更が頻繁に発生する。そのために,本システムの品質に責任をもち,優先順位や仕様を素早く決める役割をもつプロダクトオーナを任命する。そして,本システムの要求全体と優先順位
を管理するために[ a:プロダクトバックログ]を採用し,反復する一つの開発サイクル(以下,イテレーションという)において,開発対象となる要求を管理するために[ b:スプリントバックログ ]を採用する。
・求められる品質が高い
一般消費者向けSNSという性質上,その不具合は利用者離れを引き起こしかねない。一定レベル以上の品質を保つために,継続的インテグレーション(以下,CIという)を採用する。
・チームメンバの半数のスキルが未成熟
アサインされたプロジェクトメンバには,アジャイル型開発のベテラン社員と,スキルが未成熟な若手社員が含まれる。チームの中で業務知識やソースコードについての知識をお互いに共有して,品質や作業効率を向上させるために,[ c:ペアプログラミング ]を採用する。 


アジャイル開発(というか、前半3つはXP)のキーワードとして、過去問ではいくつか登場します。
リファクタリング
・過去問(H29春FE午前問50)では、「ソフトウェア開発の活動のうち,アジャイル開発においても重視されているリファクタリング」の説明として、「ソフトウェアの保守性を高めるために,外部仕様を変更することなく,プログラムの内部構造を変更する」とあります。
 先に動くプログラムを作ってしまい、後から、動作や機能(外部仕様)を変更することなく、内部のコードを整形するのである。過去問(H25春AP午前問49)では、「ソフトウェアのリファクタリングの説明」として、「外部から見た振る舞いを変更せずに 保守性の高いプログラムに書き直す」とあります。
・後からプログラムを書きなおすので、すでに開発が完了した部分を再びテストする「回帰テスト」(リグレッションテスト)を行うことを前提としています。過去問(H29秋AP問48)でも、リファクタリングに関して、「アジャイル開発のプラクティスのうち,回帰テストを行うことを前提とする」という記載があります。

ペアプログラミング
品質の向上や知識の共有を図るために,2人のプログラマがペアとなり,その場で相談したりレビューしたりしながら,一つのプログラムの開発を行う。

テスト駆動開発
 テストをパスするプログラムを作り、あとからリファクタリングすることで、開発スピードを高める。
。過去問(H29春FE午前問50の不正解選択肢)では、「動作するソフトウェアを迅速に開発するために,テストケースを先に設定してから,プログラムをコーディングする」とある。
別の過去問(H28春AP午前問50)では、「エクストリームプログラミング(XP:eχtreme Programming)における“テスト駆動開発”の説明」として、「プログラムを書く前にテストケースを作成すること」とある。

イテレーション
・「iteration」は「反復」という意味です。
イテレーションは、「反復する一つの開発サイクル」のことで、2週間や1ヶ月という短い期間が設定されます。この短い期間で、開発側とユーザ側がプログラムの動作を確認しながら要件を確定していくので、ソフトウェアに存在する顧客の要求との不一致を解消したり,要求の変化に柔軟に対応したりすることができます。
・過去問(H29年春AP午前問49)では、「アジャイル開発で“イテレーション”を行う目的」として、「ソフトウェアに存在する顧客の要求との不一致を解消したり,要求の変化に柔軟に対応したりする」とあります。
・過去問(H29春AP午後問8)では、「反復する一つの開発サイクル(以下,イテレーションという)」とあります。
a



イテレーションに関して、過去問(H25春AU午後Ⅰ)では、以下の記載があります。

2.開発企画書の概要
  開発プロジェクトが作成した開発企画書の概要は,次のとおりである。
 (1)本番稼働環境のインフラと,アプリケーションの開発スコープが決まったら,要件定義工程以降は,ユーザチームが機能を評価するためのプログラムの開発を最優先する。
 (2)要件定義工程以降は,次の①~④のプロセスを繰り返す。繰返しの単位を“イテレーション”という。イテレーションの中で,プログラムの動作を確認しながら要件を確定していく。
  ① 開発チームとユーザチームは,ユーザチームの要求を検討し,今回のイテレーションで開発する機能を検討し,要件を確定する。
  ② 開発チームは,確定した要件について,機能設計,プログラミング,単体テスト及びレビューを行う。
  ③ ユーザチームは,確定した要件が実現されているかどうか確認するためのテストを行う。
  ④ 管理チームとユーザチームは,テスト結果を確認し,成果物と進捗状況を確認する。
 (3)イテレーションは4週間を1単位として,6回実施する。
 (4)イテレーションを実施している途中では,随時変更が発生するような設計ドキユメントは作成しない。
(5)基盤チームは,イテレーションの中で使用する開発ツール及びコミュニケーションツールを準備する。S社では,これまでのウォータフオール型の開発方法論に比べて,アジャイル開発の方法論は厳密に定義されているわけではない。そこで,開発ツールの使用方法及びチーム間のコミュニケーションについては,修正を加えながら開発を進めていくことにする。これらのツールを使用して,進捗管理,品質管理,バージョン管理などを行い,情報を共有することでプロジェクトの状況を可視化することができる。
(6)最後のイテレーションで実装された機能を,最終的に営業支援システムで実現する要件として決定する。 

2.アジャイルagile)開発の過去問を解いてみよう

(1)H26秋AP午前問49

問49 アジャイルソフトウェア開発などで導入されている”ペアプログラミング”の説明はどれか。

ア 開発工程の初期段階に要求仕様を確認するために,プログラマと利用者がペアとなり,試作した画面や帳票を見て,相談しながらプログラムの開発を行う。
イ 効率よく開発するために,2人のプログラマがペアとなり,メインプログラムとサブプログラムを分担して開発を行う。
ウ 短期間で開発するために,2人のプログラマがペアとなり,作業と休憩を交代し ながら長時間にわたって連続でプログラムの開発を行う。
エ 品質の向上や知識の共有を図るために,2人のプログラマがペアとなり,その場 で相談したりレビューしたりしながら,一つのプログラムの開発を行う。






【正解】エ

どこかの大手IT会社でもこの手法でうまくいったとかれていた(思い出し中)。

(2)H29秋AP

問48 アジャイル開発のプラクティスのうち,回帰テストを行うことを前提とするものはどれか。
ア 日次ミーティング
イ ふりかえり
ウ ペアプログラミング
エ リフアクタリング






【正解】エ

(3)H29秋AP

問50 アジャイル開発におけるプラクティスの一つであるバーンダウンチャートはどれか。ここで,図中の破線は予定又は予想を,実線は実績を表す。
180405_H29秋AP問50






【正解】ア

(4)H29春AP午前

問49 アジャイル開発で“イテレーション”を行う目的のうち,適切なものはどれか。
ア ソフトウェアに存在する顧客の要求との不一致を解消したり,要求の変化に柔軟に対応したりする。
イ タスクの実施状況を可視化して,いつでも確認できるようにする。
ウ ペアプログラミングのドライバとナビゲータを固定化させない。
エ 毎日決めた時刻にチームメンバが集まって開発の状況を共有し,問題が拡大したり,状況が悪化したりするのを避ける。






【正解】ア

(5)H26秋AP午前

問49 アジャイルソフトウェア開発などで導入されている“ペアプログラミングの説明はどれか。
ア 開発工程の初期段階に要求仕様を確認するために,プログラマと利用者が ペアとなり,試作した画面や帳票を見て,相談 しながらプログラムの開発を行う。
イ 効率よく開発するために,2人のプログラマがペアとなり,メインプログラムとサブプログラムを分担して開発を行う。
ウ 短期間で開発するために,2人のプログラマがペアとなり,作業と休憩を交代 しながら長時間にわたって連続でプログラムの開発を行う。
エ 品質の向上や知識の共有を図るために,2人のプログラマがペアとなり,その場で相談したりレビューしたりしながら,一つのプログラムの開発を行う。






【正解】エ
 ペアプログラミングは、言葉の通り、2人のプログラマがペアになります。イやウのように、プログラムを分担するのではなく、一つのプログラム開発を、相談しながら一緒に作り上げます。