Professional Documents
Culture Documents
Dibuat untuk:
Pelengkap Mata Kuliah Pengujian Perangkat Lunak
Program Studi Teknik Informatika UAJY
2017
halaman 1
1. Checklist
1.1 Structure
Checklist
No Item Keterangan
4 Are there any blocks of repeated source code that can be Ya. Lihat keterangan No 4 di
combines to form a single module? bawah. ()
5 Is any module very complex and should be decomposed Ya. Lihat keterangan No 5 di
into two or more modules? bawah.
Keterangan No. 4
Are there any blocks of repeated source code that can be combines to form a single module?
Terdapat potongan code pada source yang dapat diulang-ulang / digabungkan. Walaupun
berada di prosedur yang berbeda yaitu pada pada prosedur insertFirst dan insertLast, potongan
code tersebut dapat dijadikan 1 fungsi baru, yaitu alokasi.
Keterangan No.5
Is any module very complex and should be decomposed into two or more modules?
Pada Fungsi insertAfter terlalu kompleks dan dapat dipisahkan menjadi 3 fungsi, yaitu Alokasi,
findNode, dan insertAfter.
halaman 2
1.2 Variables
Checklist
No Item Keterangan
1 Are all variables clearly defined with appropriate names? Ya. Semua variable yang
didefinisikan sudah sesuai.
()
2 Are there any redundant and unused variables? Ya. Lihat keterangan No 2 di
bawah.
3 Is there unnecessary usage of global variables? Melalui kodetersebut, tidak
ada variable global yang tidak
diperlukan
4 Are variable declarations properly commented? Tidak, pada pendeklarasian
variabel tidak ada komentar
yang diberikan
5 Are all variable names spelt correctly and consistently? Tidak, Lihat Keterangan No.3
halaman 3
Keterangan No.2
Are there any redundant and unused variables?
Terdapat variable ListTemp yang tidak pernah digunakan. Terdapat variable data dan angka yang
mempunyai fungsi yang sama yaitu menyimpan input user untuk dimasukkan ke List, gunakan
salah satu saja.
Keterangan No.3
Format penulisan variabel pada file main.c tidak konsisten, ada yang dituliskan dengan huruf
kecil semua dan ada yang menggunakan perpaduan huruf besar dan kecil, serta ada yang
menggunakan huruf besar pada tiap awalan kata
1.3 Comments
Checklist
No Item Keterangan
1 Is the source code well commented and documented Tidak, lihat keterangan No.1
properly?
2 Are all comments consistent with the source code? Tidak, lihat keterangan No.2
halaman 4
Keterangan No.1
Terdapat bagian code pada file source.c yang tidak rapi
Keterangan No.2
Terdapat Kesalahan komen pada fungsi deleteAfter dan deleteAt, fungsi yang dibuat adalah fungsi untuk
menghapus, tetapi komen yang diberikan adalah komen untuk melakukan penyisipan data kedalam list.
halaman 5
Keterangan No. 3
Pada prosedur delete All terdapat perulangan while((*L).First->next!=NULL) yang berarti program akan
terus melakukkan loop sampai nilai bernilai NULL, namun pada code selanjutnya yaitu memanggil
prosedur deleteFirst disini tidak semua data / node akan terhapus karena masih menyisakan data
dibelakang.
1.5 General
Checklist
No Item Keterangan
1 Tidak. Lihat keterangan No 1
Is every allocated memory de-allocated? di bawah.
2 Ya, source code telah
menggunakan exception
handling dimana exception
yang diterapkan adalah
dengan cara klasik/primitif
yaitu menggunakan kondisi
Does the source code make use of exception handling? (if-else)
3 Ya. Lihat keterangan No 3 di
Is there any identifier that conflicts with the keyword? bawah. ()
Keterangan No.3
Is there any identifier that conflicts with the keyword?
Ya, melalui kode di bawah variable tidak diperbolehkan dinamakan for, hal ini dikarenakan akan terjadi
kesalahan(error) saat perulangan for akan dilakukan.
halaman 6
header.h
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct
{
address First;
}List;
halaman 7
source.c
#include "header.h"
int isEmpty(List L)
//mereturnkan true jika list kosong
{
if(L.First == NULL)
return 1;
else
return 0;
}
void insertFirst(List *L, int databaru)
//melakukan penyisipan di depan list
{
address P;
P = (Node*) malloc(sizeof(Node));
P->data = databaru;
P->next = NULL;
P->next = (*L).First;
(*L).First = P;
printf("Inserted ");
}
void insertLast(List *L, int databaru)
//melakukan penyisipan di belakang list
{
address last;
if(isEmpty(*L))
insertFirst(&(*L), databaru);
else
{
address P;
P = (Node*) malloc(sizeof(Node));
P->data = databaru;
P->next = NULL;
last = (*L).First;
while(last->next != NULL)
{
last = last->next;
}
last->next = P;
printf("Inserted ");
}
}
void deleteFirst(List *L)
//melakukan penghapusan node paling depan
{
halaman 8
address del;
if(isEmpty(*L))
printf("List Kosong...");
else
{
del = (*L).First;
(*L).First = (*L).First->next;
free(del);
printf("Deleted ");
}
}
void deleteLast(List *L)
//melakukan penghapusan node paling belakang
{
address bantu, hapus;
if(isEmpty(*L))
printf("List Kosong...");
else
{
if((*L).First->next == NULL)
{
deleteFirst(&(*L));
}
else
{
bantu = (*L).First;
while(bantu->next->next !=NULL)
{
bantu = bantu->next;
}
hapus = bantu->next;
bantu->next = NULL;
printf("Deleted ");
}
}
}
void showList(List L)
//menampilkan data semua node
{
if(isEmpty(L))
printf("List Kosong...");
else
{
while(L.First!=NULL)
{
printf("%d ",L.First->data);
}
}
}
halaman 9
}
printf("List Berhasil Dikosongkan...");
}
if(isEmpty(*L))
insertFirst(&(*L)), databaru);
else
{
address bantu = (*L).First;
while (bantu!=NULL && bantu->data!=x)
{
bantu=bantu->next;
}
if(cari==NULL)
printf("Data Sebelum tidak ditemukan...");
else
{
address P;
P = (Node*) malloc(sizeof(Node));
P->data = databaru;
P->next = NULL;
P->next=cari->next;
cari->next=P;
printf("Inserted ");
}
}
}
hapus = findNode((*L),datahapus);
if(hapus==NULL)
printf("Data tidak ditemukan...");
else
halaman 10
{
if (hapus==(*L).First)
deleteFirst(&(*L));
else
{
cari = (*L).First;
while(cari->next!=hapus)
{
cari = cari->next;
}
cari->next=hapus->next;
free(hapus);
printf("Deleted ");
}
}
}
cari = findNode((*L),datasebelum);
if(cari==NULL)
printf("Data Sebelum tidak ditemukan...");
else
{
if(cari->next==NULL)
printf("Data Sebelum terletak di akhir List...");
else
{
hapus = cari->next;
cari->next = cari->next->next;
free(hapus);
printf("Deleted ");
}
}
}
main.c
#include "header.h"
do
{
halaman 11
system("cls");
printf("---=== Menu ===---\n");
printf(" 1. Insert First\n");
printf(" 2. Insert Last\n");
printf(" 3. Delete First\n");
printf(" 4. Delete Last\n");
printf(" 5. Show List\n");
printf(" 6. Delete All\n");
printf(" 7. Cari Data\n");
printf(" 8. Insert After\n");
printf(" 9. Delete At\n");
printf(" 10. Delete After\n");
printf(" 0. Exit\n");
printf("Masukkan pilihan : ");scanf("%d",&pil);
switch(pil)
{
case 1 :
{
printf("Masukkan data : ");scanf("%d",&data);
insertFirst(&myList,data);
getch();
break;
}
case 2 :
{
printf("Masukkan data : ");scanf("%d",&angka);
insertLast(&myList,angka);
getch();
break;
}
case 3 :
{
deleteFirst(&myList);
getch();
break;
}
case 4 :
{
deleteLast(&myList);
getch();
break;
}
case 5 :
{
showList(myList);
getch();
break;
}
case 6 :
{
deleteAll(&myList);
getch();
break;
}
case 7 :
{
halaman 12
printf("Cari data : ");scanf("%d",&data);
cari = findNode2(myList, data);
if (cari == NULL)
printf("Data tidak ditemukan...");
else
printf ("Data %d ditemukan pada alamat %x",cari->data,cari);
getch();
break;
}
case 8 :
{
printf("Masukkan data : ");scanf("%d",&data);
printf("Sisipkan setelah data : ");scanf("%d",&datasebelum);
insertAfter(&myList,datasebelum,data);
getch();
break;
}
case 9 :
{
printf("Masukkan data yang akan dihapus : ");scanf("%d",&data);
deleteAt(&myList,data);
getch();
break;
}
case 10 :
{
printf("Hapus setelah data : ");scanf("%d",&datasebelum);
deleteAfter(&myList,datasebelum);
getch();
break;
}
}
}while(pil!=0);
system("pause");
return 0;
}
halaman 13