Fakultas Ilmu Komputer UI

Commit 7bbf4b5b authored by Muhammad Ilham Peruzzi's avatar Muhammad Ilham Peruzzi
Browse files

update readme

parent 78f4680c
Pipeline #23988 failed with stages
in 1 minute and 12 seconds
......@@ -66,3 +66,72 @@ Dengan menerapkan test organization, selain struktur project yang kita buat menj
python manage.py test functional_tests.test_list_item_validation
```
Dengan begitu, kita tidak perlu melakukan test terhadap keseluruhan test jika hanya ingin menjalankan bagian tertentu dari test itu saja.
# Cerita Exercise 6
## Membuat 2 Mutant dan Test Case Untuk Membunuh Mutant
Pada Lab ini saya membuat dua buah mutant dengan menggunakan metode Relational Operator Replacement (ROR) pada fungsi untuk menampilkan komentar otomatis pada list.html. Saya tidak membuat mutant pada fungsi views.py dikarenakan logic untuk menampilkan komentar terdapat pada list.html dengan menggunakan templating pada html. Mutant yang saya buat ada dua, yaitu mengubah operator '<' menjadi '>' dan mengubah operator '==' menjadi '!='. Fungsi awalnya adalah sebagai berikut.
```bash
{% if list.item_set.all|length == 0 %}
<p>yey, waktunya berlibur</p>
{% elif list.item_set.all|length < 5 %}
<p>sibuk tapi santai</p>
{% else %}
<p>oh tidak</p>
{% endif %}
```
Mutant yang saya buat adalah sebagai berikut:
```bash
{% if list.item_set.all|length != 0 %}
...
```
Dan
```bash
...
{% elif list.item_set.all|length > 5 %}
...
```
Setelah membuat mutant, saya membuat sebuah test case untuk membuat mutant tersebut. Test case yang saya gunakan adalah mengecek apakah komentar yang ditampilkan sesuai dengan yang seharusnya ditampilkan berdasarkan jumlah to-do yang ada. Test tersebut bisa dilihat pada file functional_test/test_automatic_comment.py. Saat saya menjalankan test tersebut (sebelum mutant dibuat), test passed. Kemudian, setelah mutant dibuat, test menjadi failed karena output yang dihasilkan berbeda dari fungsi asli, menandakan mutant telah berhasil dibunuh secara strongly killed.
## Penggunaan Mutation Testing Tools (Django-mutpy)
Untuk melakukan mutation testing dengan tools django-mutpy, pertama saya melakukan instalasi dengan perintah
```bash
pip install django-mutpy
```
Lalu memasukkan modul djago-mutpy kedalam list app pada settings.py.
Setelah itu, saya menjalankan tools django-mutpy. Hasil yang diberikan adalah sebagai berikut.
```bash
[*] Mutation score [683.53529 s]: 58.7%
- all: 63
- killed: 37 (58.7%)
- survived: 26 (41.3%)
- incompetent: 0 (0.0%)
- timeout: 0 (0.0%)
```
Dari hasil tersebut, terlihat bahwa ada 37 mutant yang berhasil dibunuh dan 26 mutant yang masih hidup pada aplikasi yang saya buat dengan score total 58.7%. Untuk itu, saya membuat sebuah test baru untuk membunuh mutant yang masih hidup. Salah satu mutant yang masih hidup berkaitan dengan konfigurasi apliasi, sehingga saya membuat test sebagai berikut.
```bash
from django.apps import apps
from django.test import TestCase
from lists.apps import ListsConfig
class ListsConfigTest(TestCase):
def test_apps(self):
self.assertEqual(ListsConfig.name, 'lists')
self.assertEqual(apps.get_app_config('lists').name, 'lists')
```
Setelah dilakukan mutation testing ulang dengan django-mutpy, hasilnya adalah sebagai berikut
```bash
[*] Mutation score [647.52812 s]: 61.9%
- all: 63
- killed: 39 (61.9%)
- survived: 24 (38.1%)
- incompetent: 0 (0.0%)
- timeout: 0 (0.0%)
```
Terlihat score yang didapatkan meningkat menjadi 61.9% dan mutant yang survived berkurang, sehingga dapat disimpulkan ada mutant yang berhasil dibunuh setelah ditambahkan test baru tersebut.
\ 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