Transcript (A`+x`) On

Disciplined Software
Engineering
Lecture #9
Watts S. Humphrey
Software Engineering Institute
Carnegie Mellon University
Pittsburgh, PA 15213
Sponsored by the U.S. Department of Defense
Copyright © 1994 Carnegie Mellon University1
設計記法ー概観
記法の重要性
ブール代数
•カルノー図
•有用な記号
•ブール関数の利用
簡単化
形式的手法
Copyright © 1994 Carnegie Mellon University2
記法の重要性
ソフトウエア開発における多くの欠陥は誤解と混乱
から生じている。
プログラムの要求と設計を表現するために使用さ
れる記法は、
•精密かつ簡潔、
•使い易い
•共通に理解される
•広範囲のソフトウエア機能の表現に適切
であるべきである。
形式的記法はこれらの判断基準を満たしてい
る。
Copyright © 1994 Carnegie Mellon University3
集合の性質ー数学的記法
英語
記号
例
Union, sum
A or B, A+B
Intersection, product
A and B, A*B, AB
Complement, not
'
All, universal
1
None, empty set
0
A', not A
Copyright © 1994 Carnegie Mellon University4
この記法の利用
長所
•重要な一つの記法に精通する
•プログラムの正当性証明ための形式的手法で
使用される記法と無矛盾である。
•論理を他の表現から区別する。
短所
•一般に入力に時間がかかる
•精通に練習を要する
•同僚が理解できないかもしれない
Copyright © 1994 Carnegie Mellon University5
ブール代数
集合の代数
•集合の関係を定義し取り扱う。
•首尾一貫性=文が自己無矛盾か
•妥当性(validity)=文が現実を表現している
か
集合の表現
•ベン図
•基本的関係
•全集合と空集合
Copyright © 1994 Carnegie Mellon University6
ベン図
人間
人間
非成人女性
女性
男性
成人
女性
非成人
男性
成人
男性
全集合
A’B’C’
AB’C’
ABC’
A’BC’
ABC
AB’C
A’BC
A’B’C
Copyright © 1994 Carnegie Mellon University7
集合の性質 - 1
反射律:
べき(等)律:
反対称律:
推移律:
可換律:
結合律:
分配律:
for every x, x<=x
xx=x, x+x=x
if x<=y and y<=x then x=y
if x<=y and y<=z then x<=z
xy=yx, x+y=y+x
x(yz)=(xy)z, x+(y+z)=(x+y)+z
x(y+z)=xy+xz, x+yz=(x+y)(x+z)
Copyright © 1994 Carnegie Mellon University8
集合の性質 - 2
空集合と全集合:
xx’=0, x+x’=1, 0<=x<=1
x0=0, x+1=1, x+0=x, x1=x
一貫性:
x<=y, xy=x, x+y=y は同値である
吸収律:
x(x+y)=x+xy=x
ドモルガンの定理:
(x’)’=x, (xy)’=x’+y’, (x+y)’=x’y’
Copyright © 1994 Carnegie Mellon University9
例
次のような条件の下でONにしたいスイッチをもってい
るとする。
●A または B または C がON
●A かつ B が ONでないとき
●A かつ C が ONでないとき
このスイッチを次のように表現する、
ON=(A+B+C)*[(A*B)+(A*C)]’
Copyright © 1994 Carnegie Mellon University10
ブール式の簡単化
ブール式を簡単化するとき次のようなガ
イドラインを考えること。
•もしプライム’のついた括弧つきの任意の式
があるならば、それらを取り除くためドモルガ
ンの定理を使いなさい。
•分配法則で因数分解される共通項を探せ。
•複雑さを減少させるため代入をする。
•積の和の形の式へもっていくよう試みる。
Copyright © 1994 Carnegie Mellon University11
簡単化の例 - 1
電球の例をつかう
On = (A+B+C)*[(A*B)+(A*C)]’
ドモルガンの定理を適用する
On = (A+B+C)*[(A’+B’)*(A’+C’)]
A’ が最後の2項で共通である。よって
On = (A+B+C)*[A’+(B’*C’)]
B+Cを x で, B’*C’を x’ でそれぞれ置き換える
On = (A+x)*(A’+x’)
Copyright © 1994 Carnegie Mellon University12
簡単化の例 - 2
式は完全に簡単化された。しかし集合の積の和の形に
変換した方がいい。
•On = (A+x)*(A’+x’)
•On = [(A+x)*A’]+[(A+x)*x’]
•On = [(A*A’)+(x*A’)]+[(A*x’)+(x*x’)]
•On = (x*A’)+(A*x’)
ここで x を B+C で置き換える
•On = [(B+C)*A’]+[A*(B’*C’)]
•On = (A*B’*C’)+[A’*(B+C)]
Copyright © 1994 Carnegie Mellon University13
簡単化の練習問題
つぎの式を簡単化せよ
1. F = X+(X’*Y)
2. F = (X+Y)+[(X*Z)+Y]
3. F = (X’*Y’*Z’)+(X*Y*Z’)+(X*Y’*Z’)
4. F = [X’*(Y+Z’)]’*(X+Y’+Z)*(X’*Y’*Z’)’
Copyright © 1994 Carnegie Mellon University14
問題 1 の答え
この式から始める
F = X+(X’*Y)
分配律を使うと
F = (X+X’)*(X+Y)
ここで、全集合の性質によって
X+X’ = 1 および 1*(X+Y) = X+Y
ゆえに、答えは
F = X+Y
Copyright © 1994 Carnegie Mellon University15
問題 2 の答え
F = (X+Y)+[(X*Z)+Y] この式から始める。
分配律を適用すると
F = (X+Y)+(X+Y)*(Z+Y)
今、共通項 X+Y を 因数として括り出すと、
F = (X+Y)*[1+(Z+Y)]
全集合の性質によって, 1+Z+Y=1
ゆえに、答えは
F = X+Y
Copyright © 1994 Carnegie Mellon University16
問題 3 の答え
F = (X’*Y’*Z’)+(X*Y*Z’)+(X*Y’*Z’) から始める。
共通の Z’ 項を因数としてくくり出すと次式になる。
F = Z’*(X’Y’+XY+XY’)
共通のX 項を因数としてくくり出すと次式になる。
F = Z’*[X’Y’+X(Y+Y’)] = Z’*(X’Y’+X)
さて, 分配律によって
F = Z’*(X’+X)*(Y’+X) = Z’*(Y’+X)
Copyright © 1994 Carnegie Mellon University17
問題 4 の答え
F = [X’*(Y+Z’)]’*(X+Y’+Z)*(X’*Y’*Z’)’ から始める。
先ず ドモルガンの定理を適用すると, 次式になる。
F = (X+Y’Z)*(X+Y’+Z)*(X+Y+Z)
共通の X 項を因数としてくくり出すと次式になる。
F = X+Y’Z*(Y’+Z)*(Y+Z)
共通の Z 項をくくり出すと
F = X+Y’Z*(Z+Y’Y) = X+Y’Z
Copyright © 1994 Carnegie Mellon University18
カルノー図 - 1
6 変数以下の式はカルノー図が簡単化プロセスに
役立つ。
カルノー図は、一つの式に変数の全ての可能な
組み合わせを表現するための構造的な方法であ
る。
そこでの括り出しは、関係のある項を結びつけ、
それにより簡単化する方法をとる。
Copyright © 1994 Carnegie Mellon University19
カルノー図 - 2
ブール式は最小項の形式で表現できる。
最小項は変数のすべて可能な組み合わせの
積である。
X と Y の最小項はつぎである:
X’*Y’, X*Y’, X’*Y, XY
n 個の変数の最小項は 2**n 個ある。
Copyright © 1994 Carnegie Mellon University20
カルノー図 - 3
XY’
X
X’Z
YZ
00
01
11
X
10
00
0
0
1
YZ
X
01
11
X
X
10
1
X
XY’+X’Z
YZ
X
00
0
1
X
01
11
X
X
10
X
Copyright © 1994 Carnegie Mellon University21
4 変数カルノー図
YZ
WX
00
01
00
01
11
11
10
X
X
X
X
X
X
10
Copyright © 1994 Carnegie Mellon University22
5 変数カルノー図
XYZ
VW
000
001
011
010 110
111
101
100
00
01
11
10
Copyright © 1994 Carnegie Mellon University23
図の上の括り出し - 1
2つの隣り合ったセルが共に1をもつとき、それ
らのセルは括り出すことができ、そのとき2つの
セルに対して異なる値をとる変数は消去する。
例えば、 0100 と 0101 のセルは括り出すこと
ができ、変数 Z は消去する。
このことは次のような図の上で見ることが出来
る。
Copyright © 1994 Carnegie Mellon University24
図の上の括り出し - 2
YZ
WX
00
01
00
01
11
11
10
X
X
X
X
X
X
10
Copyright © 1994 Carnegie Mellon University25
図の上の括り出し - 3
同様に, 4つの隣り合ったセルが1をもつとき,
その時これらのセルは括り出すことができ、そ
の4つのセルに対して異なる値をとる2つの変
数は消去できる。
例えば, 0101, 0111, 1101, および 1111 のセ
ルは括り出せて、 変数 w と y は消去される。
このことは次の図の上で示される。
Copyright © 1994 Carnegie Mellon University26
図の上の括り出し - 4
YZ
WX
00
01
00
01
11
11
10
X
X
X
X
X
X
10
Copyright © 1994 Carnegie Mellon University27
図の上の括り出し - 5
以上可能な括り出し3つをすべて行わうと、結
果の式は次のようになる。
F = w’yz + wxy’ + xz
こことは次の図の上で見ることが出来る。
Copyright © 1994 Carnegie Mellon University28
図の上の括り出し - 6
YZ
WX
00
01
00
01
11
11
10
X
X
X
X
X
X
10
W’YZ+W’XY’+XZ
Copyright © 1994 Carnegie Mellon University29
簡単化の練習問題
カルノー図を使用して、次の4つの式を簡単にせよ。
1. F = X+(X’*Y)
2. F = (X+Y)+[(X*Z)+Y]
3. F = (X’*Y’*Z’)+(X*Y*Z’)+(X*Y’*Z’)
4. F = [X’*(Y+Z’)]’*(X+Y’+Z)*(X’*Y’*Z’)’
Copyright © 1994 Carnegie Mellon University30
問題 1 の答え
関数は
YZ
X
F = X+(X’*Y)である。
括り出しを行うと結果は
F = X+Y
00
01
11
10
0
0
0
1
1
1
1
1
1
1
YZ
X
00
01
11
10
0
0
0
1
1
1
1
1
1
1
Copyright © 1994 Carnegie Mellon University31
問題 2 の答え
関数は
YZ
X
F = (X+Y)+[(X*Z)+Y]
= X+Y+XZ+Y
= X+Y+XZ
括り出しを行うと結果は
F = X+Y
00
01
11
10
0
0
0
1
1
1
1
1
1
1
YZ
X
00
01
11
10
0
0
0
1
1
1
1
1
1
1
Copyright © 1994 Carnegie Mellon University32
問題 3 の答え
YZ
関数は
X
F = (X’*Y’*Z’)+(X*Y*Z’)+(X*Y’*Z’)
= X’Y’Z’+XYZ’+XY’Z’
括り出しを行うと結果は
F = Y’Z’+XZ’
= Z’(Y’+X)
00
01
11
10
0
1
0
0
0
1
1
0
0
1
YZ
X
00
01
11
10
0
1
0
0
0
1
1
0
0
1
Copyright © 1994 Carnegie Mellon University33
問題 4 の答え - 1
X+Y’Z
関数は次式である:
YZ
F = [X’*(Y+Z’)]’*(X+Y’+Z)*(X’*Y’*Z’)’
= (X+Y’Z)*(X+Y’+Z)*(X+Y+Z)
X
この式は3つの図でカバーされる。
X+Y’+Z
00
01
11
10
0
0
1
0
0
1
1
1
1
1
X+Y+Z
YZ
YZ
X
00
01
11
10
X
00
01
11
10
0
1
1
1
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
Copyright © 1994 Carnegie Mellon University34
問題 4 の答え - 2
全体の関数はこれらの3つの図
の積である。つまり 3つの図の
すべてが1をもつところは 1 で,
他の所は0の図である。図は右
のようになる。
YZ
X
00
11
10
0
0
1
0
0
1
1
1
1
1
01
11
10
この図で括り出しを行って答えは
F = X+Y’Z
01
YZ
X
00
0
0
1
0
0
1
1
1
1
1
Copyright © 1994 Carnegie Mellon University35
ゼロの括り出し
1を括り出すときには、カルノー図上の1を全部塗りつぶ
す。このことにより、式の最小項形式をえる。
同じカルノー図の0を全部塗りつぶすことにより括り出し
を行うことも可能である。このときには、それに続いてド
モルガンの定理を適用する。
このときには、その式の最大項形式、つまり集合和の積
の形式が得られる。
Copyright © 1994 Carnegie Mellon University36
ゼロの括り出しの例
右の図の1を全部塗りつぶすことで、
括り出しを行うと次式が得られる。
F = X+Y+Z
YZ
X
00
10
0
1
1
1
1
1
1
1
1
01
11
10
YZ
X
これにドモルガンの定理を適用すると
最大項形式の答えが選られる。
11
0
一方、 0を全部塗りつぶすことにすると
次式が得られる。
F’ = X’Y’Z’
01
00
0
0
1
1
1
1
1
1
1
1
F = X+Y+Z
Copyright © 1994 Carnegie Mellon University37
もう一つの括り出しの例
右の図の1を全部塗りつぶすして括り出しを
すると、最小項形式の結果が得られる。
F = XY’+X’Y+Z
しかし、 0を全部塗りつぶすことにすると、
次が得られる
YZ
X
00
01
11
10
0
0
1
1
1
1
1
1
1
0
01
11
10
F’ = X’Y’Z’+XYZ’
YZ
ドモルガンの定理を適用すると最大項
形式の答えが得られる。
F = (X+Y+Z)*(X’+Y’+Z)
= (X+Y)*(X’+Y’)+Z
X
00
0
0
1
1
1
1
1
1
1
0
Copyright © 1994 Carnegie Mellon University38
ゼロの括り出し
1 の括り出しがときどき、1つか2つまずい位置におか
れた0によって複雑になることがある。これは次のよう
に処理することが出来る。
あたかも都合の悪い0が1であるとみてその図の括り
出しを行う。
そののち括り出した因子をそれぞれ小さな図とみて0を
括りだす。
Copyright © 1994 Carnegie Mellon University39
ゼロの括り出しの例 - 1
2つの都合の悪い0を別にすれば
この図の括り出しは非常に単純で
ある。
F = Y’+W’Y = Y’+W’
しかし、W’X’Y’Z’ と W’XYZに0が
ある から,これを括り出さねばなら
ない。
YZ
WX
00
01
11
10
00
0
1
1
1
01
1
1
0
1
11
1
1
0
0
10
1
1
0
0
Copyright © 1994 Carnegie Mellon University40
ゼロの括り出しの例 - 2
第1の因子、 Y’は変数W,X,と
Zからなる小さな図゚を創る。
この図上で、W’X’Z’ が括り
出される:
YZ
WX
F1 = Y’*(W’X’Z’)’
= Y’*(W+X+Z)
ここの本質は
Y’  not W’X’Z’
の括り出しである。.
第2の因子の括り出しは
F2 = W’Y*(XZ)’
= W’Y*(X’+Z’)
00
01
11
10
00
0
1
1
1
01
1
1
0
1
11
1
1
0
0
10
1
1
0
0
よってこの関数は次になる。
F = Y’*(W+X+Z)+W’Y*(X‘+Z’)
Copyright © 1994 Carnegie Mellon University41
多変数の括り出し
カルノー図は6変数まで可能である。 それを超えると、
特別なコツが必要になる。
もし式のほとんどの項が6以下の変数からなり、その他
の変数が2,3個の場合に限り、 0の括り出しに近い方
法が使える。
この方法は例外括り出しと呼ばれ、変数の数がいくら
あっても使える。
Copyright © 1994 Carnegie Mellon University42
例外括り出し - 1
次の関数の括り出しを4変数のカルノー図の上で行う。
F = AX’Y’+WXY’+W’Y’Z+XY’Z+W’XY’Z’+WX’Y’
1. 変数 W, X, Y, および Z を使って関数を構成する.
2. A をもつ項については、 1の代わりに、その桝目に
A を入れる。
3. ゼロを括り出す際、 A を A+0 として扱う。
Copyright © 1994 Carnegie Mellon University43
例外括り出し - 2
初めに、 W, X, Y, と Z を含む項のみを
使って図をつくる。
次は, Aを含む項である。 0がある
ところに Aを入れる。1があるところ
には0を入れる。
F1 = WXY’+W’Y’Z+XY’Z+W’XY’Z’+WX’Y’
F2 = AX’Y’
YZ
YZ
WX
00
01
11
10
00
0
1
0
0
01
1
1
0
11
1
1
10
1
1
WX
00
01
11
10
00
A
A
0
0
0
01
0
0
0
0
0
0
11
0
0
0
0
0
0
10
A
A
0
0
Copyright © 1994 Carnegie Mellon University44
例外括り出し - 3
初めに、A が1であると仮定して
1を括り出す。
F1 = Y’
YZ
WX
00
01
11
10
次に、Aの項を括り出す。そのとき
A をA+0として取り扱う。
00
A
1
0
0
F = Y’*[A+(W’X’Z’)’]
= Y’*(A+W+X+Z)
01
1
1
0
0
11
1
1
0
0
10
1
1
0
0
Copyright © 1994 Carnegie Mellon University45
他の有用な記号
次のような基本的な数学記号もまたプログラム機能を
定義する際に有用である。

