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

システム工学概論
第3回
フイードバックによる向上
2004. 11. 11
第3回概要
1.誤との付合い方
2.誤の防止
3.耳寄りな話
ソフトウエア初心者の悩み
プログラムはパッと作れるが,
仕上げるまでは苦労する
大体それらしいプログラムにはなっているが,
正解とは何時も何処かが違っている
どうして,
俺様のプログラムはこんなにバグが多いのか
畜生!! まだ通らない!!
こんなパソコン叩き潰してくれようか!
ソフトウエアの誤
ソフトウエア
+コンピュータ
人間
知的処理
誤が無い
誤があり得る
の特徴
融通性は零
融通性あり
創造的
一つの誤りも許さない,
非人間的で嫌なやつ
「馬鹿と鋏は使いよう」
自分が適合すること
初心者の誤りの様相
初心者の誤りの例
母体 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行
1
. .
2
各種の
軽微な誤り
約187件/K行
プログラムレベル
の誤り
プログラ以前の誤り
誤りポテンシアル
単なるプログラム技術の向上でなく
まず正確な思考と明解な表現を向上させる
誤りなく作れる人が生残る
0
誤
り
率 0.05
100
知
識 50
得
点
0
0.1
合格
不合格
知識教育
採用対象
×
時ここに至っては,
急速に改善できる
合理的な方法を
身に付けるしかない!
作
業
経
験
フィードバックによる向上
頭脳
OK
思
思
考
考
方
方
法
法
知
識
ある
問題
解決
結
果
?
NG
自分を修正する
修正
個所
フイードバック
繰返し,繰返し,
自分が修正される迄
「人間の誤り」修正の原則
教え
教え
認識
行動1
行動2
や
り
直
せ
!
1.自分の誤は認知できない
誤るつもりで誤る人はいない
誤らないコンピュータは,恩師である
2.誤り個所を認知しないと,
自らの誤りを矯正できない
3.誤る原因を除かねば
誤りは繰返さえる
あるコーディングミス
フロー
チャート
………
…正
………
…
ソース
コード
………
…誤
………
….
コ
ン
パ
イ
ル
タイプミス
エラー
メッセージ
関係する
文法的誤り
不当な解法
Q1.シンタックスチェックで誤りが発見され,ソースの誤りが判った
この誤りは,何が原因で起ったのであろうか?
「如何なる作業で何を誤ったか」を把握することが必要
このコーディングミスを矯正するには
フロー
チャート
………
…正
………
…
ソース
コード
………
…誤
………
….
コ
ン
パ
イ
ル
タイプミス
エラー
メッセージ
関係する文
法的誤り
妥当な解法
Q2.誤りはタイプミスであることが判った
この種の誤りの再発防止は,どうすれば良い
か?
*フローチャートからソースを自動生成
*充分に気を付ける
*フローチャートを見易くする
*タイピングを練習する
*チャートとソースを突合せチェック
コーディングミスの過程と対策
フロー
チャート
……
……正
……
……
認
知
決
行
定
動
変換ソフト
ソー
ス
コー
ド
……
……誤
……
思
考
行
動
机上チェック
正味設計
× 気を付ける
フローチャートを
見易くする
認
知
タイピング
練習する
フローチャートから
ソースを自動生成
突合せチェック
全ての
作業に有効
矯正法〜再発防止対策の条件
条件 1.誤りの原因/契機を
的確に捕らえた矯正であること
2.具体的な対策/処置であること
3.永続的に効果があること
4.関連するものに効果があるもの
5.他の人にも,改善効果が及ぶこと
誤り工程の切分1
仕
様
文
書
設計
作業
文
書
設計
作業
文
書
設計
作業
誤を
作込
な
ぜ
?
な
ぜ
?
Prog
誤り
コード
異常
動作
な
ぜ
?
ユーザ
クレー
ム!
な
ぜ
?
・科学的捜査1 なぜ?〜なぜ?
誤り作込み場所(工程)を突止める
極力狭い範囲に絞る
---Divide and conquer---
誤り工程の切分2
正
…………
設計出力
文書
…………
当該設計
設計入力
文書
…………
誤
設
計
作
業
1
設
計
作
業
2
設
計
作
業
3
設
計
作
業
4
………….
×
×
・科学的捜査2 なぜ?〜なぜ?
更に細かく具体的な作業〜順序を推定
---Divide and conquer---
誤り工程の切分3
設計出力
文書
…………
設計入力
文書
…………
正
…………
認
知
決
定
行
動
誤
………….
・科学的捜査3 なぜ?〜なぜ?
認知/思考/行動の何れで間違ったか
→誤り発生の契機〜原因を推定する
---Divide and conquer---
影響する諸要素
技術不足
嫌いな仕事
検討不足
文書
設計基準
知識不足
認知誤り
認識不足
文書
不仲な相棒
設計方法
悪い上長
図面記法
決定影響
変換/
誤り
行動
嫌なお客様
試験方法
確認不足
要因
悪い組織
顧客/市場不明
約束条件不明
作業中断〜割込
集中が困難
前提条件不明
適用不明
方法不明
Fishbone chart,特性要因図
焦り〜パニック
精神的重圧
相談できない
同種の誤りは再度起さない
様相
契機/原因
直 誤らなくする方策
接
事
後
誤っても影響を
防止できる方策
打ち違い
癖を直す
誤り率を下げる
前後の図面を
照合する
流れ異常
単純な不注意
構造化チャートを
辿って確認する
頭脳で動作を
シミュレーションする
条件漏れ
よく考えて
いなかった
設計書に事前に
条件を整理し,
検討結果で設計
する
条件を考直し
単体テストする
誤字
色々な再発防止策
設計
入力
文書
……
……
当該設計
設計作
業1
設計作
業2
設計作
業3
設計作
業4
設計
出力
文書
……
……
正
誤
……
…
知識
環境
合
理
的
な
案
・他の作業に交代
・悪影響を除去
・不完全個所を確実に変える
・より合理的〜誤らない作業〜仕掛
徹
底
的
に
実
行
繰返しの向上
Boemのサイクル
PDCAを廻せ
1サイクル
完了
Plan 目標を定量的に
達成方法を計画
Do 計画に沿い実行
Check 監視して
Action 対抗策を取る
誤
り
率
回数
初めに急に,次第に緩やかに
永遠に向上を続ける
同程度の努力を続ける限り
同傾向で直線状に伸びる
進歩の様相
コーディングミス
論理誤り
構造不適
サービス誤
誤りは氷山の一角
向上の努力を続けるほど,
誤りの内容は高度化する.
耳寄りな話1
誤り修正コスト
100
誤りは,
早くに
除去するほど
ロスが少ない
10
1
0.1
要
求
定
義
設
計
コー
ディン
グ
開発
テス
ト
摘出工程
検収
テス
ト
運用
テスト+デバッグ工数/K行
耳寄りな話2
デバッグ工数
テスト工数
誤りを
事前退治すると
テストは
グット楽に
早く終わる
先憂後楽の勧め
誤り率/K行
デバッグで完全にすることは不利
机上チェックは引合う
耳寄りな話3
誤
誤
誤
○ ○
プログラム
仕様書
データ
仕様書
設計書
チェック
ソース
誤
構造化
チャート
コード
データ
フロー図
チェック
リスト
チェック
図面毎のチェックは遥かに容易
チェックは難しい
設計とは
入力から出力への
変換である
設計のチェックは
入力と出力の
突合せチェックである
入力と出力の距離が
小さい程
チェックは容易である
図面を追いながら
頭でシミュレーションしたり
再び設計動作する
小さなステップ毎に再確認する
小さなステップ毎に作業し確認する
設計作業 誤り率 Ed
仕
様
チェック思考 II種誤率 Ec
照
合
OK 正解+正と誤認した解(Ec倍)
NG 不一致で解析/修正
チェック/テストは誤り率を×Ec倍に低下させる
仕
様
Ed/N
Ed/N
Ed/N
Ed/N
Ec/N
Ec/N
Ec/N
Ec/N
等しいN段階に分割し,
段階毎にチェックすればEc/N倍
N分割
小さなステップ毎に再確認する
耳寄りな話4
設
計
ソース
コード
仕様書
テスト
設 計
テスト
条件書
コードに落とした
テスト入力条件毎に
PAD(ソースリスト)を辿り
頭でシミュレーションする
関数毎の頭シミュレーションは
単体テストより
能率が良い
必ず条件書を作り
実績を記入する
頭脳シミュレーションによる単体テストは
機械使用より効率的
耳寄りな話5
計
ソース
コード
テスト設計
テスト
条件書
設
仕様書
設
ソース
コード
計
テスト
条件書
テスト
設 計
関数2
設
ソース
コード
計
テスト
条件書
テスト
設 計
関数3
設
計
テスト
設 計
ソース
コード
テスト
条件書
1日の作業毎に
(単位プログラム毎)
組上げてテストする
記憶がある間に考える
記憶があり能率良く
中断も無いから
手戻りがない
テ
ス
ト
関数1
テ
ス
ト
テ
ス
ト
テ
ス
ト
MicroSoft流
纏め
1.人間は誤を犯す
自分を変えて,適合する
2.実際に犯した誤から
自分を改善する
3.「何処で何故誤ったか」から
自分を矯正する個所を探す
4.科学的〜合理的な方法
結果の異常→誤り個所→契機
再発防止策を求める