git commit -m “first sprint progress report”

Ezza Ardiala
PPLSalemba
Published in
7 min readFeb 26, 2019

Prologue..

Sudah 4 minggu perkuliahan Proyek Perangkat Lunak (PPL) berjalan. Dalam renggang waktu tersebut Sprint pertama sedang dilakukan oleh semua kelompok yang mengikuti perkuliahan ini. Kelompok kami ditugaskan untuk menyelesaikan enam PBI pada sprint ini, enam PBI tersebut dipecah menjadi 18 task kecil yang dapat dikerjakan oleh semua anggota kelompok kami. Pada sprint ini saya menanggung tanggung jawab untuk tiga task yaitu:

  • Implementasi Sign Up
  • Implementasi Change Password
  • Desain Database

Untuk minggu ini task yang sedang dikerjakan adalah mengimplementasikan fungsi Sign Up dan memasukan data tersebut kedalam suatu database. Untuk menjelaskan bagaimana mengerjakan tugas tersebut dibutuhkan pengetahuan dasar tentang komponen yang digunakan Cognito dan DynamoDB.

Amazon Cognito

Amazon Cognito Logo

Cognito adalah sebuah service yang dipunyai oleh Amazon untuk membantu proses Authentication, Authorization, dan User Management pada suatu aplikasi. Cognito terdiri dari dua komponen , yaitu User Pools dan Identity Pools. User Pool adalah komponen yang melakukan autentikasi dimana user dapat melakukan sign up ataupun sign in, sedangkan Identity Pool adalah komponen yang melakukan otorisasi dimana user yang sudah melakukan sign in akan mendapatkan akses untuk menggunakan service lain yang disediakan oleh Amazon seperti S3, DynamoDB, dll.

DynamoDB

DynamoDB Logo

DynamoDB adalah sebuah NoSQL database yang disediakan oleh Amazon. Beberapa keuntungan DynamoDB dengan database lain adalah:

  • Performa yang dapat diandalkan
  • Penggunaan API yang simpel dalam query data

DynamoDB cocok digunakan jika membuat aplikasi serverless yang menggunakan Amazon Lambda, dan mempunyai dataset yang simpel.

Metode yang digunakan dalam pengerjaan PPL ini adalah Test Driven Development (TDD). Proses awal adalah pembuatan unit test, setelah itu dilanjutkan dengan pembuatan implementasi dari unit test, dan diakhiri dengan proses refactoring. Proses ini disebut juga sebagai Red, Green, Refactor cycle.

Codes, Codes, and Codes

[RED] Making Unit Tests

Pembuatan Unit test akan menggunakan dua framework JavaScript yaitu Mocha dan Chai. Secara singkat Mocha adalah framework yang akan mengeksekusi testing dan Chai berperan sebagai assertion-nya. Command yang digunakan untuk menginstall dua framework tersebut pada TypeScript adalah

$ npm i chai-http @types/chai-http @types/express @mocha

Di bawah ini akan diperlihatkan unit test yang telah di buat untuk endpoint /users

POST

POST request unit test

Tes di atas mengatakan bahwa jika ada JSON object yang dikirim ke endpoint /users dalam kasus ini newUser, maka server diharapakan merespon dengan mengirimkan balik JSON object yang mempunyai property “message”. Property “message” diharapkan berisi dengan string “User Created successfully”. JSON yang dikirimkan oleh server juga diharapkan mempunyai property “newUser” yang berisi data user yang sudah dibuat.

DELETE

DELETE request unit test

Tes diatas berjalan pada endpoint /users/:id, dimana id adalah adalah primary key yang berada pada tabel Users di database. Server diharapkan mengirim JSON object yang mempunyai property “message” dan berisikan string “User deleted successfully”.

GET

Pengetesan GET akan dilakukan pada dua endpoint yang berbeda, yaitu /users dan /users/:id.

GET request unit test

Unit test GET pertama mengecek apakah server akan mengembalikan semua user yang sudah terdaftar di database pada body, sedangkan unit test kedua mengecek apakah server akan mengembalikan objek user yang di request oleh client melalui parameter id di endpoint /users/:id.

[GREEN] Implements the unit tests

Dari unit test yang sudah dibuat di atas akan di implementasikan agar semua unit test lulus atau dengan kata lain GREEN. Implementasi dibawah ini akan menggunakan library DynamoDB yang sudah disediakan oleh Amazon.

POST implementation

Pada implementasi POST, awalnya dibuat sebuah objek bernama item yang berisikan data data di atas. Data tersebut didapatkan dari hasil pengisian form Sign Up. Setelah itu dibuat objek params yang berisi dua property, “TableName” dan “Item”. “TableName” adalah nama tabel yang digunakan untuk menyimpan “Item”. Program lalu memanggil metode “put” untuk meletakan item tersebut ke tabel yang sudah ditentukan dan mengirimkan JSON kepada client.

DELETE implementation

Untuk mengimplementasikan DELETE dibuat dulu sebuah objek params yang berisi “TableName” dan “Key”. Seperti implementasi POST sebelumnnya, “TableName” adalah nama dari tabel yang digunakan dalam penggunan DELETE, sedangkan “Key” menunjukan item manakah yang ingin di-delete. Dalam implementasi diatas maka item yang mempunyai userId yang sama dengan parameter di endpoint /users/:id akan dihapus. Program lalu akan menggunakan method “delete” pada API untuk menghapus item.

GET

Dibuatkan dua implementasi pada GET, saat mengambil semua user yang sudah tersimpan atau mengambil satu user saja.

GET user implementation

Implementasi GET user hampir sama dengan DELETE dimana dibuat objek params dengan property yang sama lalu menjalankan API dengan method “get”. Perbedaannya adalah jika item tidak ada maka server akan mengirimkan pesan bahwa item yang dicari tidak ada.

