ソフトウェアテスト
[9] プログラミング技術
Software Testing
[9] Programming Tips and Techniques
あまん ひろひさ ひろひさ
阿萬 裕久 裕久( AMAN
Hirohisa )
(C) 2007-2022 Hirohisa AMAN
1
プログラミングの位置付け位置付けけ
「プログラム仕様仕様」をコンピュータ上でをコンピュータ上でコンピュータ上で上でで実
現するの位置付けがプログラミングの役割プログラミングの位置付け役割
プログラム仕様仕様
プログラム仕様
プログラミング
こういうもの位置付けをコンピュータ上で
作りなさいりなさい
人間の世界の位置付け世界
いかに実行する正確にに実行する
記述できるかできるか
がプログラミングの役割ポイント
(C) 2007-2022 Hirohisa AMAN
形式的なな
実行命令
計算機の世界の位置付け世界
計算機の世界はプログラムのプログラム仕様の位置付け
内容を忠実に実行するをコンピュータ上で忠実に実行する実行する
2
ソフトウェア開発 ≠ プログラミン プログラミン
グ
「プログラミングこそがプログラミングの役割ソフトウェア開発
である」をコンピュータ上でと思われがちわれがプログラミングの役割ち
小規模開発の位置付け場合,要求分析・設計はプログラムの開発者
の位置付け頭の中だけで行われ,の位置付け中だけで行われ,だけで行われ,いきなりプログラミ
ングから開始されるされる
しかし,それではプログラムの大規模開発ではプログラムの歯が立たながプログラミングの役割立たなたな
い
もちろん ひろひさプログラミング能力は大切であるがはプログラムの大切であるがであるがプログラミングの役割
設計や管理を軽んじてはいけない
管理を軽んじてはいけないをコンピュータ上で軽んじてはいけないん ひろひさじてはプログラムのいけない
例えば,スマートフォン用のえば,スマートフォン用のの位置付け
OS :数百万行以上数百万行以上で
印刷したらしたら A4 用の紙で十万枚以上になる(高さで十万枚以上でに実行するなる(高ささ 10m 超)
(C) 2007-2022 Hirohisa AMAN
3
プログラミングで大事なことなこと
仕様をコンピュータ上で正しく反映した(反映した(した(誤りの無いりの位置付け無いい)プロ
グラム仕様をコンピュータ上で書くことく反映した(こと
バグをコンピュータ上で作りなさいり込むというミス(エラー)を犯さむというミス(エラー)をコンピュータ上で犯ささ
ないよう注意
分かりや管理を軽んじてはいけないすいプログラム仕様をコンピュータ上で書くことく反映した(こと
「自分がプログラミングの役割分かればよい」をコンピュータ上でという考え方は良くえ方は良くはプログラムの良くく反映した(
ない
他人でも分かるプログラム仕様でなければ保守ははプログラムの
無い理を軽んじてはいけない
(書くこといた本人でも半年後には理解不能なことに実行するはプログラムの理を軽んじてはいけない解不能なこと
(C) 2007-2022 Hirohisa AMAN
も)
4
プログラム仕様の位置付け書くことき方は良く・作りなさいり方は良く
1. 見やすく・分かりやすくや管理を軽んじてはいけないすく反映した(・分かりや管理を軽んじてはいけないすく反映した(
2. 間の世界違いを防ぐようにいをコンピュータ上で防ぐようにぐように実行する
3. シンプルな構造にな構造にに実行する
4. 環境に依存しないようにに実行する依存しないようにしないように実行する
5. コメント文を適切にをコンピュータ上で適切であるがに実行する
6. 変更しやすいようにしや管理を軽んじてはいけないすいように実行する
(C) 2007-2022 Hirohisa AMAN
5
(1)見やすく・分かりやすくや管理を軽んじてはいけないすく反映した(・分かりや管理を軽んじてはいけないすく反映した(
インデント(字下げ)げ)をコンピュータ上で付けけ,ブロックのの位置付け
始されるまりと終わりわりがプログラミングの役割視覚的なに実行する分かるように実行する
書くことき忘れ防止策としれ防ぐように止策としとし
て,
“ {” をコンピュータ上で書くこといたら
“}” も
書くことき,その位置付け間の世界に実行するコード
意図的なに実行する空行をコンピュータ上で
をコンピュータ上で
挿入れ,実行内容していく反映した(とよい
入れ,実行内容れ,実行内容を忠実に実行する
の位置付け切であるがり替わりわり
をコンピュータ上でアピールな構造に
sum = 0;
for ( i = 0; i < n; i++ ){
if ( a[i] > 0 ){
sum += a[i];
}
}
printf("%dn", sum);
(C) 2007-2022 Hirohisa AMAN
6
変数名には意味をもたせるに実行するはプログラムの意味をもたせるをコンピュータ上でもたせる
その位置付け変数がプログラミングの役割何を表しているのかをコンピュータ上で表しているのかしているの位置付けかがプログラミングの役割分かるよ
うな名には意味をもたせる前が望ましいがプログラミングの役割望ましいましい ただし,数行程度のプログラムでの位置付けプログラム仕様で
内容を忠実に実行するをコンピュータ上で見やすく・分かりやすくればすぐに実行する意味をもたせるがプログラミングの役割分かる
index, position, count場面ならばさほど気にしなくてもよいならばさほど気にしなくてもよい気にしなくてもよいに実行するしなく反映した(てもよい
あるいはプログラムの略して して idx, pos, cnt (例えば,スマートフォン用の) 前が望ましいページの変数 の位置付け変数 i など気にしなくてもよい
Yes/No をコンピュータ上で問う場合はう場合はプログラムの疑問う場合は形も使われるわれる
is_empty, hasNext
(例えば,スマートフォン用の)集合がプログラミングの役割空なら 1
さもなく反映した(ば 0
単語の区切りにはの位置付け区切であるがりに実行するはプログラムの
アンダースコア( _ )
またはプログラムの大文を適切に字をコンピュータ上で使われるうとよい
(例えば,スマートフォン用の)リストで次のノードがの位置付けノードがプログラミングの役割
存しないように在すれば すれば 1 さもなく反映した(ば 0
(C) 2007-2022 Hirohisa AMAN
7
変数名には意味をもたせる,関数名には意味をもたせるでの位置付け
スネークのケースとキャメルな構造にケース
スネークのケース( snake case )
アンダースコア( _ )で単語の区切りにはをコンピュータ上でつなげて書くことく反映した(
(例えば,スマートフォン用の) file_name, get_file_size C 言語の区切りにはの位置付け場合
スネークのケース
がプログラミングの役割多く使われるく反映した(使われるわれる
キャメルな構造にケース( camel case )
単語の区切りにはの位置付け切であるがれ目に大文字を使うに実行する大文を適切に字をコンピュータ上で使われるう
(例えば,スマートフォン用の) fileName, getFileSize
(C) 2007-2022 Hirohisa AMAN
8
関数名には意味をもたせるではプログラムの機の世界能と戻り値を意識するり値を意識するをコンピュータ上で意識するする
その位置付け関数がプログラミングの役割何を表しているのかをコンピュータ上でするの位置付けか,何を表しているのかをコンピュータ上で戻り値を意識するり値を意識するとす
るの位置付けかがプログラミングの役割分かるような名には意味をもたせる前が望ましいがプログラミングの役割望ましいましい
(例えば,スマートフォン用の)
int get_length (char str[ ]){void move_to (int x, int y){
・・・文を適切に字列の長さを調べるの位置付け長さを調べるさをコンピュータ上で調べるべる ・・・ (x,y) へ移動移動
}
}
void sort (int array[ ], int length){単語の区切りにはの位置付け区切であるがりに実行するはプログラムの
アンダースコア( _ )
・・・ array をコンピュータ上でソーティング
またはプログラムの大文を適切に字をコンピュータ上で使われるうとよい
}
(C) 2007-2022 Hirohisa AMAN
9
【演習1】 関数名には意味をもたせるをコンピュータ上で考え方は良くえよ
ヘルな構造にプをコンピュータ上で表しているのか示するする
void
()
うるう年( leap year )かど気にしなくてもよいうかをコンピュータ上で調べるべる
int
(int year)
配列の長さを調べるの位置付け内容を忠実に実行するをコンピュータ上で別の配列へコピーするの位置付け配列の長さを調べるへ移動コピーする
void
(int src[], int dest[], int length)
コピー元
(C) 2007-2022 Hirohisa AMAN
コピー先
長さを調べるさ
10
【演習1】 関数名には意味をもたせるをコンピュータ上で考え方は良くえよ ( 解答
例えば,スマートフォン用の )
ヘルな構造にプをコンピュータ上で表しているのか示するする
voidprint_help ( )
(別の配列へコピーする解)
printHelp
isLeapYear
copyArray
うるう年( leap year )かど気にしなくてもよいうかをコンピュータ上で調べるべる
int
is_leap_y (int year)
eararray )の位置付け内容を忠実に実行するをコンピュータ上で別の配列へコピーするの位置付け配列の長さを調べるへ移動コピー
配列の長さを調べる(
する
void copy_array
(int src[], int dest[], int length)
あるいはプログラムの array_copy
(C) 2007-2022 Hirohisa AMAN
11
(2)間の世界違いを防ぐようにいをコンピュータ上で防ぐようにぐように実行する
単文を適切にでも中だけで行われ,括弧を書くをコンピュータ上で書くことく反映した(
if ( x >
0 )
foo(x);
「ちょっと確に認しよう」でしよう」をコンピュータ上でで
ミス
if ( x > 0 )
if ( x > 0 )
printf("%d",x);
foo(x);
printf("%d",x);
foo(x);
}
変数の位置付け使われるい回しは避けるしはプログラムの避けるける
他人から,変数 x はプログラムの上でと下げ)で何を表しているのか
int x = 0;
か関係があるのでは?と勘違いさがプログラミングの役割あるの位置付けではプログラムの?と勘違いを防ぐようにいさ
・・・(xをコンピュータ上で使われる用の)
れる
x = 5;
・・・(xをコンピュータ上で別の配列へコピーするの位置付け目に大文字を使う的なで使われる用の)
(C) 2007-2022 Hirohisa AMAN
12
{
(3)シンプルな構造にな構造にに実行する
goto はプログラムの使われるわない
goto 文を適切にはプログラムの好きな位置にきな位置に実行する
ジの変数 ャンプできるの位置付けで便利
な気にしなくてもよいがプログラミングの役割するがプログラミングの役割,それはプログラムの
作りなさいっている途中だけで行われ,だけで
結果的なに実行するはプログラムの複雑になるに実行するなる
だけである
この位置付け種のプログラムをの位置付けプログラム仕様をコンピュータ上で
「スパゲティプログラム仕様」をコンピュータ上で
といい,ダメなプログラム仕様の位置付け
代名には意味をもたせる詞となっているとなっている
(C) 2007-2022 Hirohisa AMAN
13
条件分岐が多くならないようにがプログラミングの役割多く使われるく反映した(ならないように実行する
if, for, while 文を適切にがプログラミングの役割多く使われるく反映した(なればなるほど気にしなくてもよい,
理を軽んじてはいけない解しに実行するく反映した(く反映した(間の世界違いを防ぐようにいがプログラミングの役割増える
える
より良くいプログラム仕様(動きはプログラムの同じ)じ)
sum = 0;
scanf("%d", &x);
do{
if ( x > 0 ){
sum += x;
scanf("%d", &x);
}
} while( x > 0 );
sum = 0;
scanf("%d", &x);
while( x > 0 ){
sum += x;
scanf("%d", &x);
}
試行錯誤りの無いの位置付け上で,左のようなプログラの位置付けようなプログラ
ム仕様に実行する
なったの位置付けかもしれないがプログラミングの役割,必要以上で
に実行する
複雑になる化してしまっているしてしまっている
(C) 2007-2022 Hirohisa AMAN
14
サイクのロマティックの数( cyclomatic numb
er )
フローチャートの位置付け
中だけで行われ,の位置付け独立たなしたルな構造にー
プの位置付け個数
プログラム仕様構造にの位置付け複雑になるさ
をコンピュータ上で評価する尺度としてする尺度のプログラムでとして
知られているられている
この位置付け数がプログラミングの役割 10 をコンピュータ上で超えると
保守は性がかなり悪いがプログラミングの役割かなり悪いい
という研究報告があるがプログラミングの役割ある
(C) 2007-2022 Hirohisa AMAN
15
(4)環境に依存しないようにに実行する依存しないようにしないように実行する
計算機の世界環境に依存しないようにの位置付け違いを防ぐようにいがプログラミングの役割影響しないようにするしないように実行するする
C 言語の区切りにはの位置付け場合,変数に実行する割り当てられるバイトてられるバイト
数がプログラミングの役割処理を軽んじてはいけない系によって異なることがあるに実行するよって異なることがあるなることがプログラミングの役割ある (例えば,スマートフォン用の
えば, int 型が がプログラミングの役割 2 バイトだったり 4 バイト
だったり)
sizeof(int) と書くこといたりするの位置付けはプログラムのその位置付けためで
ある
OS がプログラミングの役割違いを防ぐようにうと #include include で読み込むヘッダみ込むヘッダ込むというミス(エラー)を犯さむヘッダ
少し専門的だが し専門的なだがプログラミングの役割 #include ifdef 等を使って切り替えてをコンピュータ上で使われるって切であるがり替わりえて
(ライブラリ)も違いを防ぐようにうことがプログラミングの役割
ある
いる
(C) 2007-2022 Hirohisa AMAN
16
(5)コメント文を適切にはプログラムの適切であるがに実行する
意味をもたせるの位置付けあるかたまりごとに実行する機の世界能説明をコンピュータ上でコメ
ントとして入れ,実行内容れるの位置付けがプログラミングの役割望ましいましい
ただし,単に実行する書くことけばよいというわけではプログラムのな
い
いちいちコメントをコンピュータ上で書くことかなければ理を軽んじてはいけない解できないよ
うなプログラム仕様もまた問う場合は題である
関数名には意味をもたせるや管理を軽んじてはいけない変数名には意味をもたせるをコンピュータ上で分かりや管理を軽んじてはいけないすく反映した(して,プログ
ラム仕様をコンピュータ上でシンプルな構造にな構造にに実行するしておけばそれだけ
で十分な場合も多く使われるい
(C) 2007-2022 Hirohisa AMAN
17
(6)変更しやすいようにしや管理を軽んじてはいけないすいように実行する
ハードコーディングはプログラムのや管理を軽んじてはいけないめよう
ソースコードの位置付け中だけで行われ,で数字や管理を軽んじてはいけない文を適切に字列の長さを調べるをコンピュータ上でその位置付けまま
書くことき込むというミス(エラー)を犯さむことをコンピュータ上でハードコーディングという
先に実行する記号で定義したり,読み込んだりで定義したり,読み込んだりしたり,読み込むヘッダみ込むヘッダ込むというミス(エラー)を犯さん ひろひさだりすべき
(例えば,スマートフォン用の)データ上で数や管理を軽んじてはいけないファイルな構造に名には意味をもたせる
for ( i = 0; i < 256; i++ ){FILE* fp = fopen(“foo.txt”, “r”);
for ( j = 0; j < 256; j++ ){
実行時にファイル名を読み込んだに実行するファイルな構造に名には意味をもたせるをコンピュータ上で読み込むヘッダみ込むヘッダ込むというミス(エラー)を犯さん ひろひさだ
・・・・・・
SIZE
といったマクのロに実行する代
える
り,
マクのロで指定したりする
(C) 2007-2022 Hirohisa AMAN
18
【演習2】 ハードコーディングに実行する
ついて
例えば,スマートフォン用のえば,配列の長さを調べるの位置付け長さを調べるさや管理を軽んじてはいけないデータ上でファイルな構造にの位置付け名には意味をもたせる
前が望ましいはプログラムの次のノードがの位置付けように実行するマクのロで与えることが推奨えることがプログラミングの役割推奨
される
#define SIZE 256
#define DATA_FILE
"foo.txt"
こうすることの位置付け利点(メリット)をコンピュータ上で考え方は良くえよ
(C) 2007-2022 Hirohisa AMAN
19
【演習2】 ハードコーディングに実行するつい
て
(解答例えば,スマートフォン用の)
① 変更しやすいようにに実行する強いい
配列の長さを調べるの位置付け長さを調べるさをコンピュータ上で変更しやすいようにする場合, 256 をコンピュータ上で書くことき換えれえれ
ば OK (いちいち置換えれしているとミスをコンピュータ上で誘発)
もしも「 SIZE-1 」をコンピュータ上での位置付け
意味をもたせるで「 255 」をコンピュータ上でがプログラミングの役割書くこと
② 意味をもたせるをコンピュータ上で把握しやすいしや管理を軽んじてはいけないすい
かれていたら変更しやすいように漏れれ
に実行する
数字や管理を軽んじてはいけない文を適切に字列の長さを調べるだけではプログラムのその位置付け意味をもたせるをコンピュータ上で誤りの無い解される場合
もある(同じ)じ「 256 」をコンピュータ上ででも「あっちとこっちはプログラムの
別の配列へコピーするの位置付け意味をもたせる」をコンピュータ上でということもありえる)
③ 設定管理を軽んじてはいけないをコンピュータ上でや管理を軽んじてはいけないりや管理を軽んじてはいけないすい
固有の設定を一ヶ所(プログラムの先頭部分)にの位置付け設定をコンピュータ上で一ヶ所(プログラムの先頭部分)にヶ所(プログラムの先頭部分)に所(プログラム仕様の位置付け先頭の中だけで行われ,部分)に実行する
まとめることがプログラミングの役割できるため,変更しやすいように・確に認しよう」でがプログラミングの役割容を忠実に実行する易
(C) 2007-2022 Hirohisa AMAN
20