Pengujian merupakan aktivitas yang sering diabaikan dalam
pengembangan karena dapat menghindari peluang kerugian akibat kesalahan yang
ditemukan saat pengembangan buakan saat operasi produktif. Kesalahan program
dapat berakibat sangat fatal bahkan sampai pada kematian atau kerugian sampai
berjuta dollar. Contoh kesalahan yang diakibatkan perangkat lunak, yaitu
Ariane-5, roket pengangkut satelit milik masyarakat Eropa malfanction setelah
50 detik peluncuran yang disebabkan overflow pemroses 32 bit yang memperoleh
data dari 64 bit.
Pengujian sebaiknya dilakukan secara otomatis bukan secara
interaktif. Setelah perbaikan program kita dapat mengulangi pengujian tanpa
harus berulang kali memasukkan kasus pengujian lewat keyboard secara
interaktif.
Berikut adalah contoh program kelas Math yang disediakan
oleh java dan diuji apakah benar berfungsi dengan baik atau tidak.
Program :
public class 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.MAX_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 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(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) :: Erro! 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
menunjukkan hasil yang tidak sesuai dengan matematika!!!\n"+
"Pada
kondisi batas sangat sulit diprediksi, untuk itu kita harus mengacu dokumentasi
bahasa\n"+
"Pengujian
otomatis terkadang tidak dapat menemukannya dengan benar karena dibatasi juga\n"+
"oleh
kemampuan bahasa itu sendiri bila kesalahan adalah pada spesifikasi bahasa itu
sendiri!\n"+
"Pengujian
otomatis akan benar ditangani oleh yang ahli , penguji 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 menghasilkan bilangan negatif.
\n"+
"Melanggar
rumus 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.4"
);
}
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();
}
}
Output :
Penjelasan mengenai program diatas.
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.MAX_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("");
}
Metode diatas apabila dipanggil akan memperlihatkan hasil
program dilayar dimana kita dapat memeriksa kebenaran antarmuka (yaitu
konstanta E dan PI setra metode-metode di kelas).
Pada testAbs() terhadap double , kita harus menerapkan
prinsip “equivalence partitions” dimana kita harus memperoleh kelompok-kelompok
dimana satu anggota kelompok dapat dipandang mewakili kelompok itu. Dalam persoalan
abs() adalah :
- < 0 , diwakili oleh -23.7 mewakili seluruh anggota kelompok < 0
- 0 , diwakili oleh 0 yang merupakan satu-satunya anggota kelompok
- > 0 , diwakili oleh 23.7 mewakili seluruh anggota kelompok > 0
Persoalan berikutanya adalah masalah batas-batas domain. Bila
kita membaca dokumentasi java , maka double mengikuti spesifikasi IEEE dalam
jangkauan bilangan neagtif dan positif.
Dengan metode test() kita melakukan pengujian namun kita
harus mengamati hasil dan membandingkannya sendiri dari hasli yang diperoleh di
layar komputer.
Metode betterTest() adalah satu kemajuan berikutnya:
static void testIntAbs(){
System.out.println("Cara
pengujian yang 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(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) :: Erro! 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!");
Sulitnya pengujian tampak pada metode tersebut :
Kita telah dibantu kode pengujian dimana akan tampil dilayar
: “Error :: “ bila terdapat kesalahan di program (metode) yang diuji. Namun kita
dapat terjebak bila menggunakan fasilitas bahasa pada kasus diatas. Dimana di
Java pada kasus batas tidak sesuai definisi matematika untuk fungsi absolut. Penguji
harus pintar agar sesuai dengan konstrain yang berlaku di matematika, tidak
hanya mengandalkan yang disediakan oleh bahasa.
Titanium vs Titanium Drill Bits: Play with No Deposit
ReplyDeleteTitanium vs ford edge titanium 2021 Titanium Drill Bits. fram titanium oil filter A bit about the Titanium. This paper has a very simple titanium bars and flexible titanium pots and pans sheet of paper that will allow you titanium quartz to create a compact,