Sprint 2 — Rayza

Rayza Arasj M.
Energizer AAA
Published in
5 min readMar 18, 2019
Source : https://apod.nasa.gov/apod/ap180410.html

“Progress always involves risks. You can’t steal second base and keep your foot on first base.”
– Frederick B. Wilcox

Dari hasil Sprint 1 yang sudah berjalan, kelompok PPL kami berhasil menyelesaikan satu PBI yaitu “Home-Intro”. Pada Sprint 2 kami hanya menambah satu PBI yaitu Employee Profile. Dari hasil Sprint 2 tersebut kami berhasil menyelesaikan dua PBI. Karena kami merasa PBI Employee Profile terlalu besar, akhirnya kami pecah menjadi “Employee-Login & Register” dan “Employee-Employee Profile”. Pada blog Sprint ini gua akan bahas beberapa hal, yaitu:

  • JWT dan Decorator
  • Clean Code
  • Agile Manifesto dan Principles

JWT dan Decorator

“First, solve the problem. Then, write the code.”

— John Johnson

JSON Web Token (JWT) adalah suatu cara aman untuk merepresentasikan kumpulan informasi kepada dua pihak dengan suatu key yang sudah disepakati. JWT terdiri dari header, payload, dan signature. Header berisikan informasi dari JWT seperti type dan algoritma perhitungan. Payload berisikan informasi yang ingin disampaikan. Signature berisikan key akan yang digunakan untuk mengubah data yang aja menjadi suatu token.

Pada Sprint ini, gua mendapat task untuk melakukan authorization pada pemanggilan API yang sudah dibuat. Authorization dilakukan dengan menggunkaan JWT yang dikirim sebagai header pada pemanggilan API. Untuk memudahkan authorization kedepannya, gua membuat authorization ini menggunkan Decorator yang bisa digunakan oleh ViewSet manapun.

Decorator adalah suatu fungsi yang akan membungkus fungsi lainnya. Pada implementasi yang gua lakukan, decorator yang gua buat akan membungkus fungsi API lalu melakukan authorization terlebih dahulu sebelum mengembalikan fungsi API kembali dengan menambahkan username dan role sebagai kwargs fungsi API.

Salah satu trik menarik yang gua lakuin saat membuat decorator ini adalah pemakaian decorator dalam definisi decorator lainnya. Hal ini dikarenakan pertama gua mengerjakan, gua hanya membuat decorator untuk authentication dimana hanya memvalidasi JWT. Pada pekerjaan gua selanjutnya, gua harus membuat decorator untuk authorization role tertentu. Di situ gua akhirnya menggunakan decorator authentication gua untuk decorator authorization karena sebelum di-authorize, JWT-nya pasti di-authenticate terlebih dahulu.

Dengan adanya decorator yang gua buat, developer lain dalam tim gua yang nantinya akan membuat API baru akan lebih mudah untuk melakukan authorization ataupun authentication pada APInya. Mereka tidak perlu mengimplementasikan kembali authorization dan authentication. Menurut gua ini masuk ke dalam poin Persona dikarenakan user dari decorator yang gua buat adalah developer lain dalam kelompok. Gua membuat decorator ini dengan memikirkan kemudahan developer lain dalam pengembangan API kedepannya.

Clean Code

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”

— Martin Fowler

Dalam pengembangan suatu perangkat lunak, terutama pengembangan secara bersama, kebersihan ataupun kerapihan code menjadi hal yang sangat penting. Dalam bukunya yang berjudul “Clean Code: A Handbook of Agile Software Craftsmanship”, Robert C. Martin mejabarkan hal-hal apa saja yang dapat membuat code menjadi bersih dan rapih. Terdapat beberapa komponen clean code dalam buku tersebut. Gua akan memberikan contoh-contoh yang gua gunakan dalam pengembangan ConnectDot.

  • Follow Standar Conventions. — Pada pengembangan ConnectDot, kami mengikuti konvensi yang sudah ada dengan menggunkana pylint-django dengan beberapa konfigurasi.
  • Naming Rules. — Saat gua memberikan nama pada variable ataupun fungsi yang gua bikin, nama tersebut akan gua buat sejelas mungkin dimana nama tersebut memiliki makna yang jelas dan tidak ambigu. Nama yang gua buat juga merupakan nama yang mudah dicari dan diucapkan.
  • Keep Lines Short. — Setiap baris code gua tidak lebih dari 80 character. Hal ini juga merupakan konvensi pada pylint-django.
  • Objects should do One Thing. — Setiap class yang gua buat hanya melakukan satu hal. Hal ini dimudahkan juga oleh framework yang gua gunakan yaitu Django REST Framework.

