Fakultas Ilmu Komputer UI

Commit b0a1dbb8 authored by Ragil Al Badrun Pasaribu's avatar Ragil Al Badrun Pasaribu
Browse files

Refactor images and add TDD with Django

parent 55967d8a
...@@ -13,18 +13,18 @@ di tim kami ada: ...@@ -13,18 +13,18 @@ di tim kami ada:
<!--more--> <!--more-->
__Fata Nugraha__ dan __Ragil Al Badrun Pasaribu__ __Fata Nugraha__ dan __Ragil Al Badrun Pasaribu__
![fata](/assets/images/fata-edit.jpeg) ![fata](/assets/images/2019-02-26-introduction/fata-edit.jpeg)
![ragil](/assets/images/ragil-edit.jpeg) ![ragil](/assets/images/2019-02-26-introduction/ragil-edit.jpeg)
__Tirta Abimanyu Purnomo__ dan __Usama__ __Tirta Abimanyu Purnomo__ dan __Usama__
![abi](/assets/images/abi-edit.jpeg) ![abi](/assets/images/2019-02-26-introduction/abi-edit.jpeg)
![usama](/assets/images/usama-edit.jpeg) ![usama](/assets/images/2019-02-26-introduction/usama-edit.jpeg)
dan... dan...
__Yogi Lesmana__ __Yogi Lesmana__
![yogi](/assets/images/yogi-edit.jpeg) ![yogi](/assets/images/2019-02-26-introduction/yogi-edit.jpeg)
*Foto-foto di atas diambil saat _study tour_ tentang kapal. \*Foto-foto di atas diambil saat _study tour_ tentang kapal.
Dalam satu semester ini, tim kami akan mengembangkan suatu sistem untuk Dalam satu semester ini, tim kami akan mengembangkan suatu sistem untuk
memanajemen *log* yang merupakan proyek dari Badan Pengkajian dan Penerapan memanajemen *log* yang merupakan proyek dari Badan Pengkajian dan Penerapan
...@@ -35,7 +35,7 @@ yang berada di *data center* BPPT dan mengelola log tersebut agar pengguna dapat ...@@ -35,7 +35,7 @@ yang berada di *data center* BPPT dan mengelola log tersebut agar pengguna dapat
mendapat laporan tentang serangan yang sedang terjadi, mencari informasi yang mendapat laporan tentang serangan yang sedang terjadi, mencari informasi yang
terkait dengan log serangan, dan menganalisa suatu serangan. terkait dengan log serangan, dan menganalisa suatu serangan.
![Mockup](/assets/images/mockup.jpeg) ![Mockup](/assets/images/2019-02-26-introduction/mockup.jpeg)
Gambar 1: Mockup Dashboard Gambar 1: Mockup Dashboard
Salah satu tantangan yang saat ini berusaha kami pecahkan adalah masalah Salah satu tantangan yang saat ini berusaha kami pecahkan adalah masalah
......
...@@ -11,11 +11,11 @@ Halo, di post kali ini saya akan menjelaskan tentang _workflow_ tim kami dengan ...@@ -11,11 +11,11 @@ Halo, di post kali ini saya akan menjelaskan tentang _workflow_ tim kami dengan
Di Agile, semua pekerjaan yang akan dilakukan dibagi-bagi kedalam **Product Backlog Item** (PBI). Contoh: Fitur Login/Logout Di Agile, semua pekerjaan yang akan dilakukan dibagi-bagi kedalam **Product Backlog Item** (PBI). Contoh: Fitur Login/Logout
![pbi](/assets/images/pbi.jpg) ![pbi](/assets/images/2019-02-27-agile&tdd/pbi.jpg)
Lalu akan dipilih PBI apa yang akan dikerjakan pada rentang 2 minggu dari sekarang. Rentang 2 minggu tersebut disebut dengan **sprint** Lalu akan dipilih PBI apa yang akan dikerjakan pada rentang 2 minggu dari sekarang. Rentang 2 minggu tersebut disebut dengan **sprint**
![sprint](/assets/images/pbisprint.jpg) ![sprint](/assets/images/2019-02-27-agile&tdd/pbisprint.jpg)
Sebelum memulai sprint, PBI yang dipilih dipecah lagi menjadi unit pekerjaan terkecil yang disebut **task**. Contoh: Membuat test fungsi login. Sebelum memulai sprint, PBI yang dipilih dipecah lagi menjadi unit pekerjaan terkecil yang disebut **task**. Contoh: Membuat test fungsi login.
...@@ -23,11 +23,11 @@ Task-task tersebut akan diassign ke anggota tim setiap **Daily Stand Up**. Daily ...@@ -23,11 +23,11 @@ Task-task tersebut akan diassign ke anggota tim setiap **Daily Stand Up**. Daily
Setiap daily stand up, task-task yang sudah selesai ditandai menjadi done dan anggota tersebut bisa mengerjakan task yang lain. Setiap daily stand up, task-task yang sudah selesai ditandai menjadi done dan anggota tersebut bisa mengerjakan task yang lain.
![tasks](/assets/images/tasks.jpg) ![tasks](/assets/images/2019-02-27-agile&tdd/tasks.jpg)
Jika menggunakan project management tools seperti jira, dapat dilihat grafik jumlah task yang sudah selesai dikerjakan selama sprint berjalan. Disebut juga dengan **Burndown Chart**. Jika menggunakan project management tools seperti jira, dapat dilihat grafik jumlah task yang sudah selesai dikerjakan selama sprint berjalan. Disebut juga dengan **Burndown Chart**.
![burndown](/assets/images/burndownchart.png) ![burndown](/assets/images/2019-02-27-agile&tdd/burndownchart.png)
Setelah sprint selesai, dilakukan Sprint Retrospective untuk meninjau apakah ada kekurangan atau kelebihan kerja tim pada satu sprint sebelumnya. Setelah sprint selesai, dilakukan Sprint Retrospective untuk meninjau apakah ada kekurangan atau kelebihan kerja tim pada satu sprint sebelumnya.
...@@ -39,4 +39,4 @@ Untuk fitur backend, kami menggunakan library **unittest** bawaan Django. Untuk ...@@ -39,4 +39,4 @@ Untuk fitur backend, kami menggunakan library **unittest** bawaan Django. Untuk
Selama test belum _pass_, setiap commit message harus diawali dengan tag \[RED\]. Baru setelah semua test berhasil dipenuhi, commit message diawali dengan tag \[GREEN\]. Selama test belum _pass_, setiap commit message harus diawali dengan tag \[RED\]. Baru setelah semua test berhasil dipenuhi, commit message diawali dengan tag \[GREEN\].
![tddcycle](/assets/images/tddcycle.png) ![tddcycle](/assets/images/2019-02-27-agile&tdd/tddcycle.png)
...@@ -93,7 +93,7 @@ backend:deploy:staging: ...@@ -93,7 +93,7 @@ backend:deploy:staging:
- .gitlab-ci.yml - .gitlab-ci.yml
``` ```
![Paralel Pipeline](/assets/images/paralel-pipeline.png) ![Paralel Pipeline](/assets/images/2019-02-27-deployment/paralel-pipeline.png)
Karena kami menggunakan strategi __monorepo__, GitLab CI/CD di versi terbaru Karena kami menggunakan strategi __monorepo__, GitLab CI/CD di versi terbaru
menyediakan fitur yang cukup membantu dengan subtag `changes` dari tag `only` menyediakan fitur yang cukup membantu dengan subtag `changes` dari tag `only`
......
...@@ -12,7 +12,7 @@ yang kami dapatkan saat mencoba membuat API menggunakan Go. ...@@ -12,7 +12,7 @@ yang kami dapatkan saat mencoba membuat API menggunakan Go.
<!--more--> <!--more-->
Ternyata testing di dalam Go tidak semudah yang saya bayangkan. Ternyata testing di dalam Go tidak semudah yang saya bayangkan.
![](/assets/images/pikachu.jpeg) ![](/assets/images/2019-02-28-go-testing/pikachu.jpeg)
Karena selama ini saya dimanjakan dengan mudahnya mock function di bahasa yang Karena selama ini saya dimanjakan dengan mudahnya mock function di bahasa yang
bisa melakukan dynamic loading seperti `python` dan `Java`, ternyata melakukan bisa melakukan dynamic loading seperti `python` dan `Java`, ternyata melakukan
...@@ -29,11 +29,11 @@ menjadi masalah. ...@@ -29,11 +29,11 @@ menjadi masalah.
Pada saat pertama kali saya membaca ini, saya memikirkan hal yang sama dengan Pada saat pertama kali saya membaca ini, saya memikirkan hal yang sama dengan
apa yang dinyatakan oleh orang ini apa yang dinyatakan oleh orang ini
![](/assets/images/comment-1.png) ![](/assets/images/2019-02-28-go-testing/comment-1.png)
Tetapi saat saya membaca komentar ini, saya cukup setuju juga. Tetapi saat saya membaca komentar ini, saya cukup setuju juga.
![](/assets/images/comment-2.png) ![](/assets/images/2019-02-28-go-testing/comment-2.png)
**fair enough** **fair enough**
Kode yang didesain dengan bagus, selain memudahkan untuk testing, memudahkan kita Kode yang didesain dengan bagus, selain memudahkan untuk testing, memudahkan kita
......
...@@ -40,9 +40,9 @@ Berikut akan saya jelaskan secara singkat perintah beserta keterangannya: ...@@ -40,9 +40,9 @@ Berikut akan saya jelaskan secara singkat perintah beserta keterangannya:
**branch** - perintah ini dapat digunakan untuk membuat cabang baru, menghapus cabang spesifik, dan melist semua cabang lokal **branch** - perintah ini dapat digunakan untuk membuat cabang baru, menghapus cabang spesifik, dan melist semua cabang lokal
Perintah-perintah yang lainnya dapat dilihat selengkapnya di [sini] (https://about.gitlab.com/images/press/git-cheat-sheet.pdf) Perintah-perintah yang lainnya dapat dilihat selengkapnya di [sini](https://about.gitlab.com/images/press/git-cheat-sheet.pdf)
![](/assets/images/git.png) ![](/assets/images/2019-02-28-gpt/git.png)
**Persona** **Persona**
...@@ -58,7 +58,7 @@ Menurut Nielsen, terdapat 4 buah perspektif berbeda dari persona, yaitu: ...@@ -58,7 +58,7 @@ Menurut Nielsen, terdapat 4 buah perspektif berbeda dari persona, yaitu:
**Fictional** - muncul bukan dari riset pengguna, melainkan dari pengalaman tim desain UX. **Fictional** - muncul bukan dari riset pengguna, melainkan dari pengalaman tim desain UX.
![](/assets/images/persona.jfif) ![](/assets/images/2019-02-28-gpt/persona.jfif)
**TDD** **TDD**
...@@ -71,6 +71,6 @@ Inti dari TDD adalah Red-Green-Refactor. ...@@ -71,6 +71,6 @@ Inti dari TDD adalah Red-Green-Refactor.
**Refactor** - Inti dari fase ini adalah mengubah kode menjadi lebih baik **Refactor** - Inti dari fase ini adalah mengubah kode menjadi lebih baik
![](/assets/images/tdd.png) ![](/assets/images/2019-02-28-gpt/tdd.png)
Sekian cerita saya untuk minggu ini. Terima kasih telah membaca. Sekian cerita saya untuk minggu ini. Terima kasih telah membaca.
\ No newline at end of file
...@@ -15,7 +15,7 @@ Awalnya rencana kami dalam menyelesaikan _project_ ini menggunaka **go** dan **r ...@@ -15,7 +15,7 @@ Awalnya rencana kami dalam menyelesaikan _project_ ini menggunaka **go** dan **r
Setelah menyelesaikan _Sprint 1_ kami melakukan _Sprint Retrospective_ Setelah menyelesaikan _Sprint 1_ kami melakukan _Sprint Retrospective_
![ ](/assets/images/usama_sprint_retro.png) ![ ](/assets/images/2019-03-20-agile/usama_sprint_retro.png)
Di _Sprint Retrospective_ yang pertama masih biasa-biasa saja, mungkin karena fitur kami diterima oleh _Product Owner_ dan _Scrum Master_ akan memberikan satu **teh kotak** kepada anggota yang paling produktif pada _Daily Scrum_ setelah ini. Setelah melakukan _cycle_ yang kedua barulah _Sprint Retrospective_ berbeda dari yang pertama, mungkin karena fitur kami tidak jadi (berbeda dengan _Sprint Review 1_). _Sprint Retrospective_ ini juga banyak menghasilkan _feedback_ negatif kemudian Pak Adin menyuruh kita untuk mencari _Silver lining_ dari _Sprint_ yang telah kita lakukan, akhirnya kami-pun menemukan beberapa. Di _Sprint Retrospective_ yang pertama masih biasa-biasa saja, mungkin karena fitur kami diterima oleh _Product Owner_ dan _Scrum Master_ akan memberikan satu **teh kotak** kepada anggota yang paling produktif pada _Daily Scrum_ setelah ini. Setelah melakukan _cycle_ yang kedua barulah _Sprint Retrospective_ berbeda dari yang pertama, mungkin karena fitur kami tidak jadi (berbeda dengan _Sprint Review 1_). _Sprint Retrospective_ ini juga banyak menghasilkan _feedback_ negatif kemudian Pak Adin menyuruh kita untuk mencari _Silver lining_ dari _Sprint_ yang telah kita lakukan, akhirnya kami-pun menemukan beberapa.
...@@ -24,6 +24,6 @@ Di _Sprint Retrospective_ yang pertama masih biasa-biasa saja, mungkin karena fi ...@@ -24,6 +24,6 @@ Di _Sprint Retrospective_ yang pertama masih biasa-biasa saja, mungkin karena fi
Ngoding bareng ini sudah bisa saya rasakan dampaknya, karena banyak _tasks_ yang selesai dari sebelumnya. Hal ini dikarenakan saat ngoding bareng kami berkomitmen untuk bekerja. Ngoding bareng ini sudah bisa saya rasakan dampaknya, karena banyak _tasks_ yang selesai dari sebelumnya. Hal ini dikarenakan saat ngoding bareng kami berkomitmen untuk bekerja.
![_Scrum Board_ terakhir kami, sudah ada WIP yang pindah ke DONE karena ngoding bareng](/assets/images/usama_latest_scrum_board.jpg) ![_Scrum Board_ terakhir kami, sudah ada WIP yang pindah ke DONE karena ngoding bareng](/assets/images/2019-03-20-agile/usama_latest_scrum_board.jpg)
Terima kasih sudah membaca. Terima kasih sudah membaca.
\ No newline at end of file
...@@ -9,7 +9,7 @@ Pengalaman melakukan TDD (Test Driven Development) selama pengerjaan _project_. ...@@ -9,7 +9,7 @@ Pengalaman melakukan TDD (Test Driven Development) selama pengerjaan _project_.
<!--more--> <!--more-->
![http://www.agilenutshell.com/test_driven_development](/assets/images/usama_tdd.png) ![http://www.agilenutshell.com/test_driven_development](/assets/images/2019-03-20-tdd/usama_tdd.png)
Saya mendapat tugas untuk membuat model dari fitur _users_. Awalnya saya kebingungan untuk membuat _test_ yang akan dilakukan, karena saya berpikir jika menggunakan test untuk _count_ atau _create_ bukan merupakan TDD karena saya menguji fungsi yang sudah dibuat oleh **django**. Setelah berkonsultasi dengan Pak Adin saya diberi sebuah pencerahan. TDD bisa dilakukan dengan menentukan atribut apa yang akan ada di model seperti `.name`, `.username`, dll. Saya mendapat tugas untuk membuat model dari fitur _users_. Awalnya saya kebingungan untuk membuat _test_ yang akan dilakukan, karena saya berpikir jika menggunakan test untuk _count_ atau _create_ bukan merupakan TDD karena saya menguji fungsi yang sudah dibuat oleh **django**. Setelah berkonsultasi dengan Pak Adin saya diberi sebuah pencerahan. TDD bisa dilakukan dengan menentukan atribut apa yang akan ada di model seperti `.name`, `.username`, dll.
......
---
layout: post
title: TDD with Django
date: 2019-04-01 14.01.23 +0700
author: ragil
---
Untuk melakukan TDD (Test Driven Development), kita harus mengetahui bagaimana cara membuat test
dengan baik dan benar dalam _framework_ yang digunakan. Dalam blog ini akan dijelaskan secara
singkat bagaimana cara membuat test menggunakan framework Django.
<!--more-->
Untuk membuat test, maka pertama-tama kita harus membuat class yang meng-inherit class `django.test.TestCase`.
```python
from django.test import TestCase
from myapp.models import Human
class HumanTest(TestCase):
pass
```
Lalu di dalam class buat tiap fungsi untuk melakukan test. Contoh kita ingin melakukan mengecek nama
dari object Human yang dibuat.
```python
from django.test import TestCase
from myapp.models import Human
class HumanTest(TestCase):
def testHumanName(self):
human = Human.objects.create(name="Fata")
self.assertEqual(human.get_name(), "Fata")
```
Di atas kita melakukan pengecekan dengan `self.assertEqual()`. Tidak hanya `assertEqual()` Python juga
menyediakan seperti `assertIn` dan sebagainya, silahkan di-explore sendiri :D
Kadang kala kita membutuhkan object yang dipakai di berbagai fungsi test. Kita bisa saja membuat object
di tiap fungsi test, tetapi ini akan sangat melelahkan. Karenanya, kita dapat memanfaatkan fungsi
`setUp()` untuk itu.
```python
from django.test import TestCase
from myapp.models import Human
class HumanTest(TestCase):
def setUp(self):
self.human = human = Human.objects.create(name="Fata")
def testHumanName(self):
self.assertEqual(self.human.get_name(), "Fata")
```
Sekian tutorial singkat test dengan Django :D
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment