Life at FunTrans — Week 2&3

Nadira Daniel
9 min readMar 23, 2017

--

Hai semua,

Pada minggu kedua dan ketiga untuk proyek PPL kami, hal yang sudah saya lakukan adalah:

1. Mendalami konsep TDD yang ada pada Ruby on Rails dan juga memahami salah satu tools TDD yang akan digunakan yaitu Rspec.

2. Mempelajari konsep tentang Git Flow pada GitLab.

3. Melakukan setup pada staging & production environment sehingga dibuat sedemikian rupa menjadi 1 pipeline.

4. Mempelajari mengenai pembuatan API documentation pada rails.

5. Memahami konsep Agile

6. Melakukan commit dan push gitlab-ci.yml pada initialization app sampai green phase.

7. Membuat model dan relasi antar model dari bot MrAlfred

8. Mempelajari mengenai code standardization

9. Mempelajari cara mengintegrasikan slack bot ke dalam slack team

Applied TDD Concept with MiniTest

Seperti yang sudah saya pelajari sebelumnya mengenai MiniTest, yaitu default test framework yang disediakan oleh Rails yang mendukung konsep dari TDD. Kali ini saya akan mengeskplorasi lebih dalam mengenai konsep TDD tersebut. Paradigma TDD seperti yang mungkin sudah diketahui, merupakan salah satu metodologi dalam software engineering, dimana developer harus memikirkan bagaimana suatu fungsi dijalankan dan membuat suatu test terlebih dahulu sebelum memulai membuat program tersebut. TDD ini dapat meningkatkan produktivitas dari developer karena dapat meminimalisasi waktu untuk debugging, dan hasil dari test dapat langsung diketahui oleh developer sehingga tidak memakan waktu banyak, selain itu TDD dapat meningkatkan kepercayaan dari developer karena semua code nya sudah dicover dalam test.

Dalam eksplorasi saya mengenai TDD pada Rails ini, saya akan mencoba menerapkan secara langsung sebagai lanjutan dari proses pembelajaran saya pada e-book https://www.railstutorial.org/book. Minggu ini saya akan mencoba mempelajari chapter 5 yaitu mengenai Filling the Layout yaitu bab mengenai konsep dari frontend pada rails. Chapter ini dimulai dengan pembuatan branch baru supaya kita tidak langsung melakukan development pada branch master. Lalu ditampilkan pula contoh hasil dari pengerjaan yang diharapkan yaitu seperti berikut ini

Berdasarkan contoh hasil yang ditampilkan, pada chapter ini saya diharapkan untuk memodifikasi pages yang sudah saya buat pada sample_app di chapter 3. Supaya dapat memiliki menu navigasi yaitu home, help, about dan juga contact yang akan diarahkan ke suatu page tertentu yang sesuai. Dengan demikian, kita perlu membuat suatu testcase untuk setiap page yang ada di sample_app tersebut. Saya mencoba mengimplementasikan testcase sederhana dimana requirement nya adalah title dari setiap page harus memenuhi format tertentu yaitu [nama page] | Ruby on Rails tutorial Sample App. Maka dari itu implementasi dari testing yang diimplementasikan adalah sebagai berikut.

Lalu, saya mencoba menjalankan minitest dengan mengeksekusi perintah rails test tentunya akan terjadi error [RED]

Kemudian, kita akan membuat hal-hal yang perlu didefinisikan untuk setiap page, sesuai dengan yang sudah didefinisikan dalam testcase. Contoh dari implementasinya adalah sebagai berikut

Setelah melakukan semua requirement yang diharapkan, maka selanjutnya adalah melakukan testing. Dengan perintah rails test. Hasil dari testing tersebut adalah sebagai berikut [GREEN]

Git Flow Concept

Karena kemarin sempat terjadi isu mengenai git branch yang masih bermasalah karena root dari branch masih tidak benar. Maka, saya mencoba mempelajari mengenai konsep dari Git Flow karena siapa tahu bisa membantu walaupun akhirnya ternyata branch dari kelompok kami dapat diselesaikan oleh rekan saya. Jadi, step-step dalam pembuatan git flow adalah sebagai berikut:

  1. Eksekusi perintah git flow init lalu mengisi pertanyaan yang telah disediakan seperti apa nama untuk branch feature dll.
  2. Memulai feature baru yang berasal dari branch develop dengan mengeksekusi perintah git flow feature start MYFEATURE
  3. Jika sudah selesai dan ingin merge ke branch develop bisa dilakukan dengan perintah git flow feature finish MYFEATURE

