Disciplined Software Engineering Lecture #7 Software Engineering Institute Carnegie Mellon University Pittsburgh, PA 15213 Sponsored by the U.S. Department of Defense Copyright © 1994 Carnegie Mellon University1 情報システムプロジェクト管理(8) 九州産業大学 情報科学部 松本研究室 Copyright © 1994 Carnegie Mellon University2 レビュー(Review) より品質の良い情報システムを開発するため、設計や 実装などを精査し、チェックし、審査し、不具合を正すこ と Formal assessment or examination of something with the intention of instituting change Copyright © 1994 Carnegie Mellon University3 設計レビュー とコードレビューの概要 設計レビューとコードレビューとは何か? なぜこれらのレビューをすべきか? PSPにおける •レビュー戦略 •レビュー原理 •レビュー尺度 レビューにおける考慮事項 Copyright © 1994 Carnegie Mellon University4 レビューとは何か? Review レビューは自分自身の仕事を個人的に正当性・妥当性 ・無欠陥性などを検証する方法である レビューは以下の一連の検証手法の中の1つである •インスペクション(精査) •ウォークスルー(walk through) •レビュー(厳しくチェック審査) これらの全てが開発プロセスの早期に製品の欠陥1を 発見し、修理するという目的を持っている 1/ 欠陥(defects)とは誤りで、故障(failure)を引き起 こす原因となる Copyright © 1994 Carnegie Mellon University5 インスペクション インスペクションは1976年にIBMのFaganによって導入 された インスペクションは構造化されたプロセスに従って行わ れる •同僚同士で成し遂げる •管理者は参加しない •各参加者の役割を明確にする •準備が要求される •目的は問題の発見である(“見逃し欠陥の摘出“) インスペクションは要求、設計、コード、テストケース、 計 画、などに有用 Copyright © 1994 Carnegie Mellon University6 ウォークスルー ウォークスルーは典型的には会議形式で実施される •開発者が製品/成果物全体を通して参加者をリード •参加者は同僚、マネージャー、又は他の興味を持つ グループを含んでよい •目的は話し合いまたは承認を得ること •準備は不要 ウォークスルーは要求およびシステム設計問題に最も 有用である Copyright © 1994 Carnegie Mellon University7 インスペクションとウォークスルー 資料事前配布・役割分担する 上司不参加 精査し欠陥摘出する 実装他の精査 準備不要 会議で説明(開発者先導) 納得を得る 要求仕様・設計仕様のチェック Copyright © 1994 Carnegie Mellon University8 インスペクションのチェックポイント 全般 プログラム1つづつチェッ ク 完全性 コードは設計を網羅してい るか include 完全か の原因 初期化 変数、引数、 Copyright © 1994 Carnegie Mellon University9 呼び出し 関数呼び出しの引数 、ポインタ、&使用法 名前 つづり、使用法 無矛盾、宣言範囲、 ポインタ ・初期化ヌル ・newの後delete ・newポインタは使 用後delete 遵守(じゅんしゅ) 標準 Copyright © 1994 Carnegie Mellon University10 レビュー 個人レビューでは •担当者は個人的に自分達の製品/成果物をレビュー する •目的は最初のコンパイルやテストの前に欠陥を発見 すること。設計、実装の工程実施 •レビューは,構造化し測定すれば、最も効果的である レビューは要求、設計、およびコードに対して使うことが 出来る Copyright © 1994 Carnegie Mellon University11 なぜレビューをするのか- 1 レビューで欠陥を発見する方がテストでするよりもはるか に効率が良いことをデータは示している 単体テスト方法とレビュー方法の比較 ・単体テストでは、通常1時間当り約2~4個の欠陥しか 見つからない。 •コードレビューでは通常1時間当り約10個を発見する •経験のあるレビュー者は製品中の欠陥の発見率は70 %以上。 •単体テストでは発見率が50%を超えることは殆どない レビューは単体テスト工程での時間当たり欠陥発見数の 2~5倍、発見できる(根拠:PSPデータ) Copyright © 1994 Carnegie Mellon University12 De fe ct Re m oval Rate s - 12 Stude nts Compile 25 Defects/Hour 20 15 Code Review 10 5 Unit Test 0 1 2 3 4 5 6 7 8 9 10 Pro g ram Numb er Copyright © 1994 Carnegie Mellon University13 なぜレビューをするのか -2 単体テスト後は、欠陥除去の費用はずっと高くなる •統合とシステムテストでは欠陥の発見と修正に1件当 たり10~40人時がかかる •インスペクションは通常欠陥当り1時間以内で済む インスペクションデータの例 •O’Neilのデータ:欠陥当り25分で欠陥除去率が 80~90% •Philipsのデータ:欠陥当り15分に対しテストでは 8時間になる Copyright © 1994 Carnegie Mellon University14 なぜレビューをするのか-3 出来る限り早期に欠陥を除去する理由は •レビュー、インスペクション、コンパイル、およびテスト はそれぞれ欠陥の1部だけを発見する •したがって、あるフェーズに入るコードがクリーン(無 欠陥)で ある程、出口でよりクリーンになるであろう 早期の欠陥除去は時間と金を節約する •欠陥は開発プロセスの中で遅くなるほど発見と修理 に多くの金がかかる •欠陥は開発完了後では、その発見と修正に、より多 くのコストがかかる Copyright © 1994 Carnegie Mellon University15 なぜレビューは効率的か - 1 テストにおいては •問題となる現象からスタートする •そこでバグを見つけなければならない •次に、原因を見つけ修正を工夫する •最後に修正を組み込み、そのテストを行う レビューとインスペクションだと •欠陥が目に入る •そこで、修正を工夫する •最後に修正を組み込み、そのレビューを行う Copyright © 1994 Carnegie Mellon University16 なぜレビューは効率的か - 2 テストにおいてシステムが異常な結果を出した場合、以下 のことを実施しなければならない •異常を検出する •そのときテストプログラムが何をしていたかを明らかに する •異常はプログラムの中のどこで起きたかを見つける •どんな欠陥がそのような現象を引き起こしうるかを解明 する 計画も予定もしていなかった問題を探索することになる それでは多くの時間がかかる Copyright © 1994 Carnegie Mellon University17 なぜレビューは効率的か - 3 レビューやインスペクションだと •自らのロジックを追いかける •欠陥を見つけたとき自分がどういう状況にいるかが 明確にわかる •そのプログラムが何をすべきで何をしなかったかを 知る •だから,なぜこれが欠陥であるかがわかる •よって,完全で効果的な修正を考案するうえで、より 良いポジションにいることになる Copyright © 1994 Carnegie Mellon University18 PSP のレビュー戦略 PSPの目的は全てのプロセスフェーズでプログラムの 品質を可能な限り高めることである これを達成するレビュー戦略として •レビューに関するデータを集める •それらのデータを研究する •どういう作業が自分にとってベストかを決める •自分の作業プロセスをそれに従って調整する これが,自分自身の仕事のデータを活用して継続的に 学ぶプロセス,というものである Copyright © 1994 Carnegie Mellon University19 レビューの基本原則 PSP レビューは以下の項目をもつ規範プロセスに従う •開始及び終了の基準 •レビューの構造 •ガイドライン、チェックリスト、標準 PSPレビューの目標は、最初のコンパイル、またはテスト 前にあらゆる欠陥を発見することにおくことを提案する この目標の達成に向かうには •コーディング標準を使うべきである •設計完了基準を使うべきである •レビュープロセスを計測し改善するべきである Copyright © 1994 Carnegie Mellon University20 0 目的 ガイドライン 1 開始条件 設計・プログラミン グ完了 2 レビュ コードレビューチェッ クリスト 3 修正 4 チェック 5 終了条件 全ての欠陥修正、 欠陥ログ(欠陥型、 作り込み工程、除 去工程、修正時間 各修正の正当性を チェック、全設計変 更を再レビュ、全修 正欠陥を新欠陥と してログ、 十分レビューした Copyright © 1994 Carnegie Mellon University21 レビューガイドラインとチェックリスト 全般事 項 完全性 インクル 初期化 ード 1プログ ラムづ づチェッ ク コードが 完全か 設計す べてカ バーし ている か プログラ ム、ル ープ、関 数の開 始点 呼び出 し 関数呼 び出し、 ポインタ 、引数、 & Copyright © 1994 Carnegie Mellon University22 名前 文字列 ポインタ 出力書 式 ペア スペル と使い 方 ポインタ で同定 、ヌルで 終了 ヌルで 初期化 、 Newの 後のみ 削除 {}が適 切か 行の段 落づけ 、空白 が適切 か Copyright © 1994 Carnegie Mellon University23 論理 演算 行ごと コーディ ファイル チェッ ング標 のオープ ク 準 ン、クロー ズ 演算 子、論 理関 係で() 準拠 各行 のチェ ック: 区切り 記号 宣言、 オープン、 クローズ Copyright © 1994 Carnegie Mellon University24 設計レビューの基本 1.レビューが可能な設計をする 2.明示されたレビュー戦略に従う 3.段階的に設計をレビューする 4.ロジックが要求を正しく実現していることを検証する Copyright © 1994 Carnegie Mellon University25 欠陥型 文書 構 文 パ ッ ケ ッ ー ジ ア サ イ ン イ ン タ フェ ー ス チ ェ っ キ ン グ デ ー タ 機能 システ ム 環境 コメント 綴 り 区 切 り 版 管 理 宣 言 、 名 前 呼 び 出 し 参 照 エ ラ ー メ ッ セ ジ 構 造 論理 、ポ イン タ 構成 工程 Copyright © 1994 Carnegie Mellon University26 1.レビューが可能な設計をする レビューが可能な設計は • 文脈(context)が定義されている •精密に表現されている •矛盾のないクリアな構造をもっている これは次のようなことを示唆している •設計の目的と機能が明示されている •設計完了に対する判断基準をもっている •設計が論理的要素で構成されている Copyright © 1994 Carnegie Mellon University27 2.レビュー戦略に従う レビュー戦略は、設計要素をレビューする順序を与える。 •これは製品の構造に依存する •よってレビュー戦略は設計中は熟慮されているべきで ある レビュー戦略の目的は以下のような設計を創り出すこと •段階的にレビューできる設計 •段階的にテストできる設計 •段階的にインテグレーションできる設計 Copyright © 1994 Carnegie Mellon University28 3.段階的な設計レビューを行う 段階的なレビューによって、全ての選択されたレビュー 項目が、注意深くチェックされることを確実にする 推奨するレビューの段階は以下である 1. 全ての設計要素が設計されたかチェックする 2. 全体的なプログラム構造とフローを検証する 3. 論理的な構成物の正当性をチェックする 4. 堅牢性(robustness)をチェックする 5. 適切な使用をしている事を確認するため、関数、 メソッド、プロシージャの呼び出しをチェックする 6. 特別な変数、パラメータ、 タイプ、ファイルが適切 に使用されてかをチェックする Copyright © 1994 Carnegie Mellon University29 4.ロジックが正しく要求を実現してい ることを検証する 要求された機能それぞれが設計によって言及されてい ることを確認するため、要求項目をレビューする 見落としとか設計漏れがないか注意深くチェックする Copyright © 1994 Carnegie Mellon University30 レビューの尺度(metrics) 明示的尺度 •レビュー対象のプログラムサイズs •レビューに要した時間t •発見した欠陥の数Df •見逃した欠陥の数Dm 派生的尺度 •レビューによる欠陥摘出率Df : % Df =100x(コンパイル前の除去欠陥)/(コンパイル前 の作り込み欠陥) •時間当たりレビューした LOC •KLOC 当たり発見した欠陥 •レビュー時間当たり発見した欠陥 •レビューの効果(review leverage) Copyright © 1994 Carnegie Mellon University31 レビューによる欠陥摘出率 - 1 欠陥摘出率 •プロセスの品質の尺度 •レビューで発見された欠陥のパーセンテージ •あるプロセスステップの有効性を測定する尺度 -設計レビューとコードレビューのステップ -テスト前までのプロセス全体 -テストを含む開発プロセス 欠陥摘出率 (あるフェーズ、もしくは全体プロセスでの) =100*(発見した欠陥)/(発見した欠陥+見逃した欠陥) Copyright © 1994 Carnegie Mellon University32 情報システム関係の仕事の中枢 製品出荷判定 欠陥摘出率がδ以下なら出荷、そうでなければ手戻り 手戻りを最小化する方策 Copyright © 1994 Carnegie Mellon University33 レビューによる欠陥摘出率 - 2 欠陥摘出率はテストや製品の使用を通じて全ての欠陥 が発見されてから計算する 全て、もしくは大半の欠陥がカウントされていれば、欠陥 摘出率はプロセスの早い時期から役に立つ •設計レビューやコードレビューでの欠陥 •コンパイル時の欠陥 •単体テストでの欠陥 プロセスデータを使って制御パラメータを制御すること により,欠陥摘出率の高いレビューを確実にすること ができる Copyright © 1994 Carnegie Mellon University34 欠陥除去影響力 ( DRL: Defect Removal Leverage ) DRLは欠陥除去について、それぞれのプロセス・ ステップの相対的な有効性を計測したもの。 DRLは,あるプロセスステップにおいて単位時間 あたりに除去された欠陥の,基準プロセスのそれ に対する比である •通常基準は,単体テストである •DRL(X/UT)とは単体テスト(UT)と比べたときの フェーズXのDRLである •DRLは次のようにして算出される 欠陥除去影響力(X/UT)= 欠陥/時間(フェーズ X) 欠陥/時間(単体テスト) Copyright © 1994 Carnegie Mellon University35 各種の欠陥除去影響力 DRL(D/UT)=(欠陥数/工程Dの時間)/(欠陥数/工程UTの時間 ) DRL(I/UT) DRL(C/UT) DRL(B/UT) 設 計 実装 I コン パ イル D 単体 デバッグ 単体 テスト B UT 運用 OP C Copyright © 1994 Carnegie Mellon University36 プロセス制御 プロセスを制御するためにはそのプロセスを実行中で も使える尺度が必要である 欠陥摘出率と欠陥除去影響力(DRL)は強力な指標で あるが、プロセスが完了するまで使えない 必要な尺度: •欠陥摘出率と相関のある指標 •開発の途中で使える指標 Copyright © 1994 Carnegie Mellon University37 潜在的制御パラメータ 欠陥摘出率に対する潜在的制御パラメータとして次の ようなものがある •時間あたりレビューされた LOC (LOC/Hour) •時間あたり発見した欠陥 (Defects/Hour) •KLOCあたりに発見した欠陥 (Defects/KLOC) PSPの研究で欠陥摘出率について次のような相関を 発見した •LOC/Hour: -0.63<有意水準< 0.005 •Defects/Hour: 0.14<有意水準 < 0.25 •Defects/KLOC: 0.47<有意水準< 0.01 その結果が偶然に得られ得る確率 良いものはないが、この中ではLOC/Hourがベスト Copyright © 1994 Carnegie Mellon University38 Yie ld vs . LOC/Hour - St ude nt 12 Yield - % of Early Removal Defects 80 70 60 50 40 30 20 10 0 0 200 400 600 L OC/Ho u r Copyright © 1994 Carnegie Mellon University39 Yield - % of Early Removal Defects Yie ld vs LOC/Hour - St ude nt 20 100 90 80 70 60 50 40 30 20 10 0 0 100 200 300 400 L OC/Ho u r Copyright © 1994 Carnegie Mellon University40 単位時間当たりレビューしたLOC 学生のデータはかなり変動している これら例では、構造化されたレビューが以下の条件の 時に効果的といえることを示している •定義された手順によって行われていること •チェックリストをつかっていること •それぞれのエンジニアの欠陥に対する経験に合わ せてあること PSPに対し制御目標としては、時間あたり200LOC以 上のレビューをしないことを提案する Copyright © 1994 Carnegie Mellon University41 レビューについての考察 チェックリスト コンパイル前後のレビュー レビューとインスペクションの関係 Copyright © 1994 Carnegie Mellon University42 チェックリスト 精密に仕事を実行しようとすとき、1度に1つ以上の仕 事をすることは難しい チェックリストはレビューを実行するときのレビュー ステップの提案順序を定義する それぞれのアイテムにチェックマークをつけていけば、 レビューを適切に実行できる可能性が高い それぞれの経験に合った、個人用のチェックリストを作 るのがよい Copyright © 1994 Carnegie Mellon University43 コンパイル前のレビュー 1 PSPは最初のコンパイルの前にレビューすることを 求める 理由は •レビュー時間はコンパイルの前でも後でもおよそ同じ だけかかる •コードレビューはコンパイラーが見逃すシンタックスの 欠陥をも発見する •コンパイル済みコードのコードレビューは効果が大変 少なくなる傾向にある •コンパイラーはレビューの前でも後でも同じくらい 効果的である Copyright © 1994 Carnegie Mellon University44 Com pile vs Tes t De fe cts Stude nt 20 10 Test Defects 8 6 4 2 0 0 10 20 30 40 50 Co mp ile Defects Copyright © 1994 Carnegie Mellon University45 Com pile vs Tes t De fe cts Stude nt 1 10 Test Defects 8 6 4 2 0 0 5 10 15 20 Co mp ile Defects Copyright © 1994 Carnegie Mellon University46 コンパイル前のレビュー 2 PSPはコンパイルをレビューの品質のチェックに使う •コンパイルであまりに多くの欠陥が見つかった場合は もう一度レビューすることが求められる •コンパイルで欠陥が無い場合は、大半の欠陥は既に 見つかったと思って良い PSPの全演習を完了後、コンパイルの前と後のレビュ ーデータを集めて,どちらのレビューが自分にとって最 も役に立つかを調べてみよ Copyright © 1994 Carnegie Mellon University47 レビューとインスペクション インスペクションの基本的な狙いは、見逃している要求上 と設計上の問題を摘出することに置くべきである プログラムに単純な欠陥が沢山ある場合、インスペクター は集中力を欠き、より大きな問題をしばしば見逃してしま う 最初にコードレビューする(インスペクション前に自分でレビューし ておく)ことは •インスペクションに高品質プロダクトを提出する •インスペクターの時間に対する敬意を示す •より高品質のインスペクションを可能にする Copyright © 1994 Carnegie Mellon University48 課題#7 テキストの8章を読んでレポートR4を作りなさい レポートに対する要求事項として付録Dをチェックしなさい この課題は以下のことを求めています •R4レポートを作成するプロセスの設計 •このプロセスの中には計画と事後分析のフェーズを 含める •レポートR4の計画を立てる •レポートを作る •このレポート,設計したプロセス、集めたプロセスデータ を提出する Copyright © 1994 Carnegie Mellon University49 課題演習 R4レポート作成 ・まずプロセスを定義せよ。そのプロセスを使ってR4を 作成せよ(後日R4を更新する)。 ・レビュー(設計とコード)のチェックリストを作成せよ。 ・タスク1:データ分析と6つのプログラム(1A-6A)の レポートを作成するためのプロセスを開発せよ。そのプ ロセスが含むべき工程は計画工程、タスク実施工程、 事後分析工程。プロセス記述とプロセス稼動計画書を 提出せよ。 ・タスク2:上記を稼動。計画書に計画時間を記入し、実 績時間を追記せよ。 ・タスク3:プログラム1A-6Aのデータを分析せよ(注 意点は次頁参照)。 Copyright © 1994 Carnegie Mellon University50 プログラム1A ソースプログラムを読み、行数をカウントして表示する。 プログラム2A 1セットのデータの平均値、標準偏差を求め表示する。 言語:プログラミング Java、C++、その他(擬似英語) 設計:図式言語、UML、BPMN、その他 Copyright © 1994 Carnegie Mellon University51 課題演習 続 分析問題 ・LOCと開発時間の見積もりの正確さ(開発進展を分 析せよ) ・プログラムで作り込まれたり除去された欠陥型の分 析(付表D23を作成せよ) ・コンパイル時発見の欠陥型の分析(付表D24) ・R3レポート(付表D22)を見て欠陥修正時間を分析 ・設計レビューで最も頻発する設計欠陥を見つけよ(設 計チェックリスト活用) ・コードレビューについても上記を行え Copyright © 1994 Carnegie Mellon University52 講義7のまとめ 設計レビュー及びコードレビューは次に対し効果をもつ •プログラムの品質を改善する •開発時間を短縮する 効果的なレビューをするために、次のことを行う •レビューのゴールを確立 •レビュープロセスの規範に従う •レビューの品質を計測し改善する Copyright © 1994 Carnegie Mellon University53
© Copyright 2024 ExpyDoc