Week 7: Pengetahuan Membuat Kode dan Progres Saat Ini
- Admin
- Mar 23, 2017
- 5 min read
Halo!
Selamat hari Kamis! Selamat hari claim nilai :)
Tulisan ini didedikasikan untuk proses claim nilai hari ini, berikut penjelasannya:
...
PENGETAHUAN
---
Test-Driven Development
Test-Driven Development (TDD) adalah suatu metodologi untuk berpikir tentang kualitas terlebih dahulu sebelum membuat program, sehingga tolak ukur kualitas dan integrasi dengan bagian lain bisa lebih awal dipikirkan.
---
POIN-POIN TDD (dalam PPL)
Test First
Memulai pengembangan dengan membuat unit test terlebih dahulu dengan menerapkan prinsip TDD.
Acceptance Criteria
Semua test yang dibuat harus mengacu pada acceptance criteria yang telah dibuat untuk setiap fitur yang akan dikembangkan.
Online Repository
Setiap pengembangan kode harus tercatat di dalam repositori.
Commit Milestone [Red]
Setiap penyusunan test harus tercatat di dalam repositori, dengan catatan baru terdapat test-nya saja, belum ada implementasinya.
Clean Test
Menerapkan aturan F.I.R.S.T pada penyusunan test-nya.
Commit Milestone [Green]
Setiap penyelesaian suatu task yang lolos test harus tercatat di dalam repositori.
Code Coverage
Unit test yang dibuat harus cukup komprehensif, sehingga dapat menguji seluruh bagian pada kode yang diimplementasikan. Minimal code coverage yang diterima adalah 80%.
---
PRINSIP TDD
Red
Red mengindikasikan test yang gagal. Pada awalnya, TDD test akan di-setup ke gagal untuk mengindikasikan bahwa kita baru membuat skema testing dan belum membuat implementasi dari testing-nya.
Green
Green mengindikasikan kode telah dibuat dan berhasil melewati fase testing.
Refactoring
Refactoring merupakan proses pengubahan internal code tanpa mengubah behaviour dari kode tersebut, bersifat opsional.
---
KELEBIHAN
Mengurangi waktu debugging.
Meningkatkan kualitas software.
Mempercepat pendeteksian awal terhadap bugs.
---
KEKURANGAN
Untuk lingkup software yang lebih besar, akan memerlukan lebih banyak waktu.
Jika terjadi perubahan business logic, maka testcase yang saling berhubungan harus di-maintenance atau dipastikan sesuai dengan business logic yang baru.
---
Refactoring
Refactoring adalah proses pengubahan struktur kode tanpa mengubah fungsionalitas atau perilakunya. Fungsionalitasnya tidak akan berubah, hanya struktur dari kodenya yang berubah.
---
MANFAAT MELAKUKAN REFACTORING
Memperbaiki design software.
Membuat kode menjadi lebih mudah dipahami.
Membantu menemukan bugs.
Membantu menuliskan program dengan cepat.
---
ALASAN MELAKUKAN REFACTORING
Ketika kode yang dituliskan tidak elegan. Ciri-ciri kode tidak elegan ialah sebagai berikut:
Duplicated Code
Kode yang sama dituliskan secara berulang di tempat yang berbeda, membuat kode menjadi tidak efisien dan sulit untuk melakukan perubahan di bagian kode tersebut.
Long Method
Isi method dari kode yang dituliskan terlalu panjang, sebaiknya isi method ini dipecah menjadi bagian-bagian yang lebih kecil, sehingga dapat mengatasi kompleksitas program dan menjadi lebih mudah dipahami.
Large Class
Cangkupan class terlalu besar, sehingga sulit untuk dipahami dan di-maintenance. Sebaiknya class ini dipecah menjadi beberapa class yang lebih kecil atau dapat dilakukan pembuatan partial class.
Long Parameter List
Parameter sebuah method terlalu banyak, sehingga sulit untuk dipahami. Sebaiknya, jumlah parameternya dibatasi atau dapat dilakukan pemberian tipe objek sebagai parameter.
Divergent Change
Adanya perubahan kecil pada suatu method/bagian dapat menyebabkan perubahan pada method/bagian lainnya.
Shotgun Surgery
Adanya perubahan kecil pada suatu class dapat menyebabkan perubahan pada class lainnya yang saling berelasi.
Feature Envy
Suatu method memerlukan informasi yang lebih banyak dari class lain dibandingkan dengan class-nya sendiri.
Primitive Obsessions
Lebih memilih menggunakan tipe primitive dibandingkan menggunakan suatu class. Jika tipe data yang dimiliki kompleks, sebaiknya menggunakan class untuk merepresentasikannya.
Switch Statement
Switch yang menggantikan if ada dimana-mana dan sering terdapat duplikasi, sebaiknya menggunakan polymorphism untuk menggantikannya.
Paralel Inheritance Hierarchy
Setiap saat membuat suatu sub-class diharuskan membuat sub-class yang lain.
Lazy Class
Terdapat classes yang hanya memiliki sedikit tanggung jawab, semakin banyak class yang dibuat akan membuat kode semakin kompleks, sebaiknya gabungkanlah classes yang memiliki sedikit tanggung jawab dan yang bersesuaian tersebut, atau hilangkanlah class yang methods-nya tidak dipanggil sama sekali.
Speculative Generality
Kode yang dituliskan pada suatu bagian sering berakhir tidak dipakai, sebaiknya tulislah kode yang diperlukan saja terlebih dahulu.
Temporary Fields
Class banyak mengandung bagian/fields yang tidak diperlukan.
Middle Man
Class bertanggung jawab penuh ke class lain.
---
Clean Code
Dalam menuliskan suatu kode pemrograman, sebaiknya program/kode dituliskan berkualitas yang sesuai dengan kriteria-kriteria penulisan program, sehingga memudahkan pembacaan dan proses maintenance. Berikut detailnya:
API Documentation dan Komentar yang Efisien
Kode yang dituliskan harus merupakan kode yang mudah dipahami, pastikan komentar hanya dituliskan untuk bagian-bagian yang membutuhkan penjelasan ekstra, bukan karena kode program yang ditulis tidak jelas atau tidak bagus. Dokumentasi API dituliskan dengan efektif dan efisien sesuai acuan yang dipilih.
Penamaan yang Baik
Pastikan penamaan, variabel, fungsi mengikuti acuan umum dan baku diterapkan.
Penulisan Fungsi (Method) yang Simple dan Efektif
Setiap satu fungsi (method) hanya bertanggung jawab melakukan 1 (satu) hal. Hindari adanya side-effect yang dapat membuat keliru atau mispersepsi pemahaman behaviour dari kode tersebut.
Pengkodean Error dan Exception Handling
Susun error code dengan baik dan lakukan antisipasi munculnya kemungkinan exception dengan handling yang sesuai.
Don't Repeat Yourself
Hindari duplikasi kode dengan membuat kode program yang terstruktur.
Formatting
Terapkan aturan formatting code (layout) yang sesuai dengan standar penulisan pemrograman.
---
Agile Software Development
---
AGILE MANIFESTO
Interaksi dan Personel
Menjaga interaksi antar anggota tim, guna melancarkan pengembangan software. Pada tim, tim selalu menyisihkan waktu untuk berinteraksi bersama se-tim dan mengerjakan task secara bersamaan di tempat dan waktu yang sama.
Perangkat Lunak yang Berfungsi
Memberikan perangkat lunak yang berfungsi lebih utama dibandingkan memberikan dokumentasi lengkap. Pada tim, tim berencana melakukan deploy fitur pada akhir Sprint 1, sehingga klien dapat langsung menggunakan fitur tersebut.
Kolaborasi dengan Klien
Menjaga interaksi dengan klien, sehingga improvisasi dan pengembangan fitur dapat berjalan dengan lancar. Pada tim, tim selalu berinteraksi dengan klien, yaitu bertemu langsung dan melalui Slack.
Respon terhadap Perubahan
Fleksibel terhadap perubahan, yaitu berfokus pada kesigapan tim dalam menangani perubahan yang diminta. Pada tim, tim terbuka terhadap perubahan yang dilakukan oleh klien dan tim bersikap sigap untuk menangani perubahan yang ada.
---
AGILE PRINCIPLES
Kepuasan klien adalah prioritas utama dengan menghasilkan produk lebih awal dan terus menerus.
Menerima perubahan kebutuhan, walaupun perubahan dilakukan di akhir pengembangan.
Bagian bisnis dan pembangun kerja sama tiap hari selama proyek berlangsung.
Membangun proyek di lingkungan orang-orang yang bermotivasi tinggi yang bekerja pada lingkungan yang mendukung dan dapat dipercaya untuk bisa menyelesaikan proyek.
Komunikasi dengan berhadapan langsung adalah komunikasi yang efektif dan efisien.
Software yang berfungsi adalah ukuran utama dari kemajuan proyek.
Dukungan yang stabil dari sponsor, pembangun, dan pengguna diperlukan untuk menjaga perkembangan yang berkesinambungan.
Perhatian kepada kehebatan teknis dan desain yang bagus meningkatkan sifat Agile.
Kesederhanaan penting.
Kebutuhan dan desain yang bagus muncul dari tim yang mengatur dirinya sendiri dengan baik.
Secara periodik, tim melakukan evaluasi diri dan mencari cara untuk lebih efektif. kemudian menyusun dan menyelaraskan cara kerja tim.
---
Software Environment
---
STAGING
Membuat environment staging di Heroku, guna mencoba kode dari branch development yang merupakan hasil merge antara branch user_story. Environment ini berguna untuk keperluan review internal, yaitu sebelum dilakukannya review bersama Product Owner pada environment SIT.
---
SIT
Membuat environment SIT di Heroku, guna mencoba kode dari branch development yang merupakan hasil merge antara branch user_story satu dengan user_story lainnya. Environment ini berguna untuk keperluan pengujian integrasi dengan sistem lain (apabila ada), atau demonstrasi proof of concepts kepada tim lain.
---
UAT
Membuat environment UAT di Heroku, guna mencoba kode dari branch master yang merupakan hasil merge dengan branch development. Environment ini berguna untuk keperluan approval kelayakan dari Project Owner yang dilakukan saat Sprint review.
...
PROGRES
Halo!
Selesai juga pada penjelasan tentang pengetahuan untuk claim nilai nanti, berikut adalah penjelasan tentang progres selama seminggu kemarin yang telah saya lakukan, simak yaa :)
---
Splash Screen
Ketika suatu aplikasi dibuka, biasanya akan menampilkan suatu tampilan awal selama beberapa detik sebelum memasuki tampilan utama. Berikut tampilannya:

