pi-14. プログラムのテスト、アサーション、例外処理

>100 Views

January 26, 22

スライド概要

Java の基本
URL: https://www.kkaneko.jp/cc/pi/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

pi-16. プログラムのテ スト,アサーション, 例外処理 トピックス:プログラムの設計レシピ,種々のエ ラー,プログラムのテスト,アサーション,例外 処理 URL: https://www.kkaneko.jp/cc/pi/index.html (Java の基本) 金子邦彦 1

2.

今回の内容 • プログラム設計レシピでは,プログラムの作成を,① 分析,②仕様,③例,④作成,⑤テストの5段階に分 ける • 「必ず成立しているはずのこと」を書いたものがア サーションである.Javaでは次のように書く.アサー ションは論理的エラーの発見に役立つ • 「x >= 0」がアサーション, • error, x < 0 in area() がメッセージ • 例外処理とは,不測の事態における処理 2

3.

アウトライン 番号 項目 復習 16-1 プログラムの設計レシピ 16-2 種々のエラーとプログラムのテスト 16-3 アサーション 16-4 例外処理 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 3

4.

Java などのプログラミング言語の体 験,演習ができるオンラインサービス GDB online http://www.pythontutor.com/ オンラインなので、「秘密にしたいプログラム」を 扱うには十分な注意が必要 4

5.

GDB online で Java を動かす手順 ① ウェブブラウザを起動する ② 次の URL を開く https://www.onlinegdb.com 5

6.

③ 「Language」のところで,「Java」を選ぶ 6

7.

④ ソースコードを入れる ⑤ 実行.実行結果を確認 「Run」をクリック. 7

8.

16-1. プログラムの設計レシピ 8

9.

リングの面積 • リング Ring クラスのオブジェクト 属性は,外径 r2, 内径 r1 r1 r2 • 面積 area メソッド (this.r2 * this.r2 - this.r1 * this.r1) * 3.14 9

10.

演習 資料:11 ~ 12 【トピックス】 • プログラムの設計レシピ 10

11.

① プログラム 11

12.

② 実行し結果を確認 12

13.

プログラム設計レシピ プログラムを設計するときに,考えておいた方がよ いこと,実行した方がよいことをリストアップした もの 13

14.

プログラム設計レシピ ① 分析 ② 仕様 プログラムの設計段階で考えた方がよいこと ③例 ④ テスト プログラムが設計通りに動くかを確かめる 14

15.

リングの面積 • リング Ring クラスのオブジェクト 属性は,外径 r2, 内径 r1 r1 r2 • 面積 area メソッド 15

16.

① 分析 メソッド area • その入力 なし ・・・オブジェクトの属性 だけで足りる • その出力 数値1つ ・・・求まった面積 ※ 必要なメソッドそれぞれについて,入力と出力を 考える 16

17.

② 仕様 メソッド area r1 を内径,r2 を外径とするリングの面積 r1 r2 メソッドの性能,機能の条件を考える 17

18.

③例 メソッド area r1 = 3,r2 = 5 のとき,50.24 が求まる r1 r2 どのようなときに,どのような出力が出てほしいか 18

19.

「③ 例」があることの効果 • 例があれば,プログラムが書きやすくなる • 例があれば,他の人がプログラムを見たとき,理 解しやすくなる • 例は,テストの実施に利用 19

20.

④ テスト この通りの結果が得られることを 確かめる Ring a = new Ring(3, 5); 20

21.

プログラム設計レシピ ① 分析 名前付け,入力と出力を明らかに ② 仕様 性能機能の条件 ③例 どのようなときに,どのような出力か ④ テスト プログラムが設計通りに動くか確認 21

22.

プログラム設計レシピ ① 分析 名前付け,入力と出力を明らかに 名前:area,入力:なし,出力:数値1つ ② 仕様 性能機能の条件 r1 を内径,r2 を外径とするリングの面積 ③例 どのようなときに,どのような出力か r1 = 3,r2 = 5 のとき,50.24 が求まる ④ テスト プログラムが設計通りに動くか テスト用プログラム 22

23.

16-2. 種々のエラーとプログラム のテスト 23

24.

エラーの種類 ① 構文エラー(Syntax Errors) • 言語の書式に合っていない場合 ② 実行エラー(Run-time Errors) • プログラムが出力を出さない場合 ③ 論理的エラー(Logical Errors) • 出てきた出力が,仕様(性能機能の条件)に合致 しない場合 24

25.

① 構文エラー スペルミスで, プログラムが 実行できない 25