Agile Manifesto and Principles

“Intelligence is the ability to adapt to change.”

— Stephen Hawking

Agile adalah suatu metodologi pengembangan perangkat lunak yang bersifat iteratif dimana requirements dapat berubah di tengah pengembangan perangkat lunak. Oleh karena itu, developer harus siap dan tanggap terhadap perubahan. Dalam mata kuliah PPL 2019, kami menggunkana metode Scrum yang merupakan subset dari metodologi agile.

Terdapat empat manifestos dalam Agile, yaitu:

  1. Individuals and interactions over processes and tools
  2. Working software over comprehensive documentation
  3. Customer collaboration over contract negotiation
  4. Responding to change over following a plan

Dalam pengembangan ConnectDot, kami sudah berusaha untuk menerapkan keempat manifesto tersebut. Poin pertama dapat dilihat dari diadakannya daily scrum setiap selasa dan jumat, serta weekly hackathon setiap hari rabu dan kamis. Poin kedua dapat dilihat dari fokus kami untuk menghasilkan produk yang jadi daripada menghabiskan waktu mendokumentasikan kodingan. Poin ketiga dapat dilihat dari usaha kami untuk selalu berkolaborasi dengan PO kami selama masa pengerjaan. Poin keempat dapat dilihat dari kesiapan kami terhadap perubahan requirements oleh PO kami (jika ada).

Lalu terdapat dua belas principles dalam Agile, yaitu:

  1. Agile first priority is to fulfill the customer need from beginning to end and continuous improvement to ad into valuable software.
  2. Agile allow change in requirements in the late in the development as well.
  3. Agile works on delivering software regularly interval i.e. from couple of weeks to couple of month based on project.
  4. Close, daily cooperation between business people and developers throughout the project.
  5. Key point is to trust, support and motivate individuals to get it projects build on time.
  6. Daily face-to-face conversation is key point in agile testing. This is most efficient & effective way of communication.
  7. Measuring progress by the amount of completed work.
  8. Continually seeking excellence
  9. Harnessing change for competitive advantage
  10. Simplicity
  11. Self-organizing team come out with best architectures, requirements, and designs.
  12. Regular adaptation to changing circumstances with more effective way.

Implementasi kami dari ke-dua belas principles tersebut dapat dilihat dari pelaksaan scrum kelompok kami. Kami mengadakan daily scrum untuk menjaga komunikasi antar anggota kelompok. Kami juga mengutamakan untuk menghasilkan produk yang jadi secara cepat.

Pada implementasinya di ConnectDot, poin dua dan tiga belum terlalu terasa dikarenakan komunikasi kami dengan PO yang masih kurang, baik dari PO yang kadang late-response, dan kami yang segan untuk bertanya. Selama dua sprint ini pula belum banyak perubahan yang terjadi pada requirement kami.

Dalam Scrum Framework terdapat beberapa peran yaitu Project Owner, Development Team, dan Scrum Master. Dalam Scrum Framework juga terdapat obyek yaitu Product Backlog (seluruh fitur aplikasi) Sprint Backlog (fitur yang diambil dalam suatu sprint), dan Task (pembagian tugas dari suatu fitur). Dalam Scrum Framework terdapat empat event, yaitu Spring Planning, Daily Scrum, Sprint Review, dan Sprint Retrospective.

Pada Sprint Planning, dilakukan pemilihan backlog yang akan diambil serta pemecahan backlog menjadi task. Pada Daily Scrum, masing-masing anggota kelompok meng-update hasil pekerjaannya ke seluruh anggota kelompok. Pada Sprint Review, Dev Team akan menampilkan hasil kerja selama satu sprint ke PO dan PO akan menerima atau menolak hasil pekerjaan tersebut. Pada Sprint Retrospective, Dev Team akan mengevaluasi pekerjaan yang sudah dilakukan namun lebih ke arah non-teknis, hasil dari Sprint Retrospective menjadi pelajaran bagi Dev Team dalam pengembangan perangkat lunak kedepannya.

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

--

--