TDD IN PPL C⁶

Fachrur Rozi
Sulang
Published in
2 min readApr 18, 2018

Pada kesempatan kali ini saya akan menjelaskan mengenai Test Driven Development atau biasa disingkat menjadi TDD.

TDD adalah salah satu proses dalam pengembangan perangkat lunak (SDLC) yang mengubah system requirements menjadi test case yang spesifik, lalu software akan dirancang sedemikian hingga agar bisa lolos dari test case tersebut.

Langkah-langkah yang dilakukan ketika merancang TDD di dalam perkuliahan PPL, khususnya kelompok C6 adalah sebagai berikut.

  1. Membuat system requirement menjadi kerangka (stub) fungsi-fungsi yang akan diterapkan.
  2. Membuat test case yang sesuai dengan system requirements. Test case yang dirancang harus mencakup seluruh kemungkinan dari system requirements. Ketika tahap ini commit message yang diberikan adalah [RED]
  3. Membuat implementasi dari fungsi yang telah dibuat kerangkanya pada tahap (1).
  4. Menjalankan test-case dan memastikan bahwa setiap implementasi fungsi lolos seluruh test case. Tahap ini diberikan commit message [GREEN]

Kelompok PPL C6, menggunakan django framework sebagai dapur pacu backendnya, sehingga TDD yang dilakukan adalah TDD yang ada di dalam django.

beberapa contoh TDD yang saya implementasikan selama dua minggu terakhir adalah impelentasi login untuk admin.

berikut adalah langkah-langkah yang dilakukan.

  1. membuat kerangka fungsi
from rest_framework.views import APIViewclass LoginAdminApiView(APIView):

def post(self, request, format=None):
pass
  1. membuat test case (positive, negative test case)
from rest_framework.test import APITestCaseclass AdminLoginApiViewTestCase(APITestCase):def setUp(self):
. . . .
def test_admin_login_accepted(self):payload = {"username": self.username_admin,"email": self.email_admin,"password": self.password_admin,}response = self.client.post(self.url, data=payload)self.assertEquals(200, response.status_code)def test_admin_login_forbidden(self):. . . .self.assertEquals(403, response.status_code)def test_admin_login_wrong_password(self):. . . .self.assertEquals(401, response.status_code)def test_admin_login_wrong_user(self):. . . .self.assertEquals(401, response.status_code)
  1. implementasi fungsi
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import permissions
from rest_framework import status
class LoginAdminApiView(APIView):permission_classes = (permissions.AllowAny,)def authenticate(self, username, password):

try:
user = User.objects.get(username=username)
if user.check_password(password):
return user
else:
message = {
'message': 'Wrong Password'}return Response(message,
status=status.HTTP_401_UNAUTHORIZED)
except User.DoesNotExist:
message = {
'message': 'Username Not Found'
}
return Response(message,
status=status.HTTP_401_UNAUTHORIZED)
def post(self, request, format=None):
__USERNAME__ = request.data['username']
__PASSWORD__ = request.data['password']
res = self.authenticate(__USERNAME__, __PASSWORD__)if type(res) == Response:
return res
user = res
if not user.is_staff:
message = {
'message': 'Permission denied'
}
return Response(message,
status=status.HTTP_403_FORBIDDEN)
serializer = UserSerializer(user)
auth_login(request, user)return Response(serializer.data,
status=status.HTTP_200_OK)

Keuntungan yang didapatkan ketika mengimplementasikan TDD adalah:

  1. Acceptance Criteria, TDD membantu kita dalam menentukan arah pengembangan perangkat lunak. Dengan TDD kita tidak perlu khawatir dengan kesalahan dalam kodingan.
  2. Focus, TDD membantu kita fokus dalam mengimplementasikan system requirements. kita cukup mengikuti cakupan dari test case yang telah kita definisikan sebelumnya, sehingga kita tidak akan mengimplementasikan hal yang tidak dibutuhkan.

--

--