- “集合の1つの要素である”ことを意味する
-
“その集合の要素ではない”ことを意味する

- “その集合の全要素に対して”を意味する

- “その集合の要素が存在する”を意味する
Copyright © 1994 Carnegie Mellon University46
記法の例
データセット D がファイルに含まれるならファイルを更
新する
(D File) :: Update
全ての数 i が偶数であるとき、数x(i)を加える
 i when (i  even) :: add x(i)
任意の数 i が負であるときレジスターをクリアーする
i when (i < 0) :: Clear
Copyright © 1994 Carnegie Mellon University47
関数の完全性
もし関数の集合が全ての可能な条件をカバーしている
ときその集合は完全であると言う。
完全な関数集合に対しては、関数の和に対応するカル
ノー図が図上の位置すべてをカバーする。
図上の位置が多重にカバーされることはありうる。
Copyright © 1994 Carnegie Mellon University48
関数の直交性
関数集合に属するどの二つの関数も同じ条件をカバ
ーすることがなければ、その集合は直交していると言
う。
これは任意の関数と任意の他の関数の積が0である
ことを意味する。


i, j where (i j) => F(i)*F(j) = 0
図は完全にはカバーされていないかもしれない。
Copyright © 1994 Carnegie Mellon University49
完全かつ直交
1つの関数集合はつぎの条件を満たすとき,完全であ
り、かつ直交している。
•関数全体ですべての要素をカバーする。
•どの2つの関数も同じ要素をカバーしない。
Copyright © 1994 Carnegie Mellon University50
完全かつ直交している関数
f, g, h は完全である
11
f, g, h は直交している
00
01
10
0
f
g
gh
fh
0
1
g
f
fh
fg
1
00
h
01
11
f
g
g
10
f
f, g, h は完全かつ直交である。
0
1
00
01
11
10
f
f
g
h
h
g
h
f
Copyright © 1994 Carnegie Mellon University51
形式的方法 - 1
ソフトウェア設計の形式的方法は数学の概念をベース
に開発されてきた。
形式的方法の前提は次である。
•コンピュータプログラムは数学の文として扱うことが
できる。
•したがって、数学の原理が適用できる。
•正しいプログラムの設計は、したがって、定理の導出
として取り扱うことが出来る。
•数学的に厳密な方法はかくして正しいプログラムを
つくりだすはずである。
Copyright © 1994 Carnegie Mellon University52
形式的方法 - 2
形式的方法は典型的には,プログラムの前置条件、後
置条件、およびプログラム不変条件を使う。
そこでのプログラムは、不変条件を保存しながら、前置
条件を後置条件に変換する。
プログラムの正しさは、次のように証明する。
•プログラムは、前置条件を後置条件に変換する。
•プログラムは、不変条件を保存する。
Copyright © 1994 Carnegie Mellon University53
形式的方法 - 3
新しいプログラムを形式的方法で開発するとしたら、
•後置条件から出発する 。
•前置条件を導出する。
•不変条件を決定する。
前置条件を後置条件に変換しその不変条件を保存す
るプログラムを定義する。
もしそのプログラムが繰り返しを含むならば、各サイク
ルはループ終了に向かって進行すべきである。
Copyright © 1994 Carnegie Mellon University54
形式記法への賛成論
形式記法は精密である。
形式記法は複雑な機能を簡潔に表現できる。
形式記法は形式的方法を学習するときの基礎をなす。
Copyright © 1994 Carnegie Mellon University55
形式記法への反論
形式記法は学習に時間がかかる。
形式記法について、それを設計に使用するのに必要な
レベルで精通するには、さらに多くの時間がかかる。
あなたの仲間たちは形式記法を理解できないかもしれ
ない。
Copyright © 1994 Carnegie Mellon University56
このコースの形式的記法
支持者達は形式的方法は品質のよいソフトウエアを開発
するための厳密な方法を与えると主張する。懐疑派は
費用効果的でないと反論する。
形式的方法は、設計の正当性を示しているが、それが
一般にされるにはつぎが要求される。
•ユーザ゙の訓練
•形式的に証明する方が、ソフトウェアの設計の中で
行うよりもエラーが少ないユーザ
形式的手法はこのコースではこれ以上は扱わない。
Copyright © 1994 Carnegie Mellon University57
形式的方法関連の示唆 - 1
もしあなたが形式的方法に精通している、あるいは訓
練を受けていれば、
•形式的方法をPSPで使いなさい。
•あなたのあなたの品質と生産性を測定しなさい。
•あなたの結果を同様の方法を使用する他の人の結
果と比較しなさい。
•あなたの結果をあなたが形式的方法によらない場合
の結果と比較しなさい。
•この方法があなたにとって効果があるかどうかを判
断しなさい。
あなたが何か発見したら、それを他の人に話しなさい。
Copyright © 1994 Carnegie Mellon University58
形式的方法関連の示唆 - 2
もしあなたが形式的方法に精通してなければ、以下を
検討しなさい。
•ユーザに彼らのデータを見せてもらう。
•コースをとるか、参考書で勉強する。
•自分自身で試してみる。
あなたの品質と生産性を前後で計測し、形式的方法が
あなたにとって効果があるかどうか判断する。
あなたが何か発見したら、それを他の人に話しなさい。
Copyright © 1994 Carnegie Mellon University59
演習課題 #9
テキストの付録B (p.353-373)を読んで、例題を実施し
なさい。
PSP2.1を使用して、N個の実数のリンクリスト(linked
list)を昇順にソートするプログラム8Aを書きなさい。
PSP2.1の説明は付録C(p.394-397)を、プログラム8A
の仕様は付録D(p.492-493)を参考にしなさい。
Copyright © 1994 Carnegie Mellon University60
講義9のまとめ - 1
1. 貧弱な設計記法はエラーの原因である。
2. 定義された厳密な記法を使用することによって、
あなたはあなたの設計の品質を改善できるし、欠
陥をなくすことができる。
Copyright © 1994 Carnegie Mellon University61
講義9のまとめ - 2
3. 利用可能なものの中から適切な記法を選択し、
使用しなさい。
4. あなたのソフトウェア開発に形式的方法を試みなさ
い。そしてそれがあなたの役に立つか調べなさい。
Copyright © 1994 Carnegie Mellon University62