メソッドのまとめ

Similar documents
プログラミング入門1

プログラミング入門1

プログラミング入門1

プログラミング入門1

プログラミング入門1

プログラミング入門1

プログラミング入門1

メソッドのまとめ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

プログラミング基礎I(再)

プログラミングA

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

プログラムの基本構成

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Java講座

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

JavaプログラミングⅠ

Javaプログラムの実行手順

Microsoft PowerPoint - prog03.ppt

JavaプログラミングⅠ

2

JavaプログラミングⅠ

デジタル表現論・第6回

Program Design (プログラム設計)

GEC-Java

Prog1_6th

K227 Java 2

スライド 1

Microsoft Word - no11.docx

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

オブジェクト指向プログラミング・同演習 5月21日演習課題


Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

ガイダンス

JavaプログラミングⅠ

マークアップ言語

PowerPoint プレゼンテーション

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

JavaプログラミングⅠ

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

情報処理Ⅰ

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

デジタル表現論・第4回

Microsoft PowerPoint - prog08.ppt

2

Prog2_10th

JavaプログラミングⅠ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Prog1_3rd

Java言語 第1回

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Prog1_10th

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

問題1 以下に示すプログラムは、次の処理をするプログラムである

JavaプログラミングⅠ

情報実習Ⅱ

Prog1_15th

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog04.ppt

Prog2_9th

プログラミング実習I

Microsoft PowerPoint ppt

マークアップ言語

2

Microsoft Word - java a.doc

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Microsoft Word - CompA-Ex doc

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog07.ppt

PowerPoint Presentation

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Programming-C-9.key

Microsoft Word - problem3.doc

PowerPoint Presentation

Cプログラミング1(再) 第2回

基本情報STEP UP演習Java対策

メディプロ1 Javaプログラミング補足資料.ppt

Microsoft PowerPoint - 10.ppt [互換モード]

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

Javaの作成の前に

JavaプログラミングⅠ

Javaによるアルゴリズムとデータ構造

Microsoft PowerPoint - 計算機言語 第7回.ppt

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

r1.dvi

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

文字列操作と正規表現

人工知能入門

プログラミングA

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Transcription:

メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/

授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか 戻り値はどのように利用しますか 変数のスコープとは何ですか 再帰呼び出しはどのように実行されますか Java 1 第 10 回 2