26.

実行エラーを含むプログラム class Ring { double r1; double r2; public Ring(double r1, double r2) { this.r1 = r1; this.r2 = r2; } public double area() { double x; x = (this.r2 * this.r2 - this.r1 * this.r1) / 0; return x; } } public class Main { public static void main(String[] args) { Ring a = new Ring(3, 5); System.out.println(a.area()); } } 26

27.

③ 論理的エラー スペルミスで, おかしな答え が出ている 27

28.

エラーの種類ごとに発見方法が異なる ① 構文エラー(Syntax Errors) • 言語の書式に合っていない場合 プログラムを実行させようとすると,実行できず,エ ラーメッセージが出る ② 実行エラー(Run-time Errors) • プログラムが出力を出さない場合 プログラムを実際に実行させる.そしてエラーメッ セージが出たり,プログラムが「止まっている」よう に見えたりする ③ 論理的エラー(Logical Errors) • 出てきた出力が,仕様に合致しない場合 プログラムを実際に実行させる.そしてテストする 28

29.

分野の知識(Domain Knowledge) • プログラムを定義するには,プログラムをし ようとする領域の知識(分野の知識)が必要. • 音楽,交通工学,生物学,芸術 ・・・ など プログラムしたい領域の用語,知識の理解が必要 • 「対象分野に応じてプログラム言語自体を発明 する,設計する」という考え方も(興味のある 人は「Domain Specific Language」という言葉 で調べてみること) • コンピュータ言語のみにとらわれず,対象分野 のしっかりとした基礎の理解が不可欠. 29

30.

16-3. アサーション 30

31.

アサーション • 「必ず成立しているはずのこと」を書いたものが アサーションである.Javaでは次のように書く. アサーションは論理的エラーの発見に役立つ • 「x >= 0」がアサーション, • error, x < 0 in area() がメッセージ 31

32.

アサーションをエラーの発見に役立てる 間違い(エラー)を含む式 実行結果の例 アサーションがない場合, 論理的エラーを見逃しそう 32

33.

アサーションをエラーの発見に役立てる assert x >= 0 : "error, x < 0 in area()"; 実行結果の例 アサーションの機能により エラーメッセージが出る 33

34.

• アサーションの機能は Java Tutor, GDB online, Paiza.io で動かすのが難しいので,前ページの実 演のみ(演習なし) 34

35.

16-4. 例外処理 35

36.

例外処理 • 例外処理とは,不測の事態における処理 不測の事態(例外)の例 • まさか「ファイルが無い」とは • まさか「プログラム中にバグがある」とは • まさか「半径が負の数に設定されている」とは • まさか「アサーションが成立しない」とは 例外処理の例 • 「ファイルを準備するように」とメッセージを出して処理 を再開 • 「正しい値を設定するように」とメッセージを出して処理 を終了 36

37.

例外の 発生 例外処理 37

38.

Java での例外処理 • throws Exception メソッド内で例外が発生する可能性があること • throw new Exception 例外の発生 • try { … } catch( … ) { … } 例外処理 38

39.

throws Exception 「area メソッド内で,例外の発生があり える」と宣言(コンピュータに教える) r2 < r1 は想定外なので, 例外を発生させる 例外処理 39

40.

Java での例外処理の書き方 try { 処理 } catch(Exception e) { 例外処理 } <処理>で例外が発生したときの 例外処理ができるようになる ※ 「Exception」のところは, 例外の種類を細かく指定することも可能 40

41.

16-1 class Ring { double r1; double r2; public Ring(double r1, double r2) { this.r1 = r1; this.r2 = r2; } public double area() { double x; x = (this.r2 * this.r2 - this.r1 * this.r1) * 3.14; return x; } } public class Main { public static void main(String[] args) { Ring a = new Ring(3, 5); System.out.println(a.area()); } } 41

42.

16-2 実行エラーを含むプログラム class Ring { double r1; double r2; public Ring(double r1, double r2) { this.r1 = r1; this.r2 = r2; } public double area() { double x; x = (this.r2 * this.r2 - this.r1 * this.r1) / 0; return x; } } public class Main { public static void main(String[] args) { Ring a = new Ring(3, 5); System.out.println(a.area()); } } 42

43.

関連ページ • Java プログラミング入門 GDB online を使用 https://www.kkaneko.jp/cc/ji/index.html • Java の基本 Java Tutor, GDB online を使用 https://www.kkaneko.jp/cc/pi/index.html • Java プログラム例 https://www.kkaneko.jp/pro/java/index.html 43