Fakultas Ilmu Komputer UI

Commit f0aa39e8 authored by Tirta Abimanyu Purnomo's avatar Tirta Abimanyu Purnomo
Browse files

Merge branch 'master' of gitlab.cs.ui.ac.id:ppl2019-c7/blog

parents 8bfa49f9 27f44239
......@@ -29,15 +29,19 @@ Ngoding bareng ini sudah bisa saya rasakan dampaknya, karena banyak _tasks_ yang
#### Berikut ini merupakan pengalaman tim kami dalam menjalankan agile
**1. Individuals and Interactions Over Processes and Tools**
    Kami melakukan kegiatan **ngoding bareng** agar kami bisa mengerti setiap individu dan interaksi di dalam tim kami berjalan baik. Saat melakukan ngoding bareng saat kami merasa kebingungan kami biasanya berdiskusi dalam menyelesaikan permasalahan tersebut. Saat itu Abi dan Ragil berdiskusi dengan Fata dalam mengerjakan _Front End_.
**2. Working Software Over Comprehensive Documentation**
    Kami melakukan demo secara langsung kepada _client_ kami saat _Sprint review_ (saat fitur jadi tentunya).
**3. Customer Collaboration Over Contract Negotiation**
    Hubungan antara kami dengan _Product Owner_ semakin lama semakin dekat. PO juga mempertemukan kami dengan staff-staffnya agar dapat mempermudah komunikasi kami dengan PO. Semenjak itu komunikasi kami semakin baik, kami juga meminta beberapa saran dari PO kami mengenai apa yang telah kami kerjakan dan akan kerjakan atau apabila terdapat _request_ fitur lain.
**4. Respondong to Change Over Following a Plan**
    Pada awalnya tim kami ingin menggunakan **go** dalam mengimplementasikan _backend_, tetapi satu hari sebelum _sprint review 1_ kami berdiskusi untuk mengganti **go** dengan **django** karena jika menggunakan **go** akan memakan waktu yang lebih banyak jika dibandingkan dengan menggunakan **django**.
Mungkin hanya ini yang bisa saya ceritakan untuk sementara ini.
\ No newline at end of file
---
layout: post
title: clean code
date: 2019-04-02 09:33:43 +0700
author: usama
---
Di blog ini saya akan menuliskan tentang clean code dan apa saja yang sudah saya kerjakan yang menurut saya sudah masuk ke dalam kategori clean code. Selamat membaca :).
<!--more-->
<center>
![ ](/assets/images/2019-04-02-clean-code/clean-code.png)
`https://engineering.videoblocks.com/these-four-clean-code-tips-will-dramatically-improve-your-engineering-teams-productivity-b5bd121dd150`
</center>
Berikut ini merupakan tips-tips yang saya dapatkan dari medium yang berjudul **These four _"clean code"_ tips will dramatically improve your engineering team's productivity**
1. "If it isn't tested, it's broken"
Karena kami melakukan TDD dalam men-_develop_ pekerjaan kami, maka saya kira hal ini sudah kami lakukan.
<center>
![ ](/assets/images/2019-04-02-clean-code/1.png)
</center>
2. Choose meaningful names
Penaamaan variabel memang menjadi hal sulit bagi programmer, tapi dalam PPL ini kami berusaha sebaik mungkin untuk menggunakan nama variabel yang representatif. Contohnya saat menamakan atribut dari model yang dibuat di bawah ini.
<center>
![ ](/assets/images/2019-04-02-clean-code/2.png)
</center>
3. Classes and functions should be small and obey the Single Responsibility Principle (SRP)
Saya akan memberikan contoh kode `users/tests.py`.
Daripada kode di bawah ini
```python
class UserTest(TestCase):
def test_user_attributes(self):
self.user = UserFactory(first_name="Usama",
last_name="Ismail", role="staff")
self.assertTrue(hasattr(self.user, "role"))
self.assertTrue(hasattr(self.user, "created_at"))
self.assertTrue(hasattr(self.user, "updated_at"))
self.assertTrue(hasattr(self.user, "deactivated_at"))
self.assertTrue(hasattr(self.user, "last_accessed_at"))
self.assertTrue(hasattr(self.user, "last_accessed_ip"))
self.assertEqual(str(self.user), "Usama Ismail")
```
Lebih baik pilih yang ini.
```python
class UserTest(TestCase):
def setUp(self):
self.user = UserFactory(first_name="Usama", last_name="Ismail", role="staff")
def test_user_has_attribute_role(self):
self.assertTrue(hasattr(self.user, "role"))
def test_user_has_attribute_created_at(self):
self.assertTrue(hasattr(self.user, "created_at"))
def test_user_has_attribute_updated_at(self):
self.assertTrue(hasattr(self.user, "updated_at"))
def test_user_has_attribute_deactivated_at(self):
self.assertTrue(hasattr(self.user, "deactivated_at"))
def test_user_has_attribute_last_accessed_at(self):
self.assertTrue(hasattr(self.user, "last_accessed_at"))
def test_user_has_attribute_last_accessed_ip(self):
self.assertTrue(hasattr(self.user, "last_accessed_ip"))
def test_str_method(self):
self.assertEqual(str(self.user), "Usama Ismail")
```
Mengecilkan task berpengaruh.
4. Functions should have no side effects
Fungsi di bawah tidak menghasilkan side effect, karena hanya mengambil/_read_ models, tidak mengubah database dengan menghapus/edit/menambah data.
```python
class ServerDetailView(generics.RetrieveAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = Server.objects.all()
serializer_class = ServerSerializer
lookup_url_kwarg = "id"
```
saat fungsi ini dijalankan, maka kita mendapatkan data dan tidak ada hal lain yang terjadi. Berbeda dengan menjalankan kode berikut.
```javascript
function getUserByEmailAndPassword(email, password) {
let user = UserService.getByEmailAndPassword(email, password);
if (user) {
LoginService.loginUser(user); // Log user in, add cookie (Side effect!!!!)
}
return user;
}
```
Hal ini membuat user menjadi login saat program dijalankan, padahal seharusnya hanya untuk mendapatkan user dengan email dan password.
Sekian yang bisa saya ceritakan.
\ No newline at end of file
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