質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • Java

    10446questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

リファクタ,テストコードの作成,バグ修正の方法を教えてください

受付中

回答 1

投稿 2017/11/28 22:11 ・編集 2017/11/28 22:39

  • 評価
  • クリップ 1
  • VIEW 124

emachan

score 0

【概要】 
文字列型の2つ引数を、四則演算し結果を表示する四つメソッドのテストコードを作成し、 
不具合を修正する。 

【質問】 
(1)プログラムコードをリファクタしてテストできるコードに修正したい。
(2)テストコードを作成したい。 
(3)プログラムコードのバグを修正したい。 

【成果物】 
1)テストコードが知りたいです。 
2)テストコードで検出した不具合リストを作成したいです。 
3)修正した製品コード 

【プログラムコードの仕様】 
■共通仕様 
入力値、計算結果はともに正の整数(0を含む)とする。
それ以外の場合は、結果として-1を表示する。
※引数、計算結果が計算不能、0未満、小数を含む場合は、-1を表示する。

public class keisan {

/**

  • @param args
    */ 

public static void main(String[] args) {
tasizan("3","3");
hikizan("3","3");
kakezan("3","3");
warizan("3","3");

}

private static int getIntVal(String val){
int res;
try {
res = Integer.parseInt(val);
} catch (NumberFormatException e) {
return 0;
}

if(res<0){
res = -1;
}

return res;
}

//足し算
public static void tasizan(String val1, String val2){
int i1,i2;
i1 = getIntVal(val1);
i2 = getIntVal(val2);

System.out.println("足し算の結果=" +(i1+i2));
}

//引き算
public static void hikizan(String val1, String val2){
int i1,i2;
i1 = getIntVal(val1);
i2 = getIntVal(val2);

System.out.println("引き算の結果=" +(i1-i2));
}

//掛け算
public static void kakezan(String val1, String val2){
int i1,i2,res;
i1 = getIntVal(val1);
i2 = getIntVal(val2);
res =0;
for(int i= 0; i<i2; i++){
res = res + i1;
}
System.out.println("掛け算の結果=" +res);
}

//割り算
public static void warizan(String val1, String val2){
int i1,i2, res;
i1 = getIntVal(val1);
i2 = getIntVal(val2);
try{
res = i1/i2;
}catch(ArithmeticException e){
res= 0;
}

System.out.println("割算の結果=" +res);
}

}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kosuke_Shibuya

    2017/11/28 22:46

    質問するときのヒント https://teratail.com/help/question-tips

    キャンセル

  • emachan

    2017/11/28 22:59

    修正しました

    キャンセル

  • Kosuke_Shibuya

    2017/11/28 23:29

    奨していない質問 https://teratail.com/help/avoid-asking

    キャンセル

  • 退会済みユーザー

    2017/11/29 10:15

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

0

(1)プログラムコードをリファクタしてテストできるコードに修正したい。

無理です。
リファクタリングとは、

プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである

提示されたプログラムでの一番の問題は、戻り値がない(void)ことです。
Junitなどを使う場合、期待値と実測値の比較でテスト合否を判定するため、
現状のコードではテストフレームワークを採用することはできません。
追記:標準出力のテスト方法あったのでテスト可能でした。知識不足ですね・・・
とはいえ、テストすること自体は可能です。(お望みの回答にはなっていないと思いますが)

(2)テストコードを作成したい。 

main メソッドの中で書かれているのでは?

何をテストしたいかは、回答者にはわかりません。
テストコードの前にテスト仕様書を作成してみてください。
※テスト仕様書については、ググるか身近な人に聞いてみるとよいフォーマットが手に入るかと

今の例だと

実行方法:tasizan("3","3") を呼び出す。
期待される結果:"足し算の結果=6"と表示されること。
実際の結果:ご自分で試してください
判定:ご自分で試してください

みたいな感じでしょうか。

(3)プログラムコードのバグを修正したい。 

はい。がんばって修正してください。きっとできます!!
テスト結果でNGがでたものにたいして、期待される結果になるように修正すればよいです。

追記:
標準出力のテスト方法について、teratail内にありました。
https://teratail.com/questions/3694

投稿 2017/11/29 12:47

編集 2017/11/29 18:30

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/29 18:04

    ありがとうございます。
    voidの部分を修正することで、テストできるコードに修正できますか?

    キャンセル

  • 2017/11/29 18:41 編集

    テストできるかどうかは、質問者さん次第なので・・・きっとできます。としか答えられないです。
    あと、標準出力の確認方法ありましたので、voidのままでもjunitでのテスト可能です。

    キャンセル

  • 2017/11/29 19:54 編集

    テストできるコードに修正とあったので、どこかを修正すべきなんですが、むずかしいです。。。

    キャンセル

  • 2017/11/29 23:10

    足し算の部分のみですが
    public static void tasizan(String val1, String val2){

    public int tasizan(String val1, String val2){
    にして
    public void doTesttasizan2(){
    assertThat(keisan.tasizan("2", "3"),is(5));
    }
    を行えるようにしてみました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

  • 受付中

    【java】コマンドライン引数に指定された値の内、floatとして扱える値を判別する

    Javaで、コマンドライン引数に指定された全ての値の中から、floatとして扱える値の合計を求めたいです。 その為、たとえば下記の場合ですと、 public class Hog

  • 解決済

    Javaで住所から緯度経度を取得するために、ライブラリを入れたい」

    お世話になります。 Javaを使って、住所から緯度経度を取得したいです。 調べてみるとGoogleが公式でライブラリを公開しているらしいのでこれを利用しようと思っていますが、ライ

  • 解決済

    [JUnit] 戻り値のないvoidメソッドはテストする必要はあるのか?

    現在JUnitについて勉強しています。 質問があるのですが、 結論から言うと、 戻り値のないvoidメソッドはテストする必要はあるのでしょうか? もしする必要があればどのような

  • 解決済

    JAVAで、substringとequalsの使い方で例外発生

    JAVAで、以下の★の行で、例外が発生します。 原因はなにでしょうか?(例外のメッセージは、nullなので、原因がわかりません)。 try {         String st

  • 解決済

    エラー解決

    package otamesi; public class Main { public static void main(String[]args){          

  • 解決済

    Java if文を多様しないで組みたい

    現在Javaにて名前と科目を入力したら登録した点数がでるプログラムを組んでいます。 エラーは無いのですがif文を多様してしまっているのでif文をあまり使わずに作りたいです。

  • 受付中

    ENTER実行処理

    Enterキーを押して、次の処理に移るCUIを作りたいのですが、思うようにいきません。勇者の攻撃のあとと、HP、MP表示のあとEnter押すまで次の処理しないようにしたのですが、教

  • 解決済

    for文を使用したバブルソート

    前提・実現したいこと 以下の条件を持つプログラムを作成しようとしています。 1.『end』が入力されるまで入力値を受け付ける 2.『end』が入力された後、入力値をバブル

同じタグがついた質問を見る

  • Java

    10446questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。