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:
<!--more-->
__Fata Nugraha__ dan __Ragil Al Badrun Pasaribu__
![fata](/assets/images/fata-edit.jpeg)
![ragil](/assets/images/ragil-edit.jpeg)
![fata](/assets/images/2019-02-26-introduction/fata-edit.jpeg)
![ragil](/assets/images/2019-02-26-introduction/ragil-edit.jpeg)
__Tirta Abimanyu Purnomo__ dan __Usama__
![abi](/assets/images/abi-edit.jpeg)
![usama](/assets/images/usama-edit.jpeg)
![abi](/assets/images/2019-02-26-introduction/abi-edit.jpeg)
![usama](/assets/images/2019-02-26-introduction/usama-edit.jpeg)
dan...
__Yogi Lesmana__
![yogi](/assets/images/yogi-edit.jpeg)
*Foto-foto di atas diambil saat _study tour_ tentang kapal.
![yogi](/assets/images/2019-02-26-introduction/yogi-edit.jpeg)
\*Foto-foto di atas diambil saat _study tour_ tentang kapal.
Dalam satu semester ini, tim kami akan mengembangkan suatu sistem untuk
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
mendapat laporan tentang serangan yang sedang terjadi, mencari informasi yang
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
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
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**
![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.
......@@ -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.
![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**.
![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.
......@@ -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\].
![tddcycle](/assets/images/tddcycle.png)
![tddcycle](/assets/images/2019-02-27-agile&tdd/tddcycle.png)
......@@ -93,7 +93,7 @@ backend:deploy:staging:
- .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
menyediakan fitur yang cukup membantu dengan subtag `changes` dari tag `only`
......
......@@ -12,7 +12,7 @@ yang kami dapatkan saat mencoba membuat API menggunakan Go.
<!--more-->
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
bisa melakukan dynamic loading seperti `python` dan `Java`, ternyata melakukan
......@@ -29,11 +29,11 @@ menjadi masalah.
Pada saat pertama kali saya membaca ini, saya memikirkan hal yang sama dengan
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.
![](/assets/images/comment-2.png)
![](/assets/images/2019-02-28-go-testing/comment-2.png)
**fair enough**
Kode yang didesain dengan bagus, selain memudahkan untuk testing, memudahkan kita
......
......@@ -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
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**
......@@ -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.
![](/assets/images/persona.jfif)
![](/assets/images/2019-02-28-gpt/persona.jfif)
**TDD**
......@@ -71,6 +71,6 @@ Inti dari TDD adalah Red-Green-Refactor.
**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.
\ No newline at end of file
......@@ -15,7 +15,7 @@ Awalnya rencana kami dalam menyelesaikan _project_ ini menggunaka **go** dan **r
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.
......@@ -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.
![_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.
\ No newline at end of file
......@@ -9,7 +9,7 @@ Pengalaman melakukan TDD (Test Driven Development) selama pengerjaan _project_.
<!--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.
......
---
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