システム工学概論 第1回 プログラム設計の原理

システム工学概論
第5回
工程2. 工程と誤り
2004. 11. 11
第5回概要
1.設計の誤り
2.誤りを減衰させる
机上チェックとテスト
3.誤りとコスト
工程の産物と副産物・誤り(Bug)
入
力
↓
出
力
↓
入力情報
(図面)
出力情報
(図面)
工程
↑
誤り
ソースコードは最終成果物
他の文書類は
中間成果物
ソフトでもハードでも
人の作業の
出力は
誤りを含む
誤りは,人・それに影響する各種環境を含む
工程の欠陥の現れである
工程の誤り率
仕様
ソフトウエア
開発
誤り数
誤り数∝規模1
ソフト規模
1
誤
り
数
誤り数∝(ソフトウエア規模)
誤り数は規模に比例する
誤り率 ∝
誤り数
ソフトウエア規模
誤り率は一定性を示す
プログラム規模 (行)
大きなバラツキ
×N〜1/N
N = 4〜5
熟練度と誤り率
初心者
簡単な問題
約100件/K行
まあまあ
の設計者
自分の
担当領域
約60件/K行
一応の
設計者
自分の
担当領域
約40件/K行
高度な
設計者
自分の
専門領域
約20件/K行
90件/K行
誤
り
数
20件/K行
4件/K行
プログラム規模
(行)
設計者の腕前は,早いことでなく,
誤りの少ないことである
誤りの正体
まあ
しょうが
ないミス
難問題だから
しょうがない
ミス
少しの注意
で防げる
ミス
簡単な
ことで
凡ミス
誤りの大半は
馬鹿みたいな
誤りである
誤っても仕方ない
高度な誤り 数%
難しいから
誤る訳でない
人間に関わる全ての誤りに共通
誤りのメカニズム
設計情報
単位的
知的処理
単位的な知的処理
の過程で,小さな
誤り率で誤りが発生
発生した誤りは
展開網を下に
向けて伝搬し,
最終出力になる
誤りを減衰させる工程
設
計
設計側テスト
誤摘出
0.6件/K行
誤摘出
10件/K行
10 + 0.6
= 10.6
件/K行
製
品
QA(検査)
側テスト
設計側テスト
誤り減衰 約1/15
テストは一定率で誤りを減衰させる 一応のテスト
机上チェックも一定率で誤りを減衰させる 綿密なテスト
0.6
件/K行
約1/10
約1/100
一応のチェック
約1/2
綿密なチェック
約1/5
誤りの減衰のメカニズム
仕
様
設
テ
計
照
合
ス ト
正設計を正と確認する率
不正設計を誤って正とする率 (第II種過誤)
正設計を誤って誤りとする率(第I種過誤)
不正設計を誤と確認する率
設計には誤りがある
誤り率 Ed
テストにも誤りがある
誤り率 Et
(1-Ed)*(1-Et)
(Ed)*Et
(1-Ed)*Et
Ed*(1-Et)
正しい設計Pass
誤った設計Pass
Checkでテスト誤判明
Checkで誤り修正
元からの誤りEdの内,Et倍だけ残留する
対策 設計同様に正確を期する
テスト条件書に正確に記載,正確に照合
テストケース毎のチェックポイントを増やす
同テストを繰返す
本質的指標:誤り作込み率
白丸:作込み誤り率
(テスト+机上チェック)
破線:机上チェック摘出誤り率
誤
り
率
相
対
値
黒線:テスト検出誤り率
1.0
悪い設計者
0.5
良い設計者
2
4
経験年数
6
8
10
誤り作込み率=机上チェック摘出誤り率+テスト摘出誤り率
机上チェックでの誤り除去率=机上チェック誤り率/作込み誤り率
=1ー減衰率
作込み・机上チェックとテスト
設 計
誤り作込み
100 件/K行
初
心
者
高
熟
練
者
者
誤り減衰率=3/5
誤り漏れ率=0.6
誤り摘出率=0.4
誤り
作込み
20
件/K行
テスト
机上チェック
誤り減衰率=1/5
誤り漏れ率=0.2
誤り摘出率=0.8
残留
誤り率
60
件/K行
残留
誤り率
6
件/K行
誤り減衰率=1/10
誤り漏れ率=0.1
誤り摘出率=0.9
残留
誤り率
4
件/K行
誤り減衰率=1/10
誤り漏れ率=0.1
誤り摘出率=0.9
残留
誤り率
0.4
件/K行
上位プログラム/関数のテストで摘出される誤り
「時刻表示を求める」
のテスト漏れ
仕様
時刻を
求める
時計
時刻
をえ
る
時針
を求
める
時刻
表示
を求
める
表示
する
分針
を求
める
秒針
を求
める
仕様
時刻
表示
を求
める
仕様
分針
を求
める
テスト
設計
設計
設計
func
時刻を
求める
テスト
テスト
func
時刻
表示
を求
める
Sys
テスト
統合
テスト
func
時刻
表示
を求
める
prog
分針
を求
める
上位テストは下位の各テストで漏れた誤りの摘出
誤りは,必ず作込み工程を調べ対策する
func
時刻を
求める
「時刻表示を求める」
「分針を求める」
「時針を求める」
「秒針を求める」
のテスト漏れ
「分針を求める」
のテスト漏れ
工程の主要な特性
工数
(人件費)
仕様
前位
文書
純
設
計
テスト
机上チェック
Bug
Bug*dd
結果
設計
文書
誤の作込み
100~40~10
件/K行
誤
り
率
誤りの減衰
除去率 50~80%
減衰率1/2~1/5
誤りの減衰
減衰率1/10
Bug*dd*dt
生産性の改善
工数
(人件費)
仕様
前位
文書
純
工数
(人件費)
工数
(人件費)
設
結果
設計
文書
計
机上チェック
テスト
誤
り
率
10
0
10
1
0.
1 要
求
定
義
設
計
コー
デ
ィン
グ
開
発
テ
ス
ト
検
収
テ
ス
ト
運
用
作成文書には誤り有り
早くに誤りを
取除く方が効率的
誤りを可視化する
作込み誤り率=机上チェック摘出誤り率+テスト摘出誤り率
開発
階層的な工程
設計
(純)設計
誤
り
率
テスト
机上チェック
机上チェック摘出
誤り率
60
件/K行
1/2
30
件/K行
作込み誤り率
テスト摘出
誤り率
1/10
3件/K行
使用者
の迷惑
誤り率/工数も可視化する
開発
ある開発
設計
(純)設計
誤
り
率
60
件/K行
テスト
テスト摘出
誤り率
机上チェック摘出
1/2
誤り率
30
件/K行
総計
10人月
障害処理
机上チェック
1/10
3件/K行
使用者
の迷惑
作込み誤り率
工
数
3.5
3
人月/K行
人月/K行
0.5
人月/K行
3
人月/K行
バグ
修正
テストも分解して見ると
開発
設計
(純)設計
誤
り
率
テスト
1テスト
机上チェック
机上チェック摘出
誤り率
60
1/10
件/K行
障害処理
テスト摘出
誤り率
1/2
30
件/K行
バグ修正
3件/K行
使用者
の迷惑
作込み誤り率
生産性
総計 工
10人月 数
7人月/K行
誤り率
60件/K行
3
人月/K行
0.5
0.8
人月/K行
人月/K行
0.5人月/30件
=100人時/30件
=3.3人時/件
2.7
人月/K行
3
バグ
修正
人月/K行
3人月/3件
2.7人月/27件
540人時/27件 600人時/3件
=200人時/件
=20人時/件
机上チェックを強化すると
開発
設計
(純)設計
誤
り
率
60
テスト
机上チェック1
1/2
件/K行
机上チェック摘出誤り率
30
件/K行
作込み誤り率
工
数
総計
7.65人月
77%に低下
机上チェック2
1テスト
件/K行
1/10
3
人月/K行
障害処理
テスト摘出
誤り率
1/2
15
バグ修正
0.5
0.5
0.8
人月/K行
人月/K行
人月/K行
1.5件/K行
1.35
人月/K行
使用者
の迷惑
1.5
人月/K行
バグ
修正
更にテストも強化すると
開発
設計
(純)設計
誤
り
率
60
テスト
机上チェック1
1/2
件/K行
机上チェック2
1+1テスト
件/K行
作込み誤り率
1/2
15
件/K行
障害処理
テスト摘出
誤り率
机上チェック摘出誤り率
30
バグ修正
使用者
は安心
1/10 1/10
1.5件/K 0.015件/K行
行
工
数
総計
7.1人月
71%に低下
3
人月/K行
0.5
0.5
0.8 0.8
人月/K行
人月/K行
人月/K行 人月/K行
1.5
人月/K行
信頼度の高い/良い品質のソフトを提供する方がコストも低い
悪い品質のソフトは,コストが高い
工程毎の誤り率
仕様〜基本設計
の誤りは大きな
悪影響を及ぼす
詳細設計〜
コーディングの誤り
は数が多い
如何なる誤りでも,外部に出した後は大きな損失
NASA長官室
額のリスト
単純なコードの誤りで人工衛星があらぬ方角へ行った
損失は100億円の桁
工程毎の作込みのメカニズム
仕様
基本
設計
展開
設計
詳細
設計
コーディ
ング
ソース
コード
各誤りは階層展開網中の
知的処理数に比例する
誤りの作込
職位
経営者
部長
課長〜
主任
主任〜
上級
技術者
上級〜
技術者
初心者
担当業務
平均的な
誤りの損失
業務中に起りえる誤り
製品化
決定
市場の誤り
目的の誤り
男/女性/カジュアル
省力化〜スピード向上
外部仕様
設定
過剰仕様/競争力無い仕様
必要機能の過不足
システム
構成決定
構成に落ち度,ソフト量/機能
柔軟性〜発展性に乏しい
構成プログラム
の仕様決定
機能不備〜漏れ,条件漏れ,
能力不足,インタフェイス不整合,
数10人時
プログラム
作成
インタフェイスミス,機能抜け/相違,
論理不良,文法ミス,基準違反
数人時
数1000人時
= 100M¥
数1000人時
= 10M¥
大,
数100人時
= 2M¥
机上チェックの方法
決
定
認
知
仕
様
決定
妥
当
性
対
象
市
場
製
品
コン
セ
プ
ト
製
品
分
野
サ
|
ビ
ス
外
部
機
能
運
用
方
式
保
守
方
式
構
成
方
式
開
発
方
式
ソース
コー
ド
変換
基本設計
主
要
決
定
事
項
変
換
コーディング
外
部
イン
タ
フェ
イス
デザイン レビュー
関係分野の有識者が
集合して各方面から
チェックする
機
能
分
割
法
使
用
言
語
前
位
文
書
各
種
入
出
力
各
設
計
突合せ
チェック
各
種
ファ
イル
出
力
文
書
各
種
デ
ータ
各
種
宣
言
処
理
論
理
主
要
作
業
正
確
さ
論理的
正当性
纏め
1.設計に誤りは避けられない
設計の誤りはヒューマンエラーである
2.ある工程の誤り作り込み率は一定である
3.机上チェックやテストは誤りを一定率で減衰させる
4.誤りを避けることができない.
作り込んだ誤りは,早くに除去する方が有利
5.良い品質の製品を作る方が
悪い品質の製品を作るより総合コストは安い
6.ある設計では,その行ったことをチェックすれば良い
誤りによる被害の様相
被
害
大 時計
=ディジタル
と思込む
設
例
例
仕
様
ソ
|
ス
被
害
男物時計
大 は当らず
女より儲かる
と思ったが
被
害
中
秒針=最長×
最長より
少し短い
計
決
定
認
知
変
換
勘違い
凡ミス
決定不正
設
計
変換誤
桁上げ異常
軽
時計
=toukei
微小
設計での誤り様相
設
根
拠
を
時計
=ディジタル
と思込む
例
例
仕
様
ソ
|
ス
照
決
定
認
知
変
換
勘違い
確
認
計
凡ミス
決定不正
男物時計
は当らず
女より儲かる
と思ったが
設
計
確認
照合
変換誤
合
秒針=最長×
最長より
少し短い
桁上げ異常
動作を確認照合
時計
=toukei
工程の調整/山崩し
ユーザ
調査
外部仕様書作成
1
2
3
1
構成仕様書作成
2
顧客システム部
打合
方針
打合
Prog仕様書作成
System仕様書作成
顧客説明/承認
30日
0
35日
1
0
課長/主任
同行
○×sys
前回担当者
応援
説明本人
その他は
営業代行
○×sys
Prog流用
作業時間の分布例2
PAD
コード化
コーディング
ソースコード
リスト
全体作業時間
=1行当たり作業時間
×行数
机上チェックによるテスト前摘出の強化
机上チェックによる
テスト前摘出を強化するには
誤 1.0
り
率
設計(全体)
0.5
相
対
値
純設計
2
4
経験
年数
6
8
机上チェック
10
作込み誤り率=机上チェック誤り率+テスト誤り率
机上チェックでの誤り除去率=机上チェック誤り率/作込み誤り率
=1ー減衰率
ある開発の定量的評価
3.5人月/K行
仕
様
3.5人月/K行
設計
誤り率20〜40件/K行
設計時机上チェック50%摘出
設計時チェック無し
設計時机上チェック50%摘出
設計時机上チェック80%摘出
テスト
誤り減衰 約1/10
製
品
20 件/K行
20 件/K行
10 件/K行
4 件/K行
2 件/K行
使いもの
にならない
2 件/K行
使いもの
にならない
1 件/K行
何とか
使える
0.4 件/K行
まあまあ
使えなくはない
ある開発の定量的評価
3.5人月/K行
仕
様
3.5人月/K行
設計
誤り率20〜40件/K行
設計時机上チェック50%摘出
設計時チェック無し
設計時机上チェック50%摘出
設計時机上チェック80%摘出
テスト
誤り減衰 約1/10
製
品
20 件/K行
20 件/K行
10 件/K行
4 件/K行
2 件/K行
使いもの
にならない
2 件/K行
使いもの
にならない
1 件/K行
何とか
使える
0.4 件/K行
まあまあ
使えなくはない
ソフトウエアの誤り
ソフトウエア
+コンピュータ
知的処理
の特徴
誤りが無い
融通性は零
人間
誤りがあり得る
融通性あり
創造的
一つの誤りも許さない,非人間的で嫌なやつ
「馬鹿と鋏は使いよう」
自分が適合すること
初心者の誤りの様相
初心者の誤りの例
母体 171行
40
47
44
45
39
誤
り
・
指
摘 20
件
数
テスト
発見(2)
プログラム
誤り直結
(15)
処理/
論理誤り(13) 約90件/K行
図不適切(5)
30
名称誤り(6)
20
表現不適切
(21)
各種の
軽微な誤り
約187件/K行
4
1
2
3
4
5
6
レビュー/チェック回数
7
正確性の乏しさ
正確な思考と表現が第1歩
プログラム
誤り直結
(15)
約90件/K行
各種の
軽微な誤り
約187件/K行
プログラム
レベルの
誤り
プログラム
以前の
誤り
誤りの中心は詳細設計〜コード化
100
仕様と上位
基本設計
約1/10
SE の
誤り
詳細設計
コード化
約1/2
プログラマ
の誤り
50
0
アセンブラ
言語使用
コンパイラ
言語使用
簡単な設計を通じて正確な人間に変身
誤りなく作れる人が生残る
0
採用対象
誤
り
率 0.05
100
知
識 50
得
点
0
0.1
合格
不合格
知識教育
作
業
経
験
急速に改善する
合理的な方法が必要
知識でなく
実際にできる力
「人間の誤り」修正の原則
教え
教え
特
認識
行動1
行動2
や
り
直
せ
!
1.人は自らの誤りを認知できない
誤るつもりで誤る人はいない
質 2.誤り個所を認知しないと,
自らの誤りを矯正できない
3.誤る原因を除かねば
誤りは繰返さえる
あるコーディングミス
フロー
チャート
………
…正
………
…
ソース
コード
………
…誤
………
….
コ
ン
パ
イ
ル
タイプミス
エラー
メッセージ
関係する
文法的誤り
妥当な解法
Q1.シンタックスチェックで誤りが発見され,ソースの誤りが判った
この種の誤りを犯さない為には,どうすれば良い
か?
「如何なる作業で何を誤ったか」を把握することが必要
コーディングミスの矯正
フロー
チャート
………
…正
………
…
ソース
コード
………
…誤
………
….
コ
ン
パ
イ
ル
タイプミス
エラー
メッセージ
関係する文
法的誤り
妥当な解法
Q2.誤りはタイプミスであることが判った
この種の誤りの再発防止は,どうすれば良い
か?
*フローチャートからソースを自動生成
*充分に気を付ける
*フローチャートを見易くする
*タイピングを練習する
*チャートとソースを突合せチェック