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-14. プログラムのテスト、アサーショ ン、例外処理 URL: https://www.kkaneko.jp/cc/pi/index.html 金子邦彦 1

2.

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

3.

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

4.

j14-1. プログラムの 設計レシピ Java を基礎から学びた い人へ(入門者向け) 金子邦彦 4

5.

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

6.

オンライン開発環境 GDBonline • プログラミングを行える Web サービス https://www.onlinegdb.com • ウェブブラウザを使う • たくさんの言語を扱うことができる Python3, Java, C/C++, C#, JavaScript, R, アセンブリ言語,SQL など オンラインなので、「秘密にしたいプログラム」を 扱うには十分な注意が必要 6

7.

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

8.

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

9.

実行ボタン エディタ画面 プログラムを 書き換えること ができる 9

10.

① プログラム 10

11.

② 実行し結果を確認 11

12.

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

13.

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

14.

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

15.

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

16.

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

17.

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

18.

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

19.

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

20.

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

21.

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

22.

j14-2. 種々のエラーと プログラムのテスト Java を基礎から学びた い人へ(入門者向け) 金子邦彦 22

23.

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

24.

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

25.

実行エラーを含むプログラム 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()); } } 25

26.

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

27.

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

28.

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

29.

j14-3. アサーション Java を基礎から学びた い人へ(入門者向け) 金子邦彦 29

30.

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

31.

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

32.

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

33.

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

34.

j14-4. 例外処理 Java を基礎から学びた い人へ(入門者向け) 金子邦彦 34

35.

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

36.

例外の 発生 例外処理 36

37.

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

38.

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

39.

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

40.

14-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()); } } 40

41.

14-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()); } } 41