Untuk menampilkan tampilan tersebut, berikut ialah kode implementasinya:
---
SplashScreenActivity.java
Kode ini berisikan lamanya waktu kemunculan splash_screen, yaitu selama 1 (satu) detik. Selanjutnya, halaman akan berpindah ke halaman utama aplikasi.

---
activity_splash_screen.xml
Kode ini berisikan layout yang menampung splash_screen, kemudian ditambahkan sebuah ImageView berisi logo aplikasi berukuran sesuai pada gambar (wrap_content ) dan posisi tepat di tengah aplikasi.

---
AndroidManifest.xml
Kode ini berisikan pemanggilan file SplashScreenActivity.java.

---
KETERANGAN
Implementasi kode dituliskan sesuai dengai standar penulisan pada Android Studio dengan menggunakan variabel dan fungsi yang sesuai dengan panduan penulisannya. Selain itu, penamaan file (baik source code, maupun image asset) juga disesuaikan dengan cara penulisannya.
Selain itu, saya juga melakukan revisi pada database design table untuk aplikasi ini yang sebelumnya telah di-post pada tulisan ini. Sekian yang dapat dituliskan untuk saat ini, semoga kedepannya proses pengembangan aplikasi dapat berjalan dengan lancar dan semoga ilmu yang didapatkan dapat berguna dengan sebagaimana mestinya.
Sumber:
- Slide di Scele
- http://www.coderefer.com/android-splash-screen-example-tutorial/
- https://ilmukuilmumu.wordpress.com/2009/12/25/agile-sofware-development/
- http://www.academia.edu/6786913/Test-Driven_Development_TDD_dengan_PHPUnit
Salam,
Betty Nauli Dina
Comments