Level Up Programming Skill dan Status Anda sebagai developer dengan Unit Testing

Bagi seorang developer (programmer/coder) membiasakan diri menulis kode testing dan menjalankan kode ini secara paralel dengan kegiatan codingnya merupakan sebuah kebiasaan yang baik. Dalam penggunaannya secara bijak, metode ini membantu developer lebih terarah dalam membangun system yang berdiri sendiri dan independent.

 
—- APA —-

— definisi:

Menurut kamus Google:
Testing adalah tindakan sengaja atau percobaan untuk mengetahui seberapa baik sesuatu bekerja.

Menurut kamus Cambridge Advanced Learner’s :
Testing adalah tindakan untuk mencari tahu apakah sebuah system bekerja dengan benar dan seberapa efektif bekerjanya.

— sejarah:

Pada tahun 1878, di dalam The Yale Book of Quotations the American inventor, disebutkan bahwa Thomas Alva Edison menggunakan istilah ‘bug’ dalam sebuah surat kepada Theodore Puskas untuk menggambarkan cacat dalam suatu sistem. Sumber lain menyatakan bahwa pada masa Edison ini istilah ‘bug’ adalah frase yang umum digunakan untuk menggambarkan kesalahan sistem.

Adalah D. Gelperin und W.C. Hetzel, 1988. yang mengklasifikasikan tahapan periodesasi testing sebagai berikut :

– Sampai dengan tahun 1956 adalah periode berorientasi debugging, di mana pengujian sering dikaitkan dengan debugging: tidak ada perbedaan yang jelas antara pengujian dan debugging.

– Dari 1957-1978 merupakan periode berorientasi demonstrasi dimana debugging dan testing dibedakan. Sehingga diketahui bahwa perangkat lunak yang diuji memenuhi persyaratan.

– Waktu antara 1979-1982 adalah periode berorientasi destruksi, di mana tujuannya adalah untuk menemukan error.

– 1983-1987 diklasifikasikan sebagai periode berorientasi evaluasi: penekanan disini adalah bahwa selama siklus pengembangan perangkat lunak, evaluasi produk dilakukan dan kualitas diukur.

– Dari 1988 tentang itu dilihat sebagai periode yang berorientasi pencegahan di mana testing ditujukan untuk melihat apakah perangkat lunak yang dikembangkan telah memenuhi spesifikasi atau belum, selain itu juga untuk mendeteksi dan mencegah kesalahan.

Tentang fase ini dapat dibaca lebih lengkap dalam dokumen postscript yang tersedia secara bebas oleh G. T. Laycock (https://en.wikiversity.org/wiki/Topic:Software_testing/literature).

 
——– MENGAPA ——–

Jadi, apa sih perlunya melakukan testing?, mengapa harus repot melakukan testing? alasannya kurang lebih sebagai berikut:

– Untuk memastikan bahwa aplikasi/software yang dikembangkan dapat melakukan apa yang seharusnya dilakukan.
– Sebuah aplikasi yg bisa bekerja dengan baik saat digunakan oleh satu atau beberapa orang, belum tentu tetap bekerja sebagaimana seharusnya saat digunakan oleh orang yg lebih banyak, misalnya beberapa ratus/ribu/juta orang.
– Adakalanya pengembang menganggap bahwa end user tidak akan melakukan hal yang sangat sepele dan bodoh yang akan membuat aplikasi tidak dapat digunakan atau yang berpotensi menyebabkan error, namun kenyataannya banyak end user yang melakukan hal tersebut.
– Ada banyak perangkat yang berbeda, browser, dan sistem operasi di luar sana yang digunakan oleh pengguna akhir aplikasi yg telah dikembangkan.
– Merupakan sebuah pertaruhan nama baik dan tuntutan secara langsung maupun tidak langsung bahwa pengembang harus memberikan software yang bekerja dengan baik seperti seharusnya dia bekerja.

Sebuah “bug” dapat menyebabkan sebuah tugas sederhana menjadi sulit dan njelimet, lebih jauhnya kadang dapat membahayakan privasi pengguna, dimana ini artinya bahwa sesuatu yang tidak terlihat dapat membawa bencana yang nyata terhadap manusia nyata, dan ini tentunya harus dihindari.

 
——- BAGAIMANA —–

Beberapa klasifikasi dari testing perangkat lunak:

1. Component testing (atau disebut juga sebagai unit testing)
2. Integration testing
3. System testing
4. Acceptance testing

Kali ini kita akan membahas secara lebih detail mengenai unit testing, sebuah software testing yang tidak dilakukan oleh QA atau tester, tetapi dilakukan oleh programmer.
 
— Jadi apakah unit testing itu?

Unit testing adalah komponen dari tes-driven development (TDD), metodologi pragmatis yang mengambil pendekatan yang cermat untuk membangun produk dengan cara pengujian terus-menerus dan melakukan revisi secara berkala. Pengembangan dengan metoda Test-driven mengharuskan pengembang untuk membuat skenario testing gagal terlebih dahulu. Kemudian menulis kode dan melakukan refactoring kode aplikasi sampai lolos testing.

Penjelasan yang cukup baik mengenai unit testing dapat diikuti disini: https://www.youtube.com/watch?v=wEhu57pih5w , disebuah Acara GoogleTechTalks.

Pada tingkatan yang lebih tinggi, unit testing mengacu pada praktek pengujian fungsi tertentu dan bagian kecil – atau unit – kode kita. Hal ini memberikan kita kemampuan untuk memverifikasi bahwa fungsi yang dibangun bekerja seperti yang diharapkan. Artinya bahwa untuk setiap fungsi yang diberikan satu set input, kita dapat menentukan apakah fungsi ini mengembalikan nilai-nilai yang tepat dan juga apakah fungsi tersebut dapat menangani setiap kegagalan proses apabila sengaja diberikan set input yang tidak valid.
 
— Kasus contoh: penggunaan unit testing pada laravel 5

Laravel merupakan framework atau mungkin salah satu framework yang menyediakan ‘tools’ untuk testing secara ‘out of the box’. unit testing yang diusung oleh laravel menggunakan PHPUnit sebagai ruh utamanya kemudian Laravel menyediakan helper yang nyaman digunakan dan setup yang mudah dilakukan untuk mengeksplorasi PHPUnit dalam penggunaanya sebagai alat unit test.

untuk contoh kasus penggunaan unit testing pada Laravel ini, maka marilah kita gunakan sebuat test example yg dibawa oleh laravel 5 saat pertama kali kita menginstal laravel.

pada struktur folder/directory yg dibawa oleh laravel terdapat sebuah file pada root project yang bernama phpunit.xml. pada file inilah seting unit testing dengan PHPUnit disimpan. adapun isi dari file tersebut adalah sebagai berikut:

 



<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
            <exclude>
                <file>./app/Http/routes.php</file>
            </exclude>
        </whitelist>
    </filter>
    <php>
         <env name="APP_ENV" value="testing"/>
         <env name="CACHE_DRIVER" value="array"/>
         <env name="SESSION_DRIVER" value="array"/>
         <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>


 

Pada rangkaian file xml ini yang saat ini kita perlu ‘highlight’ adalah pada element <testsuites> :


    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>

 
Bagian ini menyatakan bahwa untuk unit test maka pemberian nama file-nya harus diakhiri dengan suffix Test.php. Misalnya seorang developer akan melakukan test pada class Login maka untuk testingnya supaya mudah pengidentifikasiannya, nama file yang digunakan akan bernama loginTest.php. Selain itu, bagian element ini juga menyatakan bahwa semua file untuk unit test akan disimpan pada directory test yang berada pada root projek (lihat : ./test).

setelah setup dilakukan secara benar, selanjutnya adalah menyiapkan file unit test. File ini dapat dibuat secara manual dengan membuat sebuah file yg disimpan pada directory ./test maupun menggunakan artisan ‘command’ :

 


php artisan make:tes<Nama>Test

 

<Nama> disini dapat diganti sesuai dengan kebutuhan.

Setelah dibuat file testing langkah selanjutnya adalah menentukan content testing. Sebagai contoh pada ExampleTest.php yang ada di folder/directory ./test terdapat content test sebagai berikut :

 



use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $this->visit('/')
             ->see('Laravel 5');
    }
}




 

script diatas ini menyatakan bahwa test harus mengunjungi root aplikasi, misalnya http://localhost/learn-unit-test, kemudian di route tersebut apakah terdapat string “Laravel 5” atau tidak, apabila ada maka test berhasil dan sebaliknya apabila tidak ada string yg dimaksud maka test dinyatakan gagal.

mengeksekusi testing adalah dengan menjalankan PHPUnit ( ./vendor/bin/phpunit ) pada ‘console’ atau ‘command line’ kemudian dilihat statusnya. sesaat setelah menjalankan PHPUnit seharusnya pada ‘console’ terlihat sebagai berikut :

 



⟩ ./vendor/bin/phpunit
PHPUnit 5.7.13 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 1.56 seconds, Memory: 10.00MB

OK (1 tests, 1 assertions)



 

Arti dari tampilan console diatas adalah telah dieksekusi 1 test dan test tersebut berhasil.
 
—- PENUTUP —–

Demikianlah sekilas mengenai unit test. Semoga ada cukup memberikan gambaran tentang apa itu testing (pada dunia software development), apa itu unit test, bagaimana sejarahnya dan bagaimana penggunaannya dalam kehidupan nyata. Terima kasih. Sampai jumpa lagi.

Comments

comments

denisantana

You Might Also Like

No Comment

Leave your thought