Mata kuliah ini memberikan pemahaman tentang konsep, teknik, dan metodologi yang digunakan dalam pengujian (testing) dan implementasi sistem perangkat lunak. Fokus pembelajaran mencakup berbagai jenis pengujian, serta penerapan metodologi implementasi sistem yang efisien dan efektif untuk memastikan kualitas perangkat lunak yang optimal.
Capaian Pembelajaran (CP)
Setelah mengikuti mata kuliah ini, mahasiswa diharapkan mampu:
- Memahami berbagai konsep dasar dalam pengujian perangkat lunak.
- Mengaplikasikan teknik-teknik pengujian untuk mengevaluasi kualitas perangkat lunak.
- Melakukan pengujian perangkat lunak dengan menggunakan berbagai tools yang relevan.
- Merencanakan dan melaksanakan implementasi sistem perangkat lunak dalam lingkungan produksi.
- Menganalisis hasil pengujian dan melakukan perbaikan terhadap perangkat lunak yang diuji.
- Menilai kesiapan implementasi perangkat lunak dengan standar kualitas dan protokol yang tepat.
Materi Pembelajaran dan Pembagian Mingguan
| Minggu | Topik Materi | Subtopik / Deskripsi | Metode Pembelajaran | Penilaian |
|---|---|---|---|---|
| 1 | Pendahuluan dan Pengenalan Testing | Definisi, tujuan, dan jenis-jenis pengujian perangkat lunak | Ceramah, Diskusi Kelas | – |
| 2 | Fase Pengujian dalam Siklus Hidup Perangkat Lunak | Model pengembangan perangkat lunak, siklus hidup perangkat lunak dan hubungannya dengan testing | Ceramah, Studi Kasus | – |
| 3 | Pengujian Unit | Pengujian unit: konsep, teknik, dan tools yang digunakan | Praktikum, Demo | Tugas |
| 4 | Pengujian Integrasi | Pengujian integrasi: pendekatan dan teknik pengujian integrasi sistem | Praktikum, Diskusi Kelas | Tugas |
| 5 | Pengujian Sistem dan Fungsionalitas | Pengujian sistem, pengujian fungsionalitas, teknik black-box dan white-box | Ceramah, Diskusi, Praktikum | Tugas |
| 6 | Pengujian Non-Fungsional | Pengujian performa, keamanan, dan reliabilitas sistem | Ceramah, Praktikum | Tugas |
| 7 | Automasi Pengujian | Pengujian otomatisasi: tools dan teknik dalam automasi pengujian | Ceramah, Demo, Praktikum | Tugas |
| 8 | Pengujian UAT (User Acceptance Testing) | Konsep dan penerapan pengujian UAT, pentingnya feedback pengguna dalam implementasi | Ceramah, Studi Kasus | Ujian Tengah Semester (UTS) |
| 9 | Penyusunan Laporan Pengujian | Struktur laporan pengujian, analisis hasil, dan rekomendasi perbaikan perangkat lunak | Diskusi, Praktikum | Tugas |
| 10 | Persiapan Implementasi Sistem | Proses perencanaan implementasi, pengujian readiness, dan deployment perangkat lunak ke produksi | Ceramah, Diskusi | Tugas |
| 11 | Deployment dan Instalasi Sistem | Teknik implementasi dan deployment sistem ke lingkungan produksi, penggunaan DevOps | Ceramah, Praktikum | Tugas |
| 12 | Monitoring dan Pemeliharaan Pasca Implementasi | Pemantauan sistem setelah implementasi, manajemen pembaruan dan pemeliharaan sistem | Ceramah, Diskusi Kelas | Tugas |
| 13 | Evaluasi dan Pengendalian Kualitas Pasca Implementasi | Pengendalian kualitas pasca implementasi, analisis kesalahan dan perbaikan jangka panjang | Ceramah, Diskusi | Tugas |
| 14 | Studi Kasus Implementasi Sistem | Analisis studi kasus implementasi sistem di industri | Diskusi, Presentasi Kelompok | Ujian Akhir Semester (UAS) |
| 15 | Ujian Akhir Semester dan Review | Evaluasi keseluruhan materi mata kuliah, diskusi tentang pengalaman dan tantangan implementasi | Diskusi, UAS | UAS |
Penilaian
| Komponen Penilaian | Persentase (%) |
|---|---|
| Tugas Mingguan (Praktikum & Studi Kasus) | 30% |
| Ujian Tengah Semester (UTS) | 20% |
| Ujian Akhir Semester (UAS) | 30% |
| Partisipasi dan Diskusi Kelas | 10% |
| Laporan Praktikum dan Implementasi | 10% |
Referensi Utama
- Pressman, R. S. (2014). Software Engineering: A Practitioner’s Approach (9th ed.). McGraw-Hill.
- Kaner, C., Bach, J., & Pettichord, B. (2001). Testing Computer Software. Wiley.
- Graham, D. (2016). Software Test Automation: Effective Use of Test Execution Tools. Addison-Wesley.
Metode Pembelajaran
- Ceramah dan Diskusi
- Praktikum dan Demonstrasi
- Studi Kasus dan Analisis
- Tugas Mandiri dan Kelompok
Prasyarat
- Pemahaman dasar tentang pemrograman perangkat lunak dan rekayasa perangkat lunak.
- Pengalaman praktis dalam mengembangkan perangkat lunak (baik menggunakan bahasa pemrograman tertentu maupun metodologi pengembangan perangkat lunak).
Dalam Testing & Implementasi Sistem biasanya ada 2 macam Pengujian, yaitu Pengujian black box dan white box.
Pengujian black box dan white box adalah dua jenis pengujian perangkat lunak yang umum digunakan dalam siklus pengembangan perangkat lunak. Keduanya memiliki pendekatan yang berbeda dalam menguji sistem dan berfokus pada aspek yang berbeda dalam pengujian. Berikut penjelasan secara rinci dan detail tentang keduanya:
1. Pengujian Black Box
Pengertian:
Pengujian black box adalah metode pengujian perangkat lunak di mana penguji tidak mengetahui atau tidak memiliki akses terhadap struktur internal sistem atau kode sumbernya. Pengujian ini berfokus pada fungsi-fungsi dari aplikasi atau perangkat lunak yang diuji dan bagaimana sistem merespon input yang diberikan berdasarkan spesifikasi yang telah ditentukan.
Dalam pengujian black box, penguji hanya berfokus pada input dan output dari perangkat lunak tanpa memikirkan bagaimana perangkat lunak tersebut menghasilkan output dari input yang diberikan.
Tujuan:
Tujuan utama dari pengujian black box adalah untuk memastikan bahwa perangkat lunak berfungsi sesuai dengan yang diinginkan dan sesuai dengan kebutuhan fungsional yang telah ditentukan dalam spesifikasi sistem.
Karakteristik Pengujian Black Box:
- Fokus pada Fungsi: Penguji menguji fungsionalitas sistem berdasarkan kebutuhan dan spesifikasi tanpa melihat struktur internal.
- Tidak Memerlukan Pengetahuan Kode: Penguji tidak perlu mengetahui bagaimana perangkat lunak dikodekan atau diimplementasikan.
- Pengujian Berdasarkan Spesifikasi: Pengujian dilakukan berdasarkan dokumen spesifikasi atau requirement.
- Pendekatan Berbasis Output: Pengujian dilakukan dengan memberikan input tertentu dan memeriksa output yang dihasilkan.
Jenis-Jenis Pengujian Black Box:
- Pengujian Fungsional (Functional Testing): Menguji apakah fitur sistem berjalan sesuai dengan spesifikasi.
- Pengujian Keamanan (Security Testing): Menguji apakah sistem aman dari ancaman eksternal.
- Pengujian Kinerja (Performance Testing): Menguji kinerja sistem dalam kondisi beban tinggi atau penggunaan sumber daya.
- Pengujian Kompatibilitas (Compatibility Testing): Menguji apakah sistem dapat berjalan di berbagai platform dan perangkat keras.
- Pengujian Usability (Usability Testing): Menguji sejauh mana antarmuka dan pengalaman pengguna sesuai dengan kebutuhan pengguna.
Metode Pengujian Black Box:
- Equivalence Partitioning: Pembagian input menjadi beberapa kategori yang diharapkan menghasilkan output yang serupa. Pengujian hanya dilakukan pada beberapa nilai yang mewakili kategori tersebut.
- Boundary Value Analysis (BVA): Pengujian dilakukan pada nilai-nilai batas atau ekstrem dari input. Pendekatan ini sering digunakan untuk menemukan cacat yang muncul pada nilai-nilai batas.
- Decision Table Testing: Menggunakan tabel keputusan untuk memverifikasi berbagai kombinasi input dan output yang mungkin.
- State Transition Testing: Menguji transisi antar status dalam sistem berdasarkan berbagai input yang diberikan dan keadaan sistem yang berbeda.
- Use Case Testing: Berdasarkan skenario penggunaan atau kasus penggunaan sistem, pengujian dilakukan untuk memastikan bahwa alur fungsional aplikasi sesuai dengan kebutuhan pengguna.
2. Pengujian White Box
Pengertian:
Pengujian white box (juga dikenal sebagai pengujian clear box atau structural testing) adalah metode pengujian perangkat lunak yang melibatkan pengujian sistem dengan pengetahuan penuh tentang struktur internal, kode sumber, dan implementasi perangkat lunak. Penguji pada dasarnya memeriksa aliran logika, kontrol, dan struktur data dalam perangkat lunak.
Pengujian white box berfokus pada cara kerja aplikasi, bukan hanya apakah aplikasi berfungsi dengan benar, tetapi juga bagaimana sistem tersebut mengelola dan memproses data dari dalam. Oleh karena itu, pengujian white box membutuhkan pemahaman tentang kode sumber dan algoritma yang digunakan.
Tujuan:
Tujuan dari pengujian white box adalah untuk memastikan bahwa kode program berfungsi sesuai dengan yang diinginkan, bahwa tidak ada bagian kode yang tidak dijangkau (dead code), dan bahwa setiap jalur dalam aplikasi telah diuji secara menyeluruh.
Karakteristik Pengujian White Box:
- Fokus pada Struktur Internal: Penguji menguji kode sumber dan struktur logika perangkat lunak.
- Pengetahuan Kode Diperlukan: Penguji harus memiliki akses ke kode sumber dan pemahaman yang baik tentang struktur program.
- Menggunakan Teknik Pemrograman: Pengujian dilakukan dengan menggunakan teknik yang menguji aliran data, kontrol, dan logika program.
- Mengidentifikasi Bug di Dalam Kode: Pengujian white box membantu menemukan bug, kesalahan logika, dan potensi kerentanannya dalam kode.
Jenis-Jenis Pengujian White Box:
- Unit Testing: Pengujian bagian terkecil dari sistem (unit), seperti fungsi atau metode tertentu untuk memastikan bahwa unit tersebut berfungsi dengan benar.
- Integration Testing: Menguji interaksi antar unit atau modul dalam sistem.
- Code Coverage Testing: Mengukur sejauh mana kode program diuji dengan menggunakan metrik seperti statement coverage, branch coverage, dan path coverage.
- Path Testing: Memeriksa jalur eksekusi yang mungkin terjadi dalam program dan memastikan semua jalur diuji.
- Loop Testing: Menguji pengulangan atau loop dalam kode untuk memastikan tidak ada kesalahan dalam implementasi loop.
Metode Pengujian White Box:
- Statement Coverage: Memastikan setiap pernyataan dalam kode sumber dieksekusi minimal sekali.
- Branch Coverage: Memastikan bahwa setiap keputusan dalam kode (misalnya, pernyataan if-else) diuji dengan semua kemungkinan kondisi benar atau salah.
- Path Coverage: Menguji seluruh jalur atau urutan eksekusi yang mungkin terjadi dalam kode untuk memastikan bahwa seluruh jalur diuji.
- Condition Coverage: Memastikan setiap kondisi dalam ekspresi logika dievaluasi untuk nilai benar dan salah.
Perbandingan Pengujian Black Box dan White Box
| Aspek | Black Box Testing | White Box Testing |
|---|---|---|
| Fokus | Fungsi dan output perangkat lunak | Struktur internal dan kode perangkat lunak |
| Pengetahuan Kode | Tidak diperlukan | Diperlukan (harus mengetahui kode sumber) |
| Pendekatan | Pengujian berdasarkan spesifikasi dan requirement | Pengujian berdasarkan pemahaman kode dan logika |
| Jenis Pengujian | Fungsional, performa, kompatibilitas, keamanan | Unit testing, path testing, branch testing |
| Tujuan | Memastikan perangkat lunak berfungsi sesuai dengan kebutuhan | Memastikan kode berjalan sesuai yang diinginkan dan menemukan kesalahan dalam kode |
| Contoh Metode | Equivalence Partitioning, BVA, State Transition | Statement Coverage, Path Coverage, Branch Coverage |
| Kelebihan | – Tidak memerlukan pengetahuan teknis | – Dapat menemukan kesalahan di dalam logika kode |
| – Berguna untuk pengujian fungsional | – Dapat mengoptimalkan kinerja dan efisiensi kode | |
| Kekurangan | – Tidak dapat mendeteksi kesalahan logika di dalam kode | – Membutuhkan pemahaman mendalam tentang kode |
Kesimpulan
Pengujian black box dan white box memiliki pendekatan yang sangat berbeda. Pengujian black box berfokus pada menguji fungsi sistem tanpa mempertimbangkan implementasi internal, sedangkan pengujian white box memeriksa kode sumber dan struktur internal sistem untuk memastikan bahwa semua bagian kode berjalan sesuai dengan yang diinginkan. Kedua jenis pengujian ini saling melengkapi dan sering digunakan bersamaan untuk memastikan kualitas perangkat lunak yang optimal.
Contoh Software Testing/Pengujian Sistem
Berikut adalah beberapa contoh perangkat lunak (software) yang dapat digunakan untuk testing dan implementasi sistem dalam pengembangan perangkat lunak:
1. Software untuk Pengujian (Testing)
a. Selenium
- Jenis: Automasi Pengujian Web
- Fungsi: Selenium adalah alat pengujian automasi yang banyak digunakan untuk menguji aplikasi web. Ini mendukung berbagai browser seperti Chrome, Firefox, Safari, dan Edge, serta memungkinkan pengujian menggunakan berbagai bahasa pemrograman seperti Java, Python, C#, dan Ruby.
- Tipe Pengujian: Pengujian fungsional, pengujian regresi, pengujian antarmuka pengguna (UI).
- Kelebihan:
- Mendukung pengujian cross-browser.
- Gratis dan open-source.
- Dapat digunakan untuk pengujian otomatis berbasis skrip.
- Website: Selenium
b. JUnit
- Jenis: Pengujian Unit
- Fungsi: JUnit adalah framework pengujian unit untuk aplikasi Java. Framework ini memungkinkan pengembang untuk menulis dan menjalankan tes unit secara otomatis.
- Tipe Pengujian: Pengujian unit.
- Kelebihan:
- Menyediakan struktur yang mudah untuk pengujian unit dalam bahasa Java.
- Integrasi yang baik dengan alat pembangunan seperti Maven dan Gradle.
- Mendukung pengujian berbasis anotasi.
- Website: JUnit
c. Postman
- Jenis: Pengujian API
- Fungsi: Postman adalah alat untuk menguji API (Application Programming Interface) yang memungkinkan pengujian dan dokumentasi API secara manual atau otomatis.
- Tipe Pengujian: Pengujian API, pengujian fungsional dan regresi.
- Kelebihan:
- User-friendly, dapat digunakan oleh pengembang dan tester tanpa keahlian pengkodean.
- Mendukung pengujian API REST dan SOAP.
- Dapat mengotomatisasi pengujian API dengan koleksi Postman dan integrasi CI/CD.
- Website: Postman
d. Apache JMeter
- Jenis: Pengujian Kinerja dan Beban
- Fungsi: JMeter adalah perangkat lunak sumber terbuka yang digunakan untuk menguji kinerja dan beban aplikasi web. JMeter dapat digunakan untuk menguji aplikasi berbasis web, layanan web, dan database.
- Tipe Pengujian: Pengujian kinerja (performance testing), pengujian beban (load testing).
- Kelebihan:
- Mampu melakukan pengujian beban dan stres pada aplikasi.
- Dukungan untuk berbagai protokol selain HTTP, seperti FTP, JDBC, dan JMS.
- Mudah digunakan dengan antarmuka grafis.
- Website: Apache JMeter
e. TestComplete
- Jenis: Pengujian Automatisasi GUI
- Fungsi: TestComplete adalah alat otomatisasi pengujian untuk aplikasi desktop, web, dan mobile. TestComplete memungkinkan pengujian fungsional dengan menggunakan skrip atau tanpa skrip.
- Tipe Pengujian: Pengujian GUI, pengujian fungsional.
- Kelebihan:
- Mendukung pengujian aplikasi di berbagai platform (web, desktop, mobile).
- Dapat digunakan tanpa menulis kode dengan fitur rekaman dan pemutaran.
- Integrasi dengan alat CI/CD.
- Website: TestComplete
2. Software untuk Implementasi Sistem
a. Docker
- Jenis: Kontainerisasi dan Deployment
- Fungsi: Docker adalah platform yang digunakan untuk mengotomatisasi penyebaran aplikasi dalam kontainer. Docker memungkinkan aplikasi berjalan secara konsisten di berbagai lingkungan pengembangan, pengujian, dan produksi.
- Tipe Implementasi: Implementasi dan deployment sistem aplikasi menggunakan kontainer.
- Kelebihan:
- Memudahkan pengelolaan dan penyebaran aplikasi di berbagai lingkungan.
- Mendukung DevOps dan CI/CD pipeline.
- Isolasi dan portabilitas aplikasi yang lebih baik.
- Website: Docker
b. Kubernetes
- Jenis: Orkestrasi Kontainer
- Fungsi: Kubernetes adalah alat orkestrasi yang digunakan untuk mengelola, mengotomatisasi, dan menskalakan aplikasi kontainer dalam produksi. Kubernetes bekerja dengan Docker untuk mengelola kontainer dalam klaster.
- Tipe Implementasi: Orkestrasi dan manajemen implementasi aplikasi berbasis kontainer.
- Kelebihan:
- Skalabilitas tinggi untuk aplikasi yang membutuhkan pemrosesan beban tinggi.
- Mendukung manajemen beban dan ketersediaan aplikasi secara otomatis.
- Mendukung penyebaran aplikasi dengan rollouts dan rollbacks otomatis.
- Website: Kubernetes
c. Jenkins
- Jenis: Integrasi dan Penyebaran Kontinu (CI/CD)
- Fungsi: Jenkins adalah alat open-source yang digunakan untuk otomatisasi pembangunan, pengujian, dan penyebaran perangkat lunak dalam pengembangan perangkat lunak berbasis CI/CD.
- Tipe Implementasi: Otomatisasi pipeline untuk implementasi sistem.
- Kelebihan:
- Mendukung lebih dari 1000 plugin untuk mengintegrasikan berbagai alat.
- Memungkinkan pengujian dan penyebaran otomatis.
- Integrasi yang baik dengan Docker, Kubernetes, dan alat DevOps lainnya.
- Website: Jenkins
d. Ansible
- Jenis: Automatisasi Konfigurasi dan Penyebaran
- Fungsi: Ansible adalah alat otomatisasi open-source yang digunakan untuk mengelola konfigurasi dan penyebaran aplikasi di server atau infrastruktur cloud.
- Tipe Implementasi: Otomatisasi konfigurasi dan penyebaran sistem perangkat lunak.
- Kelebihan:
- Sederhana, mudah dipahami dan digunakan.
- Tidak memerlukan agen di server target.
- Sangat cocok untuk penyebaran dan manajemen infrastruktur yang lebih besar.
- Website: Ansible
e. Terraform
- Jenis: Infrastruktur sebagai Kode (Infrastructure as Code)
- Fungsi: Terraform adalah alat yang digunakan untuk mengelola infrastruktur sebagai kode. Ini memungkinkan pengelolaan penyebaran aplikasi, serta pengelolaan infrastruktur cloud seperti AWS, Azure, dan Google Cloud.
- Tipe Implementasi: Penyebaran dan manajemen infrastruktur cloud untuk aplikasi.
- Kelebihan:
- Mengotomatisasi penyebaran dan pengelolaan infrastruktur cloud.
- Memungkinkan pembuatan dan pengelolaan infrastruktur dalam skala besar dengan kode.
- Mendukung penyebaran multi-cloud.
- Website: Terraform
3. Perangkat Lunak untuk Testing dan Implementasi Sistem Secara Terpadu
a. GitLab CI/CD
- Jenis: Integrasi dan Penyebaran Kontinu (CI/CD)
- Fungsi: GitLab CI/CD adalah platform DevOps yang menawarkan solusi untuk integrasi dan penyebaran perangkat lunak yang terintegrasi langsung dengan repositori GitLab. GitLab CI/CD mendukung pengujian otomatis dan deployment aplikasi dalam pipeline.
- Tipe Implementasi dan Pengujian: Pengujian otomatis dan deployment perangkat lunak.
- Kelebihan:
- Menyediakan CI/CD pipeline terintegrasi dengan version control.
- Mudah digunakan untuk tim DevOps.
- Mendukung pengujian, build, dan deployment otomatis.
- Website: GitLab CI/CD
Kesimpulan
Ada berbagai perangkat lunak yang dapat digunakan untuk testing dan implementasi sistem dalam pengembangan perangkat lunak, baik untuk pengujian fungsional, kinerja, atau pengujian regresi, serta untuk otomatisasi penyebaran dan manajemen infrastruktur. Beberapa alat populer yang disebutkan di atas membantu meningkatkan efisiensi, keandalan, dan kecepatan dalam pengujian dan implementasi sistem perangkat lunak. Pemilihan perangkat lunak yang tepat akan bergantung pada kebutuhan spesifik proyek, tim, dan lingkungan pengembangan.