Berikut ini adalah git flow yang saya buat yang berada pada repository https://gitlab.com/nadiradaniel/flowexample

Referensi : https://danielkummer.github.io/git-flow-cheatsheet/

Setup Pipeline on Heroku

Minggu lalu, saya sudah menyelesaikan mengenai chores yaitu mengenai staging environment Heroku akan tetapi staging dan production environment yang saya buat masih terpisah dan belum menjadi satu pipeline. Kali ini saya mencoba membuatnya menjadi 1 pipeline supaya flow nya menjadi lebih jelas. Step-step nya adalah sebagai berikut:

  1. Membuat Pipeline Baru

2. Mengisi informasi mengenai nama pipeline

3. Melakukan penambahan staging application dan production application

Selesai! Disini saya membuat 2 pipeline karena, kelompok PPL kami akan membuat mralfred bot dan juga mralfred web admin

Getting Started with API Documentation

API documentation atau yang biasa dikenal dengan sebutan Programmers documentation merupakan referensi singkat mengenai apa yang perlu diketahui untuk menggunakan suatu library atau menggunakan program tersebut, hal ini mencakup detail tentang fungsi, return type dsb

Dalam rails, untuk pembuatan API documentation bisa dikatakan cukup sederhana, dalam eksplorasi saya mengenai API documentation ini saya menggunakan init_app yang terdapat dalam repository. Langkah-langkahnya adalah sebagai berikut:

  1. Eksekusi perintah rdoc pada project init_app

2. Rdoc akan otomatis melakukan generate API Documentation

3. API documentation yang terbentuk akan muncul di directory doc

contoh dari API documentation

Understanding Agile Concept

Agile manifesto atau biasa disebut Manifesto for Agile Software Development adalah formal proclamation dari 4 key values dan 12 principles sebagai panduan untuk pendekatan iterative dan people-centric dari pengembangan suatu perangkat lunak. Agile software development, fokus dalam mengembangkan kode yang sederhana, berfokus pada testing, secepat mungkin mendelivery suatu fungsi dari aplikasi saat sudah siap. Agile juga merupakan alternative dari document-driven software development process seperti pendekatan waterfall.

4 key values Agile Manifesto antara lain:

  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

12 prinsip dari Agile Manifesto antara lain:

  1. Satisfying ‘customers’ through early and continuous delivery of valuable work.
  2. Breaking big work down into smaller components that can be completed quickly.
  3. Recognizing that the best work emerges from self-organizing teams.
  4. Providing motivated individuals with the environment and support they need and trust them to get the job done.
  5. Creating processes that promote sustainable efforts.
  6. Maintaining a constant pace for completed work.
  7. Welcoming changing requirements, even late in a project.
  8. Assembling the project team and business owners on a daily basis throughout the project.
  9. At regular intervals, having the team reflect upon how to become more effective, then tuning and adjusting behavior accordingly.
  10. Measuring progress by the amount of completed work.
  11. Continually seeking excellence.
  12. Harnessing change for competitive advantage.

Dealing with GitLab CI

Minggu ini akhirnya saya berhasil menyelesaikan chores saya yaitu mengenai build compilation, chores ini juga berhubungan dengan chores script provisioning, gitlab runner, dan juga testing script.

Setelah berkomunikasi bersama teman saya yang mendapatkan chores script provisioning dan testing script supaya mereka menambahkan hal-hal yang perlu ditambahkan pada file gitlab-ci.yml yang sudah saya buat sebelumnya, saya mencoba melakukan commit dan push ke repository pada subfolder init_app, namun hidup kadang memang tak seindah yang diharapkan, pada commit pertama saya, saya langsung nerima pesan error yang menandakan bahwa gitlab ci saya tidak valid dan saya segera mencoba memperbaikinya dan melakukan commit kembali, namun rupanya saya masih harus menghadapi cobaan yaitu tidak lolos pada stage rails maupun rspec dikarenakan masalah database dan format dari kode tidak sesuai dengan rspec yaitu framework TDD yang kami gunakan.

3 hari lamanya saya mencoba memperbaiki gitlab-ci.yml dengan bantuan teman-teman saya juga dan akhirnya pada commit ke 22 ternyata saya berhasil lolos dari tahap test. Namun, lagi-lagi cobaan masih harus dihadapi karena ternyata tidak lolos tahap production. Lalu, saya mencoba menelusuri error yang terjadi dan ternyata API key yang saya gunakan untuk staging dan production tidak valid, hal ini terjadi karena ternyata saya salah presepsi dan menganggap bahwa yang saya sudah masukan adalah API key nya ternyata bukan. Lalu setelah saya mencoba melakukan commit ke 23 dan menunggu selama 17 menit lamanya untuk proses running, akhirnya saya bisa melihat kalimat passed pada pipeline kami.

