Laman

Sabtu, 18 Oktober 2014

Pengujian Class Math Pada Java

Kali ini saya akan membahas mengenai pengujian fungsi class math pada Java. Apa itu class math? Class math merupakan class yang disediakan oleh Java untuk menghitung perhitungan dasar seperi menghitung nilai Sinus, Sinus, cosinus, tangen, absolut, log, dan sebagainya. Tujuan pengujian sendiri adalah untuk menghindari peluang terjadinya kesalahan pada program yang dapat menyebabkan kerugian, selain itu pengujian juga berfungsi untuk memahami bagaimana seharusnya program digunakan. Perhatikan sintaks di bawah ini, sintaks ini yang digunakan untuk menguji fungsi dari class math.


/*
  * MathExploreToy.java
  *
  * Created on October 15, 2014, 2:02 PM
  */

 public class MathExploreToy {

/** Creates a new instance of MathExploreToy */

public MathExploreToy() {
}

static void test() {
testE();
testPI();
testAbs();
}

static void betterTest(){

testIntAbs();
}

static void testE() {
System.out.println ("Testing untuk Math.E");
System.out.println ("Math.E = "+Math.E);
System.out.println (" ");
}

static void testPI() {

System.out.println ("Testing untuk Math.PI");
System.out.println ("Math.PI = "+Math.PI);
System.out.println (" ");
}

static void testAbs() {

System.out.println ("Testing untuk Math.abs()");
System.out.println ("Math.abs(-23.7) = "+Math.abs(-23.7));
System.out.println ("Math.abs(0.0) = "+Math.abs(0.0));
System.out.println ("Math.abs(23.7) = "+Math.abs(23.7));
System.out.println ("Double.MIN_VALUE = "+Double.MIN_VALUE);
System.out.println ("Math.abs (Double.MIN_VALUE) = "+Math.abs(Double.MIN_VALUE));
System.out.println ("Math.abs (-Double.MIN_VALUE) = "+Math.abs(-Double.MIN_VALUE));
System.out.println ("Double.MAS_VALUE = "+Double.MAX_VALUE);
System.out.println ("Math.abs (Double.MAX_VALUE) = "+Math.abs(Double.MAX_VALUE));
System.out.println ("Math.abs (-Double.MAX_VALUE) = "+Math.abs(-Double.MAX_VALUE));
System.out.println (" ");
}

static void testIntAbs() {
System.out.println ("Cara pengujian yang lebih baik mendukung otomatisasi!");
System.out.println ("Testing untuk Math.abs() bagi bilangan bulat");
if (Math.abs(-23) !=23) System.out.println("Math(-23) :: Error! Hasil harus 23");
else System.out.println("Math(-23) :: Correct!");
if (Math.abs(0) !=0) System.out.println("Math(0) :: Error! Hasil harus 0");
else System.out.println("Math(0) :: Correct!");
if (Math.abs(23) !=23) System.out.println("Math(23) :: Error! Hasil harus 23");
else System.out.println("Math(23) :: Correct!");

System.out.println("Integer.MIN_VALUE = "+Integer.MIN_VALUE);
System.out.println("Math.abs(Integer.MIN_VALUE) =                                         "+Math.abs(Integer.MIN_VALUE));
System.out.println("Integer.MAX_VALUE = "+Integer.MAX_VALUE);
if(Math.abs(Integer.MIN_VALUE) != (-Integer.MIN_VALUE))
System.out.println("Math(Integer.MIN_VALUE) :: Error!");
else System.out.println("Math(Integer.MIN_VALUE) :: Correct!");

if(Math.abs(Integer.MIN_VALUE) < 0)
System.out.println("Math(Integer.MIN_VALUE) :: Error! Hasil harus > 0");
else System.out.println("Math(Integer.MIN_VALUE) :: Correct!");

if(Math.abs(Integer.MAX_VALUE) != (-Integer.MAX_VALUE))
System.out.println("Math(Integer.MAX_VALUE) :: Error!");
else System.out.println("Math(Integer.MAX_VALUE) :: Correct!");

System.out.println("\n\nPERHATIAN!");
System.out.println("Pengujian menunjukan hasil yang tidak sesuai dengan matematika!!!\n"+
"Pengujian otomatis kadang tidak dapat menemukannya secara benar karena dibatasi juga\n"+
"oleh kemampuan bahasa itu sendiri bila kesalahan adalah pada spesifikasi bahasa itu sendiri!\n"+
"Pengujian otomatis akan benar ditangan yang ahli, pengujian dapat ditambah sbb : \n"+
"Berdasarkan kenyataan bahwa hasil fungsi abs tidak boleh kurang dari nol");

System.out.println(
"\n"+
"Di Java, Math.abs(Integer MIN.VALUE) justru menghasilkam bilangan negatif. \n"+
"Melanggar runus matematika dimana hasil fungsi absolut selalu bernilai positif. \n"+
"Hasil ini dapat ditelusuri karena representasi int adalah two's complement \n"+
"Versi yang dipakai penulis :: JDK 1.7" );
}
static void testAcos() {
System.out.println("Math.acos(0.9) = " +Math.acos(0.9));
}
static void testCeil() {
}

static void testCos() {
}

static void testExp() {
}

static void testFloor() {
}

static void testLog() {
}

static void testMax() {
}

static void testMin() {
}

static void testPow() {
}

static void testSin() {
}

static void testSqrt() {
}

static void testTan() {
}

public static void main (String [] args){
test();
betterTest();
}
}

Hasilnya akan seperti di bawah ini :





Dengan menggunakan class math kita dapat mengetahui nilai E yang dapat digunakan untuk nilai ekponensial dan dapat mengetahui nilai PI. Fungsi lain dari class math, kita dapat mencari nilai absolute dari suatu bilangan. Dengan menggunakan class math dengan method .abs (absolute), contohnya dapat dilihat pada hasil di atas nilai absolute dari -23.7 adalah 23.7.

Fungsi sintaks di atas juga untuk mencari nilai maksimum dan minimum dari suatu tipe data, dengan menggunakan fungsi MIN_VALUE dan MAX_VALUE. Seperti contoh di atas, dalam pengujian ini saya mencari nilai maksimum dan minimun dr tipe data Double dan Integer. Dapat dilihat nilai minimal dari tipe Double adalah 4.9E-324, selain mencari nilai min, saya juga mencari nilai absolutenya. Yang didalat adalah sama, karena nilai absolute pasti bernilai positif.


Bagaimana dengan yang ini?


Sudah terlihat dimana letak keanehannya? Yaa nilai minimal integer adalah -2147483648 dan nilai absolutenya ko tetap -2147483648?
Pada kasus ini batas nilai Java tidak sesuai definisi matematika untuk fungsi absolute. Fungsi math ini memang sangat membatu karena mudah dan otomatis, tapi untuk para penguji haruslah teliti dan pintar agar hasil sesuai dengan konstrain yang berlaku di Matematika, jangan hanya menandalkan yang disediakan oleh bahasa. 

Sekian penjelasan tentang fungsi class math pada Java, semoga bermanfaat.
Terimakasih sudah membaca.

1 komentar: