1
Copyrights© BCA inc. All rights reserved. 特定非営利活動法人 ドットNET分散開発ソフトピア・センターAgile and Iterative Development (アジャイル&反復型開発)
エンジニア育成コースのご紹介
Copyrights©2008 SSS Corporation特定非営利活動法人
ドットNET分散開発ソフトピア・センター
戸田 孝一郎
理事
Certified Scrum Master
(注)(注): 米国ScrumAlliance.org 認定の公認スクラムマスター
(参照:http://www.scrumalliance.org/community/csms_only?alpha=T&page=12)
2
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター小説(本)
映画
連続ドラマ(TV)
興行収益?
投下費用?
事業リスク?
ウォーターフォール
イタラティブ&アジャイル
3
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター
Copyrights© BCA inc. All rights reserved. Copyrights©2008 SSS Corporation
アジャイルとは
An iterative and incremental (evolutionary) approach performed with project stakeholders
in a highly collaborative and self-organizing manner with just the right amount of ceremony
to produce high-quality software in a cost-effective and timely manner that meets
stakeholders changing needs.
高品質でムダの無い、且つ変更要求に対応できるソフトウエアを作成する為の適切な一連の手
順に従い高い協調と自律的なプロジェクト関係者によって実施される反復(周期)的、インクリメ
ンタルなアプローチである。
キーワードは、
Iterative (反復的に)、 Collaborative (協業)、 Self-organizing (自律的、自己統制)、
High-quality Software (高品質ソフトウエア)、 Cost-effective (ムダの無い)、 Meet
changing needs (変更への即応)
アジャイル (Agile, Agility): 機敏、軽快
リーン (Lean): 贅肉の無い、ムダの無い
4
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター
アジャイル・ソフトウエア開発とは
ここ十年(21世紀に入って)注目されてきたシステム構築のメソドロジー
1.Dynamic System Development Method (Dane Faulkner) -2006
2.Adaptive Software Development (Jim Highsmith)
3.Crystal Clear (Alistair Cockburn)
4.Scrum (Ken Schwaber, Jeff Sutherland, Mark Beedle) 1994-2002
5.XP <eXtreme Programming> (Kent Beck, Eric Gamma) 1996-2000
6.Lean Software Development (Tom and Mary Poppendieck) -2003
7.Feature-Driven Development (Peter Code, Jeff DeLuca) -2002
8.Agile Unified Process (Scott Ambler)
9.RUP <Rational Unified Process> 1999-2003
要求仕様 リソース 納期 プラン・ドリブン 実現仕様 リソース 納期 バリュー・ドリブン
前提条件(フィックス)
推定
アジャイル
ウォーターフォール(従来)
5
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター
アジャイル・マニフェスト(2001)
www.agilemanifesto.org
より抜粋
2001年11月13日に起案
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have
come to value;
Individuals and interactions over processes and tools.
Working software over comprehensive documentation.
Customer collaboration over contract negotiation.
Responding to change over following a plan.
That is, while there is value in the items on the right, we value the items on the left more.
Copyrights©2008 SSS Corporation
我々は自ら実践し、また実践しようとしている人を支援することを通して、よりよいソフトウエア開発の方法を見出そうとしている。
この活動をとおして我々は下記のようなことを価値あるものと考えるに至った。
プロセスやツールよりも、個人や相互関係を。
---ツールも大事であるが、一人のエース・プログラマーより平均的なプログラマーの
チームワーク。
包括的なドキュメントよりも、働くソフトウエアを。
----ドキュメントのないプログラムは最悪、しかしドキュメントが多い物よりは少ない
物の方が良い。
契約折衝よりも、顧客とのコラボレーションを。
---成功するプロジェクトは顧客を巻き込み、定期的に顧客にフィードバックする事。
計画に従うことよりも、変化への対応を。
---良い計画とは詳細な2週間の計画と荒い3ヶ月の予定であり、それ以上はメモ。
直近2週間の計画を変更する事は、あらゆる点で大変困難である。
これは太字の項目をより重視すると言うことであり、細字の部分を無視して良いと言う事ではない。
Copyrights©2008 SSS Corporation6
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター 1.Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
我々の最優先事項は素早いそして継続的な価値あるソフトウエアの提供を通して顧客の満足を得る事である。
2.Welcome changing requirements, even late in development. Agile process harness change for the customer’s competitive advantage. 開発局面の後半でも要求変更を歓迎する。アジャイルなプロセスを顧客の競争優位の為の変化に利用する。
3.Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. 稼動するソフトウエアをより短かい期間を優先して、数週間から数ヶ月で定期的に提供する。
4.Business people and developers must work together daily throughout the project.
プロジェクト期間を通して業務ユーザーと開発者は共同して作業をしなければならない。
5.Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. やる気のある個人を集めてプロジェクトを組織し、彼らが必要とする環境と支援を与え、仕事が完了するまで信頼する。 6.The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
部門内、間のコミュニケーションで最も効率的かつ効果的な手法は、フェイスツーフェイスの会話である。 7.Working software is the primary measure of progress.
ソフトウエアが正常に機能するということが進捗の基本的な評価である。 8.Agile processes promote sustainable development.
アジャイルプロセスは持続可能な開発を促進する。
9.The sponsors, developers, and users should be able to maintain a constant pace indefinitely. スポンサー、開発者、ユーザーは無期限かつ不断に保守できるようにしなければならない。 10.Continuous attention to technical excellent and good design enhances agility.
技術的に優れた良い設計に継続的に配慮する事は機敏性(アジリティー)を増長させる。 11.Simplicity- the art of maximizing the amount of work not done- is essential.
簡素が基本 -しない仕事の極大化の美学ー
12.The best architectures, requirements, and designs emerge from self-organizing teams. 最良の構想、要求仕様、設計は自己統制された(自律的)チームより出現する。
13.At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. 定期的にチームが振り返りを行い、より効果的に出来る方法を思案し、チームの行動に協調と調整が働く。
Key principles that support the Philosophy of Manifesto
7
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センターウォーターフォール開発(従来)の問題点
要求仕様 設計 コーディング ユニット・テスト システム統合 運用保守 0 3 6 9 12 時間経過(月) 納期ウォーターフォール型開発
0 3 6 9 12 25% 50% 75% 100% 時間経過(月) 要求 の 信 憑性要求の時間的変質
24ヶ月後で は25%程度 平均的な値 Copyrights©2008 SSS Corporationウォーターフォール型開発
反復型開発
リスクに捉まる潜在的な影響度
Copyrights©2008 SSS Corporation8
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センターアジャイル開発の特徴
•
イタレーション
• 周期的な納品(1週間~8週間)•
開発チーム
• 自己統制型、オーナーシップ(自己申告) • 開発プロセスの標準化 • 技術、情報の共有化(見える化)•
簡潔なデザインとコード
• リファクタリング•
ペア・プログラミング
• コードの標準化 • 技術の共有、技術伝承•
タスクボード
• 機能の提供(完了)をもって進捗を把握 • 作業の宣言(タスクと作業時間、見積工数)•
テスト駆動開発
• テストの自動化 • アクセプタンス・テスト(完了・終了の定義)•
継続的インテグレーション(基本的に毎日昼)
• 行灯 • 自動テスト•
簡潔な文書化
• ユースケースか?ユーザーストリーか? • UML イタレーション1 イタレーション2 イタレーション3 イタレーション4 イタレーション5 納品 納品 納品 納品 納品 4週間 4週間 4週間 4週間 4週間バーンダウン・チャート
タスクボード
To Do On Going Done a e d c b f g h 当日の作業タスク用(80%) メンテ用(10%) リファクタリング用 (10%) テスト正常終了 テスト異常発生 チーム全員でメンテ実行 テスト コード デザイン 小さいテストのコード作成 次にソース・コードを作成 最後にデザインをリファクタリングする。 このプロセスを廻す。 ペアの交替(定期的)9
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved. Copyrights©2008 SSS Corporation Product Backlog 1.--- 2.--- 3.--- 4.---5.--- Part 1 Part 2Sprint Task List (Sprint Backlog) a.--- b.--- c.--- d.--- e.--- f.---Sprint Review Refactoring
Daily Scrum
Iteration (Sprint)
Scrumによるアジャイル・プロジェクト運営(管理)
Sprint Planning2週間~10週間
Product Owner (お客様) Scrum Master (ファシリテーター) TeamDeveloper (Pair Programming)
バーンダウン・チャート
毎朝15分のスタンド アップ・ミーティング デザイン・開発・テストタスクボード
To Do On Going Done a e d c b f g h 2時間 2時間 確実な優先順位付け (同位は無し) 追加、修正、変更可能 (Sprintに入っている 物以外) Product Ownerが全 て責任を持つ10
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センターアジャイル開発経験事例報告(あるエンジニアの声)
エンジニアA氏: アジャイル初体験、ウォーターフォール開発経験約15年(主任クラス)37才 > 情報処理技術者 1種 > UMTP L1 > 業務SE(物流/生産管理/公共サービス) 8年 > ホスト汎用機テクニカルSE 7年 > 今回 .NETは初めての経験 > JAVA(web) 3年 > PL/SQL 2年 > VB.NET (2週間:本アジャイル開発で初) > COBOL、C++ etc(細かい開発は多数) アジャイル開発の効果: コーディングの生産性は変わらないが、開発作業内で手戻りが無く、結果的に早く完了できる。 体験した感想: とにかく頭が疲れる。集中する。 ・品質が高くなる。 ・技術的な問題や、方式で悩む時間が少ないので効率は良い。 ・気を抜く暇がないので、稼働率は高い ・二人でやっているので、生産性は倍まではいかない。ただし品質が高いので、改修やテスト時の修正工数は少なくなる ・ペアプロ/クロスファンクションにより ソースコードレベルで情報を共有するため、 自然に 可読性/ロジックのシンプルさが感じられる実装となる。 ・随時に動かしながら機能拡張をするため、潜在バグ/デグレードのリスクは低い。 ・実装が不慣れな要員がいても、ペアの組み合わせにより品質の高い実装が可能となる。 ・作業の完了が、視覚的に理解できる。実装の成果がすぐに見れる。 ・スタンドアップミーティング/振り返り/タスクの割り振りによりメンバー全員が全体の作業を見渡せる。司会を持ち回りすることにより参加意識が強調される。 人に見られているのに、適当な(動けばいい)コーディングはできない。 ・悩んでいる時間が少ない。(随時相談/調査) ・具体的な目標を随時持つことができる。 ・タスク担当を明確にすることにより、責任範囲の当事者意識を持つことができる。 エンジニアB氏: アジャイル初体験、ウォーターフォール開発経験約5年 28才> Oracle Master Bronze 10g > VB.NET:1年 > HTML、JavaScript、CSSなどWeb関係:1年(随時) > PHP:1年 > VB6:3年 > PL/SQL:1年 > XML:1ヶ月 アジャイル開発の効果: 生産性が上がった(体感)。 体験した感想: 個人のコミュニケーション能力が高く問われる ・二人で作業を行っているため、単純ミスも少なく精度が高い。 ・思った以上に疲れる。気を抜く暇がない。
11
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved. Copyrights©2008 SSS Corporationウォーターフォール
イタラティブ
アジャイル
~1990
~2000
プロジェクト管理者
スクラムマスター
(管理、監督者) (ファシリテーター)長期、冗長開発
反復(周期)的開発
短期、反復(周期)的開発
人海戦術
テスト自動化
継続的インテグレーション
階層的構造
チーム、役割分担
自律的、自己統制的チーム
ペアプログラミング
大規模、大人数、大部屋
大きなチーム(100人)
小さなチーム(4~8人)
間仕切り
間仕切り
小部屋、オープン
テスト駆動開発
時間内+時間外 (3K)
時間内(6~8時間/日)
まとめ
契約的、要求仕様
要求仕様
ユーザー協業、実現仕様
請負型開発(指示待ち)
提案型開発
欧米での導入時期
12
<<アジャイル入門>>アジャイル入門コース
<<.NET入門>>.NET開発入門コース
<<アジャイル入門>>テスト駆動開発入門
コース
<<パターン入門>>デザインパターン入門
コースA
<<アジャイル実践>>リファクタリングコース
A
<<アジャイル実践>>リファクタリングコース
B
<<パターン実践>>デザインパターン入門
コースB
<<パターン実践>>デザインパターン入門
コースC
<<.NETアジャイル>>演習コース
応用 基本 アジャイル .NET UML このコースを受講するに は基礎的なUMLの知識 が必要となります。 UMTP:L1相当のスキル UMTP認定 の L1相当の スキルが必 要 UMTP認定 の L2相当の スキルが必 要 ※矢印はトレーニングを受講する上での前提スキルを表現しています。 トレーニングを受講するにあたって、矢印の元となっているトレーニングコースと同等のスキルが必要となります。 特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター UMTP認定の L3相当のスキ ルアジャイル・エンジニア育成コース体系
13
エクストリームプログラミング入門
受講料 : (アジャイル入門コース) 期 間 : 1日間 開催日 : ★学習目標 : アジャイル開発の基本となるXP(エクストリームプログラミング)について、考え方やプロセス・プラクティスの実践方法、 基本的な開発の流れを学習します。 また、演習やXPを適用したプロジェクト事例を元に、XPの特徴や導入の仕方を理解します。 ★学習内容 : 1.XPの概要 2.XPの背景 3.XPの思想 4.XPの戦略 5.プロセス 6.プロセス理解のための演習(注:プログラミングではありません) 7.プラクティス 8.開発事例の紹介・導入にあたって ★前提知識 : XP開発の基礎知識を習得したい技術者やマネージャの 方 ★開催場所 : 別途 ★講 義 時 間 : 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★アジャイル入門★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved.14
.NET開発入門コース
受講料 : 期 間 : 2日間 開催日 : ★学習目標 : これから.NET開発に取り組みたいエンジニアを対象に、開発を進める上で必須となる基本的な事項を学習します。 .NETで実装出来るアプリケーションの特徴や、開発環境の構築方法、開発の進め方について、 演習を行いながら概要を習得します。 ★学習内容 : 1..NET開発の特徴と流 れ 2.開発環境の構築(VisualStudio/VisualSourceSafe) 3.ASP.NETによるインターフェース実装 4.C#によるロジック実装 - 画面ハンドリング 5.ADO.NETによるデータベースアクセス 6.レイヤリング 7.リッチクライアントとネットワーキング 8..NETのテスティングフレームワーク ★前提知識 : 何らかの言語を使用して開発を行った経験がある方 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★.NET入門★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター15
テスト駆動開発入門
受講料 : 期 間 : 2日間 開催日 : ★学習目標 : XPの中でもキープラクティスの1つであるTDD(テスト駆動開発)について、実践形式で学習します。 TDDを適用しながら、機能拡張やリファクタリングを進めます。 ★学習内容 : 1.TDDのサイクル 2.NUnitの使い方 3..TDDの演習 - 基 本 4.TDDの演習 - 応用(デザインパターンの適用等) 5.導入に当たって注意すべき点 ★前提知識 : オブジェクト指向プログラミングに通じ、基本となるデザインパターンを理解されている方。 アジャイル入門コース並びに、デザインパターン入門コースAのスキル同等が必要です。 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★アジャイル入門★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved.16
デザインパターン入門A
受講料 : 期 間 : 2日間 開催日 : ★学習目標 : 仕様変更や機能追加に強いソフトウェア設計をGoF(Gang of Four)のデザインパターンを基に学びます。 23のパターンの中から、基本となるシンプルなものを取り上げ、実装コードを交えながら解説していきます。 デザインパターンを適用した洗練されたオブジェクト指向設計方法を身に付けます。 ★学習内容 : 1.オブジェクト指向設計の概要 2.パターン概要、GoFパターンの概要 3.Template Methodパターン 4.Factory Methodパターン 5.Singletonパター ン 6.Adapterパターン ※1 随時演習を行いながら進めていきます ※2 紹介するパターンは変更される事があります ★前提知識 : UMLクラス図及びC#のソースコードが読める方。オブジェクト指向によるクラス設計の技術を習得したい方。 UMLの前提知識はUMTPのUML技能認定L1相当を前提とします。 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★パターン入門★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター17
デザインパターン入門B
受講料 : 期 間 : 2日間 開催日 : ★学習目標 : 仕様変更や機能追加に強いソフトウェア設計をGoF(Gang of Four)のデザインパターンを基に学びます。 基本的なパターンを理解している事を前提に、応用的なパターンを学習します。 ★学習内容 : 1.Abstract Factoryパターン 2.Compositeパター ン 3.Observerパターン 4.Facadeパターン 5.Stateパターン 6.Strategyパターン 7.Bridgeパターン ※1 随時演習を行いながら進めていきます ※2 紹介するパターンは変更される事があります ★前提知識 : デザインパターン入門コースAを修得済みであるか、UMTPのUML技能認定L2相当のUMLスキルを前提とします。 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★パターン実践★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved.18
デザインパターン入門C
受講料 : 期 間 : 1日間 開催日 : ★学習目標 : 仕様変更や機能追加に強いソフトウェア設計をGoF(Gang of Four)のデザインパターンを基に学びます。 これまで学習したパターンを組み合わせてより抽象度の高い実装を行います。 ★学習内容 : 1.GoFパターンのおさら い 2.Visitorパターン 3.Commandパターン 4.Interpreterパターン ※1 随時演習を行いながら進めていきます ※2 紹介するパターンは変更される事があります ★前提知識 : デザインパターン入門コースBを修得済みで且つ、UMTPのUML技能認定L2相当のUMLスキルを前提とします。 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★パターン実践★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター19
リファクタリングコースA
受講料 : 期 間 :2日間 開催日 : ★学習目標 : プログラムからの設計改善の技術であるリファクタリングについて、実践形式で学習します。 プログラムに手を加え、見通しのよいプログラムコードへ改善する方法を習得します。 ★学習内容 : 1.リファクタリングの概 要 2.コードの臭い 3.コードを整えるリファクタリング 4.クラスを整えるリファクタリング 5.シンプルなパターンを適用したリファクタリング ※1 随時演習を行いながら進めていきます ★前提知識 : デザインパターン入門コースBを修得済みで且つ、テスト駆動開発入門コースを習得済み。 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★アジャイル実践★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved.20
リファクタリングコースB
受講料 : 期 間 :1日間 開催日 : ★学習目標 : 応用的なデザインパターンや基礎的なリファクタリングを習得している事を前提に、 実践を通じてパターンを適用してクラス間の関係の整理の仕方を学習します。 ★学習内容 : 1.リファクタリングのおさらい 2.シンプルなパターンを適用したリファクタリング 3.複雑なパターンを適用したリファクタリング ※1 随時演習を行いながら進めていきます ★前提知識 : デザインパターン入門コースCを修得済みで且つ、リファクタリングコースAを習得済み。 ★開催場所 : 別途 ★講 義 時 間 : 各日とも 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★アジャイル実践★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター21
演習コース
受講料 : 期 間 : 3日間 開催日 : ★学習目標 : アジャイル開発手法を適用した.NETアプリケーション開発の演習を行います。 アプリケーション開発を通して、.NETアプリケーションの開発の流れ、デザインパターンの適用、 TDDといったこれまでのトレーニング内容を実践していきます。 ★学習内容 : 1.アジャイルプラクティスのおさら い 2.ストーリーカード、タスクカードの使い方 3.開発環境の構築 4..NETアプリケーション開発の流れ 5.ペアプログラミング 6.TDD 7.デザインパターンの適用 ★前提知識 : C#による開発が行え、基本的なデザインパターンを理解している方。また、シンプルなTDDを実践できる方。 テスト駆動開発入門コース・.NET開発入門コース・デザインパターン入門コースAの3コースを修得しいることが望ましい。 ★開催場所 : 別途 ★講 義 時 間 : 午前10時~午後5時 ★募集人数 : 別途 ★申込締切日 :別途★.NETアジャイル★
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター Copyrights© BCA inc. All rights reserved.22
特定非営利活動法人 NPO ドットNET分散開発ソフトピア・センター