GET users implementation

GET users lebih mudah jika diimplemetasikan. property yang diperlukan oleh params hanya nama dari tabelnya saja, lalu API akan menggunakan method scan untuk mengambil semua item yang ada di tabel tersebut. Hasil dari query akan disimpan pada body JSON yang akan dikirim oleh server.

[REFACTOR] ???

Tahap refactor belum dapat di lakukan di saat penulisan blog ini. Hal hal yang ingin dicapai saat tahap refactor adalah

  • Mengganti nama variabel agar menjadi lebih mudah dimengerti
  • Menuliskan comment pada hal yang dirasa kurang jelas
  • Restructure kodingan agar function menjadi lebih modular

WHY USE TDD ??

Kenapa kita harus menggunakan TDD pada pengerjaan proyek ini? TDD menawarkan banyak manfaat yaitu:

  • Menuliskan tes terlebih sebelum implementasinya akan memaksa para programmmer berpikir lebih kritis terhadap bagaimana cara menulis implementasinya
  • Memaksakan penulisan tes yang baik, sering kali ada programmer yang membuat unit test sesudah implementasinya. Pada kasus ini banyak sekali yang membuat tes sederhana agar implementasi yang sudah dibuatnya lulus tes
  • Mempercepat development, dengan adanya TDD maka kode yang akan di deploy sudah dipastikan berjalan secara sempurna

GitFlow

Setelah para anggota menyelesaikan task-nya masing-masing, tahap berikutnya adalah untuk mengintegrasikan hasil kerja mereka ke dalam satu folder project yang sama. Untuk mempermudah proses ini digunakanlah Git, yaitu sebuah sistem version control untuk mempermudah proses integrasi. Dalam penggunaan Git digunakan sebuah workflow yang mengatur alur kerja dari setiap anggota tim dan dibawah ini akan dijelaskan penggunaan workflow tersebut pada project ini.

Step 1: Cloning the Project

Pada perkuliahan PPL ini, setiap kelompok sudah disediakan repository-nya masing masing. Isi dari repository tersebut masih kosong dan hanya mempunyai satu branch yaitu “master”. Branch master hanya digunakan untuk kode yang sudah dapat di deploy pada production, oleh karena itu dibuatlah branch baru yaitu “staging”. Fungsi dari staging adalah untuk mengimplementasikan semua kode dari branch lain dan mengetes apakah pada integrasi tersebut tidak terdapat masalah dan aplikasi dapat dijalankan.

Setiap anggota akan mengerjakan tugasnya di branch masing-masing, branch tersebut didasarkan pada branch staging yang ada di repository. Perintah git yang digunakan agar dapat membuat branch sendiri yang didasarkan pada branch staging dan meletakan branch yang baru dibuat pada repository adalah

$ git clone https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/<NAMA_KELOMPOK>.git$ git checkout -b <NAMA_BRANCH_BARU>$ git pull origin staging$ git add .$ git commit -m "Your commit message"$ git push origin <NAMA_BRANCH_BARU>

Terdapat enam perintah git yang berbeda pada potongan kode diatas; clone, checkout, pull, add, commit, push. Saya akan menjelaskan maksud dari enam perintah tersebut.

  • clone: perintah untuk meng-clone sebuah repository remote ke device lokal. Hasil clone merupakan suatu git repository yang bisa menjalankan perintah git lainnya.
  • checkout: perintah untuk berpindah ke branch lain. Dalam kasus ini kita akan berpindah ke branch US1
  • pull: perintah untuk “menarik” file dan folder dari branch lain ke branch yang sekarang sedang dikerjakan
  • add: perintah untuk menambahkan file yang sudah diedit kedalam index.
  • commit: perintah untuk mencatat perubahan yang sudah ada di dalam index ke repository
  • push: perintah untuk mengunggah hasil commit repository local ke remote. dalam kasus ini mengunggah ke branch US1

Step 2: Doing Tasks

Setelah dilakukan proses cloning, tugas selanjutnya adalah melakukan task yang sudah diberikan. Dalam pengerjaan task tersebut diharapkan menggunakan metode TDD. Dibawah ini akan dicontohkan workflow yang menggunakan metode tersebut.

# Making some unit tests
$ git add .
$ git commit -m "[RED] making some unit tests"# Implementing functions to pass the unit tests
$ git add .
$ git commit -m "[GREEN] making functions"# Restructuring code to be more streamlined and readable
$ git add .
$ git commit -m "[REFACTOR] making function more modular"

Step 3: Merging with Staging Branch

Tugas selanjutnya adalah untuk merge task yang sudah dikerjakan ke dalam branch staging. Hal tersebut dapat dicapai dengan perintah dibawah ini

# already on staging branch
$ git merge <BRANCH_YG_MAU_DI_MERGE>
# fixing merge conflict
$ git push origin staging

Pada potongan kode diatas terdapat perintah baru yaitu merge. Merge berfungsi untuk menggabungkan dua atau lebih branch dan mengintegrasikannya ke satu branch yang sama. Dalam kasus ini kita akan membuat branch staging merging dengan branch US1, dan push ke remote branch staging.

Other Git Commands

Terdapat beberapa perintah git lain yang tidak disebutkan di contoh diatas, contohnya adalah init yang berfungsi untuk membuat sebuah repository baru, rebase yang mempunyai fungsi yang mirip dengan merge, revert yang membatalkan proses commit, dll. Perintah-perintah ini dapat dibaca secara detail pada https://git-scm.com/docs/.

Epilogue

Demikianlah progress yang sudah dilakukan pada sprint pertama ini. Masih banyak tugas tugas yang harus diselesaikan seperti merefactor code, mengimplementasi task change password dll. Sampai bertemu lagi di progress report berikutnya.

--

--