復習 : 階乗 考え方 factorial(n) = 1 N = 0 のとき factorial(n) = N * factorial(n-1) それ以外のとき public static int factorial(int n) { // factorial(n) = 1 (N = 0 のとき ) if (n == 0) { return 1; // factorial(n) = n * factorial(n-1) ( それ以外のとき ) else { return n * factorial(n - 1); Java 1 第 10 回 3

factorial(4)( 以下 f(4) と略記する ) を起動する と このような起動の連鎖が起こる f(4) 4 f(3) 3 f(2) 2 f(1) 1 f(0) Java 1 第 10 回 4

factorial(0) は即座に処理を完了して 0 を呼び出し側 f(1) に返す f(4) f(4) 4 f(3) 4 f(3) 3 f(2) 3 f(2) 2 f(1) 2 f(1) 1 f(0) 1 1 Java 1 第 10 回 5

factorial(1) は掛け算を実行し その 結果 1 を呼び出し側 f(2) に返す f(4) 4 f(3) 3 f(2) f(4) 4 f(3) 3 f(2) 2 f(1) 2 1 1 1 Java 1 第 10 回 6

factorial(2) は掛け算を実行し その 結果 2 を呼び出し側 f(3) に返す f(4) f(4) 4 f(3) 4 f(3) 3 f(2) 3 2 2 1 Java 1 第 10 回 7

factorial(3) は掛け算を実行し その 結果 6 を呼び出し側 f(4) に返す f(4) f(4) 4 f(3) 4 6 3 2 Java 1 第 10 回 8

factorial(4) は掛け算を実行し その 結果 24 を呼び出し側に返す f(4) 24 4 6 Java 1 第 10 回 9

再帰呼び出しは起動インスタンスたちの見事なチームプレイで最終結果を出す 個々の起動インスタンスの責任は限定されている factorial メソッドの個々の起動インスタンスの責任 自分が末端の起動インスタンス (n==0) ならば 即座に処理を完了して 1 を返す 自分が末端でなければ 下位の起動インスタンスから返される結果を待って その結果に n を掛けた結果を上位の起動インスタンスに返す Java 1 第 10 回 10

今回のテーマ 擬似コード (pseudocode) 自然言語と通常のプログラミング言語を混ぜたようなコード ( プログラム ) プログラムのテスト テストの種類 テスト技法 Java 1 第 10 回 11

擬似コード (pseudocode) 擬似コードとは 自然言語と通常のプログラミング言語を混ぜたようなコード ( プログラム ) アルゴリズム辞典などでよく使われる 目的は プログラムの処理や流れを簡単に記述するものである アイデアを整理したり他人に伝えるために用いる 望ましい性質 どのプログラミング言語にも書き直しがしやすい Java 1 第 10 回 12

擬似コードいろいろ 入力された 2 つの値のうち 大きいものを返す // 擬似コード max-of (a, b) if a のほうが b より大きい a を返す else b を返す // 擬似コード (2) - ほとんど Java maxof(a,b) { if (a > b) return a else return b // 擬似コード (3) - ほとんど自然言語大きいものを返すメソッド入力 : a, b もし (a のほうが b より大きい ) ならば結果は a そうでなければ結果は b Java 1 第 10 回 13

Java での実現 入力された 2 つの値のうち 大きいものを返す // 擬似コード max-of (a, b) if a のほうが b より大きい a を返す else b を返す // プログラミング言語 (Java) public class Max { public static int maxof(int a, int b) { if (a > b) return a; else return b; Java 1 第 10 回 14

擬似コードの基本 コンピュータが理解できるプログラム で表現することを目標にするのではなく 人間が理解できる作業手順 で表現することを目標とする 一般的には特定のプログラミング言語にとらわれずに書く Java での実現を目的としているなら Java 風でもよい 処理手順を中心に考えたコードを作成する 各プログラミング言語に依存する 変数の型 ( 整数や実数など ) については考えない Java では int 型の値に対して割り算を行うと 小数点以下が切り捨てられる 切り捨て を行うことがそのプログラムの中で必須である場合 それは擬似コードの中で明示的に書いておく Java 1 第 10 回 15

擬似コードの TIPS BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int input1 = Integer.parseInt(); int input2 = Double.parseDouble(); あまりに Java 的 擬似コードではこれくらいでよい input1 = 入力された値 ( 整数 ) input2 = 入力された値 ( 実数 ) Java 1 第 10 回 16

擬似コードの TIPS System.out.println(" 文字列 "); あまりに Java 的 擬似コードではこれくらいでよい print " 文字列 " Java 1 第 10 回 17

擬似コードの基本事項を適用してみる コンソールに入力された値の絶対値を表示する 擬似コード input = 入力された値 print( input ) Java での実現 package j1.lesson10; import java.io.*; public class Absolute { public static void main(string[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int input = Integer.parseInt(reader.readLine()); System.out.println(Math.abs(input)); Java 1 第 10 回 18

擬似コードの作成の大まかな手順 1. 問題を分析する 2. 問題を解決する手順を考える 3. 概略レベルの擬似コードを作成する 4. 問題を解決する手順に名前をつける 5. 問題を解決する手順を詳細化する 6. 詳細レベルの擬似コードを作成する Java 1 第 10 回 19

擬似コード作成の留意点 処理を正確に 詳細に説明すること 特定のプログラミング言語に依存しない ただし 分岐 (if-else) や繰り返し (for, while) などはプログラミング言語の文法を使うことが多い プログラムする方法 ( 実装手段 ) ではなく プログラムにしたいこと ( 目的 ) を中心に考える 何らかのプログラミング言語を少し理解しているだけで読めるように書く Java 1 第 10 回 20

プログラムのテスト 機能テスト プログラム全体に対して一連の操作を行い プログラム全体が正しく動いているかテスト プログラムが要求された仕様に沿って作られているかチェックすることができる 単体テスト 各メソッドをいくつかのパラメータを与えて起動し それぞれが正しく動いているかテスト 各メソッドが要求された仕様に沿って作られているかチェックすることができる 単体テストと機能テスト 一般的に 単体テスト 機能テストの順に行う まずプログラムの部分部分が正しく作成できているかチェック このチェックの後 機能テストでエラーを検出すると それぞれの部分を結合した部分にエラーが含まれている可能性が高いということになる テストケース 実施する処理の内容 入力データ 期待する結果 をセットにしたもの Java 1 第 10 回 21

テストケースの例 public static int square(int x) { return x * x; 実施する処理の内容 入力データ 期待する結果 square(int) を実行 -10 100 square(int) を実行 -1 1 square(int) を実行 0 0 square(int) を実行 1 1 square(int) を実行 5 25 square(int) を実行 20 400 Java 1 第 10 回 22

テスト技法同値分割法 同じ処理をする範囲 は入力値の同値クラス public static int equiv(int n) { if (0 <= n && n <= 6) { return 120; else if (7 <= n && n <= 64) { return 200; else if (65 <= n) { return 120; else { return -1; 範囲 処理 ~ -1-1 を返す 0 ~ 6 120 を返す 7 ~ 64 200 を返す 65 ~ 120 を返す 各同値クラスから入力値を 1 つずつ選んでテストケースをつくる Java 1 第 10 回 23

テスト技法境界値分析法 同値クラスの境界値にバグが潜んでいることが多い 境界値と中間値 ( 同値クラス内でちょうど真ん中の値 ) をテストしてやるのが普通である ただし 境界に上限や下限がない場合は一般的な値を用いる 同値クラス 境界値 ~ -1-1 -10 0 ~ 6 0 と 6 3 7 ~ 64 7 と 64 35 65 ~ 65 75 中間値 ( または一般的な値 ) Java 1 第 10 回 24

分岐のあるプログラムのテスト全ての分岐を網羅するテストを行うことが望ましい public static int branch(int a, int b) { int sign; if (a == 0) { return 0; // (1) else if (a > 0) { sign = 1; // (2) else { sign = -1; // (3) if (b == 0) { return a; // (4) else { return sign * b; // (5) (1) を実行 (2) を実行した後に (4) を実行 (2) を実行した後に (5) を実行 (3) を実行した後に (4) を実行 (3) を実行した後に (5) を実行 最小限のテスト branch(0, 0) branch(1, 0) branch(1, 1) branch(-1, 0) branch(-1, 1) Java 1 第 10 回 25

ループのあるプログラムのテスト全ての分岐を網羅するテストを行うことが望ましい 繰り返し回数が 0 回になる ( 一度も繰り返さない ) ようなパターン 繰り返し回数が 1 回になる ( 一度だけ実行する ) ようなパターン よく使用されると考えられる回数で繰り返すようなパターン 想定した繰り返し回数の最大値になる ( できる限り繰り返す ) ようなパターン 想定した繰り返し回数の最大値 - 1 になる ( できる限り繰り返す -1) ようなパターン 想定した繰り返し回数の最大値 + 1 になる ( できる限り繰り返す + 1) ようなパターン public static int sum(int n) { int total = 0; for (int i = 1; i <= n; i++) { total += i; return total; このような場合 引数に 0, 1, 10, 100000 などの値を入れてやるとよい Java 1 第 10 回 26

一緒にやってみよう 今回の演習で使うテストドライバをいつものように指示通り正確にインストールする テストドライバの導入に成功すると プロジェクト java20xx の中の test というフォルダに j1.lesson10.xml という名前のファイルが作成される このファイルには今週使用するテスト一式が記述されている j1.lesson10 というパッケージを作成する 演習資料にある擬似コード テストの技法に関する例を手順通りに実行せよ Java 1 第 10 回 27

課題 1004 のヒント main m, n の値をプロンプト付で入力 power を m, n を引数にして呼び出し 結果を適切に表示する power(m, n) if n が 0 1 をリターン if n が負 power を m, -n ( 正 ) を引数にして呼び出し 結果の逆数をリターン // 1/m を -n 乗すると考えても同じ power を m, n/2 を引数にして呼び出し 結果を変数 sub に代入 if n が偶数 sub * sub をリターン else // n が奇数 m * sub * sub をリターン Java 1 第 10 回 28