Lalu saya melakukan checking pada heroku untuk mengecek apakah aplikasi sudah terdeploy atau belum.

staging-environment
production-environment

Namun sayangnya, jika dibuka, aplikasi staging dan production tersebut akan memunculkan pesan bahwa aplikasi tidak ada, hal ini dikarenakan init_app pada repository kami masih berupa new project yang belum di setup route untuk homepage nya.

Modelling the Application

Setelah saya berhasil menyelesaikan chores saya, kali ini saya akan mengerjakan task yaitu membuat model dari mralfred. Dalam konsep MVC, model merupakan hal yang merepresentasikan data dan model tidak melakukan suatu hal apapun seperti controller ataupun view. Biasanya kita hanya membuat suatu table dalam database, tapi dalam konsep MVC ini kita membuat suatu table berdasarkan suatu model. Berikut langkah-langkah untuk melakukan generate suatu model

Tapi sebelum membuat model, karena dalam PPL ini kita menggunakan konsep TDD, maka kita harus membuat test cases terlebih dahulu. Dalam proyek ini kita tidak menggunakan default test framework yaitu MiniTest melainkan akan digunakan Rspec, hal ini dikarenakan Rspec lebih powerful dibandingkan MiniTest. Berikut adalah contoh test cases yang sudah saya buat.

Lalu, saya mencoba menjalankan rspec, tentunya akan terjadi error karena belum diimplementasikan.

Kemudian, setelah membuat test cases, hal yang harus dilakukan adalah membuat model. Langkah-langkahnya adalah sebagai berikut:

  1. Eksekusi perintah rails generate model [nama model] [atribut:tipe data]

Dikarenakan kebutuhan model yang kita akan kita gunakan berbeda dengan default model yang disediakan maka kita harus melakukan editing

2. Mengatur relasi dalam setiap model dengan cara menset foreign key

3. Hasil rspec jika sudah mengimplementasikan model beserta code coverage nya.

Hasil dari code coverage tersebut masih tidak baik karena saya masih belum mengimplementasi controller, tetapi untuk coverage model sudah mencapai 100%

Applied Code Standardization on Our Project (Using Rubocop)

Setiap bahasa pemrograman pasti memiliki standar sebagai guideline untuk developer yang mencakup mengenai style, practice, indentasi, penamaan suatu file dll. Hal ini digunakan untuk menciptakan high quality code.

Didalam rails, sudah terdapat suatu tools yang digunakan untuk code standardization yaitu rubocop. Sebagai panduan kami untuk code standardization menggunakan rubocop bisa dilihat di link berikut ini:

Untuk mengecek apakah kode yang sudah dibuat sudah memenuhi standar atau belum, kita dapat mengeksekusi perintah rubocop dalam command line.

Untuk bahan pembelajaran, saya mencoba mengaplikasikan code convention ini, saat saya membuat testcase menggunakan rspec untuk validasi model. Setelah selesai membuat test cases nya, saya mencoba push kedalam repository dan saya mendapatkan 137 offenses yang terjadi karena saya melanggar guideline yang ditetapkan rubocop.

Setelah saya mempelajari dengan seksama ruby style guide yang tertera pada link diatas maka saya mencoba memperbaiki nya dan mempelajari bahwa:

  1. Tidak boleh terdapat double quoted
  2. Harus terdapat comment jika suatu class memiliki atribut
  3. Tidak boleh terdapat Tab
  4. Indentasi menggunakan 2 kali spasi
  5. Harus terdapat final line

Berikut ini merupakan screenshot hasil pengerjaan saya menggunakan code convention yang sudah benar

How to Integrate Slack Bot to our Slack Team

Kali ini, saya juga belajar untuk mengintegrasikan slack bot ke channel slack team kami, langkah-langkahnya adalah sebagai berikut:

  1. Silahkan menuju halaman api.slack.com/web lalu lakukan sign in
  2. Click pada link creating a new bot user
  3. Silahkan isi nama bot lalu click Add bot Integration
  4. Silahkan copy API Token
  5. Buat file .env dan yang isi nya adalah SLACK_API_TOKEN=
  6. Letakkan API Token yang sudah dicopy

Jangan lupa untuk menambahkan file .env ke .gitignore karena API Token bersifat rahasia.

--

--