開発品質向上開発品質向上開発品質向上開発品質向上のためののためののためののための、、、、開発品質向上開発品質向上開発品質向上開発品質向上のためののためののためののための、、、、ASQASQASQASQASQASQASQASQ////////ALMALMALMALMALMALMALMALMソソソソソソソソリューションリューションリューションリューションリューションリューションリューションリューション~~~~~~~~品質向上策品質向上策品質向上策品質向上策・・・・活用活用活用活用していないのはしていないのはしていないのはしていないのは何故何故何故何故ですかですかですかですか????品質向上策品質向上策品質向上策品質向上策・・・・活用活用活用活用していないのはしていないのはしていないのはしていないのは何故何故何故何故ですかですかですかですか????~~~~~~~~
Developers Summit 2010
藤原藤原藤原藤原藤原藤原藤原藤原 祐之祐之祐之祐之祐之祐之祐之祐之マイクロフォーカス株式会社マイクロフォーカス株式会社
技術部技術部 Testing & Testing & ASQ/ALM ASQ/ALM ソリューションソリューションマネジャーマネジャー
19-B-4
開発開発開発開発プロジェクトのプロジェクトのプロジェクトのプロジェクトの現状現状現状現状開発開発開発開発プロジェクトのプロジェクトのプロジェクトのプロジェクトの現状現状現状現状
開発チームはビジネスの期待にそえるようなアプリケーションを提供すべく絶え間なく努力して開発チームはビジネスの期待にそえるようなアプリケーションを提供すべく絶え間なく努力しているが・・・いるが・・・
28% 23%15% 18% 19% 24%
100%繰返される問題
納期に間に合わない
ビジネスに合致しない
Developers Summit 2010
26% 28%34%
29%35% 32%
46%49%
51%53%
46%44%
0%
1998 2000 2002 2004 2006 2009
失敗失敗失敗失敗
問題問題問題問題をををを含含含含むむむむ
成功成功成功成功
(本来の目的を満たさない)
予算超過
結局、システムが期待通りに完成せず、ビジネスの失敗に
2
長期の景気低迷、予算削減が続く今だからこそ、プロジェクトを黒字で終わらせることが最重要課題。
プロジェクトプロジェクトプロジェクトプロジェクト成功率向上成功率向上成功率向上成功率向上をををを目指目指目指目指してしてしてしてプロジェクトプロジェクトプロジェクトプロジェクト成功率向上成功率向上成功率向上成功率向上をををを目指目指目指目指してしてしてして
Developers Summit 2010
開発プロジェクトを納期内に問題なく納めるために、効果があると思われる工夫は全て試してみる価値があるのではないでしょうか?
3
•設計 •開発 •テスト •運用
•Word、Excelによる
•ドキュメント作成
•フリーツールによる
•コードレビュー
•要員投入による
•負荷テスト
・要員の工数増大・人手によるテストのミス
統一統一統一統一されていないされていないされていないされていない品質品質品質品質チェックチェックチェックチェック体制体制体制体制のののの場合場合場合場合統一統一統一統一されていないされていないされていないされていない品質品質品質品質チェックチェックチェックチェック体制体制体制体制のののの場合場合場合場合
•ソースコード
•手動によるテスト
ドキュメント同士の関連がなく、管
Developers Summit 2010
手作業によるドキュメントおよびソースコードの管理
・上書きや削除によるファイル(データ)の損失
・過去ファイル(データ)の検索にかかる無駄な工数
•フリーのテストツール
•による自動化
一貫した品質管理が出来ず、管理工数も増大
の関連がなく、管理が属人化
・VerUPやバグ修正が無い・他ツールと連携が無い
他ツールと連携が無い・情報の分断・連携機能を自作
4
手作業もしくはフリーツールによる品質管理
・メンテナンス出来ないソースコードの山
・フリーツールの調査、設定に工数が増大
様様様様々々々々なななな品質管理手法品質管理手法品質管理手法品質管理手法様様様様々々々々なななな品質管理手法品質管理手法品質管理手法品質管理手法
要求要求要求要求のののの開発開発開発開発
要求要求要求要求のののの構造化構造化構造化構造化
要件要件要件要件のののの管理管理管理管理
テストテストテストテスト自動化自動化自動化自動化
テストテストテストテスト管理管理管理管理
テストファーストテストファーストテストファーストテストファースト
メトリクスメトリクスメトリクスメトリクス分析分析分析分析
コードカバレッジコードカバレッジコードカバレッジコードカバレッジ
・・・・・・・・・・・・
Developers Summit 2010
要求要求要求要求ドリブンドリブンドリブンドリブン開発開発開発開発・テスト・テスト・テスト・テスト
AgileAgileAgileAgile開発開発開発開発
継続的継続的継続的継続的インテグレーションインテグレーションインテグレーションインテグレーション
リスクベーステストリスクベーステストリスクベーステストリスクベーステスト
負荷負荷負荷負荷テストテストテストテスト
コードインスペクションコードインスペクションコードインスペクションコードインスペクション
5
活用活用活用活用されないされないされないされない理由理由理由理由????活用活用活用活用されないされないされないされない理由理由理由理由????
聞聞聞聞いたことがいたことがいたことがいたことが無無無無いいいい
試試試試してみたがしてみたがしてみたがしてみたが、、、、上手上手上手上手くいかなかったくいかなかったくいかなかったくいかなかった
Developers Summit 2010
役役役役にににに立立立立つとはつとはつとはつとは思思思思えないえないえないえない
やりやりやりやり方方方方がわからないがわからないがわからないがわからない
調調調調べたりべたりべたりべたり、、、、試試試試したりするしたりするしたりするしたりする時間時間時間時間がないがないがないがない
6
活用活用活用活用までのステップまでのステップまでのステップまでのステップ活用活用活用活用までのステップまでのステップまでのステップまでのステップ
守
破
指導者に方法を習い、教えを受けた内容が身につくまで繰り返し作業に打ち込む。
Developers Summit 2010
破
離
7
今までの成果を保持しつつ、他の方法なども積極的に学び、良いところは取り入れていく。
身につけたことを自分に合うように修正し、独自の方法を生み出して更に磨きをかける。
•設計設計設計設計 •開発開発開発開発 •テストテストテストテスト •運用運用運用運用
マイクロフォーカスのASQ製品ソリューション~Automated Software Quality~
Developers Summit 2010
開発の初期段階から、定期的な品質チェックを自動化することで問題の早期発見と品質管理の効率化を実現。
•継続的継続的継続的継続的なななな品質品質品質品質チェックチェックチェックチェック •インテグレーションインテグレーションインテグレーションインテグレーション
•開発支援ツール •テスト自動化ツール
8
マイクロフォーカスのALM製品ソリューション~Application Lifecycle Management~
•要件分析 •モデリング •開発支援 •テスト自動化 •負荷テスト
•設計設計設計設計 •開発開発開発開発 •テストテストテストテスト •運用運用運用運用
Developers Summit 2010
•/管理 •ツール •ツール •ツール •ツール
要件・障害・テスト管理ツール
・・・・・・・・・・・・
構成管理ツール
統一した体制で品質を管理し、全体像を把握可能
9
開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法
Developers Summit 2010
開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法開発品質管理手法
10
ATMにににに関関関関するするするする要件要件要件要件1. 事前条件事前条件事前条件事前条件•顧客は銀行のキャッシュカードを所有している• 銀行のシステムに繋がっており、オンライン状態である• システムは支払い用の現金を備えている
2. 主主主主シナリオシナリオシナリオシナリオ1. ユーザはキャッシュカードキャッシュカードキャッシュカードキャッシュカードをATMに挿入する。2. システムはキャッシュカードから情報を読み取る。3. キャッシュカードが使用可能か調べるために、“ユーザの認証”を行う。4. システムはその時点で有効有効有効有効なメニューなメニューなメニューなメニューを表示する。
ユースケースによるシナリオのユースケースによるシナリオのユースケースによるシナリオのユースケースによるシナリオの構造化構造化構造化構造化ユースケースによるシナリオのユースケースによるシナリオのユースケースによるシナリオのユースケースによるシナリオの構造化構造化構造化構造化
ATMにににに関関関関するするするする要件要件要件要件1.システムは正当なPINを持ったユーザからの金銭要求
しか受け付けない。2.システムは各々の取引において、レシートを印刷する。3.システムは現金引き出しに関連するメニューを表示す
る。4.システムは、ユーザの口座に指定した引き出し金額を
満たしているかチェックする。5.ユーザはレシート印刷出来ないことを知らされ、そのま
ま操作を続行するか尋ねられる。6.システムはATMに設定されている金額以下しか支払う
曖昧な要件重
複
従来の要件定義書 ユースケースによるシナリオ記述
Developers Summit 2010
4. システムはその時点で有効有効有効有効なメニューなメニューなメニューなメニューを表示する。5. ユーザは“引き出し”メニューを選択する。6. システムは既定の引き出し金額リストを表示意する。7. ユーザは引き出し金額を選択する。8. 補助シナリオ“口座の残額をチェック”を呼び出す。9. 補助シナリオ“引き出しの実施”を呼び出す。10. システムはユーザのキャッシュカードを返却する。11. ユーザはキャッシュカードをとる。12. システムはユーザに要求金額を支払う。13. システムは引き出しのトランザクションログを記録する。
6.システムはATMに設定されている金額以下しか支払うことが出来ない。
7.システムはユーザにキャッシュカードを返却出来なくてはならない。
8.システムはユーザにレシートを印刷するかどうか選択肢を与える。
9.システムは口座に十分な金額があれば現金を支給する。
10.ATMは処理が完了したらカードを返却する。11.システムが処理を実行するためには、銀行のシステ
ムに繋がっていなければならない。
・余計な工数や手戻りが発生・意味を想像しながらシステムを設計せざるを得ない・ストーリー性が無いため、テストが困難に・ユーザの視点が欠けており、細かすぎる傾向
・前提条件などを、独立させて見やすく表記
・順序立てて、分かりやすい言葉で記述することで、ストーリー性を明確に
重複
順序が無い
11
構造化構造化構造化構造化
要件要件要件要件のののの管理管理管理管理
リポジトリリポジトリリポジトリリポジトリ
イテレーションイテレーションイテレーションイテレーション0000 イテレーションイテレーションイテレーションイテレーション1111 イテレーションイテレーションイテレーションイテレーション2222 ・・・・・・・・・・・・・・・・・・・・
各各各各イテレーションイテレーションイテレーションイテレーション毎毎毎毎にベにベにベにベースラインをースラインをースラインをースラインを設定設定設定設定
相違点相違点相違点相違点レポートによってレポートによってレポートによってレポートによって変変変変更量更量更量更量をををを定量化定量化定量化定量化
Developers Summit 2010
�� 現在現在現在現在のののの状態状態状態状態とととと個個個個々々々々のベースラインとののベースラインとののベースラインとののベースラインとの違違違違いをリストアップすることでいをリストアップすることでいをリストアップすることでいをリストアップすることで、、、、アプリケーションアプリケーションアプリケーションアプリケーション開発開発開発開発現在現在現在現在のののの状態状態状態状態とととと個個個個々々々々のベースラインとののベースラインとののベースラインとののベースラインとの違違違違いをリストアップすることでいをリストアップすることでいをリストアップすることでいをリストアップすることで、、、、アプリケーションアプリケーションアプリケーションアプリケーション開発開発開発開発のライフサイクルにおけるのライフサイクルにおけるのライフサイクルにおけるのライフサイクルにおける過剰過剰過剰過剰なななな要件変更要件変更要件変更要件変更をををを抑止抑止抑止抑止。。。。のライフサイクルにおけるのライフサイクルにおけるのライフサイクルにおけるのライフサイクルにおける過剰過剰過剰過剰なななな要件変更要件変更要件変更要件変更をををを抑止抑止抑止抑止。。。。
�� =>=>=>=>例例例例えばえばえばえば、、、、変更変更変更変更はイテレーションはイテレーションはイテレーションはイテレーション単位単位単位単位でででで10101010%%%%以内以内以内以内にににに抑抑抑抑えるなどえるなどえるなどえるなど=>=>=>=>例例例例えばえばえばえば、、、、変更変更変更変更はイテレーションはイテレーションはイテレーションはイテレーション単位単位単位単位でででで10101010%%%%以内以内以内以内にににに抑抑抑抑えるなどえるなどえるなどえるなど
ベースラインベースラインベースラインベースライン :::: あるあるあるある時点時点時点時点でのでのでのでの要件要件要件要件のののの情報情報情報情報をををを、、、、名前名前名前名前をををを付付付付けてリポジトリにけてリポジトリにけてリポジトリにけてリポジトリに保存保存保存保存。。。。
12
要求要求要求要求ドリブンドリブンドリブンドリブン開発開発開発開発・テスト・テスト・テスト・テスト要求要求要求要求ドリブンドリブンドリブンドリブン開発開発開発開発・テスト・テスト・テスト・テスト
品質品質品質品質チェックチェックチェックチェック テストテストテストテスト自動化自動化自動化自動化 運用監視運用監視運用監視運用監視要件要件要件要件のののの構造化構造化構造化構造化
Developers Summit 2010
�� 要件要件要件要件のののの分析分析分析分析とととと管理管理管理管理をををを徹底徹底徹底徹底しししし、、、、システムシステムシステムシステム開発開発開発開発がががが間違間違間違間違ったったったった方向方向方向方向にににに行行行行くことをくことをくことをくことを防止防止防止防止要件要件要件要件のののの分析分析分析分析とととと管理管理管理管理をををを徹底徹底徹底徹底しししし、、、、システムシステムシステムシステム開発開発開発開発がががが間違間違間違間違ったったったった方向方向方向方向にににに行行行行くことをくことをくことをくことを防止防止防止防止
�� 要件要件要件要件からからからから正確正確正確正確にににに導出導出導出導出したテストしたテストしたテストしたテスト仕様仕様仕様仕様によりによりによりにより、、、、ユーザのユーザのユーザのユーザの要望要望要望要望をををを満満満満たしたシステムであることをたしたシステムであることをたしたシステムであることをたしたシステムであることを要件要件要件要件からからからから正確正確正確正確にににに導出導出導出導出したテストしたテストしたテストしたテスト仕様仕様仕様仕様によりによりによりにより、、、、ユーザのユーザのユーザのユーザの要望要望要望要望をををを満満満満たしたシステムであることをたしたシステムであることをたしたシステムであることをたしたシステムであることをチェックチェックチェックチェック、、、、保証保証保証保証するするするするチェックチェックチェックチェック、、、、保証保証保証保証するするするする
�� 性能面性能面性能面性能面でのユーザでのユーザでのユーザでのユーザ要望要望要望要望をををを早期早期早期早期にににに明確化明確化明確化明確化しししし、、、、問題問題問題問題がががが後期後期後期後期にににに発覚発覚発覚発覚するのをするのをするのをするのを防防防防ぐぐぐぐ性能面性能面性能面性能面でのユーザでのユーザでのユーザでのユーザ要望要望要望要望をををを早期早期早期早期にににに明確化明確化明確化明確化しししし、、、、問題問題問題問題がががが後期後期後期後期にににに発覚発覚発覚発覚するのをするのをするのをするのを防防防防ぐぐぐぐ
•設計 •開発 •テスト •運用
•継続的な品質チェック •インテグレーション
13
AgileAgileAgileAgileAgileAgileAgileAgile開発開発開発開発開発開発開発開発
XP スクラム クリスタル その他
�プロジェクトにプロジェクトにプロジェクトにプロジェクトに関関関関わるわるわるわる人数人数人数人数とととと重要度重要度重要度重要度によってによってによってによって、、、、対応対応対応対応するするするする方方方方法論法論法論法論をををを使用使用使用使用
�方法論自体方法論自体方法論自体方法論自体をををを、、、、使用使用使用使用しながしながしながしながらレビューらレビューらレビューらレビュー&&&&チューニングチューニングチューニングチューニング。。。。
�関係者間関係者間関係者間関係者間のののの円滑円滑円滑円滑なコミュニなコミュニなコミュニなコミュニケーションケーションケーションケーション
�ドキュメントドキュメントドキュメントドキュメント、、、、コードコードコードコード、、、、ルールルールルールルールなどをなどをなどをなどを極力極力極力極力シンプルにシンプルにシンプルにシンプルに
�頻繁頻繁頻繁頻繁なテストなテストなテストなテスト、、、、レビューによレビューによレビューによレビューによるフィードバックるフィードバックるフィードバックるフィードバック
�編成編成編成編成したチームでしたチームでしたチームでしたチームで、、、、同同同同じゴーじゴーじゴーじゴールをルをルをルを目指目指目指目指すすすす
�毎日毎日毎日毎日、、、、15151515分分分分のスクラムのスクラムのスクラムのスクラム会議会議会議会議をををを開開開開くくくく
�製品製品製品製品、、、、リリースリリースリリースリリース、、、、スプリントのスプリントのスプリントのスプリントのバックログをバックログをバックログをバックログを作成作成作成作成・・・・管理管理管理管理するするするする
�FDD
�DSDM
�などなどなどなど
Developers Summit 2010
・イテレーション・イテレーション・イテレーション・イテレーション開発開発開発開発によるリスクのによるリスクのによるリスクのによるリスクの最小化最小化最小化最小化・コミュニケーションの・コミュニケーションの・コミュニケーションの・コミュニケーションの円滑化円滑化円滑化円滑化によるによるによるによる作業効率向上作業効率向上作業効率向上作業効率向上とととと
14
らレビューらレビューらレビューらレビュー&&&&チューニングチューニングチューニングチューニング。。。。るフィードバックるフィードバックるフィードバックるフィードバック
�導入導入導入導入やややや変更変更変更変更をををを受受受受けけけけ入入入入れれれれ、、、、実実実実施施施施するするするする勇気勇気勇気勇気
バックログをバックログをバックログをバックログを作成作成作成作成・・・・管理管理管理管理するするするする
�などなどなどなど
クリスタルクリスタルクリスタルクリスタル方法論方法論方法論方法論クリスタルクリスタルクリスタルクリスタル方法論方法論方法論方法論
L6 L20 L40 L80
E6 E20 E40 E80
• 人数人数人数人数のののの増加増加増加増加にににに伴伴伴伴いいいい、、、、よりよりよりより大規模大規模大規模大規模なクなクなクなクリスタルリスタルリスタルリスタル方法論方法論方法論方法論((((右右右右))))をををを使用使用使用使用
• プロジェクトのプロジェクトのプロジェクトのプロジェクトの重要度重要度重要度重要度にににに伴伴伴伴いいいい、、、、よりよりよりより厳厳厳厳密密密密なクリスタルなクリスタルなクリスタルなクリスタル方法論方法論方法論方法論((((上上上上))))をををを使用使用使用使用
• 4444かかかか月以内月以内月以内月以内のインクリメンタルのインクリメンタルのインクリメンタルのインクリメンタル開発開発開発開発
• 中間中間中間中間インクリメントインクリメントインクリメントインクリメント反省会反省会反省会反省会のののの実施実施実施実施
重要度重要度重要度重要度
Essentialmoney
Life
Developers Summit 2010
D6 D20 D40 D80
C6 C20 C40 C80
クリアイエロー
オレンジ レッド
・プロジェクトに・プロジェクトに・プロジェクトに・プロジェクトに関関関関わるわるわるわる人数人数人数人数とととと重要度重要度重要度重要度によってによってによってによって、、、、対応対応対応対応するするするする方法論方法論方法論方法論をををを使用使用使用使用。。。。・・・・方法論自体方法論自体方法論自体方法論自体をををを、、、、使用使用使用使用しながらレビューしながらレビューしながらレビューしながらレビュー&&&&チューニングするチューニングするチューニングするチューニングする。。。。
関係者関係者関係者関係者のののの人数人数人数人数
15
Comfort
Discretionary money
ツールにツールにツールにツールにツールにツールにツールにツールによるよるよるよる継続的継続的継続的継続的なななな品質品質品質品質チェックチェックチェックチェックよるよるよるよる継続的継続的継続的継続的なななな品質品質品質品質チェックチェックチェックチェック
設計設計設計設計 開発開発開発開発 テストテストテストテスト 運用運用運用運用
品質品質品質品質チェックチェックチェックチェック
Developers Summit 2010
継続的継続的継続的継続的なななな品質品質品質品質チェックチェックチェックチェック
・・・・静的静的静的静的ソースコードソースコードソースコードソースコード解析解析解析解析によるコードインスペクションによるコードインスペクションによるコードインスペクションによるコードインスペクション– 問題問題問題問題をををを含含含含むコードをむコードをむコードをむコードを、、、、初期段階初期段階初期段階初期段階からからからから定期的定期的定期的定期的にににに漏漏漏漏れなくれなくれなくれなく検証検証検証検証
– メトリクスメトリクスメトリクスメトリクス値値値値((((メソッドメソッドメソッドメソッド複雑度複雑度複雑度複雑度))))によってによってによってによって、、、、メンテナンスメンテナンスメンテナンスメンテナンス性性性性もももも可視化可視化可視化可視化してしてしてして定期的定期的定期的定期的にチェにチェにチェにチェックックックック
16
コードインスペクションコードインスペクションコードインスペクションコードインスペクションコードインスペクションコードインスペクションコードインスペクションコードインスペクション
計画計画計画計画 準備準備準備準備 レビューレビューレビューレビュー エラーエラーエラーエラー修正修正修正修正 修正修正修正修正のののの検証検証検証検証
・・・・要求仕様要求仕様要求仕様要求仕様・ユースケース・ユースケース・ユースケース・ユースケース・ビジネスプロセス・ビジネスプロセス・ビジネスプロセス・ビジネスプロセス・プロジェクト・プロジェクト・プロジェクト・プロジェクト計画計画計画計画・・・・各種設計書各種設計書各種設計書各種設計書
Developers Summit 2010
・・・・ソースコードソースコードソースコードソースコード
・テスト・テスト・テスト・テスト計画計画計画計画・・・・・・・・・・・・
コードレビューによるコードレビューによるコードレビューによるコードレビューによる問問問問題点題点題点題点チェックチェックチェックチェック
コードレビューによるコードレビューによるコードレビューによるコードレビューによる修修修修正確認正確認正確認正確認チェックチェックチェックチェック
• ソースコードのレビューはツールによるソースコードのレビューはツールによるソースコードのレビューはツールによるソースコードのレビューはツールによる自動化自動化自動化自動化がががが可能可能可能可能。。。。
• ソースコードレビューでソースコードレビューでソースコードレビューでソースコードレビューで全全全全てのてのてのての問題問題問題問題をををを見見見見つけられるつけられるつけられるつけられる訳訳訳訳ではないがではないがではないがではないが、、、、工数工数工数工数のののの削減削減削減削減とチェとチェとチェとチェックックックック漏漏漏漏れのれのれのれの防止防止防止防止にはにはにはには大大大大きなきなきなきな効果効果効果効果があるがあるがあるがある。。。。
17
コードレビューコードレビューコードレビューコードレビュー結果結果結果結果サンプルサンプルサンプルサンプル
C#C#C#C#のののの解析結果解析結果解析結果解析結果サンプルサンプルサンプルサンプル JavaJavaJavaJavaのののの解析結果解析結果解析結果解析結果サンプルサンプルサンプルサンプル
Developers Summit 2010
・問題を起こす可能性があるソースを、開発の初期段階で検出・メトリクス値(複雑度)によって、メンテナンス性の低いコードを検出
18
メトリクスメトリクスメトリクスメトリクス((((複雑度複雑度複雑度複雑度))))分析分析分析分析
2 A02 A02 A02 A0 euclid(int m, int n)euclid(int m, int n)euclid(int m, int n)euclid(int m, int n)3333 {{{{ /* Assuming m and n both greater than 0./* Assuming m and n both greater than 0./* Assuming m and n both greater than 0./* Assuming m and n both greater than 0.4444 * return their greatest common divisor.* return their greatest common divisor.* return their greatest common divisor.* return their greatest common divisor.5555 * Enforce m >= n for efficiency.* Enforce m >= n for efficiency.* Enforce m >= n for efficiency.* Enforce m >= n for efficiency.6666 */*/*/*/7 int r;7 int r;7 int r;7 int r;8 A1 if (n > m) {8 A1 if (n > m) {8 A1 if (n > m) {8 A1 if (n > m) {9 A2 r = m;9 A2 r = m;9 A2 r = m;9 A2 r = m;10 A3 m = n;10 A3 m = n;10 A3 m = n;10 A3 m = n;11 A4 n = r;11 A4 n = r;11 A4 n = r;11 A4 n = r;12 }12 }12 }12 }13 A5 A6 r = m % n; /* m modulo n */13 A5 A6 r = m % n; /* m modulo n */13 A5 A6 r = m % n; /* m modulo n */13 A5 A6 r = m % n; /* m modulo n */14 A7 while (r != 0) {14 A7 while (r != 0) {14 A7 while (r != 0) {14 A7 while (r != 0) {15 A8 m = n;15 A8 m = n;15 A8 m = n;15 A8 m = n;16 A9 n = r;16 A9 n = r;16 A9 n = r;16 A9 n = r;
0000
2222
1111
2222
3333
4444
5555
6666
7777
8888
9999
10101010
0000
1111
3333
4444
5555 6666
7777
8888
999911111111
1010101012121212
MacCabeののののCyclomatic複雑度複雑度複雑度複雑度
構文構文構文構文をををを解析解析解析解析しししし、、、、ノードとノードとノードとノードとエッジのエッジのエッジのエッジの数数数数をををを計算計算計算計算
Developers Summit 2010
・ソースコードの構造を分析し、メンテナンス性の悪さを数値化。
19
16 A9 n = r;16 A9 n = r;16 A9 n = r;16 A9 n = r;17 A10 r = m % n; /* m modulo n */17 A10 r = m % n; /* m modulo n */17 A10 r = m % n; /* m modulo n */17 A10 r = m % n; /* m modulo n */18 A11 }18 A11 }18 A11 }18 A11 }19 A12 return n;19 A12 return n;19 A12 return n;19 A12 return n;20 A13 }20 A13 }20 A13 }20 A13 }
10101010
11111111
12121212
13131313
13131313
14141414
ノードエッジのノードエッジのノードエッジのノードエッジの数数数数からからからから複雑度複雑度複雑度複雑度をををを計算計算計算計算
サブシステムサブシステムサブシステムサブシステム アセンブリアセンブリアセンブリアセンブリ201201201201X年年年年X月月月月X日日日日
のコードレビューのコードレビューのコードレビューのコードレビュー結果結果結果結果
201201201201X年年年年X月月月月Y日日日日
のコードレビューのコードレビューのコードレビューのコードレビュー結果結果結果結果
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
レビューレビューレビューレビュー結果結果結果結果
継続的継続的継続的継続的インテグレーションでのコードレビューインテグレーションでのコードレビューインテグレーションでのコードレビューインテグレーションでのコードレビュー活用活用活用活用
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
Developers Summit 2010
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・潜在エラーを事前にチェックし、次工程への持ち越しを防止
・メトリクス値(複雑度)の数値化により、メンテナンス性の低いコーディングのままリリースさせない仕組みづくりが可能
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
レビューレビューレビューレビュー結果結果結果結果
20
コードカバレッジコードカバレッジコードカバレッジコードカバレッジ結果結果結果結果サンプルサンプルサンプルサンプル
行単位行単位行単位行単位のカバレッジのカバレッジのカバレッジのカバレッジ結果結果結果結果カバレッジのカバレッジのカバレッジのカバレッジの進捗状況進捗状況進捗状況進捗状況グラフグラフグラフグラフ
Developers Summit 2010
・テスト実行時に、実行済み行と未実行行を記録
・テスト進捗状況を把握し、カバレッジ率を一定以上に保つことによってテスト品質を管理、向上
21
ユニットテストとカバレッジをユニットテストとカバレッジをユニットテストとカバレッジをユニットテストとカバレッジを組組組組みみみみ合合合合わせわせわせわせ、、、、進捗率進捗率進捗率進捗率をををを管理管理管理管理
サブシステムサブシステムサブシステムサブシステム アセンブリアセンブリアセンブリアセンブリ201201201201X年年年年X月月月月X日日日日
のユニットテストのユニットテストのユニットテストのユニットテスト結果結果結果結果
201201201201X年年年年X月月月月Y日日日日
のユニットテストのユニットテストのユニットテストのユニットテスト結果結果結果結果
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
カバレッジカバレッジカバレッジカバレッジ
カバレッジカバレッジカバレッジカバレッジ
カバレッジカバレッジカバレッジカバレッジ
カバレッジカバレッジカバレッジカバレッジ
カバレッジカバレッジカバレッジカバレッジ
カバレッジカバレッジカバレッジカバレッジ
Developers Summit 2010
・ユニットテスト・ユニットテスト・ユニットテスト・ユニットテスト時時時時にカバレッジにカバレッジにカバレッジにカバレッジ情報情報情報情報をををを収集収集収集収集しししし、、、、結果結果結果結果をマージすることでをマージすることでをマージすることでをマージすることで全体全体全体全体のテストのテストのテストのテスト進捗進捗進捗進捗情報情報情報情報をををを管理管理管理管理
マージマージマージマージ結果結果結果結果
XMLカバレッジカバレッジカバレッジカバレッジ結果結果結果結果 XMLカバレッジカバレッジカバレッジカバレッジ結果結果結果結果Excelなどをなどをなどをなどを利用利用利用利用しししし
てカバレッジてカバレッジてカバレッジてカバレッジ率率率率によによによによるるるる進捗進捗進捗進捗レポートをレポートをレポートをレポートを作作作作成成成成
マージマージマージマージ結果結果結果結果
22
分散開発環境分散開発環境分散開発環境分散開発環境におけるにおけるにおけるにおける変更変更変更変更////構成管理構成管理構成管理構成管理
構成管理ツール「構成管理ツール「StarTeamStarTeam」」」」」」」」 がががが、、、、プロジェクトのプロジェクトのプロジェクトのプロジェクトの開発資料開発資料開発資料開発資料およびおよびおよびおよび活動活動活動活動をリポジトをリポジトをリポジトをリポジトがががが、、、、プロジェクトのプロジェクトのプロジェクトのプロジェクトの開発資料開発資料開発資料開発資料およびおよびおよびおよび活動活動活動活動をリポジトをリポジトをリポジトをリポジト
リによってリによってリによってリによって一元的一元的一元的一元的にににに管理管理管理管理。。。。チームがチームがチームがチームが離離離離れてれてれてれて作業作業作業作業するするするする分散開発環境分散開発環境分散開発環境分散開発環境においてもにおいてもにおいてもにおいても、、、、リによってリによってリによってリによって一元的一元的一元的一元的にににに管理管理管理管理。。。。チームがチームがチームがチームが離離離離れてれてれてれて作業作業作業作業するするするする分散開発環境分散開発環境分散開発環境分散開発環境においてもにおいてもにおいてもにおいても、、、、チームチームチームチーム間間間間のコミュニケーションをのコミュニケーションをのコミュニケーションをのコミュニケーションを円滑化円滑化円滑化円滑化。。。。チームチームチームチーム間間間間のコミュニケーションをのコミュニケーションをのコミュニケーションをのコミュニケーションを円滑化円滑化円滑化円滑化。。。。
Geographically Distributed Development
Developers Summit 2010
統合された資料および活動の管理Geographically Distributed Development
(分散環境での開発支援)
23
従来従来従来従来のののの開発開発開発開発とととと従来従来従来従来のののの開発開発開発開発ととととAgileAgileAgileAgileAgileAgileAgileAgile開発開発開発開発のテストのテストのテストのテスト配分配分配分配分開発開発開発開発のテストのテストのテストのテスト配分配分配分配分
Agile開発開発開発開発従来従来従来従来のののの開発開発開発開発
機能機能機能機能テストテストテストテスト
結合結合結合結合
機能機能機能機能テストテストテストテスト
Developers Summit 2010 24
ユニットユニットユニットユニットテストテストテストテスト
ユニットユニットユニットユニットテストテストテストテスト
結合結合結合結合テストテストテストテスト
結合結合結合結合テストテストテストテスト
・・・・各各各各フェーズのテストをフェーズのテストをフェーズのテストをフェーズのテストを、、、、それぞれのそれぞれのそれぞれのそれぞれの特性特性特性特性にあったツールでにあったツールでにあったツールでにあったツールで自動化自動化自動化自動化しししし、、、、作業作業作業作業効率効率効率効率とシステムとシステムとシステムとシステム品質品質品質品質をををを向上向上向上向上。。。。
テストのテストのテストのテストの自動化自動化自動化自動化テストのテストのテストのテストの自動化自動化自動化自動化
• 同じ操作を繰り返すテスト(回帰テスト・スモークテスト)の効率を向上• テスト結果をチェックすることにより精度の高いテストができる
テストのテストのテストのテストの流流流流れれれれ一度目に録画。それ以降は再生
テストの手順を記録、再生、チェックしてテストを自動化
Developers Summit 2010
テスト計画
テスト実施
OSのパッチ使用DBの変更
など
同じテスト
機能
テストを録画・再生発生箇所も指摘
効果
繰り返しテストの工数削減デグレードの防止
25
新新新新たなテストたなテストたなテストたなテスト自動化自動化自動化自動化新新新新たなテストたなテストたなテストたなテスト自動化自動化自動化自動化方式方式方式方式方式方式方式方式 ~~~~~~~~SilkSilkSilkSilkSilkSilkSilkSilk44444444J~J~J~J~J~J~J~J~
操作記録操作記録操作記録操作記録
記述記述記述記述
or
EclipseででででJunitのテストケースとしのテストケースとしのテストケースとしのテストケースとしてテストをてテストをてテストをてテストを作成作成作成作成
Javaによるによるによるによる画面操作系画面操作系画面操作系画面操作系テストのテストのテストのテストのスクリプトスクリプトスクリプトスクリプト
Developers Summit 2010 26
・・・・UnitTestをををを拡張拡張拡張拡張しししし、、、、画面系画面系画面系画面系のテストファーストをのテストファーストをのテストファーストをのテストファーストを実現実現実現実現。。。。=>=>=>=>.NET対応対応対応対応もももも進行中進行中進行中進行中
・・・・Assertionによるチェックをによるチェックをによるチェックをによるチェックを追加追加追加追加・・・・実行時実行時実行時実行時にブラウザにブラウザにブラウザにブラウザ種種種種をををを選択選択選択選択→共通共通共通共通のスクリプトでのスクリプトでのスクリプトでのスクリプトで、、、、複数種複数種複数種複数種ブラウザブラウザブラウザブラウザのテストにのテストにのテストにのテストに対応対応対応対応
Junitのののの結果結果結果結果としてとしてとしてとして確認確認確認確認
調整調整調整調整
実行実行実行実行
リスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティング
リスクリスクリスクリスク
テストテストテストテスト効率効率効率効率
コス
トコ
スト
コス
トコ
スト
リスクリスクリスクリスク低減低減低減低減がががが遅遅遅遅いバターンいバターンいバターンいバターン
Developers Summit 2010 27
テストをテストをテストをテストを効果的効果的効果的効果的にににに実施実施実施実施
リスクリスクリスクリスク
コス
トコ
スト
コス
トコ
スト
テストテストテストテスト効率効率効率効率
リスクリスクリスクリスク低減低減低減低減がががが早早早早いバターンいバターンいバターンいバターン
・同じコストで、より効果的にリスクを減らすテストを実現。
リスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティング
テストテストテストテスト可能範囲可能範囲可能範囲可能範囲 テストテストテストテスト不可範囲不可範囲不可範囲不可範囲 重要重要重要重要なテストがなテストがなテストがなテストが、、、、テストテストテストテスト漏漏漏漏れになるれになるれになるれになる可能性可能性可能性可能性
Developers Summit 2010
テストテストテストテスト可能範囲可能範囲可能範囲可能範囲 テストテストテストテスト不可範囲不可範囲不可範囲不可範囲
リスクリスクリスクリスク((((重要度重要度重要度重要度))))によってによってによってによって順番順番順番順番づけをづけをづけをづけを行行行行いいいい、、、、テストテストテストテスト範囲範囲範囲範囲をををを調整調整調整調整
・リソース(要員、マシン)がスケジュール内で実施可能な範囲に、リスク(重要度)の高いテストを実施。=>重大な問題がテスト対象から外れるケースを、軽減することができる。
28
リスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティングリスクベーステスティング~Quality Optimizer~~Quality Optimizer~~Quality Optimizer~~Quality Optimizer~~Quality Optimizer~~Quality Optimizer~~Quality Optimizer~~Quality Optimizer~
Developers Summit 2010
・サーバでテストケースを管理し、リスク係数を設定することによって、リソースとスケジュールに合ったテスト計画立案を支援。
29
テストケースのテストケースのテストケースのテストケースの管理管理管理管理とととと自動実行自動実行自動実行自動実行
自動自動自動自動テストテストテストテスト環境環境環境環境
((((テストツールテストツールテストツールテストツール++++テストスクリプトテストスクリプトテストスクリプトテストスクリプト))))プロジェクトプロジェクトプロジェクトプロジェクトA
自動自動自動自動テストテストテストテスト テストケーステストケーステストケーステストケース1111 合格合格合格合格
実行実行実行実行/結果結果結果結果テストケーステストケーステストケーステストケース2222 不合格不合格不合格不合格
・・・・・・・・・・・・
マニュアルテストマニュアルテストマニュアルテストマニュアルテスト テストケーステストケーステストケーステストケース1111 合格合格合格合格
テストケーステストケーステストケーステストケース2222 不合格不合格不合格不合格
・・・・・・・・・・・・
プロジェクトプロジェクトプロジェクトプロジェクトB自動自動自動自動テストテストテストテスト テストケーステストケーステストケーステストケース1111 合格合格合格合格サーバでテストサーバでテストサーバでテストサーバでテスト
Developers Summit 2010
・テストケースをサーバでグループ化し、集中管理・指定したマシンでのテスト自動実行や、関連したテストの順次実行を管理
マニュアルテストマニュアルテストマニュアルテストマニュアルテスト
((((手動手動手動手動でのテストでのテストでのテストでのテスト))))
30
自動自動自動自動テストテストテストテスト テストケーステストケーステストケーステストケース1111 合格合格合格合格
テストケーステストケーステストケーステストケース2222 不合格不合格不合格不合格
・・・・・・・・・・・・
マニュアルテストマニュアルテストマニュアルテストマニュアルテスト テストケーステストケーステストケーステストケース1111 合格合格合格合格
テストケーステストケーステストケーステストケース2222 不合格不合格不合格不合格
・・・・・・・・・・・・実行実行実行実行/結果結果結果結果
サーバでテストサーバでテストサーバでテストサーバでテストケースカバレッケースカバレッケースカバレッケースカバレッジジジジ情報情報情報情報をををを管理管理管理管理
テストカバレッジテストカバレッジテストカバレッジテストカバレッジ管理管理管理管理テストカバレッジテストカバレッジテストカバレッジテストカバレッジ管理管理管理管理
Developers Summit 2010
・プロジェクト毎、テストグループ毎のテスト網羅率(カバレッジ)を監視・レポート機能によって、テスト進捗を明確化
31
テストカバレッジ状況の確認
負荷をかけた時の問題箇所、改善対象負荷をかけた時の問題箇所、改善対象
負荷負荷負荷負荷テストテストテストテスト負荷負荷負荷負荷テストテストテストテスト
問題箇所問題箇所問題箇所問題箇所のののの割合割合割合割合
Webサーバ
Appサーバ
チューニングによるチューニングによるチューニングによるチューニングによる改善効果改善効果改善効果改善効果
SQL
データベース
Developers Summit 2010 32
Appサーバ
DB
NW
データベース
アプリケーション
ハードウェア
・負荷をかけて問題が発生する場合、その多くがAppサーバであり、原因はSQLの作り方であるケースが多い。=>具体的に、問題箇所と原因を特定する方法は?
Webサーバ アプリケーションサーバ
マイクロフォーカスのマイクロフォーカスのマイクロフォーカスのマイクロフォーカスの性能分析性能分析性能分析性能分析ソリューションソリューションソリューションソリューション
仮想ユーザ DB
メインフレーム
ツールによって、負荷をかけた時の問題を総合的に分析
Server
Analysis
Module JDBC-ODBC
Developers Summit 2010
「負荷テスト」によるサーバ状態の監視:
• トランザクションとネットワークの負荷を、現実に近い状態でエミュレーション:
• 各コンポーネントのパフォーマンス状態を関連させて分析
• パフォーマンスのボトルネックをピンポイントに指摘(メソッド、SQL、など)
33
URL JSP-ASP
Web ServiceMethod
Method
MQ
マイクロフォーカスのマイクロフォーカスのマイクロフォーカスのマイクロフォーカスの性能分析性能分析性能分析性能分析ソリューションソリューションソリューションソリューション
負荷テストツール(SilkPerformer)の分析結果から、dynaTrace機能のサーバ解析結果にドリルダウン
Developers Summit 2010 34
・負荷をかけるだけではなく、サーバの状態を分析してボトルネックをピンポイントに検出。
・開発、テストの作業を効率化し、品質を向上させるための方法
は、数多く提案されています。
・品質向上策のどれかが、みなさんの開発現場において、非常
に大きな成果を出すことが出来るかもしれません。
まとめまとめまとめまとめまとめまとめまとめまとめ
Developers Summit 2010
・開発プロジェクトを納期内に問題なく納めるために、最適な品質向上策を見つけ、試し、成果を出して、拡張することを検討下さい。
35
Developers Summit 2010
Copyright © 2010 Micro Focus. All Rights Reserved.
記載の会社名、製品名は、各社の商標または登録商標です。
Top Related