Sprint 3— Rayza

Rayza Arasj M.
Energizer AAA
Published in
4 min readApr 3, 2019
Source: https://growthfreaks.com/influencers-overcoming-obstacles/

“The greater the obstacle, the more glory in overcoming it.”
― Molière

Halo, di sprint ini gua pengen mencoba buat cerita beberapa implementasi dari software programmng knowledge yang gua udah ceritakan di sprint 1 sprint 2. Sehingga isi dari blog sprint ini adalah :

  • Clean Code with Pylint PEP 8
  • Testing with Mock Function

Clean Code with Pylint PEP 8

“Of course bad code can be cleaned up. But it’s very expensive.”

― Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship

Setelah dua minggu lalu gua bahas apa itu clean code dan beberapa contoh seperti apa code yang clean, sekarang gua mau cerita tentang implementasi yang kami gunakan di Energizer-AAA. Di sini, kami menerapkan clean code dengan cara membuat standar penulisan kode yang disetujui oleh semua developer di awal pengembangan proyek. Hal ini dilakukan baik untuk Front-End maupun Back-End.

Namun karena kami semua adalah manusia, pasti kami akan melakukan kesalahan dalam menulis code kami selama pengembangan proyek. Oleh karena itu, kami memutuskan untuk menggunakan tool pylint yang ada pada Visual Studio Code. Dengan pylint ini, code yang kami tulis akan secara otomatis diperiksa kerapihannya, serta formatnya.

Untuk gua sendiri, ada satu kesalahan yang sering banget gua lakukan dalam penulisan kode. yaitu kesalahan penulisahn String dalam python, seharusnya menggunakan petik satu (‘ ‘) namun gua sering banget menggunakan petik dua (“ “). Nah, dengan pylint tadi, dapat ditambah settingan baru untuk mengecek kesalahan ini. Hal ini dapat dilakukan dengan menambahkan plugin pylint-quotes (https://github.com/edaniszewski/pylint-quotes, https://github.com/edaniszewski/pylint-quotes)

Contoh di atas adalah commit changes gua saat gua melakukan kesalahan penggunaan quote untuk string di python.

Software Architecture pada ConnectDot

“Think twice, code once.”

― Waseem Latif

Dalam pengembangan suatu proyek perangkat lunak Software Architecture merupakan hal yang harus ditentukan sebelum developer mulai coding. Software Architecture sendiri adalah suatu rancangan yang mendefinisikan komponen-komponen yang ada dalam suatu perangkat lunak secara keseluruhan. Karena masalah ini selalu muncul untuk semua perangkat lunak, sudah ada beberapa solusi yang umum digunakan developer seperti Model-View-Controller (MVC), client-server, dan peer-to-peer.

Berikut adalah Software Architecture yang ada pada ConnectDot:

Software Architecture ConnectDot (credit gambar : Hasan)

Terdapat beberapa design principle yang harus dipenuhi oleh suatu Software Architecture, yaitu:

  • Seperations of Concerns : Tiap komponen harus memiliki fungsi yang berbeda. Pada ConnectDot ini terpenuhi karena tiap komponen yang ada memiliki fungsi yang berbeda. Front-End Server untuk menampilkan Interface Web ke User. Back-End Server untuk meyediakan API ke Front-End. DBMS Server untuk menyimpan data. Image Server untuk menyimpang gambar. Verification Server untuk verifikasi user.
  • Single Responsibility Principle : Tiap komponen hanya memiliki satu tanggung jawab. Pada ConnectDot ini terpenuhi karena setiap komponen fungsinya berbeda dan hanya satu.
  • Principle of Least Knowledge : Tiap kompenen tidak perlu mengetahui cara kerja komponen lain secara detail. Pada ConnectDot ini terpenuhi karena tiap komponen cuku tau endpoint dari komponen lainnya. Secara pribadi gua yang baru memegang komponen Verification Server, Back-End Server dan DBMS Server, gua tidak perlu tahu cara kerja komponen lain secara detail.
  • Do not Repeat the Functionality : Tidak ada fungsi yang berulang diantara tiap komponen. Pada ConnectDot ini berdasarkan fungsionalitas masing-masing komponen pada point Seperations of Concerns, tidak ada yang berulang.

Testing with Mock Function and Stub Data

“Software testers succeed where others fail.”

— Anonymous

Dalam melakukan pengembangan proyek perangkat lunak, testing pada code merupakan salah satu komponen yang penting. Namun tidak semua hal yang ingin kita test dapat dilakukan hanya dengan assert saja seperti biasanya. Sepertinya contohnya, code decorator yang gua buat sebelumnya harus berhasil men-decorate suatu fungsi yang akan dipanggil. Masalah ini dapat disolve dengan meggunakan Mock pada fungsi ataupun object yang gua perlukan.

Apa itu Mock? Yang pasti bukan ejekan hehe. Jadi mock adalah suatu cara untuk mensimulasikan depedencies yang diperlukan oleh testing kita. Untuk kasus decorator gua, gua perlu nge-mock (lagi-lagi bukan berarti ngejek hehe) fungsi yang akan gua decorate, lalu gua juga perlu nge-mock object request yang diterima oleh fungsi tersebut. Berikut code yang gua buat.

Fungsi fake_api adalah mock fungsi yang akan gua decorate oleh decorator gua. Class FakeRequest adalah mock object yang akan dipakai oleh fungsi fake_api.

Lalu terdapat masalah lain yang biasanya ditemukan saat melakukan testing, yaitu melakukan testing dengan data yang berada di database. Jika test yang kita lakukan langsung mengambil data atau merubah data yang ada di database, akan terjadi error integritas terhadap data yang ada pada database. Hal ini dapat dihindari dengan menggunakan Stub.

Stub adalah suatu objek yang digunakan untuk menyimpan data yang akan digunakan selama testing. Sehingga test yang kita buat dapat mengambil data pada objek stub ini tanpa harus mengambil data langsung ke database.

Dengan menggunakan Django, setiap test akan dilakukan pada suatu test_databse, sehingga tidak akan merusak data aslinya. Terdapat pula fungsi setUp pada Django testing yang akan dijalankan sebelum setiap fungsi test, sehingga dapat digunakan untuk mengisi database dengan data yang diperlukan oleh semua test.

Dapat dilihat untuk test pada Company yang gua jalankan membutuhkan suatu data Picture. Data ini gua buat dulu pada fungsi setUp sehingga data Picture sudah ada ketika test Company.

Cukup sekian hal-hal yang mau gua ceritain di blog ini, Thaanks! :)

--

--