中電シーティーアイ流
ハイブリッド型アジャイル開発のすべて
平成29年3月3日
株式会社 中電シーティーアイ 佐村 卓
INDEX
1. はじめに
2. アジャイル開発とは 3. 従来型開発との融合 4. 見える化の徹底
5. 顧客との協調作業
6. 開発環境の自働化
7. まとめ
はじめに
中電シーティーアイのご紹介
商号 株式会社中電シーティーアイ 設立(合併) 平成15年10月1日
資本金 1億円
出資会社 中部電力株式会社
従業員数 1053名(平成28年7月現在)
売上高 333億円(平成27年度)
はじめに
当社システム開発の特徴・課題
中部電力株式会社およびグループ各社のシステム開発・保守
開発・保守件名の一括受注とメーカーおよび協力会社への発注 特 徴
要求仕様がなかなか固まらない
度重なる仕様追加・変更と手戻り手直し
更なる生産性向上と効率化
課 題
アジャイル開発とは
アジャイル開発への期待
要件が決まっていなくても開発できる
開発期間を短縮できる
開発費用を安くできる
アジャイル開発とは
アジャイル開発の概要
計画~テスト 計画~テスト 計画~テスト
数週間~数ヶ月 数週間~数ヶ月 数週間~数ヶ月
毎回リリース 毎回リリース 毎回リリース
反復 反復 反復
•
アジャイルとは『すばやい』『俊敏な』という意味で、反復 (イテレーション) と呼ばれる数週間~数ヶ月の短い開発単位を採用することにより、リスクを最小化しようとする開発手法。
•
開発対象を多数の小さな機能に分割し、反復内で機能を開発する 。この反復を 繰り返し行うことで、 機能を1つずつ追加的に優先度を付けて開発してゆく。•
1つの反復内では、計画、要求分析、設計、実装(コーディング) 、テストと いった、ソフトウェア開発で必要とする全ての工程を行う。アジャイル開発とは
Scrum(スクラム)開発
スプリント
計画会議 設計~製造~テスト スプリント
レビュー 振り返り 日々進捗や問題の共有
タスク 洗い出し
スプリント(数週間~数ヶ月)
アプリの動作を確認 作業タスクの洗い出し
スプ リン トを 反復 繰り 返す スプリントバックログ
(スプリント期間で 実施するもの)
開発チーム会議 デイリースクラム 受入テスト
プロダクト バックログ
(顧客要求事項)
アジャイル開発とは
XP(エクストリームプログラミング)
アジャイルソフトウェア開発宣言の起草者の一人である米国のケント・
ベックらによって考案されたソフトウェア開発手法
4つの価値
・コミュニケーション (Communication)
・シンプルさ (Simplicity)
・フィードバック (Feedback)
・勇気(変更に対する)(Courage)
XPのプラクティス(実践)
・顧客同室 ・継続的インテグレーション
・テストファースト ・チーム全体/多能工
・ペアプログラミング ・持続可能なペース/週40時間
・リファクタリング ・小さなリリース
・ソースコードの共同所有 ・計画ゲーム
・メタファー/比喩 ・コーディング標準
アジャイル開発とは
アジャイル開発のプラクティス
プロセス的なプラクティス
(スクラム開発)
• ファシリテーション
• 振り返り
• 自律的な開発チーム
• 朝会
技術的なプラクティス
(XP)
• テストファースト
• ペアプログラミング
• リファクタリング
• 継続的インテグレーション
人間性を重視し、リードタイム短縮と自働化を図る
アジャイル開発とは
アジャイル開発の源流
代表的なアジャイル開発手法のすべてが
トヨタ生産方式
を源流とする⇒「カイゼン」、「見える化」、「ムリ、ムラ、ムダの排除」、「かんばん」、
「自働化」、「現地現物」、「なぜなぜ5回」、「5S」など
アジャイル開発への応用 7つのムダ
余分な機能のムダ、遅れのムダ、引き継ぎのムダ、再学習のムダ、未完成 のムダ、タスク切り替えのムダ、欠陥のムダ
ポカよけ
欠陥を出さないためにリリースを短い期間で繰り返し、フィードバックを 頻繁に行う方法
かんばん
「JITフロー」JIT(Just In Time)で必要なモノを、必要なときに、
必要なだけ作るように見える化
アジャイル開発とは
アジャイル開発のまとめ
「カイゼン」や「ムダの排除」などによる
生産性向上と品質向上
ムダなくシンプルに作ることによる変更要求への
柔軟性確保
反復型開発での要求仕様の早期確認による
リスクの最小化
「かんばん」などの「見える化」による
問題の早期発見と対策
顧客と開発メンバーの
協調作業
「自働化」による
作業効率の向上と欠陥除去
従来型開発との融合
ハイブリッド型アジャイル開発
企画 要件 定義
スクラム開発
ハイブリッド型
企画 要件 定義
結合 テスト
総合 テスト
従来型(ウォーターフォール型)
基本 設計
(外部設計)
詳細 設計
(内部設計)
プログラミング 単体テスト
事前に行う
複数開発チームが次々とソフトウェアを製造するため、これら を統合するテスト工程(結合・総合テスト工程)を設ける
sprint(2)
sprint(1)
sprint(3) sprint(4) ・・・ sprint(n)
2週間
従来型開発との融合
ハイブリッド型アジャイル開発
基本設計書
詳細設計書
保守用資料、その他 保守用資料、その他
従来型開発での
成果物量 ハイブリッド型開発 での成果物量
80%
詳細設計書 基本設計書
標準値=ポイントを決め、
各ストーリーの相対値を決める
例:“日中に営業部が自席の事務PCから 入力確認のために販売一覧を参照し たい”
見える化の徹底
要求事項A 要求事項B 要求事項C 要求事項D 要求事項E 要求事項F 要求事項G 要求事項H
優先 度 高
低
プロダクトバックログ
ストーリーボード
顧客の要求事項を5W1Hで表す
「ストーリーポイント」を付ける
「ユーザーストーリー(ストーリー)」
に変える
見える化の徹底
ストーリーボード
要求事項A 要求事項B 要求事項C 要求事項D 要求事項E 要求事項F 要求事項G 要求事項H 要求事項X
優先 度 高
低
スプリントバックログ プロダクトバックログ
全 開 発 期 間
生産性を上げない限り プロジェクト全開発期間で 開発可能な量は変わらないため 開発枠が固定される
見える化の徹底
ストーリーボード
要求事項A 要求事項B 要求事項C 要求事項D 要求事項E
要求事項F 要求事項G 要求事項H 要求事項X
優先 度 高
低
スプリントバックログ プロダクトバックログ
生産性を上げない限り プロジェクト全開発期間で 開発可能な量は変わらないため 開発枠が固定される
生産性を上げない限り
プロジェクト全開発期間で 開発可能な量は変わらないため 開発枠が固定される
全 開 発 期 間
見える化の徹底
ストーリーボード
スプリント(12) (9月第3,4週)
・・・
スプリント(2) (4月第3,4週) スプリント(1)
(4月第1,2週)
スプリント
ストーリー ストーリー ストーリー ストーリー
ストーリー ストーリー ストーリー
ストーリー ストーリー ストーリー ストーリー
達成感を共有する
全 開 発 期 間
開発期間を見極める
ストーリーボード
見える化の徹底
見える化の徹底
タスクかんばん
ToDo(未着手)
ストーリー Doing(進行中) Done(終了)
ストーリー1
ストーリー2
タスク2 タスク4 タスク5
タスク3
タスク1
タスク6
タスク2 タスク1
タスク3 タスク4
タスク5 タスク6
あんどん表示
見える化の徹底
タスクかんばん
見える化の徹底
タスクかんばん(電子かんばん)
見える化の徹底
テストかんばん(結合テスト以降)
A機能×B機能 テストシナリオ
B機能×C機能 テストシナリオ
A機能
ToDo
不具合Done
テストケース5 テストケース1
テストケース2
B機能 不具合
テストケース3
テストケース4
C機能
Doing
不具合テストケース6
テストケース1
テストケース2 テストケース3 テストケース4
テストケース5
テストケース6
テストかんばん(結合テスト以降)
見える化の徹底
ToDo 不具合レーン Done
見える化の徹底
バーンダウンチャート(進捗管理)
見える化の徹底
KPTボード
Keep Try
継続
問題
強化 挑戦
Problem
見える化の徹底
今の気持ちは?
開発メンバー全員の気持ち
振り返りの際にシールを貼る
顧客との協調作業
顧客同室
顧客には開発チームと可能な限り協調して作業をしていただくために、
プロジェクトルームを設け、動作確認のための顧客用PC、専用の打合せ コーナーを用意した。
プロジェクトルームで毎日行われる朝会への参加
顧客にお願いしたこと・・・
朝会後、プロジェクトルームでの短時間の打合せ スプリント毎の計画会議への参加
スプリント毎のレビュー
区切り区切りでの慰労会参加
開発メンバ 開発担当者
Redmine
Subversion Jenkins Tomcat
開発環境の自働化
①チケット登録
⑧結果通知
②コミット
④コミット通知
③コミット通知
⑦チケット登録 ⑤ビルド・静的解析
・テスト・WAR作成
⑥デプロイ
・GUIテスト
毎日の全アプリケーション自動コンパイル&リンク(ビルド)
毎日の全アプリケーション自動テスト(リグレッションテスト)
継続的インテグレーション
開発ツールを駆使し、ビルドとテストを頻繁に行うことにより開発効率の 向上と品質の向上を実現すること。
まとめ
アジャイル開発への期待
要件が決まっていなくても開発できる 開発期間を短縮できる
開発費用を安くできる
要件の定義は必要。早期リリースで思い違いを早く見つける。
カイゼンやムダの排除、シンプルな考え、自働化で生産性を上げる。
動くソフトウェアを重視し、ドキュメント作成稼動時間を低減する。