Sprint 3, Week — 4: Summary

Refactoring

Menurut Martin Fowler, refactoring merupakan proses mengubah sistem dari suatu perangakat lunak tanpa mengubah perilaku dari perangkat lunak tersebut. Tujuannya adalah untuk meningkatkan kualitas struktur internal dari perangkat lunak tersebut dan membersihkan code untuk meminimalkan kemungkinan error yang akan terjadi.

Salah satu contoh refactoring adalah membersihkan code dari code — code yang tidak perlu seperti, variable, method, import yang tidak digunakan. untuk mendeteksi code yang tidak digunakan ini saya dibantu oleh PyCharm yaitu IDE Django Framework. PyCharm menandai variable varible atau code yang digunakan pada code lain dengan warna hitam dan yang tidak digunakan dengan warna abu — abu. Berikut contohnya:

test_dgb_mengubah_aturan.py lama
test_dgb_mengubah_aturan.py baru
The importance of testing

Tak terasa sudah hampir 3 bulan kita menjalankan 3 sprint artinya sudah 3 bulan juga kita menjalankan TDD yang mengimplementasikan unit testing. Pada awalnya saya belum begitu merasakan dampak dari unit testing yang saya buat. Namun, setelah project semakin besar, terdapat satu dampak besar yang saya rasakan. Dampak tersebut adalah kualitas software yang kami buat yang bebas dari bugs. Dampak ini dapat saya rasakan karena saya juga memiliki beberapa project diluar kuliah yang tidak menggunakan TDD. Dari beberapa project yang saya kerjakan, di akhir pengerjaan ketika aplikasi sudah besar, banyak bug bermunculan, dan bug tersebut bukan bug yg kecil.

Dengan mengimplementasikan TDD, saat ini kami tidak ada bug yang berarti. Itulah salah satu alasan kenapa testing sangat penting untuk diimplementasikan.

Error code

Untuk standar penamaan error code, kami membuat file python yang berisi static variabel yang deskriptif menjelaskan error code yang digunakan. Kami memberikan rentang error code antara 500–599 karena error yang ada pada sistem termasuk pada server error. Berikut adalah code errors.py:

errors.py
"""
Descriptive error codes, for code readability.
"""

HTTP_500_INTERNAL_SERVER_ERROR = 500
HTTP_501_NOT_IMPLEMENTED = 501
HTTP_502_BAD_GATEWAY = 502
HTTP_503_SERVICE_UNAVAILABLE = 503
HTTP_504_GATEWAY_TIMEOUT = 504
HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505
HTTP_507_INSUFFICIENT_STORAGE = 507
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511
LIPSY_551_APPLICATION_NOT_FOUND = 551
LIPSY_552_LEVEL_NOT_FOUND = 552
LIPSY_553_RULE_NOT_FOUND = 553
LIPSY_554_CONFIGUTAION_NOT_FOUND = 554
LIPSY_555_REGULATION_NOT_FOUND = 555
LIPSY_556_REGULATION_IS_APPLIED = 556
LIPSY_557_QUESTION_NOT_FOUND = 557
Code Standarization, naming, layout (indentation).

Standarisasi code pada tim kami mengacu pada best practice dari stack yang kami gunakan yaitu django dan python sebagai berikut:

  • Nama variabel dan fungsi snake case, yaitu setiap kata dipisahkan dengan _ (underscore)
  • Indentasi dengan tab 4 space
  • Khusus untuk penamaan class menggunakan CamelCase.
  • Untuk setiap file dan fungsi pada controller ditulis dengan format <role>_<verb>
  • nama fungsi yang berupa verb
Unit Testing and Code Coverage

Seperti yang sudah dibahas pada section the importance of testing sebelumnya, unit testing sangat penting untuk diimplementasikan. Namun dalam implementasinya pun tidak boleh sembarang implementasi. Kami selalu memperhatikan kualitas dan kuantitas dari unit testing yang kita implementasikan guna memperkuat kualitas code kita agar terbebas dari bugs.

Salah satu indikator untuk mengetahui kuantitas unit testing adalah Code Coverage. Kami selalu berusaha agar code coverage tidak turun. Sehingga diusahakan untuk tidak push testing sebelum fitur yang kita implementasikan code coveragenya 100%. Namun terdapat beberapa skenario testing yang kami belum terbayang implementasinya seperti pada pagination.py. Meski begitu code coverage kami saat ini adalah 98%, angka tersebut merupakan angka yang fantastis untuk ukuran project kami saat ini yang scope nya sudah cukup besar.

Software Environment: Staging, SIT & UAT environment

Staging server yang kami gunakan adalah vps yang dapat diakses pada ip http://139.59.231.183. Staging server merupakan server yang digunakan untuk testing secara langsung sebelum masuk ke production. Staging server kami set agar environtmentnya sama dengan environment local menggunakan docker. Untuk project kami saat ini, mengimplementasikan Continous Integration pada branch develop, sehingga apabila terjadi perubahan pada branch tersebut akan dilakukan testing dan diteruskan ke staging jika berhasil pass testing yang dibuat.

UAT atau user acceptance testing merupakan testing yang dilakukan oleh user secara langsung, yaitu cek apakah fitur yang dikembangkan diterima oleh user, user akan cek fitur apakah mudah digunakan, navigasi tepat, sesuai ekspektasi, dll. Pada sprint 2 yang lalu, terdapat satu backlog yang tidak lolos UAT karena memang terjadi kesalahan interpretasi oleh kami. Saat ini fitur — fitur tersebut sudah selesai diimplementasikan kembali sesuai keinginan user.

Referensi

https://drive.google.com/viewerng/viewer?url=https://www.csie.ntu.edu.tw/~r95004/Refactoring_improving_the_design_of_existing_code.pdf