システム工学概論 第2回 プログラムとテスト 2004. 11. 4 Copyright Z. Koono 2004 第2回 概要 復習プログラム設計 構造化チャート(PAD) 原理的なテスト プログラム構造とデバッグ 宿題案内 Copyright Z. Koono 2004 復習 時計の設計 フ ロ ーチャ -ト 設計中 データ フ ロ ー 設計中 フ ロ ーチ ャ -ト 仕様 時 計 コ -ディ ン グ 中 実時間 クロック デ | タ フ ロ | 設 計 1秒 クロ ック 時刻を える 時計 盤面 時計 時 刻 時刻表示 を 求める 時刻 表示 時計 盤面 表示 する 時針分針 秒針 時針を 求める 角 度 時 幅 針 分針を 求める 秒針を 求める 長 さ フ ロ | チ ャ | ト 設 計 コ | デ ィ ン グ Copyright Z. Koono 2004 プログラム論理の表記 親概念のDFD 時刻表示 を 求める 時刻表示 時刻を える 時刻 1 秒ク ロック 開始 表示する 時計 盤面 子概念のDFD+フローチャート 終了 プログラム論理は, データフロー図+構造化チャートで表記される Copyright Z. Koono 2004 フローチャートの表記 開始 機能/ Y 処理 分岐 終了 X ? 0 > X ? 0 > Y 飛越 長所:書き方が簡単 欠点:書き方が自由 GO TO X GO TO Y 誰でもすぐ書ける(入門教育向き) ・デタラメにでも書ける グチャグチャな構造でも! ・概念レベルが揃い難い 概念の展開関係が示せない Copyright Z. Koono 2004 階層展開「時刻表示を求め る」 展開 時針を 求め る 時針の角度 を 求める Jisin_Kakudo =Jikoku_Ji*30 時針の幅を 求める Jisin_Haba = SaidaiHaba 時針の長さ を 求める 制 御 の 流 れ 時刻表示 を 求める 分針を 求め る 秒針を 求め る Jisin_Nagasa = Saisyou 分針の角度 を 求める Funsin_Kakudo =Jikoku_Fun*6 分針の幅を 求める Funsin_Haba = TyukannHaba 分針の長さ を 求める Funsin_Nagasa = Saityou 秒針の角度 を 求める Byousin_Kakudo =Jikoku_Byou*6 秒針の幅を 求める Byousin_Haba = SaisyouHaba 秒針の長さ を 求める Byousin_Nagasa = Tyukann Copyright Z. Koono 2004 構造化チャート 連接 繰返 選択/分岐 IF THEN 前判定 DO WHILE UNTIL 後判定 条件 F F 条件 時をえる X 表示する 出 1 Y 出 2 図面ではループ無し 時をえる 条件 表示する 出 X 条 件 条 件 F F Y 出 出 出 Problem Analysis Diagram, PAD Copyright Z. Koono 2004 PAD(繰返し) 前判定 DO WHILE UNTIL 後判定 条件 F F F 条件 条件 後判定の書直し F F 条 件 F 条 件 F 条 件 F Copyright Z. Koono 2004 PAD(記法の拡張) 多分岐 場合1 呼出 CASE 場合3 条件 場合2 X Y Z 関数名称 場合1 X 条 件 関数名称 場合2 Y 場合3 Z プログラム,関数,サブルーチン Copyright Z. Koono 2004 時 分 秒 初 期 状 態 開始 時刻をえる 1秒毎にプログラムが動く 秒に1を加える 秒に1を加える 60秒か? Y 60秒か? 秒を0にする N 秒を0にする 分に1を加える Y 60分か? Y 分に1を加える 分を0にする N 時に1を加える 終了 Y 時を0にする 12時か? N Copyright Z. Koono 2004 プログラム設計の完了 ソース ○ ○ プログラム 仕様書 誤 関数仕様書 データ 仕様書 誤 設計書 構造化 チャート データ フロー図 コード 誤 リスト 誤 設計書: 設計を固 める前の 根拠/ (各)方 式/比較結 果の記録 チェック チェック チェック 初心者は1件/10行の誤り(Bug)を作込む 十分に考えて設計し,事前に机上で除去すること 設計工数の1/3の工数を掛けてチェックして 80%を事前摘出せよ Copyright Z. Koono 2004 ソフトの誤りによる事故 ソフトウエアには,誤り(バグ)がつきもの バグの為に正常でない動作/不充分な性能 ソフトウエアバグによる障害 ・広汎な地域 北米の市外電話が一日麻痺 ・社会の活動阻害 証券取引/銀行システムのダウン ・被害金額大 火星着陸人工衛星が使命達成に失敗 数百億円の損害 ・多数の使用者 携帯電話56万台の機能異常/リコール IT化の進展につれ,ソフトの占める立場が大きくなる ITS ハイウエイ自動走行システム バグ 0 でなければ? 1960年代 0.数件/K行….1990年代 0.001件/K行…. では2000年代は ? それは如何にして達成できる? Copyright Z. Koono 2004 設計の正しさのテスト 設計は誤りを免れない 目的 仕様 設 計 プログラム (計算機 言語表記) 計 算 機 働き 機能 効果 効用 テスト 仕様の一部を対象とし プログラムを動かして 実動作を確認する Copyright Z. Koono 2004 テスト作業 仕 様 テスト設計 期待 出力 テストも誤りを免れない 必要 入力 対象 プログラム 実 出力 テスト デバッグ Debug 照合 一 致 不一致 原因切分け 誤り修復 再 テスト Copyright Z. Koono 2004 何処を如何にテストするか 各種のテスト (見方が異なる) ・時系列: ・立場: ・規模: 今回例 単体,統合,システム,評価,検収... 開発者,検査/品質保証,ユーザ.. 単体,サブシステム,システム.... 小プログラムの確認を行う原理的なテスト ・設計結果を見ながらテストを考える(White box) ・単体テストでは,全ての経路を塗りつぶす (大きくなると異常時のルートは通せない) テストケースとチェックポイント ・ケース(試験する場合)幾つかのチェックポイント(確認個所) Copyright Z. Koono 2004 「時刻表示を求める」のテスト チェック ポイント 時針を 求め る 時針の角度 を 求める Jisin_Kakudo =Jikoku_Ji*30 時針の幅を 求める Jisin_Haba = SaidaiHaba 時針の長さ を 求める 時刻表示 を 求める 分針を 求め る 秒針を 求め る Jisin_Nagasa = Saisyou 分針の角度 を 求める Funsin_Kakudo =Jikoku_Fun*6 分針の幅を 求める Funsin_Haba = TyukannHaba 分針の長さ を 求める Funsin_Nagasa = Saityou 秒針の角度 を 求める Byousin_Kakudo =Jikoku_Byou*6 秒針の幅を 求める Byousin_Haba = SaisyouHaba 秒針の長さ を 求める Byousin_Nagasa = Tyukann Copyright Z. Koono 2004 開始 「時刻をえる」のテスト 秒 秒に1を加える Y 60秒か? 2 3 59 60/0 分 0 1 2 59 60/0 時 0 1 2 11 12/0 秒を0にする N 分に1を加える Y 60分か? 終了 1 時 分を0にする N 時に1を加える Y 0 分 0 秒 0 チェック ポイント 時を0にする 12時か? N Copyright Z. Koono 2004 「表示する」のテスト 疑似的出力 時刻表示 表示する hyoujisuru 時針 角度 幅 長さ 分針 角度 幅 長さ 秒針 角度 幅 長さ 出力は単純なプログラム言語範囲外なので 疑似的な出力ルーチンとする Copyright Z. Koono 2004 テスト条件書(サンプル) 大 小 項 項 目 目 時 分 を え る チェックポイント 実績/ 備考 判 定 テスト ケース 設定 条件 試験入力 期待出力1 中間 分=38 +1 分=39 ○ 桁上り前 分= 59 +1 分=60 ○ 桁上り 分=60 +1 分=1 × 分=30 +1 分=61 +1 分=2 × 分=29 同2 秒 精密にみっちり考え, 正確に文書化する 正確に 記録する Copyright Z. Koono 2004 テスト/デバッグへの取組み 大 項 目 小 項 目 テスト ケース 設定 条件 試験入力 出力確認 時 を え る 分 中間 分=38 +1 分=39 ○ 桁上り前 分= 59 +1 分=60 ○ 桁上り 分=60 +1 分=1 × 分=30 +1 分=61 +1 分=2 × 分=29 チェックポイント 判 定 実績/備考 秒 テスト実行工数の大半は,設計/作成者ではない人による 一連のテストは,どんどんと続けて行う(他人で可能) テスト中に考えるな! 実績は,几帳面に記録する 一連の異常なデータを解析して,バグを推定する ソフトは論理的なものだから 論理的に立ち向かえ Copyright Z. Koono 2004 テストと誤りの摘出 使用開始 特殊な場合 に異常 累計 誤り数 組上げ 段階 即時に立上れない 時に凹が生じる 初期的 段階 高い信頼度 を得るには 確認項目密度を 数百/K行にする K 103 開始後日時 Copyright Z. Koono 2004 機能構造とプログラム構造 1秒毎にプログラムを起動 ma i n 時計 Tokei 時刻を える J i kokuwo Er u 時刻表示 を 求める J i kokuHyouj i wo Er u 全体を制御する親 表示 する Hyouj i sur u 子である部品 内部的なモジュール C言語では関数 時計プログラム Copyright Z. Koono 2004 プログラム構造とテスト ドライバー(駆動する) ma i n 進行を確認 する手段 時刻を える J i kokuwo Er u 時計 Tokei 時刻表示 を 求める J i kokuHyouj i wo Er u テスト対象 表示 する Hyouj i sur u スタブ(部品を疑似) データを確認する手段 Copyright Z. Koono 2004 テストの進め方 One at a time 一つずつ確実な物を増やす 重要なテストの戦略 テスト仕様書を貫くもの ma i n トップダウン 時計 Tokei 併用 時刻を える J i kokuwo Er u 時刻表示 を 求める J i kokuHyouj i wo Er u 入力系 内部処理系 試験入力 が容易化 表示 する Hyouj i sur u ボトムアップ 出力系 試験出力 が容易化 Copyright Z. Koono 2004 テストでの切分け One at a time 一つずつ確実な物を増やす 増やして異常なら,増した所を疑え ma i n 時計 Tokei 時刻を える J i kokuwo Er u 時刻表示 を 求める J i kokuHyouj i wo Er u 表示 する Hyouj i sur u Copyright Z. Koono 2004 テスト対象の大きさ 時刻を える J i kokuwo Er u ma i n 単位 大 小 時計 Tokei 手間 小 大 切分 不十分 十分 時刻表示 を 求める J i kokuHyouj i wo Er u 表示 する Hyouj i sur u 初心者は小さ目が良い 急がば廻れ! Copyright Z. Koono 2004 デバッグの切分け クロ ック ク ロ ッ ク 時刻 を える 時計 時 刻 求 め る 異常個所の摘出は 最も時間を要する 盤面 時刻 表示 時 求める 時針 分 求める 分針 秒 求める 秒針 表示 する 盤 面 ソースを読むのは 最も面倒 プログラム,関数単位に 切分ける 他人で可 追詰めて,修正の為 ソースを読む Copyright Z. Koono 2004 修正の管理 現物をあれこれ いじり回すと 混乱が起こる ma i n 時計 Tokei 時刻表示 を 求める J i kokuHyouj i wo Er u 時刻を える J i kokuwo Er u 表示 する Hyouj i sur u 切分単位毎に 1版,2版..と 現物を差換え,残す 面倒でも手違が無い 時刻表示 時刻表示 ..... ..... ..... ..... 2版 1版 現 物 保 存 時刻表示 ..... ..... プロ アマ 面倒でもキチンとやる 手順を飛ばして,却って損する ー常に基本を厳守ー 3版 Copyright Z. Koono 2004 標準化した設計作業方法 階層的な機能分割 データフロー直/並列 データフロー図 +構造化チャート 時計 樹木状の モジュール構造 時刻 表示 時刻 時刻 時刻を える 時刻 表示 時刻表示 を求める 表示 する 受渡しを示す機能階層図 「構造化設計」 の全要素を含む 自己担当分内/自組織内を全て統一して効率化が図れる Copyright Z. Koono 2004 設計作業方法の標準化 システム ・システムの目的は,意図された効果/効用の実現である ソフト/プログラムはその為の機能の実現手段に過ぎない ・システムの作りは,この効果/効用を最小の労力(コスト) と最短の日時で作るようにされるべきである. ・以上から プログラムは,誰が見てもよく判り,扱い易いものに, 構造/構成は統一されたものにする (所謂技巧的な物は一切厳禁される) 標準化 ・システムは,多くの人の協力により成立つ ・狭義の作業方式,構成方式は共通基盤である それらが多く,統一されているほど作業の効率は高まる Copyright Z. Koono 2004 テストで虫取りは合理的か? Copyright Z. Koono 2004 テスト前に机上チェックで80%のバグ除去 2 劣等チームのテスト工数 優良チームのテスト工数 誤りゼロ純テスト工数 Copyright Z. Koono 2004 テスト前に机上チェックで80%のバグ除去 1 先 憂 後 楽 先 手 必 勝 Copyright Z. Koono 2004 テスト前に机上チェックで80%のバグ除去 3 Copyright Z. Koono 2004 机上チェック完で設計を完了する Jisin_Kakudo =Jikoku_Ji*30 時針の幅を 求める Jisin_Haba = SaidaiHaba Funsin_Haba = TyukannHaba 分針の長さ を 求める Funsin_Nagasa = Saityou 秒針の角度 を 求める Byousin_Kakudo =Jikoku_Byou*6 秒針の幅を 求める Byousin_Haba = SaisyouHaba 秒針の長さ を 求める Byousin_Nagasa = Tyukann チ ェ ッ ク チ ェ ッ ク 展開 段数 n 秒針を 求め る ソ ース コ ード 分針の幅を 求める . . . . .. . . Funsin_Kakudo =Jikoku_Fun*6 設計図面 分針を 求め る 分針の角度 を 求める r 時刻表示 を 求める Jisin_Nagasa = Saisyou 設計図面 時針の長さ を 求める 知的処理 この単位毎に確率的に誤る 仕様 時針を 求め る 時針の角度 を 求める チ ェ ッ ク 初心者は1件/10行の誤り(Bug)を作込む 十分に考えて設計し,事前に机上で除去すること Copyright Z. Koono 2004 机上チェックの活用 ・能率的 ・自分の誤りは見付け難い ・自分の弱点を識る機会 同じ失敗を繰返すのは馬鹿 二度と同じ失敗をするな! 正しいルール/方法を確認せよ 腕前が急速に向上する Copyright Z. Koono 2004 第2回 纏め ・データフロー図と構造化チャートのペアは プログラムの論理的な仕様を表す ・構造化チャートの規約を守ると 自動的に良い構造になる ・設計は,テストとデバッグの容易性を考えて行う ・テストはバグを叩出すように, デバッグは的確に絞れるように, 合理的/科学的に計画し,実行する ・システムでの設計/作業方式の在り方 ・机上チェックの有用性 Copyright Z. Koono 2004 第1回 宿題 課題 次回 時計プログラムを作る データ仕様書,データフロー図, 10/30 関数「時刻をえる」の構造化チャートPAD 突合せチェックをして,朱記訂正する 次次回 テスト条件書→コーディング→テスト 11/6 突合せチェックをして,朱記訂正する 次次回 11/20 誤り原因を追及し, 再発防止策を提出
© Copyright 2025 ExpyDoc